(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
diff --git a/packages/SystemUI/src/com/android/systemui/media/MediaProjectionPermissionActivity.java b/packages/SystemUI/src/com/android/systemui/media/MediaProjectionPermissionActivity.java
index 28adfbb..c9c2ea2 100644
--- a/packages/SystemUI/src/com/android/systemui/media/MediaProjectionPermissionActivity.java
+++ b/packages/SystemUI/src/com/android/systemui/media/MediaProjectionPermissionActivity.java
@@ -79,6 +79,9 @@
     // 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 @@
                 // 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,7 +320,10 @@
     @Override
     public void finish() {
         // Default to cancelling recording when user needs to review consent.
-        finish(RECORD_CANCEL, /* projection= */ null);
+        // 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,
@@ -328,7 +335,7 @@
 
     private void onDialogDismissedOrCancelled(DialogInterface dialogInterface) {
         if (!isFinishing()) {
-            finish(RECORD_CANCEL, /* projection= */ null);
+            finish();
         }
     }