diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardDismissHandler.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardDismissHandler.java index 759a0d173cdd0..76ddca47d33ec 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardDismissHandler.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardDismissHandler.java @@ -23,7 +23,9 @@ import com.android.keyguard.KeyguardHostView.OnDismissAction; /** Executes actions that require the screen to be unlocked. */ public interface KeyguardDismissHandler { - /** Executes an action that requres the screen to be unlocked. */ - void dismissKeyguardThenExecute( - OnDismissAction action, @Nullable Runnable cancelAction, boolean afterKeyguardGone); + /** + * Executes an action that requres the screen to be unlocked, showing the keyguard if + * necessary. Does not close the notification shade (in case it was open). + */ + void executeWhenUnlocked(OnDismissAction action); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardDismissUtil.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardDismissUtil.java index c38b0b63190da..d67669289915e 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardDismissUtil.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardDismissUtil.java @@ -40,14 +40,13 @@ public class KeyguardDismissUtil implements KeyguardDismissHandler { *

Must be called after {@link #setDismissHandler}. */ @Override - public void dismissKeyguardThenExecute( - OnDismissAction action, Runnable cancelAction, boolean afterKeyguardGone) { + public void executeWhenUnlocked(OnDismissAction action) { KeyguardDismissHandler dismissHandler = mDismissHandler; if (dismissHandler == null) { Log.wtf(TAG, "KeyguardDismissHandler not set."); action.onDismiss(); return; } - dismissHandler.dismissKeyguardThenExecute(action, cancelAction, afterKeyguardGone); + dismissHandler.executeWhenUnlocked(action); } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java index 57a355680c3eb..5f0759974709a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java @@ -1326,8 +1326,7 @@ public class StatusBar extends SystemUI implements DemoMode, mKeyguardViewMediatorCallback = keyguardViewMediator.getViewMediatorCallback(); mLightBarController.setFingerprintUnlockController(mFingerprintUnlockController); - Dependency.get(KeyguardDismissUtil.class).setDismissHandler( - this::dismissKeyguardThenExecute); + Dependency.get(KeyguardDismissUtil.class).setDismissHandler(this::executeWhenUnlocked); Trace.endSection(); } @@ -3088,6 +3087,13 @@ public class StatusBar extends SystemUI implements DemoMode, } } + private void executeWhenUnlocked(OnDismissAction action) { + if (mStatusBarKeyguardViewManager.isShowing()) { + mLeaveOpenOnKeyguardHide = true; + } + dismissKeyguardThenExecute(action, null /* cancelAction */, false /* afterKeyguardGone */); + } + protected void dismissKeyguardThenExecute(OnDismissAction action, boolean afterKeyguardGone) { dismissKeyguardThenExecute(action, null /* cancelRunnable */, afterKeyguardGone); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SmartReplyView.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SmartReplyView.java index b4fa2e8b16f82..351868dd8b7b8 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SmartReplyView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SmartReplyView.java @@ -183,8 +183,7 @@ public class SmartReplyView extends ViewGroup { }; b.setOnClickListener(view -> { - mKeyguardDismissUtil.dismissKeyguardThenExecute( - action, null /* cancelAction */, false /* afterKeyguardGone */); + mKeyguardDismissUtil.executeWhenUnlocked(action); }); b.setAccessibilityDelegate(new AccessibilityDelegate() { diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SmartReplyViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SmartReplyViewTest.java index 99c06e62d4bb1..f3d79fd589829 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SmartReplyViewTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SmartReplyViewTest.java @@ -87,8 +87,7 @@ public class SmartReplyViewTest extends SysuiTestCase { MockitoAnnotations.initMocks(this); mReceiver = new BlockingQueueIntentReceiver(); mContext.registerReceiver(mReceiver, new IntentFilter(TEST_ACTION)); - mDependency.get(KeyguardDismissUtil.class).setDismissHandler( - (action, cancelAction, afterKeyguardGone) -> action.onDismiss()); + mDependency.get(KeyguardDismissUtil.class).setDismissHandler(action -> action.onDismiss()); mContainer = new View(mContext, null); mView = SmartReplyView.inflate(mContext, null); @@ -130,12 +129,7 @@ public class SmartReplyViewTest extends SysuiTestCase { @Test public void testSendSmartReply_keyguardCancelled() throws InterruptedException { - mDependency.get(KeyguardDismissUtil.class).setDismissHandler( - (action, cancelAction, afterKeyguardGone) -> { - if (cancelAction != null) { - cancelAction.run(); - } - }); + mDependency.get(KeyguardDismissUtil.class).setDismissHandler(action -> {}); setRepliesFromRemoteInput(TEST_CHOICES); mView.getChildAt(2).performClick(); @@ -146,8 +140,7 @@ public class SmartReplyViewTest extends SysuiTestCase { @Test public void testSendSmartReply_waitsForKeyguard() throws InterruptedException { AtomicReference actionRef = new AtomicReference<>(); - mDependency.get(KeyguardDismissUtil.class).setDismissHandler( - (action, cancelAction, afterKeyguardGone) -> actionRef.set(action)); + mDependency.get(KeyguardDismissUtil.class).setDismissHandler(actionRef::set); setRepliesFromRemoteInput(TEST_CHOICES); mView.getChildAt(2).performClick();