Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c9d931c9 authored by Marvin Ramin's avatar Marvin Ramin
Browse files

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
parent fa8569b0
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -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
+22 −1
Original line number Diff line number Diff line
@@ -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);

        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 {