33import static org .schabi .newpipe .MainActivity .DEBUG ;
44
55import android .content .Intent ;
6+ import android .content .SharedPreferences ;
67import android .graphics .Bitmap ;
78import android .support .v4 .media .MediaMetadataCompat ;
89import android .support .v4 .media .session .MediaSessionCompat ;
2324
2425import java .util .Optional ;
2526
26- public class MediaSessionPlayerUi extends PlayerUi {
27+ public class MediaSessionPlayerUi extends PlayerUi
28+ implements SharedPreferences .OnSharedPreferenceChangeListener {
2729 private static final String TAG = "MediaSessUi" ;
2830
2931 private MediaSessionCompat mediaSession ;
3032 private MediaSessionConnector sessionConnector ;
3133
34+ private final String ignoreHardwareMediaButtonsKey ;
35+ private boolean shouldIgnoreHardwareMediaButtons = false ;
36+
3237 public MediaSessionPlayerUi (@ NonNull final Player player ) {
3338 super (player );
39+ ignoreHardwareMediaButtonsKey =
40+ context .getString (R .string .ignore_hardware_media_buttons_key );
3441 }
3542
3643 @ Override
@@ -45,14 +52,25 @@ public void initPlayer() {
4552 sessionConnector .setQueueNavigator (new PlayQueueNavigator (mediaSession , player ));
4653 sessionConnector .setPlayer (getForwardingPlayer ());
4754
55+ // It seems like events from the Media Control UI in the notification area don't go through
56+ // this function, so it's safe to just ignore all events in case we want to ignore the
57+ // hardware media buttons. Returning true stops all further event processing of the system.
58+ sessionConnector .setMediaButtonEventHandler ((p , i ) -> shouldIgnoreHardwareMediaButtons );
59+
60+ // listen to changes to ignore_hardware_media_buttons_key
61+ updateShouldIgnoreHardwareMediaButtons (player .getPrefs ());
62+ player .getPrefs ().registerOnSharedPreferenceChangeListener (this );
63+
4864 sessionConnector .setMetadataDeduplicationEnabled (true );
4965 sessionConnector .setMediaMetadataProvider (exoPlayer -> buildMediaMetadata ());
5066 }
5167
5268 @ Override
5369 public void destroyPlayer () {
5470 super .destroyPlayer ();
71+ player .getPrefs ().unregisterOnSharedPreferenceChangeListener (this );
5572 if (sessionConnector != null ) {
73+ sessionConnector .setMediaButtonEventHandler (null );
5674 sessionConnector .setPlayer (null );
5775 sessionConnector .setQueueNavigator (null );
5876 sessionConnector = null ;
@@ -74,6 +92,20 @@ public void onThumbnailLoaded(@Nullable final Bitmap bitmap) {
7492 }
7593
7694
95+ @ Override
96+ public void onSharedPreferenceChanged (final SharedPreferences sharedPreferences ,
97+ final String key ) {
98+ if (key == null || key .equals (ignoreHardwareMediaButtonsKey )) {
99+ updateShouldIgnoreHardwareMediaButtons (sharedPreferences );
100+ }
101+ }
102+
103+ public void updateShouldIgnoreHardwareMediaButtons (final SharedPreferences sharedPreferences ) {
104+ shouldIgnoreHardwareMediaButtons =
105+ sharedPreferences .getBoolean (ignoreHardwareMediaButtonsKey , false );
106+ }
107+
108+
77109 public void handleMediaButtonIntent (final Intent intent ) {
78110 MediaButtonReceiver .handleIntent (mediaSession , intent );
79111 }
0 commit comments