Merge "Hide keyguard earlier when exiting lockscreen" into udc-dev

This commit is contained in:
Treehugger Robot
2023-06-01 16:29:56 +00:00
committed by Android (Google) Code Review
4 changed files with 33 additions and 11 deletions

View File

@@ -182,7 +182,8 @@ public class KeyguardService extends Service {
// Wrap Keyguard going away animation. // Wrap Keyguard going away animation.
// Note: Also used for wrapping occlude by Dream animation. It works (with some redundancy). // Note: Also used for wrapping occlude by Dream animation. It works (with some redundancy).
public static IRemoteTransition wrap(IRemoteAnimationRunner runner) { public static IRemoteTransition wrap(IRemoteAnimationRunner runner,
boolean lockscreenLiveWallpaperEnabled) {
return new IRemoteTransition.Stub() { return new IRemoteTransition.Stub() {
private final ArrayMap<SurfaceControl, SurfaceControl> mLeashMap = new ArrayMap<>(); private final ArrayMap<SurfaceControl, SurfaceControl> mLeashMap = new ArrayMap<>();
@@ -213,7 +214,9 @@ public class KeyguardService extends Service {
} }
} }
initAlphaForAnimationTargets(t, apps); initAlphaForAnimationTargets(t, apps);
if (lockscreenLiveWallpaperEnabled) {
initAlphaForAnimationTargets(t, wallpapers); initAlphaForAnimationTargets(t, wallpapers);
}
t.apply(); t.apply();
mFinishCallback = finishCallback; mFinishCallback = finishCallback;
runner.onAnimationStart( runner.onAnimationStart(

View File

@@ -19,6 +19,7 @@ package com.android.systemui.keyguard
import android.animation.Animator import android.animation.Animator
import android.animation.AnimatorListenerAdapter import android.animation.AnimatorListenerAdapter
import android.animation.ValueAnimator import android.animation.ValueAnimator
import android.app.WallpaperManager
import android.content.Context import android.content.Context
import android.graphics.Matrix import android.graphics.Matrix
import android.graphics.Rect import android.graphics.Rect
@@ -148,7 +149,8 @@ class KeyguardUnlockAnimationController @Inject constructor(
private val biometricUnlockControllerLazy: Lazy<BiometricUnlockController>, private val biometricUnlockControllerLazy: Lazy<BiometricUnlockController>,
private val statusBarStateController: SysuiStatusBarStateController, private val statusBarStateController: SysuiStatusBarStateController,
private val notificationShadeWindowController: NotificationShadeWindowController, private val notificationShadeWindowController: NotificationShadeWindowController,
private val powerManager: PowerManager private val powerManager: PowerManager,
private val wallpaperManager: WallpaperManager
) : KeyguardStateController.Callback, ISysuiUnlockAnimationController.Stub() { ) : KeyguardStateController.Callback, ISysuiUnlockAnimationController.Stub() {
interface KeyguardUnlockAnimationListener { interface KeyguardUnlockAnimationListener {
@@ -686,8 +688,10 @@ class KeyguardUnlockAnimationController @Inject constructor(
return@postDelayed return@postDelayed
} }
if (wallpaperTargets != null) { if ((wallpaperTargets?.isNotEmpty() == true) &&
wallpaperManager.isLockscreenLiveWallpaperEnabled()) {
fadeInWallpaper() fadeInWallpaper()
hideKeyguardViewAfterRemoteAnimation()
} else { } else {
keyguardViewMediator.get().exitKeyguardAndFinishSurfaceBehindRemoteAnimation( keyguardViewMediator.get().exitKeyguardAndFinishSurfaceBehindRemoteAnimation(
false /* cancelled */) false /* cancelled */)
@@ -961,7 +965,7 @@ class KeyguardUnlockAnimationController @Inject constructor(
0 /* fadeOutDuration */ 0 /* fadeOutDuration */
) )
} else { } else {
Log.e(TAG, "#hideKeyguardViewAfterRemoteAnimation called when keyguard view is not " + Log.i(TAG, "#hideKeyguardViewAfterRemoteAnimation called when keyguard view is not " +
"showing. Ignoring...") "showing. Ignoring...")
} }
} }

View File

@@ -45,6 +45,7 @@ import android.app.AlarmManager;
import android.app.BroadcastOptions; import android.app.BroadcastOptions;
import android.app.PendingIntent; import android.app.PendingIntent;
import android.app.StatusBarManager; import android.app.StatusBarManager;
import android.app.WallpaperManager;
import android.app.WindowConfiguration; import android.app.WindowConfiguration;
import android.app.trust.TrustManager; import android.app.trust.TrustManager;
import android.content.BroadcastReceiver; import android.content.BroadcastReceiver;
@@ -280,6 +281,7 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,
private AlarmManager mAlarmManager; private AlarmManager mAlarmManager;
private AudioManager mAudioManager; private AudioManager mAudioManager;
private StatusBarManager mStatusBarManager; private StatusBarManager mStatusBarManager;
private WallpaperManager mWallpaperManager;
private final IStatusBarService mStatusBarService; private final IStatusBarService mStatusBarService;
private final IBinder mStatusBarDisableToken = new Binder(); private final IBinder mStatusBarDisableToken = new Binder();
private final UserTracker mUserTracker; private final UserTracker mUserTracker;
@@ -1350,11 +1352,12 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,
setShowingLocked(false /* showing */, true /* forceCallbacks */); setShowingLocked(false /* showing */, true /* forceCallbacks */);
} }
boolean isLockscreenLwpEnabled = getWallpaperManager().isLockscreenLiveWallpaperEnabled();
mKeyguardTransitions.register( mKeyguardTransitions.register(
KeyguardService.wrap(getExitAnimationRunner()), KeyguardService.wrap(getExitAnimationRunner(), isLockscreenLwpEnabled),
KeyguardService.wrap(getOccludeAnimationRunner()), KeyguardService.wrap(getOccludeAnimationRunner(), isLockscreenLwpEnabled),
KeyguardService.wrap(getOccludeByDreamAnimationRunner()), KeyguardService.wrap(getOccludeByDreamAnimationRunner(), isLockscreenLwpEnabled),
KeyguardService.wrap(getUnoccludeAnimationRunner())); KeyguardService.wrap(getUnoccludeAnimationRunner(), isLockscreenLwpEnabled));
final ContentResolver cr = mContext.getContentResolver(); final ContentResolver cr = mContext.getContentResolver();
@@ -1400,6 +1403,14 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,
mWorkLockController = new WorkLockActivityController(mContext, mUserTracker); mWorkLockController = new WorkLockActivityController(mContext, mUserTracker);
} }
// TODO(b/273443374) remove, temporary util to get a feature flag
private WallpaperManager getWallpaperManager() {
if (mWallpaperManager == null) {
mWallpaperManager = mContext.getSystemService(WallpaperManager.class);
}
return mWallpaperManager;
}
@Override @Override
public void start() { public void start() {
synchronized (this) { synchronized (this) {

View File

@@ -1,6 +1,7 @@
package com.android.systemui.keyguard package com.android.systemui.keyguard
import android.app.ActivityManager import android.app.ActivityManager
import android.app.WallpaperManager
import android.app.WindowConfiguration import android.app.WindowConfiguration
import android.graphics.Point import android.graphics.Point
import android.graphics.Rect import android.graphics.Rect
@@ -64,6 +65,8 @@ class KeyguardUnlockAnimationControllerTest : SysuiTestCase() {
private lateinit var notificationShadeWindowController: NotificationShadeWindowController private lateinit var notificationShadeWindowController: NotificationShadeWindowController
@Mock @Mock
private lateinit var powerManager: PowerManager private lateinit var powerManager: PowerManager
@Mock
private lateinit var wallpaperManager: WallpaperManager
@Mock @Mock
private lateinit var launcherUnlockAnimationController: ILauncherUnlockAnimationController.Stub private lateinit var launcherUnlockAnimationController: ILauncherUnlockAnimationController.Stub
@@ -94,13 +97,14 @@ class KeyguardUnlockAnimationControllerTest : SysuiTestCase() {
keyguardUnlockAnimationController = KeyguardUnlockAnimationController( keyguardUnlockAnimationController = KeyguardUnlockAnimationController(
context, keyguardStateController, { keyguardViewMediator }, keyguardViewController, context, keyguardStateController, { keyguardViewMediator }, keyguardViewController,
featureFlags, { biometricUnlockController }, statusBarStateController, featureFlags, { biometricUnlockController }, statusBarStateController,
notificationShadeWindowController, powerManager notificationShadeWindowController, powerManager, wallpaperManager
) )
keyguardUnlockAnimationController.setLauncherUnlockController( keyguardUnlockAnimationController.setLauncherUnlockController(
launcherUnlockAnimationController) launcherUnlockAnimationController)
whenever(keyguardViewController.viewRootImpl).thenReturn(mock(ViewRootImpl::class.java)) whenever(keyguardViewController.viewRootImpl).thenReturn(mock(ViewRootImpl::class.java))
whenever(powerManager.isInteractive).thenReturn(true) whenever(powerManager.isInteractive).thenReturn(true)
whenever(wallpaperManager.isLockscreenLiveWallpaperEnabled).thenReturn(false)
// All of these fields are final, so we can't mock them, but are needed so that the surface // All of these fields are final, so we can't mock them, but are needed so that the surface
// appear amount setter doesn't short circuit. // appear amount setter doesn't short circuit.