summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/app/TaskInfo.java16
-rw-r--r--services/core/java/com/android/server/wm/ActivityRecord.java11
-rw-r--r--services/core/java/com/android/server/wm/RecentsAnimation.java9
-rw-r--r--services/core/java/com/android/server/wm/Task.java27
4 files changed, 34 insertions, 29 deletions
diff --git a/core/java/android/app/TaskInfo.java b/core/java/android/app/TaskInfo.java
index da8ac96ef40b..ca67dba45dd0 100644
--- a/core/java/android/app/TaskInfo.java
+++ b/core/java/android/app/TaskInfo.java
@@ -221,6 +221,12 @@ public class TaskInfo {
*/
public Rect parentBounds;
+ /**
+ * Whether this task is focused.
+ * @hide
+ */
+ public boolean isFocused;
+
TaskInfo() {
// Do nothing
}
@@ -304,7 +310,8 @@ public class TaskInfo {
&& equalsLetterboxParams(that)
&& pictureInPictureParams == that.pictureInPictureParams
&& getWindowingMode() == that.getWindowingMode()
- && Objects.equals(taskDescription, that.taskDescription);
+ && Objects.equals(taskDescription, that.taskDescription)
+ && isFocused == that.isFocused;
}
private boolean equalsLetterboxParams(TaskInfo that) {
@@ -350,6 +357,7 @@ public class TaskInfo {
positionInParent = source.readTypedObject(Point.CREATOR);
parentTaskId = source.readInt();
parentBounds = source.readTypedObject(Rect.CREATOR);
+ isFocused = source.readBoolean();
}
/**
@@ -385,6 +393,7 @@ public class TaskInfo {
dest.writeTypedObject(positionInParent, flags);
dest.writeInt(parentTaskId);
dest.writeTypedObject(parentBounds, flags);
+ dest.writeBoolean(isFocused);
}
@Override
@@ -407,8 +416,9 @@ public class TaskInfo {
+ " launchCookies" + launchCookies
+ " letterboxActivityBounds=" + letterboxActivityBounds
+ " positionInParent=" + positionInParent
- + " parentTaskId: " + parentTaskId
- + " parentBounds: " + parentBounds
+ + " parentTaskId=" + parentTaskId
+ + " parentBounds=" + parentBounds
+ + " isFocused=" + isFocused
+ "}";
}
}
diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java
index 877d568f49c0..c2016decdbe9 100644
--- a/services/core/java/com/android/server/wm/ActivityRecord.java
+++ b/services/core/java/com/android/server/wm/ActivityRecord.java
@@ -6408,13 +6408,10 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
// The app is just becoming visible, and the parent Task has updated with the
// orientation request. Update the size compat mode.
updateSizeCompatMode();
- if (task.isOrganized()) {
- // WM Shell can override WM Core positioning (e.g. for letterboxing) so ensure
- // that WM Shell is called when an activity becomes visible. Without this, WM Core
- // will handle positioning instead of WM Shell when an app is reopened.
- mAtmService.mTaskOrganizerController.dispatchTaskInfoChanged(
- task, /* force= */ true);
- }
+ // WM Shell can override WM Core positioning (e.g. for letterboxing) so ensure
+ // that WM Shell is called when an activity becomes visible. Without this, WM Core
+ // will handle positioning instead of WM Shell when an app is reopened.
+ task.dispatchTaskInfoChangedIfNeeded(/* force= */ true);
}
}
diff --git a/services/core/java/com/android/server/wm/RecentsAnimation.java b/services/core/java/com/android/server/wm/RecentsAnimation.java
index b117699a67bd..823dc51e939f 100644
--- a/services/core/java/com/android/server/wm/RecentsAnimation.java
+++ b/services/core/java/com/android/server/wm/RecentsAnimation.java
@@ -385,12 +385,9 @@ class RecentsAnimation implements RecentsAnimationCallbacks,
mWindowManager.executeAppTransition();
final Task rootTask = targetStack.getRootTask();
- if (rootTask.isOrganized()) {
- // Client state may have changed during the recents animation, so force
- // send task info so the client can synchronize its state.
- mService.mTaskOrganizerController.dispatchTaskInfoChanged(
- rootTask, true /* force */);
- }
+ // Client state may have changed during the recents animation, so force
+ // send task info so the client can synchronize its state.
+ rootTask.dispatchTaskInfoChangedIfNeeded(true /* force */);
} catch (Exception e) {
Slog.e(TAG, "Failed to clean up recents activity", e);
throw e;
diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java
index 3caf86c24380..ebf5989d6b55 100644
--- a/services/core/java/com/android/server/wm/Task.java
+++ b/services/core/java/com/android/server/wm/Task.java
@@ -2041,9 +2041,7 @@ class Task extends WindowContainer<WindowContainer> {
}
}
- if (isOrganized()) {
- mAtmService.mTaskOrganizerController.dispatchTaskInfoChanged(this, false /* force */);
- }
+ dispatchTaskInfoChangedIfNeeded(false /* force */);
}
private static boolean setTaskDescriptionFromActivityAboveRoot(
@@ -2272,8 +2270,8 @@ class Task extends WindowContainer<WindowContainer> {
}
// If the task organizer has changed, then it will already be receiving taskAppeared with
// the latest task-info thus the task-info won't have changed.
- if (!taskOrgChanged && isOrganized()) {
- mAtmService.mTaskOrganizerController.dispatchTaskInfoChanged(this, false /* force */);
+ if (!taskOrgChanged) {
+ dispatchTaskInfoChangedIfNeeded(false /* force */);
}
}
@@ -4100,6 +4098,7 @@ class Task extends WindowContainer<WindowContainer> {
info.parentTaskId = rootTask == getParent() && rootTask.mCreatedByOrganizer
? rootTask.mTaskId
: INVALID_TASK_ID;
+ info.isFocused = isFocused();
}
@Nullable PictureInPictureParams getPictureInPictureParams() {
@@ -4120,8 +4119,7 @@ class Task extends WindowContainer<WindowContainer> {
letterboxActivityBounds)) {
mLetterboxActivityBounds = Rect.copyOrNull(letterboxActivityBounds);
// Forcing update to reduce visual jank during the transition.
- mAtmService.mTaskOrganizerController.dispatchTaskInfoChanged(
- this, /* force= */ true);
+ dispatchTaskInfoChangedIfNeeded(true /* force */);
}
}
@@ -5067,12 +5065,11 @@ class Task extends WindowContainer<WindowContainer> {
*/
void onWindowFocusChanged(boolean hasFocus) {
updateShadowsRadius(hasFocus, getSyncTransaction());
+ dispatchTaskInfoChangedIfNeeded(false /* force */);
}
void onPictureInPictureParamsChanged() {
- if (isOrganized()) {
- mAtmService.mTaskOrganizerController.dispatchTaskInfoChanged(this, true /* force */);
- }
+ dispatchTaskInfoChangedIfNeeded(true /* force */);
}
/**
@@ -7447,9 +7444,7 @@ class Task extends WindowContainer<WindowContainer> {
@Override
void onChildPositionChanged(WindowContainer child) {
- if (isOrganized()) {
- mAtmService.mTaskOrganizerController.dispatchTaskInfoChanged(this, false /* force */);
- }
+ dispatchTaskInfoChangedIfNeeded(false /* force */);
if (!mChildren.contains(child)) {
return;
@@ -7604,6 +7599,12 @@ class Task extends WindowContainer<WindowContainer> {
return super.getBounds();
}
+ void dispatchTaskInfoChangedIfNeeded(boolean force) {
+ if (isOrganized()) {
+ mAtmService.mTaskOrganizerController.dispatchTaskInfoChanged(this, force);
+ }
+ }
+
@Override
public void dumpDebug(ProtoOutputStream proto, long fieldId,
@WindowTraceLogLevel int logLevel) {