Add window focused state to TaskInfo.
Add a helper method Task#dispatchTaskInfoChangedIfNeeded to avoid checking for isOrganized() every time we need to dispatch a task info change. Bug: 165794880 Test: Window focused state is pushed to WM shell. Change-Id: I3e1272884f4ca9021c82b0df71ff2f7c5a6fea83
This commit is contained in:
@@ -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
|
||||
+ "}";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user