Locking screen after timeout to dream

Show keyguard after screen-off lock timeout regardless if there is a secure lock pattern or not
Test: atest KeyguardViewMediatorTest, manual device testing with and without pass lock
Fixes: b/271317643
Bug: 275694445

Change-Id: I977529aca13dd94f8458136c366279918c02a987
Merged-In: I977529aca13dd94f8458136c366279918c02a987
This commit is contained in:
Prince
2023-03-20 15:02:38 +00:00
committed by Prince Donkor
parent aee5c18251
commit fda2525012
4 changed files with 54 additions and 7 deletions

View File

@@ -132,6 +132,11 @@ object Flags {
// TODO(b/254512676): Tracking Bug
@JvmField val LOCKSCREEN_CUSTOM_CLOCKS = releasedFlag(207, "lockscreen_custom_clocks")
// TODO(b/275694445): Tracking Bug
@JvmField
val LOCKSCREEN_WITHOUT_SECURE_LOCK_WHEN_DREAMING = unreleasedFlag(208,
"lockscreen_without_secure_lock_when_dreaming")
/**
* Whether the clock on a wide lock screen should use the new "stepping" animation for moving
* the digits when the clock moves.

View File

@@ -128,6 +128,8 @@ import com.android.systemui.classifier.FalsingCollector;
import com.android.systemui.dagger.qualifiers.UiBackground;
import com.android.systemui.dreams.DreamOverlayStateController;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.flags.FeatureFlags;
import com.android.systemui.flags.Flags;
import com.android.systemui.keyguard.dagger.KeyguardModule;
import com.android.systemui.navigationbar.NavigationModeController;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
@@ -1179,6 +1181,8 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,
private Lazy<ActivityLaunchAnimator> mActivityLaunchAnimator;
private Lazy<ScrimController> mScrimControllerLazy;
private FeatureFlags mFeatureFlags;
/**
* Injected constructor. See {@link KeyguardModule}.
*/
@@ -1209,7 +1213,8 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,
Lazy<ShadeController> shadeControllerLazy,
Lazy<NotificationShadeWindowController> notificationShadeWindowControllerLazy,
Lazy<ActivityLaunchAnimator> activityLaunchAnimator,
Lazy<ScrimController> scrimControllerLazy) {
Lazy<ScrimController> scrimControllerLazy,
FeatureFlags featureFlags) {
mContext = context;
mUserTracker = userTracker;
mFalsingCollector = falsingCollector;
@@ -1264,6 +1269,8 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,
mDreamOpenAnimationDuration = (int) DREAMING_ANIMATION_DURATION_MS;
mDreamCloseAnimationDuration = (int) LOCKSCREEN_ANIMATION_DURATION_MS;
mFeatureFlags = featureFlags;
}
public void userActivity() {
@@ -1677,14 +1684,17 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,
}
/**
* A dream started. We should lock after the usual screen-off lock timeout but only
* if there is a secure lock pattern.
* A dream started. We should lock after the usual screen-off lock timeout regardless if
* there is a secure lock pattern or not
*/
public void onDreamingStarted() {
mUpdateMonitor.dispatchDreamingStarted();
synchronized (this) {
final boolean alwaysShowKeyguard =
mFeatureFlags.isEnabled(Flags.LOCKSCREEN_WITHOUT_SECURE_LOCK_WHEN_DREAMING);
if (mDeviceInteractive
&& mLockPatternUtils.isSecure(KeyguardUpdateMonitor.getCurrentUser())) {
&& (alwaysShowKeyguard ||
mLockPatternUtils.isSecure(KeyguardUpdateMonitor.getCurrentUser()))) {
doKeyguardLaterLocked();
}
}

View File

@@ -39,6 +39,7 @@ import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dagger.qualifiers.UiBackground;
import com.android.systemui.dreams.DreamOverlayStateController;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.flags.FeatureFlags;
import com.android.systemui.keyguard.DismissCallbackRegistry;
import com.android.systemui.keyguard.KeyguardUnlockAnimationController;
import com.android.systemui.keyguard.KeyguardViewMediator;
@@ -119,7 +120,8 @@ public class KeyguardModule {
Lazy<ShadeController> shadeController,
Lazy<NotificationShadeWindowController> notificationShadeWindowController,
Lazy<ActivityLaunchAnimator> activityLaunchAnimator,
Lazy<ScrimController> scrimControllerLazy) {
Lazy<ScrimController> scrimControllerLazy,
FeatureFlags featureFlags) {
return new KeyguardViewMediator(
context,
userTracker,
@@ -149,7 +151,8 @@ public class KeyguardModule {
shadeController,
notificationShadeWindowController,
activityLaunchAnimator,
scrimControllerLazy);
scrimControllerLazy,
featureFlags);
}
/** */

View File

@@ -66,6 +66,8 @@ import com.android.systemui.classifier.FalsingCollectorFake;
import com.android.systemui.colorextraction.SysuiColorExtractor;
import com.android.systemui.dreams.DreamOverlayStateController;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.flags.FakeFeatureFlags;
import com.android.systemui.flags.Flags;
import com.android.systemui.navigationbar.NavigationModeController;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.shade.NotificationShadeWindowControllerImpl;
@@ -142,6 +144,8 @@ public class KeyguardViewMediatorTest extends SysuiTestCase {
private @Mock CentralSurfaces mCentralSurfaces;
private FakeFeatureFlags mFeatureFlags;
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
@@ -160,6 +164,8 @@ public class KeyguardViewMediatorTest extends SysuiTestCase {
mColorExtractor, mDumpManager, mKeyguardStateController,
mScreenOffAnimationController, mAuthController, mShadeExpansionStateManager,
mShadeWindowLogger);
mFeatureFlags = new FakeFeatureFlags();
DejankUtils.setImmediate(true);
@@ -515,6 +521,28 @@ public class KeyguardViewMediatorTest extends SysuiTestCase {
verify(mStatusBarKeyguardViewManager, never()).reset(anyBoolean());
}
@Test
@TestableLooper.RunWithLooper(setAsMainLooper = true)
public void testNotStartingKeyguardWhenFlagIsDisabled() {
mViewMediator.setShowingLocked(false);
when(mKeyguardStateController.isShowing()).thenReturn(false);
mFeatureFlags.set(Flags.LOCKSCREEN_WITHOUT_SECURE_LOCK_WHEN_DREAMING, false);
mViewMediator.onDreamingStarted();
assertFalse(mViewMediator.isShowingAndNotOccluded());
}
@Test
@TestableLooper.RunWithLooper(setAsMainLooper = true)
public void testStartingKeyguardWhenFlagIsEnabled() {
mViewMediator.setShowingLocked(true);
when(mKeyguardStateController.isShowing()).thenReturn(true);
mFeatureFlags.set(Flags.LOCKSCREEN_WITHOUT_SECURE_LOCK_WHEN_DREAMING, true);
mViewMediator.onDreamingStarted();
assertTrue(mViewMediator.isShowingAndNotOccluded());
}
private void createAndStartViewMediator() {
mViewMediator = new KeyguardViewMediator(
mContext,
@@ -545,7 +573,8 @@ public class KeyguardViewMediatorTest extends SysuiTestCase {
() -> mShadeController,
() -> mNotificationShadeWindowController,
() -> mActivityLaunchAnimator,
() -> mScrimController);
() -> mScrimController,
mFeatureFlags);
mViewMediator.start();
mViewMediator.registerCentralSurfaces(mCentralSurfaces, null, null, null, null, null);