Ignore overriding pending animaiton for unlock transition.

System app can request to override app transition animation using
the following hidden APIs.

- IWindowManager#overridePendingAppTransitionRemote
- Activity#registerRemoteAnimations
- IActivityTaskManager#registerRemoteAnimationsForDisplay

We usually give the lowest priority for the overrides registered by
the last API, since it defines default transition animaiton for a given
transition type and others are used to overide more specific cases.

However remote animation for unlock transition is also used to sync
keyguard status between server_process and system ui, even system app
must not override it.

Bug: 231556392
Test: manual
  1. Press Power button to display the lock screen.
  2. Press Power button and the volume down button at the same time to
     take a screenshot.
  3. Tap the screenshot preview that appears in the lower left corner
     of the screen.
  4. Execute Fingerprint authentication to unlock the screen.
Change-Id: I16593c1aa7e7799e355aafbe47832e5c3b23c0cc
This commit is contained in:
Issei Suzuki
2022-06-17 13:20:58 +00:00
parent 41bcf6803e
commit 6920cf5546

View File

@@ -113,7 +113,6 @@ public class AppTransitionController {
private final DisplayContent mDisplayContent;
private final WallpaperController mWallpaperControllerLocked;
private RemoteAnimationDefinition mRemoteAnimationDefinition = null;
private static final int KEYGUARD_GOING_AWAY_ANIMATION_DURATION = 400;
private static final int TYPE_NONE = 0;
private static final int TYPE_ACTIVITY = 1;
@@ -716,14 +715,17 @@ public class AppTransitionController {
*/
private void overrideWithRemoteAnimationIfSet(@Nullable ActivityRecord animLpActivity,
@TransitionOldType int transit, ArraySet<Integer> activityTypes) {
RemoteAnimationAdapter adapter = null;
if (transit == TRANSIT_OLD_CRASHING_ACTIVITY_CLOSE) {
// The crash transition has higher priority than any involved remote animations.
return;
} else if (AppTransition.isKeyguardGoingAwayTransitOld(transit)) {
adapter = mRemoteAnimationDefinition != null
? mRemoteAnimationDefinition.getAdapter(transit, activityTypes)
: null;
} else if (mDisplayContent.mAppTransition.getRemoteAnimationController() == null) {
adapter = getRemoteAnimationOverride(animLpActivity, transit, activityTypes);
}
final RemoteAnimationAdapter adapter =
getRemoteAnimationOverride(animLpActivity, transit, activityTypes);
if (adapter != null
&& mDisplayContent.mAppTransition.getRemoteAnimationController() == null) {
if (adapter != null) {
mDisplayContent.mAppTransition.overridePendingAppTransitionRemote(adapter);
}
}