summaryrefslogtreecommitdiff
path: root/core/src/main/java/de/danoeh/antennapod
diff options
context:
space:
mode:
authorByteHamster <info@bytehamster.com>2023-02-20 23:19:34 +0100
committerByteHamster <info@bytehamster.com>2023-02-20 23:19:34 +0100
commit2b22d4b6977f9a22abfd4bc2d269c79834551ee2 (patch)
tree58582dd73eafe2c536aa2c842b5609ded3735040 /core/src/main/java/de/danoeh/antennapod
parente58e2d063948fe52e5fed1536548b6c4220be8fb (diff)
parent2833812238c19d16d464c337adeecc575ff484ba (diff)
downloadAntennaPod-2b22d4b6977f9a22abfd4bc2d269c79834551ee2.zip
Merge branch 'master' into develop
Diffstat (limited to 'core/src/main/java/de/danoeh/antennapod')
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java58
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceStateManager.java5
2 files changed, 32 insertions, 31 deletions
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 14e11af23..176a78f0f 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
@@ -220,6 +220,24 @@ public class PlaybackService extends MediaBrowserServiceCompat {
PreferenceManager.getDefaultSharedPreferences(this)
.registerOnSharedPreferenceChangeListener(prefListener);
+ recreateMediaSessionIfNeeded();
+ castStateListener = new CastStateListener(this) {
+ @Override
+ public void onSessionStartedOrEnded() {
+ recreateMediaPlayer();
+ }
+ };
+ EventBus.getDefault().post(new PlaybackServiceEvent(PlaybackServiceEvent.Action.SERVICE_STARTED));
+ }
+
+ void recreateMediaSessionIfNeeded() {
+ if (mediaSession != null) {
+ // Media session was not destroyed, so we can re-use it.
+ if (!mediaSession.isActive()) {
+ mediaSession.setActive(true);
+ }
+ return;
+ }
ComponentName eventReceiver = new ComponentName(getApplicationContext(), MediaButtonReceiver.class);
Intent mediaButtonIntent = new Intent(Intent.ACTION_MEDIA_BUTTON);
mediaButtonIntent.setComponent(eventReceiver);
@@ -243,13 +261,6 @@ public class PlaybackService extends MediaBrowserServiceCompat {
recreateMediaPlayer();
mediaSession.setActive(true);
- castStateListener = new CastStateListener(this) {
- @Override
- public void onSessionStartedOrEnded() {
- recreateMediaPlayer();
- }
- };
- EventBus.getDefault().post(new PlaybackServiceEvent(PlaybackServiceEvent.Action.SERVICE_STARTED));
}
void recreateMediaPlayer() {
@@ -290,6 +301,7 @@ public class PlaybackService extends MediaBrowserServiceCompat {
PreferenceManager.getDefaultSharedPreferences(this).unregisterOnSharedPreferenceChangeListener(prefListener);
if (mediaSession != null) {
mediaSession.release();
+ mediaSession = null;
}
unregisterReceiver(autoStateUpdated);
unregisterReceiver(headsetDisconnected);
@@ -702,6 +714,8 @@ public class PlaybackService extends MediaBrowserServiceCompat {
mediaPlayer.playMediaObject(playable, stream, true, true);
stateManager.validStartCommandWasReceived();
+ stateManager.startForeground(R.id.notification_playing, notificationBuilder.build());
+ recreateMediaSessionIfNeeded();
updateNotificationAndMediaSession(playable);
addPlayableToQueue(playable);
}
@@ -760,13 +774,9 @@ public class PlaybackService extends MediaBrowserServiceCompat {
taskManager.startChapterLoader(newInfo.playable);
break;
case PAUSED:
- if (UserPreferences.isPersistNotify() || isCasting) {
- // do not remove notification on pause based on user pref
- // Change [Play] button to [Pause]
- updateNotificationAndMediaSession(newInfo.playable);
- } else if (!UserPreferences.isPersistNotify() && !isCasting) {
- // remove notification on pause
- stateManager.stopForeground(true);
+ updateNotificationAndMediaSession(newInfo.playable);
+ if (!isCasting) {
+ stateManager.stopForeground(!UserPreferences.isPersistNotify());
}
cancelPositionObserver();
PlaybackPreferences.writePlayerStatus(mediaPlayer.getPlayerStatus());
@@ -778,9 +788,11 @@ public class PlaybackService extends MediaBrowserServiceCompat {
case PLAYING:
PlaybackPreferences.writePlayerStatus(mediaPlayer.getPlayerStatus());
saveCurrentPosition(true, null, Playable.INVALID_TIME);
+ recreateMediaSessionIfNeeded();
updateNotificationAndMediaSession(newInfo.playable);
setupPositionObserver();
stateManager.validStartCommandWasReceived();
+ stateManager.startForeground(R.id.notification_playing, notificationBuilder.build());
// set sleep timer if auto-enabled
if (newInfo.oldPlayerStatus != null && newInfo.oldPlayerStatus != PlayerStatus.SEEKING
&& SleepTimerPreferences.autoEnable() && !sleepTimerActive()) {
@@ -811,7 +823,7 @@ public class PlaybackService extends MediaBrowserServiceCompat {
@Override
public void shouldStop() {
- updateNotificationAndMediaSession(getPlayable()); // Stops foreground if not playing
+ stateManager.stopForeground(!UserPreferences.isPersistNotify());
}
@Override
@@ -1271,7 +1283,6 @@ public class PlaybackService extends MediaBrowserServiceCompat {
NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this);
notificationManager.notify(R.id.notification_playing, notificationBuilder.build());
- startForegroundIfPlaying(playerStatus);
if (!notificationBuilder.isIconCached()) {
playableIconLoaderThread = new Thread(() -> {
@@ -1286,21 +1297,6 @@ public class PlaybackService extends MediaBrowserServiceCompat {
}
}
- private void startForegroundIfPlaying(@NonNull PlayerStatus status) {
- Log.d(TAG, "startForegroundIfPlaying: " + status);
- if (stateManager.hasReceivedValidStartCommand()) {
- if (isCasting || status == PlayerStatus.PLAYING || status == PlayerStatus.PREPARING
- || status == PlayerStatus.SEEKING) {
- stateManager.startForeground(R.id.notification_playing, notificationBuilder.build());
- Log.d(TAG, "foreground");
- } else {
- stateManager.stopForeground(false);
- NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this);
- notificationManager.notify(R.id.notification_playing, notificationBuilder.build());
- }
- }
- }
-
/**
* Persists the current position and last played time of the media file.
*
diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceStateManager.java b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceStateManager.java
index addc6b996..9926e01da 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceStateManager.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceStateManager.java
@@ -1,10 +1,12 @@
package de.danoeh.antennapod.core.service.playback;
import android.app.Notification;
+import android.util.Log;
import androidx.core.app.ServiceCompat;
class PlaybackServiceStateManager {
+ private static final String TAG = "PlaybackSrvState";
private final PlaybackService playbackService;
private volatile boolean isInForeground = false;
@@ -15,17 +17,20 @@ class PlaybackServiceStateManager {
}
void startForeground(int notificationId, Notification notification) {
+ Log.d(TAG, "startForeground");
playbackService.startForeground(notificationId, notification);
isInForeground = true;
}
void stopService() {
+ Log.d(TAG, "stopService");
stopForeground(true);
playbackService.stopSelf();
hasReceivedValidStartCommand = false;
}
void stopForeground(boolean removeNotification) {
+ Log.d(TAG, "stopForeground");
if (isInForeground) {
if (removeNotification) {
ServiceCompat.stopForeground(playbackService, ServiceCompat.STOP_FOREGROUND_REMOVE);