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

Commit 82ea198c authored by Christian Göllner's avatar Christian Göllner
Browse files

Fix media projection permission dialog too wide when in split screen

When in split screen and large screen, the dialog was using almost the
entire width of the screen.

SysUIDialog defines the dialog width based on a resource dimension.
For small screens, it is MATCH_PARENT, and for larger screens a specific
value.
For the media projection permission dialog, the context passed to the
dialog was of the activity that was on one of the sides of the split
screen, which has the same width as a small screen.

The fix is to pass the application context instead to the dialog.

Test: MediaProjectionPermissionTest
Test: Manually - Put the device in split screen while on a large screen
                 and start screen sharing.
Fixes: 263801365
Change-Id: Ifd600b7ec54deeabe28f4762ce87975d97dbc89d
parent 6c0a668d
Loading
Loading
Loading
Loading
+10 −3
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ import android.annotation.Nullable;
import android.app.Activity;
import android.app.ActivityManager;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
@@ -203,14 +204,17 @@ public class MediaProjectionPermissionActivity extends Activity
            dialogTitle = getString(R.string.media_projection_dialog_title, appName);
        }

        // Using application context for the dialog, instead of the activity context, so we get
        // the correct screen width when in split screen.
        Context dialogContext = getApplicationContext();
        if (isPartialScreenSharingEnabled()) {
            mDialog = new MediaProjectionPermissionDialog(this, () -> {
            mDialog = new MediaProjectionPermissionDialog(dialogContext, () -> {
                ScreenShareOption selectedOption =
                        ((MediaProjectionPermissionDialog) mDialog).getSelectedScreenShareOption();
                grantMediaProjectionPermission(selectedOption.getMode());
            }, () -> finish(RECORD_CANCEL, /* projection= */ null), appName);
        } else {
            AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this,
            AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(dialogContext,
                    R.style.Theme_SystemUI_Dialog)
                    .setTitle(dialogTitle)
                    .setIcon(R.drawable.ic_media_projection_permission)
@@ -263,7 +267,10 @@ public class MediaProjectionPermissionActivity extends Activity
        final UserHandle hostUserHandle = getHostUserHandle();
        if (mScreenCaptureDevicePolicyResolver.get()
                .isScreenCaptureCompletelyDisabled(hostUserHandle)) {
            AlertDialog dialog = new ScreenCaptureDisabledDialog(this);
            // Using application context for the dialog, instead of the activity context, so we get
            // the correct screen width when in split screen.
            Context dialogContext = getApplicationContext();
            AlertDialog dialog = new ScreenCaptureDisabledDialog(dialogContext);
            setUpDialog(dialog);
            dialog.show();
            return true;