[go: nahoru, domu]

Remove unused hidden APIs

Bug: 145644087
Test: pass vct
Change-Id: Ic07b99d3da76d749f69e7c1efef6982dbfb36ac8
diff --git a/media2/session/src/androidTest/java/androidx/media2/session/MediaControllerTest.java b/media2/session/src/androidTest/java/androidx/media2/session/MediaControllerTest.java
index a89340d..7f8062e 100644
--- a/media2/session/src/androidTest/java/androidx/media2/session/MediaControllerTest.java
+++ b/media2/session/src/androidTest/java/androidx/media2/session/MediaControllerTest.java
@@ -66,7 +66,6 @@
 
 import org.junit.After;
 import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
@@ -1108,45 +1107,14 @@
     }
 
     @Test
-    @Ignore("This tests hidden API, which isn't public at this moment.")
-    public void playFromSearch() throws Exception {
-        final String request = "random query";
-        final Bundle bundle = new Bundle();
-        bundle.putString("key", "value");
-        final CountDownLatch latch = new CountDownLatch(1);
-        final SessionCallback callback = new SessionCallback() {
-            @Override
-            public int onPlayFromSearch(@NonNull MediaSession session,
-                    @NonNull ControllerInfo controller, @NonNull String query, Bundle extras) {
-                super.onPlayFromSearch(session, controller, query, extras);
-                assertEquals(mContext.getPackageName(), controller.getPackageName());
-                assertEquals(request, query);
-                assertTrue(TestUtils.equals(bundle, extras));
-                latch.countDown();
-                return RESULT_SUCCESS;
-            }
-        };
-        try (MediaSession session = new MediaSession.Builder(mContext, mPlayer)
-                .setSessionCallback(sHandlerExecutor, callback)
-                .setId("testPlayFromSearch").build()) {
-            MediaController controller = createController(session.getToken());
-            SessionResult result = controller.playFromSearch(request, bundle)
-                    .get(TIMEOUT_MS, TimeUnit.MILLISECONDS);
-            assertEquals(RESULT_SUCCESS, result.getResultCode());
-            assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
-        }
-    }
-
-    @Test
-    @Ignore("This tests hidden API, which isn't public at this moment.")
-    public void playFromUri() throws Exception {
+    public void setMediaUri() throws Exception {
         final Uri request = Uri.parse("foo://boo");
         final Bundle bundle = new Bundle();
         bundle.putString("key", "value");
         final CountDownLatch latch = new CountDownLatch(1);
         final SessionCallback callback = new SessionCallback() {
             @Override
-            public int onPlayFromUri(@NonNull MediaSession session,
+            public int onSetMediaUri(@NonNull MediaSession session,
                     @NonNull ControllerInfo controller, @NonNull Uri uri, Bundle extras) {
                 assertEquals(mContext.getPackageName(), controller.getPackageName());
                 assertEquals(request, uri);
@@ -1157,125 +1125,9 @@
         };
         try (MediaSession session = new MediaSession.Builder(mContext, mPlayer)
                 .setSessionCallback(sHandlerExecutor, callback)
-                .setId("testPlayFromUri").build()) {
+                .setId("testSetMediaUri").build()) {
             MediaController controller = createController(session.getToken());
-            SessionResult result = controller.playFromUri(request, bundle)
-                    .get(TIMEOUT_MS, TimeUnit.MILLISECONDS);
-            assertEquals(RESULT_SUCCESS, result.getResultCode());
-            assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
-        }
-    }
-
-    @Test
-    @Ignore("This tests hidden API, which isn't public at this moment.")
-    public void playFromMediaId() throws Exception {
-        final String request = "media_id";
-        final Bundle bundle = new Bundle();
-        bundle.putString("key", "value");
-        final CountDownLatch latch = new CountDownLatch(1);
-        final SessionCallback callback = new SessionCallback() {
-            @Override
-            public int onPlayFromMediaId(@NonNull MediaSession session,
-                    @NonNull ControllerInfo controller, @NonNull String mediaId, Bundle extras) {
-                assertEquals(mContext.getPackageName(), controller.getPackageName());
-                assertEquals(request, mediaId);
-                assertTrue(TestUtils.equals(bundle, extras));
-                latch.countDown();
-                return RESULT_SUCCESS;
-            }
-        };
-        try (MediaSession session = new MediaSession.Builder(mContext, mPlayer)
-                .setSessionCallback(sHandlerExecutor, callback)
-                .setId("testPlayFromMediaId").build()) {
-            MediaController controller = createController(session.getToken());
-            SessionResult result = controller.playFromMediaId(request, bundle)
-                    .get(TIMEOUT_MS, TimeUnit.MILLISECONDS);
-            assertEquals(RESULT_SUCCESS, result.getResultCode());
-            assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
-        }
-    }
-
-    @Test
-    @Ignore("This tests hidden API, which isn't public at this moment.")
-    public void prepareFromSearch() throws Exception {
-        final String request = "random query";
-        final Bundle bundle = new Bundle();
-        bundle.putString("key", "value");
-        final CountDownLatch latch = new CountDownLatch(1);
-        final SessionCallback callback = new SessionCallback() {
-            @Override
-            public int onPrepareFromSearch(@NonNull MediaSession session,
-                    @NonNull ControllerInfo controller, @NonNull String query, Bundle extras) {
-                assertEquals(mContext.getPackageName(), controller.getPackageName());
-                assertEquals(request, query);
-                assertTrue(TestUtils.equals(bundle, extras));
-                latch.countDown();
-                return RESULT_SUCCESS;
-            }
-        };
-        try (MediaSession session = new MediaSession.Builder(mContext, mPlayer)
-                .setSessionCallback(sHandlerExecutor, callback)
-                .setId("testPrepareFromSearch").build()) {
-            MediaController controller = createController(session.getToken());
-            SessionResult result = controller.prepareFromSearch(request, bundle)
-                    .get(TIMEOUT_MS, TimeUnit.MILLISECONDS);
-            assertEquals(RESULT_SUCCESS, result.getResultCode());
-            assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
-        }
-    }
-
-    @Test
-    @Ignore("This tests hidden API, which isn't public at this moment.")
-    public void prepareFromUri() throws Exception {
-        final Uri request = Uri.parse("foo://boo");
-        final Bundle bundle = new Bundle();
-        bundle.putString("key", "value");
-        final CountDownLatch latch = new CountDownLatch(1);
-        final SessionCallback callback = new SessionCallback() {
-            @Override
-            public int onPrepareFromUri(@NonNull MediaSession session,
-                    @NonNull ControllerInfo controller, @NonNull Uri uri, Bundle extras) {
-                assertEquals(mContext.getPackageName(), controller.getPackageName());
-                assertEquals(request, uri);
-                assertTrue(TestUtils.equals(bundle, extras));
-                latch.countDown();
-                return RESULT_SUCCESS;
-            }
-        };
-        try (MediaSession session = new MediaSession.Builder(mContext, mPlayer)
-                .setSessionCallback(sHandlerExecutor, callback)
-                .setId("testPrepareFromUri").build()) {
-            MediaController controller = createController(session.getToken());
-            SessionResult result = controller.prepareFromUri(request, bundle)
-                    .get(TIMEOUT_MS, TimeUnit.MILLISECONDS);
-            assertEquals(RESULT_SUCCESS, result.getResultCode());
-            assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
-        }
-    }
-
-    @Test
-    @Ignore("This tests hidden API, which isn't public at this moment.")
-    public void prepareFromMediaId() throws Exception {
-        final String request = "media_id";
-        final Bundle bundle = new Bundle();
-        bundle.putString("key", "value");
-        final CountDownLatch latch = new CountDownLatch(1);
-        final SessionCallback callback = new SessionCallback() {
-            @Override
-            public int onPrepareFromMediaId(@NonNull MediaSession session,
-                    @NonNull ControllerInfo controller, @NonNull String mediaId, Bundle extras) {
-                assertEquals(mContext.getPackageName(), controller.getPackageName());
-                assertEquals(request, mediaId);
-                assertTrue(TestUtils.equals(bundle, extras));
-                latch.countDown();
-                return RESULT_SUCCESS;
-            }
-        };
-        try (MediaSession session = new MediaSession.Builder(mContext, mPlayer)
-                .setSessionCallback(sHandlerExecutor, callback)
-                .setId("testPrepareFromMediaId").build()) {
-            MediaController controller = createController(session.getToken());
-            SessionResult result = controller.prepareFromMediaId(request, bundle)
+            SessionResult result = controller.setMediaUri(request, bundle)
                     .get(TIMEOUT_MS, TimeUnit.MILLISECONDS);
             assertEquals(RESULT_SUCCESS, result.getResultCode());
             assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
@@ -1601,7 +1453,7 @@
         final ControllerCallback callback = new ControllerCallback() {
             @Override
             public void onPlaylistChanged(@NonNull MediaController controller,
-                    @NonNull List<MediaItem> list, @Nullable MediaMetadata metadata) {
+                    @Nullable List<MediaItem> list, @Nullable MediaMetadata metadata) {
                 switch ((int) latch.getCount()) {
                     case 2:
                         assertEquals(currentItemIdx, controller.getCurrentMediaItemIndex());
@@ -1609,6 +1461,7 @@
                         break;
                     case 1:
                         assertEquals(currentItemIdx, controller.getCurrentMediaItemIndex());
+                        assertNotNull(list);
                         assertTrue(list.get(1).getMetadata().containsKey(
                                 MediaMetadata.METADATA_KEY_DURATION));
                         assertEquals(duration, list.get(1).getMetadata().getLong(
diff --git a/media2/session/src/main/aidl/androidx/media2/session/IMediaSession.aidl b/media2/session/src/main/aidl/androidx/media2/session/IMediaSession.aidl
index d626735..c6dfa57 100644
--- a/media2/session/src/main/aidl/androidx/media2/session/IMediaSession.aidl
+++ b/media2/session/src/main/aidl/androidx/media2/session/IMediaSession.aidl
@@ -48,13 +48,7 @@
     void seekTo(IMediaController caller, int seq, long pos) = 11;
     void onCustomCommand(IMediaController caller, int seq, in ParcelImpl sessionCommand,
             in Bundle args) = 12;
-    void prepareFromUri(IMediaController caller, int seq, in Uri uri, in Bundle extras) = 13;
-    void prepareFromSearch(IMediaController caller, int seq, String query, in Bundle extras) = 14;
-    void prepareFromMediaId(IMediaController caller, int seq, String mediaId,
-            in Bundle extras) = 15;
-    void playFromUri(IMediaController caller, int seq, in Uri uri, in Bundle extras) = 16;
-    void playFromSearch(IMediaController caller, int seq, String query, in Bundle extras) = 17;
-    void playFromMediaId(IMediaController caller, int seq, String mediaId, in Bundle extras) = 18;
+    // 13~18: removed
     void setRating(IMediaController caller, int seq, String mediaId, in ParcelImpl rating) = 19;
     void setPlaybackSpeed(IMediaController caller, int seq, float speed) = 20;
 
diff --git a/media2/session/src/main/java/androidx/media2/session/MediaController.java b/media2/session/src/main/java/androidx/media2/session/MediaController.java
index c9db0eb..21162b1 100644
--- a/media2/session/src/main/java/androidx/media2/session/MediaController.java
+++ b/media2/session/src/main/java/androidx/media2/session/MediaController.java
@@ -469,160 +469,6 @@
     }
 
     /**
-     * Requests that the {@link SessionPlayer} associated with the connected {@link MediaSession}
-     * starts playback for a specific media id.
-     *
-     * @param mediaId the non-empty media id
-     * @param extras optional extras that can include extra information about the media item
-     *               to be played
-     * @return a {@link ListenableFuture} representing the pending completion of the command
-     * @hide
-     */
-    @RestrictTo(LIBRARY)
-    @NonNull
-    public ListenableFuture<SessionResult> playFromMediaId(@NonNull String mediaId,
-            @Nullable Bundle extras) {
-        if (TextUtils.isEmpty(mediaId)) {
-            throw new IllegalArgumentException("mediaId shouldn't be empty");
-        }
-        if (isConnected()) {
-            return getImpl().playFromMediaId(mediaId, extras);
-        }
-        return createDisconnectedFuture();
-    }
-
-    /**
-     * Requests that the {@link SessionPlayer} associated with the connected {@link MediaSession}
-     * starts playback for a specific search query.
-     *
-     * @param query the non-empty search query
-     * @param extras optional extras that can include extra information about the query
-     * @return a {@link ListenableFuture} representing the pending completion of the command
-     * @hide
-     */
-    @RestrictTo(LIBRARY)
-    @NonNull
-    public ListenableFuture<SessionResult> playFromSearch(@NonNull String query,
-            @Nullable Bundle extras) {
-        if (TextUtils.isEmpty(query)) {
-            throw new IllegalArgumentException("query shouldn't be empty");
-        }
-        if (isConnected()) {
-            return getImpl().playFromSearch(query, extras);
-        }
-        return createDisconnectedFuture();
-    }
-
-    /**
-     * Requests that the {@link SessionPlayer} associated with the connected {@link MediaSession}
-     * starts playback for a specific {@link Uri}.
-     *
-     * @param uri the URI of the requested media
-     * @param extras optional extras that can include extra information about the media item
-     *               to be played
-     * @return a {@link ListenableFuture} representing the pending completion of the command
-     * @hide
-     */
-    @RestrictTo(LIBRARY)
-    @NonNull
-    public ListenableFuture<SessionResult> playFromUri(@NonNull Uri uri,
-            @Nullable Bundle extras) {
-        if (uri == null) {
-            throw new NullPointerException("uri shouldn't be null");
-        }
-        if (isConnected()) {
-            return getImpl().playFromUri(uri, extras);
-        }
-        return createDisconnectedFuture();
-    }
-
-    /**
-     * Requests that the {@link SessionPlayer} associated with the connected {@link MediaSession}
-     * prepares a media item with the media id for playback.
-     * In other words, other sessions can continue to play during the preparation of this session.
-     * This method can be used to speed up the start of the playback.
-     * Once the prepare is done, the session will change its playback state to
-     * {@link SessionPlayer#PLAYER_STATE_PAUSED}. Afterwards, {@link #play} can be called to start
-     * playback. If the prepare is not needed, {@link #playFromMediaId} can be directly called
-     * without this method.
-     *
-     * @param mediaId the non-empty media id
-     * @param extras optional extras that can include extra information about the media item
-     *               to be prepared
-     * @return a {@link ListenableFuture} representing the pending completion of the command
-     * @hide
-     */
-    @RestrictTo(LIBRARY)
-    @NonNull
-    public ListenableFuture<SessionResult> prepareFromMediaId(@NonNull String mediaId,
-            @Nullable Bundle extras) {
-        if (TextUtils.isEmpty(mediaId)) {
-            throw new IllegalArgumentException("mediaId shouldn't be empty");
-        }
-        if (isConnected()) {
-            return getImpl().prepareFromMediaId(mediaId, extras);
-        }
-        return createDisconnectedFuture();
-    }
-
-    /**
-     * Requests that the {@link SessionPlayer} associated with the connected {@link MediaSession}
-     * prepares a media item with the specific search query for playback.
-     * In other words, other sessions can continue to play during the preparation of this session.
-     * This method can be used to speed up the start of the playback.
-     * Once the prepare is done, the session will change its playback state to
-     * {@link SessionPlayer#PLAYER_STATE_PAUSED}. Afterwards, {@link #play} can be called to start
-     * playback. If the prepare is not needed, {@link #playFromSearch} can be directly called
-     * without this method.
-     *
-     * @param query the non-empty search query
-     * @param extras optional extras that can include extra information about the query
-     * @return a {@link ListenableFuture} representing the pending completion of the command
-     * @hide
-     */
-    @RestrictTo(LIBRARY)
-    @NonNull
-    public ListenableFuture<SessionResult> prepareFromSearch(@NonNull String query,
-            @Nullable Bundle extras) {
-        if (TextUtils.isEmpty(query)) {
-            throw new IllegalArgumentException("query shouldn't be empty");
-        }
-        if (isConnected()) {
-            return getImpl().prepareFromSearch(query, extras);
-        }
-        return createDisconnectedFuture();
-    }
-
-    /**
-     * Requests that the {@link SessionPlayer} associated with the connected {@link MediaSession}
-     * prepares a media item with the specific {@link Uri} for playback.
-     * In other words, other sessions can continue to play during the preparation of this session.
-     * This method can be used to speed up the start of the playback.
-     * Once the prepare is done, the session will change its playback state to
-     * {@link SessionPlayer#PLAYER_STATE_PAUSED}. Afterwards, {@link #play} can be called to start
-     * playback. If the prepare is not needed, {@link #playFromUri} can be directly called
-     * without this method.
-     *
-     * @param uri the URI of the requested media
-     * @param extras optional extras that can include extra information about the media item
-     *               to be prepared
-     * @return a {@link ListenableFuture} representing the pending completion of the command
-     * @hide
-     */
-    @RestrictTo(LIBRARY)
-    @NonNull
-    public ListenableFuture<SessionResult> prepareFromUri(@NonNull Uri uri,
-            @Nullable Bundle extras) {
-        if (uri == null) {
-            throw new NullPointerException("uri shouldn't be null");
-        }
-        if (isConnected()) {
-            return getImpl().prepareFromUri(uri, extras);
-        }
-        return createDisconnectedFuture();
-    }
-
-    /**
      * Requests that the connected {@link MediaSession} sets the volume of the output that is
      * playing on. The command will be ignored if it does not support
      * {@link VolumeProviderCompat#VOLUME_CONTROL_ABSOLUTE}.
@@ -1616,17 +1462,6 @@
         ListenableFuture<SessionResult> seekTo(long pos);
         ListenableFuture<SessionResult> skipForward();
         ListenableFuture<SessionResult> skipBackward();
-        ListenableFuture<SessionResult> playFromMediaId(@NonNull String mediaId,
-                @Nullable Bundle extras);
-        ListenableFuture<SessionResult> playFromSearch(@NonNull String query,
-                @Nullable Bundle extras);
-        ListenableFuture<SessionResult> playFromUri(@NonNull Uri uri, @Nullable Bundle extras);
-        ListenableFuture<SessionResult> prepareFromMediaId(@NonNull String mediaId,
-                @Nullable Bundle extras);
-        ListenableFuture<SessionResult> prepareFromSearch(@NonNull String query,
-                @Nullable Bundle extras);
-        ListenableFuture<SessionResult> prepareFromUri(@NonNull Uri uri,
-                @Nullable Bundle extras);
         ListenableFuture<SessionResult> setVolumeTo(int value, @VolumeFlags int flags);
         ListenableFuture<SessionResult> adjustVolume(@VolumeDirection int direction,
                 @VolumeFlags int flags);
diff --git a/media2/session/src/main/java/androidx/media2/session/MediaControllerImplBase.java b/media2/session/src/main/java/androidx/media2/session/MediaControllerImplBase.java
index 4389b48..c078ad4 100644
--- a/media2/session/src/main/java/androidx/media2/session/MediaControllerImplBase.java
+++ b/media2/session/src/main/java/androidx/media2/session/MediaControllerImplBase.java
@@ -41,12 +41,6 @@
 import static androidx.media2.session.SessionCommand.COMMAND_CODE_PLAYER_SKIP_TO_PREVIOUS_PLAYLIST_ITEM;
 import static androidx.media2.session.SessionCommand.COMMAND_CODE_PLAYER_UPDATE_LIST_METADATA;
 import static androidx.media2.session.SessionCommand.COMMAND_CODE_SESSION_FAST_FORWARD;
-import static androidx.media2.session.SessionCommand.COMMAND_CODE_SESSION_PLAY_FROM_MEDIA_ID;
-import static androidx.media2.session.SessionCommand.COMMAND_CODE_SESSION_PLAY_FROM_SEARCH;
-import static androidx.media2.session.SessionCommand.COMMAND_CODE_SESSION_PLAY_FROM_URI;
-import static androidx.media2.session.SessionCommand.COMMAND_CODE_SESSION_PREPARE_FROM_MEDIA_ID;
-import static androidx.media2.session.SessionCommand.COMMAND_CODE_SESSION_PREPARE_FROM_SEARCH;
-import static androidx.media2.session.SessionCommand.COMMAND_CODE_SESSION_PREPARE_FROM_URI;
 import static androidx.media2.session.SessionCommand.COMMAND_CODE_SESSION_REWIND;
 import static androidx.media2.session.SessionCommand.COMMAND_CODE_SESSION_SET_MEDIA_URI;
 import static androidx.media2.session.SessionCommand.COMMAND_CODE_SESSION_SET_RATING;
@@ -384,78 +378,6 @@
     }
 
     @Override
-    public ListenableFuture<SessionResult> playFromMediaId(@NonNull final String mediaId,
-            @Nullable final Bundle extras) {
-        return dispatchRemoteSessionTask(COMMAND_CODE_SESSION_PLAY_FROM_MEDIA_ID,
-                new RemoteSessionTask() {
-                    @Override
-                    public void run(IMediaSession iSession, int seq) throws RemoteException {
-                        iSession.playFromMediaId(mControllerStub, seq, mediaId, extras);
-                    }
-                });
-    }
-
-    @Override
-    public ListenableFuture<SessionResult> playFromSearch(@NonNull final String query,
-            @Nullable final Bundle extras) {
-        return dispatchRemoteSessionTask(COMMAND_CODE_SESSION_PLAY_FROM_SEARCH,
-                new RemoteSessionTask() {
-                    @Override
-                    public void run(IMediaSession iSession, int seq) throws RemoteException {
-                        iSession.playFromSearch(mControllerStub, seq, query, extras);
-                    }
-                });
-    }
-
-    @Override
-    public ListenableFuture<SessionResult> playFromUri(@NonNull final Uri uri,
-            @Nullable final Bundle extras) {
-        return dispatchRemoteSessionTask(COMMAND_CODE_SESSION_PLAY_FROM_URI,
-                new RemoteSessionTask() {
-                    @Override
-                    public void run(IMediaSession iSession, int seq) throws RemoteException {
-                        iSession.playFromUri(mControllerStub, seq, uri, extras);
-                    }
-                });
-    }
-
-    @Override
-    public ListenableFuture<SessionResult> prepareFromMediaId(@NonNull final String mediaId,
-            @Nullable final Bundle extras) {
-        return dispatchRemoteSessionTask(COMMAND_CODE_SESSION_PREPARE_FROM_MEDIA_ID,
-                new RemoteSessionTask() {
-                    @Override
-                    public void run(IMediaSession iSession, int seq) throws RemoteException {
-                        iSession.prepareFromMediaId(mControllerStub, seq, mediaId, extras);
-                    }
-                });
-    }
-
-    @Override
-    public ListenableFuture<SessionResult> prepareFromSearch(@NonNull final String query,
-            @Nullable final Bundle extras) {
-        return dispatchRemoteSessionTask(COMMAND_CODE_SESSION_PREPARE_FROM_SEARCH,
-                new RemoteSessionTask() {
-                    @Override
-                    public void run(IMediaSession iSession, int seq) throws RemoteException {
-                        iSession.prepareFromSearch(mControllerStub, seq, query, extras);
-                    }
-                });
-    }
-
-    @Override
-    public ListenableFuture<SessionResult> prepareFromUri(@NonNull final Uri uri,
-            @Nullable final Bundle extras) {
-        return dispatchRemoteSessionTask(COMMAND_CODE_SESSION_PREPARE_FROM_URI,
-                new RemoteSessionTask() {
-                    @Override
-                    public void run(IMediaSession iSession, int seq) throws RemoteException {
-                        iSession.prepareFromUri(mControllerStub, seq, uri, extras);
-                    }
-                });
-    }
-
-    @Override
     public ListenableFuture<SessionResult> setVolumeTo(final int value,
             final @VolumeFlags int flags) {
         return dispatchRemoteSessionTask(COMMAND_CODE_VOLUME_SET_VOLUME, new RemoteSessionTask() {
@@ -627,7 +549,6 @@
                 });
     }
 
-
     @Override
     public ListenableFuture<SessionResult> setMediaUri(@NonNull final Uri uri,
             @Nullable final Bundle extras) {
diff --git a/media2/session/src/main/java/androidx/media2/session/MediaControllerImplLegacy.java b/media2/session/src/main/java/androidx/media2/session/MediaControllerImplLegacy.java
index b56e4b3..718626e 100644
--- a/media2/session/src/main/java/androidx/media2/session/MediaControllerImplLegacy.java
+++ b/media2/session/src/main/java/androidx/media2/session/MediaControllerImplLegacy.java
@@ -333,84 +333,6 @@
     }
 
     @Override
-    public ListenableFuture<SessionResult> playFromMediaId(@NonNull String mediaId,
-            @Nullable Bundle extras) {
-        synchronized (mLock) {
-            if (!mConnected) {
-                Log.w(TAG, "Session isn't active", new IllegalStateException());
-                return createFutureWithResult(RESULT_ERROR_SESSION_DISCONNECTED);
-            }
-            mControllerCompat.getTransportControls().playFromMediaId(mediaId, extras);
-        }
-        return createFutureWithResult(RESULT_SUCCESS);
-    }
-
-    @Override
-    public ListenableFuture<SessionResult> playFromSearch(@NonNull String query,
-            @Nullable Bundle extras) {
-        synchronized (mLock) {
-            if (!mConnected) {
-                Log.w(TAG, "Session isn't active", new IllegalStateException());
-                return createFutureWithResult(RESULT_ERROR_SESSION_DISCONNECTED);
-            }
-            mControllerCompat.getTransportControls().playFromSearch(query, extras);
-        }
-        return createFutureWithResult(RESULT_SUCCESS);
-    }
-
-    @Override
-    public ListenableFuture<SessionResult> playFromUri(@NonNull Uri uri,
-            @Nullable Bundle extras) {
-        synchronized (mLock) {
-            if (!mConnected) {
-                Log.w(TAG, "Session isn't active", new IllegalStateException());
-                return createFutureWithResult(RESULT_ERROR_SESSION_DISCONNECTED);
-            }
-            mControllerCompat.getTransportControls().playFromUri(uri, extras);
-        }
-        return createFutureWithResult(RESULT_SUCCESS);
-    }
-
-    @Override
-    public ListenableFuture<SessionResult> prepareFromMediaId(@NonNull String mediaId,
-            @Nullable Bundle extras) {
-        synchronized (mLock) {
-            if (!mConnected) {
-                Log.w(TAG, "Session isn't active", new IllegalStateException());
-                return createFutureWithResult(RESULT_ERROR_SESSION_DISCONNECTED);
-            }
-            mControllerCompat.getTransportControls().prepareFromMediaId(mediaId, extras);
-        }
-        return createFutureWithResult(RESULT_SUCCESS);
-    }
-
-    @Override
-    public ListenableFuture<SessionResult> prepareFromSearch(@NonNull String query,
-            @Nullable Bundle extras) {
-        synchronized (mLock) {
-            if (!mConnected) {
-                Log.w(TAG, "Session isn't active", new IllegalStateException());
-                return createFutureWithResult(RESULT_ERROR_SESSION_DISCONNECTED);
-            }
-            mControllerCompat.getTransportControls().prepareFromSearch(query, extras);
-        }
-        return createFutureWithResult(RESULT_SUCCESS);
-    }
-
-    @Override
-    public ListenableFuture<SessionResult> prepareFromUri(@NonNull Uri uri,
-            @Nullable Bundle extras) {
-        synchronized (mLock) {
-            if (!mConnected) {
-                Log.w(TAG, "Session isn't active", new IllegalStateException());
-                return createFutureWithResult(RESULT_ERROR_SESSION_DISCONNECTED);
-            }
-            mControllerCompat.getTransportControls().prepareFromUri(uri, extras);
-        }
-        return createFutureWithResult(RESULT_SUCCESS);
-    }
-
-    @Override
     public ListenableFuture<SessionResult> setVolumeTo(int value, @VolumeFlags int flags) {
         synchronized (mLock) {
             if (!mConnected) {
diff --git a/media2/session/src/main/java/androidx/media2/session/MediaSession.java b/media2/session/src/main/java/androidx/media2/session/MediaSession.java
index 5fc9d11..a871573 100644
--- a/media2/session/src/main/java/androidx/media2/session/MediaSession.java
+++ b/media2/session/src/main/java/androidx/media2/session/MediaSession.java
@@ -654,149 +654,6 @@
         }
 
         /**
-         * Called when a controller requested to play a specific mediaId through
-         * {@link MediaController#playFromMediaId(String, Bundle)}.
-         *
-         * @param session the session for this event
-         * @param controller controller information
-         * @param mediaId non-empty media id
-         * @param extras optional extra bundle
-         * @see SessionCommand#COMMAND_CODE_SESSION_PLAY_FROM_MEDIA_ID
-         * @hide
-         */
-        @RestrictTo(LIBRARY)
-        @ResultCode
-        public int onPlayFromMediaId(@NonNull MediaSession session,
-                @NonNull ControllerInfo controller, @NonNull String mediaId,
-                @Nullable Bundle extras) {
-            return RESULT_ERROR_NOT_SUPPORTED;
-        }
-
-        /**
-         * Called when a controller requested to begin playback from a search query through
-         * {@link MediaController#playFromSearch(String, Bundle)}
-         *
-         * @param session the session for this event
-         * @param controller controller information
-         * @param query non-empty search query.
-         * @param extras optional extra bundle
-         * @see SessionCommand#COMMAND_CODE_SESSION_PLAY_FROM_SEARCH
-         * @hide
-         */
-        @RestrictTo(LIBRARY)
-        @ResultCode
-        public int onPlayFromSearch(@NonNull MediaSession session,
-                @NonNull ControllerInfo controller, @NonNull String query,
-                @Nullable Bundle extras) {
-            return RESULT_ERROR_NOT_SUPPORTED;
-        }
-
-        /**
-         * Called when a controller requested to play a specific media item represented by a URI
-         * through {@link MediaController#playFromUri(Uri, Bundle)}
-         *
-         * @param session the session for this event
-         * @param controller controller information
-         * @param uri uri
-         * @param extras optional extra bundle
-         * @see SessionCommand#COMMAND_CODE_SESSION_PLAY_FROM_URI
-         * @hide
-         */
-        @RestrictTo(LIBRARY)
-        @ResultCode
-        public int onPlayFromUri(@NonNull MediaSession session,
-                @NonNull ControllerInfo controller, @NonNull Uri uri,
-                @Nullable Bundle extras) {
-            return RESULT_ERROR_NOT_SUPPORTED;
-        }
-
-        /**
-         * Called when a controller requested to prepare for playing a specific mediaId through
-         * {@link MediaController#prepareFromMediaId(String, Bundle)}.
-         * <p>
-         * During the prepare, a session should not hold audio focus in order to allow
-         * other sessions play seamlessly. The state of playback should be updated to
-         * {@link SessionPlayer#PLAYER_STATE_PAUSED} after the prepare is done.
-         * <p>
-         * The playback of the prepared content should start in the later calls of
-         * {@link SessionPlayer#play()}.
-         * <p>
-         * Override {@link #onPlayFromMediaId} to handle requests for starting
-         * playback without preparation.
-         *
-         * @param session the session for this event
-         * @param controller controller information
-         * @param mediaId non-empty media id
-         * @param extras optional extra bundle
-         * @see SessionCommand#COMMAND_CODE_SESSION_PREPARE_FROM_MEDIA_ID
-         * @hide
-         */
-        @RestrictTo(LIBRARY)
-        @ResultCode
-        public int onPrepareFromMediaId(@NonNull MediaSession session,
-                @NonNull ControllerInfo controller, @NonNull String mediaId,
-                @Nullable Bundle extras) {
-            return RESULT_ERROR_NOT_SUPPORTED;
-        }
-
-        /**
-         * Called when a controller requested to prepare playback from a search query through
-         * {@link MediaController#prepareFromSearch(String, Bundle)}.
-         * <p>
-         * During the prepare, a session should not hold audio focus in order to allow
-         * other sessions play seamlessly. The state of playback should be updated to
-         * {@link SessionPlayer#PLAYER_STATE_PAUSED} after the prepare is done.
-         * <p>
-         * The playback of the prepared content should start in the later calls of
-         * {@link SessionPlayer#play()}.
-         * <p>
-         * Override {@link #onPlayFromSearch} to handle requests for starting playback without
-         * preparation.
-         *
-         * @param session the session for this event
-         * @param controller controller information
-         * @param query non-empty search query
-         * @param extras optional extra bundle
-         * @see SessionCommand#COMMAND_CODE_SESSION_PREPARE_FROM_SEARCH
-         * @hide
-         */
-        @RestrictTo(LIBRARY)
-        @ResultCode
-        public int onPrepareFromSearch(@NonNull MediaSession session,
-                @NonNull ControllerInfo controller, @NonNull String query,
-                @Nullable Bundle extras) {
-            return RESULT_ERROR_NOT_SUPPORTED;
-        }
-
-        /**
-         * Called when a controller requested to prepare a specific media item represented by a URI
-         * through {@link MediaController#prepareFromUri(Uri, Bundle)}.
-         * <p>
-         * During the prepare, a session should not hold audio focus in order to allow
-         * other sessions play seamlessly. The state of playback should be updated to
-         * {@link SessionPlayer#PLAYER_STATE_PAUSED} after the prepare is done.
-         * <p>
-         * The playback of the prepared content should start in the later calls of
-         * {@link SessionPlayer#play()}.
-         * <p>
-         * Override {@link #onPlayFromUri} to handle requests for starting playback without
-         * preparation.
-         *
-         * @param session the session for this event
-         * @param controller controller information
-         * @param uri uri
-         * @param extras optional extra bundle
-         * @see SessionCommand#COMMAND_CODE_SESSION_PREPARE_FROM_URI
-         * @hide
-         */
-        @RestrictTo(LIBRARY)
-        @ResultCode
-        public int onPrepareFromUri(@NonNull MediaSession session,
-                @NonNull ControllerInfo controller, @NonNull Uri uri, @Nullable Bundle extras) {
-            return RESULT_ERROR_NOT_SUPPORTED;
-        }
-
-        /**
          * Called when a controller called {@link MediaController#fastForward()}.
          * <p>
          * It can be implemented in many ways. For example, it can be implemented by seeking forward
diff --git a/media2/session/src/main/java/androidx/media2/session/MediaSessionLegacyStub.java b/media2/session/src/main/java/androidx/media2/session/MediaSessionLegacyStub.java
index 417ab1b..5a564f3 100644
--- a/media2/session/src/main/java/androidx/media2/session/MediaSessionLegacyStub.java
+++ b/media2/session/src/main/java/androidx/media2/session/MediaSessionLegacyStub.java
@@ -132,51 +132,17 @@
 
     @Override
     public void onPrepareFromMediaId(final String mediaId, final Bundle extras) {
-        dispatchSessionTask(SessionCommand.COMMAND_CODE_SESSION_PREPARE_FROM_MEDIA_ID,
-                new SessionTask() {
-                    @Override
-                    public void run(ControllerInfo controller) throws RemoteException {
-                        if (TextUtils.isEmpty(mediaId)) {
-                            Log.w(TAG, "onPrepareFromMediaId(): Ignoring empty mediaId from "
-                                    + controller);
-                            return;
-                        }
-                        mSessionImpl.getCallback().onPrepareFromMediaId(mSessionImpl.getInstance(),
-                                controller, mediaId, extras);
-                    }
-                });
+        // TODO(b/145644087): Support this
     }
 
     @Override
     public void onPrepareFromSearch(final String query, final Bundle extras) {
-        dispatchSessionTask(SessionCommand.COMMAND_CODE_SESSION_PREPARE_FROM_SEARCH,
-                new SessionTask() {
-                    @Override
-                    public void run(ControllerInfo controller) throws RemoteException {
-                        if (TextUtils.isEmpty(query)) {
-                            Log.w(TAG, "onPrepareFromSearch(): Ignoring empty query from "
-                                    + controller);
-                            return;
-                        }
-                        mSessionImpl.getCallback().onPrepareFromSearch(mSessionImpl.getInstance(),
-                                controller, query, extras);
-                    }
-                });
+        // TODO(b/145644087): Support this
     }
 
     @Override
     public void onPrepareFromUri(final Uri uri, final Bundle extras) {
-        if (uri == null) {
-            return;
-        }
-        dispatchSessionTask(SessionCommand.COMMAND_CODE_SESSION_PREPARE_FROM_URI,
-                new SessionTask() {
-                    @Override
-                    public void run(ControllerInfo controller) throws RemoteException {
-                        mSessionImpl.getCallback().onPrepareFromUri(mSessionImpl.getInstance(),
-                                controller, uri, extras);
-                    }
-                });
+        // TODO(b/145644087): Support this
     }
 
     @Override
@@ -193,51 +159,17 @@
 
     @Override
     public void onPlayFromMediaId(final String mediaId, final Bundle extras) {
-        dispatchSessionTask(SessionCommand.COMMAND_CODE_SESSION_PLAY_FROM_MEDIA_ID,
-                new SessionTask() {
-                    @Override
-                    public void run(ControllerInfo controller) throws RemoteException {
-                        if (TextUtils.isEmpty(mediaId)) {
-                            Log.w(TAG, "onPlayFromMediaId(): Ignoring empty mediaId from "
-                                    + controller);
-                            return;
-                        }
-                        mSessionImpl.getCallback().onPlayFromMediaId(mSessionImpl.getInstance(),
-                                controller, mediaId, extras);
-                    }
-                });
+        // TODO(b/145644087): Support this
     }
 
     @Override
     public void onPlayFromSearch(final String query, final Bundle extras) {
-        dispatchSessionTask(SessionCommand.COMMAND_CODE_SESSION_PLAY_FROM_SEARCH,
-                new SessionTask() {
-                    @Override
-                    public void run(ControllerInfo controller) throws RemoteException {
-                        if (TextUtils.isEmpty(query)) {
-                            Log.w(TAG, "onPlayFromSearch(): Ignoring empty query from "
-                                    + controller);
-                            return;
-                        }
-                        mSessionImpl.getCallback().onPlayFromSearch(mSessionImpl.getInstance(),
-                                controller, query, extras);
-                    }
-                });
+        // TODO(b/145644087): Support this
     }
 
     @Override
     public void onPlayFromUri(final Uri uri, final Bundle extras) {
-        if (uri == null) {
-            return;
-        }
-        dispatchSessionTask(SessionCommand.COMMAND_CODE_SESSION_PLAY_FROM_URI,
-                new SessionTask() {
-                    @Override
-                    public void run(ControllerInfo controller) throws RemoteException {
-                        mSessionImpl.getCallback().onPlayFromUri(mSessionImpl.getInstance(),
-                                controller, uri, extras);
-                    }
-                });
+        // TODO(b/145644087): Support this
     }
 
     @Override
diff --git a/media2/session/src/main/java/androidx/media2/session/MediaSessionStub.java b/media2/session/src/main/java/androidx/media2/session/MediaSessionStub.java
index bbbb496..b718300 100644
--- a/media2/session/src/main/java/androidx/media2/session/MediaSessionStub.java
+++ b/media2/session/src/main/java/androidx/media2/session/MediaSessionStub.java
@@ -659,130 +659,6 @@
     }
 
     @Override
-    public void prepareFromUri(final IMediaController caller, int seq, final Uri uri,
-            final Bundle extras) {
-        if (caller == null) {
-            return;
-        }
-        dispatchSessionTask(caller, seq, SessionCommand.COMMAND_CODE_SESSION_PREPARE_FROM_URI,
-                new SessionCallbackTask<Integer>() {
-                    @Override
-                    public Integer run(ControllerInfo controller) {
-                        if (uri == null) {
-                            Log.w(TAG, "prepareFromUri(): Ignoring null uri from " + controller);
-                            return RESULT_ERROR_BAD_VALUE;
-                        }
-                        return mSessionImpl.getCallback().onPrepareFromUri(
-                                mSessionImpl.getInstance(), controller, uri, extras);
-                    }
-                });
-    }
-
-    @Override
-    public void prepareFromSearch(final IMediaController caller, int seq, final String query,
-            final Bundle extras) {
-        if (caller == null) {
-            return;
-        }
-        dispatchSessionTask(caller, seq, SessionCommand.COMMAND_CODE_SESSION_PREPARE_FROM_SEARCH,
-                new SessionCallbackTask<Integer>() {
-                    @Override
-                    public Integer run(ControllerInfo controller) {
-                        if (TextUtils.isEmpty(query)) {
-                            Log.w(TAG, "prepareFromSearch(): Ignoring empty query from "
-                                    + controller);
-                            return RESULT_ERROR_BAD_VALUE;
-                        }
-                        return mSessionImpl.getCallback().onPrepareFromSearch(
-                                mSessionImpl.getInstance(), controller, query, extras);
-                    }
-                });
-    }
-
-    @Override
-    public void prepareFromMediaId(final IMediaController caller, int seq, final String mediaId,
-            final Bundle extras) {
-        if (caller == null) {
-            return;
-        }
-        dispatchSessionTask(caller, seq,
-                SessionCommand.COMMAND_CODE_SESSION_PREPARE_FROM_MEDIA_ID,
-                new SessionCallbackTask<Integer>() {
-                    @Override
-                    public Integer run(ControllerInfo controller) {
-                        if (TextUtils.isEmpty(mediaId)) {
-                            Log.w(TAG, "prepareFromMediaId(): Ignoring empty mediaId from "
-                                    + controller);
-                            return RESULT_ERROR_BAD_VALUE;
-                        }
-                        return mSessionImpl.getCallback().onPrepareFromMediaId(
-                                mSessionImpl.getInstance(), controller, mediaId, extras);
-                    }
-                });
-    }
-
-    @Override
-    public void playFromUri(final IMediaController caller, int seq, final Uri uri,
-            final Bundle extras) {
-        if (caller == null) {
-            return;
-        }
-        dispatchSessionTask(caller, seq, SessionCommand.COMMAND_CODE_SESSION_PLAY_FROM_URI,
-                new SessionCallbackTask<Integer>() {
-                    @Override
-                    public Integer run(ControllerInfo controller) {
-                        if (uri == null) {
-                            Log.w(TAG, "playFromUri(): Ignoring null uri from " + controller);
-                            return RESULT_ERROR_BAD_VALUE;
-                        }
-                        return mSessionImpl.getCallback().onPlayFromUri(
-                                mSessionImpl.getInstance(), controller, uri, extras);
-                    }
-                });
-    }
-
-    @Override
-    public void playFromSearch(final IMediaController caller, int seq, final String query,
-            final Bundle extras) {
-        if (caller == null) {
-            return;
-        }
-        dispatchSessionTask(caller, seq, SessionCommand.COMMAND_CODE_SESSION_PLAY_FROM_SEARCH,
-                new SessionCallbackTask<Integer>() {
-                    @Override
-                    public Integer run(ControllerInfo controller) {
-                        if (TextUtils.isEmpty(query)) {
-                            Log.w(TAG, "playFromSearch(): Ignoring empty query from " + controller);
-                            return RESULT_ERROR_BAD_VALUE;
-                        }
-                        return mSessionImpl.getCallback().onPlayFromSearch(
-                                mSessionImpl.getInstance(), controller, query, extras);
-                    }
-                });
-    }
-
-    @Override
-    public void playFromMediaId(final IMediaController caller, int seq, final String mediaId,
-            final Bundle extras) {
-        if (caller == null) {
-            return;
-        }
-        dispatchSessionTask(caller, seq, SessionCommand.COMMAND_CODE_SESSION_PLAY_FROM_MEDIA_ID,
-                new SessionCallbackTask<Integer>() {
-                    @Override
-                    public Integer run(ControllerInfo controller) {
-                        if (TextUtils.isEmpty(mediaId)) {
-                            Log.w(TAG, "playFromMediaId(): Ignoring empty mediaId from "
-                                    + controller);
-                            return RESULT_ERROR_BAD_VALUE;
-                        }
-                        return mSessionImpl.getCallback().onPlayFromMediaId(
-                                mSessionImpl.getInstance(), controller, mediaId, extras);
-                    }
-                });
-    }
-
-    @Override
     public void setRating(final IMediaController caller, int seq, final String mediaId,
             final ParcelImpl ratingParcelable) {
         if (caller == null || ratingParcelable == null) {
diff --git a/media2/session/src/main/java/androidx/media2/session/SessionCommand.java b/media2/session/src/main/java/androidx/media2/session/SessionCommand.java
index effc795..47eae9e 100644
--- a/media2/session/src/main/java/androidx/media2/session/SessionCommand.java
+++ b/media2/session/src/main/java/androidx/media2/session/SessionCommand.java
@@ -19,7 +19,6 @@
 import static androidx.annotation.RestrictTo.Scope.LIBRARY;
 
 import android.annotation.SuppressLint;
-import android.net.Uri;
 import android.os.Bundle;
 import android.text.TextUtils;
 import android.util.SparseArray;
@@ -125,12 +124,6 @@
             COMMAND_CODE_SESSION_REWIND,
             COMMAND_CODE_SESSION_SKIP_FORWARD,
             COMMAND_CODE_SESSION_SKIP_BACKWARD,
-            COMMAND_CODE_SESSION_PLAY_FROM_MEDIA_ID,
-            COMMAND_CODE_SESSION_PLAY_FROM_SEARCH,
-            COMMAND_CODE_SESSION_PLAY_FROM_URI,
-            COMMAND_CODE_SESSION_PREPARE_FROM_MEDIA_ID,
-            COMMAND_CODE_SESSION_PREPARE_FROM_SEARCH,
-            COMMAND_CODE_SESSION_PREPARE_FROM_URI,
             COMMAND_CODE_SESSION_SET_MEDIA_URI,
             COMMAND_CODE_SESSION_SET_RATING,
             COMMAND_CODE_LIBRARY_GET_LIBRARY_ROOT,
@@ -502,59 +495,7 @@
      */
     public static final int COMMAND_CODE_SESSION_SKIP_BACKWARD = 40003;
 
-    /**
-     * Command code for {@link MediaController#playFromMediaId(String, Bundle)}.
-     * <p>
-     * Code version is {@link #COMMAND_VERSION_1}.
-     * @hide
-     */
-    @RestrictTo(LIBRARY)
-    public static final int COMMAND_CODE_SESSION_PLAY_FROM_MEDIA_ID = 40004;
-
-    /**
-     * Command code for {@link MediaController#playFromSearch(String, Bundle)}.
-     * <p>
-     * Code version is {@link #COMMAND_VERSION_1}.
-     * @hide
-     */
-    @RestrictTo(LIBRARY)
-    public static final int COMMAND_CODE_SESSION_PLAY_FROM_SEARCH = 40005;
-
-    /**
-     * Command code for {@link MediaController#playFromUri(Uri, Bundle)}.
-     * <p>
-     * Code version is {@link #COMMAND_VERSION_1}.
-     * @hide
-     */
-    @RestrictTo(LIBRARY)
-    public static final int COMMAND_CODE_SESSION_PLAY_FROM_URI = 40006;
-
-    /**
-     * Command code for {@link MediaController#prepareFromMediaId(String, Bundle)}.
-     * <p>
-     * Code version is {@link #COMMAND_VERSION_1}.
-     * @hide
-     */
-    @RestrictTo(LIBRARY)
-    public static final int COMMAND_CODE_SESSION_PREPARE_FROM_MEDIA_ID = 40007;
-
-    /**
-     * Command code for {@link MediaController#prepareFromSearch(String, Bundle)}.
-     * <p>
-     * Code version is {@link #COMMAND_VERSION_1}.
-     * @hide
-     */
-    @RestrictTo(LIBRARY)
-    public static final int COMMAND_CODE_SESSION_PREPARE_FROM_SEARCH = 40008;
-
-    /**
-     * Command code for {@link MediaController#prepareFromUri(Uri, Bundle)}.
-     * <p>
-     * Code version is {@link #COMMAND_VERSION_1}.
-     * @hide
-     */
-    @RestrictTo(LIBRARY)
-    public static final int COMMAND_CODE_SESSION_PREPARE_FROM_URI = 40009;
+    // 40004~40009: removed
 
     /**
      * Command code for {@link MediaController#setRating(String, Rating)}.
diff --git a/media2/session/version-compat-tests/common/src/main/aidl/androidx/media2/test/common/IRemoteMediaController.aidl b/media2/session/version-compat-tests/common/src/main/aidl/androidx/media2/test/common/IRemoteMediaController.aidl
index e48bec4..5f7a7dd 100644
--- a/media2/session/version-compat-tests/common/src/main/aidl/androidx/media2/test/common/IRemoteMediaController.aidl
+++ b/media2/session/version-compat-tests/common/src/main/aidl/androidx/media2/test/common/IRemoteMediaController.aidl
@@ -54,12 +54,6 @@
     void rewind(String controllerId);
     void skipForward(String controllerId);
     void skipBackward(String controllerId);
-    void playFromMediaId(String controllerId, String mediaId, in Bundle extras);
-    void playFromSearch(String controllerId, String query, in Bundle extras);
-    void playFromUri(String controllerId, in Uri uri, in Bundle extras);
-    void prepareFromMediaId(String controllerId, String mediaId, in Bundle extras);
-    void prepareFromSearch(String controllerId, String query, in Bundle extras);
-    void prepareFromUri(String controllerId, in Uri uri, in Bundle extras);
     void setRating(String controllerId, String mediaId, in ParcelImpl rating);
     void close(String controllerId);
 
diff --git a/media2/session/version-compat-tests/current/client/src/androidTest/java/androidx/media2/test/client/MediaControllerProviderService.java b/media2/session/version-compat-tests/current/client/src/androidTest/java/androidx/media2/test/client/MediaControllerProviderService.java
index 150e8ea..c5e7e6c 100644
--- a/media2/session/version-compat-tests/current/client/src/androidTest/java/androidx/media2/test/client/MediaControllerProviderService.java
+++ b/media2/session/version-compat-tests/current/client/src/androidTest/java/androidx/media2/test/client/MediaControllerProviderService.java
@@ -331,48 +331,6 @@
         }
 
         @Override
-        public void playFromMediaId(String controllerId, String mediaId, Bundle extras)
-                throws RemoteException {
-            MediaController controller = mMediaControllerMap.get(controllerId);
-            controller.playFromMediaId(mediaId, extras);
-        }
-
-        @Override
-        public void playFromSearch(String controllerId, String query, Bundle extras)
-                throws RemoteException {
-            MediaController controller = mMediaControllerMap.get(controllerId);
-            controller.playFromSearch(query, extras);
-        }
-
-        @Override
-        public void playFromUri(String controllerId, Uri uri, Bundle extras)
-                throws RemoteException {
-            MediaController controller = mMediaControllerMap.get(controllerId);
-            controller.playFromUri(uri, extras);
-        }
-
-        @Override
-        public void prepareFromMediaId(String controllerId, String mediaId, Bundle extras)
-                throws RemoteException {
-            MediaController controller = mMediaControllerMap.get(controllerId);
-            controller.prepareFromMediaId(mediaId, extras);
-        }
-
-        @Override
-        public void prepareFromSearch(String controllerId, String query, Bundle extras)
-                throws RemoteException {
-            MediaController controller = mMediaControllerMap.get(controllerId);
-            controller.prepareFromSearch(query, extras);
-        }
-
-        @Override
-        public void prepareFromUri(String controllerId, Uri uri, Bundle extras)
-                throws RemoteException {
-            MediaController controller = mMediaControllerMap.get(controllerId);
-            controller.prepareFromUri(uri, extras);
-        }
-
-        @Override
         public void setRating(String controllerId, String mediaId, ParcelImpl rating)
                 throws RemoteException {
             MediaController controller = mMediaControllerMap.get(controllerId);
diff --git a/media2/session/version-compat-tests/current/service/src/androidTest/java/androidx/media2/test/service/RemoteMediaController.java b/media2/session/version-compat-tests/current/service/src/androidTest/java/androidx/media2/test/service/RemoteMediaController.java
index 29ad7ea..7ca0a13 100644
--- a/media2/session/version-compat-tests/current/service/src/androidTest/java/androidx/media2/test/service/RemoteMediaController.java
+++ b/media2/session/version-compat-tests/current/service/src/androidTest/java/androidx/media2/test/service/RemoteMediaController.java
@@ -314,54 +314,6 @@
         }
     }
 
-    public void playFromMediaId(@NonNull String mediaId, @Nullable Bundle extras) {
-        try {
-            mBinder.playFromMediaId(mControllerId, mediaId, extras);
-        } catch (RemoteException ex) {
-            Log.e(TAG, "Failed to call playFromMediaId()");
-        }
-    }
-
-    public void playFromSearch(@NonNull String query, @Nullable Bundle extras) {
-        try {
-            mBinder.playFromSearch(mControllerId, query, extras);
-        } catch (RemoteException ex) {
-            Log.e(TAG, "Failed to call playFromSearch()");
-        }
-    }
-
-    public void playFromUri(@NonNull Uri uri, @Nullable Bundle extras) {
-        try {
-            mBinder.playFromUri(mControllerId, uri, extras);
-        } catch (RemoteException ex) {
-            Log.e(TAG, "Failed to call playFromUri()");
-        }
-    }
-
-    public void prepareFromMediaId(@NonNull String mediaId, @Nullable Bundle extras) {
-        try {
-            mBinder.prepareFromMediaId(mControllerId, mediaId, extras);
-        } catch (RemoteException ex) {
-            Log.e(TAG, "Failed to call prepareFromMediaId()");
-        }
-    }
-
-    public void prepareFromSearch(@NonNull String query, @Nullable Bundle extras) {
-        try {
-            mBinder.prepareFromSearch(mControllerId, query, extras);
-        } catch (RemoteException ex) {
-            Log.e(TAG, "Failed to call prepareFromSearch()");
-        }
-    }
-
-    public void prepareFromUri(@NonNull Uri uri, @Nullable Bundle extras) {
-        try {
-            mBinder.prepareFromUri(mControllerId, uri, extras);
-        } catch (RemoteException ex) {
-            Log.e(TAG, "Failed to call prepareFromUri()");
-        }
-    }
-
     public void setRating(@NonNull String mediaId, @NonNull Rating rating) {
         try {
             mBinder.setRating(mControllerId, mediaId, MediaParcelUtils.toParcelable(rating));
diff --git a/media2/session/version-compat-tests/current/service/src/androidTest/java/androidx/media2/test/service/tests/MediaSessionCallbackTest.java b/media2/session/version-compat-tests/current/service/src/androidTest/java/androidx/media2/test/service/tests/MediaSessionCallbackTest.java
index badf2c2..f6bc94e 100644
--- a/media2/session/version-compat-tests/current/service/src/androidTest/java/androidx/media2/test/service/tests/MediaSessionCallbackTest.java
+++ b/media2/session/version-compat-tests/current/service/src/androidTest/java/androidx/media2/test/service/tests/MediaSessionCallbackTest.java
@@ -50,7 +50,6 @@
 
 import org.junit.After;
 import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
@@ -322,169 +321,6 @@
     }
 
     @Test
-    @Ignore("This tests hidden API, which isn't public at this moment.")
-    public void onPlayFromSearch() throws InterruptedException {
-        final String testQuery = "random query";
-        final Bundle testExtras = TestUtils.createTestBundle();
-        final CountDownLatch latch = new CountDownLatch(1);
-        final MediaSession.SessionCallback callback = new MediaSession.SessionCallback() {
-            @Override
-            public int onPlayFromSearch(@NonNull MediaSession session,
-                    @NonNull ControllerInfo controller, @NonNull String query, Bundle extras) {
-                assertEquals(CLIENT_PACKAGE_NAME, controller.getPackageName());
-                assertEquals(testQuery, query);
-                assertTrue(TestUtils.equals(testExtras, extras));
-                latch.countDown();
-                return RESULT_SUCCESS;
-            }
-        };
-        try (MediaSession session = new MediaSession.Builder(mContext, mPlayer)
-                .setSessionCallback(sHandlerExecutor, callback)
-                .setId("testOnPlayFromSearch").build()) {
-            RemoteMediaController controller = createRemoteController(session.getToken());
-
-            controller.playFromSearch(testQuery, testExtras);
-            assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
-        }
-    }
-
-    @Test
-    @Ignore("This tests hidden API, which isn't public at this moment.")
-    public void onPlayFromUri() throws InterruptedException {
-        final Uri testUri = Uri.parse("foo://boo");
-        final Bundle testExtras = TestUtils.createTestBundle();
-        final CountDownLatch latch = new CountDownLatch(1);
-        final MediaSession.SessionCallback callback = new MediaSession.SessionCallback() {
-            @Override
-            public int onPlayFromUri(@NonNull MediaSession session,
-                    @NonNull ControllerInfo controller, @NonNull Uri uri, Bundle extras) {
-                assertEquals(CLIENT_PACKAGE_NAME, controller.getPackageName());
-                assertEquals(testUri, uri);
-                assertTrue(TestUtils.equals(extras, extras));
-                latch.countDown();
-                return RESULT_SUCCESS;
-            }
-        };
-        try (MediaSession session = new MediaSession.Builder(mContext, mPlayer)
-                .setSessionCallback(sHandlerExecutor, callback)
-                .setId("testOnPlayFromUri")
-                .build()) {
-            RemoteMediaController controller = createRemoteController(session.getToken());
-
-            controller.playFromUri(testUri, testExtras);
-            assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
-        }
-    }
-
-    @Test
-    @Ignore("This tests hidden API, which isn't public at this moment.")
-    public void onPlayFromMediaId() throws InterruptedException {
-        final String testMediaId = "media_id";
-        final Bundle testExtras = TestUtils.createTestBundle();
-        final CountDownLatch latch = new CountDownLatch(1);
-        final MediaSession.SessionCallback callback = new MediaSession.SessionCallback() {
-            @Override
-            public int onPlayFromMediaId(@NonNull MediaSession session,
-                    @NonNull ControllerInfo controller, @NonNull String mediaId, Bundle extras) {
-                assertEquals(CLIENT_PACKAGE_NAME, controller.getPackageName());
-                assertEquals(mediaId, mediaId);
-                assertTrue(TestUtils.equals(testExtras, extras));
-                latch.countDown();
-                return RESULT_SUCCESS;
-            }
-        };
-        try (MediaSession session = new MediaSession.Builder(mContext, mPlayer)
-                .setSessionCallback(sHandlerExecutor, callback)
-                .setId("testOnPlayFromMediaId").build()) {
-            RemoteMediaController controller = createRemoteController(session.getToken());
-
-            controller.playFromMediaId(testMediaId, testExtras);
-            assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
-        }
-    }
-
-    @Test
-    @Ignore("This tests hidden API, which isn't public at this moment.")
-    public void onPrepareFromSearch() throws InterruptedException {
-        final String testQuery = "random query";
-        final Bundle testExtras = TestUtils.createTestBundle();
-        final CountDownLatch latch = new CountDownLatch(1);
-        final MediaSession.SessionCallback callback = new MediaSession.SessionCallback() {
-            @Override
-            public int onPrepareFromSearch(@NonNull MediaSession session,
-                    @NonNull ControllerInfo controller, @NonNull String query, Bundle extras) {
-                assertEquals(CLIENT_PACKAGE_NAME, controller.getPackageName());
-                assertEquals(testQuery, query);
-                assertTrue(TestUtils.equals(testExtras, extras));
-                latch.countDown();
-                return RESULT_SUCCESS;
-            }
-        };
-        try (MediaSession session = new MediaSession.Builder(mContext, mPlayer)
-                .setSessionCallback(sHandlerExecutor, callback)
-                .setId("testOnPrepareFromSearch").build()) {
-            RemoteMediaController controller = createRemoteController(session.getToken());
-
-            controller.prepareFromSearch(testQuery, testExtras);
-            assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
-        }
-    }
-
-    @Test
-    @Ignore("This tests hidden API, which isn't public at this moment.")
-    public void onPrepareFromUri() throws InterruptedException {
-        final Uri testUri = Uri.parse("foo://boo");
-        final Bundle testExtras = TestUtils.createTestBundle();
-        final CountDownLatch latch = new CountDownLatch(1);
-        final MediaSession.SessionCallback callback = new MediaSession.SessionCallback() {
-            @Override
-            public int onPrepareFromUri(@NonNull MediaSession session,
-                    @NonNull ControllerInfo controller, @NonNull Uri uri, Bundle extras) {
-                assertEquals(CLIENT_PACKAGE_NAME, controller.getPackageName());
-                assertEquals(testUri, uri);
-                assertTrue(TestUtils.equals(testExtras, extras));
-                latch.countDown();
-                return RESULT_SUCCESS;
-            }
-        };
-        try (MediaSession session = new MediaSession.Builder(mContext, mPlayer)
-                .setSessionCallback(sHandlerExecutor, callback)
-                .setId("testOnPrepareFromUri").build()) {
-            RemoteMediaController controller = createRemoteController(session.getToken());
-
-            controller.prepareFromUri(testUri, testExtras);
-            assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
-        }
-    }
-
-    @Test
-    @Ignore("This tests hidden API, which isn't public at this moment.")
-    public void onPrepareFromMediaId() throws InterruptedException {
-        final String testMediaId = "media_id";
-        final Bundle testExtras = TestUtils.createTestBundle();
-        final CountDownLatch latch = new CountDownLatch(1);
-        final MediaSession.SessionCallback callback = new MediaSession.SessionCallback() {
-            @Override
-            public int onPrepareFromMediaId(@NonNull MediaSession session,
-                    @NonNull ControllerInfo controller, @NonNull String mediaId, Bundle extras) {
-                assertEquals(CLIENT_PACKAGE_NAME, controller.getPackageName());
-                assertEquals(testMediaId, mediaId);
-                assertTrue(TestUtils.equals(testExtras, extras));
-                latch.countDown();
-                return RESULT_SUCCESS;
-            }
-        };
-        try (MediaSession session = new MediaSession.Builder(mContext, mPlayer)
-                .setSessionCallback(sHandlerExecutor, callback)
-                .setId("testOnPrepareFromMediaId").build()) {
-            RemoteMediaController controller = createRemoteController(session.getToken());
-
-            controller.prepareFromMediaId(testMediaId, testExtras);
-            assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
-        }
-    }
-
-    @Test
     public void onSetMediaUri() throws InterruptedException {
         if (!MediaTestUtils.isClientToT()) {
             return;
diff --git a/media2/session/version-compat-tests/current/service/src/androidTest/java/androidx/media2/test/service/tests/MediaSessionCallbackTestWithMediaControllerCompat.java b/media2/session/version-compat-tests/current/service/src/androidTest/java/androidx/media2/test/service/tests/MediaSessionCallbackTestWithMediaControllerCompat.java
index a671060..33ce027 100644
--- a/media2/session/version-compat-tests/current/service/src/androidTest/java/androidx/media2/test/service/tests/MediaSessionCallbackTestWithMediaControllerCompat.java
+++ b/media2/session/version-compat-tests/current/service/src/androidTest/java/androidx/media2/test/service/tests/MediaSessionCallbackTestWithMediaControllerCompat.java
@@ -30,7 +30,6 @@
 import android.content.Context;
 import android.content.Intent;
 import android.media.AudioManager;
-import android.net.Uri;
 import android.os.Build;
 import android.os.Bundle;
 import android.os.Handler;
@@ -67,7 +66,6 @@
 
 import org.junit.After;
 import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
@@ -573,175 +571,6 @@
     }
 
     @Test
-    @Ignore("This tests hidden API, which isn't public at this moment.")
-    public void testPlayFromSearch() throws InterruptedException {
-        final String request = "random query";
-        final Bundle bundle = new Bundle();
-        bundle.putString("key", "value");
-        final CountDownLatch latch = new CountDownLatch(1);
-        final SessionCallback callback = new SessionCallback() {
-            @Override
-            public int onPlayFromSearch(@NonNull MediaSession session,
-                    @NonNull ControllerInfo controller, @NonNull String query, Bundle extras) {
-                super.onPlayFromSearch(session, controller, query, extras);
-                assertEquals(EXPECTED_CONTROLLER_PACKAGE_NAME, controller.getPackageName());
-                assertEquals(request, query);
-                assertTrue(TestUtils.equals(bundle, extras));
-                latch.countDown();
-                return RESULT_SUCCESS;
-            }
-        };
-        try (MediaSession session = new MediaSession.Builder(mContext, mPlayer)
-                .setSessionCallback(sHandlerExecutor, callback)
-                .setId("testPlayFromSearch").build()) {
-            RemoteMediaControllerCompat controller = new RemoteMediaControllerCompat(
-                    mContext, session.getSessionCompat().getSessionToken(), true);
-            controller.getTransportControls().playFromSearch(request, bundle);
-            assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
-        }
-    }
-
-    @Test
-    @Ignore("This tests hidden API, which isn't public at this moment.")
-    public void testPlayFromUri() throws InterruptedException {
-        final Uri request = Uri.parse("foo://boo");
-        final Bundle bundle = new Bundle();
-        bundle.putString("key", "value");
-        final CountDownLatch latch = new CountDownLatch(1);
-        final SessionCallback callback = new SessionCallback() {
-            @Override
-            public int onPlayFromUri(@NonNull MediaSession session,
-                    @NonNull ControllerInfo controller, @NonNull Uri uri, Bundle extras) {
-                assertEquals(EXPECTED_CONTROLLER_PACKAGE_NAME, controller.getPackageName());
-                assertEquals(request, uri);
-                assertTrue(TestUtils.equals(bundle, extras));
-                latch.countDown();
-                return RESULT_SUCCESS;
-            }
-        };
-        try (MediaSession session = new MediaSession.Builder(mContext, mPlayer)
-                .setSessionCallback(sHandlerExecutor, callback)
-                .setId("testPlayFromUri").build()) {
-            RemoteMediaControllerCompat controller = new RemoteMediaControllerCompat(
-                    mContext, session.getSessionCompat().getSessionToken(), true);
-            controller.getTransportControls().playFromUri(request, bundle);
-            assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
-        }
-    }
-
-    @Test
-    @Ignore("This tests hidden API, which isn't public at this moment.")
-    public void testPlayFromMediaId() throws InterruptedException {
-        final String request = "media_id";
-        final Bundle bundle = new Bundle();
-        bundle.putString("key", "value");
-        final CountDownLatch latch = new CountDownLatch(1);
-        final SessionCallback callback = new SessionCallback() {
-            @Override
-            public int onPlayFromMediaId(@NonNull MediaSession session,
-                    @NonNull ControllerInfo controller, @NonNull String mediaId, Bundle extras) {
-                assertEquals(EXPECTED_CONTROLLER_PACKAGE_NAME, controller.getPackageName());
-                assertEquals(request, mediaId);
-                assertTrue(TestUtils.equals(bundle, extras));
-                latch.countDown();
-                return RESULT_SUCCESS;
-            }
-        };
-        try (MediaSession session = new MediaSession.Builder(mContext, mPlayer)
-                .setSessionCallback(sHandlerExecutor, callback)
-                .setId("testPlayFromMediaId").build()) {
-            RemoteMediaControllerCompat controller = new RemoteMediaControllerCompat(
-                    mContext, session.getSessionCompat().getSessionToken(), true);
-            controller.getTransportControls().playFromMediaId(request, bundle);
-            assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
-        }
-    }
-
-    @Test
-    @Ignore("This tests hidden API, which isn't public at this moment.")
-    public void testPrepareFromSearch() throws InterruptedException {
-        final String request = "random query";
-        final Bundle bundle = new Bundle();
-        bundle.putString("key", "value");
-        final CountDownLatch latch = new CountDownLatch(1);
-        final SessionCallback callback = new SessionCallback() {
-            @Override
-            public int onPrepareFromSearch(@NonNull MediaSession session,
-                    @NonNull ControllerInfo controller, @NonNull String query, Bundle extras) {
-                assertEquals(EXPECTED_CONTROLLER_PACKAGE_NAME, controller.getPackageName());
-                assertEquals(request, query);
-                assertTrue(TestUtils.equals(bundle, extras));
-                latch.countDown();
-                return RESULT_SUCCESS;
-            }
-        };
-        try (MediaSession session = new MediaSession.Builder(mContext, mPlayer)
-                .setSessionCallback(sHandlerExecutor, callback)
-                .setId("testPrepareFromSearch").build()) {
-            RemoteMediaControllerCompat controller = new RemoteMediaControllerCompat(
-                    mContext, session.getSessionCompat().getSessionToken(), true);
-            controller.getTransportControls().prepareFromSearch(request, bundle);
-            assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
-        }
-    }
-
-    @Test
-    @Ignore("This tests hidden API, which isn't public at this moment.")
-    public void testPrepareFromUri() throws InterruptedException {
-        final Uri request = Uri.parse("foo://boo");
-        final Bundle bundle = new Bundle();
-        bundle.putString("key", "value");
-        final CountDownLatch latch = new CountDownLatch(1);
-        final SessionCallback callback = new SessionCallback() {
-            @Override
-            public int onPrepareFromUri(@NonNull MediaSession session,
-                    @NonNull ControllerInfo controller, @NonNull Uri uri, Bundle extras) {
-                assertEquals(EXPECTED_CONTROLLER_PACKAGE_NAME, controller.getPackageName());
-                assertEquals(request, uri);
-                assertTrue(TestUtils.equals(bundle, extras));
-                latch.countDown();
-                return RESULT_SUCCESS;
-            }
-        };
-        try (MediaSession session = new MediaSession.Builder(mContext, mPlayer)
-                .setSessionCallback(sHandlerExecutor, callback)
-                .setId("testPrepareFromUri").build()) {
-            RemoteMediaControllerCompat controller = new RemoteMediaControllerCompat(
-                    mContext, session.getSessionCompat().getSessionToken(), true);
-            controller.getTransportControls().prepareFromUri(request, bundle);
-            assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
-        }
-    }
-
-    @Test
-    @Ignore("This tests hidden API, which isn't public at this moment.")
-    public void testPrepareFromMediaId() throws InterruptedException {
-        final String request = "media_id";
-        final Bundle bundle = new Bundle();
-        bundle.putString("key", "value");
-        final CountDownLatch latch = new CountDownLatch(1);
-        final SessionCallback callback = new SessionCallback() {
-            @Override
-            public int onPrepareFromMediaId(@NonNull MediaSession session,
-                    @NonNull ControllerInfo controller, @NonNull String mediaId, Bundle extras) {
-                assertEquals(EXPECTED_CONTROLLER_PACKAGE_NAME, controller.getPackageName());
-                assertEquals(request, mediaId);
-                assertTrue(TestUtils.equals(bundle, extras));
-                latch.countDown();
-                return RESULT_SUCCESS;
-            }
-        };
-        try (MediaSession session = new MediaSession.Builder(mContext, mPlayer)
-                .setSessionCallback(sHandlerExecutor, callback)
-                .setId("testPrepareFromMediaId").build()) {
-            RemoteMediaControllerCompat controller = new RemoteMediaControllerCompat(
-                    mContext, session.getSessionCompat().getSessionToken(), true);
-            controller.getTransportControls().prepareFromMediaId(request, bundle);
-            assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
-        }
-    }
-
-    @Test
     public void testSetRating() throws InterruptedException {
         final int ratingType = RatingCompat.RATING_5_STARS;
         final float ratingValue = 3.5f;
diff --git a/media2/session/version-compat-tests/current/service/src/androidTest/java/androidx/media2/test/service/tests/MediaSessionCompatCallbackTestWithMediaController.java b/media2/session/version-compat-tests/current/service/src/androidTest/java/androidx/media2/test/service/tests/MediaSessionCompatCallbackTestWithMediaController.java
index 1f154ed..694beed 100644
--- a/media2/session/version-compat-tests/current/service/src/androidTest/java/androidx/media2/test/service/tests/MediaSessionCompatCallbackTestWithMediaController.java
+++ b/media2/session/version-compat-tests/current/service/src/androidTest/java/androidx/media2/test/service/tests/MediaSessionCompatCallbackTestWithMediaController.java
@@ -455,96 +455,6 @@
     }
 
     @Test
-    public void testPlayFromSearch() throws Exception {
-        final String request = "random query";
-        final Bundle bundle = new Bundle();
-        bundle.putString("key", "value");
-        RemoteMediaController controller = createControllerAndWaitConnection();
-        mSessionCallback.reset(1);
-
-        controller.playFromSearch(request, bundle);
-        assertTrue(mSessionCallback.await(TIME_OUT_MS));
-        assertEquals(true, mSessionCallback.mOnPlayFromSearchCalled);
-        assertEquals(request, mSessionCallback.mQuery);
-        assertTrue(TestUtils.equals(bundle, mSessionCallback.mExtras));
-    }
-
-    @Test
-    public void testPlayFromUri() throws Exception {
-        final Uri request = Uri.parse("foo://boo");
-        final Bundle bundle = new Bundle();
-        bundle.putString("key", "value");
-        RemoteMediaController controller = createControllerAndWaitConnection();
-        mSessionCallback.reset(1);
-
-        controller.playFromUri(request, bundle);
-        assertTrue(mSessionCallback.await(TIME_OUT_MS));
-        assertEquals(true, mSessionCallback.mOnPlayFromUriCalled);
-        assertEquals(request, mSessionCallback.mUri);
-        assertTrue(TestUtils.equals(bundle, mSessionCallback.mExtras));
-    }
-
-    @Test
-    public void testPlayFromMediaId() throws Exception {
-        final String request = "media_id";
-        final Bundle bundle = new Bundle();
-        bundle.putString("key", "value");
-        RemoteMediaController controller = createControllerAndWaitConnection();
-        mSessionCallback.reset(1);
-
-        controller.playFromMediaId(request, bundle);
-        assertTrue(mSessionCallback.await(TIME_OUT_MS));
-        assertEquals(true, mSessionCallback.mOnPlayFromMediaIdCalled);
-        assertEquals(request, mSessionCallback.mMediaId);
-        assertTrue(TestUtils.equals(bundle, mSessionCallback.mExtras));
-    }
-
-    @Test
-    public void testPrepareFromSearch() throws Exception {
-        final String request = "random query";
-        final Bundle bundle = new Bundle();
-        bundle.putString("key", "value");
-        RemoteMediaController controller = createControllerAndWaitConnection();
-        mSessionCallback.reset(1);
-
-        controller.prepareFromSearch(request, bundle);
-        assertTrue(mSessionCallback.await(TIME_OUT_MS));
-        assertEquals(true, mSessionCallback.mOnPrepareFromSearchCalled);
-        assertEquals(request, mSessionCallback.mQuery);
-        assertTrue(TestUtils.equals(bundle, mSessionCallback.mExtras));
-    }
-
-    @Test
-    public void testPrepareFromUri() throws Exception {
-        final Uri request = Uri.parse("foo://boo");
-        final Bundle bundle = new Bundle();
-        bundle.putString("key", "value");
-        RemoteMediaController controller = createControllerAndWaitConnection();
-        mSessionCallback.reset(1);
-
-        controller.prepareFromUri(request, bundle);
-        assertTrue(mSessionCallback.await(TIME_OUT_MS));
-        assertEquals(true, mSessionCallback.mOnPrepareFromUriCalled);
-        assertEquals(request, mSessionCallback.mUri);
-        assertTrue(TestUtils.equals(bundle, mSessionCallback.mExtras));
-    }
-
-    @Test
-    public void testPrepareFromMediaId() throws Exception {
-        final String request = "media_id";
-        final Bundle bundle = new Bundle();
-        bundle.putString("key", "value");
-        RemoteMediaController controller = createControllerAndWaitConnection();
-        mSessionCallback.reset(1);
-
-        controller.prepareFromMediaId(request, bundle);
-        assertTrue(mSessionCallback.await(TIME_OUT_MS));
-        assertEquals(true, mSessionCallback.mOnPrepareFromMediaIdCalled);
-        assertEquals(request, mSessionCallback.mMediaId);
-        assertTrue(TestUtils.equals(bundle, mSessionCallback.mExtras));
-    }
-
-    @Test
     public void testSetRating() throws Exception {
         final float ratingValue = 3.5f;
         final Rating rating2 = new StarRating(5, ratingValue);
diff --git a/media2/session/version-compat-tests/current/service/src/androidTest/java/androidx/media2/test/service/tests/MediaSession_PermissionTest.java b/media2/session/version-compat-tests/current/service/src/androidTest/java/androidx/media2/test/service/tests/MediaSession_PermissionTest.java
index 9bd5a2a..d7c2a29 100644
--- a/media2/session/version-compat-tests/current/service/src/androidTest/java/androidx/media2/test/service/tests/MediaSession_PermissionTest.java
+++ b/media2/session/version-compat-tests/current/service/src/androidTest/java/androidx/media2/test/service/tests/MediaSession_PermissionTest.java
@@ -29,13 +29,8 @@
 import static androidx.media2.session.SessionCommand.COMMAND_CODE_PLAYER_SKIP_TO_PREVIOUS_PLAYLIST_ITEM;
 import static androidx.media2.session.SessionCommand.COMMAND_CODE_PLAYER_UPDATE_LIST_METADATA;
 import static androidx.media2.session.SessionCommand.COMMAND_CODE_SESSION_FAST_FORWARD;
-import static androidx.media2.session.SessionCommand.COMMAND_CODE_SESSION_PLAY_FROM_MEDIA_ID;
-import static androidx.media2.session.SessionCommand.COMMAND_CODE_SESSION_PLAY_FROM_SEARCH;
-import static androidx.media2.session.SessionCommand.COMMAND_CODE_SESSION_PLAY_FROM_URI;
-import static androidx.media2.session.SessionCommand.COMMAND_CODE_SESSION_PREPARE_FROM_MEDIA_ID;
-import static androidx.media2.session.SessionCommand.COMMAND_CODE_SESSION_PREPARE_FROM_SEARCH;
-import static androidx.media2.session.SessionCommand.COMMAND_CODE_SESSION_PREPARE_FROM_URI;
 import static androidx.media2.session.SessionCommand.COMMAND_CODE_SESSION_REWIND;
+import static androidx.media2.session.SessionCommand.COMMAND_CODE_SESSION_SET_MEDIA_URI;
 import static androidx.media2.session.SessionCommand.COMMAND_CODE_SESSION_SET_RATING;
 import static androidx.media2.session.SessionCommand.COMMAND_CODE_SESSION_SKIP_BACKWARD;
 import static androidx.media2.session.SessionCommand.COMMAND_CODE_SESSION_SKIP_FORWARD;
@@ -380,117 +375,25 @@
     }
 
     @Test
-    public void playFromMediaId() throws InterruptedException {
-        final String mediaId = "testPlayFromMediaId";
+    public void setMediaUri() throws InterruptedException {
+        if (!MediaTestUtils.isClientToT()) {
+            return;
+        }
+        final Uri uri = Uri.parse("media://uri");
         createSessionWithAllowedActions(
-                createCommandGroupWith(COMMAND_CODE_SESSION_PLAY_FROM_MEDIA_ID));
-        createRemoteController(mSession.getToken()).playFromMediaId(mediaId, null);
+                createCommandGroupWith(COMMAND_CODE_SESSION_SET_MEDIA_URI));
+        createRemoteController(mSession.getToken()).setMediaUri(uri, null);
 
         assertTrue(mCallback.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
-        assertTrue(mCallback.mOnPlayFromMediaIdCalled);
-        assertEquals(mediaId, mCallback.mMediaId);
-        assertNull(mCallback.mExtras);
-
-        createSessionWithAllowedActions(
-                createCommandGroupWithout(COMMAND_CODE_SESSION_PLAY_FROM_MEDIA_ID));
-        createRemoteController(mSession.getToken()).playFromMediaId(mediaId, null);
-        assertFalse(mCallback.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
-        assertFalse(mCallback.mOnPlayFromMediaIdCalled);
-    }
-
-    @Test
-    public void playFromUri() throws InterruptedException {
-        final Uri uri = Uri.parse("play://from.uri");
-        createSessionWithAllowedActions(
-                createCommandGroupWith(COMMAND_CODE_SESSION_PLAY_FROM_URI));
-        createRemoteController(mSession.getToken()).playFromUri(uri, null);
-
-        assertTrue(mCallback.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
-        assertTrue(mCallback.mOnPlayFromUriCalled);
+        assertTrue(mCallback.mOnSetMediaUriCalled);
         assertEquals(uri, mCallback.mUri);
         assertNull(mCallback.mExtras);
 
         createSessionWithAllowedActions(
-                createCommandGroupWithout(COMMAND_CODE_SESSION_PLAY_FROM_URI));
-        createRemoteController(mSession.getToken()).playFromUri(uri, null);
+                createCommandGroupWithout(COMMAND_CODE_SESSION_SET_MEDIA_URI));
+        createRemoteController(mSession.getToken()).setMediaUri(uri, null);
         assertFalse(mCallback.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
-        assertFalse(mCallback.mOnPlayFromUriCalled);
-    }
-
-    @Test
-    public void playFromSearch() throws InterruptedException {
-        final String query = "testPlayFromSearch";
-        createSessionWithAllowedActions(
-                createCommandGroupWith(COMMAND_CODE_SESSION_PLAY_FROM_SEARCH));
-        createRemoteController(mSession.getToken()).playFromSearch(query, null);
-
-        assertTrue(mCallback.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
-        assertTrue(mCallback.mOnPlayFromSearchCalled);
-        assertEquals(query, mCallback.mQuery);
-        assertNull(mCallback.mExtras);
-
-        createSessionWithAllowedActions(
-                createCommandGroupWithout(COMMAND_CODE_SESSION_PLAY_FROM_SEARCH));
-        createRemoteController(mSession.getToken()).playFromSearch(query, null);
-        assertFalse(mCallback.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
-        assertFalse(mCallback.mOnPlayFromSearchCalled);
-    }
-
-    @Test
-    public void prepareFromMediaId() throws InterruptedException {
-        final String mediaId = "testPrepareFromMediaId";
-        createSessionWithAllowedActions(
-                createCommandGroupWith(COMMAND_CODE_SESSION_PREPARE_FROM_MEDIA_ID));
-        createRemoteController(mSession.getToken()).prepareFromMediaId(mediaId, null);
-
-        assertTrue(mCallback.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
-        assertTrue(mCallback.mOnPrepareFromMediaIdCalled);
-        assertEquals(mediaId, mCallback.mMediaId);
-        assertNull(mCallback.mExtras);
-
-        createSessionWithAllowedActions(
-                createCommandGroupWithout(COMMAND_CODE_SESSION_PREPARE_FROM_MEDIA_ID));
-        createRemoteController(mSession.getToken()).prepareFromMediaId(mediaId, null);
-        assertFalse(mCallback.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
-        assertFalse(mCallback.mOnPrepareFromMediaIdCalled);
-    }
-
-    @Test
-    public void prepareFromUri() throws InterruptedException {
-        final Uri uri = Uri.parse("prepare://from.uri");
-        createSessionWithAllowedActions(
-                createCommandGroupWith(COMMAND_CODE_SESSION_PREPARE_FROM_URI));
-        createRemoteController(mSession.getToken()).prepareFromUri(uri, null);
-
-        assertTrue(mCallback.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
-        assertTrue(mCallback.mOnPrepareFromUriCalled);
-        assertEquals(uri, mCallback.mUri);
-        assertNull(mCallback.mExtras);
-
-        createSessionWithAllowedActions(
-                createCommandGroupWithout(COMMAND_CODE_SESSION_PREPARE_FROM_URI));
-        createRemoteController(mSession.getToken()).prepareFromUri(uri, null);
-        assertFalse(mCallback.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
-        assertFalse(mCallback.mOnPrepareFromUriCalled);
-    }
-
-    @Test
-    public void prepareFromSearch() throws InterruptedException {
-        final String query = "testPrepareFromSearch";
-        createSessionWithAllowedActions(
-                createCommandGroupWith(COMMAND_CODE_SESSION_PREPARE_FROM_SEARCH));
-        createRemoteController(mSession.getToken()).prepareFromSearch(query, null);
-
-        assertTrue(mCallback.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
-        assertTrue(mCallback.mOnPrepareFromSearchCalled);
-        assertEquals(query, mCallback.mQuery);
-        assertNull(mCallback.mExtras);
-
-        createSessionWithAllowedActions(
-                createCommandGroupWithout(COMMAND_CODE_SESSION_PREPARE_FROM_SEARCH));
-        createRemoteController(mSession.getToken()).prepareFromSearch(query, null);
-        assertFalse(mCallback.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
-        assertFalse(mCallback.mOnPrepareFromSearchCalled);
+        assertFalse(mCallback.mOnSetMediaUriCalled);
     }
 
     @Test
@@ -515,23 +418,24 @@
 
     @Test
     public void changingPermissionWithSetAllowedCommands() throws InterruptedException {
-        final String query = "testChangingPermissionWithSetAllowedCommands";
+        final String mediaId = "testSetRating";
+        final Rating rating = new StarRating(5, 3.5f);
         createSessionWithAllowedActions(
-                createCommandGroupWith(COMMAND_CODE_SESSION_PREPARE_FROM_SEARCH));
+                createCommandGroupWith(COMMAND_CODE_SESSION_SET_RATING));
         RemoteMediaController controller = createRemoteController(mSession.getToken());
+        controller.setRating(mediaId, rating);
 
-        controller.prepareFromSearch(query, null);
         assertTrue(mCallback.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
-        assertTrue(mCallback.mOnPrepareFromSearchCalled);
-        assertEquals(query, mCallback.mQuery);
-        assertNull(mCallback.mExtras);
+        assertTrue(mCallback.mOnSetRatingCalled);
+        assertEquals(mediaId, mCallback.mMediaId);
+        assertEquals(rating, mCallback.mRating);
         mCallback.reset();
 
         // Change allowed commands.
         mSession.setAllowedCommands(getTestControllerInfo(),
-                createCommandGroupWithout(COMMAND_CODE_SESSION_PREPARE_FROM_SEARCH));
+                createCommandGroupWithout(COMMAND_CODE_SESSION_SET_RATING));
 
-        controller.prepareFromSearch(query, null);
+        controller.setRating(mediaId, rating);
         assertFalse(mCallback.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
     }
 
@@ -557,22 +461,16 @@
 
         public SessionCommand mCommand;
         public String mMediaId;
-        public String mQuery;
         public Uri mUri;
         public Bundle mExtras;
         public Rating mRating;
 
         public boolean mOnCommandRequestCalled;
-        public boolean mOnPlayFromMediaIdCalled;
-        public boolean mOnPlayFromSearchCalled;
-        public boolean mOnPlayFromUriCalled;
-        public boolean mOnPrepareFromMediaIdCalled;
-        public boolean mOnPrepareFromSearchCalled;
-        public boolean mOnPrepareFromUriCalled;
         public boolean mOnFastForwardCalled;
         public boolean mOnRewindCalled;
         public boolean mOnSkipForwardCalled;
         public boolean mOnSkipBackwardCalled;
+        public boolean mOnSetMediaUriCalled;
         public boolean mOnSetRatingCalled;
 
 
@@ -585,19 +483,13 @@
 
             mCommand = null;
             mMediaId = null;
-            mQuery = null;
             mUri = null;
             mExtras = null;
 
             mOnCommandRequestCalled = false;
-            mOnPlayFromMediaIdCalled = false;
-            mOnPlayFromSearchCalled = false;
-            mOnPlayFromUriCalled = false;
-            mOnPrepareFromMediaIdCalled = false;
-            mOnPrepareFromSearchCalled = false;
-            mOnPrepareFromUriCalled = false;
             mOnFastForwardCalled = false;
             mOnRewindCalled = false;
+            mOnSetMediaUriCalled = false;
             mOnSetRatingCalled = false;
         }
 
@@ -647,65 +539,10 @@
         }
 
         @Override
-        public int onPlayFromMediaId(@NonNull MediaSession session,
-                @NonNull ControllerInfo controller, @NonNull String mediaId, Bundle extras) {
-            assertTrue(TextUtils.equals(CLIENT_PACKAGE_NAME, controller.getPackageName()));
-            mOnPlayFromMediaIdCalled = true;
-            mMediaId = mediaId;
-            mExtras = extras;
-            mCountDownLatch.countDown();
-            return RESULT_SUCCESS;
-        }
-
-        @Override
-        public int onPlayFromSearch(@NonNull MediaSession session,
-                @NonNull ControllerInfo controller, @NonNull String query, Bundle extras) {
-            assertTrue(TextUtils.equals(CLIENT_PACKAGE_NAME, controller.getPackageName()));
-            mOnPlayFromSearchCalled = true;
-            mQuery = query;
-            mExtras = extras;
-            mCountDownLatch.countDown();
-            return RESULT_SUCCESS;
-        }
-
-        @Override
-        public int onPlayFromUri(@NonNull MediaSession session, @NonNull ControllerInfo controller,
-                @NonNull Uri uri, Bundle extras) {
-            assertTrue(TextUtils.equals(CLIENT_PACKAGE_NAME, controller.getPackageName()));
-            mOnPlayFromUriCalled = true;
-            mUri = uri;
-            mExtras = extras;
-            mCountDownLatch.countDown();
-            return RESULT_SUCCESS;
-        }
-
-        @Override
-        public int onPrepareFromMediaId(@NonNull MediaSession session,
-                @NonNull ControllerInfo controller, @NonNull String mediaId, Bundle extras) {
-            assertTrue(TextUtils.equals(CLIENT_PACKAGE_NAME, controller.getPackageName()));
-            mOnPrepareFromMediaIdCalled = true;
-            mMediaId = mediaId;
-            mExtras = extras;
-            mCountDownLatch.countDown();
-            return RESULT_SUCCESS;
-        }
-
-        @Override
-        public int onPrepareFromSearch(@NonNull MediaSession session,
-                @NonNull ControllerInfo controller, @NonNull String query, Bundle extras) {
-            assertTrue(TextUtils.equals(CLIENT_PACKAGE_NAME, controller.getPackageName()));
-            mOnPrepareFromSearchCalled = true;
-            mQuery = query;
-            mExtras = extras;
-            mCountDownLatch.countDown();
-            return RESULT_SUCCESS;
-        }
-
-        @Override
-        public int onPrepareFromUri(@NonNull MediaSession session,
+        public int onSetMediaUri(@NonNull MediaSession session,
                 @NonNull ControllerInfo controller, @NonNull Uri uri, Bundle extras) {
             assertTrue(TextUtils.equals(CLIENT_PACKAGE_NAME, controller.getPackageName()));
-            mOnPrepareFromUriCalled = true;
+            mOnSetMediaUriCalled = true;
             mUri = uri;
             mExtras = extras;
             mCountDownLatch.countDown();
diff --git a/media2/session/version-compat-tests/current/service/src/androidTest/java/androidx/media2/test/service/tests/SessionCommandTest.java b/media2/session/version-compat-tests/current/service/src/androidTest/java/androidx/media2/test/service/tests/SessionCommandTest.java
index 2192829..575b3c8 100644
--- a/media2/session/version-compat-tests/current/service/src/androidTest/java/androidx/media2/test/service/tests/SessionCommandTest.java
+++ b/media2/session/version-compat-tests/current/service/src/androidTest/java/androidx/media2/test/service/tests/SessionCommandTest.java
@@ -120,16 +120,21 @@
     }
 
     @Test
-    public void addAllPredefinedCommands_withVersion1_notHaveHiddenCodes() {
+    public void addAllPredefinedCommands_withVersion1_notHaveVersion2Commands() {
         SessionCommandGroup.Builder builder = new SessionCommandGroup.Builder();
         builder.addAllPredefinedCommands(SessionCommand.COMMAND_VERSION_1);
         SessionCommandGroup commands = builder.build();
-        assertFalse(commands.hasCommand(SessionCommand.COMMAND_CODE_SESSION_PLAY_FROM_MEDIA_ID));
-        assertFalse(commands.hasCommand(SessionCommand.COMMAND_CODE_SESSION_PLAY_FROM_URI));
-        assertFalse(commands.hasCommand(SessionCommand.COMMAND_CODE_SESSION_PLAY_FROM_SEARCH));
-        assertFalse(commands.hasCommand(SessionCommand.COMMAND_CODE_SESSION_PREPARE_FROM_MEDIA_ID));
-        assertFalse(commands.hasCommand(SessionCommand.COMMAND_CODE_SESSION_PREPARE_FROM_URI));
-        assertFalse(commands.hasCommand(SessionCommand.COMMAND_CODE_SESSION_PREPARE_FROM_SEARCH));
+        assertFalse(commands.hasCommand(SessionCommand.COMMAND_CODE_SESSION_SET_MEDIA_URI));
+        assertFalse(commands.hasCommand(SessionCommand.COMMAND_CODE_PLAYER_MOVE_PLAYLIST_ITEM));
+    }
+
+    @Test
+    public void addAllPredefinedCommands_withVersion2_hasVersion2Commands() {
+        SessionCommandGroup.Builder builder = new SessionCommandGroup.Builder();
+        builder.addAllPredefinedCommands(SessionCommand.COMMAND_VERSION_2);
+        SessionCommandGroup commands = builder.build();
+        assertTrue(commands.hasCommand(SessionCommand.COMMAND_CODE_SESSION_SET_MEDIA_URI));
+        assertTrue(commands.hasCommand(SessionCommand.COMMAND_CODE_PLAYER_MOVE_PLAYLIST_ITEM));
     }
 
     private static List<Field> getSessionCommandsFields(String prefix) {
diff --git a/media2/session/version-compat-tests/previous/client/src/androidTest/java/androidx/media2/test/client/MediaControllerProviderService.java b/media2/session/version-compat-tests/previous/client/src/androidTest/java/androidx/media2/test/client/MediaControllerProviderService.java
index 8bd77a8..ab1ea72 100644
--- a/media2/session/version-compat-tests/previous/client/src/androidTest/java/androidx/media2/test/client/MediaControllerProviderService.java
+++ b/media2/session/version-compat-tests/previous/client/src/androidTest/java/androidx/media2/test/client/MediaControllerProviderService.java
@@ -330,48 +330,6 @@
         }
 
         @Override
-        public void playFromMediaId(String controllerId, String mediaId, Bundle extras)
-                throws RemoteException {
-            MediaController controller = mMediaControllerMap.get(controllerId);
-            controller.playFromMediaId(mediaId, extras);
-        }
-
-        @Override
-        public void playFromSearch(String controllerId, String query, Bundle extras)
-                throws RemoteException {
-            MediaController controller = mMediaControllerMap.get(controllerId);
-            controller.playFromSearch(query, extras);
-        }
-
-        @Override
-        public void playFromUri(String controllerId, Uri uri, Bundle extras)
-                throws RemoteException {
-            MediaController controller = mMediaControllerMap.get(controllerId);
-            controller.playFromUri(uri, extras);
-        }
-
-        @Override
-        public void prepareFromMediaId(String controllerId, String mediaId, Bundle extras)
-                throws RemoteException {
-            MediaController controller = mMediaControllerMap.get(controllerId);
-            controller.prepareFromMediaId(mediaId, extras);
-        }
-
-        @Override
-        public void prepareFromSearch(String controllerId, String query, Bundle extras)
-                throws RemoteException {
-            MediaController controller = mMediaControllerMap.get(controllerId);
-            controller.prepareFromSearch(query, extras);
-        }
-
-        @Override
-        public void prepareFromUri(String controllerId, Uri uri, Bundle extras)
-                throws RemoteException {
-            MediaController controller = mMediaControllerMap.get(controllerId);
-            controller.prepareFromUri(uri, extras);
-        }
-
-        @Override
         public void setRating(String controllerId, String mediaId, ParcelImpl rating)
                 throws RemoteException {
             MediaController controller = mMediaControllerMap.get(controllerId);
diff --git a/media2/session/version-compat-tests/previous/service/src/androidTest/java/androidx/media2/test/service/RemoteMediaController.java b/media2/session/version-compat-tests/previous/service/src/androidTest/java/androidx/media2/test/service/RemoteMediaController.java
index 0f90629..656ac6e 100644
--- a/media2/session/version-compat-tests/previous/service/src/androidTest/java/androidx/media2/test/service/RemoteMediaController.java
+++ b/media2/session/version-compat-tests/previous/service/src/androidTest/java/androidx/media2/test/service/RemoteMediaController.java
@@ -26,7 +26,6 @@
 import android.content.Context;
 import android.content.Intent;
 import android.content.ServiceConnection;
-import android.net.Uri;
 import android.os.Bundle;
 import android.os.IBinder;
 import android.os.RemoteException;
@@ -298,54 +297,6 @@
         }
     }
 
-    public void playFromMediaId(@NonNull String mediaId, @Nullable Bundle extras) {
-        try {
-            mBinder.playFromMediaId(mControllerId, mediaId, extras);
-        } catch (RemoteException ex) {
-            Log.e(TAG, "Failed to call playFromMediaId()");
-        }
-    }
-
-    public void playFromSearch(@NonNull String query, @Nullable Bundle extras) {
-        try {
-            mBinder.playFromSearch(mControllerId, query, extras);
-        } catch (RemoteException ex) {
-            Log.e(TAG, "Failed to call playFromSearch()");
-        }
-    }
-
-    public void playFromUri(@NonNull Uri uri, @Nullable Bundle extras) {
-        try {
-            mBinder.playFromUri(mControllerId, uri, extras);
-        } catch (RemoteException ex) {
-            Log.e(TAG, "Failed to call playFromUri()");
-        }
-    }
-
-    public void prepareFromMediaId(@NonNull String mediaId, @Nullable Bundle extras) {
-        try {
-            mBinder.prepareFromMediaId(mControllerId, mediaId, extras);
-        } catch (RemoteException ex) {
-            Log.e(TAG, "Failed to call prepareFromMediaId()");
-        }
-    }
-
-    public void prepareFromSearch(@NonNull String query, @Nullable Bundle extras) {
-        try {
-            mBinder.prepareFromSearch(mControllerId, query, extras);
-        } catch (RemoteException ex) {
-            Log.e(TAG, "Failed to call prepareFromSearch()");
-        }
-    }
-
-    public void prepareFromUri(@NonNull Uri uri, @Nullable Bundle extras) {
-        try {
-            mBinder.prepareFromUri(mControllerId, uri, extras);
-        } catch (RemoteException ex) {
-            Log.e(TAG, "Failed to call prepareFromUri()");
-        }
-    }
-
     public void setRating(@NonNull String mediaId, @NonNull Rating rating) {
         try {
             mBinder.setRating(mControllerId, mediaId, MediaParcelUtils.toParcelable(rating));
diff --git a/media2/session/version-compat-tests/previous/service/src/androidTest/java/androidx/media2/test/service/tests/MediaSessionCallbackTest.java b/media2/session/version-compat-tests/previous/service/src/androidTest/java/androidx/media2/test/service/tests/MediaSessionCallbackTest.java
index 5565280..e174d41 100644
--- a/media2/session/version-compat-tests/previous/service/src/androidTest/java/androidx/media2/test/service/tests/MediaSessionCallbackTest.java
+++ b/media2/session/version-compat-tests/previous/service/src/androidTest/java/androidx/media2/test/service/tests/MediaSessionCallbackTest.java
@@ -25,7 +25,6 @@
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
-import android.net.Uri;
 import android.os.Build;
 import android.os.Bundle;
 
@@ -323,169 +322,6 @@
     }
 
     @Test
-    public void onPlayFromSearch() throws InterruptedException {
-        prepareLooper();
-        final String testQuery = "random query";
-        final Bundle testExtras = TestUtils.createTestBundle();
-        final CountDownLatch latch = new CountDownLatch(1);
-        final MediaSession.SessionCallback callback = new MediaSession.SessionCallback() {
-            @Override
-            public int onPlayFromSearch(MediaSession session, ControllerInfo controller,
-                    String query, Bundle extras) {
-                assertEquals(CLIENT_PACKAGE_NAME, controller.getPackageName());
-                assertEquals(testQuery, query);
-                assertTrue(TestUtils.equals(testExtras, extras));
-                latch.countDown();
-                return RESULT_SUCCESS;
-            }
-        };
-        try (MediaSession session = new MediaSession.Builder(mContext, mPlayer)
-                .setSessionCallback(sHandlerExecutor, callback)
-                .setId("testOnPlayFromSearch").build()) {
-            RemoteMediaController controller = createRemoteController(session.getToken());
-
-            controller.playFromSearch(testQuery, testExtras);
-            assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
-        }
-    }
-
-    @Test
-    public void onPlayFromUri() throws InterruptedException {
-        prepareLooper();
-        final Uri testUri = Uri.parse("foo://boo");
-        final Bundle testExtras = TestUtils.createTestBundle();
-        final CountDownLatch latch = new CountDownLatch(1);
-        final MediaSession.SessionCallback callback = new MediaSession.SessionCallback() {
-            @Override
-            public int onPlayFromUri(MediaSession session, ControllerInfo controller, Uri uri,
-                    Bundle extras) {
-                assertEquals(CLIENT_PACKAGE_NAME, controller.getPackageName());
-                assertEquals(testUri, uri);
-                assertTrue(TestUtils.equals(extras, extras));
-                latch.countDown();
-                return RESULT_SUCCESS;
-            }
-        };
-        try (MediaSession session = new MediaSession.Builder(mContext, mPlayer)
-                .setSessionCallback(sHandlerExecutor, callback)
-                .setId("testOnPlayFromUri")
-                .build()) {
-            RemoteMediaController controller = createRemoteController(session.getToken());
-
-            controller.playFromUri(testUri, testExtras);
-            assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
-        }
-    }
-
-    @Test
-    public void onPlayFromMediaId() throws InterruptedException {
-        prepareLooper();
-        final String testMediaId = "media_id";
-        final Bundle testExtras = TestUtils.createTestBundle();
-        final CountDownLatch latch = new CountDownLatch(1);
-        final MediaSession.SessionCallback callback = new MediaSession.SessionCallback() {
-            @Override
-            public int onPlayFromMediaId(MediaSession session, ControllerInfo controller,
-                    String mediaId, Bundle extras) {
-                assertEquals(CLIENT_PACKAGE_NAME, controller.getPackageName());
-                assertEquals(mediaId, mediaId);
-                assertTrue(TestUtils.equals(testExtras, extras));
-                latch.countDown();
-                return RESULT_SUCCESS;
-            }
-        };
-        try (MediaSession session = new MediaSession.Builder(mContext, mPlayer)
-                .setSessionCallback(sHandlerExecutor, callback)
-                .setId("testOnPlayFromMediaId").build()) {
-            RemoteMediaController controller = createRemoteController(session.getToken());
-
-            controller.playFromMediaId(testMediaId, testExtras);
-            assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
-        }
-    }
-
-    @Test
-    public void onPrepareFromSearch() throws InterruptedException {
-        prepareLooper();
-        final String testQuery = "random query";
-        final Bundle testExtras = TestUtils.createTestBundle();
-        final CountDownLatch latch = new CountDownLatch(1);
-        final MediaSession.SessionCallback callback = new MediaSession.SessionCallback() {
-            @Override
-            public int onPrepareFromSearch(MediaSession session, ControllerInfo controller,
-                    String query, Bundle extras) {
-                assertEquals(CLIENT_PACKAGE_NAME, controller.getPackageName());
-                assertEquals(testQuery, query);
-                assertTrue(TestUtils.equals(testExtras, extras));
-                latch.countDown();
-                return RESULT_SUCCESS;
-            }
-        };
-        try (MediaSession session = new MediaSession.Builder(mContext, mPlayer)
-                .setSessionCallback(sHandlerExecutor, callback)
-                .setId("testOnPrepareFromSearch").build()) {
-            RemoteMediaController controller = createRemoteController(session.getToken());
-
-            controller.prepareFromSearch(testQuery, testExtras);
-            assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
-        }
-    }
-
-    @Test
-    public void onPrepareFromUri() throws InterruptedException {
-        prepareLooper();
-        final Uri testUri = Uri.parse("foo://boo");
-        final Bundle testExtras = TestUtils.createTestBundle();
-        final CountDownLatch latch = new CountDownLatch(1);
-        final MediaSession.SessionCallback callback = new MediaSession.SessionCallback() {
-            @Override
-            public int onPrepareFromUri(MediaSession session, ControllerInfo controller, Uri uri,
-                    Bundle extras) {
-                assertEquals(CLIENT_PACKAGE_NAME, controller.getPackageName());
-                assertEquals(testUri, uri);
-                assertTrue(TestUtils.equals(testExtras, extras));
-                latch.countDown();
-                return RESULT_SUCCESS;
-            }
-        };
-        try (MediaSession session = new MediaSession.Builder(mContext, mPlayer)
-                .setSessionCallback(sHandlerExecutor, callback)
-                .setId("testOnPrepareFromUri").build()) {
-            RemoteMediaController controller = createRemoteController(session.getToken());
-
-            controller.prepareFromUri(testUri, testExtras);
-            assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
-        }
-    }
-
-    @Test
-    public void onPrepareFromMediaId() throws InterruptedException {
-        prepareLooper();
-        final String testMediaId = "media_id";
-        final Bundle testExtras = TestUtils.createTestBundle();
-        final CountDownLatch latch = new CountDownLatch(1);
-        final MediaSession.SessionCallback callback = new MediaSession.SessionCallback() {
-            @Override
-            public int onPrepareFromMediaId(MediaSession session, ControllerInfo controller,
-                    String mediaId, Bundle extras) {
-                assertEquals(CLIENT_PACKAGE_NAME, controller.getPackageName());
-                assertEquals(testMediaId, mediaId);
-                assertTrue(TestUtils.equals(testExtras, extras));
-                latch.countDown();
-                return RESULT_SUCCESS;
-            }
-        };
-        try (MediaSession session = new MediaSession.Builder(mContext, mPlayer)
-                .setSessionCallback(sHandlerExecutor, callback)
-                .setId("testOnPrepareFromMediaId").build()) {
-            RemoteMediaController controller = createRemoteController(session.getToken());
-
-            controller.prepareFromMediaId(testMediaId, testExtras);
-            assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
-        }
-    }
-
-    @Test
     public void onSetRating() throws InterruptedException {
         prepareLooper();
         final float ratingValue = 3.5f;
diff --git a/media2/session/version-compat-tests/previous/service/src/androidTest/java/androidx/media2/test/service/tests/MediaSessionCompatCallbackTestWithMediaController.java b/media2/session/version-compat-tests/previous/service/src/androidTest/java/androidx/media2/test/service/tests/MediaSessionCompatCallbackTestWithMediaController.java
index e6f5118..04824c8 100644
--- a/media2/session/version-compat-tests/previous/service/src/androidTest/java/androidx/media2/test/service/tests/MediaSessionCompatCallbackTestWithMediaController.java
+++ b/media2/session/version-compat-tests/previous/service/src/androidTest/java/androidx/media2/test/service/tests/MediaSessionCompatCallbackTestWithMediaController.java
@@ -467,102 +467,6 @@
     }
 
     @Test
-    public void testPlayFromSearch() throws Exception {
-        prepareLooper();
-        final String request = "random query";
-        final Bundle bundle = new Bundle();
-        bundle.putString("key", "value");
-        RemoteMediaController controller = createControllerAndWaitConnection();
-        mSessionCallback.reset(1);
-
-        controller.playFromSearch(request, bundle);
-        assertTrue(mSessionCallback.await(TIME_OUT_MS));
-        assertEquals(true, mSessionCallback.mOnPlayFromSearchCalled);
-        assertEquals(request, mSessionCallback.mQuery);
-        assertTrue(TestUtils.equals(bundle, mSessionCallback.mExtras));
-    }
-
-    @Test
-    public void testPlayFromUri() throws Exception {
-        prepareLooper();
-        final Uri request = Uri.parse("foo://boo");
-        final Bundle bundle = new Bundle();
-        bundle.putString("key", "value");
-        RemoteMediaController controller = createControllerAndWaitConnection();
-        mSessionCallback.reset(1);
-
-        controller.playFromUri(request, bundle);
-        assertTrue(mSessionCallback.await(TIME_OUT_MS));
-        assertEquals(true, mSessionCallback.mOnPlayFromUriCalled);
-        assertEquals(request, mSessionCallback.mUri);
-        assertTrue(TestUtils.equals(bundle, mSessionCallback.mExtras));
-    }
-
-    @Test
-    public void testPlayFromMediaId() throws Exception {
-        prepareLooper();
-        final String request = "media_id";
-        final Bundle bundle = new Bundle();
-        bundle.putString("key", "value");
-        RemoteMediaController controller = createControllerAndWaitConnection();
-        mSessionCallback.reset(1);
-
-        controller.playFromMediaId(request, bundle);
-        assertTrue(mSessionCallback.await(TIME_OUT_MS));
-        assertEquals(true, mSessionCallback.mOnPlayFromMediaIdCalled);
-        assertEquals(request, mSessionCallback.mMediaId);
-        assertTrue(TestUtils.equals(bundle, mSessionCallback.mExtras));
-    }
-
-    @Test
-    public void testPrepareFromSearch() throws Exception {
-        prepareLooper();
-        final String request = "random query";
-        final Bundle bundle = new Bundle();
-        bundle.putString("key", "value");
-        RemoteMediaController controller = createControllerAndWaitConnection();
-        mSessionCallback.reset(1);
-
-        controller.prepareFromSearch(request, bundle);
-        assertTrue(mSessionCallback.await(TIME_OUT_MS));
-        assertEquals(true, mSessionCallback.mOnPrepareFromSearchCalled);
-        assertEquals(request, mSessionCallback.mQuery);
-        assertTrue(TestUtils.equals(bundle, mSessionCallback.mExtras));
-    }
-
-    @Test
-    public void testPrepareFromUri() throws Exception {
-        prepareLooper();
-        final Uri request = Uri.parse("foo://boo");
-        final Bundle bundle = new Bundle();
-        bundle.putString("key", "value");
-        RemoteMediaController controller = createControllerAndWaitConnection();
-        mSessionCallback.reset(1);
-
-        controller.prepareFromUri(request, bundle);
-        assertTrue(mSessionCallback.await(TIME_OUT_MS));
-        assertEquals(true, mSessionCallback.mOnPrepareFromUriCalled);
-        assertEquals(request, mSessionCallback.mUri);
-        assertTrue(TestUtils.equals(bundle, mSessionCallback.mExtras));
-    }
-
-    @Test
-    public void testPrepareFromMediaId() throws Exception {
-        prepareLooper();
-        final String request = "media_id";
-        final Bundle bundle = new Bundle();
-        bundle.putString("key", "value");
-        RemoteMediaController controller = createControllerAndWaitConnection();
-        mSessionCallback.reset(1);
-
-        controller.prepareFromMediaId(request, bundle);
-        assertTrue(mSessionCallback.await(TIME_OUT_MS));
-        assertEquals(true, mSessionCallback.mOnPrepareFromMediaIdCalled);
-        assertEquals(request, mSessionCallback.mMediaId);
-        assertTrue(TestUtils.equals(bundle, mSessionCallback.mExtras));
-    }
-
-    @Test
     public void testSetRating() throws Exception {
         prepareLooper();
         final float ratingValue = 3.5f;
diff --git a/media2/session/version-compat-tests/previous/service/src/androidTest/java/androidx/media2/test/service/tests/MediaSession_PermissionTest.java b/media2/session/version-compat-tests/previous/service/src/androidTest/java/androidx/media2/test/service/tests/MediaSession_PermissionTest.java
index c8b680b..5775acb 100644
--- a/media2/session/version-compat-tests/previous/service/src/androidTest/java/androidx/media2/test/service/tests/MediaSession_PermissionTest.java
+++ b/media2/session/version-compat-tests/previous/service/src/androidTest/java/androidx/media2/test/service/tests/MediaSession_PermissionTest.java
@@ -29,12 +29,6 @@
 import static androidx.media2.session.SessionCommand.COMMAND_CODE_PLAYER_SKIP_TO_PREVIOUS_PLAYLIST_ITEM;
 import static androidx.media2.session.SessionCommand.COMMAND_CODE_PLAYER_UPDATE_LIST_METADATA;
 import static androidx.media2.session.SessionCommand.COMMAND_CODE_SESSION_FAST_FORWARD;
-import static androidx.media2.session.SessionCommand.COMMAND_CODE_SESSION_PLAY_FROM_MEDIA_ID;
-import static androidx.media2.session.SessionCommand.COMMAND_CODE_SESSION_PLAY_FROM_SEARCH;
-import static androidx.media2.session.SessionCommand.COMMAND_CODE_SESSION_PLAY_FROM_URI;
-import static androidx.media2.session.SessionCommand.COMMAND_CODE_SESSION_PREPARE_FROM_MEDIA_ID;
-import static androidx.media2.session.SessionCommand.COMMAND_CODE_SESSION_PREPARE_FROM_SEARCH;
-import static androidx.media2.session.SessionCommand.COMMAND_CODE_SESSION_PREPARE_FROM_URI;
 import static androidx.media2.session.SessionCommand.COMMAND_CODE_SESSION_REWIND;
 import static androidx.media2.session.SessionCommand.COMMAND_CODE_SESSION_SET_RATING;
 import static androidx.media2.session.SessionCommand.COMMAND_CODE_SESSION_SKIP_BACKWARD;
@@ -47,13 +41,10 @@
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
-import android.net.Uri;
 import android.os.Build;
-import android.os.Bundle;
 import android.text.TextUtils;
 
 import androidx.annotation.NonNull;
@@ -398,126 +389,6 @@
     }
 
     @Test
-    public void playFromMediaId() throws InterruptedException {
-        prepareLooper();
-        final String mediaId = "testPlayFromMediaId";
-        createSessionWithAllowedActions(
-                createCommandGroupWith(COMMAND_CODE_SESSION_PLAY_FROM_MEDIA_ID));
-        createRemoteController(mSession.getToken()).playFromMediaId(mediaId, null);
-
-        assertTrue(mCallback.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
-        assertTrue(mCallback.mOnPlayFromMediaIdCalled);
-        assertEquals(mediaId, mCallback.mMediaId);
-        assertNull(mCallback.mExtras);
-
-        createSessionWithAllowedActions(
-                createCommandGroupWithout(COMMAND_CODE_SESSION_PLAY_FROM_MEDIA_ID));
-        createRemoteController(mSession.getToken()).playFromMediaId(mediaId, null);
-        assertFalse(mCallback.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
-        assertFalse(mCallback.mOnPlayFromMediaIdCalled);
-    }
-
-    @Test
-    public void playFromUri() throws InterruptedException {
-        prepareLooper();
-        final Uri uri = Uri.parse("play://from.uri");
-        createSessionWithAllowedActions(
-                createCommandGroupWith(COMMAND_CODE_SESSION_PLAY_FROM_URI));
-        createRemoteController(mSession.getToken()).playFromUri(uri, null);
-
-        assertTrue(mCallback.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
-        assertTrue(mCallback.mOnPlayFromUriCalled);
-        assertEquals(uri, mCallback.mUri);
-        assertNull(mCallback.mExtras);
-
-        createSessionWithAllowedActions(
-                createCommandGroupWithout(COMMAND_CODE_SESSION_PLAY_FROM_URI));
-        createRemoteController(mSession.getToken()).playFromUri(uri, null);
-        assertFalse(mCallback.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
-        assertFalse(mCallback.mOnPlayFromUriCalled);
-    }
-
-    @Test
-    public void playFromSearch() throws InterruptedException {
-        prepareLooper();
-        final String query = "testPlayFromSearch";
-        createSessionWithAllowedActions(
-                createCommandGroupWith(COMMAND_CODE_SESSION_PLAY_FROM_SEARCH));
-        createRemoteController(mSession.getToken()).playFromSearch(query, null);
-
-        assertTrue(mCallback.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
-        assertTrue(mCallback.mOnPlayFromSearchCalled);
-        assertEquals(query, mCallback.mQuery);
-        assertNull(mCallback.mExtras);
-
-        createSessionWithAllowedActions(
-                createCommandGroupWithout(COMMAND_CODE_SESSION_PLAY_FROM_SEARCH));
-        createRemoteController(mSession.getToken()).playFromSearch(query, null);
-        assertFalse(mCallback.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
-        assertFalse(mCallback.mOnPlayFromSearchCalled);
-    }
-
-    @Test
-    public void prepareFromMediaId() throws InterruptedException {
-        prepareLooper();
-        final String mediaId = "testPrepareFromMediaId";
-        createSessionWithAllowedActions(
-                createCommandGroupWith(COMMAND_CODE_SESSION_PREPARE_FROM_MEDIA_ID));
-        createRemoteController(mSession.getToken()).prepareFromMediaId(mediaId, null);
-
-        assertTrue(mCallback.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
-        assertTrue(mCallback.mOnPrepareFromMediaIdCalled);
-        assertEquals(mediaId, mCallback.mMediaId);
-        assertNull(mCallback.mExtras);
-
-        createSessionWithAllowedActions(
-                createCommandGroupWithout(COMMAND_CODE_SESSION_PREPARE_FROM_MEDIA_ID));
-        createRemoteController(mSession.getToken()).prepareFromMediaId(mediaId, null);
-        assertFalse(mCallback.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
-        assertFalse(mCallback.mOnPrepareFromMediaIdCalled);
-    }
-
-    @Test
-    public void prepareFromUri() throws InterruptedException {
-        prepareLooper();
-        final Uri uri = Uri.parse("prepare://from.uri");
-        createSessionWithAllowedActions(
-                createCommandGroupWith(COMMAND_CODE_SESSION_PREPARE_FROM_URI));
-        createRemoteController(mSession.getToken()).prepareFromUri(uri, null);
-
-        assertTrue(mCallback.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
-        assertTrue(mCallback.mOnPrepareFromUriCalled);
-        assertEquals(uri, mCallback.mUri);
-        assertNull(mCallback.mExtras);
-
-        createSessionWithAllowedActions(
-                createCommandGroupWithout(COMMAND_CODE_SESSION_PREPARE_FROM_URI));
-        createRemoteController(mSession.getToken()).prepareFromUri(uri, null);
-        assertFalse(mCallback.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
-        assertFalse(mCallback.mOnPrepareFromUriCalled);
-    }
-
-    @Test
-    public void prepareFromSearch() throws InterruptedException {
-        prepareLooper();
-        final String query = "testPrepareFromSearch";
-        createSessionWithAllowedActions(
-                createCommandGroupWith(COMMAND_CODE_SESSION_PREPARE_FROM_SEARCH));
-        createRemoteController(mSession.getToken()).prepareFromSearch(query, null);
-
-        assertTrue(mCallback.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
-        assertTrue(mCallback.mOnPrepareFromSearchCalled);
-        assertEquals(query, mCallback.mQuery);
-        assertNull(mCallback.mExtras);
-
-        createSessionWithAllowedActions(
-                createCommandGroupWithout(COMMAND_CODE_SESSION_PREPARE_FROM_SEARCH));
-        createRemoteController(mSession.getToken()).prepareFromSearch(query, null);
-        assertFalse(mCallback.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
-        assertFalse(mCallback.mOnPrepareFromSearchCalled);
-    }
-
-    @Test
     public void setRating() throws InterruptedException {
         prepareLooper();
         final String mediaId = "testSetRating";
@@ -541,23 +412,24 @@
     @Test
     public void changingPermissionWithSetAllowedCommands() throws InterruptedException {
         prepareLooper();
-        final String query = "testChangingPermissionWithSetAllowedCommands";
+        final String mediaId = "testSetRating";
+        final Rating rating = new StarRating(5, 3.5f);
         createSessionWithAllowedActions(
-                createCommandGroupWith(COMMAND_CODE_SESSION_PREPARE_FROM_SEARCH));
+                createCommandGroupWith(COMMAND_CODE_SESSION_SET_RATING));
         RemoteMediaController controller = createRemoteController(mSession.getToken());
+        controller.setRating(mediaId, rating);
 
-        controller.prepareFromSearch(query, null);
         assertTrue(mCallback.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
-        assertTrue(mCallback.mOnPrepareFromSearchCalled);
-        assertEquals(query, mCallback.mQuery);
-        assertNull(mCallback.mExtras);
+        assertTrue(mCallback.mOnSetRatingCalled);
+        assertEquals(mediaId, mCallback.mMediaId);
+        assertEquals(rating, mCallback.mRating);
         mCallback.reset();
 
         // Change allowed commands.
         mSession.setAllowedCommands(getTestControllerInfo(),
-                createCommandGroupWithout(COMMAND_CODE_SESSION_PREPARE_FROM_SEARCH));
+                createCommandGroupWithout(COMMAND_CODE_SESSION_SET_RATING));
 
-        controller.prepareFromSearch(query, null);
+        controller.setRating(mediaId, rating);
         assertFalse(mCallback.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
     }
 
@@ -583,18 +455,9 @@
 
         public SessionCommand mCommand;
         public String mMediaId;
-        public String mQuery;
-        public Uri mUri;
-        public Bundle mExtras;
         public Rating mRating;
 
         public boolean mOnCommandRequestCalled;
-        public boolean mOnPlayFromMediaIdCalled;
-        public boolean mOnPlayFromSearchCalled;
-        public boolean mOnPlayFromUriCalled;
-        public boolean mOnPrepareFromMediaIdCalled;
-        public boolean mOnPrepareFromSearchCalled;
-        public boolean mOnPrepareFromUriCalled;
         public boolean mOnFastForwardCalled;
         public boolean mOnRewindCalled;
         public boolean mOnSkipForwardCalled;
@@ -611,17 +474,8 @@
 
             mCommand = null;
             mMediaId = null;
-            mQuery = null;
-            mUri = null;
-            mExtras = null;
 
             mOnCommandRequestCalled = false;
-            mOnPlayFromMediaIdCalled = false;
-            mOnPlayFromSearchCalled = false;
-            mOnPlayFromUriCalled = false;
-            mOnPrepareFromMediaIdCalled = false;
-            mOnPrepareFromSearchCalled = false;
-            mOnPrepareFromUriCalled = false;
             mOnFastForwardCalled = false;
             mOnRewindCalled = false;
             mOnSetRatingCalled = false;
@@ -670,72 +524,6 @@
         }
 
         @Override
-        public int onPlayFromMediaId(MediaSession session, ControllerInfo controller,
-                String mediaId, Bundle extras) {
-            assertTrue(TextUtils.equals(CLIENT_PACKAGE_NAME, controller.getPackageName()));
-            mOnPlayFromMediaIdCalled = true;
-            mMediaId = mediaId;
-            mExtras = extras;
-            mCountDownLatch.countDown();
-            return RESULT_SUCCESS;
-        }
-
-        @Override
-        public int onPlayFromSearch(MediaSession session, ControllerInfo controller,
-                String query, Bundle extras) {
-            assertTrue(TextUtils.equals(CLIENT_PACKAGE_NAME, controller.getPackageName()));
-            mOnPlayFromSearchCalled = true;
-            mQuery = query;
-            mExtras = extras;
-            mCountDownLatch.countDown();
-            return RESULT_SUCCESS;
-        }
-
-        @Override
-        public int onPlayFromUri(MediaSession session, ControllerInfo controller,
-                Uri uri, Bundle extras) {
-            assertTrue(TextUtils.equals(CLIENT_PACKAGE_NAME, controller.getPackageName()));
-            mOnPlayFromUriCalled = true;
-            mUri = uri;
-            mExtras = extras;
-            mCountDownLatch.countDown();
-            return RESULT_SUCCESS;
-        }
-
-        @Override
-        public int onPrepareFromMediaId(MediaSession session, ControllerInfo controller,
-                String mediaId, Bundle extras) {
-            assertTrue(TextUtils.equals(CLIENT_PACKAGE_NAME, controller.getPackageName()));
-            mOnPrepareFromMediaIdCalled = true;
-            mMediaId = mediaId;
-            mExtras = extras;
-            mCountDownLatch.countDown();
-            return RESULT_SUCCESS;
-        }
-
-        @Override
-        public int onPrepareFromSearch(MediaSession session, ControllerInfo controller,
-                String query, Bundle extras) {
-            assertTrue(TextUtils.equals(CLIENT_PACKAGE_NAME, controller.getPackageName()));
-            mOnPrepareFromSearchCalled = true;
-            mQuery = query;
-            mExtras = extras;
-            mCountDownLatch.countDown();
-            return RESULT_SUCCESS;
-        }
-
-        @Override
-        public int onPrepareFromUri(MediaSession session, ControllerInfo controller,
-                Uri uri, Bundle extras) {
-            assertTrue(TextUtils.equals(CLIENT_PACKAGE_NAME, controller.getPackageName()));
-            mOnPrepareFromUriCalled = true;
-            mUri = uri;
-            mExtras = extras;
-            mCountDownLatch.countDown();
-            return RESULT_SUCCESS;
-        }
-
-        @Override
         public int onSetRating(MediaSession session, ControllerInfo controller,
                 String mediaId, Rating rating) {
             assertTrue(TextUtils.equals(CLIENT_PACKAGE_NAME, controller.getPackageName()));