diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java index eb2ee9d9762e5..9f65350ec0fd9 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java @@ -2532,8 +2532,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 diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java index 7232855081de7..74fb7f67940d1 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java @@ -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; @@ -984,6 +987,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 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 callbackCaptor = ArgumentCaptor.forClass(DeviceStateManager.DeviceStateCallback.class);