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
@@ -44,15 +51,15 @@ public void initPlayer() {
4451 sessionConnector = new MediaSessionConnector (mediaSession );
4552 sessionConnector .setQueueNavigator (new PlayQueueNavigator (mediaSession , player ));
4653 sessionConnector .setPlayer (getForwardingPlayer ());
47- sessionConnector . setMediaButtonEventHandler (( p , i ) -> {
48- // It seems like events from the Media Control UI
49- // in the notification area don't go through this function,
50- // so it's safe to just ignore all events in case we want to
51- // ignore the hardware media buttons.
52- // Returning true stops all further event processing of the system
53- return player . getPrefs (). getBoolean (
54- context . getString ( R . string . ignore_hardware_media_buttons_key ), false );
55- } );
54+
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 );
5663
5764 sessionConnector .setMetadataDeduplicationEnabled (true );
5865 sessionConnector .setMediaMetadataProvider (exoPlayer -> buildMediaMetadata ());
@@ -61,6 +68,7 @@ public void initPlayer() {
6168 @ Override
6269 public void destroyPlayer () {
6370 super .destroyPlayer ();
71+ player .getPrefs ().unregisterOnSharedPreferenceChangeListener (this );
6472 if (sessionConnector != null ) {
6573 sessionConnector .setMediaButtonEventHandler (null );
6674 sessionConnector .setPlayer (null );
@@ -84,6 +92,20 @@ public void onThumbnailLoaded(@Nullable final Bitmap bitmap) {
8492 }
8593
8694
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+
87109 public void handleMediaButtonIntent (final Intent intent ) {
88110 MediaButtonReceiver .handleIntent (mediaSession , intent );
89111 }
0 commit comments