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(); }