Skip to content

Commit 3cb76e4

Browse files
authored
Merge pull request #9746 from NyanCatTW1/issue9745
Add an option to Ignore hardware media button events
2 parents 2ee4c6e + a4767fc commit 3cb76e4

File tree

4 files changed

+43
-1
lines changed

4 files changed

+43
-1
lines changed

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

+33-1
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
@@ -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
}

app/src/main/res/values/settings_keys.xml

+1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
<string name="screen_brightness_key">screen_brightness_key</string>
2626
<string name="screen_brightness_timestamp_key">screen_brightness_timestamp_key</string>
2727
<string name="clear_queue_confirmation_key">clear_queue_confirmation_key</string>
28+
<string name="ignore_hardware_media_buttons_key">ignore_hardware_media_buttons_key</string>
2829

2930
<string name="popup_saved_width_key">popup_saved_width</string>
3031
<string name="popup_saved_x_key">popup_saved_x</string>

app/src/main/res/values/strings.xml

+2
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,8 @@
8383
<string name="clear_queue_confirmation_title">Ask for confirmation before clearing a queue</string>
8484
<string name="clear_queue_confirmation_summary">Switching from one player to another may replace your queue</string>
8585
<string name="clear_queue_confirmation_description">The active player queue will be replaced</string>
86+
<string name="ignore_hardware_media_buttons_title">Ignore hardware media button events</string>
87+
<string name="ignore_hardware_media_buttons_summary">Useful, for instance, if you are using a headset with broken physical buttons</string>
8688
<string name="download_thumbnail_title">Load thumbnails</string>
8789
<string name="download_thumbnail_summary">Turn off to prevent loading thumbnails, saving data and memory usage. Changes clear both in-memory and on-disk image cache</string>
8890
<string name="show_comments_title">Show comments</string>

app/src/main/res/xml/video_audio_settings.xml

+7
Original file line numberDiff line numberDiff line change
@@ -224,5 +224,12 @@
224224
app:singleLineTitle="false"
225225
app:iconSpaceReserved="false" />
226226

227+
<SwitchPreferenceCompat
228+
android:defaultValue="false"
229+
android:key="@string/ignore_hardware_media_buttons_key"
230+
android:summary="@string/ignore_hardware_media_buttons_summary"
231+
android:title="@string/ignore_hardware_media_buttons_title"
232+
app:singleLineTitle="false"
233+
app:iconSpaceReserved="false" />
227234
</PreferenceCategory>
228235
</PreferenceScreen>

0 commit comments

Comments
 (0)