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.
// 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() {
private final ArrayMap<SurfaceControl, SurfaceControl> mLeashMap = new ArrayMap<>();
@@ -213,7 +214,9 @@ public class KeyguardService extends Service {
}
}
initAlphaForAnimationTargets(t, apps);
initAlphaForAnimationTargets(t, wallpapers);
if (lockscreenLiveWallpaperEnabled) {
initAlphaForAnimationTargets(t, wallpapers);
}
t.apply();
mFinishCallback = finishCallback;
runner.onAnimationStart(

View File

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

View File

@@ -45,6 +45,7 @@ import android.app.AlarmManager;
import android.app.BroadcastOptions;
import android.app.PendingIntent;
import android.app.StatusBarManager;
import android.app.WallpaperManager;
import android.app.WindowConfiguration;
import android.app.trust.TrustManager;
import android.content.BroadcastReceiver;
@@ -280,6 +281,7 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,
private AlarmManager mAlarmManager;
private AudioManager mAudioManager;
private StatusBarManager mStatusBarManager;
private WallpaperManager mWallpaperManager;
private final IStatusBarService mStatusBarService;
private final IBinder mStatusBarDisableToken = new Binder();
private final UserTracker mUserTracker;
@@ -1350,11 +1352,12 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,
setShowingLocked(false /* showing */, true /* forceCallbacks */);
}
boolean isLockscreenLwpEnabled = getWallpaperManager().isLockscreenLiveWallpaperEnabled();
mKeyguardTransitions.register(
KeyguardService.wrap(getExitAnimationRunner()),
KeyguardService.wrap(getOccludeAnimationRunner()),
KeyguardService.wrap(getOccludeByDreamAnimationRunner()),
KeyguardService.wrap(getUnoccludeAnimationRunner()));
KeyguardService.wrap(getExitAnimationRunner(), isLockscreenLwpEnabled),
KeyguardService.wrap(getOccludeAnimationRunner(), isLockscreenLwpEnabled),
KeyguardService.wrap(getOccludeByDreamAnimationRunner(), isLockscreenLwpEnabled),
KeyguardService.wrap(getUnoccludeAnimationRunner(), isLockscreenLwpEnabled));
final ContentResolver cr = mContext.getContentResolver();
@@ -1400,6 +1403,14 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,
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
public void start() {
synchronized (this) {

View File

@@ -1,6 +1,7 @@
package com.android.systemui.keyguard
import android.app.ActivityManager
import android.app.WallpaperManager
import android.app.WindowConfiguration
import android.graphics.Point
import android.graphics.Rect
@@ -64,6 +65,8 @@ class KeyguardUnlockAnimationControllerTest : SysuiTestCase() {
private lateinit var notificationShadeWindowController: NotificationShadeWindowController
@Mock
private lateinit var powerManager: PowerManager
@Mock
private lateinit var wallpaperManager: WallpaperManager
@Mock
private lateinit var launcherUnlockAnimationController: ILauncherUnlockAnimationController.Stub
@@ -94,13 +97,14 @@ class KeyguardUnlockAnimationControllerTest : SysuiTestCase() {
keyguardUnlockAnimationController = KeyguardUnlockAnimationController(
context, keyguardStateController, { keyguardViewMediator }, keyguardViewController,
featureFlags, { biometricUnlockController }, statusBarStateController,
notificationShadeWindowController, powerManager
notificationShadeWindowController, powerManager, wallpaperManager
)
keyguardUnlockAnimationController.setLauncherUnlockController(
launcherUnlockAnimationController)
whenever(keyguardViewController.viewRootImpl).thenReturn(mock(ViewRootImpl::class.java))
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
// appear amount setter doesn't short circuit.