From 07483f1d44cc3ea474e0a47e53253955da3aa4d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fernando=20Jim=C3=A9nez=20Moreno?= Date: Wed, 13 Nov 2019 12:09:33 +0100 Subject: [PATCH] Switch play and pause buttons according to playback state --- components/constellation/constellation.rs | 3 +- .../java/org/mozilla/servo/MainActivity.java | 7 ++-- .../java/org/mozilla/servo/MediaSession.java | 39 +++++++++++++----- .../main/res/drawable/media_session_play.png | Bin 0 -> 227 bytes 4 files changed, 34 insertions(+), 15 deletions(-) create mode 100755 support/android/apk/servoapp/src/main/res/drawable/media_session_play.png diff --git a/components/constellation/constellation.rs b/components/constellation/constellation.rs index 8f6cdce0808..82b99938f3b 100644 --- a/components/constellation/constellation.rs +++ b/components/constellation/constellation.rs @@ -1790,7 +1790,8 @@ where match event { MediaSessionEvent::PlaybackStateChange(ref state) => { match state { - MediaSessionPlaybackState::Playing => (), + MediaSessionPlaybackState::Playing | + MediaSessionPlaybackState::Paused => (), _ => return, }; }, diff --git a/support/android/apk/servoapp/src/main/java/org/mozilla/servo/MainActivity.java b/support/android/apk/servoapp/src/main/java/org/mozilla/servo/MainActivity.java index f95cfe4a64e..60abbc43747 100644 --- a/support/android/apk/servoapp/src/main/java/org/mozilla/servo/MainActivity.java +++ b/support/android/apk/servoapp/src/main/java/org/mozilla/servo/MainActivity.java @@ -237,16 +237,17 @@ public class MainActivity extends Activity implements Servo.Client { @Override public void onMediaSessionPlaybackStateChange(int state) { + Log.d("SERVOMEDIA", "PLAYBACK STATE CHANGED " + state); if (mMediaSession == null) { mMediaSession = new MediaSession(mServoView, this, getApplicationContext()); } - Log.d("SERVOMEDIA", "PLAYBACK STATE CHANGED " + state); if (state == MediaSession.PLAYBACK_STATE_NONE) { mMediaSession.hideMediaSessionControls(); return; } - if (state == MediaSession.PLAYBACK_STATE_PLAYING) { - mMediaSession.showMediaSessionControls(); + if (state == MediaSession.PLAYBACK_STATE_PLAYING || + state == MediaSession.PLAYBACK_STATE_PAUSED) { + mMediaSession.showMediaSessionControls(state); return; } } diff --git a/support/android/apk/servoapp/src/main/java/org/mozilla/servo/MediaSession.java b/support/android/apk/servoapp/src/main/java/org/mozilla/servo/MediaSession.java index b1f8c3794de..2b03206931a 100644 --- a/support/android/apk/servoapp/src/main/java/org/mozilla/servo/MediaSession.java +++ b/support/android/apk/servoapp/src/main/java/org/mozilla/servo/MediaSession.java @@ -49,6 +49,7 @@ public class MediaSession { private static final int ACTION_SEEK_TO = 9; private static final String MEDIA_CHANNEL_ID = "MediaNotificationChannel"; + private static final String KEY_MEDIA_PLAY = "org.mozilla.servoview.MainActivity.play"; private static final String KEY_MEDIA_PAUSE = "org.mozilla.servoview.MainActivity.pause"; private static final String KEY_MEDIA_PREV = "org.mozilla.servoview.MainActivity.prev"; private static final String KEY_MEDIA_NEXT = "org.mozilla.servoview.MainActivity.next"; @@ -84,9 +85,14 @@ public class MediaSession { } } - public void showMediaSessionControls() { + public void showMediaSessionControls(int playbackState) { IntentFilter filter = new IntentFilter(); - filter.addAction(KEY_MEDIA_PAUSE); + if (playbackState == PLAYBACK_STATE_PAUSED) { + filter.addAction(KEY_MEDIA_PLAY); + } + if (playbackState == PLAYBACK_STATE_PLAYING) { + filter.addAction(KEY_MEDIA_PAUSE); + } filter.addAction(KEY_MEDIA_STOP); mMediaSessionActionReceiver = new BroadcastReceiver() { @@ -95,6 +101,9 @@ public class MediaSession { if (intent.getAction().equals(KEY_MEDIA_PAUSE)) { mView.mediaSessionAction(ACTION_PAUSE); Log.d("SERVOMEDIA", "PAUSE"); + } else if (intent.getAction().equals(KEY_MEDIA_PLAY)) { + mView.mediaSessionAction(ACTION_PLAY); + Log.d("SERVOMEDIA", "PLAY"); } else if (intent.getAction().equals(KEY_MEDIA_STOP)) { mView.mediaSessionAction(ACTION_STOP); Log.d("SERVOMEDIA", "STOP"); @@ -104,11 +113,6 @@ public class MediaSession { mContext.registerReceiver(mMediaSessionActionReceiver, filter); - Intent pauseIntent = new Intent(KEY_MEDIA_PAUSE); - Notification.Action pauseAction = - new Notification.Action(R.drawable.media_session_pause, "Pause", - PendingIntent.getBroadcast(mContext, 0, pauseIntent, 0)); - Intent stopIntent = new Intent(KEY_MEDIA_STOP); Notification.Action stopAction = new Notification.Action(R.drawable.media_session_stop, "Stop", @@ -119,11 +123,24 @@ public class MediaSession { .setSmallIcon(R.drawable.media_session_icon) .setContentTitle("This is the notification title") .setVisibility(Notification.VISIBILITY_PUBLIC) - .addAction(pauseAction) .addAction(stopAction) - .setStyle(new Notification.MediaStyle() - .setShowActionsInCompactView(0 /* pause button */ ) - .setShowActionsInCompactView(1 /* stop button */)); + .setStyle(new Notification.MediaStyle()); + + if (playbackState == PLAYBACK_STATE_PAUSED) { + Intent playIntent = new Intent(KEY_MEDIA_PLAY); + Notification.Action playAction = + new Notification.Action(R.drawable.media_session_play, "Play", + PendingIntent.getBroadcast(mContext, 0, playIntent, 0)); + builder.addAction(playAction); + } + + if (playbackState == PLAYBACK_STATE_PLAYING) { + Intent pauseIntent = new Intent(KEY_MEDIA_PAUSE); + Notification.Action pauseAction = + new Notification.Action(R.drawable.media_session_pause, "Pause", + PendingIntent.getBroadcast(mContext, 0, pauseIntent, 0)); + builder.addAction(pauseAction); + } NotificationManager notificationManager = mContext.getSystemService(NotificationManager.class); diff --git a/support/android/apk/servoapp/src/main/res/drawable/media_session_play.png b/support/android/apk/servoapp/src/main/res/drawable/media_session_play.png new file mode 100755 index 0000000000000000000000000000000000000000..65b4620171869f74289cb16db2f2a0bb50f0969a GIT binary patch literal 227 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k0wldT1B8LpDo+>3kP61+18i;wH4GL_bF7!B zlCW5rc%fdQ=D-6F*5(BThRq7CYzH4^w?%mIIvuFx`7}jRQ@>6H96I2#&Cy|2 zf1=i5dyV%t&5S$Q92-~$cQ$8Mw`4oWpzX|i*k57(7Z=8>Ej%HTe2VH^pLm0u z3_V(6)`uGYS#T#?ZNq`KCk{o6>$%*%1kY1oH|sv|P`b_Hm58!Z^WubN7n54<|A7Wv Z3|WU-9j~o7i~+iu!PC{xWt~$(697iwPf-8> literal 0 HcmV?d00001