diff options
| author | 2020-11-20 18:33:19 +0000 | |
|---|---|---|
| committer | 2020-11-20 18:33:19 +0000 | |
| commit | 943f93a8b78f7bd82802d9d26bea43cbaf94f0ff (patch) | |
| tree | ea4fb495b4aa3a3334bb6ca5d829cfeaefea7c6f | |
| parent | 3dd9f787a1d87fda091c9ed7372c8c68a5559717 (diff) | |
| parent | f677d826f9ce5e8e46776a192d273fbc524803b5 (diff) | |
Merge "Add window focused state to TaskInfo."
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) { |