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

Commit 5be11e8a authored by Treehugger Robot's avatar Treehugger Robot Committed by Automerger Merge Worker
Browse files

Merge "[MediaProjection] Clarify createVirtualDisplay exception javadoc" into...

Merge "[MediaProjection] Clarify createVirtualDisplay exception javadoc" into udc-dev am: 057c1e7c

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/23727947



Change-Id: I3203ca9f2ca2f397168d3e203a63ad4a643d4ef6
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents d188be4d 057c1e7c
Loading
Loading
Loading
Loading
+20 −15
Original line number Diff line number Diff line
@@ -171,25 +171,30 @@ public final class MediaProjection {
     * @param handler  The {@link android.os.Handler} on which the callback should be invoked, or
     *                 null if the callback should be invoked on the calling thread's main
     *                 {@link android.os.Looper}.
     * @throws IllegalStateException In the following scenarios, if the target SDK is {@link
     *                               android.os.Build.VERSION_CODES#UPSIDE_DOWN_CAKE U} and up:
     * @throws IllegalStateException If the target SDK is {@link
     *                               android.os.Build.VERSION_CODES#UPSIDE_DOWN_CAKE U} and up, and
     *                               if no {@link Callback} is registered.
     * @throws SecurityException In any of the following scenarios:
     *                               <ol>
     *                                 <li>If no {@link Callback} is registered.</li>
     *                                 <li>If {@link MediaProjectionManager#getMediaProjection}
     *                                 <li>If attempting to create a new virtual display
     *                                 associated with this MediaProjection instance after it has
     *                                 been stopped by invoking {@link #stop()}.
     *                                 <li>If the target SDK is {@link
     *                                 android.os.Build.VERSION_CODES#UPSIDE_DOWN_CAKE U} and up,
     *                                 and if this instance has already taken a recording through
     *                                 {@code #createVirtualDisplay}, but {@link #stop()} wasn't
     *                                 invoked to end the recording.
     *                                 <li>If the target SDK is {@link
     *                                 android.os.Build.VERSION_CODES#UPSIDE_DOWN_CAKE U} and up,
     *                                 and if {@link MediaProjectionManager#getMediaProjection}
     *                                 was invoked more than once to get this
     *                                 {@code MediaProjection} instance.
     *                                 <li>If this instance has already taken a recording through
     *                                 {@code #createVirtualDisplay}.
     *                               </ol>
     *                               However, if the target SDK is less than
     *                               {@link android.os.Build.VERSION_CODES#UPSIDE_DOWN_CAKE U}, no
     *                               exception is thrown. In case 1, recording begins even without
     *                               the callback. In case 2 & 3, recording doesn't begin
     *                               until the user re-grants consent in the dialog.
     * @throws SecurityException If attempting to create a new virtual display associated with this
     *                           MediaProjection instance after it has been stopped by invoking
     *                           {@link #stop()}.
     *
     *                               In cases 2 & 3, no exception is thrown if the target SDK is
     *                               less than
     *                               {@link android.os.Build.VERSION_CODES#UPSIDE_DOWN_CAKE U}.
     *                               Instead, recording doesn't begin until the user re-grants
     *                               consent in the dialog.
     * @see VirtualDisplay
     * @see VirtualDisplay.Callback
     */
+1 −1
Original line number Diff line number Diff line
@@ -1078,7 +1078,7 @@ public final class MediaProjectionManagerService extends SystemService
                    // Tear down projection here; necessary to ensure (among other reasons) that
                    // stop is dispatched to client and cast icon disappears from status bar.
                    mProjectionGrant.stop();
                    throw new IllegalStateException("Don't re-use the resultData to retrieve "
                    throw new SecurityException("Don't re-use the resultData to retrieve "
                            + "the same projection instance, and don't use a token that has "
                            + "timed out. Don't take multiple captures by invoking "
                            + "MediaProjection#createVirtualDisplay multiple times on the "
+1 −1
Original line number Diff line number Diff line
@@ -344,7 +344,7 @@ public class MediaProjectionManagerServiceTest {
        // Second start - so not valid.
        projection.start(mIMediaProjectionCallback);

        assertThrows(IllegalStateException.class, projection::isValid);
        assertThrows(SecurityException.class, projection::isValid);
    }

    // TODO(269273190): Test flag using compat annotations instead.