summaryrefslogtreecommitdiff
path: root/core/java/android
diff options
context:
space:
mode:
authorWinson Chung <winsonc@google.com>2020-04-13 16:58:07 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2020-04-13 16:58:07 +0000
commit3908fb22b66a943ffeb4ebe31f4f81600733de04 (patch)
tree4e84fb3a1122b7eb662270ae0e054836a831608a /core/java/android
parent83e0ddc69beeb705f1ef795305b470d5f7706200 (diff)
parent1df39e2cf6baf6441636ef69f8f978bf51a27462 (diff)
Merge "Send task description changed though task org taskInfoChanged" into rvc-dev
Diffstat (limited to 'core/java/android')
-rw-r--r--core/java/android/app/ActivityManager.java34
-rw-r--r--core/java/android/window/TaskEmbedder.java24
-rw-r--r--core/java/android/window/TaskOrganizer.java13
-rw-r--r--core/java/android/window/TaskOrganizerTaskEmbedder.java37
-rw-r--r--core/java/android/window/VirtualDisplayTaskEmbedder.java18
-rw-r--r--core/java/android/window/WindowContainerToken.java13
6 files changed, 76 insertions, 63 deletions
diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java
index b6d519ae5d2b..fd73632632ff 100644
--- a/core/java/android/app/ActivityManager.java
+++ b/core/java/android/app/ActivityManager.java
@@ -69,6 +69,7 @@ import android.os.SystemProperties;
import android.os.UserHandle;
import android.os.UserManager;
import android.os.WorkSource;
+import android.text.TextUtils;
import android.util.ArrayMap;
import android.util.DisplayMetrics;
import android.util.Singleton;
@@ -1597,6 +1598,39 @@ public class ActivityManager {
+ " resizeMode: " + ActivityInfo.resizeModeToString(mResizeMode)
+ " minWidth: " + mMinWidth + " minHeight: " + mMinHeight;
}
+
+ @Override
+ public boolean equals(Object obj) {
+ if (!(obj instanceof TaskDescription)) {
+ return false;
+ }
+
+ TaskDescription other = (TaskDescription) obj;
+ return TextUtils.equals(mLabel, other.mLabel)
+ && TextUtils.equals(mIconFilename, other.mIconFilename)
+ && mIcon == other.mIcon
+ && mColorPrimary == other.mColorPrimary
+ && mColorBackground == other.mColorBackground
+ && mStatusBarColor == other.mStatusBarColor
+ && mNavigationBarColor == other.mNavigationBarColor
+ && mEnsureStatusBarContrastWhenTransparent
+ == other.mEnsureStatusBarContrastWhenTransparent
+ && mEnsureNavigationBarContrastWhenTransparent
+ == other.mEnsureNavigationBarContrastWhenTransparent
+ && mResizeMode == other.mResizeMode
+ && mMinWidth == other.mMinWidth
+ && mMinHeight == other.mMinHeight;
+ }
+
+ /** @hide */
+ public static boolean equals(TaskDescription td1, TaskDescription td2) {
+ if (td1 == null && td2 == null) {
+ return true;
+ } else if (td1 != null && td2 != null) {
+ return td1.equals(td2);
+ }
+ return false;
+ }
}
/**
diff --git a/core/java/android/window/TaskEmbedder.java b/core/java/android/window/TaskEmbedder.java
index 45ab310c5148..2ead37a9397d 100644
--- a/core/java/android/window/TaskEmbedder.java
+++ b/core/java/android/window/TaskEmbedder.java
@@ -26,7 +26,6 @@ import android.app.ActivityTaskManager;
import android.app.ActivityView;
import android.app.IActivityTaskManager;
import android.app.PendingIntent;
-import android.app.TaskStackListener;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
@@ -129,7 +128,6 @@ public abstract class TaskEmbedder {
protected SurfaceControl.Transaction mTransaction;
protected SurfaceControl mSurfaceControl;
- protected TaskStackListener mTaskStackListener;
protected Listener mListener;
protected boolean mOpened; // Protected by mGuard.
@@ -170,13 +168,6 @@ public abstract class TaskEmbedder {
if (!onInitialize()) {
return false;
}
-
- mTaskStackListener = createTaskStackListener();
- try {
- mActivityTaskManager.registerTaskStackListener(mTaskStackListener);
- } catch (RemoteException e) {
- Log.e(TAG, "Failed to register task stack listener", e);
- }
if (mListener != null && isInitialized()) {
mListener.onInitialized();
}
@@ -187,11 +178,6 @@ public abstract class TaskEmbedder {
}
/**
- * @return the task stack listener for this embedder
- */
- public abstract TaskStackListener createTaskStackListener();
-
- /**
* Whether this container has been initialized.
*
* @return true if initialized
@@ -420,16 +406,6 @@ public abstract class TaskEmbedder {
mSurfaceControl.release();
boolean reportReleased = onRelease();
-
- if (mTaskStackListener != null) {
- try {
- mActivityTaskManager.unregisterTaskStackListener(mTaskStackListener);
- } catch (RemoteException e) {
- Log.e(TAG, "Failed to unregister task stack listener", e);
- }
- mTaskStackListener = null;
- }
-
if (mListener != null && reportReleased) {
mListener.onReleased();
}
diff --git a/core/java/android/window/TaskOrganizer.java b/core/java/android/window/TaskOrganizer.java
index 5098b4440070..f661d9af5999 100644
--- a/core/java/android/window/TaskOrganizer.java
+++ b/core/java/android/window/TaskOrganizer.java
@@ -16,6 +16,7 @@
package android.window;
+import android.annotation.BinderThread;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.RequiresPermission;
@@ -39,7 +40,7 @@ public class TaskOrganizer extends WindowOrganizer {
* and receive taskVanished callbacks in the process.
*/
@RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS)
- public void registerOrganizer(int windowingMode) {
+ public final void registerOrganizer(int windowingMode) {
try {
getController().registerTaskOrganizer(mInterface, windowingMode);
} catch (RemoteException e) {
@@ -49,7 +50,7 @@ public class TaskOrganizer extends WindowOrganizer {
/** Unregisters a previously registered task organizer. */
@RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS)
- public void unregisterOrganizer() {
+ public final void unregisterOrganizer() {
try {
getController().unregisterTaskOrganizer(mInterface);
} catch (RemoteException e) {
@@ -57,13 +58,17 @@ public class TaskOrganizer extends WindowOrganizer {
}
}
+ @BinderThread
public void onTaskAppeared(@NonNull ActivityManager.RunningTaskInfo taskInfo) {}
+ @BinderThread
public void onTaskVanished(@NonNull ActivityManager.RunningTaskInfo taskInfo) {}
- public void onTaskInfoChanged(@NonNull ActivityManager.RunningTaskInfo info) {}
+ @BinderThread
+ public void onTaskInfoChanged(@NonNull ActivityManager.RunningTaskInfo taskInfo) {}
- public void onBackPressedOnTaskRoot(@NonNull ActivityManager.RunningTaskInfo info) {}
+ @BinderThread
+ public void onBackPressedOnTaskRoot(@NonNull ActivityManager.RunningTaskInfo taskInfo) {}
/** Creates a persistent root task in WM for a particular windowing-mode. */
@RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS)
diff --git a/core/java/android/window/TaskOrganizerTaskEmbedder.java b/core/java/android/window/TaskOrganizerTaskEmbedder.java
index 39a0101bbf59..b63741ec69c4 100644
--- a/core/java/android/window/TaskOrganizerTaskEmbedder.java
+++ b/core/java/android/window/TaskOrganizerTaskEmbedder.java
@@ -21,7 +21,6 @@ import static android.app.WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW;
import android.app.ActivityManager;
import android.app.ActivityOptions;
-import android.app.ActivityView;
import android.app.TaskStackListener;
import android.content.Context;
import android.graphics.Rect;
@@ -55,11 +54,6 @@ public class TaskOrganizerTaskEmbedder extends TaskEmbedder {
super(context, host);
}
- @Override
- public TaskStackListener createTaskStackListener() {
- return new TaskStackListenerImpl();
- }
-
/**
* Whether this container has been initialized.
*
@@ -219,29 +213,6 @@ public class TaskOrganizerTaskEmbedder extends TaskEmbedder {
Log.d(TAG, "[" + System.identityHashCode(this) + "] " + msg);
}
- /**
- * A task change listener that detects background color change of the topmost stack on our
- * virtual display and updates the background of the surface view. This background will be shown
- * when surface view is resized, but the app hasn't drawn its content in new size yet.
- * It also calls StateCallback.onTaskMovedToFront to notify interested parties that the stack
- * associated with the {@link ActivityView} has had a Task moved to the front. This is useful
- * when needing to also bring the host Activity to the foreground at the same time.
- */
- private class TaskStackListenerImpl extends TaskStackListener {
-
- @Override
- public void onTaskDescriptionChanged(ActivityManager.RunningTaskInfo taskInfo) {
- if (!isInitialized()) {
- return;
- }
- if (taskInfo.taskId == mTaskInfo.taskId) {
- mTaskInfo.taskDescription = taskInfo.taskDescription;
- mHost.onTaskBackgroundColorChanged(TaskOrganizerTaskEmbedder.this,
- taskInfo.taskDescription.getBackgroundColor());
- }
- }
- }
-
private class TaskOrganizerImpl extends TaskOrganizer {
@Override
public void onTaskAppeared(ActivityManager.RunningTaskInfo taskInfo) {
@@ -249,7 +220,6 @@ public class TaskOrganizerTaskEmbedder extends TaskEmbedder {
log("taskAppeared: " + taskInfo.taskId);
}
- // TODO: Ensure visibility/alpha of the leash in its initial state?
mTaskInfo = taskInfo;
mTaskToken = taskInfo.token;
mTaskLeash = mTaskToken.getLeash();
@@ -270,6 +240,13 @@ public class TaskOrganizerTaskEmbedder extends TaskEmbedder {
}
@Override
+ public void onTaskInfoChanged(ActivityManager.RunningTaskInfo taskInfo) {
+ mTaskInfo.taskDescription = taskInfo.taskDescription;
+ mHost.post(() -> mHost.onTaskBackgroundColorChanged(TaskOrganizerTaskEmbedder.this,
+ taskInfo.taskDescription.getBackgroundColor()));
+ }
+
+ @Override
public void onTaskVanished(ActivityManager.RunningTaskInfo taskInfo) {
if (DEBUG) {
log("taskVanished: " + taskInfo.taskId);
diff --git a/core/java/android/window/VirtualDisplayTaskEmbedder.java b/core/java/android/window/VirtualDisplayTaskEmbedder.java
index 0f26d5d00f6d..70164692032f 100644
--- a/core/java/android/window/VirtualDisplayTaskEmbedder.java
+++ b/core/java/android/window/VirtualDisplayTaskEmbedder.java
@@ -67,6 +67,7 @@ public class VirtualDisplayTaskEmbedder extends TaskEmbedder {
private VirtualDisplay mVirtualDisplay;
private Insets mForwardedInsets;
private DisplayMetrics mTmpDisplayMetrics;
+ private TaskStackListener mTaskStackListener;
/**
* Constructs a new TaskEmbedder.
@@ -82,11 +83,6 @@ public class VirtualDisplayTaskEmbedder extends TaskEmbedder {
mSingleTaskInstance = singleTaskInstance;
}
- @Override
- public TaskStackListener createTaskStackListener() {
- return new TaskStackListenerImpl();
- }
-
/**
* Whether this container has been initialized.
*
@@ -124,6 +120,9 @@ public class VirtualDisplayTaskEmbedder extends TaskEmbedder {
.setDisplayToSingleTaskInstance(displayId);
}
setForwardedInsets(mForwardedInsets);
+
+ mTaskStackListener = new TaskStackListenerImpl();
+ mActivityTaskManager.registerTaskStackListener(mTaskStackListener);
} catch (RemoteException e) {
e.rethrowAsRuntimeException();
}
@@ -142,6 +141,15 @@ public class VirtualDisplayTaskEmbedder extends TaskEmbedder {
// Clear tap-exclude region (if any) for this window.
clearTapExcludeRegion();
+ if (mTaskStackListener != null) {
+ try {
+ mActivityTaskManager.unregisterTaskStackListener(mTaskStackListener);
+ } catch (RemoteException e) {
+ Log.e(TAG, "Failed to unregister task stack listener", e);
+ }
+ mTaskStackListener = null;
+ }
+
if (isInitialized()) {
mVirtualDisplay.release();
mVirtualDisplay = null;
diff --git a/core/java/android/window/WindowContainerToken.java b/core/java/android/window/WindowContainerToken.java
index dde98dae4057..3316d0e5b71f 100644
--- a/core/java/android/window/WindowContainerToken.java
+++ b/core/java/android/window/WindowContainerToken.java
@@ -84,4 +84,17 @@ public final class WindowContainerToken implements Parcelable {
public int describeContents() {
return 0;
}
+
+ @Override
+ public int hashCode() {
+ return mRealToken.asBinder().hashCode();
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (!(obj instanceof WindowContainerToken)) {
+ return false;
+ }
+ return mRealToken.asBinder() == ((WindowContainerToken) obj).asBinder();
+ }
}