diff options
Diffstat (limited to 'libs')
| -rw-r--r-- | libs/WindowManager/Shell/src/com/android/wm/shell/back/BackAnimationController.java | 8 | ||||
| -rw-r--r-- | libs/WindowManager/Shell/src/com/android/wm/shell/back/ShellBackAnimationRegistry.java | 25 |
2 files changed, 31 insertions, 2 deletions
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/back/BackAnimationController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/back/BackAnimationController.java index ef679dae0157..4f8921582e04 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/back/BackAnimationController.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/back/BackAnimationController.java @@ -573,8 +573,14 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont private void startBackNavigation(@NonNull BackTouchTracker touchTracker) { try { startLatencyTracking(); + final BackAnimationAdapter adapter = mEnableAnimations.get() + ? mBackAnimationAdapter : null; + if (adapter != null && mShellBackAnimationRegistry.hasSupportedAnimatorsChanged()) { + adapter.updateSupportedAnimators( + mShellBackAnimationRegistry.getSupportedAnimators()); + } mBackNavigationInfo = mActivityTaskManager.startBackNavigation( - mNavigationObserver, mEnableAnimations.get() ? mBackAnimationAdapter : null); + mNavigationObserver, adapter); onBackNavigationInfoReceived(mBackNavigationInfo, touchTracker); } catch (RemoteException remoteException) { Log.e(TAG, "Failed to initAnimation", remoteException); diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/back/ShellBackAnimationRegistry.java b/libs/WindowManager/Shell/src/com/android/wm/shell/back/ShellBackAnimationRegistry.java index 6fafa75e2f70..ae2c7b3adb6b 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/back/ShellBackAnimationRegistry.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/back/ShellBackAnimationRegistry.java @@ -23,6 +23,8 @@ import android.util.Log; import android.util.SparseArray; import android.window.BackNavigationInfo; +import java.util.ArrayList; + /** Registry for all types of default back animations */ public class ShellBackAnimationRegistry { private static final String TAG = "ShellBackPreview"; @@ -31,6 +33,8 @@ public class ShellBackAnimationRegistry { private ShellBackAnimation mDefaultCrossActivityAnimation; private final ShellBackAnimation mCustomizeActivityAnimation; private final ShellBackAnimation mCrossTaskAnimation; + private boolean mSupportedAnimatorsChanged = false; + private final ArrayList<Integer> mSupportedAnimators = new ArrayList<>(); public ShellBackAnimationRegistry( @ShellBackAnimation.CrossActivity @Nullable ShellBackAnimation crossActivityAnimation, @@ -60,7 +64,7 @@ public class ShellBackAnimationRegistry { mDefaultCrossActivityAnimation = crossActivityAnimation; mCustomizeActivityAnimation = customizeActivityAnimation; mCrossTaskAnimation = crossTaskAnimation; - + updateSupportedAnimators(); // TODO(b/236760237): register dialog close animation when it's completed. } @@ -71,6 +75,7 @@ public class ShellBackAnimationRegistry { if (BackNavigationInfo.TYPE_CROSS_ACTIVITY == type) { mDefaultCrossActivityAnimation = null; } + updateSupportedAnimators(); } void unregisterAnimation(@BackNavigationInfo.BackTargetType int type) { @@ -79,6 +84,24 @@ public class ShellBackAnimationRegistry { if (BackNavigationInfo.TYPE_CROSS_ACTIVITY == type) { mDefaultCrossActivityAnimation = null; } + updateSupportedAnimators(); + } + + private void updateSupportedAnimators() { + mSupportedAnimators.clear(); + for (int i = mAnimationDefinition.size() - 1; i >= 0; --i) { + mSupportedAnimators.add(mAnimationDefinition.keyAt(i)); + } + mSupportedAnimatorsChanged = true; + } + + boolean hasSupportedAnimatorsChanged() { + return mSupportedAnimatorsChanged; + } + + ArrayList<Integer> getSupportedAnimators() { + mSupportedAnimatorsChanged = false; + return mSupportedAnimators; } /** |