[Keyguard] Fix unlock animation for occluded LS.
When we open shade from dream (which is in an occluded keyguard state) and open settings. We are prompted to authenticate with the bouncer. Upon doing so, the app hangs in keyguard even though the user is no unlocked. In order to fix this, we opt not to defer keyguard done when keyguard is occluded. Test: Manual and a unit test Bug: 228064734 Change-Id: I58aebe033f069dc6bedb3ad3a78da849ed29dc78
This commit is contained in:
@@ -2560,8 +2560,13 @@ public class CentralSurfacesImpl extends CoreStartable implements
|
||||
callback.onActivityStarted(ActivityManager.START_CANCELED);
|
||||
}
|
||||
};
|
||||
// Do not deferKeyguard when occluded because, when keyguard is occluded,
|
||||
// we do not launch the activity until keyguard is done.
|
||||
boolean occluded = mStatusBarKeyguardViewManager.isShowing()
|
||||
&& mStatusBarKeyguardViewManager.isOccluded();
|
||||
boolean deferred = !occluded;
|
||||
executeRunnableDismissingKeyguard(runnable, cancelRunnable, dismissShadeDirectly,
|
||||
willLaunchResolverActivity, true /* deferred */, animate);
|
||||
willLaunchResolverActivity, deferred /* deferred */, animate);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
|
||||
@@ -19,6 +19,8 @@ package com.android.systemui.statusbar.phone;
|
||||
import static android.app.NotificationManager.IMPORTANCE_HIGH;
|
||||
import static android.app.NotificationManager.Policy.SUPPRESSED_EFFECT_PEEK;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import static junit.framework.Assert.assertFalse;
|
||||
import static junit.framework.Assert.assertTrue;
|
||||
import static junit.framework.TestCase.fail;
|
||||
@@ -44,6 +46,7 @@ import android.app.WallpaperManager;
|
||||
import android.app.trust.TrustManager;
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.ContentResolver;
|
||||
import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.hardware.devicestate.DeviceStateManager;
|
||||
import android.hardware.display.AmbientDisplayConfiguration;
|
||||
@@ -999,6 +1002,22 @@ public class CentralSurfacesImplTest extends SysuiTestCase {
|
||||
verify(mStatusBarStateController, never()).setLeaveOpenOnKeyguardHide(true);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void startActivityDismissingKeyguard_isShowingandIsOccluded() {
|
||||
when(mStatusBarKeyguardViewManager.isShowing()).thenReturn(true);
|
||||
when(mStatusBarKeyguardViewManager.isOccluded()).thenReturn(true);
|
||||
mCentralSurfaces.startActivityDismissingKeyguard(
|
||||
new Intent(),
|
||||
/* onlyProvisioned = */false,
|
||||
/* dismissShade = */false);
|
||||
verify(mStatusBarKeyguardViewManager).addAfterKeyguardGoneRunnable(any(Runnable.class));
|
||||
ArgumentCaptor<OnDismissAction> onDismissActionCaptor =
|
||||
ArgumentCaptor.forClass(OnDismissAction.class);
|
||||
verify(mStatusBarKeyguardViewManager)
|
||||
.dismissWithAction(onDismissActionCaptor.capture(), any(Runnable.class), eq(true));
|
||||
assertThat(onDismissActionCaptor.getValue().onDismiss()).isFalse();
|
||||
}
|
||||
|
||||
private void setDeviceState(int state) {
|
||||
ArgumentCaptor<DeviceStateManager.DeviceStateCallback> callbackCaptor =
|
||||
ArgumentCaptor.forClass(DeviceStateManager.DeviceStateCallback.class);
|
||||
|
||||
Reference in New Issue
Block a user