From e433e9b5a2baeb339ac5fe1fe4104838fddc0a45 Mon Sep 17 00:00:00 2001 From: Milo Sredkov Date: Tue, 1 May 2018 22:45:38 +0100 Subject: [PATCH] Keep the notification shade open for smart replies Currently when the user taps on a smart reply button from a locked screen, we ask for a pattern/password and then close the notification shade. This is inconsistent with the unlocked case and with how inline replies are handled. Set mLeaveOpenOnKeyguardHide to true when handling smart reply clicks. Also simplify and rename the method in KeyguardDismissHandler to make this new behaviour clearer. Bug: 77841506 Test: Tap on a smart reply from the lockscreen, then unlock. Change-Id: If1dab2a4b0d93a512c27e6d8a870289f64c7b63d --- .../statusbar/phone/KeyguardDismissHandler.java | 8 +++++--- .../statusbar/phone/KeyguardDismissUtil.java | 5 ++--- .../android/systemui/statusbar/phone/StatusBar.java | 10 ++++++++-- .../systemui/statusbar/policy/SmartReplyView.java | 3 +-- .../statusbar/policy/SmartReplyViewTest.java | 13 +++---------- 5 files changed, 19 insertions(+), 20 deletions(-) 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();