From 99d7992dc8af74ba8937dfd4cef2e78bacb8b9c2 Mon Sep 17 00:00:00 2001 From: Martin Fietz Date: Mon, 2 Nov 2015 15:24:18 +0100 Subject: Audio player redesign Sleep timer and audio effects (e.g. balance) accessible from actionbar, fragment pager --- .../core/preferences/UserPreferences.java | 47 ++++++++++- .../core/service/playback/PlaybackService.java | 28 +++++-- .../playback/PlaybackServiceMediaPlayer.java | 58 ++++++++----- .../antennapod/core/util/playback/AudioPlayer.java | 5 ++ .../antennapod/core/util/playback/IPlayer.java | 4 + .../core/util/playback/PlaybackController.java | 90 ++++++++++++--------- .../antennapod/core/util/playback/Timeline.java | 2 +- .../antennapod/core/util/playback/VideoPlayer.java | 11 +++ .../res/drawable-hdpi/ic_skip_grey600_36dp.png | Bin 0 -> 302 bytes .../main/res/drawable-hdpi/ic_skip_white_36dp.png | Bin 0 -> 304 bytes .../res/drawable-hdpi/ic_sleep_grey600_24dp.png | Bin 0 -> 421 bytes .../drawable-hdpi/ic_sleep_off_grey600_24dp.png | Bin 0 -> 659 bytes .../res/drawable-hdpi/ic_sleep_off_white_24dp.png | Bin 0 -> 431 bytes .../main/res/drawable-hdpi/ic_sleep_white_24dp.png | Bin 0 -> 361 bytes .../drawable-hdpi/ic_star_border_grey600_24dp.png | Bin 0 -> 637 bytes .../drawable-hdpi/ic_star_border_white_24dp.png | Bin 0 -> 637 bytes .../res/drawable-hdpi/ic_star_grey600_24dp.png | Bin 0 -> 460 bytes .../main/res/drawable-hdpi/ic_star_white_24dp.png | Bin 0 -> 454 bytes .../res/drawable-mdpi/ic_skip_grey600_36dp.png | Bin 0 -> 218 bytes .../main/res/drawable-mdpi/ic_skip_white_36dp.png | Bin 0 -> 216 bytes .../res/drawable-mdpi/ic_sleep_grey600_24dp.png | Bin 0 -> 336 bytes .../drawable-mdpi/ic_sleep_off_grey600_24dp.png | Bin 0 -> 472 bytes .../res/drawable-mdpi/ic_sleep_off_white_24dp.png | Bin 0 -> 323 bytes .../main/res/drawable-mdpi/ic_sleep_white_24dp.png | Bin 0 -> 252 bytes .../drawable-mdpi/ic_star_border_grey600_24dp.png | Bin 0 -> 410 bytes .../drawable-mdpi/ic_star_border_white_24dp.png | Bin 0 -> 410 bytes .../res/drawable-mdpi/ic_star_grey600_24dp.png | Bin 0 -> 307 bytes .../main/res/drawable-mdpi/ic_star_white_24dp.png | Bin 0 -> 302 bytes .../res/drawable-xhdpi/ic_skip_grey600_36dp.png | Bin 0 -> 364 bytes .../main/res/drawable-xhdpi/ic_skip_white_36dp.png | Bin 0 -> 368 bytes .../res/drawable-xhdpi/ic_sleep_grey600_24dp.png | Bin 0 -> 494 bytes .../drawable-xhdpi/ic_sleep_off_grey600_24dp.png | Bin 0 -> 769 bytes .../res/drawable-xhdpi/ic_sleep_off_white_24dp.png | Bin 0 -> 486 bytes .../res/drawable-xhdpi/ic_sleep_white_24dp.png | Bin 0 -> 367 bytes .../drawable-xhdpi/ic_star_border_grey600_24dp.png | Bin 0 -> 828 bytes .../drawable-xhdpi/ic_star_border_white_24dp.png | Bin 0 -> 821 bytes .../res/drawable-xhdpi/ic_star_grey600_24dp.png | Bin 0 -> 593 bytes .../main/res/drawable-xhdpi/ic_star_white_24dp.png | Bin 0 -> 582 bytes .../res/drawable-xxhdpi/ic_skip_grey600_36dp.png | Bin 0 -> 533 bytes .../res/drawable-xxhdpi/ic_skip_white_36dp.png | Bin 0 -> 543 bytes .../res/drawable-xxhdpi/ic_sleep_grey600_24dp.png | Bin 0 -> 737 bytes .../drawable-xxhdpi/ic_sleep_off_grey600_24dp.png | Bin 0 -> 1113 bytes .../drawable-xxhdpi/ic_sleep_off_white_24dp.png | Bin 0 -> 664 bytes .../res/drawable-xxhdpi/ic_sleep_white_24dp.png | Bin 0 -> 509 bytes .../ic_star_border_grey600_24dp.png | Bin 0 -> 1227 bytes .../drawable-xxhdpi/ic_star_border_white_24dp.png | Bin 0 -> 1222 bytes .../res/drawable-xxhdpi/ic_star_grey600_24dp.png | Bin 0 -> 877 bytes .../res/drawable-xxhdpi/ic_star_white_24dp.png | Bin 0 -> 870 bytes .../res/drawable-xxxhdpi/ic_skip_grey600_36dp.png | Bin 0 -> 737 bytes .../res/drawable-xxxhdpi/ic_skip_white_36dp.png | Bin 0 -> 749 bytes .../res/drawable-xxxhdpi/ic_sleep_grey600_24dp.png | Bin 0 -> 955 bytes .../drawable-xxxhdpi/ic_sleep_off_grey600_24dp.png | Bin 0 -> 1514 bytes .../drawable-xxxhdpi/ic_sleep_off_white_24dp.png | Bin 0 -> 882 bytes .../res/drawable-xxxhdpi/ic_sleep_white_24dp.png | Bin 0 -> 647 bytes .../ic_star_border_grey600_24dp.png | Bin 0 -> 1675 bytes .../drawable-xxxhdpi/ic_star_border_white_24dp.png | Bin 0 -> 1684 bytes .../res/drawable-xxxhdpi/ic_star_grey600_24dp.png | Bin 0 -> 1179 bytes .../res/drawable-xxxhdpi/ic_star_white_24dp.png | Bin 0 -> 1183 bytes core/src/main/res/values/arrays.xml | 12 +-- core/src/main/res/values/attrs.xml | 8 +- core/src/main/res/values/dimens.xml | 4 +- core/src/main/res/values/strings.xml | 13 +++ core/src/main/res/values/styles.xml | 25 +++++- 63 files changed, 230 insertions(+), 77 deletions(-) create mode 100644 core/src/main/res/drawable-hdpi/ic_skip_grey600_36dp.png create mode 100644 core/src/main/res/drawable-hdpi/ic_skip_white_36dp.png create mode 100644 core/src/main/res/drawable-hdpi/ic_sleep_grey600_24dp.png create mode 100644 core/src/main/res/drawable-hdpi/ic_sleep_off_grey600_24dp.png create mode 100644 core/src/main/res/drawable-hdpi/ic_sleep_off_white_24dp.png create mode 100644 core/src/main/res/drawable-hdpi/ic_sleep_white_24dp.png create mode 100644 core/src/main/res/drawable-hdpi/ic_star_border_grey600_24dp.png create mode 100644 core/src/main/res/drawable-hdpi/ic_star_border_white_24dp.png create mode 100644 core/src/main/res/drawable-hdpi/ic_star_grey600_24dp.png create mode 100644 core/src/main/res/drawable-hdpi/ic_star_white_24dp.png create mode 100644 core/src/main/res/drawable-mdpi/ic_skip_grey600_36dp.png create mode 100644 core/src/main/res/drawable-mdpi/ic_skip_white_36dp.png create mode 100644 core/src/main/res/drawable-mdpi/ic_sleep_grey600_24dp.png create mode 100644 core/src/main/res/drawable-mdpi/ic_sleep_off_grey600_24dp.png create mode 100644 core/src/main/res/drawable-mdpi/ic_sleep_off_white_24dp.png create mode 100644 core/src/main/res/drawable-mdpi/ic_sleep_white_24dp.png create mode 100644 core/src/main/res/drawable-mdpi/ic_star_border_grey600_24dp.png create mode 100644 core/src/main/res/drawable-mdpi/ic_star_border_white_24dp.png create mode 100644 core/src/main/res/drawable-mdpi/ic_star_grey600_24dp.png create mode 100644 core/src/main/res/drawable-mdpi/ic_star_white_24dp.png create mode 100644 core/src/main/res/drawable-xhdpi/ic_skip_grey600_36dp.png create mode 100644 core/src/main/res/drawable-xhdpi/ic_skip_white_36dp.png create mode 100644 core/src/main/res/drawable-xhdpi/ic_sleep_grey600_24dp.png create mode 100644 core/src/main/res/drawable-xhdpi/ic_sleep_off_grey600_24dp.png create mode 100644 core/src/main/res/drawable-xhdpi/ic_sleep_off_white_24dp.png create mode 100644 core/src/main/res/drawable-xhdpi/ic_sleep_white_24dp.png create mode 100644 core/src/main/res/drawable-xhdpi/ic_star_border_grey600_24dp.png create mode 100644 core/src/main/res/drawable-xhdpi/ic_star_border_white_24dp.png create mode 100644 core/src/main/res/drawable-xhdpi/ic_star_grey600_24dp.png create mode 100644 core/src/main/res/drawable-xhdpi/ic_star_white_24dp.png create mode 100644 core/src/main/res/drawable-xxhdpi/ic_skip_grey600_36dp.png create mode 100644 core/src/main/res/drawable-xxhdpi/ic_skip_white_36dp.png create mode 100644 core/src/main/res/drawable-xxhdpi/ic_sleep_grey600_24dp.png create mode 100644 core/src/main/res/drawable-xxhdpi/ic_sleep_off_grey600_24dp.png create mode 100644 core/src/main/res/drawable-xxhdpi/ic_sleep_off_white_24dp.png create mode 100644 core/src/main/res/drawable-xxhdpi/ic_sleep_white_24dp.png create mode 100644 core/src/main/res/drawable-xxhdpi/ic_star_border_grey600_24dp.png create mode 100644 core/src/main/res/drawable-xxhdpi/ic_star_border_white_24dp.png create mode 100644 core/src/main/res/drawable-xxhdpi/ic_star_grey600_24dp.png create mode 100644 core/src/main/res/drawable-xxhdpi/ic_star_white_24dp.png create mode 100644 core/src/main/res/drawable-xxxhdpi/ic_skip_grey600_36dp.png create mode 100644 core/src/main/res/drawable-xxxhdpi/ic_skip_white_36dp.png create mode 100644 core/src/main/res/drawable-xxxhdpi/ic_sleep_grey600_24dp.png create mode 100644 core/src/main/res/drawable-xxxhdpi/ic_sleep_off_grey600_24dp.png create mode 100644 core/src/main/res/drawable-xxxhdpi/ic_sleep_off_white_24dp.png create mode 100644 core/src/main/res/drawable-xxxhdpi/ic_sleep_white_24dp.png create mode 100644 core/src/main/res/drawable-xxxhdpi/ic_star_border_grey600_24dp.png create mode 100644 core/src/main/res/drawable-xxxhdpi/ic_star_border_white_24dp.png create mode 100644 core/src/main/res/drawable-xxxhdpi/ic_star_grey600_24dp.png create mode 100644 core/src/main/res/drawable-xxxhdpi/ic_star_white_24dp.png (limited to 'core/src/main') 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 speedList = new LinkedList(); + List 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("

")) { shownotes = shownotes.replace("\n", "
"); } 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 @@ -16,6 +16,11 @@ public class VideoPlayer extends MediaPlayer implements IPlayer { return false; } + @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 Binary files /dev/null and b/core/src/main/res/drawable-hdpi/ic_skip_grey600_36dp.png 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 Binary files /dev/null and b/core/src/main/res/drawable-hdpi/ic_skip_white_36dp.png 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 Binary files /dev/null and b/core/src/main/res/drawable-hdpi/ic_sleep_grey600_24dp.png 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 Binary files /dev/null and b/core/src/main/res/drawable-hdpi/ic_sleep_off_grey600_24dp.png 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 Binary files /dev/null and b/core/src/main/res/drawable-hdpi/ic_sleep_off_white_24dp.png 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 Binary files /dev/null and b/core/src/main/res/drawable-hdpi/ic_sleep_white_24dp.png 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 Binary files /dev/null and b/core/src/main/res/drawable-hdpi/ic_star_border_grey600_24dp.png 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 Binary files /dev/null and b/core/src/main/res/drawable-hdpi/ic_star_border_white_24dp.png 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 Binary files /dev/null and b/core/src/main/res/drawable-hdpi/ic_star_grey600_24dp.png 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 Binary files /dev/null and b/core/src/main/res/drawable-hdpi/ic_star_white_24dp.png 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 Binary files /dev/null and b/core/src/main/res/drawable-mdpi/ic_skip_grey600_36dp.png 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 Binary files /dev/null and b/core/src/main/res/drawable-mdpi/ic_skip_white_36dp.png 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 Binary files /dev/null and b/core/src/main/res/drawable-mdpi/ic_sleep_grey600_24dp.png 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 Binary files /dev/null and b/core/src/main/res/drawable-mdpi/ic_sleep_off_grey600_24dp.png 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 Binary files /dev/null and b/core/src/main/res/drawable-mdpi/ic_sleep_off_white_24dp.png 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 Binary files /dev/null and b/core/src/main/res/drawable-mdpi/ic_sleep_white_24dp.png 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 Binary files /dev/null and b/core/src/main/res/drawable-mdpi/ic_star_border_grey600_24dp.png 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 Binary files /dev/null and b/core/src/main/res/drawable-mdpi/ic_star_border_white_24dp.png 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 Binary files /dev/null and b/core/src/main/res/drawable-mdpi/ic_star_grey600_24dp.png 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 Binary files /dev/null and b/core/src/main/res/drawable-mdpi/ic_star_white_24dp.png 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 Binary files /dev/null and b/core/src/main/res/drawable-xhdpi/ic_skip_grey600_36dp.png 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 Binary files /dev/null and b/core/src/main/res/drawable-xhdpi/ic_skip_white_36dp.png 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 Binary files /dev/null and b/core/src/main/res/drawable-xhdpi/ic_sleep_grey600_24dp.png 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 Binary files /dev/null and b/core/src/main/res/drawable-xhdpi/ic_sleep_off_grey600_24dp.png 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 Binary files /dev/null and b/core/src/main/res/drawable-xhdpi/ic_sleep_off_white_24dp.png 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 Binary files /dev/null and b/core/src/main/res/drawable-xhdpi/ic_sleep_white_24dp.png 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 Binary files /dev/null and b/core/src/main/res/drawable-xhdpi/ic_star_border_grey600_24dp.png 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 Binary files /dev/null and b/core/src/main/res/drawable-xhdpi/ic_star_border_white_24dp.png 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 Binary files /dev/null and b/core/src/main/res/drawable-xhdpi/ic_star_grey600_24dp.png 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 Binary files /dev/null and b/core/src/main/res/drawable-xhdpi/ic_star_white_24dp.png 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 Binary files /dev/null and b/core/src/main/res/drawable-xxhdpi/ic_skip_grey600_36dp.png 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 Binary files /dev/null and b/core/src/main/res/drawable-xxhdpi/ic_skip_white_36dp.png 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 Binary files /dev/null and b/core/src/main/res/drawable-xxhdpi/ic_sleep_grey600_24dp.png 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 Binary files /dev/null and b/core/src/main/res/drawable-xxhdpi/ic_sleep_off_grey600_24dp.png 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 Binary files /dev/null and b/core/src/main/res/drawable-xxhdpi/ic_sleep_off_white_24dp.png 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 Binary files /dev/null and b/core/src/main/res/drawable-xxhdpi/ic_sleep_white_24dp.png 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 Binary files /dev/null and b/core/src/main/res/drawable-xxhdpi/ic_star_border_grey600_24dp.png 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 Binary files /dev/null and b/core/src/main/res/drawable-xxhdpi/ic_star_border_white_24dp.png 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 Binary files /dev/null and b/core/src/main/res/drawable-xxhdpi/ic_star_grey600_24dp.png 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 Binary files /dev/null and b/core/src/main/res/drawable-xxhdpi/ic_star_white_24dp.png 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 Binary files /dev/null and b/core/src/main/res/drawable-xxxhdpi/ic_skip_grey600_36dp.png 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 Binary files /dev/null and b/core/src/main/res/drawable-xxxhdpi/ic_skip_white_36dp.png 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 Binary files /dev/null and b/core/src/main/res/drawable-xxxhdpi/ic_sleep_grey600_24dp.png 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 Binary files /dev/null and b/core/src/main/res/drawable-xxxhdpi/ic_sleep_off_grey600_24dp.png 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 Binary files /dev/null and b/core/src/main/res/drawable-xxxhdpi/ic_sleep_off_white_24dp.png 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 Binary files /dev/null and b/core/src/main/res/drawable-xxxhdpi/ic_sleep_white_24dp.png 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 Binary files /dev/null and b/core/src/main/res/drawable-xxxhdpi/ic_star_border_grey600_24dp.png 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 Binary files /dev/null and b/core/src/main/res/drawable-xxxhdpi/ic_star_border_white_24dp.png 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 Binary files /dev/null and b/core/src/main/res/drawable-xxxhdpi/ic_star_grey600_24dp.png 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 Binary files /dev/null and b/core/src/main/res/drawable-xxxhdpi/ic_star_white_24dp.png 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 @@ - 0.5 - 0.6 - 0.7 + 0.50 + 0.60 + 0.70 0.75 - 0.8 + 0.80 0.85 - 0.9 + 0.90 0.95 - 1.0 + 1.00 1.05 1.10 1.15 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 @@ - @@ -37,15 +36,20 @@ + + + + + - \ No newline at end of file + 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 @@ 16dp 16dp - 64dp + 48dp - \ No newline at end of file + 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 @@ Added to Queue Remove from Queue Add to Favorites + Added to Favorites Remove from Favorites + Removed from Favorites Visit Website Flattr this Enqueue all @@ -268,6 +270,7 @@ There are no items in this list. You haven\'t subscribed to any feeds yet. + This episode has no chapters. Other @@ -555,4 +558,14 @@ Remind me later Sure, let\'s do this! + + Audio controls + Playback Speed + Volume + L + R + Audio Effects + Downmix: Stereo to mono + Sonic only + 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 @@ @drawable/ic_fast_rewind_grey600_24dp @drawable/ic_delete_grey600_24dp @drawable/ic_add_grey600_24dp - @drawable/ic_timer_grey600_24dp @drawable/ic_feed_grey600_24dp @drawable/ic_web_grey600_24dp @drawable/ic_done_grey600_24dp @@ -45,10 +44,16 @@ @drawable/ic_pause_grey600_36dp @drawable/ic_fast_forward_grey600_36dp @drawable/ic_fast_rewind_grey600_36dp + @drawable/ic_skip_grey600_36dp + @drawable/ic_star_border_grey600_24dp + @drawable/ic_star_grey600_24dp @drawable/ic_settings_grey600_24dp @drawable/ic_lock_open_grey600_24dp @drawable/ic_lock_closed_grey600_24dp @drawable/ic_filter_grey600_24dp + @drawable/ic_sleep_grey600_24dp + @drawable/ic_sleep_off_grey600_24dp +