summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Louis Chang <louischang@google.com> 2023-03-30 04:26:03 +0000
committer Louis Chang <louischang@google.com> 2023-03-30 07:41:45 +0000
commit4dd7aefbb525015066192988ebdfaa980a95999c (patch)
treeb920be28cce6b2e2472a9bdab9edc6bea8067566
parentdc8992c4b0f67cde919a79fdaef32f70b4bb1c0f (diff)
Pausing the transient hide activity with user leaving hint
Activity#onUserLeaveHint was not called while swiping up to home since the activity was directly added to stopping list when transient launch transition completed. The code added in commit 0572aac to send task-stack-changed event while finishing transition was also updated. It is not needed if the activity is scheduled to be paused by TaskFragment #startPausing since the task-stack changed is called after pause completed. However, it is still needed if the activity enters auto-pip when transition finishes. Bug: 274576791 Test: swipe up to home Change-Id: Idf664a93e95471d83c0964dc67ab384521f78b24
-rw-r--r--services/core/java/com/android/server/wm/ActivityRecord.java2
-rw-r--r--services/core/java/com/android/server/wm/Transition.java23
2 files changed, 15 insertions, 10 deletions
diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java
index a327a426204a..5b8debb51865 100644
--- a/services/core/java/com/android/server/wm/ActivityRecord.java
+++ b/services/core/java/com/android/server/wm/ActivityRecord.java
@@ -6025,6 +6025,8 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
// An activity must be in the {@link PAUSING} state for the system to validate
// the move to {@link PAUSED}.
setState(PAUSING, "makeActiveIfNeeded");
+ EventLogTags.writeWmPauseActivity(mUserId, System.identityHashCode(this),
+ shortComponentName, "userLeaving=false", "make-active");
try {
mAtmService.getLifecycleManager().scheduleTransaction(app.getThread(), token,
PauseActivityItem.obtain(finishing, false /* userLeaving */,
diff --git a/services/core/java/com/android/server/wm/Transition.java b/services/core/java/com/android/server/wm/Transition.java
index 2cfd2af89c80..a3c289816e55 100644
--- a/services/core/java/com/android/server/wm/Transition.java
+++ b/services/core/java/com/android/server/wm/Transition.java
@@ -783,7 +783,9 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener {
* a chance we won't thus legacy-entry (via pause+userLeaving) will return false.
*/
private boolean checkEnterPipOnFinish(@NonNull ActivityRecord ar) {
- if (!mCanPipOnFinish || !ar.isVisible() || ar.getTask() == null) return false;
+ if (!mCanPipOnFinish || !ar.isVisible() || ar.getTask() == null || !ar.isState(RESUMED)) {
+ return false;
+ }
if (ar.pictureInPictureArgs != null && ar.pictureInPictureArgs.isAutoEnterEnabled()) {
if (didCommitTransientLaunch()) {
@@ -796,18 +798,14 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener {
}
// Legacy pip-entry (not via isAutoEnterEnabled).
- boolean canPip = ar.getDeferHidingClient();
- if (!canPip && didCommitTransientLaunch()) {
+ if (didCommitTransientLaunch() && ar.supportsPictureInPicture()) {
// force enable pip-on-task-switch now that we've committed to actually launching to the
// transient activity, and then recalculate whether we can attempt pip.
ar.supportsEnterPipOnTaskSwitch = true;
- canPip = ar.checkEnterPictureInPictureState(
- "finishTransition", true /* beforeStopping */)
- && ar.isState(RESUMED);
}
- if (!canPip) return false;
+
try {
- // Legacy PIP-enter requires pause event with user-leaving.
+ // If not going auto-pip, the activity should be paused with user-leaving.
mController.mAtm.mTaskSupervisor.mUserLeaving = true;
ar.getTaskFragment().startPausing(false /* uiSleeping */,
null /* resuming */, "finishTransition");
@@ -851,6 +849,7 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener {
boolean hasParticipatedDisplay = false;
boolean hasVisibleTransientLaunch = false;
+ boolean enterAutoPip = false;
// Commit all going-invisible containers
for (int i = 0; i < mParticipants.size(); ++i) {
final WindowContainer<?> participant = mParticipants.valueAt(i);
@@ -886,6 +885,8 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener {
}
ar.commitVisibility(false /* visible */, false /* performLayout */,
true /* fromTransition */);
+ } else {
+ enterAutoPip = true;
}
}
if (mChanges.get(ar).mVisible != visibleAtTransitionEnd) {
@@ -940,8 +941,10 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener {
}
if (hasVisibleTransientLaunch) {
- // Notify the change about the transient-below task that becomes invisible.
- mController.mAtm.getTaskChangeNotificationController().notifyTaskStackChanged();
+ // Notify the change about the transient-below task if entering auto-pip.
+ if (enterAutoPip) {
+ mController.mAtm.getTaskChangeNotificationController().notifyTaskStackChanged();
+ }
// Prevent spurious background app switches.
mController.mAtm.stopAppSwitches();
// The end of transient launch may not reorder task, so make sure to compute the latest