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

Commit 88625400 authored by Naomi Musgrave's avatar Naomi Musgrave
Browse files

(4/N)[MediaProjection] Don't send result to server until setup ends

SysUI sends a result to MediaProjectionManagerService if the setup
flow was launched by the service, to handle projection token reuse.

If another activity is launched as part of the MediaProjection setup flow,
do not send the result to the server when the permission dialog is
dismissed; let the next activity handle sending the result.

Bug: 253218374
Test: manual
Change-Id: I92b27262a86f13c370f69fa14f427f4107c4df70
parent 92b3d1a6
Loading
Loading
Loading
Loading
+9 −2
Original line number Diff line number Diff line
@@ -79,6 +79,9 @@ public class MediaProjectionPermissionActivity extends Activity
    // Indicates if user must review already-granted consent that the MediaProjection app is
    // attempting to re-use.
    private boolean mReviewGrantedConsentRequired = false;
    // Indicates if the user has consented to record, but is continuing in another activity to
    // select a particular task to capture.
    private boolean mUserSelectingTask = false;

    @Inject
    public MediaProjectionPermissionActivity(FeatureFlags featureFlags,
@@ -296,6 +299,7 @@ public class MediaProjectionPermissionActivity extends Activity
                // Start activity from the current foreground user to avoid creating a separate
                // SystemUI process without access to recent tasks because it won't have
                // WM Shell running inside.
                mUserSelectingTask = true;
                startActivityAsUser(intent, UserHandle.of(ActivityManager.getCurrentUser()));
            }
        } catch (RemoteException e) {
@@ -316,8 +320,11 @@ public class MediaProjectionPermissionActivity extends Activity
    @Override
    public void finish() {
        // Default to cancelling recording when user needs to review consent.
        // Don't send cancel if the user has moved on to the next activity.
        if (!mUserSelectingTask) {
            finish(RECORD_CANCEL, /* projection= */ null);
        }
    }

    private void finish(@ReviewGrantedConsentResult int consentResult,
            @Nullable IMediaProjection projection) {
@@ -328,7 +335,7 @@ public class MediaProjectionPermissionActivity extends Activity

    private void onDialogDismissedOrCancelled(DialogInterface dialogInterface) {
        if (!isFinishing()) {
            finish(RECORD_CANCEL, /* projection= */ null);
            finish();
        }
    }