From f5e3ece92864d1cf72566afa672d8d873bfe000f Mon Sep 17 00:00:00 2001 From: Evan Rosky Date: Wed, 7 Aug 2024 11:22:35 -0700 Subject: Small preventative fixes/refactors Some minor re-arrangement to improve correctness and reduce dependencies. For example, this was only checking some activities to see if transition is "no-op" when it should be checking the transition itself in-case there were some unexpected changes. Bug: 340386663 Test: existing tests Flag: com.android.window.flags.migrate_predictive_back_transition Change-Id: Ie0326940090645b0c04e673d849c039cd5b86658 --- .../com/android/server/wm/BackNavigationController.java | 13 +++---------- services/core/java/com/android/server/wm/Transition.java | 9 +++++++++ 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/services/core/java/com/android/server/wm/BackNavigationController.java b/services/core/java/com/android/server/wm/BackNavigationController.java index b4c75572d68f..06e665e88b65 100644 --- a/services/core/java/com/android/server/wm/BackNavigationController.java +++ b/services/core/java/com/android/server/wm/BackNavigationController.java @@ -1935,8 +1935,7 @@ class BackNavigationController { for (int i = penActivities.length - 1; i >= 0; --i) { ActivityRecord resetActivity = penActivities[i]; if (transition.isInTransition(resetActivity)) { - resetActivity.mTransitionController.setReady( - resetActivity.getDisplayContent(), true); + transition.setReady(resetActivity.getDisplayContent(), true); return true; } } @@ -1991,18 +1990,12 @@ class BackNavigationController { activity.makeVisibleIfNeeded(null /* starting */, true /* notifyToClient */); } } - boolean needTransition = false; - final DisplayContent dc = affects.get(0).getDisplayContent(); - for (int i = affects.size() - 1; i >= 0; --i) { - final ActivityRecord activity = affects.get(i); - needTransition |= tc.isCollecting(activity); - } if (prepareOpen != null) { - if (needTransition) { + if (prepareOpen.hasChanges()) { tc.requestStartTransition(prepareOpen, null /*startTask */, null /* remoteTransition */, null /* displayChange */); - tc.setReady(dc); + prepareOpen.setReady(affects.get(0), true); return prepareOpen; } else { prepareOpen.abort(); diff --git a/services/core/java/com/android/server/wm/Transition.java b/services/core/java/com/android/server/wm/Transition.java index 5698750170f4..57a9aba2f4a3 100644 --- a/services/core/java/com/android/server/wm/Transition.java +++ b/services/core/java/com/android/server/wm/Transition.java @@ -3350,6 +3350,15 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener { return chg.hasChanged(); } + boolean hasChanges() { + for (int i = 0; i < mParticipants.size(); ++i) { + if (mChanges.get(mParticipants.valueAt(i)).hasChanged()) { + return true; + } + } + return false; + } + @VisibleForTesting static class ChangeInfo { private static final int FLAG_NONE = 0; -- cgit v1.2.3-59-g8ed1b