summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoboErik <epastern@google.com>2014-12-03 19:06:05 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2014-12-03 19:06:05 +0000
commitd7e30037aa719f43d74bb1f706f2df480168e7d0 (patch)
tree92c3465d228559fcb48f0d0e420eb74b569b6bb6
parent2503a62bc3dfda20a81d1e762f68981b8963c678 (diff)
parente98a5d4e19412ca1477898dd3e4074a080464937 (diff)
downloaddevelopment-d7e30037aa719f43d74bb1f706f2df480168e7d0.tar.gz
Merge "Update for MediaSessionCompat support" into lmp-mr1-dev
-rw-r--r--samples/Support7Demos/src/com/example/android/supportv7/media/Player.java33
-rw-r--r--samples/Support7Demos/src/com/example/android/supportv7/media/SampleMediaRouteProvider.java2
-rw-r--r--samples/Support7Demos/src/com/example/android/supportv7/media/SampleMediaRouterActivity.java81
3 files changed, 52 insertions, 64 deletions
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/media/Player.java b/samples/Support7Demos/src/com/example/android/supportv7/media/Player.java
index ae018ed41..fcab57dd9 100644
--- a/samples/Support7Demos/src/com/example/android/supportv7/media/Player.java
+++ b/samples/Support7Demos/src/com/example/android/supportv7/media/Player.java
@@ -16,7 +16,10 @@
package com.example.android.supportv7.media;
+import android.app.PendingIntent;
+import android.content.ComponentName;
import android.content.Context;
+import android.content.Intent;
import android.graphics.Bitmap;
import android.support.v4.media.MediaMetadataCompat;
import android.support.v4.media.session.MediaSessionCompat;
@@ -43,7 +46,6 @@ public abstract class Player {
protected Callback mCallback;
protected MediaSessionCompat mMediaSession;
- protected MediaSessionCallback mSessionCallback;
public abstract boolean isRemotePlayback();
public abstract boolean isQueuingSupported();
@@ -76,7 +78,7 @@ public abstract class Player {
mCallback = callback;
}
- public static Player create(Context context, RouteInfo route) {
+ public static Player create(Context context, RouteInfo route, MediaSessionCompat session) {
Player player;
if (route != null && route.supportsControlCategory(
MediaControlIntent.CATEGORY_REMOTE_PLAYBACK)) {
@@ -86,7 +88,7 @@ public abstract class Player {
} else {
player = new LocalPlayer.OverlayPlayer(context);
}
- player.initMediaSession(context);
+ player.initMediaSession(session);
player.connect(route);
return player;
}
@@ -96,6 +98,9 @@ public abstract class Player {
}
protected void updateMetadata() {
+ if (mMediaSession == null) {
+ return;
+ }
MediaMetadataCompat.Builder bob = new MediaMetadataCompat.Builder();
bob.putString(MediaMetadataCompat.METADATA_KEY_DISPLAY_TITLE, getDescription());
bob.putString(MediaMetadataCompat.METADATA_KEY_DISPLAY_SUBTITLE, "Subtitle of the thing");
@@ -106,6 +111,9 @@ public abstract class Player {
}
protected void publishState(int state) {
+ if (mMediaSession == null) {
+ return;
+ }
PlaybackStateCompat.Builder bob = new PlaybackStateCompat.Builder();
bob.setActions(PLAYBACK_ACTIONS);
switch (state) {
@@ -130,26 +138,11 @@ public abstract class Player {
}
}
- private void initMediaSession(Context context) {
- mSessionCallback = new MediaSessionCallback();
- mMediaSession = new MediaSessionCompat(context, "Support7Demos");
- mMediaSession.setFlags(MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS
- | MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS);
- mMediaSession.setCallback(mSessionCallback);
+ private void initMediaSession(MediaSessionCompat session) {
+ mMediaSession = session;
updateMetadata();
}
- private final class MediaSessionCallback extends MediaSessionCompat.Callback {
- @Override
- public void onPlay() {
- resume();
- }
-
- @Override
- public void onPause() {
- pause();
- }
- }
public interface Callback {
void onError();
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/media/SampleMediaRouteProvider.java b/samples/Support7Demos/src/com/example/android/supportv7/media/SampleMediaRouteProvider.java
index 2e26630dc..15cf19b7d 100644
--- a/samples/Support7Demos/src/com/example/android/supportv7/media/SampleMediaRouteProvider.java
+++ b/samples/Support7Demos/src/com/example/android/supportv7/media/SampleMediaRouteProvider.java
@@ -248,7 +248,7 @@ final class SampleMediaRouteProvider extends MediaRouteProvider {
public SampleRouteController(String routeId) {
mRouteId = routeId;
- mPlayer = Player.create(getContext(), null);
+ mPlayer = Player.create(getContext(), null, null);
mSessionManager.setPlayer(mPlayer);
mSessionManager.setCallback(new SessionManager.Callback() {
@Override
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/media/SampleMediaRouterActivity.java b/samples/Support7Demos/src/com/example/android/supportv7/media/SampleMediaRouterActivity.java
index 164831ffd..694d69d3d 100644
--- a/samples/Support7Demos/src/com/example/android/supportv7/media/SampleMediaRouterActivity.java
+++ b/samples/Support7Demos/src/com/example/android/supportv7/media/SampleMediaRouterActivity.java
@@ -35,6 +35,7 @@ import android.os.Handler;
import android.os.Bundle;
import android.os.SystemClock;
import android.support.v4.app.FragmentManager;
+import android.support.v4.media.session.MediaSessionCompat;
import android.support.v4.view.MenuItemCompat;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.MediaRouteActionProvider;
@@ -132,19 +133,18 @@ public class SampleMediaRouterActivity extends ActionBarActivity {
public void onRouteSelected(MediaRouter router, RouteInfo route) {
Log.d(TAG, "onRouteSelected: route=" + route);
- mPlayer = Player.create(SampleMediaRouterActivity.this, route);
+ mPlayer = Player.create(SampleMediaRouterActivity.this, route, mMediaSession);
mPlayer.updatePresentation();
mSessionManager.setPlayer(mPlayer);
mSessionManager.unsuspend();
- registerRCC();
updateUi();
}
@Override
public void onRouteUnselected(MediaRouter router, RouteInfo route) {
Log.d(TAG, "onRouteUnselected: route=" + route);
- unregisterRCC();
+ mMediaSession.setActive(false);
PlaylistItem item = getCheckedPlaylistItem();
if (item != null) {
@@ -184,7 +184,7 @@ public class SampleMediaRouterActivity extends ActionBarActivity {
}
};
- private RemoteControlClient mRemoteControlClient;
+ private MediaSessionCompat mMediaSession;
private ComponentName mEventReceiver;
private AudioManager mAudioManager;
private PendingIntent mMediaPendingIntent;
@@ -368,12 +368,12 @@ public class SampleMediaRouterActivity extends ActionBarActivity {
mMediaPendingIntent = PendingIntent.getBroadcast(this, 0, mediaButtonIntent, 0);
// Create and register the remote control client
- registerRCC();
+ createMediaSession();
+ mMediaRouter.setMediaSessionCompat(mMediaSession);
// Set up playback manager and player
mPlayer = Player.create(SampleMediaRouterActivity.this,
- mMediaRouter.getSelectedRoute());
- mMediaRouter.setMediaSessionCompat(mPlayer.getMediaSession());
+ mMediaRouter.getSelectedRoute(), mMediaSession);
mSessionManager.setPlayer(mPlayer);
mSessionManager.setCallback(new SessionManager.Callback() {
@@ -390,40 +390,42 @@ public class SampleMediaRouterActivity extends ActionBarActivity {
updateUi();
}
- private void registerRCC() {
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
- // Create the RCC and register with AudioManager and MediaRouter
- mAudioManager.requestAudioFocus(mAfChangeListener,
- AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN);
- mAudioManager.registerMediaButtonEventReceiver(mEventReceiver);
- mRemoteControlClient = new RemoteControlClient(mMediaPendingIntent);
- mAudioManager.registerRemoteControlClient(mRemoteControlClient);
- mMediaRouter.addRemoteControlClient(mRemoteControlClient);
- SampleMediaButtonReceiver.setActivity(SampleMediaRouterActivity.this);
- mRemoteControlClient.setTransportControlFlags(
- RemoteControlClient.FLAG_KEY_MEDIA_PLAY_PAUSE);
- mRemoteControlClient.setPlaybackState(
- RemoteControlClient.PLAYSTATE_PLAYING);
- }
- }
+ private void createMediaSession() {
+ // Create the MediaSession
+ mMediaSession = new MediaSessionCompat(this, "SampleMediaRouter", mEventReceiver,
+ mMediaPendingIntent);
+ mMediaSession.setFlags(MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS
+ | MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS);
+ mMediaSession.setCallback(new MediaSessionCompat.Callback() {
+ @Override
+ public boolean onMediaButtonEvent(Intent mediaButtonEvent) {
+ if (mediaButtonEvent != null) {
+ return handleMediaKey(
+ (KeyEvent) mediaButtonEvent.getParcelableExtra(Intent.EXTRA_KEY_EVENT));
+ }
+ return super.onMediaButtonEvent(mediaButtonEvent);
+ }
- private void unregisterRCC() {
- // Unregister the RCC with AudioManager and MediaRouter
- if (mRemoteControlClient != null) {
- mRemoteControlClient.setTransportControlFlags(0);
- mAudioManager.abandonAudioFocus(mAfChangeListener);
- mAudioManager.unregisterMediaButtonEventReceiver(mEventReceiver);
- mAudioManager.unregisterRemoteControlClient(mRemoteControlClient);
- mMediaRouter.removeRemoteControlClient(mRemoteControlClient);
- SampleMediaButtonReceiver.setActivity(null);
- mRemoteControlClient = null;
- }
+ @Override
+ public void onPlay() {
+ mSessionManager.resume();
+ }
+
+ @Override
+ public void onPause() {
+ mSessionManager.pause();
+ }
+ });
+
+ SampleMediaButtonReceiver.setActivity(SampleMediaRouterActivity.this);
}
public boolean handleMediaKey(KeyEvent event) {
- if (event.getAction() == KeyEvent.ACTION_DOWN && event.getRepeatCount() == 0) {
+ if (event != null && event.getAction() == KeyEvent.ACTION_DOWN
+ && event.getRepeatCount() == 0) {
switch (event.getKeyCode()) {
case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE:
+ case KeyEvent.KEYCODE_HEADSETHOOK:
{
Log.d(TAG, "Received Play/Pause event from RemoteControlClient");
if (mSessionManager.isPaused()) {
@@ -500,11 +502,9 @@ public class SampleMediaRouterActivity extends ActionBarActivity {
@Override
public void onDestroy() {
- // Unregister the remote control client
- unregisterRCC();
-
mSessionManager.stop();
mPlayer.release();
+ mMediaSession.release();
super.onDestroy();
}
@@ -588,11 +588,6 @@ public class SampleMediaRouterActivity extends ActionBarActivity {
// only enable seek bar when duration is known
PlaylistItem item = getCheckedPlaylistItem();
mSeekBar.setEnabled(item != null && item.getDuration() > 0);
- if (mRemoteControlClient != null) {
- mRemoteControlClient.setPlaybackState(mSessionManager.isPaused() ?
- RemoteControlClient.PLAYSTATE_PAUSED :
- RemoteControlClient.PLAYSTATE_PLAYING);
- }
}
private PlaylistItem getCheckedPlaylistItem() {