Request keyguard dismissal from suspend dialog
Sometimes a suspended app may be started while the device is locked. The
suspend dialog should request the user to unlock in these cases.
Test: Manual:
1. Suspend camera app.
2. Lock the screen.
3. Try to launch the camera while the screen is locked, e.g., by double
tapping the power button.
Bug: 157867645
Change-Id: Ie3b5e2903804bc8b385de4fc9276dd55a8108c0f
Merged-In: Ie3b5e2903804bc8b385de4fc9276dd55a8108c0f
diff --git a/core/java/com/android/internal/app/SuspendedAppActivity.java b/core/java/com/android/internal/app/SuspendedAppActivity.java
index 0589baa..d8eaeda 100644
--- a/core/java/com/android/internal/app/SuspendedAppActivity.java
+++ b/core/java/com/android/internal/app/SuspendedAppActivity.java
@@ -26,6 +26,7 @@
import android.annotation.Nullable;
import android.app.AlertDialog;
import android.app.AppGlobals;
+import android.app.KeyguardManager;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentSender;
@@ -208,9 +209,32 @@
ap.mPositiveButtonText = getString(android.R.string.ok);
ap.mNeutralButtonText = resolveNeutralButtonText();
ap.mPositiveButtonListener = ap.mNeutralButtonListener = this;
+
+ requestDismissKeyguardIfNeeded(ap.mMessage);
+
setupAlert();
}
+ private void requestDismissKeyguardIfNeeded(CharSequence dismissMessage) {
+ final KeyguardManager km = getSystemService(KeyguardManager.class);
+ if (km.isKeyguardLocked()) {
+ km.requestDismissKeyguard(this, dismissMessage,
+ new KeyguardManager.KeyguardDismissCallback() {
+ @Override
+ public void onDismissError() {
+ Slog.e(TAG, "Error while dismissing keyguard."
+ + " Keeping the dialog visible.");
+ }
+
+ @Override
+ public void onDismissCancelled() {
+ Slog.w(TAG, "Keyguard dismiss was cancelled. Finishing.");
+ SuspendedAppActivity.this.finish();
+ }
+ });
+ }
+ }
+
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which) {