From 42d861688eb00fae428476ef990066c8bcfee793 Mon Sep 17 00:00:00 2001 From: Nyan Cat <17372086+e666666@users.noreply.github.com> Date: Sat, 4 Feb 2023 15:31:08 +0800 Subject: [PATCH] Implement Ignore hardware media button events option --- .../player/mediasession/MediaSessionPlayerUi.java | 10 ++++++++++ app/src/main/res/values/settings_keys.xml | 1 + app/src/main/res/values/strings.xml | 2 ++ app/src/main/res/xml/video_audio_settings.xml | 7 +++++++ 4 files changed, 20 insertions(+) diff --git a/app/src/main/java/org/schabi/newpipe/player/mediasession/MediaSessionPlayerUi.java b/app/src/main/java/org/schabi/newpipe/player/mediasession/MediaSessionPlayerUi.java index e9541ab06..3d19e0784 100644 --- a/app/src/main/java/org/schabi/newpipe/player/mediasession/MediaSessionPlayerUi.java +++ b/app/src/main/java/org/schabi/newpipe/player/mediasession/MediaSessionPlayerUi.java @@ -44,6 +44,15 @@ public class MediaSessionPlayerUi extends PlayerUi { sessionConnector = new MediaSessionConnector(mediaSession); sessionConnector.setQueueNavigator(new PlayQueueNavigator(mediaSession, player)); sessionConnector.setPlayer(getForwardingPlayer()); + sessionConnector.setMediaButtonEventHandler((p, i) -> { + // It seems like events from the Media Control UI + // in the notification area don't go through this function, + // so it's safe to just ignore all events in case we want to + // ignore the hardware media buttons. + // Returning true stops all further event processing of the system + return player.getPrefs().getBoolean( + context.getString(R.string.ignore_hardware_media_buttons_key), false); + }); sessionConnector.setMetadataDeduplicationEnabled(true); sessionConnector.setMediaMetadataProvider(exoPlayer -> buildMediaMetadata()); @@ -53,6 +62,7 @@ public class MediaSessionPlayerUi extends PlayerUi { public void destroyPlayer() { super.destroyPlayer(); if (sessionConnector != null) { + sessionConnector.setMediaButtonEventHandler(null); sessionConnector.setPlayer(null); sessionConnector.setQueueNavigator(null); sessionConnector = null; diff --git a/app/src/main/res/values/settings_keys.xml b/app/src/main/res/values/settings_keys.xml index 126818969..0b2e58d04 100644 --- a/app/src/main/res/values/settings_keys.xml +++ b/app/src/main/res/values/settings_keys.xml @@ -25,6 +25,7 @@ screen_brightness_key screen_brightness_timestamp_key clear_queue_confirmation_key + ignore_hardware_media_buttons_key popup_saved_width popup_saved_x diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a8d527ffb..06f8cf4f1 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -83,6 +83,8 @@ Ask for confirmation before clearing a queue Switching from one player to another may replace your queue The active player queue will be replaced + Ignore hardware media button events + Useful, for instance, if you are using a headset with broken physical buttons Load thumbnails Turn off to prevent loading thumbnails, saving data and memory usage. Changes clear both in-memory and on-disk image cache Show comments diff --git a/app/src/main/res/xml/video_audio_settings.xml b/app/src/main/res/xml/video_audio_settings.xml index 8ff91548d..117ee8703 100644 --- a/app/src/main/res/xml/video_audio_settings.xml +++ b/app/src/main/res/xml/video_audio_settings.xml @@ -224,5 +224,12 @@ app:singleLineTitle="false" app:iconSpaceReserved="false" /> +