summaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
Diffstat (limited to 'core')
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java49
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/service/playback/RemotePSMP.java18
-rw-r--r--core/src/main/res/drawable-hdpi/ic_audiotrack_light.pngbin0 -> 417 bytes
-rw-r--r--core/src/main/res/drawable-hdpi/ic_cast_disabled_light.pngbin0 -> 770 bytes
-rw-r--r--core/src/main/res/drawable-hdpi/ic_cast_disconnect_grey600_36dp.pngbin0 -> 1626 bytes
-rw-r--r--core/src/main/res/drawable-hdpi/ic_cast_disconnect_white_36dp.pngbin0 -> 1125 bytes
-rw-r--r--core/src/main/res/drawable-hdpi/ic_cast_light.pngbin0 -> 975 bytes
-rw-r--r--core/src/main/res/drawable-hdpi/ic_cast_off_light.pngbin0 -> 867 bytes
-rw-r--r--core/src/main/res/drawable-hdpi/ic_cast_on_0_light.pngbin0 -> 961 bytes
-rw-r--r--core/src/main/res/drawable-hdpi/ic_cast_on_1_light.pngbin0 -> 979 bytes
-rw-r--r--core/src/main/res/drawable-hdpi/ic_cast_on_2_light.pngbin0 -> 976 bytes
-rw-r--r--core/src/main/res/drawable-hdpi/ic_cast_on_light.pngbin0 -> 982 bytes
-rw-r--r--core/src/main/res/drawable-hdpi/ic_close_light.pngbin0 -> 493 bytes
-rw-r--r--core/src/main/res/drawable-hdpi/ic_media_cast_disconnect.pngbin0 -> 2355 bytes
-rw-r--r--core/src/main/res/drawable-hdpi/ic_pause_light.pngbin0 -> 191 bytes
-rw-r--r--core/src/main/res/drawable-hdpi/ic_play_light.pngbin0 -> 562 bytes
-rw-r--r--core/src/main/res/drawable-mdpi/ic_audiotrack_light.pngbin0 -> 333 bytes
-rw-r--r--core/src/main/res/drawable-mdpi/ic_cast_disabled_light.pngbin0 -> 536 bytes
-rw-r--r--core/src/main/res/drawable-mdpi/ic_cast_disconnect_grey600_36dp.pngbin0 -> 1113 bytes
-rw-r--r--core/src/main/res/drawable-mdpi/ic_cast_disconnect_white_36dp.pngbin0 -> 808 bytes
-rw-r--r--core/src/main/res/drawable-mdpi/ic_cast_light.pngbin0 -> 693 bytes
-rw-r--r--core/src/main/res/drawable-mdpi/ic_cast_off_light.pngbin0 -> 635 bytes
-rw-r--r--core/src/main/res/drawable-mdpi/ic_cast_on_0_light.pngbin0 -> 684 bytes
-rw-r--r--core/src/main/res/drawable-mdpi/ic_cast_on_1_light.pngbin0 -> 696 bytes
-rw-r--r--core/src/main/res/drawable-mdpi/ic_cast_on_2_light.pngbin0 -> 690 bytes
-rw-r--r--core/src/main/res/drawable-mdpi/ic_cast_on_light.pngbin0 -> 694 bytes
-rw-r--r--core/src/main/res/drawable-mdpi/ic_close_light.pngbin0 -> 379 bytes
-rw-r--r--core/src/main/res/drawable-mdpi/ic_media_cast_disconnect.pngbin0 -> 1467 bytes
-rw-r--r--core/src/main/res/drawable-mdpi/ic_pause_light.pngbin0 -> 280 bytes
-rw-r--r--core/src/main/res/drawable-mdpi/ic_play_light.pngbin0 -> 447 bytes
-rw-r--r--core/src/main/res/drawable-xhdpi/ic_audiotrack_light.pngbin0 -> 447 bytes
-rw-r--r--core/src/main/res/drawable-xhdpi/ic_cast_disabled_light.pngbin0 -> 976 bytes
-rw-r--r--core/src/main/res/drawable-xhdpi/ic_cast_disconnect_grey600_36dp.pngbin0 -> 1520 bytes
-rw-r--r--core/src/main/res/drawable-xhdpi/ic_cast_disconnect_white_36dp.pngbin0 -> 1357 bytes
-rw-r--r--core/src/main/res/drawable-xhdpi/ic_cast_light.pngbin0 -> 1328 bytes
-rw-r--r--core/src/main/res/drawable-xhdpi/ic_cast_off_light.pngbin0 -> 1161 bytes
-rw-r--r--core/src/main/res/drawable-xhdpi/ic_cast_on_0_light.pngbin0 -> 1286 bytes
-rw-r--r--core/src/main/res/drawable-xhdpi/ic_cast_on_1_light.pngbin0 -> 1308 bytes
-rw-r--r--core/src/main/res/drawable-xhdpi/ic_cast_on_2_light.pngbin0 -> 1309 bytes
-rw-r--r--core/src/main/res/drawable-xhdpi/ic_cast_on_light.pngbin0 -> 1331 bytes
-rw-r--r--core/src/main/res/drawable-xhdpi/ic_close_light.pngbin0 -> 526 bytes
-rw-r--r--core/src/main/res/drawable-xhdpi/ic_media_cast_disconnect.pngbin0 -> 4496 bytes
-rw-r--r--core/src/main/res/drawable-xhdpi/ic_pause_light.pngbin0 -> 221 bytes
-rw-r--r--core/src/main/res/drawable-xhdpi/ic_play_light.pngbin0 -> 678 bytes
-rw-r--r--core/src/main/res/drawable-xxhdpi/ic_audiotrack_light.pngbin0 -> 584 bytes
-rw-r--r--core/src/main/res/drawable-xxhdpi/ic_cast_disabled_light.pngbin0 -> 1429 bytes
-rw-r--r--core/src/main/res/drawable-xxhdpi/ic_cast_disconnect_grey600_36dp.pngbin0 -> 2335 bytes
-rw-r--r--core/src/main/res/drawable-xxhdpi/ic_cast_disconnect_white_36dp.pngbin0 -> 2202 bytes
-rw-r--r--core/src/main/res/drawable-xxhdpi/ic_cast_light.pngbin0 -> 1952 bytes
-rw-r--r--core/src/main/res/drawable-xxhdpi/ic_cast_off_light.pngbin0 -> 1679 bytes
-rw-r--r--core/src/main/res/drawable-xxhdpi/ic_cast_on_0_light.pngbin0 -> 1832 bytes
-rw-r--r--core/src/main/res/drawable-xxhdpi/ic_cast_on_1_light.pngbin0 -> 1893 bytes
-rw-r--r--core/src/main/res/drawable-xxhdpi/ic_cast_on_2_light.pngbin0 -> 1910 bytes
-rw-r--r--core/src/main/res/drawable-xxhdpi/ic_cast_on_light.pngbin0 -> 1944 bytes
-rw-r--r--core/src/main/res/drawable-xxhdpi/ic_close_light.pngbin0 -> 673 bytes
-rw-r--r--core/src/main/res/drawable-xxhdpi/ic_media_cast_disconnect.pngbin0 -> 7096 bytes
-rw-r--r--core/src/main/res/drawable-xxhdpi/ic_pause_light.pngbin0 -> 317 bytes
-rw-r--r--core/src/main/res/drawable-xxhdpi/ic_play_light.pngbin0 -> 955 bytes
-rw-r--r--core/src/main/res/drawable-xxxhdpi/ic_close_light.pngbin0 -> 805 bytes
-rw-r--r--core/src/main/res/drawable-xxxhdpi/ic_pause_light.pngbin0 -> 400 bytes
-rw-r--r--core/src/main/res/drawable-xxxhdpi/ic_play_light.pngbin0 -> 1190 bytes
-rw-r--r--core/src/main/res/values/attrs.xml1
-rw-r--r--core/src/main/res/values/strings.xml1
-rw-r--r--core/src/main/res/values/styles.xml4
64 files changed, 60 insertions, 13 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 2a3e225ba..a44f97956 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
@@ -47,8 +47,8 @@ import java.util.List;
import de.danoeh.antennapod.core.ClientConfig;
import de.danoeh.antennapod.core.R;
import de.danoeh.antennapod.core.cast.CastConsumer;
-import de.danoeh.antennapod.core.cast.DefaultCastConsumer;
import de.danoeh.antennapod.core.cast.CastManager;
+import de.danoeh.antennapod.core.cast.DefaultCastConsumer;
import de.danoeh.antennapod.core.feed.Chapter;
import de.danoeh.antennapod.core.feed.FeedItem;
import de.danoeh.antennapod.core.feed.FeedMedia;
@@ -85,6 +85,10 @@ public class PlaybackService extends Service {
*/
public static final String EXTRA_PLAYABLE = "PlaybackService.PlayableExtra";
/**
+ * True if cast session should disconnect.
+ */
+ public static final String EXTRA_CAST_DISCONNECT = "extra.de.danoeh.antennapod.core.service.castDisconnect";
+ /**
* True if media should be streamed.
*/
public static final String EXTRA_SHOULD_STREAM = "extra.de.danoeh.antennapod.core.service.shouldStream";
@@ -361,8 +365,9 @@ public class PlaybackService extends Service {
Log.d(TAG, "OnStartCommand called");
final int keycode = intent.getIntExtra(MediaButtonReceiver.EXTRA_KEYCODE, -1);
+ final boolean castDisconnect = intent.getBooleanExtra(EXTRA_CAST_DISCONNECT, false);
final Playable playable = intent.getParcelableExtra(EXTRA_PLAYABLE);
- if (keycode == -1 && playable == null) {
+ if (keycode == -1 && playable == null && !castDisconnect) {
Log.e(TAG, "PlaybackService was started with no arguments");
stopSelf();
return Service.START_REDELIVER_INTENT;
@@ -377,6 +382,8 @@ public class PlaybackService extends Service {
Log.d(TAG, "Received media button event");
handleKeycode(keycode, intent.getIntExtra(MediaButtonReceiver.EXTRA_SOURCE,
InputDevice.SOURCE_CLASS_NONE));
+ } else if (castDisconnect) {
+ castManager.disconnect();
} else {
started = true;
boolean stream = intent.getBooleanExtra(EXTRA_SHOULD_STREAM,
@@ -556,12 +563,13 @@ public class PlaybackService extends Service {
taskManager.cancelPositionSaver();
saveCurrentPosition(false, 0);
taskManager.cancelWidgetUpdater();
- if (UserPreferences.isPersistNotify() && android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
+ if ((UserPreferences.isPersistNotify() || isCasting) &&
+ android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
// do not remove notification on pause based on user pref and whether android version supports expanded notifications
// Change [Play] button to [Pause]
setupNotification(newInfo);
- } else if (!UserPreferences.isPersistNotify()) {
- // remove notifcation on pause
+ } else if (!UserPreferences.isPersistNotify() && !isCasting) {
+ // remove notification on pause
stopForeground(true);
}
writePlayerStatusPlaybackPreferences();
@@ -1052,6 +1060,17 @@ public class PlaybackService extends Service {
int numActions = 0; // we start and 0 and then increment by 1 for each call to addAction
+ if (isCasting) {
+ Intent stopCastingIntent = new Intent(PlaybackService.this, PlaybackService.class);
+ stopCastingIntent.putExtra(EXTRA_CAST_DISCONNECT, true);
+ PendingIntent stopCastingPendingIntent = PendingIntent.getService(PlaybackService.this,
+ numActions, stopCastingIntent, PendingIntent.FLAG_UPDATE_CURRENT);
+ notificationBuilder.addAction(R.drawable.ic_media_cast_disconnect,
+ getString(R.string.cast_disconnect_label),
+ stopCastingPendingIntent);
+ numActions++;
+ }
+
// always let them rewind
PendingIntent rewindButtonPendingIntent = getPendingIntentForMediaAction(
KeyEvent.KEYCODE_MEDIA_REWIND, numActions);
@@ -1116,7 +1135,8 @@ public class PlaybackService extends Service {
if (playerStatus == PlayerStatus.PLAYING ||
playerStatus == PlayerStatus.PREPARING ||
- playerStatus == PlayerStatus.SEEKING) {
+ playerStatus == PlayerStatus.SEEKING ||
+ isCasting) {
startForeground(NOTIFICATION_ID, notification);
} else {
stopForeground(false);
@@ -1531,6 +1551,16 @@ public class PlaybackService extends Service {
// hardware volume buttons control the local device volume
mediaRouter.setMediaSessionCompat(null);
unregisterWifiBroadcastReceiver();
+ PlayerStatus status = info.playerStatus;
+ if ((status == PlayerStatus.PLAYING ||
+ status == PlayerStatus.SEEKING ||
+ status == PlayerStatus.PREPARING ||
+ UserPreferences.isPersistNotify()) &&
+ android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
+ setupNotification(info);
+ } else if (!UserPreferences.isPersistNotify()){
+ stopForeground(true);
+ }
}
};
@@ -1632,14 +1662,17 @@ public class PlaybackService extends Service {
saveCurrentPosition(false, 0);
}
}
+ if (info == null) {
+ info = new PlaybackServiceMediaPlayer.PSMPInfo(PlayerStatus.STOPPED, null);
+ }
sendNotificationBroadcast(NOTIFICATION_TYPE_RELOAD, EXTRA_CODE_CAST);
switchMediaPlayer(new RemotePSMP(PlaybackService.this, mediaPlayerCallback),
- (info != null) ? info :
- new PlaybackServiceMediaPlayer.PSMPInfo(PlayerStatus.STOPPED, null),
+ info,
wasLaunched);
// hardware volume buttons control the remote device volume
mediaRouter.setMediaSessionCompat(mediaSession);
registerWifiBroadcastReceiver();
+ setupNotification(info);
}
private void switchMediaPlayer(@NonNull PlaybackServiceMediaPlayer newPlayer,
diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/playback/RemotePSMP.java b/core/src/main/java/de/danoeh/antennapod/core/service/playback/RemotePSMP.java
index 96dbe9033..d45bc3094 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/service/playback/RemotePSMP.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/service/playback/RemotePSMP.java
@@ -20,13 +20,12 @@ import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
import de.danoeh.antennapod.core.cast.CastConsumer;
-import de.danoeh.antennapod.core.cast.DefaultCastConsumer;
import de.danoeh.antennapod.core.cast.CastManager;
+import de.danoeh.antennapod.core.cast.CastUtils;
+import de.danoeh.antennapod.core.cast.DefaultCastConsumer;
import de.danoeh.antennapod.core.cast.RemoteMedia;
import de.danoeh.antennapod.core.feed.FeedMedia;
import de.danoeh.antennapod.core.feed.MediaType;
-import de.danoeh.antennapod.core.preferences.UserPreferences;
-import de.danoeh.antennapod.core.cast.CastUtils;
import de.danoeh.antennapod.core.util.RewindAfterPauseUtils;
import de.danoeh.antennapod.core.util.playback.Playable;
@@ -150,6 +149,8 @@ public class RemotePSMP extends PlaybackServiceMediaPlayer {
setBuffering(false);
setPlayerStatus(PlayerStatus.INDETERMINATE, null);
return;
+ } else {
+ Log.d(TAG, "Received remote status/media update. New state=" + status.getPlayerState());
}
Playable currentMedia = localVersion(status.getMediaInfo());
if (currentMedia != null) {
@@ -196,6 +197,10 @@ public class RemotePSMP extends PlaybackServiceMediaPlayer {
case MediaStatus.PLAYER_STATE_UNKNOWN:
//is this right?
setPlayerStatus(PlayerStatus.INDETERMINATE, currentMedia);
+ break;
+ default:
+ Log.e(TAG, "Remote media state undetermined!");
+ setPlayerStatus(PlayerStatus.INDETERMINATE, currentMedia);
}
}
@@ -265,7 +270,8 @@ public class RemotePSMP extends PlaybackServiceMediaPlayer {
@Override
public void resume() {
try {
- setVolume(UserPreferences.getLeftVolume(), UserPreferences.getRightVolume());
+ // TODO see comment on prepare()
+ // setVolume(UserPreferences.getLeftVolume(), UserPreferences.getRightVolume());
if (playerStatus == PlayerStatus.PREPARED && media.getPosition() > 0) {
int newPosition = RewindAfterPauseUtils.calculatePositionWithRewind(
media.getPosition(),
@@ -306,7 +312,9 @@ public class RemotePSMP extends PlaybackServiceMediaPlayer {
position,
media.getLastPlayedTime());
}
- setVolume(UserPreferences.getLeftVolume(), UserPreferences.getRightVolume());
+ // TODO We're not supporting user set stream volume yet, as we need to make a UI
+ // that doesn't allow changing playback speed or have different values for left/right
+ //setVolume(UserPreferences.getLeftVolume(), UserPreferences.getRightVolume());
castMgr.loadMedia(remoteMedia, startWhenPrepared.get(), position);
} catch (TransientNetworkDisconnectionException | NoConnectionException e) {
Log.e(TAG, "Error loading media", e);
diff --git a/core/src/main/res/drawable-hdpi/ic_audiotrack_light.png b/core/src/main/res/drawable-hdpi/ic_audiotrack_light.png
new file mode 100644
index 000000000..04e23e1f6
--- /dev/null
+++ b/core/src/main/res/drawable-hdpi/ic_audiotrack_light.png
Binary files differ
diff --git a/core/src/main/res/drawable-hdpi/ic_cast_disabled_light.png b/core/src/main/res/drawable-hdpi/ic_cast_disabled_light.png
new file mode 100644
index 000000000..c0a55d555
--- /dev/null
+++ b/core/src/main/res/drawable-hdpi/ic_cast_disabled_light.png
Binary files differ
diff --git a/core/src/main/res/drawable-hdpi/ic_cast_disconnect_grey600_36dp.png b/core/src/main/res/drawable-hdpi/ic_cast_disconnect_grey600_36dp.png
new file mode 100644
index 000000000..5dc0ad34e
--- /dev/null
+++ b/core/src/main/res/drawable-hdpi/ic_cast_disconnect_grey600_36dp.png
Binary files differ
diff --git a/core/src/main/res/drawable-hdpi/ic_cast_disconnect_white_36dp.png b/core/src/main/res/drawable-hdpi/ic_cast_disconnect_white_36dp.png
new file mode 100644
index 000000000..f17ce866f
--- /dev/null
+++ b/core/src/main/res/drawable-hdpi/ic_cast_disconnect_white_36dp.png
Binary files differ
diff --git a/core/src/main/res/drawable-hdpi/ic_cast_light.png b/core/src/main/res/drawable-hdpi/ic_cast_light.png
new file mode 100644
index 000000000..b0c581a0e
--- /dev/null
+++ b/core/src/main/res/drawable-hdpi/ic_cast_light.png
Binary files differ
diff --git a/core/src/main/res/drawable-hdpi/ic_cast_off_light.png b/core/src/main/res/drawable-hdpi/ic_cast_off_light.png
new file mode 100644
index 000000000..5f3c0179c
--- /dev/null
+++ b/core/src/main/res/drawable-hdpi/ic_cast_off_light.png
Binary files differ
diff --git a/core/src/main/res/drawable-hdpi/ic_cast_on_0_light.png b/core/src/main/res/drawable-hdpi/ic_cast_on_0_light.png
new file mode 100644
index 000000000..e872693a4
--- /dev/null
+++ b/core/src/main/res/drawable-hdpi/ic_cast_on_0_light.png
Binary files differ
diff --git a/core/src/main/res/drawable-hdpi/ic_cast_on_1_light.png b/core/src/main/res/drawable-hdpi/ic_cast_on_1_light.png
new file mode 100644
index 000000000..d8be1ebc6
--- /dev/null
+++ b/core/src/main/res/drawable-hdpi/ic_cast_on_1_light.png
Binary files differ
diff --git a/core/src/main/res/drawable-hdpi/ic_cast_on_2_light.png b/core/src/main/res/drawable-hdpi/ic_cast_on_2_light.png
new file mode 100644
index 000000000..27cda9e9d
--- /dev/null
+++ b/core/src/main/res/drawable-hdpi/ic_cast_on_2_light.png
Binary files differ
diff --git a/core/src/main/res/drawable-hdpi/ic_cast_on_light.png b/core/src/main/res/drawable-hdpi/ic_cast_on_light.png
new file mode 100644
index 000000000..4ee525875
--- /dev/null
+++ b/core/src/main/res/drawable-hdpi/ic_cast_on_light.png
Binary files differ
diff --git a/core/src/main/res/drawable-hdpi/ic_close_light.png b/core/src/main/res/drawable-hdpi/ic_close_light.png
new file mode 100644
index 000000000..93187e450
--- /dev/null
+++ b/core/src/main/res/drawable-hdpi/ic_close_light.png
Binary files differ
diff --git a/core/src/main/res/drawable-hdpi/ic_media_cast_disconnect.png b/core/src/main/res/drawable-hdpi/ic_media_cast_disconnect.png
new file mode 100644
index 000000000..700c116e5
--- /dev/null
+++ b/core/src/main/res/drawable-hdpi/ic_media_cast_disconnect.png
Binary files differ
diff --git a/core/src/main/res/drawable-hdpi/ic_pause_light.png b/core/src/main/res/drawable-hdpi/ic_pause_light.png
new file mode 100644
index 000000000..0c505d1c8
--- /dev/null
+++ b/core/src/main/res/drawable-hdpi/ic_pause_light.png
Binary files differ
diff --git a/core/src/main/res/drawable-hdpi/ic_play_light.png b/core/src/main/res/drawable-hdpi/ic_play_light.png
new file mode 100644
index 000000000..7957dff5b
--- /dev/null
+++ b/core/src/main/res/drawable-hdpi/ic_play_light.png
Binary files differ
diff --git a/core/src/main/res/drawable-mdpi/ic_audiotrack_light.png b/core/src/main/res/drawable-mdpi/ic_audiotrack_light.png
new file mode 100644
index 000000000..8ce237e38
--- /dev/null
+++ b/core/src/main/res/drawable-mdpi/ic_audiotrack_light.png
Binary files differ
diff --git a/core/src/main/res/drawable-mdpi/ic_cast_disabled_light.png b/core/src/main/res/drawable-mdpi/ic_cast_disabled_light.png
new file mode 100644
index 000000000..7940a0332
--- /dev/null
+++ b/core/src/main/res/drawable-mdpi/ic_cast_disabled_light.png
Binary files differ
diff --git a/core/src/main/res/drawable-mdpi/ic_cast_disconnect_grey600_36dp.png b/core/src/main/res/drawable-mdpi/ic_cast_disconnect_grey600_36dp.png
new file mode 100644
index 000000000..aa57c3950
--- /dev/null
+++ b/core/src/main/res/drawable-mdpi/ic_cast_disconnect_grey600_36dp.png
Binary files differ
diff --git a/core/src/main/res/drawable-mdpi/ic_cast_disconnect_white_36dp.png b/core/src/main/res/drawable-mdpi/ic_cast_disconnect_white_36dp.png
new file mode 100644
index 000000000..500d6a39a
--- /dev/null
+++ b/core/src/main/res/drawable-mdpi/ic_cast_disconnect_white_36dp.png
Binary files differ
diff --git a/core/src/main/res/drawable-mdpi/ic_cast_light.png b/core/src/main/res/drawable-mdpi/ic_cast_light.png
new file mode 100644
index 000000000..1f5bec20b
--- /dev/null
+++ b/core/src/main/res/drawable-mdpi/ic_cast_light.png
Binary files differ
diff --git a/core/src/main/res/drawable-mdpi/ic_cast_off_light.png b/core/src/main/res/drawable-mdpi/ic_cast_off_light.png
new file mode 100644
index 000000000..963db27d4
--- /dev/null
+++ b/core/src/main/res/drawable-mdpi/ic_cast_off_light.png
Binary files differ
diff --git a/core/src/main/res/drawable-mdpi/ic_cast_on_0_light.png b/core/src/main/res/drawable-mdpi/ic_cast_on_0_light.png
new file mode 100644
index 000000000..a90d9e305
--- /dev/null
+++ b/core/src/main/res/drawable-mdpi/ic_cast_on_0_light.png
Binary files differ
diff --git a/core/src/main/res/drawable-mdpi/ic_cast_on_1_light.png b/core/src/main/res/drawable-mdpi/ic_cast_on_1_light.png
new file mode 100644
index 000000000..bb2cf30bf
--- /dev/null
+++ b/core/src/main/res/drawable-mdpi/ic_cast_on_1_light.png
Binary files differ
diff --git a/core/src/main/res/drawable-mdpi/ic_cast_on_2_light.png b/core/src/main/res/drawable-mdpi/ic_cast_on_2_light.png
new file mode 100644
index 000000000..3ed59e55b
--- /dev/null
+++ b/core/src/main/res/drawable-mdpi/ic_cast_on_2_light.png
Binary files differ
diff --git a/core/src/main/res/drawable-mdpi/ic_cast_on_light.png b/core/src/main/res/drawable-mdpi/ic_cast_on_light.png
new file mode 100644
index 000000000..713427b97
--- /dev/null
+++ b/core/src/main/res/drawable-mdpi/ic_cast_on_light.png
Binary files differ
diff --git a/core/src/main/res/drawable-mdpi/ic_close_light.png b/core/src/main/res/drawable-mdpi/ic_close_light.png
new file mode 100644
index 000000000..2c52c9b0f
--- /dev/null
+++ b/core/src/main/res/drawable-mdpi/ic_close_light.png
Binary files differ
diff --git a/core/src/main/res/drawable-mdpi/ic_media_cast_disconnect.png b/core/src/main/res/drawable-mdpi/ic_media_cast_disconnect.png
new file mode 100644
index 000000000..767f420df
--- /dev/null
+++ b/core/src/main/res/drawable-mdpi/ic_media_cast_disconnect.png
Binary files differ
diff --git a/core/src/main/res/drawable-mdpi/ic_pause_light.png b/core/src/main/res/drawable-mdpi/ic_pause_light.png
new file mode 100644
index 000000000..6218a774f
--- /dev/null
+++ b/core/src/main/res/drawable-mdpi/ic_pause_light.png
Binary files differ
diff --git a/core/src/main/res/drawable-mdpi/ic_play_light.png b/core/src/main/res/drawable-mdpi/ic_play_light.png
new file mode 100644
index 000000000..1e0ccaf80
--- /dev/null
+++ b/core/src/main/res/drawable-mdpi/ic_play_light.png
Binary files differ
diff --git a/core/src/main/res/drawable-xhdpi/ic_audiotrack_light.png b/core/src/main/res/drawable-xhdpi/ic_audiotrack_light.png
new file mode 100644
index 000000000..247df6f39
--- /dev/null
+++ b/core/src/main/res/drawable-xhdpi/ic_audiotrack_light.png
Binary files differ
diff --git a/core/src/main/res/drawable-xhdpi/ic_cast_disabled_light.png b/core/src/main/res/drawable-xhdpi/ic_cast_disabled_light.png
new file mode 100644
index 000000000..fbb3e062c
--- /dev/null
+++ b/core/src/main/res/drawable-xhdpi/ic_cast_disabled_light.png
Binary files differ
diff --git a/core/src/main/res/drawable-xhdpi/ic_cast_disconnect_grey600_36dp.png b/core/src/main/res/drawable-xhdpi/ic_cast_disconnect_grey600_36dp.png
new file mode 100644
index 000000000..af475c3f0
--- /dev/null
+++ b/core/src/main/res/drawable-xhdpi/ic_cast_disconnect_grey600_36dp.png
Binary files differ
diff --git a/core/src/main/res/drawable-xhdpi/ic_cast_disconnect_white_36dp.png b/core/src/main/res/drawable-xhdpi/ic_cast_disconnect_white_36dp.png
new file mode 100644
index 000000000..ed84d3f47
--- /dev/null
+++ b/core/src/main/res/drawable-xhdpi/ic_cast_disconnect_white_36dp.png
Binary files differ
diff --git a/core/src/main/res/drawable-xhdpi/ic_cast_light.png b/core/src/main/res/drawable-xhdpi/ic_cast_light.png
new file mode 100644
index 000000000..f2713e20e
--- /dev/null
+++ b/core/src/main/res/drawable-xhdpi/ic_cast_light.png
Binary files differ
diff --git a/core/src/main/res/drawable-xhdpi/ic_cast_off_light.png b/core/src/main/res/drawable-xhdpi/ic_cast_off_light.png
new file mode 100644
index 000000000..f4f8aaea8
--- /dev/null
+++ b/core/src/main/res/drawable-xhdpi/ic_cast_off_light.png
Binary files differ
diff --git a/core/src/main/res/drawable-xhdpi/ic_cast_on_0_light.png b/core/src/main/res/drawable-xhdpi/ic_cast_on_0_light.png
new file mode 100644
index 000000000..247fc95ba
--- /dev/null
+++ b/core/src/main/res/drawable-xhdpi/ic_cast_on_0_light.png
Binary files differ
diff --git a/core/src/main/res/drawable-xhdpi/ic_cast_on_1_light.png b/core/src/main/res/drawable-xhdpi/ic_cast_on_1_light.png
new file mode 100644
index 000000000..ecf4b4723
--- /dev/null
+++ b/core/src/main/res/drawable-xhdpi/ic_cast_on_1_light.png
Binary files differ
diff --git a/core/src/main/res/drawable-xhdpi/ic_cast_on_2_light.png b/core/src/main/res/drawable-xhdpi/ic_cast_on_2_light.png
new file mode 100644
index 000000000..60e3afa5d
--- /dev/null
+++ b/core/src/main/res/drawable-xhdpi/ic_cast_on_2_light.png
Binary files differ
diff --git a/core/src/main/res/drawable-xhdpi/ic_cast_on_light.png b/core/src/main/res/drawable-xhdpi/ic_cast_on_light.png
new file mode 100644
index 000000000..40ce9d4f2
--- /dev/null
+++ b/core/src/main/res/drawable-xhdpi/ic_cast_on_light.png
Binary files differ
diff --git a/core/src/main/res/drawable-xhdpi/ic_close_light.png b/core/src/main/res/drawable-xhdpi/ic_close_light.png
new file mode 100644
index 000000000..49faa429a
--- /dev/null
+++ b/core/src/main/res/drawable-xhdpi/ic_close_light.png
Binary files differ
diff --git a/core/src/main/res/drawable-xhdpi/ic_media_cast_disconnect.png b/core/src/main/res/drawable-xhdpi/ic_media_cast_disconnect.png
new file mode 100644
index 000000000..740867129
--- /dev/null
+++ b/core/src/main/res/drawable-xhdpi/ic_media_cast_disconnect.png
Binary files differ
diff --git a/core/src/main/res/drawable-xhdpi/ic_pause_light.png b/core/src/main/res/drawable-xhdpi/ic_pause_light.png
new file mode 100644
index 000000000..40cd79f14
--- /dev/null
+++ b/core/src/main/res/drawable-xhdpi/ic_pause_light.png
Binary files differ
diff --git a/core/src/main/res/drawable-xhdpi/ic_play_light.png b/core/src/main/res/drawable-xhdpi/ic_play_light.png
new file mode 100644
index 000000000..33f6a5919
--- /dev/null
+++ b/core/src/main/res/drawable-xhdpi/ic_play_light.png
Binary files differ
diff --git a/core/src/main/res/drawable-xxhdpi/ic_audiotrack_light.png b/core/src/main/res/drawable-xxhdpi/ic_audiotrack_light.png
new file mode 100644
index 000000000..8c83b169d
--- /dev/null
+++ b/core/src/main/res/drawable-xxhdpi/ic_audiotrack_light.png
Binary files differ
diff --git a/core/src/main/res/drawable-xxhdpi/ic_cast_disabled_light.png b/core/src/main/res/drawable-xxhdpi/ic_cast_disabled_light.png
new file mode 100644
index 000000000..e94df3889
--- /dev/null
+++ b/core/src/main/res/drawable-xxhdpi/ic_cast_disabled_light.png
Binary files differ
diff --git a/core/src/main/res/drawable-xxhdpi/ic_cast_disconnect_grey600_36dp.png b/core/src/main/res/drawable-xxhdpi/ic_cast_disconnect_grey600_36dp.png
new file mode 100644
index 000000000..6541900dc
--- /dev/null
+++ b/core/src/main/res/drawable-xxhdpi/ic_cast_disconnect_grey600_36dp.png
Binary files differ
diff --git a/core/src/main/res/drawable-xxhdpi/ic_cast_disconnect_white_36dp.png b/core/src/main/res/drawable-xxhdpi/ic_cast_disconnect_white_36dp.png
new file mode 100644
index 000000000..2c1184711
--- /dev/null
+++ b/core/src/main/res/drawable-xxhdpi/ic_cast_disconnect_white_36dp.png
Binary files differ
diff --git a/core/src/main/res/drawable-xxhdpi/ic_cast_light.png b/core/src/main/res/drawable-xxhdpi/ic_cast_light.png
new file mode 100644
index 000000000..c5722a6eb
--- /dev/null
+++ b/core/src/main/res/drawable-xxhdpi/ic_cast_light.png
Binary files differ
diff --git a/core/src/main/res/drawable-xxhdpi/ic_cast_off_light.png b/core/src/main/res/drawable-xxhdpi/ic_cast_off_light.png
new file mode 100644
index 000000000..92ac67b34
--- /dev/null
+++ b/core/src/main/res/drawable-xxhdpi/ic_cast_off_light.png
Binary files differ
diff --git a/core/src/main/res/drawable-xxhdpi/ic_cast_on_0_light.png b/core/src/main/res/drawable-xxhdpi/ic_cast_on_0_light.png
new file mode 100644
index 000000000..2742fcb4a
--- /dev/null
+++ b/core/src/main/res/drawable-xxhdpi/ic_cast_on_0_light.png
Binary files differ
diff --git a/core/src/main/res/drawable-xxhdpi/ic_cast_on_1_light.png b/core/src/main/res/drawable-xxhdpi/ic_cast_on_1_light.png
new file mode 100644
index 000000000..405178e64
--- /dev/null
+++ b/core/src/main/res/drawable-xxhdpi/ic_cast_on_1_light.png
Binary files differ
diff --git a/core/src/main/res/drawable-xxhdpi/ic_cast_on_2_light.png b/core/src/main/res/drawable-xxhdpi/ic_cast_on_2_light.png
new file mode 100644
index 000000000..dfe52428d
--- /dev/null
+++ b/core/src/main/res/drawable-xxhdpi/ic_cast_on_2_light.png
Binary files differ
diff --git a/core/src/main/res/drawable-xxhdpi/ic_cast_on_light.png b/core/src/main/res/drawable-xxhdpi/ic_cast_on_light.png
new file mode 100644
index 000000000..7e69a0864
--- /dev/null
+++ b/core/src/main/res/drawable-xxhdpi/ic_cast_on_light.png
Binary files differ
diff --git a/core/src/main/res/drawable-xxhdpi/ic_close_light.png b/core/src/main/res/drawable-xxhdpi/ic_close_light.png
new file mode 100644
index 000000000..be519bfcb
--- /dev/null
+++ b/core/src/main/res/drawable-xxhdpi/ic_close_light.png
Binary files differ
diff --git a/core/src/main/res/drawable-xxhdpi/ic_media_cast_disconnect.png b/core/src/main/res/drawable-xxhdpi/ic_media_cast_disconnect.png
new file mode 100644
index 000000000..2d2ec9035
--- /dev/null
+++ b/core/src/main/res/drawable-xxhdpi/ic_media_cast_disconnect.png
Binary files differ
diff --git a/core/src/main/res/drawable-xxhdpi/ic_pause_light.png b/core/src/main/res/drawable-xxhdpi/ic_pause_light.png
new file mode 100644
index 000000000..a36d4d11e
--- /dev/null
+++ b/core/src/main/res/drawable-xxhdpi/ic_pause_light.png
Binary files differ
diff --git a/core/src/main/res/drawable-xxhdpi/ic_play_light.png b/core/src/main/res/drawable-xxhdpi/ic_play_light.png
new file mode 100644
index 000000000..b1424874a
--- /dev/null
+++ b/core/src/main/res/drawable-xxhdpi/ic_play_light.png
Binary files differ
diff --git a/core/src/main/res/drawable-xxxhdpi/ic_close_light.png b/core/src/main/res/drawable-xxxhdpi/ic_close_light.png
new file mode 100644
index 000000000..679c2a4d5
--- /dev/null
+++ b/core/src/main/res/drawable-xxxhdpi/ic_close_light.png
Binary files differ
diff --git a/core/src/main/res/drawable-xxxhdpi/ic_pause_light.png b/core/src/main/res/drawable-xxxhdpi/ic_pause_light.png
new file mode 100644
index 000000000..7de2ef4ed
--- /dev/null
+++ b/core/src/main/res/drawable-xxxhdpi/ic_pause_light.png
Binary files differ
diff --git a/core/src/main/res/drawable-xxxhdpi/ic_play_light.png b/core/src/main/res/drawable-xxxhdpi/ic_play_light.png
new file mode 100644
index 000000000..4428c8477
--- /dev/null
+++ b/core/src/main/res/drawable-xxxhdpi/ic_play_light.png
Binary files differ
diff --git a/core/src/main/res/values/attrs.xml b/core/src/main/res/values/attrs.xml
index c3ee4d3e2..04ad7ea64 100644
--- a/core/src/main/res/values/attrs.xml
+++ b/core/src/main/res/values/attrs.xml
@@ -50,6 +50,7 @@
<attr name="ic_sort" format="reference"/>
<attr name="ic_sd_storage" format="reference"/>
<attr name="ic_create_new_folder" format="reference"/>
+ <attr name="ic_cast_disconnect" format="reference"/>
<!-- Used in itemdescription -->
<attr name="non_transparent_background" format="reference"/>
diff --git a/core/src/main/res/values/strings.xml b/core/src/main/res/values/strings.xml
index 1f387e5f7..17d9c5c85 100644
--- a/core/src/main/res/values/strings.xml
+++ b/core/src/main/res/values/strings.xml
@@ -618,6 +618,7 @@
<!-- Casting -->
<string name="cast_media_route_menu_title">Play on&#8230;</string>
+ <string name="cast_disconnect_label">Disconnect the cast session</string>
<string name="cast_failed_to_play">Failed to start the playback of media</string>
<string name="cast_failed_to_stop">Failed to stop the playback of media</string>
<string name="cast_failed_to_pause">Failed to pause the playback of media</string>
diff --git a/core/src/main/res/values/styles.xml b/core/src/main/res/values/styles.xml
index f7775a0bf..6a4dc4781 100644
--- a/core/src/main/res/values/styles.xml
+++ b/core/src/main/res/values/styles.xml
@@ -57,6 +57,7 @@
<item name="attr/ic_sort">@drawable/ic_sort_grey600_24dp</item>
<item name="attr/ic_sd_storage">@drawable/ic_sd_storage_grey600_36dp</item>
<item name="attr/ic_create_new_folder">@drawable/ic_create_new_folder_grey600_24dp</item>
+ <item name="attr/ic_cast_disconnect">@drawable/ic_cast_disconnect_grey600_36dp</item>
</style>
<style name="Theme.AntennaPod.Dark" parent="Theme.AppCompat">
@@ -115,6 +116,7 @@
<item name="attr/ic_sort">@drawable/ic_sort_white_24dp</item>
<item name="attr/ic_sd_storage">@drawable/ic_sd_storage_white_36dp</item>
<item name="attr/ic_create_new_folder">@drawable/ic_create_new_folder_white_24dp</item>
+ <item name="attr/ic_cast_disconnect">@drawable/ic_cast_disconnect_white_36dp</item>
</style>
<style name="Theme.AntennaPod.Light.NoTitle" parent="Theme.AppCompat.Light.NoActionBar">
@@ -174,6 +176,7 @@
<item name="attr/ic_sort">@drawable/ic_sort_grey600_24dp</item>
<item name="attr/ic_sd_storage">@drawable/ic_sd_storage_grey600_36dp</item>
<item name="attr/ic_create_new_folder">@drawable/ic_create_new_folder_grey600_24dp</item>
+ <item name="attr/ic_cast_disconnect">@drawable/ic_cast_disconnect_grey600_36dp</item>
</style>
<style name="Theme.AntennaPod.Dark.NoTitle" parent="Theme.AppCompat.NoActionBar">
@@ -233,6 +236,7 @@
<item name="attr/ic_sort">@drawable/ic_sort_white_24dp</item>
<item name="attr/ic_sd_storage">@drawable/ic_sd_storage_white_36dp</item>
<item name="attr/ic_create_new_folder">@drawable/ic_create_new_folder_white_24dp</item>
+ <item name="attr/ic_cast_disconnect">@drawable/ic_cast_disconnect_white_36dp</item>
</style>
<style name="Theme.AntennaPod.VideoPlayer" parent="@style/Theme.AntennaPod.Dark">