From 9aae6eca53a6d00f22da761f41a84a838211043a Mon Sep 17 00:00:00 2001 From: Dave Mankoff Date: Thu, 1 Jul 2021 11:40:55 -0400 Subject: [PATCH] Don't fire pending remote input when is phone locked. If an owner clicks "reply" on a locked device but doesn't actually unlock their device, we shouldn't attempt to satisfy the reply request. Check to ensure that the device is actually unlocked before replying. Also, if they click "emergency call", hide the shade before showing the dialer, otherwise the shade can be left visible over the top of the dialer. Fixes: 191551623 Test: manual Change-Id: Ie9e5127e19e222dcfa3c34b57aec1bc8074f5674 --- .../keyguard/EmergencyButtonController.java | 9 +++++++++ .../phone/StatusBarRemoteInputCallback.java | 15 ++++++++++----- .../phone/StatusBarRemoteInputCallbackTest.java | 5 ++++- 3 files changed, 23 insertions(+), 6 deletions(-) diff --git a/packages/SystemUI/src/com/android/keyguard/EmergencyButtonController.java b/packages/SystemUI/src/com/android/keyguard/EmergencyButtonController.java index 4275189cfe267..e7215b8ebe49a 100644 --- a/packages/SystemUI/src/com/android/keyguard/EmergencyButtonController.java +++ b/packages/SystemUI/src/com/android/keyguard/EmergencyButtonController.java @@ -34,6 +34,7 @@ import androidx.annotation.Nullable; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.keyguard.dagger.KeyguardBouncerScope; +import com.android.systemui.statusbar.phone.ShadeController; import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.ConfigurationController.ConfigurationListener; import com.android.systemui.util.EmergencyDialerConstants; @@ -50,6 +51,7 @@ public class EmergencyButtonController extends ViewController { private final TelephonyManager mTelephonyManager; private final PowerManager mPowerManager; private final ActivityTaskManager mActivityTaskManager; + private ShadeController mShadeController; private final TelecomManager mTelecomManager; private final MetricsLogger mMetricsLogger; @@ -79,6 +81,7 @@ public class EmergencyButtonController extends ViewController { ConfigurationController configurationController, KeyguardUpdateMonitor keyguardUpdateMonitor, TelephonyManager telephonyManager, PowerManager powerManager, ActivityTaskManager activityTaskManager, + ShadeController shadeController, @Nullable TelecomManager telecomManager, MetricsLogger metricsLogger) { super(view); mConfigurationController = configurationController; @@ -86,6 +89,7 @@ public class EmergencyButtonController extends ViewController { mTelephonyManager = telephonyManager; mPowerManager = powerManager; mActivityTaskManager = activityTaskManager; + mShadeController = shadeController; mTelecomManager = telecomManager; mMetricsLogger = metricsLogger; } @@ -129,6 +133,7 @@ public class EmergencyButtonController extends ViewController { mPowerManager.userActivity(SystemClock.uptimeMillis(), true); } mActivityTaskManager.stopSystemLockTaskMode(); + mShadeController.collapsePanel(false); if (mTelecomManager != null && mTelecomManager.isInCall()) { mTelecomManager.showInCallScreen(false); if (mEmergencyButtonCallback != null) { @@ -167,6 +172,7 @@ public class EmergencyButtonController extends ViewController { private final TelephonyManager mTelephonyManager; private final PowerManager mPowerManager; private final ActivityTaskManager mActivityTaskManager; + private ShadeController mShadeController; @Nullable private final TelecomManager mTelecomManager; private final MetricsLogger mMetricsLogger; @@ -175,6 +181,7 @@ public class EmergencyButtonController extends ViewController { public Factory(ConfigurationController configurationController, KeyguardUpdateMonitor keyguardUpdateMonitor, TelephonyManager telephonyManager, PowerManager powerManager, ActivityTaskManager activityTaskManager, + ShadeController shadeController, @Nullable TelecomManager telecomManager, MetricsLogger metricsLogger) { mConfigurationController = configurationController; @@ -182,6 +189,7 @@ public class EmergencyButtonController extends ViewController { mTelephonyManager = telephonyManager; mPowerManager = powerManager; mActivityTaskManager = activityTaskManager; + mShadeController = shadeController; mTelecomManager = telecomManager; mMetricsLogger = metricsLogger; } @@ -190,6 +198,7 @@ public class EmergencyButtonController extends ViewController { public EmergencyButtonController create(EmergencyButton view) { return new EmergencyButtonController(view, mConfigurationController, mKeyguardUpdateMonitor, mTelephonyManager, mPowerManager, mActivityTaskManager, + mShadeController, mTelecomManager, mMetricsLogger); } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarRemoteInputCallback.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarRemoteInputCallback.java index 983b296e006ba..95712cd303f5a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarRemoteInputCallback.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarRemoteInputCallback.java @@ -27,7 +27,6 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.IntentSender; -import android.os.Handler; import android.os.RemoteException; import android.os.UserHandle; import android.view.View; @@ -35,6 +34,7 @@ import android.view.ViewParent; import com.android.systemui.ActivityIntentHelper; import com.android.systemui.dagger.SysUISingleton; +import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.plugins.ActivityStarter; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.statusbar.ActionClickLogger; @@ -50,6 +50,8 @@ import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout; import com.android.systemui.statusbar.policy.KeyguardStateController; +import java.util.concurrent.Executor; + import javax.inject.Inject; /** @@ -65,6 +67,7 @@ public class StatusBarRemoteInputCallback implements Callback, Callbacks, private final Context mContext; private final StatusBarKeyguardViewManager mStatusBarKeyguardViewManager; private final ShadeController mShadeController; + private Executor mExecutor; private final ActivityIntentHelper mActivityIntentHelper; private final GroupExpansionManager mGroupExpansionManager; private View mPendingWorkRemoteInputView; @@ -74,7 +77,6 @@ public class StatusBarRemoteInputCallback implements Callback, Callbacks, private final ActionClickLogger mActionClickLogger; private int mDisabled2; protected BroadcastReceiver mChallengeReceiver = new ChallengeReceiver(); - private Handler mMainHandler = new Handler(); /** */ @@ -89,10 +91,12 @@ public class StatusBarRemoteInputCallback implements Callback, Callbacks, ActivityStarter activityStarter, ShadeController shadeController, CommandQueue commandQueue, - ActionClickLogger clickLogger) { + ActionClickLogger clickLogger, + @Main Executor executor) { mContext = context; mStatusBarKeyguardViewManager = statusBarKeyguardViewManager; mShadeController = shadeController; + mExecutor = executor; mContext.registerReceiverAsUser(mChallengeReceiver, UserHandle.ALL, new IntentFilter(ACTION_DEVICE_LOCKED_CHANGED), null, null); mLockscreenUserManager = notificationLockscreenUserManager; @@ -113,9 +117,10 @@ public class StatusBarRemoteInputCallback implements Callback, Callbacks, boolean hasPendingRemoteInput = mPendingRemoteInputView != null; if (state == StatusBarState.SHADE && (mStatusBarStateController.leaveOpenOnKeyguardHide() || hasPendingRemoteInput)) { - if (!mStatusBarStateController.isKeyguardRequested()) { + if (!mStatusBarStateController.isKeyguardRequested() + && mKeyguardStateController.isUnlocked()) { if (hasPendingRemoteInput) { - mMainHandler.post(mPendingRemoteInputView::callOnClick); + mExecutor.execute(mPendingRemoteInputView::callOnClick); } mPendingRemoteInputView = null; } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarRemoteInputCallbackTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarRemoteInputCallbackTest.java index 6fbbee22a73c1..9a5e948b762df 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarRemoteInputCallbackTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarRemoteInputCallbackTest.java @@ -39,6 +39,8 @@ import com.android.systemui.statusbar.notification.NotificationEntryManager; import com.android.systemui.statusbar.notification.collection.legacy.NotificationGroupManagerLegacy; import com.android.systemui.statusbar.policy.DeviceProvisionedController; import com.android.systemui.statusbar.policy.KeyguardStateController; +import com.android.systemui.util.concurrency.FakeExecutor; +import com.android.systemui.util.time.FakeSystemClock; import org.junit.Before; import org.junit.Test; @@ -58,6 +60,7 @@ public class StatusBarRemoteInputCallbackTest extends SysuiTestCase { @Mock private SysuiStatusBarStateController mStatusBarStateController; @Mock private StatusBarKeyguardViewManager mStatusBarKeyguardViewManager; @Mock private ActivityStarter mActivityStarter; + private final FakeExecutor mFakeExecutor = new FakeExecutor(new FakeSystemClock()); private int mCurrentUserId = 0; private StatusBarRemoteInputCallback mRemoteInputCallback; @@ -76,7 +79,7 @@ public class StatusBarRemoteInputCallbackTest extends SysuiTestCase { mock(NotificationGroupManagerLegacy.class), mNotificationLockscreenUserManager, mKeyguardStateController, mStatusBarStateController, mStatusBarKeyguardViewManager, mActivityStarter, mShadeController, new CommandQueue(mContext), - mock(ActionClickLogger.class))); + mock(ActionClickLogger.class), mFakeExecutor)); mRemoteInputCallback.mChallengeReceiver = mRemoteInputCallback.new ChallengeReceiver(); }