Skip to content

Commit a4767fc

Browse files
committed
Listen to ignore hardware buttons pref changes
1 parent 42d8616 commit a4767fc

1 file changed

Lines changed: 32 additions & 10 deletions

File tree

app/src/main/java/org/schabi/newpipe/player/mediasession/MediaSessionPlayerUi.java

Lines changed: 32 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import static org.schabi.newpipe.MainActivity.DEBUG;
44

55
import android.content.Intent;
6+
import android.content.SharedPreferences;
67
import android.graphics.Bitmap;
78
import android.support.v4.media.MediaMetadataCompat;
89
import android.support.v4.media.session.MediaSessionCompat;
@@ -23,14 +24,20 @@
2324

2425
import 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

Comments
 (0)