summaryrefslogtreecommitdiff
path: root/core/src/main
diff options
context:
space:
mode:
authorMartin Fietz <Martin.Fietz@gmail.com>2015-11-02 15:24:18 +0100
committerMartin Fietz <Martin.Fietz@gmail.com>2016-01-16 22:08:09 +0100
commit99d7992dc8af74ba8937dfd4cef2e78bacb8b9c2 (patch)
tree9ecd812d4cff3ca58c6e698e5147cb101b6c2c55 /core/src/main
parentce29d9f6697d63cfa5edb0c56cd47dfc00a04d41 (diff)
downloadAntennaPod-99d7992dc8af74ba8937dfd4cef2e78bacb8b9c2.zip
Audio player redesign
Sleep timer and audio effects (e.g. balance) accessible from actionbar, fragment pager
Diffstat (limited to 'core/src/main')
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java47
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java28
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceMediaPlayer.java58
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/util/playback/AudioPlayer.java5
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/util/playback/IPlayer.java4
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/util/playback/PlaybackController.java90
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/util/playback/Timeline.java2
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/util/playback/VideoPlayer.java11
-rw-r--r--core/src/main/res/drawable-hdpi/ic_skip_grey600_36dp.pngbin0 -> 302 bytes
-rw-r--r--core/src/main/res/drawable-hdpi/ic_skip_white_36dp.pngbin0 -> 304 bytes
-rw-r--r--core/src/main/res/drawable-hdpi/ic_sleep_grey600_24dp.pngbin0 -> 421 bytes
-rw-r--r--core/src/main/res/drawable-hdpi/ic_sleep_off_grey600_24dp.pngbin0 -> 659 bytes
-rw-r--r--core/src/main/res/drawable-hdpi/ic_sleep_off_white_24dp.pngbin0 -> 431 bytes
-rw-r--r--core/src/main/res/drawable-hdpi/ic_sleep_white_24dp.pngbin0 -> 361 bytes
-rw-r--r--core/src/main/res/drawable-hdpi/ic_star_border_grey600_24dp.pngbin0 -> 637 bytes
-rw-r--r--core/src/main/res/drawable-hdpi/ic_star_border_white_24dp.pngbin0 -> 637 bytes
-rw-r--r--core/src/main/res/drawable-hdpi/ic_star_grey600_24dp.pngbin0 -> 460 bytes
-rw-r--r--core/src/main/res/drawable-hdpi/ic_star_white_24dp.pngbin0 -> 454 bytes
-rw-r--r--core/src/main/res/drawable-mdpi/ic_skip_grey600_36dp.pngbin0 -> 218 bytes
-rw-r--r--core/src/main/res/drawable-mdpi/ic_skip_white_36dp.pngbin0 -> 216 bytes
-rw-r--r--core/src/main/res/drawable-mdpi/ic_sleep_grey600_24dp.pngbin0 -> 336 bytes
-rw-r--r--core/src/main/res/drawable-mdpi/ic_sleep_off_grey600_24dp.pngbin0 -> 472 bytes
-rw-r--r--core/src/main/res/drawable-mdpi/ic_sleep_off_white_24dp.pngbin0 -> 323 bytes
-rw-r--r--core/src/main/res/drawable-mdpi/ic_sleep_white_24dp.pngbin0 -> 252 bytes
-rw-r--r--core/src/main/res/drawable-mdpi/ic_star_border_grey600_24dp.pngbin0 -> 410 bytes
-rw-r--r--core/src/main/res/drawable-mdpi/ic_star_border_white_24dp.pngbin0 -> 410 bytes
-rw-r--r--core/src/main/res/drawable-mdpi/ic_star_grey600_24dp.pngbin0 -> 307 bytes
-rw-r--r--core/src/main/res/drawable-mdpi/ic_star_white_24dp.pngbin0 -> 302 bytes
-rw-r--r--core/src/main/res/drawable-xhdpi/ic_skip_grey600_36dp.pngbin0 -> 364 bytes
-rw-r--r--core/src/main/res/drawable-xhdpi/ic_skip_white_36dp.pngbin0 -> 368 bytes
-rw-r--r--core/src/main/res/drawable-xhdpi/ic_sleep_grey600_24dp.pngbin0 -> 494 bytes
-rw-r--r--core/src/main/res/drawable-xhdpi/ic_sleep_off_grey600_24dp.pngbin0 -> 769 bytes
-rw-r--r--core/src/main/res/drawable-xhdpi/ic_sleep_off_white_24dp.pngbin0 -> 486 bytes
-rw-r--r--core/src/main/res/drawable-xhdpi/ic_sleep_white_24dp.pngbin0 -> 367 bytes
-rw-r--r--core/src/main/res/drawable-xhdpi/ic_star_border_grey600_24dp.pngbin0 -> 828 bytes
-rw-r--r--core/src/main/res/drawable-xhdpi/ic_star_border_white_24dp.pngbin0 -> 821 bytes
-rw-r--r--core/src/main/res/drawable-xhdpi/ic_star_grey600_24dp.pngbin0 -> 593 bytes
-rw-r--r--core/src/main/res/drawable-xhdpi/ic_star_white_24dp.pngbin0 -> 582 bytes
-rw-r--r--core/src/main/res/drawable-xxhdpi/ic_skip_grey600_36dp.pngbin0 -> 533 bytes
-rw-r--r--core/src/main/res/drawable-xxhdpi/ic_skip_white_36dp.pngbin0 -> 543 bytes
-rw-r--r--core/src/main/res/drawable-xxhdpi/ic_sleep_grey600_24dp.pngbin0 -> 737 bytes
-rw-r--r--core/src/main/res/drawable-xxhdpi/ic_sleep_off_grey600_24dp.pngbin0 -> 1113 bytes
-rw-r--r--core/src/main/res/drawable-xxhdpi/ic_sleep_off_white_24dp.pngbin0 -> 664 bytes
-rw-r--r--core/src/main/res/drawable-xxhdpi/ic_sleep_white_24dp.pngbin0 -> 509 bytes
-rw-r--r--core/src/main/res/drawable-xxhdpi/ic_star_border_grey600_24dp.pngbin0 -> 1227 bytes
-rw-r--r--core/src/main/res/drawable-xxhdpi/ic_star_border_white_24dp.pngbin0 -> 1222 bytes
-rw-r--r--core/src/main/res/drawable-xxhdpi/ic_star_grey600_24dp.pngbin0 -> 877 bytes
-rw-r--r--core/src/main/res/drawable-xxhdpi/ic_star_white_24dp.pngbin0 -> 870 bytes
-rw-r--r--core/src/main/res/drawable-xxxhdpi/ic_skip_grey600_36dp.pngbin0 -> 737 bytes
-rw-r--r--core/src/main/res/drawable-xxxhdpi/ic_skip_white_36dp.pngbin0 -> 749 bytes
-rw-r--r--core/src/main/res/drawable-xxxhdpi/ic_sleep_grey600_24dp.pngbin0 -> 955 bytes
-rw-r--r--core/src/main/res/drawable-xxxhdpi/ic_sleep_off_grey600_24dp.pngbin0 -> 1514 bytes
-rw-r--r--core/src/main/res/drawable-xxxhdpi/ic_sleep_off_white_24dp.pngbin0 -> 882 bytes
-rw-r--r--core/src/main/res/drawable-xxxhdpi/ic_sleep_white_24dp.pngbin0 -> 647 bytes
-rw-r--r--core/src/main/res/drawable-xxxhdpi/ic_star_border_grey600_24dp.pngbin0 -> 1675 bytes
-rw-r--r--core/src/main/res/drawable-xxxhdpi/ic_star_border_white_24dp.pngbin0 -> 1684 bytes
-rw-r--r--core/src/main/res/drawable-xxxhdpi/ic_star_grey600_24dp.pngbin0 -> 1179 bytes
-rw-r--r--core/src/main/res/drawable-xxxhdpi/ic_star_white_24dp.pngbin0 -> 1183 bytes
-rw-r--r--core/src/main/res/values/arrays.xml12
-rw-r--r--core/src/main/res/values/attrs.xml8
-rw-r--r--core/src/main/res/values/dimens.xml4
-rw-r--r--core/src/main/res/values/strings.xml13
-rw-r--r--core/src/main/res/values/styles.xml25
63 files changed, 230 insertions, 77 deletions
diff --git a/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java b/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java
index d6ac8496b..6c0aff15e 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java
@@ -20,7 +20,6 @@ import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
-import java.util.LinkedList;
import java.util.List;
import java.util.concurrent.TimeUnit;
@@ -95,9 +94,12 @@ public class UserPreferences {
public static final String PREF_QUEUE_LOCKED = "prefQueueLocked";
public static final String IMAGE_CACHE_DEFAULT_VALUE = "100";
public static final int IMAGE_CACHE_SIZE_MINIMUM = 20;
+ public static final String PREF_LEFT_VOLUME = "prefLeftVolume";
+ public static final String PREF_RIGHT_VOLUME = "prefRightVolume";
// Experimental
public static final String PREF_SONIC = "prefSonic";
+ public static final String PREF_STEREO_TO_MONO = "PrefStereoToMono";
public static final String PREF_NORMALIZER = "prefNormalizer";
public static final int EPISODE_CLEANUP_QUEUE = -1;
public static final int EPISODE_CLEANUP_NULL = -2;
@@ -249,17 +251,37 @@ public class UserPreferences {
}
public static String getPlaybackSpeed() {
- return prefs.getString(PREF_PLAYBACK_SPEED, "1.0");
+ return prefs.getString(PREF_PLAYBACK_SPEED, "1.00");
}
public static String[] getPlaybackSpeedArray() {
return readPlaybackSpeedArray(prefs.getString(PREF_PLAYBACK_SPEED_ARRAY, null));
}
+ public static float getLeftVolume() {
+ int volume = prefs.getInt(PREF_LEFT_VOLUME, 100);
+ if(volume == 100) {
+ return 1.0f;
+ } else {
+ return (float) (1 - (Math.log(100 - volume) / Math.log(100)));
+ }
+ }
+
+ public static float getRightVolume() {
+ int volume = prefs.getInt(PREF_RIGHT_VOLUME, 100);
+ if(volume == 100) {
+ return 1.0f;
+ } else {
+ return (float) (1 - (Math.log(100 - volume) / Math.log(100)));
+ }
+ }
+
public static boolean shouldPauseForFocusLoss() {
return prefs.getBoolean(PREF_PAUSE_PLAYBACK_FOR_FOCUS_LOSS, false);
}
+
+
public static long getUpdateInterval() {
String updateInterval = prefs.getString(PREF_UPDATE_INTERVAL, "0");
if(false == updateInterval.contains(":")) {
@@ -385,6 +407,15 @@ public class UserPreferences {
.apply();
}
+ public static void setVolume(int leftVolume, int rightVolume) {
+ assert(0 <= leftVolume && leftVolume <= 100);
+ assert(0 <= rightVolume && rightVolume <= 100);
+ prefs.edit()
+ .putInt(PREF_LEFT_VOLUME, leftVolume)
+ .putInt(PREF_RIGHT_VOLUME, rightVolume)
+ .apply();
+ }
+
public static void setAutodownloadSelectedNetworks(String[] value) {
prefs.edit()
.putString(PREF_AUTODL_SELECTED_NETWORKS, TextUtils.join(",", value))
@@ -472,7 +503,7 @@ public class UserPreferences {
// If this preference hasn't been set yet, return the default options
if (valueFromPrefs == null) {
String[] allSpeeds = context.getResources().getStringArray(R.array.playback_speed_values);
- List<String> speedList = new LinkedList<String>();
+ List<String> speedList = new ArrayList<>();
for (String speedStr : allSpeeds) {
float speed = Float.parseFloat(speedStr);
if (speed < 2.0001 && speed * 10 % 1 == 0) {
@@ -505,6 +536,16 @@ public class UserPreferences {
.apply();
}
+ public static boolean stereoToMono() {
+ return prefs.getBoolean(PREF_STEREO_TO_MONO, false);
+ }
+
+ public static void stereoToMono(boolean enable) {
+ prefs.edit()
+ .putBoolean(PREF_STEREO_TO_MONO, enable)
+ .apply();
+ }
+
public static EpisodeCleanupAlgorithm getEpisodeCleanupAlgorithm() {
int cleanupValue = Integer.valueOf(prefs.getString(PREF_EPISODE_CLEANUP, "-1"));
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 129055f92..2be075a92 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
@@ -398,19 +398,25 @@ public class PlaybackService extends Service {
@Override
public void onSleepTimerAlmostExpired() {
- mediaPlayer.setVolume(0.1f);
+ float leftVolume = 0.1f * UserPreferences.getLeftVolume();
+ float rightVolume = 0.1f * UserPreferences.getRightVolume();
+ mediaPlayer.setVolume(leftVolume, rightVolume);
}
@Override
public void onSleepTimerExpired() {
mediaPlayer.pause(true, true);
- mediaPlayer.setVolume(1.0f);
+ float leftVolume = UserPreferences.getLeftVolume();
+ float rightVolume = UserPreferences.getRightVolume();
+ mediaPlayer.setVolume(leftVolume, rightVolume);
sendNotificationBroadcast(NOTIFICATION_TYPE_SLEEPTIMER_UPDATE, 0);
}
@Override
public void onSleepTimerReset() {
- mediaPlayer.setVolume(1.0f);
+ float leftVolume = UserPreferences.getLeftVolume();
+ float rightVolume = UserPreferences.getRightVolume();
+ mediaPlayer.setVolume(leftVolume, rightVolume);
}
@Override
@@ -1165,18 +1171,30 @@ public class PlaybackService extends Service {
public Playable getPlayable() { return mediaPlayer.getPlayable(); }
+ public boolean canSetSpeed() {
+ return mediaPlayer.canSetSpeed();
+ }
+
public void setSpeed(float speed) {
mediaPlayer.setSpeed(speed);
}
- public boolean canSetSpeed() {
- return mediaPlayer.canSetSpeed();
+ public void setVolume(float leftVolume, float rightVolume) {
+ mediaPlayer.setVolume(leftVolume, rightVolume);
}
public float getCurrentPlaybackSpeed() {
return mediaPlayer.getPlaybackSpeed();
}
+ public boolean canDownmix() {
+ return mediaPlayer.canDownmix();
+ }
+
+ public void setDownmix(boolean enable) {
+ mediaPlayer.setDownmix(enable);
+ }
+
public boolean isStartWhenPrepared() {
return mediaPlayer.isStartWhenPrepared();
}
diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceMediaPlayer.java b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceMediaPlayer.java
index e26ee32cb..aa73b17a7 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceMediaPlayer.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceMediaPlayer.java
@@ -24,6 +24,7 @@ import android.view.SurfaceHolder;
import android.view.WindowManager;
import com.bumptech.glide.Glide;
+import com.bumptech.glide.request.target.Target;
import java.io.IOException;
import java.util.concurrent.CountDownLatch;
@@ -293,6 +294,7 @@ public class PlaybackServiceMediaPlayer implements SharedPreferences.OnSharedPre
builder.putLong(MediaMetadataCompat.METADATA_KEY_DURATION, p.getDuration());
builder.putString(MediaMetadataCompat.METADATA_KEY_DISPLAY_TITLE, p.getEpisodeTitle());
builder.putString(MediaMetadataCompat.METADATA_KEY_ALBUM, p.getFeedTitle());
+
if (p.getImageUri() != null && UserPreferences.setLockscreenBackground()) {
builder.putString(MediaMetadataCompat.METADATA_KEY_ART_URI, p.getImageUri().toString());
try {
@@ -322,13 +324,10 @@ public class PlaybackServiceMediaPlayer implements SharedPreferences.OnSharedPre
* This method is executed on an internal executor service.
*/
public void resume() {
- executor.submit(new Runnable() {
- @Override
- public void run() {
- playerLock.lock();
- resumeSync();
- playerLock.unlock();
- }
+ executor.submit(() -> {
+ playerLock.lock();
+ resumeSync();
+ playerLock.unlock();
});
}
@@ -339,7 +338,15 @@ public class PlaybackServiceMediaPlayer implements SharedPreferences.OnSharedPre
AudioManager.AUDIOFOCUS_GAIN);
if (focusGained == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
acquireWifiLockIfNecessary();
- setSpeed(Float.parseFloat(UserPreferences.getPlaybackSpeed()));
+ float speed = 1.0f;
+ try {
+ speed = Float.parseFloat(UserPreferences.getPlaybackSpeed());
+ } catch(NumberFormatException e) {
+ Log.e(TAG, Log.getStackTraceString(e));
+ UserPreferences.setPlaybackSpeed(String.valueOf(speed));
+ }
+ setSpeed(speed);
+ setVolume(UserPreferences.getLeftVolume(), UserPreferences.getRightVolume());
if (playerStatus == PlayerStatus.PREPARED && media.getPosition() > 0) {
int newPosition = RewindAfterPauseUtils.calculatePositionWithRewind(
@@ -690,24 +697,39 @@ public class PlaybackServiceMediaPlayer implements SharedPreferences.OnSharedPre
* Sets the playback speed.
* This method is executed on an internal executor service.
*/
- public void setVolume(final float volume) {
- executor.submit(new Runnable() {
- @Override
- public void run() {
- setVolumeSync(volume);
- }
- });
+ public void setVolume(final float volumeLeft, float volumeRight) {
+ executor.submit(() -> setVolumeSync(volumeLeft, volumeRight));
}
/**
* Sets the playback speed.
* This method is executed on the caller's thread.
*/
- private void setVolumeSync(float volume) {
+ private void setVolumeSync(float volumeLeft, float volumeRight) {
+ playerLock.lock();
+ if (media != null && media.getMediaType() == MediaType.AUDIO) {
+ mediaPlayer.setVolume(volumeLeft, volumeRight);
+ Log.d(TAG, "Media player volume was set to " + volumeLeft + " " + volumeRight);
+ }
+ playerLock.unlock();
+ }
+
+ /**
+ * Returns true if the mediaplayer can mix stereo down to mono
+ */
+ public boolean canDownmix() {
+ boolean retVal = false;
+ if (mediaPlayer != null && media != null && media.getMediaType() == MediaType.AUDIO) {
+ retVal = mediaPlayer.canDownmix();
+ }
+ return retVal;
+ }
+
+ public void setDownmix(boolean enable) {
playerLock.lock();
if (media != null && media.getMediaType() == MediaType.AUDIO) {
- mediaPlayer.setVolume(volume, volume);
- Log.d(TAG, "Media player volume was set to " + volume);
+ mediaPlayer.setDownmix(enable);
+ Log.d(TAG, "Media player downmix was set to " + enable);
}
playerLock.unlock();
}
diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/playback/AudioPlayer.java b/core/src/main/java/de/danoeh/antennapod/core/util/playback/AudioPlayer.java
index b6beb5bf1..f0850e6df 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/util/playback/AudioPlayer.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/util/playback/AudioPlayer.java
@@ -37,4 +37,9 @@ public class AudioPlayer extends MediaPlayer implements IPlayer {
protected boolean useSonic() {
return UserPreferences.useSonic();
}
+
+ @Override
+ protected boolean downmix() {
+ return UserPreferences.stereoToMono();
+ }
}
diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/playback/IPlayer.java b/core/src/main/java/de/danoeh/antennapod/core/util/playback/IPlayer.java
index 147c7848d..d67153a4e 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/util/playback/IPlayer.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/util/playback/IPlayer.java
@@ -10,6 +10,8 @@ public interface IPlayer {
boolean canSetSpeed();
+ boolean canDownmix();
+
float getCurrentPitchStepsAdjustment();
int getCurrentPosition();
@@ -57,6 +59,8 @@ public interface IPlayer {
void setPlaybackSpeed(float f);
+ void setDownmix(boolean enable);
+
void setVolume(float left, float right);
void start();
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 a519fb555..1952c068f 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
@@ -27,7 +27,6 @@ import android.widget.TextView;
import java.util.concurrent.RejectedExecutionHandler;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.ScheduledThreadPoolExecutor;
-import java.util.concurrent.ThreadFactory;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
@@ -48,6 +47,7 @@ import de.danoeh.antennapod.core.util.playback.Playable.PlayableUtils;
* control playback instead of communicating with the PlaybackService directly.
*/
public abstract class PlaybackController {
+
private static final String TAG = "PlaybackController";
public static final int INVALID_TIME = -1;
@@ -78,23 +78,18 @@ public abstract class PlaybackController {
this.activity = activity;
this.reinitOnPause = reinitOnPause;
schedExecutor = new ScheduledThreadPoolExecutor(SCHED_EX_POOLSIZE,
- new ThreadFactory() {
-
- @Override
- public Thread newThread(Runnable r) {
- Thread t = new Thread(r);
- t.setPriority(Thread.MIN_PRIORITY);
- return t;
- }
- }, new RejectedExecutionHandler() {
-
- @Override
- public void rejectedExecution(Runnable r,
- ThreadPoolExecutor executor) {
- Log.w(TAG,
+ r -> {
+ Thread t = new Thread(r);
+ t.setPriority(Thread.MIN_PRIORITY);
+ return t;
+ }, new RejectedExecutionHandler() {
+ @Override
+ public void rejectedExecution(Runnable r,
+ ThreadPoolExecutor executor) {
+ Log.w(TAG,
"Rejected execution of runnable in schedExecutor");
+ }
}
- }
);
}
@@ -104,10 +99,10 @@ public abstract class PlaybackController {
*/
public void init() {
activity.registerReceiver(statusUpdate, new IntentFilter(
- PlaybackService.ACTION_PLAYER_STATUS_CHANGED));
+ PlaybackService.ACTION_PLAYER_STATUS_CHANGED));
activity.registerReceiver(notificationReceiver, new IntentFilter(
- PlaybackService.ACTION_PLAYER_NOTIFICATION));
+ PlaybackService.ACTION_PLAYER_NOTIFICATION));
activity.registerReceiver(shutdownReceiver, new IntentFilter(
PlaybackService.ACTION_SHUTDOWN_PLAYBACK_SERVICE));
@@ -239,7 +234,7 @@ public abstract class PlaybackController {
return null;
}
- public abstract void setupGUI();
+
private void setupPositionObserver() {
if ((positionObserverFuture != null && positionObserverFuture
@@ -263,8 +258,6 @@ public abstract class PlaybackController {
}
}
- public abstract void onPositionObserverUpdate();
-
private ServiceConnection mConnection = new ServiceConnection() {
public void onServiceConnected(ComponentName className, IBinder service) {
playbackService = ((PlaybackService.LocalBinder) service)
@@ -367,26 +360,31 @@ public abstract class PlaybackController {
}
};
- public abstract void onPlaybackSpeedChange();
+ public void setupGUI() {};
+
+ public void onPositionObserverUpdate() {};
+
- public abstract void onShutdownNotification();
+ public void onPlaybackSpeedChange() {};
+
+ public void onShutdownNotification() {};
/**
* Called when the currently displayed information should be refreshed.
*/
- public abstract void onReloadNotification(int code);
+ public void onReloadNotification(int code) {};
- public abstract void onBufferStart();
+ public void onBufferStart() {};
- public abstract void onBufferEnd();
+ public void onBufferEnd() {};
- public abstract void onBufferUpdate(float progress);
+ public void onBufferUpdate(float progress) {};
- public abstract void onSleepTimerUpdate();
+ public void onSleepTimerUpdate() {};
- public abstract void handleError(int code);
+ public void handleError(int code) {};
- public abstract void onPlaybackEnd();
+ public void onPlaybackEnd() {};
public void repeatHandleStatus() {
if (status != null && playbackService != null) {
@@ -484,15 +482,19 @@ public abstract class PlaybackController {
}
}
- public abstract ImageButton getPlayButton();
+ public ImageButton getPlayButton() {
+ return null;
+ };
- public abstract void postStatusMsg(int msg);
+ public void postStatusMsg(int msg) {};
- public abstract void clearStatusMsg();
+ public void clearStatusMsg() {};
- public abstract boolean loadMediaInfo();
+ public boolean loadMediaInfo() {
+ return false;
+ };
- public abstract void onAwaitingVideoSurface();
+ public void onAwaitingVideoSurface() {};
/**
* Called when connection to playback service has been established or
@@ -526,7 +528,7 @@ public abstract class PlaybackController {
}
}
- public abstract void onServiceQueried();
+ public void onServiceQueried() {};
/**
* Should be used by classes which implement the OnSeekBarChanged interface.
@@ -691,6 +693,12 @@ public abstract class PlaybackController {
}
}
+ public void setVolume(float leftVolume, float rightVolume) {
+ if (playbackService != null) {
+ playbackService.setVolume(leftVolume, rightVolume);
+ }
+ }
+
public float getCurrentPlaybackSpeedMultiplier() {
if (canSetPlaybackSpeed()) {
return playbackService.getCurrentPlaybackSpeed();
@@ -699,6 +707,16 @@ public abstract class PlaybackController {
}
}
+ public boolean canDownmix() {
+ return playbackService != null && playbackService.canDownmix();
+ }
+
+ public void setDownmix(boolean enable) {
+ if(playbackService != null) {
+ playbackService.setDownmix(enable);
+ }
+ }
+
public boolean isPlayingVideo() {
if (playbackService != null) {
return PlaybackService.getCurrentMediaType() == MediaType.VIDEO;
diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/playback/Timeline.java b/core/src/main/java/de/danoeh/antennapod/core/util/playback/Timeline.java
index 00f2e6f57..2eee1ac87 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/util/playback/Timeline.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/util/playback/Timeline.java
@@ -88,7 +88,7 @@ public class Timeline {
}
// replace ASCII line breaks with HTML ones if shownotes don't contain HTML line breaks already
- if(!LINE_BREAK_REGEX.matcher(shownotes).find()) {
+ if(!LINE_BREAK_REGEX.matcher(shownotes).find() && !shownotes.contains("<p>")) {
shownotes = shownotes.replace("\n", "<br />");
}
diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/playback/VideoPlayer.java b/core/src/main/java/de/danoeh/antennapod/core/util/playback/VideoPlayer.java
index dc5270d8f..368379509 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/util/playback/VideoPlayer.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/util/playback/VideoPlayer.java
@@ -17,6 +17,11 @@ public class VideoPlayer extends MediaPlayer implements IPlayer {
}
@Override
+ public boolean canDownmix() {
+ return false;
+ }
+
+ @Override
public float getCurrentPitchStepsAdjustment() {
return 1;
}
@@ -60,6 +65,12 @@ public class VideoPlayer extends MediaPlayer implements IPlayer {
throw new UnsupportedOperationException("Setting playback speed unsupported in video player");
}
+ @Override
+ public void setDownmix(boolean b) {
+ Log.e(TAG, "Setting downmix unsupported in video player");
+ throw new UnsupportedOperationException("Setting downmix unsupported in video player");
+ }
+
@Override
public void setVideoScalingMode(int mode) {
super.setVideoScalingMode(mode);
diff --git a/core/src/main/res/drawable-hdpi/ic_skip_grey600_36dp.png b/core/src/main/res/drawable-hdpi/ic_skip_grey600_36dp.png
new file mode 100644
index 000000000..edbc95b05
--- /dev/null
+++ b/core/src/main/res/drawable-hdpi/ic_skip_grey600_36dp.png
Binary files differ
diff --git a/core/src/main/res/drawable-hdpi/ic_skip_white_36dp.png b/core/src/main/res/drawable-hdpi/ic_skip_white_36dp.png
new file mode 100644
index 000000000..cbfb262d8
--- /dev/null
+++ b/core/src/main/res/drawable-hdpi/ic_skip_white_36dp.png
Binary files differ
diff --git a/core/src/main/res/drawable-hdpi/ic_sleep_grey600_24dp.png b/core/src/main/res/drawable-hdpi/ic_sleep_grey600_24dp.png
new file mode 100644
index 000000000..809066499
--- /dev/null
+++ b/core/src/main/res/drawable-hdpi/ic_sleep_grey600_24dp.png
Binary files differ
diff --git a/core/src/main/res/drawable-hdpi/ic_sleep_off_grey600_24dp.png b/core/src/main/res/drawable-hdpi/ic_sleep_off_grey600_24dp.png
new file mode 100644
index 000000000..4496a320d
--- /dev/null
+++ b/core/src/main/res/drawable-hdpi/ic_sleep_off_grey600_24dp.png
Binary files differ
diff --git a/core/src/main/res/drawable-hdpi/ic_sleep_off_white_24dp.png b/core/src/main/res/drawable-hdpi/ic_sleep_off_white_24dp.png
new file mode 100644
index 000000000..79684ab65
--- /dev/null
+++ b/core/src/main/res/drawable-hdpi/ic_sleep_off_white_24dp.png
Binary files differ
diff --git a/core/src/main/res/drawable-hdpi/ic_sleep_white_24dp.png b/core/src/main/res/drawable-hdpi/ic_sleep_white_24dp.png
new file mode 100644
index 000000000..f0df6032c
--- /dev/null
+++ b/core/src/main/res/drawable-hdpi/ic_sleep_white_24dp.png
Binary files differ
diff --git a/core/src/main/res/drawable-hdpi/ic_star_border_grey600_24dp.png b/core/src/main/res/drawable-hdpi/ic_star_border_grey600_24dp.png
new file mode 100644
index 000000000..006410bc3
--- /dev/null
+++ b/core/src/main/res/drawable-hdpi/ic_star_border_grey600_24dp.png
Binary files differ
diff --git a/core/src/main/res/drawable-hdpi/ic_star_border_white_24dp.png b/core/src/main/res/drawable-hdpi/ic_star_border_white_24dp.png
new file mode 100644
index 000000000..27831192f
--- /dev/null
+++ b/core/src/main/res/drawable-hdpi/ic_star_border_white_24dp.png
Binary files differ
diff --git a/core/src/main/res/drawable-hdpi/ic_star_grey600_24dp.png b/core/src/main/res/drawable-hdpi/ic_star_grey600_24dp.png
new file mode 100644
index 000000000..93f70a024
--- /dev/null
+++ b/core/src/main/res/drawable-hdpi/ic_star_grey600_24dp.png
Binary files differ
diff --git a/core/src/main/res/drawable-hdpi/ic_star_white_24dp.png b/core/src/main/res/drawable-hdpi/ic_star_white_24dp.png
new file mode 100644
index 000000000..e8619b780
--- /dev/null
+++ b/core/src/main/res/drawable-hdpi/ic_star_white_24dp.png
Binary files differ
diff --git a/core/src/main/res/drawable-mdpi/ic_skip_grey600_36dp.png b/core/src/main/res/drawable-mdpi/ic_skip_grey600_36dp.png
new file mode 100644
index 000000000..be0fcc765
--- /dev/null
+++ b/core/src/main/res/drawable-mdpi/ic_skip_grey600_36dp.png
Binary files differ
diff --git a/core/src/main/res/drawable-mdpi/ic_skip_white_36dp.png b/core/src/main/res/drawable-mdpi/ic_skip_white_36dp.png
new file mode 100644
index 000000000..893cf2c64
--- /dev/null
+++ b/core/src/main/res/drawable-mdpi/ic_skip_white_36dp.png
Binary files differ
diff --git a/core/src/main/res/drawable-mdpi/ic_sleep_grey600_24dp.png b/core/src/main/res/drawable-mdpi/ic_sleep_grey600_24dp.png
new file mode 100644
index 000000000..ea511bf2a
--- /dev/null
+++ b/core/src/main/res/drawable-mdpi/ic_sleep_grey600_24dp.png
Binary files differ
diff --git a/core/src/main/res/drawable-mdpi/ic_sleep_off_grey600_24dp.png b/core/src/main/res/drawable-mdpi/ic_sleep_off_grey600_24dp.png
new file mode 100644
index 000000000..7f631ad86
--- /dev/null
+++ b/core/src/main/res/drawable-mdpi/ic_sleep_off_grey600_24dp.png
Binary files differ
diff --git a/core/src/main/res/drawable-mdpi/ic_sleep_off_white_24dp.png b/core/src/main/res/drawable-mdpi/ic_sleep_off_white_24dp.png
new file mode 100644
index 000000000..795e318e3
--- /dev/null
+++ b/core/src/main/res/drawable-mdpi/ic_sleep_off_white_24dp.png
Binary files differ
diff --git a/core/src/main/res/drawable-mdpi/ic_sleep_white_24dp.png b/core/src/main/res/drawable-mdpi/ic_sleep_white_24dp.png
new file mode 100644
index 000000000..4304a6bca
--- /dev/null
+++ b/core/src/main/res/drawable-mdpi/ic_sleep_white_24dp.png
Binary files differ
diff --git a/core/src/main/res/drawable-mdpi/ic_star_border_grey600_24dp.png b/core/src/main/res/drawable-mdpi/ic_star_border_grey600_24dp.png
new file mode 100644
index 000000000..dd9d11ba0
--- /dev/null
+++ b/core/src/main/res/drawable-mdpi/ic_star_border_grey600_24dp.png
Binary files differ
diff --git a/core/src/main/res/drawable-mdpi/ic_star_border_white_24dp.png b/core/src/main/res/drawable-mdpi/ic_star_border_white_24dp.png
new file mode 100644
index 000000000..104fb3c9d
--- /dev/null
+++ b/core/src/main/res/drawable-mdpi/ic_star_border_white_24dp.png
Binary files differ
diff --git a/core/src/main/res/drawable-mdpi/ic_star_grey600_24dp.png b/core/src/main/res/drawable-mdpi/ic_star_grey600_24dp.png
new file mode 100644
index 000000000..af84b71f2
--- /dev/null
+++ b/core/src/main/res/drawable-mdpi/ic_star_grey600_24dp.png
Binary files differ
diff --git a/core/src/main/res/drawable-mdpi/ic_star_white_24dp.png b/core/src/main/res/drawable-mdpi/ic_star_white_24dp.png
new file mode 100644
index 000000000..0ccebc7c8
--- /dev/null
+++ b/core/src/main/res/drawable-mdpi/ic_star_white_24dp.png
Binary files differ
diff --git a/core/src/main/res/drawable-xhdpi/ic_skip_grey600_36dp.png b/core/src/main/res/drawable-xhdpi/ic_skip_grey600_36dp.png
new file mode 100644
index 000000000..2e291dd19
--- /dev/null
+++ b/core/src/main/res/drawable-xhdpi/ic_skip_grey600_36dp.png
Binary files differ
diff --git a/core/src/main/res/drawable-xhdpi/ic_skip_white_36dp.png b/core/src/main/res/drawable-xhdpi/ic_skip_white_36dp.png
new file mode 100644
index 000000000..fa85f1899
--- /dev/null
+++ b/core/src/main/res/drawable-xhdpi/ic_skip_white_36dp.png
Binary files differ
diff --git a/core/src/main/res/drawable-xhdpi/ic_sleep_grey600_24dp.png b/core/src/main/res/drawable-xhdpi/ic_sleep_grey600_24dp.png
new file mode 100644
index 000000000..ae0787a26
--- /dev/null
+++ b/core/src/main/res/drawable-xhdpi/ic_sleep_grey600_24dp.png
Binary files differ
diff --git a/core/src/main/res/drawable-xhdpi/ic_sleep_off_grey600_24dp.png b/core/src/main/res/drawable-xhdpi/ic_sleep_off_grey600_24dp.png
new file mode 100644
index 000000000..026224c5e
--- /dev/null
+++ b/core/src/main/res/drawable-xhdpi/ic_sleep_off_grey600_24dp.png
Binary files differ
diff --git a/core/src/main/res/drawable-xhdpi/ic_sleep_off_white_24dp.png b/core/src/main/res/drawable-xhdpi/ic_sleep_off_white_24dp.png
new file mode 100644
index 000000000..ef39d7279
--- /dev/null
+++ b/core/src/main/res/drawable-xhdpi/ic_sleep_off_white_24dp.png
Binary files differ
diff --git a/core/src/main/res/drawable-xhdpi/ic_sleep_white_24dp.png b/core/src/main/res/drawable-xhdpi/ic_sleep_white_24dp.png
new file mode 100644
index 000000000..07e156172
--- /dev/null
+++ b/core/src/main/res/drawable-xhdpi/ic_sleep_white_24dp.png
Binary files differ
diff --git a/core/src/main/res/drawable-xhdpi/ic_star_border_grey600_24dp.png b/core/src/main/res/drawable-xhdpi/ic_star_border_grey600_24dp.png
new file mode 100644
index 000000000..5160319b5
--- /dev/null
+++ b/core/src/main/res/drawable-xhdpi/ic_star_border_grey600_24dp.png
Binary files differ
diff --git a/core/src/main/res/drawable-xhdpi/ic_star_border_white_24dp.png b/core/src/main/res/drawable-xhdpi/ic_star_border_white_24dp.png
new file mode 100644
index 000000000..33f9727d3
--- /dev/null
+++ b/core/src/main/res/drawable-xhdpi/ic_star_border_white_24dp.png
Binary files differ
diff --git a/core/src/main/res/drawable-xhdpi/ic_star_grey600_24dp.png b/core/src/main/res/drawable-xhdpi/ic_star_grey600_24dp.png
new file mode 100644
index 000000000..7a09ebc33
--- /dev/null
+++ b/core/src/main/res/drawable-xhdpi/ic_star_grey600_24dp.png
Binary files differ
diff --git a/core/src/main/res/drawable-xhdpi/ic_star_white_24dp.png b/core/src/main/res/drawable-xhdpi/ic_star_white_24dp.png
new file mode 100644
index 000000000..288799f93
--- /dev/null
+++ b/core/src/main/res/drawable-xhdpi/ic_star_white_24dp.png
Binary files differ
diff --git a/core/src/main/res/drawable-xxhdpi/ic_skip_grey600_36dp.png b/core/src/main/res/drawable-xxhdpi/ic_skip_grey600_36dp.png
new file mode 100644
index 000000000..00a55a0f8
--- /dev/null
+++ b/core/src/main/res/drawable-xxhdpi/ic_skip_grey600_36dp.png
Binary files differ
diff --git a/core/src/main/res/drawable-xxhdpi/ic_skip_white_36dp.png b/core/src/main/res/drawable-xxhdpi/ic_skip_white_36dp.png
new file mode 100644
index 000000000..ac38e6d42
--- /dev/null
+++ b/core/src/main/res/drawable-xxhdpi/ic_skip_white_36dp.png
Binary files differ
diff --git a/core/src/main/res/drawable-xxhdpi/ic_sleep_grey600_24dp.png b/core/src/main/res/drawable-xxhdpi/ic_sleep_grey600_24dp.png
new file mode 100644
index 000000000..f4bd9e94d
--- /dev/null
+++ b/core/src/main/res/drawable-xxhdpi/ic_sleep_grey600_24dp.png
Binary files differ
diff --git a/core/src/main/res/drawable-xxhdpi/ic_sleep_off_grey600_24dp.png b/core/src/main/res/drawable-xxhdpi/ic_sleep_off_grey600_24dp.png
new file mode 100644
index 000000000..6c42d6051
--- /dev/null
+++ b/core/src/main/res/drawable-xxhdpi/ic_sleep_off_grey600_24dp.png
Binary files differ
diff --git a/core/src/main/res/drawable-xxhdpi/ic_sleep_off_white_24dp.png b/core/src/main/res/drawable-xxhdpi/ic_sleep_off_white_24dp.png
new file mode 100644
index 000000000..b8e06f9b3
--- /dev/null
+++ b/core/src/main/res/drawable-xxhdpi/ic_sleep_off_white_24dp.png
Binary files differ
diff --git a/core/src/main/res/drawable-xxhdpi/ic_sleep_white_24dp.png b/core/src/main/res/drawable-xxhdpi/ic_sleep_white_24dp.png
new file mode 100644
index 000000000..e2249c357
--- /dev/null
+++ b/core/src/main/res/drawable-xxhdpi/ic_sleep_white_24dp.png
Binary files differ
diff --git a/core/src/main/res/drawable-xxhdpi/ic_star_border_grey600_24dp.png b/core/src/main/res/drawable-xxhdpi/ic_star_border_grey600_24dp.png
new file mode 100644
index 000000000..6348e1997
--- /dev/null
+++ b/core/src/main/res/drawable-xxhdpi/ic_star_border_grey600_24dp.png
Binary files differ
diff --git a/core/src/main/res/drawable-xxhdpi/ic_star_border_white_24dp.png b/core/src/main/res/drawable-xxhdpi/ic_star_border_white_24dp.png
new file mode 100644
index 000000000..aab4831ff
--- /dev/null
+++ b/core/src/main/res/drawable-xxhdpi/ic_star_border_white_24dp.png
Binary files differ
diff --git a/core/src/main/res/drawable-xxhdpi/ic_star_grey600_24dp.png b/core/src/main/res/drawable-xxhdpi/ic_star_grey600_24dp.png
new file mode 100644
index 000000000..ef0294931
--- /dev/null
+++ b/core/src/main/res/drawable-xxhdpi/ic_star_grey600_24dp.png
Binary files differ
diff --git a/core/src/main/res/drawable-xxhdpi/ic_star_white_24dp.png b/core/src/main/res/drawable-xxhdpi/ic_star_white_24dp.png
new file mode 100644
index 000000000..de4b7b29d
--- /dev/null
+++ b/core/src/main/res/drawable-xxhdpi/ic_star_white_24dp.png
Binary files differ
diff --git a/core/src/main/res/drawable-xxxhdpi/ic_skip_grey600_36dp.png b/core/src/main/res/drawable-xxxhdpi/ic_skip_grey600_36dp.png
new file mode 100644
index 000000000..94836e0c8
--- /dev/null
+++ b/core/src/main/res/drawable-xxxhdpi/ic_skip_grey600_36dp.png
Binary files differ
diff --git a/core/src/main/res/drawable-xxxhdpi/ic_skip_white_36dp.png b/core/src/main/res/drawable-xxxhdpi/ic_skip_white_36dp.png
new file mode 100644
index 000000000..a84f34228
--- /dev/null
+++ b/core/src/main/res/drawable-xxxhdpi/ic_skip_white_36dp.png
Binary files differ
diff --git a/core/src/main/res/drawable-xxxhdpi/ic_sleep_grey600_24dp.png b/core/src/main/res/drawable-xxxhdpi/ic_sleep_grey600_24dp.png
new file mode 100644
index 000000000..9c0116c60
--- /dev/null
+++ b/core/src/main/res/drawable-xxxhdpi/ic_sleep_grey600_24dp.png
Binary files differ
diff --git a/core/src/main/res/drawable-xxxhdpi/ic_sleep_off_grey600_24dp.png b/core/src/main/res/drawable-xxxhdpi/ic_sleep_off_grey600_24dp.png
new file mode 100644
index 000000000..e8141d0df
--- /dev/null
+++ b/core/src/main/res/drawable-xxxhdpi/ic_sleep_off_grey600_24dp.png
Binary files differ
diff --git a/core/src/main/res/drawable-xxxhdpi/ic_sleep_off_white_24dp.png b/core/src/main/res/drawable-xxxhdpi/ic_sleep_off_white_24dp.png
new file mode 100644
index 000000000..ca41ad5e6
--- /dev/null
+++ b/core/src/main/res/drawable-xxxhdpi/ic_sleep_off_white_24dp.png
Binary files differ
diff --git a/core/src/main/res/drawable-xxxhdpi/ic_sleep_white_24dp.png b/core/src/main/res/drawable-xxxhdpi/ic_sleep_white_24dp.png
new file mode 100644
index 000000000..29782e155
--- /dev/null
+++ b/core/src/main/res/drawable-xxxhdpi/ic_sleep_white_24dp.png
Binary files differ
diff --git a/core/src/main/res/drawable-xxxhdpi/ic_star_border_grey600_24dp.png b/core/src/main/res/drawable-xxxhdpi/ic_star_border_grey600_24dp.png
new file mode 100644
index 000000000..1109e95c8
--- /dev/null
+++ b/core/src/main/res/drawable-xxxhdpi/ic_star_border_grey600_24dp.png
Binary files differ
diff --git a/core/src/main/res/drawable-xxxhdpi/ic_star_border_white_24dp.png b/core/src/main/res/drawable-xxxhdpi/ic_star_border_white_24dp.png
new file mode 100644
index 000000000..086cb677c
--- /dev/null
+++ b/core/src/main/res/drawable-xxxhdpi/ic_star_border_white_24dp.png
Binary files differ
diff --git a/core/src/main/res/drawable-xxxhdpi/ic_star_grey600_24dp.png b/core/src/main/res/drawable-xxxhdpi/ic_star_grey600_24dp.png
new file mode 100644
index 000000000..dda3262ed
--- /dev/null
+++ b/core/src/main/res/drawable-xxxhdpi/ic_star_grey600_24dp.png
Binary files differ
diff --git a/core/src/main/res/drawable-xxxhdpi/ic_star_white_24dp.png b/core/src/main/res/drawable-xxxhdpi/ic_star_white_24dp.png
new file mode 100644
index 000000000..ba29292b0
--- /dev/null
+++ b/core/src/main/res/drawable-xxxhdpi/ic_star_white_24dp.png
Binary files differ
diff --git a/core/src/main/res/values/arrays.xml b/core/src/main/res/values/arrays.xml
index 341a7e520..80e3d57f5 100644
--- a/core/src/main/res/values/arrays.xml
+++ b/core/src/main/res/values/arrays.xml
@@ -75,15 +75,15 @@
</string-array>
<string-array name="playback_speed_values">
- <item>0.5</item>
- <item>0.6</item>
- <item>0.7</item>
+ <item>0.50</item>
+ <item>0.60</item>
+ <item>0.70</item>
<item>0.75</item>
- <item>0.8</item>
+ <item>0.80</item>
<item>0.85</item>
- <item>0.9</item>
+ <item>0.90</item>
<item>0.95</item>
- <item>1.0</item>
+ <item>1.00</item>
<item>1.05</item>
<item>1.10</item>
<item>1.15</item>
diff --git a/core/src/main/res/values/attrs.xml b/core/src/main/res/values/attrs.xml
index 4e444c990..7adf8295b 100644
--- a/core/src/main/res/values/attrs.xml
+++ b/core/src/main/res/values/attrs.xml
@@ -13,7 +13,6 @@
<attr name="content_discard" format="reference"/>
<attr name="content_new" format="reference"/>
<attr name="feed" format="reference"/>
- <attr name="device_access_time" format="reference"/>
<attr name="location_web_site" format="reference"/>
<attr name="navigation_accept" format="reference"/>
<attr name="navigation_cancel" format="reference"/>
@@ -37,15 +36,20 @@
<attr name="av_pause_big" format="reference"/>
<attr name="av_ff_big" format="reference"/>
<attr name="av_rew_big" format="reference"/>
+ <attr name="av_skip_big" format="reference"/>
<attr name="ic_settings" format="reference"/>
<attr name="ic_lock_open" format="reference"/>
<attr name="ic_lock_closed" format="reference"/>
<attr name="ic_filter" format="reference"/>
<attr name="progressBarTheme" format="reference"/>
+ <attr name="ic_fav" format="reference"/>
+ <attr name="ic_unfav" format="reference"/>
+ <attr name="ic_sleep" format="reference"/>
+ <attr name="ic_sleep_off" format="reference"/>
<!-- Used in itemdescription -->
<attr name="non_transparent_background" format="reference"/>
<attr name="overlay_background" format="color"/>
<attr name="nav_drawer_background" format="color"/>
-</resources> \ No newline at end of file
+</resources>
diff --git a/core/src/main/res/values/dimens.xml b/core/src/main/res/values/dimens.xml
index aa57e3051..9aafd14e3 100644
--- a/core/src/main/res/values/dimens.xml
+++ b/core/src/main/res/values/dimens.xml
@@ -33,6 +33,6 @@
<dimen name="listitem_icon_leftpadding">16dp</dimen>
<dimen name="listitem_icon_rightpadding">16dp</dimen>
- <dimen name="audioplayer_playercontrols_length">64dp</dimen>
+ <dimen name="audioplayer_playercontrols_length">48dp</dimen>
-</resources> \ No newline at end of file
+</resources>
diff --git a/core/src/main/res/values/strings.xml b/core/src/main/res/values/strings.xml
index 443a1a8a8..fa54ad22e 100644
--- a/core/src/main/res/values/strings.xml
+++ b/core/src/main/res/values/strings.xml
@@ -148,7 +148,9 @@
<string name="added_to_queue_label">Added to Queue</string>
<string name="remove_from_queue_label">Remove from Queue</string>
<string name="add_to_favorite_label">Add to Favorites</string>
+ <string name="added_to_favorites">Added to Favorites</string>
<string name="remove_from_favorite_label">Remove from Favorites</string>
+ <string name="removed_from_favorites">Removed from Favorites</string>
<string name="visit_website_label">Visit Website</string>
<string name="support_label">Flattr this</string>
<string name="enqueue_all_new">Enqueue all</string>
@@ -268,6 +270,7 @@
<!-- Empty list labels -->
<string name="no_items_label">There are no items in this list.</string>
<string name="no_feeds_label">You haven\'t subscribed to any feeds yet.</string>
+ <string name="no_chapters_label">This episode has no chapters.</string>
<!-- Preferences -->
<string name="other_pref">Other</string>
@@ -555,4 +558,14 @@
<string name="rating_later_label">Remind me later</string>
<string name="rating_now_label">Sure, let\'s do this!</string>
+ <!-- Audio controls -->
+ <string name="audio_controls">Audio controls</string>
+ <string name="playback_speed">Playback Speed</string>
+ <string name="volume">Volume</string>
+ <string name="left_short">L</string>
+ <string name="right_short">R</string>
+ <string name="audio_effects">Audio Effects</string>
+ <string name="stereo_to_mono">Downmix: Stereo to mono</string>
+ <string name="sonic_only">Sonic only</string>
+
</resources>
diff --git a/core/src/main/res/values/styles.xml b/core/src/main/res/values/styles.xml
index 1f73fbba2..45e1206b7 100644
--- a/core/src/main/res/values/styles.xml
+++ b/core/src/main/res/values/styles.xml
@@ -18,7 +18,6 @@
<item name="attr/av_rewind">@drawable/ic_fast_rewind_grey600_24dp</item>
<item name="attr/content_discard">@drawable/ic_delete_grey600_24dp</item>
<item name="attr/content_new">@drawable/ic_add_grey600_24dp</item>
- <item name="attr/device_access_time">@drawable/ic_timer_grey600_24dp</item>
<item name="attr/feed">@drawable/ic_feed_grey600_24dp</item>
<item name="attr/location_web_site">@drawable/ic_web_grey600_24dp</item>
<item name="attr/navigation_accept">@drawable/ic_done_grey600_24dp</item>
@@ -45,10 +44,16 @@
<item name="attr/av_pause_big">@drawable/ic_pause_grey600_36dp</item>
<item name="attr/av_ff_big">@drawable/ic_fast_forward_grey600_36dp</item>
<item name="attr/av_rew_big">@drawable/ic_fast_rewind_grey600_36dp</item>
+ <item name="attr/av_skip_big">@drawable/ic_skip_grey600_36dp</item>
+ <item name="attr/ic_fav">@drawable/ic_star_border_grey600_24dp</item>
+ <item name="attr/ic_unfav">@drawable/ic_star_grey600_24dp</item>
<item name="attr/ic_settings">@drawable/ic_settings_grey600_24dp</item>
<item name="attr/ic_lock_open">@drawable/ic_lock_open_grey600_24dp</item>
<item name="attr/ic_lock_closed">@drawable/ic_lock_closed_grey600_24dp</item>
<item name="attr/ic_filter">@drawable/ic_filter_grey600_24dp</item>
+ <item name="attr/ic_sleep">@drawable/ic_sleep_grey600_24dp</item>
+ <item name="attr/ic_sleep_off">@drawable/ic_sleep_off_grey600_24dp</item>
+
</style>
<style name="Theme.AntennaPod.Dark" parent="Theme.AppCompat">
@@ -67,7 +72,6 @@
<item name="attr/av_rewind">@drawable/ic_fast_rewind_white_24dp</item>
<item name="attr/content_discard">@drawable/ic_delete_white_24dp</item>
<item name="attr/content_new">@drawable/ic_add_white_24dp</item>
- <item name="attr/device_access_time">@drawable/ic_timer_white_24dp</item>
<item name="attr/feed">@drawable/ic_feed_white_24dp</item>
<item name="attr/location_web_site">@drawable/ic_web_white_24dp</item>
<item name="attr/navigation_accept">@drawable/ic_done_white_24dp</item>
@@ -94,10 +98,15 @@
<item name="attr/av_pause_big">@drawable/ic_pause_white_36dp</item>
<item name="attr/av_ff_big">@drawable/ic_fast_forward_white_36dp</item>
<item name="attr/av_rew_big">@drawable/ic_fast_rewind_white_36dp</item>
+ <item name="attr/av_skip_big">@drawable/ic_skip_white_36dp</item>
+ <item name="attr/ic_fav">@drawable/ic_star_border_white_24dp</item>
+ <item name="attr/ic_unfav">@drawable/ic_star_white_24dp</item>
<item name="attr/ic_settings">@drawable/ic_settings_white_24dp</item>
<item name="attr/ic_lock_open">@drawable/ic_lock_open_white_24dp</item>
<item name="attr/ic_lock_closed">@drawable/ic_lock_closed_white_24dp</item>
<item name="attr/ic_filter">@drawable/ic_filter_white_24dp</item>
+ <item name="attr/ic_sleep">@drawable/ic_sleep_white_24dp</item>
+ <item name="attr/ic_sleep_off">@drawable/ic_sleep_off_white_24dp</item>
</style>
<style name="Theme.AntennaPod.Light.NoTitle" parent="Theme.AppCompat.Light.NoActionBar">
@@ -118,7 +127,6 @@
<item name="attr/av_rewind">@drawable/ic_fast_rewind_grey600_24dp</item>
<item name="attr/content_discard">@drawable/ic_delete_grey600_24dp</item>
<item name="attr/content_new">@drawable/ic_add_grey600_24dp</item>
- <item name="attr/device_access_time">@drawable/ic_timer_grey600_24dp</item>
<item name="attr/feed">@drawable/ic_feed_grey600_24dp</item>
<item name="attr/location_web_site">@drawable/ic_web_grey600_24dp</item>
<item name="attr/navigation_accept">@drawable/ic_done_grey600_24dp</item>
@@ -145,10 +153,15 @@
<item name="attr/av_pause_big">@drawable/ic_pause_grey600_36dp</item>
<item name="attr/av_ff_big">@drawable/ic_fast_forward_grey600_36dp</item>
<item name="attr/av_rew_big">@drawable/ic_fast_rewind_grey600_36dp</item>
+ <item name="attr/av_skip_big">@drawable/ic_skip_grey600_36dp</item>
+ <item name="attr/ic_fav">@drawable/ic_star_border_grey600_24dp</item>
+ <item name="attr/ic_unfav">@drawable/ic_star_grey600_24dp</item>
<item name="attr/ic_settings">@drawable/ic_settings_grey600_24dp</item>
<item name="attr/ic_lock_open">@drawable/ic_lock_open_grey600_24dp</item>
<item name="attr/ic_lock_closed">@drawable/ic_lock_closed_grey600_24dp</item>
<item name="attr/ic_filter">@drawable/ic_filter_grey600_24dp</item>
+ <item name="attr/ic_sleep">@drawable/ic_sleep_grey600_24dp</item>
+ <item name="attr/ic_sleep_off">@drawable/ic_sleep_off_grey600_24dp</item>
</style>
<style name="Theme.AntennaPod.Dark.NoTitle" parent="Theme.AppCompat.NoActionBar">
@@ -168,7 +181,6 @@
<item name="attr/av_rewind">@drawable/ic_fast_rewind_white_24dp</item>
<item name="attr/content_discard">@drawable/ic_delete_white_24dp</item>
<item name="attr/content_new">@drawable/ic_add_white_24dp</item>
- <item name="attr/device_access_time">@drawable/ic_timer_white_24dp</item>
<item name="attr/feed">@drawable/ic_feed_white_24dp</item>
<item name="attr/location_web_site">@drawable/ic_web_white_24dp</item>
<item name="attr/navigation_accept">@drawable/ic_done_white_24dp</item>
@@ -195,10 +207,15 @@
<item name="attr/av_pause_big">@drawable/ic_pause_white_36dp</item>
<item name="attr/av_ff_big">@drawable/ic_fast_forward_white_36dp</item>
<item name="attr/av_rew_big">@drawable/ic_fast_rewind_white_36dp</item>
+ <item name="attr/av_skip_big">@drawable/ic_skip_white_36dp</item>
+ <item name="attr/ic_fav">@drawable/ic_star_border_white_24dp</item>
+ <item name="attr/ic_unfav">@drawable/ic_star_white_24dp</item>
<item name="attr/ic_settings">@drawable/ic_settings_white_24dp</item>
<item name="attr/ic_lock_open">@drawable/ic_lock_open_white_24dp</item>
<item name="attr/ic_lock_closed">@drawable/ic_lock_closed_white_24dp</item>
<item name="attr/ic_filter">@drawable/ic_filter_white_24dp</item>
+ <item name="attr/ic_sleep">@drawable/ic_sleep_white_24dp</item>
+ <item name="attr/ic_sleep_off">@drawable/ic_sleep_off_white_24dp</item>
</style>
<style name="Theme.AntennaPod.VideoPlayer" parent="@style/Theme.AntennaPod.Dark">