From 17f2ebd7f24f454d55056f16e3b2b0a0f6fbcf74 Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Tue, 1 Nov 2022 11:22:03 +0100 Subject: Use normal pause/skip keycodes, not custom intent --- .../core/receiver/MediaButtonReceiver.java | 66 +++++++++++++--------- .../core/service/playback/PlaybackService.java | 39 ------------- .../antennapod/core/widget/WidgetUpdater.java | 27 ++------- 3 files changed, 44 insertions(+), 88 deletions(-) (limited to 'core') diff --git a/core/src/main/java/de/danoeh/antennapod/core/receiver/MediaButtonReceiver.java b/core/src/main/java/de/danoeh/antennapod/core/receiver/MediaButtonReceiver.java index abee9d8d3..9a96379bc 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/receiver/MediaButtonReceiver.java +++ b/core/src/main/java/de/danoeh/antennapod/core/receiver/MediaButtonReceiver.java @@ -1,8 +1,10 @@ package de.danoeh.antennapod.core.receiver; +import android.app.PendingIntent; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; +import android.os.Build; import androidx.core.content.ContextCompat; import android.util.Log; import android.view.KeyEvent; @@ -10,36 +12,44 @@ import android.view.KeyEvent; import de.danoeh.antennapod.core.ClientConfig; import de.danoeh.antennapod.core.service.playback.PlaybackService; -/** Receives media button events. */ +/** + * Receives media button events. + */ public class MediaButtonReceiver extends BroadcastReceiver { - private static final String TAG = "MediaButtonReceiver"; - public static final String EXTRA_KEYCODE = "de.danoeh.antennapod.core.service.extra.MediaButtonReceiver.KEYCODE"; - public static final String EXTRA_SOURCE = "de.danoeh.antennapod.core.service.extra.MediaButtonReceiver.SOURCE"; - public static final String EXTRA_HARDWAREBUTTON = "de.danoeh.antennapod.core.service.extra.MediaButtonReceiver.HARDWAREBUTTON"; + private static final String TAG = "MediaButtonReceiver"; + public static final String EXTRA_KEYCODE = "de.danoeh.antennapod.core.service.extra.MediaButtonReceiver.KEYCODE"; + public static final String EXTRA_SOURCE = "de.danoeh.antennapod.core.service.extra.MediaButtonReceiver.SOURCE"; + public static final String EXTRA_HARDWAREBUTTON + = "de.danoeh.antennapod.core.service.extra.MediaButtonReceiver.HARDWAREBUTTON"; + public static final String NOTIFY_BUTTON_RECEIVER = "de.danoeh.antennapod.NOTIFY_BUTTON_RECEIVER"; - public static final String NOTIFY_BUTTON_RECEIVER = "de.danoeh.antennapod.NOTIFY_BUTTON_RECEIVER"; + @Override + public void onReceive(Context context, Intent intent) { + Log.d(TAG, "Received intent"); + if (intent == null || intent.getExtras() == null) { + return; + } + KeyEvent event = (KeyEvent) intent.getExtras().get(Intent.EXTRA_KEY_EVENT); + if (event != null && event.getAction() == KeyEvent.ACTION_DOWN && event.getRepeatCount() == 0) { + ClientConfig.initialize(context); + Intent serviceIntent = new Intent(context, PlaybackService.class); + serviceIntent.putExtra(EXTRA_KEYCODE, event.getKeyCode()); + serviceIntent.putExtra(EXTRA_SOURCE, event.getSource()); + serviceIntent.putExtra(EXTRA_HARDWAREBUTTON, event.getEventTime() > 0 || event.getDownTime() > 0); + ContextCompat.startForegroundService(context, serviceIntent); + } + } - @Override - public void onReceive(Context context, Intent intent) { - Log.d(TAG, "Received intent"); - if (intent == null || intent.getExtras() == null) { - return; - } - KeyEvent event = (KeyEvent) intent.getExtras().get(Intent.EXTRA_KEY_EVENT); - if (event != null && event.getAction() == KeyEvent.ACTION_DOWN && event.getRepeatCount()==0) { - ClientConfig.initialize(context); - Intent serviceIntent = new Intent(context, PlaybackService.class); - serviceIntent.putExtra(EXTRA_KEYCODE, event.getKeyCode()); - serviceIntent.putExtra(EXTRA_SOURCE, event.getSource()); - //detect if this is a hardware button press - if (event.getEventTime() > 0 || event.getDownTime() > 0) { - serviceIntent.putExtra(EXTRA_HARDWAREBUTTON, true); - } else { - serviceIntent.putExtra(EXTRA_HARDWAREBUTTON, false); - } - ContextCompat.startForegroundService(context, serviceIntent); - } - - } + public static Intent createIntent(Context context, int eventCode) { + KeyEvent event = new KeyEvent(KeyEvent.ACTION_DOWN, eventCode); + Intent startingIntent = new Intent(context, MediaButtonReceiver.class); + startingIntent.setAction(MediaButtonReceiver.NOTIFY_BUTTON_RECEIVER); + startingIntent.putExtra(Intent.EXTRA_KEY_EVENT, event); + return startingIntent; + } + public static PendingIntent createPendingIntent(Context context, int eventCode) { + return PendingIntent.getBroadcast(context, eventCode, createIntent(context, eventCode), + (Build.VERSION.SDK_INT >= 23 ? PendingIntent.FLAG_IMMUTABLE : 0)); + } } diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java index 391c2b75d..f39466fc4 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java @@ -127,17 +127,6 @@ public class PlaybackService extends MediaBrowserServiceCompat { */ public static final String ACTION_SHUTDOWN_PLAYBACK_SERVICE = "action.de.danoeh.antennapod.core.service.actionShutdownPlaybackService"; - /** - * If the PlaybackService receives this action, it will end playback of the - * current episode and load the next episode if there is one available. - */ - public static final String ACTION_SKIP_CURRENT_EPISODE = "action.de.danoeh.antennapod.core.service.skipCurrentEpisode"; - - /** - * If the PlaybackService receives this action, it will pause playback. - */ - public static final String ACTION_PAUSE_PLAY_CURRENT_EPISODE = "action.de.danoeh.antennapod.core.service.pausePlayCurrentEpisode"; - /** * Custom action used by Android Wear, Android Auto */ @@ -263,8 +252,6 @@ public class PlaybackService extends MediaBrowserServiceCompat { registerReceiver(shutdownReceiver, new IntentFilter(ACTION_SHUTDOWN_PLAYBACK_SERVICE)); registerReceiver(bluetoothStateUpdated, new IntentFilter(BluetoothA2dp.ACTION_CONNECTION_STATE_CHANGED)); registerReceiver(audioBecomingNoisy, new IntentFilter(AudioManager.ACTION_AUDIO_BECOMING_NOISY)); - registerReceiver(skipCurrentEpisodeReceiver, new IntentFilter(ACTION_SKIP_CURRENT_EPISODE)); - registerReceiver(pausePlayCurrentEpisodeReceiver, new IntentFilter(ACTION_PAUSE_PLAY_CURRENT_EPISODE)); EventBus.getDefault().register(this); taskManager = new PlaybackServiceTaskManager(this, taskManagerCallback); @@ -347,8 +334,6 @@ public class PlaybackService extends MediaBrowserServiceCompat { unregisterReceiver(shutdownReceiver); unregisterReceiver(bluetoothStateUpdated); unregisterReceiver(audioBecomingNoisy); - unregisterReceiver(skipCurrentEpisodeReceiver); - unregisterReceiver(pausePlayCurrentEpisodeReceiver); mediaPlayer.shutdown(); taskManager.shutdown(); } @@ -1551,26 +1536,6 @@ public class PlaybackService extends MediaBrowserServiceCompat { }; - private final BroadcastReceiver skipCurrentEpisodeReceiver = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - if (TextUtils.equals(intent.getAction(), ACTION_SKIP_CURRENT_EPISODE)) { - Log.d(TAG, "Received SKIP_CURRENT_EPISODE intent"); - mediaPlayer.skip(); - } - } - }; - - private final BroadcastReceiver pausePlayCurrentEpisodeReceiver = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - if (TextUtils.equals(intent.getAction(), ACTION_PAUSE_PLAY_CURRENT_EPISODE)) { - Log.d(TAG, "Received PAUSE_PLAY_CURRENT_EPISODE intent"); - mediaPlayer.pause(false, false); - } - } - }; - @Subscribe(threadMode = ThreadMode.MAIN) @SuppressWarnings("unused") public void volumeAdaptionChanged(VolumeAdaptionChangedEvent event) { @@ -1630,10 +1595,6 @@ public class PlaybackService extends MediaBrowserServiceCompat { mediaPlayer.pause(abandonAudioFocus, reinit); } - public void reinit() { - mediaPlayer.reinit(); - } - public PlaybackServiceMediaPlayer.PSMPInfo getPSMPInfo() { return mediaPlayer.getPSMPInfo(); } diff --git a/core/src/main/java/de/danoeh/antennapod/core/widget/WidgetUpdater.java b/core/src/main/java/de/danoeh/antennapod/core/widget/WidgetUpdater.java index 11b0a29ca..1d1017bdc 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/widget/WidgetUpdater.java +++ b/core/src/main/java/de/danoeh/antennapod/core/widget/WidgetUpdater.java @@ -4,10 +4,8 @@ import android.app.PendingIntent; import android.appwidget.AppWidgetManager; import android.content.ComponentName; import android.content.Context; -import android.content.Intent; import android.content.SharedPreferences; import android.graphics.Bitmap; -import android.os.Build; import android.os.Bundle; import android.util.Log; import android.view.KeyEvent; @@ -133,21 +131,21 @@ public abstract class WidgetUpdater { views.setContentDescription(R.id.butPlayExtended, context.getString(R.string.play_label)); } views.setOnClickPendingIntent(R.id.butPlay, - createMediaButtonIntent(context, KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE)); + MediaButtonReceiver.createPendingIntent(context, KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE)); views.setOnClickPendingIntent(R.id.butPlayExtended, - createMediaButtonIntent(context, KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE)); + MediaButtonReceiver.createPendingIntent(context, KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE)); views.setOnClickPendingIntent(R.id.butRew, - createMediaButtonIntent(context, KeyEvent.KEYCODE_MEDIA_REWIND)); + MediaButtonReceiver.createPendingIntent(context, KeyEvent.KEYCODE_MEDIA_REWIND)); views.setOnClickPendingIntent(R.id.butFastForward, - createMediaButtonIntent(context, KeyEvent.KEYCODE_MEDIA_FAST_FORWARD)); + MediaButtonReceiver.createPendingIntent(context, KeyEvent.KEYCODE_MEDIA_FAST_FORWARD)); views.setOnClickPendingIntent(R.id.butSkip, - createMediaButtonIntent(context, KeyEvent.KEYCODE_MEDIA_NEXT)); + MediaButtonReceiver.createPendingIntent(context, KeyEvent.KEYCODE_MEDIA_NEXT)); } else { // start the app if they click anything views.setOnClickPendingIntent(R.id.layout_left, startMediaPlayer); views.setOnClickPendingIntent(R.id.butPlay, startMediaPlayer); views.setOnClickPendingIntent(R.id.butPlayExtended, - createMediaButtonIntent(context, KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE)); + MediaButtonReceiver.createPendingIntent(context, KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE)); views.setViewVisibility(R.id.txtvProgress, View.GONE); views.setViewVisibility(R.id.txtvTitle, View.GONE); views.setViewVisibility(R.id.txtNoPlaying, View.VISIBLE); @@ -205,19 +203,6 @@ public abstract class WidgetUpdater { return n - 1; } - /** - * Creates an intent which fakes a mediabutton press. - */ - private static PendingIntent createMediaButtonIntent(Context context, int eventCode) { - KeyEvent event = new KeyEvent(KeyEvent.ACTION_DOWN, eventCode); - Intent startingIntent = new Intent(context, MediaButtonReceiver.class); - startingIntent.setAction(MediaButtonReceiver.NOTIFY_BUTTON_RECEIVER); - startingIntent.putExtra(Intent.EXTRA_KEY_EVENT, event); - - return PendingIntent.getBroadcast(context, eventCode, startingIntent, - (Build.VERSION.SDK_INT >= 23 ? PendingIntent.FLAG_IMMUTABLE : 0)); - } - private static String getProgressString(int position, int duration, float speed) { if (position < 0 || duration <= 0) { return null; -- cgit v1.2.3