diff options
| author | 2018-01-24 13:13:53 +0900 | |
|---|---|---|
| committer | 2018-01-24 19:16:21 +0900 | |
| commit | cf707c4741f0dfbb498041b68fd28ad459a1e0ce (patch) | |
| tree | 1a8ce12423daade1f20f968d740ad4a10a42eae1 | |
| parent | 7800fef943b07e65a7594140cdbbb63d4bf434e0 (diff) | |
MediaSession2: Stop overriding MediaPlayerBase for session/controller
Implement AutoClosable instead
Test: Run all MediaComponents test once
Change-Id: Ibb1dac06b80230d62e17111bf2da1b2df81a164c
| -rw-r--r-- | media/java/android/media/MediaController2.java | 21 | ||||
| -rw-r--r-- | media/java/android/media/MediaSession2.java | 41 | ||||
| -rw-r--r-- | media/java/android/media/update/MediaController2Provider.java | 11 | ||||
| -rw-r--r-- | media/java/android/media/update/MediaSession2Provider.java | 5 | ||||
| -rw-r--r-- | media/java/android/media/update/TransportControlProvider.java (renamed from media/java/android/media/update/MediaPlayerBaseProvider.java) | 3 | ||||
| -rw-r--r-- | services/core/java/com/android/server/media/MediaSession2Record.java | 2 |
6 files changed, 48 insertions, 35 deletions
diff --git a/media/java/android/media/MediaController2.java b/media/java/android/media/MediaController2.java index 9ab884978fa4..3836e789354d 100644 --- a/media/java/android/media/MediaController2.java +++ b/media/java/android/media/MediaController2.java @@ -19,6 +19,7 @@ package android.media; import android.annotation.NonNull; import android.annotation.Nullable; import android.content.Context; +import android.media.MediaPlayerBase.PlaybackListener; import android.media.MediaSession2.CommandButton; import android.media.MediaSession2.CommandGroup; import android.media.MediaSession2.ControllerInfo; @@ -61,7 +62,7 @@ import java.util.concurrent.Executor; */ // TODO(jaewan): Unhide // TODO(jaewan): Revisit comments. Currently MediaBrowser case is missing. -public class MediaController2 extends MediaPlayerBase { +public class MediaController2 implements AutoCloseable { /** * Interface for listening to change in activeness of the {@link MediaSession2}. It's * active if and only if it has set a player. @@ -80,8 +81,8 @@ public class MediaController2 extends MediaPlayerBase { * the session. The controller becomes unavailable afterwards and the callback wouldn't * be called. * <p> - * It will be also called after the {@link #release()}, so you can put clean up code here. - * You don't need to call {@link #release()} after this. + * It will be also called after the {@link #close()}, so you can put clean up code here. + * You don't need to call {@link #close()} after this. */ public void onDisconnected() { } @@ -131,8 +132,9 @@ public class MediaController2 extends MediaPlayerBase { * Release this object, and disconnect from the session. After this, callbacks wouldn't be * received. */ - public void release() { - mProvider.release_impl(); + @Override + public void close() { + mProvider.close_impl(); } /** @@ -157,32 +159,27 @@ public class MediaController2 extends MediaPlayerBase { return mProvider.isConnected_impl(); } - @Override public void play() { mProvider.play_impl(); } - @Override public void pause() { mProvider.pause_impl(); } - @Override public void stop() { mProvider.stop_impl(); } - @Override public void skipToPrevious() { mProvider.skipToPrevious_impl(); } - @Override public void skipToNext() { mProvider.skipToNext_impl(); } - @Override + public @Nullable PlaybackState getPlaybackState() { return mProvider.getPlaybackState_impl(); } @@ -198,7 +195,6 @@ public class MediaController2 extends MediaPlayerBase { // TODO(jaewan): Match with the addSessionAvailabilityListener() that tells the current state // through the listener. // TODO(jaewan): Can handler be null? Follow the API guideline after it's finalized. - @Override public void addPlaybackListener(@NonNull PlaybackListener listener, @NonNull Handler handler) { mProvider.addPlaybackListener_impl(listener, handler); } @@ -209,7 +205,6 @@ public class MediaController2 extends MediaPlayerBase { * @param listener the listener to be removed * @throws IllegalArgumentException if the listener is {@code null}. */ - @Override public void removePlaybackListener(@NonNull PlaybackListener listener) { mProvider.removePlaybackListener_impl(listener); } diff --git a/media/java/android/media/MediaSession2.java b/media/java/android/media/MediaSession2.java index 5e7910d5ce32..0932fea43d2a 100644 --- a/media/java/android/media/MediaSession2.java +++ b/media/java/android/media/MediaSession2.java @@ -19,6 +19,7 @@ package android.media; import android.annotation.NonNull; import android.annotation.Nullable; import android.content.Context; +import android.media.MediaPlayerBase.PlaybackListener; import android.media.session.MediaSession; import android.media.session.MediaSession.Callback; import android.media.session.PlaybackState; @@ -74,7 +75,7 @@ import java.util.List; // TODO(jaewan): Should we make APIs for MediaSessionService2 public? It's helpful for // developers that doesn't want to override from Browser, but user may not use this // correctly. -public class MediaSession2 extends MediaPlayerBase { +public class MediaSession2 implements AutoCloseable { private final MediaSession2Provider mProvider; // Note: Do not define IntDef because subclass can add more command code on top of these. @@ -341,10 +342,6 @@ public class MediaSession2 extends MediaPlayerBase { if (player == null) { throw new IllegalArgumentException("player shouldn't be null"); } - if (player instanceof MediaSession2 || player instanceof MediaController2) { - throw new IllegalArgumentException("player doesn't accept MediaSession2 nor" - + " MediaController2"); - } mContext = context; mPlayer = player; // Ensure non-null @@ -698,14 +695,17 @@ public class MediaSession2 extends MediaPlayerBase { * * @param player a {@link MediaPlayerBase} that handles actual media playback in your app. * It shouldn't be {@link MediaSession2} nor {@link MediaController2}. - * @throws IllegalArgumentException if the player is either {@link MediaSession2} - * or {@link MediaController2}. + * @throws IllegalArgumentException if the player is {@code null}. */ - // TODO(jaewan): Add release instead of setPlayer(null). - public void setPlayer(MediaPlayerBase player) throws IllegalArgumentException { + public void setPlayer(@NonNull MediaPlayerBase player) throws IllegalArgumentException { mProvider.setPlayer_impl(player); } + @Override + public void close() { + mProvider.close_impl(); + } + /** * @return player */ @@ -749,32 +749,41 @@ public class MediaSession2 extends MediaPlayerBase { mProvider.setCustomLayout_impl(controller, layout); } - @Override + /** + * Play playback + */ public void play() { mProvider.play_impl(); } - @Override + /** + * Pause playback + */ public void pause() { mProvider.pause_impl(); } - @Override + /** + * Stop playback + */ public void stop() { mProvider.stop_impl(); } - @Override + /** + * Rewind playback + */ public void skipToPrevious() { mProvider.skipToPrevious_impl(); } - @Override + /** + * Rewind playback + */ public void skipToNext() { mProvider.skipToNext_impl(); } - @Override public @NonNull PlaybackState getPlaybackState() { return mProvider.getPlaybackState_impl(); } @@ -791,7 +800,6 @@ public class MediaSession2 extends MediaPlayerBase { * @throws IllegalArgumentException when either the listener or handler is {@code null}. */ // TODO(jaewan): Can handler be null? Follow API guideline after it's finalized. - @Override public void addPlaybackListener(@NonNull PlaybackListener listener, @NonNull Handler handler) { mProvider.addPlaybackListener_impl(listener, handler); } @@ -802,7 +810,6 @@ public class MediaSession2 extends MediaPlayerBase { * @param listener the listener to be removed * @throws IllegalArgumentException if the listener is {@code null}. */ - @Override public void removePlaybackListener(PlaybackListener listener) { mProvider.removePlaybackListener_impl(listener); } diff --git a/media/java/android/media/update/MediaController2Provider.java b/media/java/android/media/update/MediaController2Provider.java index b15d6dbdc231..9ad5a688a01a 100644 --- a/media/java/android/media/update/MediaController2Provider.java +++ b/media/java/android/media/update/MediaController2Provider.java @@ -16,13 +16,20 @@ package android.media.update; +import android.media.MediaPlayerBase; import android.media.SessionToken; +import android.media.session.PlaybackState; +import android.os.Handler; /** * @hide */ -public interface MediaController2Provider extends MediaPlayerBaseProvider { - void release_impl(); +public interface MediaController2Provider extends TransportControlProvider { + void close_impl(); SessionToken getSessionToken_impl(); boolean isConnected_impl(); + + PlaybackState getPlaybackState_impl(); + void addPlaybackListener_impl(MediaPlayerBase.PlaybackListener listener, Handler handler); + void removePlaybackListener_impl(MediaPlayerBase.PlaybackListener listener); } diff --git a/media/java/android/media/update/MediaSession2Provider.java b/media/java/android/media/update/MediaSession2Provider.java index 3ec0201ef76a..402397e6916b 100644 --- a/media/java/android/media/update/MediaSession2Provider.java +++ b/media/java/android/media/update/MediaSession2Provider.java @@ -20,13 +20,16 @@ import android.media.MediaPlayerBase; import android.media.MediaSession2.CommandButton; import android.media.MediaSession2.ControllerInfo; import android.media.SessionToken; +import android.media.session.PlaybackState; +import android.os.Handler; import java.util.List; /** * @hide */ -public interface MediaSession2Provider extends MediaPlayerBaseProvider { +public interface MediaSession2Provider extends TransportControlProvider { + void close_impl(); void setPlayer_impl(MediaPlayerBase player) throws IllegalArgumentException; MediaPlayerBase getPlayer_impl(); SessionToken getToken_impl(); diff --git a/media/java/android/media/update/MediaPlayerBaseProvider.java b/media/java/android/media/update/TransportControlProvider.java index 5b13e74f473e..1b6b20158f58 100644 --- a/media/java/android/media/update/MediaPlayerBaseProvider.java +++ b/media/java/android/media/update/TransportControlProvider.java @@ -23,7 +23,8 @@ import android.os.Handler; /** * @hide */ -public interface MediaPlayerBaseProvider { +// TODO(jaewan): SystemApi +public interface TransportControlProvider { void play_impl(); void pause_impl(); void stop_impl(); diff --git a/services/core/java/com/android/server/media/MediaSession2Record.java b/services/core/java/com/android/server/media/MediaSession2Record.java index b25eaa717423..c59c5f61bf91 100644 --- a/services/core/java/com/android/server/media/MediaSession2Record.java +++ b/services/core/java/com/android/server/media/MediaSession2Record.java @@ -81,7 +81,7 @@ class MediaSession2Record { public void onSessionDestroyed() { if (mController != null) { mControllerCallback.destroy(); - mController.release(); + mController.close(); mController = null; } mSessionPid = 0; |