3
3
import static org .schabi .newpipe .MainActivity .DEBUG ;
4
4
5
5
import android .content .Intent ;
6
+ import android .content .SharedPreferences ;
6
7
import android .graphics .Bitmap ;
7
8
import android .support .v4 .media .MediaMetadataCompat ;
8
9
import android .support .v4 .media .session .MediaSessionCompat ;
23
24
24
25
import java .util .Optional ;
25
26
26
- public class MediaSessionPlayerUi extends PlayerUi {
27
+ public class MediaSessionPlayerUi extends PlayerUi
28
+ implements SharedPreferences .OnSharedPreferenceChangeListener {
27
29
private static final String TAG = "MediaSessUi" ;
28
30
29
31
private MediaSessionCompat mediaSession ;
30
32
private MediaSessionConnector sessionConnector ;
31
33
34
+ private final String ignoreHardwareMediaButtonsKey ;
35
+ private boolean shouldIgnoreHardwareMediaButtons = false ;
36
+
32
37
public MediaSessionPlayerUi (@ NonNull final Player player ) {
33
38
super (player );
39
+ ignoreHardwareMediaButtonsKey =
40
+ context .getString (R .string .ignore_hardware_media_buttons_key );
34
41
}
35
42
36
43
@ Override
@@ -45,14 +52,25 @@ public void initPlayer() {
45
52
sessionConnector .setQueueNavigator (new PlayQueueNavigator (mediaSession , player ));
46
53
sessionConnector .setPlayer (getForwardingPlayer ());
47
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 );
63
+
48
64
sessionConnector .setMetadataDeduplicationEnabled (true );
49
65
sessionConnector .setMediaMetadataProvider (exoPlayer -> buildMediaMetadata ());
50
66
}
51
67
52
68
@ Override
53
69
public void destroyPlayer () {
54
70
super .destroyPlayer ();
71
+ player .getPrefs ().unregisterOnSharedPreferenceChangeListener (this );
55
72
if (sessionConnector != null ) {
73
+ sessionConnector .setMediaButtonEventHandler (null );
56
74
sessionConnector .setPlayer (null );
57
75
sessionConnector .setQueueNavigator (null );
58
76
sessionConnector = null ;
@@ -74,6 +92,20 @@ public void onThumbnailLoaded(@Nullable final Bitmap bitmap) {
74
92
}
75
93
76
94
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
+
77
109
public void handleMediaButtonIntent (final Intent intent ) {
78
110
MediaButtonReceiver .handleIntent (mediaSession , intent );
79
111
}
0 commit comments