diff options
| author | 2024-09-18 17:38:55 +0200 | |
|---|---|---|
| committer | 2024-09-18 19:06:22 +0200 | |
| commit | c9d931c97e915ee4398b6ea41d7b398cb33e1bc2 (patch) | |
| tree | 770de19865a7a36802b55d6d22372c1db4b5ac0b | |
| parent | fa8569b0abaef8bd0961467ce1b7af2277d619e8 (diff) | |
Request dismissing keyguard when showing MediaProjection Dialog
If the MediaProjection Dialog is about to show on top of keyguard,
instead requets the user to unlock their device first.
Bug: 351409536
Test: manual + presubmit
Flag: com.android.systemui.media_projection_dialog_behind_lockscreen
Change-Id: I45867660f88a2a59c16b95126d776ad8d3d88b35
| -rw-r--r-- | packages/SystemUI/aconfig/systemui.aconfig | 10 | ||||
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/mediaprojection/permission/MediaProjectionPermissionActivity.java | 23 |
2 files changed, 32 insertions, 1 deletions
diff --git a/packages/SystemUI/aconfig/systemui.aconfig b/packages/SystemUI/aconfig/systemui.aconfig index 98c491b82e2e..e6c68f9e5641 100644 --- a/packages/SystemUI/aconfig/systemui.aconfig +++ b/packages/SystemUI/aconfig/systemui.aconfig @@ -1408,3 +1408,13 @@ flag { description: "Allow non-touchscreen devices to bypass falsing" bug: "319809270" } + +flag { + name: "media_projection_dialog_behind_lockscreen" + namespace: "systemui" + description: "Ensure MediaProjection Dialog appears behind the lockscreen" + bug: "351409536" + metadata { + purpose: PURPOSE_BUGFIX + } +}
\ No newline at end of file diff --git a/packages/SystemUI/src/com/android/systemui/mediaprojection/permission/MediaProjectionPermissionActivity.java b/packages/SystemUI/src/com/android/systemui/mediaprojection/permission/MediaProjectionPermissionActivity.java index 4251b81226b3..8351597f35de 100644 --- a/packages/SystemUI/src/com/android/systemui/mediaprojection/permission/MediaProjectionPermissionActivity.java +++ b/packages/SystemUI/src/com/android/systemui/mediaprojection/permission/MediaProjectionPermissionActivity.java @@ -34,6 +34,7 @@ import android.annotation.RequiresPermission; import android.app.Activity; import android.app.ActivityOptions.LaunchCookie; import android.app.AlertDialog; +import android.app.KeyguardManager; import android.app.StatusBarManager; import android.app.compat.CompatChanges; import android.content.Context; @@ -83,6 +84,7 @@ public class MediaProjectionPermissionActivity extends Activity { private final StatusBarManager mStatusBarManager; private final MediaProjectionMetricsLogger mMediaProjectionMetricsLogger; private final ScreenCaptureDisabledDialogDelegate mScreenCaptureDisabledDialogDelegate; + private final KeyguardManager mKeyguardManager; private String mPackageName; private int mUid; @@ -101,11 +103,13 @@ public class MediaProjectionPermissionActivity extends Activity { FeatureFlags featureFlags, Lazy<ScreenCaptureDevicePolicyResolver> screenCaptureDevicePolicyResolver, StatusBarManager statusBarManager, + KeyguardManager keyguardManager, MediaProjectionMetricsLogger mediaProjectionMetricsLogger, ScreenCaptureDisabledDialogDelegate screenCaptureDisabledDialogDelegate) { mFeatureFlags = featureFlags; mScreenCaptureDevicePolicyResolver = screenCaptureDevicePolicyResolver; mStatusBarManager = statusBarManager; + mKeyguardManager = keyguardManager; mMediaProjectionMetricsLogger = mediaProjectionMetricsLogger; mScreenCaptureDisabledDialogDelegate = screenCaptureDisabledDialogDelegate; } @@ -208,7 +212,14 @@ public class MediaProjectionPermissionActivity extends Activity { } setUpDialog(mDialog); - mDialog.show(); + + boolean shouldDismissKeyguard = + com.android.systemui.Flags.mediaProjectionDialogBehindLockscreen(); + if (shouldDismissKeyguard && mKeyguardManager.isDeviceLocked()) { + requestDeviceUnlock(); + } else { + mDialog.show(); + } if (savedInstanceState == null) { mMediaProjectionMetricsLogger.notifyPermissionRequestDisplayed(mUid); @@ -332,6 +343,16 @@ public class MediaProjectionPermissionActivity extends Activity { return false; } + private void requestDeviceUnlock() { + mKeyguardManager.requestDismissKeyguard(this, + new KeyguardManager.KeyguardDismissCallback() { + @Override + public void onDismissSucceeded() { + mDialog.show(); + } + }); + } + private void grantMediaProjectionPermission( int screenShareMode, boolean hasCastingCapabilities) { try { |