From 467b2ae1a3ac6884dac0581d9620235049258c4a Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Sun, 22 Mar 2020 23:07:59 +0100 Subject: Created audio player fragment --- core/src/main/res/values/arrays.xml | 1 + 1 file changed, 1 insertion(+) (limited to 'core/src') diff --git a/core/src/main/res/values/arrays.xml b/core/src/main/res/values/arrays.xml index dc79905cd..45ea97eb4 100644 --- a/core/src/main/res/values/arrays.xml +++ b/core/src/main/res/values/arrays.xml @@ -196,6 +196,7 @@ + Audio player @string/queue_label @string/episodes_label @string/subscriptions_label -- cgit v1.2.3 From 64f1af0d6b01d85d9d4cf14ff21227714a478737 Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Mon, 23 Mar 2020 00:05:06 +0100 Subject: Copied setup from MediaPlayerActivity to AudioPlayerFragment --- .../danoeh/antennapod/core/util/playback/PlaybackController.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'core/src') diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/playback/PlaybackController.java b/core/src/main/java/de/danoeh/antennapod/core/util/playback/PlaybackController.java index 6347f8284..7d47ef6ac 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/util/playback/PlaybackController.java +++ b/core/src/main/java/de/danoeh/antennapod/core/util/playback/PlaybackController.java @@ -599,8 +599,8 @@ public class PlaybackController { public int getPosition() { if (playbackService != null) { return playbackService.getCurrentPosition(); - } else if (media != null) { - return media.getPosition(); + } else if (getMedia() != null) { + return getMedia().getPosition(); } else { return PlaybackService.INVALID_TIME; } @@ -609,8 +609,8 @@ public class PlaybackController { public int getDuration() { if (playbackService != null) { return playbackService.getDuration(); - } else if (media != null) { - return media.getDuration(); + } else if (getMedia() != null) { + return getMedia().getDuration(); } else { return PlaybackService.INVALID_TIME; } -- cgit v1.2.3 From e417f4a5f8f0a2e53deb5eba7059a83d85432a9e Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Mon, 23 Mar 2020 01:46:50 +0100 Subject: Added bottom sheet to activity --- core/src/main/res/values/arrays.xml | 1 - 1 file changed, 1 deletion(-) (limited to 'core/src') diff --git a/core/src/main/res/values/arrays.xml b/core/src/main/res/values/arrays.xml index 45ea97eb4..dc79905cd 100644 --- a/core/src/main/res/values/arrays.xml +++ b/core/src/main/res/values/arrays.xml @@ -196,7 +196,6 @@ - Audio player @string/queue_label @string/episodes_label @string/subscriptions_label -- cgit v1.2.3 From 982ce61b3fd2d27f70c6b595544e7dc51f68b752 Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Mon, 23 Mar 2020 19:16:18 +0100 Subject: Added basic cast button to AudioPlayerFragment --- .../de/danoeh/antennapod/core/service/playback/PlaybackService.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'core/src') 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 b92dd217d..9b5931770 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 @@ -1218,7 +1218,6 @@ public class PlaybackService extends MediaBrowserServiceCompat { notificationBuilder.setCasting(isCasting); notificationBuilder.updatePosition(getCurrentPosition(), getCurrentPlaybackSpeed()); - Log.d(TAG, "setupNotification: startForeground" + playerStatus); NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this); notificationManager.notify(NOTIFICATION_ID, notificationBuilder.build()); startForegroundIfPlaying(playerStatus); @@ -1236,10 +1235,12 @@ 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(NOTIFICATION_ID, notificationBuilder.build()); + Log.d(TAG, "foreground"); } else { stateManager.stopForeground(false); NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this); @@ -1781,6 +1782,7 @@ public class PlaybackService extends MediaBrowserServiceCompat { @Override public void setIsCasting(boolean isCasting) { PlaybackService.isCasting = isCasting; + stateManager.validStartCommandWasReceived(); } @Override -- cgit v1.2.3 From a989db586a853852549c638d43c425a3463f901d Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Wed, 25 Mar 2020 16:09:39 +0100 Subject: Implemented missing PlaybackController state handling --- .../core/service/playback/PlaybackService.java | 5 ----- .../core/util/playback/PlaybackController.java | 16 ++-------------- .../service/playback/PlaybackServiceFlavorHelper.java | 4 +++- 3 files changed, 5 insertions(+), 20 deletions(-) (limited to 'core/src') 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 9b5931770..63b6ee7e1 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 @@ -181,11 +181,6 @@ public class PlaybackService extends MediaBrowserServiceCompat { */ public static final int NOTIFICATION_TYPE_SET_SPEED_ABILITY_CHANGED = 9; - /** - * Send a message to the user (with provided String resource id) - */ - public static final int NOTIFICATION_TYPE_SHOW_TOAST = 10; - /** * Returned by getPositionSafe() or getDurationSafe() if the playbackService * is in an invalid state. diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/playback/PlaybackController.java b/core/src/main/java/de/danoeh/antennapod/core/util/playback/PlaybackController.java index 7d47ef6ac..7723b4a8f 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/util/playback/PlaybackController.java +++ b/core/src/main/java/de/danoeh/antennapod/core/util/playback/PlaybackController.java @@ -21,6 +21,7 @@ import android.widget.ImageButton; import android.widget.SeekBar; import android.widget.TextView; +import de.danoeh.antennapod.core.event.MessageEvent; import de.danoeh.antennapod.core.util.ThemeUtils; import java.util.concurrent.ScheduledThreadPoolExecutor; @@ -333,8 +334,6 @@ public class PlaybackController { case PlaybackService.NOTIFICATION_TYPE_SET_SPEED_ABILITY_CHANGED: onSetSpeedAbilityChanged(); break; - case PlaybackService.NOTIFICATION_TYPE_SHOW_TOAST: - postStatusMsg(code, true); } } @@ -411,11 +410,10 @@ public class PlaybackController { Log.d(TAG, "status: " + status.toString()); switch (status) { case ERROR: - postStatusMsg(R.string.player_error_msg, false); + EventBus.getDefault().post(new MessageEvent(activity.getString(R.string.player_error_msg))); handleError(MediaPlayer.MEDIA_ERROR_UNKNOWN); break; case PAUSED: - clearStatusMsg(); checkMediaInfoLoaded(); onPositionObserverUpdate(); updatePlayButtonAppearance(playResource, playText); @@ -425,7 +423,6 @@ public class PlaybackController { } break; case PLAYING: - clearStatusMsg(); checkMediaInfoLoaded(); if (!PlaybackService.isCasting() && PlaybackService.getCurrentMediaType() == MediaType.VIDEO) { @@ -435,7 +432,6 @@ public class PlaybackController { updatePlayButtonAppearance(pauseResource, pauseText); break; case PREPARING: - postStatusMsg(R.string.player_preparing_msg, false); checkMediaInfoLoaded(); if (playbackService != null) { if (playbackService.isStartWhenPrepared()) { @@ -446,21 +442,17 @@ public class PlaybackController { } break; case STOPPED: - postStatusMsg(R.string.player_stopped_msg, false); break; case PREPARED: checkMediaInfoLoaded(); - postStatusMsg(R.string.player_ready_msg, false); updatePlayButtonAppearance(playResource, playText); onPositionObserverUpdate(); break; case SEEKING: onPositionObserverUpdate(); - postStatusMsg(R.string.player_seeking_msg, false); break; case INITIALIZED: checkMediaInfoLoaded(); - clearStatusMsg(); updatePlayButtonAppearance(playResource, playText); break; } @@ -482,10 +474,6 @@ public class PlaybackController { return null; } - public void postStatusMsg(int msg, boolean showToast) {} - - public void clearStatusMsg() {} - public boolean loadMediaInfo() { return false; } diff --git a/core/src/play/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceFlavorHelper.java b/core/src/play/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceFlavorHelper.java index c32ba2385..31e955017 100644 --- a/core/src/play/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceFlavorHelper.java +++ b/core/src/play/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceFlavorHelper.java @@ -26,9 +26,11 @@ import java.util.concurrent.TimeoutException; import de.danoeh.antennapod.core.cast.CastConsumer; import de.danoeh.antennapod.core.cast.CastManager; import de.danoeh.antennapod.core.cast.DefaultCastConsumer; +import de.danoeh.antennapod.core.event.MessageEvent; import de.danoeh.antennapod.core.feed.MediaType; import de.danoeh.antennapod.core.preferences.UserPreferences; import de.danoeh.antennapod.core.util.NetworkUtils; +import org.greenrobot.eventbus.EventBus; /** * Class intended to work along PlaybackService and provide support for different flavors. @@ -106,7 +108,7 @@ public class PlaybackServiceFlavorHelper { } switch (code) { case RemotePSMP.CAST_ERROR: - callback.sendNotificationBroadcast(PlaybackService.NOTIFICATION_TYPE_SHOW_TOAST, resourceId); + EventBus.getDefault().post(new MessageEvent(context.getString(resourceId))); return true; case RemotePSMP.CAST_ERROR_PRIORITY_HIGH: Toast.makeText(context, resourceId, Toast.LENGTH_SHORT).show(); -- cgit v1.2.3 From 9e84a0626049430fbd758aea2bf2fd00e12811b2 Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Wed, 25 Mar 2020 17:00:48 +0100 Subject: Reworked cast button handling --- .../core/cast/CastButtonVisibilityManager.java | 120 +++++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 core/src/play/java/de/danoeh/antennapod/core/cast/CastButtonVisibilityManager.java (limited to 'core/src') diff --git a/core/src/play/java/de/danoeh/antennapod/core/cast/CastButtonVisibilityManager.java b/core/src/play/java/de/danoeh/antennapod/core/cast/CastButtonVisibilityManager.java new file mode 100644 index 000000000..527a652e3 --- /dev/null +++ b/core/src/play/java/de/danoeh/antennapod/core/cast/CastButtonVisibilityManager.java @@ -0,0 +1,120 @@ +package de.danoeh.antennapod.core.cast; + +import android.util.Log; +import android.view.Menu; +import android.view.MenuItem; +import androidx.core.view.MenuItemCompat; +import de.danoeh.antennapod.core.R; + +public class CastButtonVisibilityManager { + private static final String TAG = "CastBtnVisibilityMgr"; + private final CastManager castManager; + private volatile boolean prefEnabled = false; + private volatile boolean viewRequested = false; + private volatile boolean resumed = false; + private volatile boolean connected = false; + private volatile int showAsAction = MenuItem.SHOW_AS_ACTION_IF_ROOM; + private Menu menu; + public SwitchableMediaRouteActionProvider mediaRouteActionProvider; + + public CastButtonVisibilityManager(CastManager castManager) { + this.castManager = castManager; + } + + public synchronized void setPrefEnabled(boolean newValue) { + if (prefEnabled != newValue && resumed && (viewRequested || connected)) { + if (newValue) { + castManager.incrementUiCounter(); + } else { + castManager.decrementUiCounter(); + } + } + prefEnabled = newValue; + if (mediaRouteActionProvider != null) { + mediaRouteActionProvider.setEnabled(prefEnabled && (viewRequested || connected)); + } + } + + public synchronized void setResumed(boolean newValue) { + if (resumed == newValue) { + Log.e(TAG, "resumed should never change to the same value"); + return; + } + resumed = newValue; + if (prefEnabled && (viewRequested || connected)) { + if (resumed) { + castManager.incrementUiCounter(); + } else { + castManager.decrementUiCounter(); + } + } + } + + public synchronized void setViewRequested(boolean newValue) { + if (viewRequested != newValue && resumed && prefEnabled && !connected) { + if (newValue) { + castManager.incrementUiCounter(); + } else { + castManager.decrementUiCounter(); + } + } + viewRequested = newValue; + if (mediaRouteActionProvider != null) { + mediaRouteActionProvider.setEnabled(prefEnabled && (viewRequested || connected)); + } + } + + public synchronized void setConnected(boolean newValue) { + if (connected != newValue && resumed && prefEnabled && !prefEnabled) { + if (newValue) { + castManager.incrementUiCounter(); + } else { + castManager.decrementUiCounter(); + } + } + connected = newValue; + if (mediaRouteActionProvider != null) { + mediaRouteActionProvider.setEnabled(prefEnabled && (viewRequested || connected)); + } + } + + public synchronized boolean shouldEnable() { + return prefEnabled && viewRequested; + } + + public void setMenu(Menu menu) { + setViewRequested(false); + showAsAction = MenuItem.SHOW_AS_ACTION_IF_ROOM; + this.menu = menu; + setShowAsAction(); + } + + public void requestCastButton(int showAsAction) { + setViewRequested(true); + this.showAsAction = showAsAction; + setShowAsAction(); + } + + public void onConnected() { + setConnected(true); + setShowAsAction(); + } + + public void onDisconnected() { + setConnected(false); + setShowAsAction(); + } + + private void setShowAsAction() { + if (menu == null) { + Log.d(TAG, "setShowAsAction() without a menu"); + return; + } + MenuItem item = menu.findItem(R.id.media_route_menu_item); + if (item == null) { + Log.e(TAG, "setShowAsAction(), but cast button not inflated"); + return; + } + MenuItemCompat.setShowAsAction(item, connected ? MenuItem.SHOW_AS_ACTION_ALWAYS : showAsAction); + } +} -- cgit v1.2.3 From cbb310080eb468dc6789a7952f36cd2e1816e8b1 Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Wed, 25 Mar 2020 17:49:25 +0100 Subject: Redesign ExternalPlayerFragment --- core/src/main/res/values/dimens.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'core/src') diff --git a/core/src/main/res/values/dimens.xml b/core/src/main/res/values/dimens.xml index 5083eb749..cfb272ad9 100644 --- a/core/src/main/res/values/dimens.xml +++ b/core/src/main/res/values/dimens.xml @@ -3,7 +3,7 @@ 0dp 70dp - 56dp + 64dp 20dp 12sp 14sp -- cgit v1.2.3