From 8e2ee0646bfe61361081c584b9fcb49f1edb946f Mon Sep 17 00:00:00 2001 From: Scott Jackson Date: Wed, 6 Apr 2016 16:59:30 -0700 Subject: #669 On Audio Books/Podcasts replace back/forward with rewind/fast forward --- .../dsub/activity/SubsonicFragmentActivity.java | 58 +++++++++++++++++- .../dsub/fragments/NowPlayingFragment.java | 65 ++++++++++++++++----- .../daneren2005/dsub/service/DownloadService.java | 21 +++++++ .../service/DownloadServiceLifecycleSupport.java | 6 ++ .../daneren2005/dsub/util/Notifications.java | 52 +++++++++++++++-- .../res/drawable-hdpi/media_fastforward_dark.png | Bin 0 -> 1123 bytes .../res/drawable-hdpi/media_fastforward_light.png | Bin 0 -> 1309 bytes .../main/res/drawable-hdpi/media_rewind_dark.png | Bin 0 -> 1172 bytes .../main/res/drawable-hdpi/media_rewind_light.png | Bin 0 -> 1286 bytes .../res/drawable-mdpi/media_fastforward_dark.png | Bin 0 -> 654 bytes .../res/drawable-mdpi/media_fastforward_light.png | Bin 0 -> 727 bytes .../main/res/drawable-mdpi/media_rewind_dark.png | Bin 0 -> 660 bytes .../main/res/drawable-mdpi/media_rewind_light.png | Bin 0 -> 707 bytes .../res/drawable-v21/notification_fastforward.xml | 4 ++ .../main/res/drawable-v21/notification_rewind.xml | 4 ++ .../res/drawable-xhdpi/media_fastforward_dark.png | Bin 0 -> 1622 bytes .../res/drawable-xhdpi/media_fastforward_light.png | Bin 0 -> 1847 bytes .../main/res/drawable-xhdpi/media_rewind_dark.png | Bin 0 -> 1542 bytes .../main/res/drawable-xhdpi/media_rewind_light.png | Bin 0 -> 1697 bytes .../res/drawable-xxhdpi/media_fastforward_dark.png | Bin 0 -> 2837 bytes .../drawable-xxhdpi/media_fastforward_light.png | Bin 0 -> 3139 bytes .../main/res/drawable-xxhdpi/media_rewind_dark.png | Bin 0 -> 3007 bytes .../res/drawable-xxhdpi/media_rewind_light.png | Bin 0 -> 3243 bytes .../drawable-xxxhdpi/media_fastforward_dark.png | Bin 0 -> 4784 bytes .../drawable-xxxhdpi/media_fastforward_light.png | Bin 0 -> 5304 bytes .../res/drawable-xxxhdpi/media_rewind_dark.png | Bin 0 -> 4993 bytes .../res/drawable-xxxhdpi/media_rewind_light.png | Bin 0 -> 5407 bytes .../main/res/drawable/notification_fastforward.xml | 4 ++ app/src/main/res/drawable/notification_rewind.xml | 4 ++ .../main/res/layout/abstract_fragment_activity.xml | 14 +++++ app/src/main/res/layout/download_media_buttons.xml | 16 +++++ app/src/main/res/values/attrs.xml | 4 ++ app/src/main/res/values/themes.xml | 10 ++++ 33 files changed, 239 insertions(+), 23 deletions(-) create mode 100644 app/src/main/res/drawable-hdpi/media_fastforward_dark.png create mode 100644 app/src/main/res/drawable-hdpi/media_fastforward_light.png create mode 100644 app/src/main/res/drawable-hdpi/media_rewind_dark.png create mode 100644 app/src/main/res/drawable-hdpi/media_rewind_light.png create mode 100644 app/src/main/res/drawable-mdpi/media_fastforward_dark.png create mode 100644 app/src/main/res/drawable-mdpi/media_fastforward_light.png create mode 100644 app/src/main/res/drawable-mdpi/media_rewind_dark.png create mode 100644 app/src/main/res/drawable-mdpi/media_rewind_light.png create mode 100644 app/src/main/res/drawable-v21/notification_fastforward.xml create mode 100644 app/src/main/res/drawable-v21/notification_rewind.xml create mode 100644 app/src/main/res/drawable-xhdpi/media_fastforward_dark.png create mode 100644 app/src/main/res/drawable-xhdpi/media_fastforward_light.png create mode 100644 app/src/main/res/drawable-xhdpi/media_rewind_dark.png create mode 100644 app/src/main/res/drawable-xhdpi/media_rewind_light.png create mode 100644 app/src/main/res/drawable-xxhdpi/media_fastforward_dark.png create mode 100644 app/src/main/res/drawable-xxhdpi/media_fastforward_light.png create mode 100644 app/src/main/res/drawable-xxhdpi/media_rewind_dark.png create mode 100644 app/src/main/res/drawable-xxhdpi/media_rewind_light.png create mode 100644 app/src/main/res/drawable-xxxhdpi/media_fastforward_dark.png create mode 100644 app/src/main/res/drawable-xxxhdpi/media_fastforward_light.png create mode 100644 app/src/main/res/drawable-xxxhdpi/media_rewind_dark.png create mode 100644 app/src/main/res/drawable-xxxhdpi/media_rewind_light.png create mode 100644 app/src/main/res/drawable/notification_fastforward.xml create mode 100644 app/src/main/res/drawable/notification_rewind.xml diff --git a/app/src/main/java/github/daneren2005/dsub/activity/SubsonicFragmentActivity.java b/app/src/main/java/github/daneren2005/dsub/activity/SubsonicFragmentActivity.java index 487ad83c..8273f61c 100644 --- a/app/src/main/java/github/daneren2005/dsub/activity/SubsonicFragmentActivity.java +++ b/app/src/main/java/github/daneren2005/dsub/activity/SubsonicFragmentActivity.java @@ -107,6 +107,10 @@ public class SubsonicFragmentActivity extends SubsonicActivity implements Downlo private long lastBackPressTime = 0; private DownloadFile currentPlaying; private PlayerState currentState; + private ImageButton previousButton; + private ImageButton nextButton; + private ImageButton rewindButton; + private ImageButton fastforwardButton; @Override public void onCreate(Bundle savedInstanceState) { @@ -267,7 +271,25 @@ public class SubsonicFragmentActivity extends SubsonicActivity implements Downlo trans.commit(); } - ImageButton previousButton = (ImageButton) findViewById(R.id.download_previous); + rewindButton = (ImageButton) findViewById(R.id.download_rewind); + rewindButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + new SilentBackgroundTask(SubsonicFragmentActivity.this) { + @Override + protected Void doInBackground() throws Throwable { + if (getDownloadService() == null) { + return null; + } + + getDownloadService().rewind(); + return null; + } + }.execute(); + } + }); + + previousButton = (ImageButton) findViewById(R.id.download_previous); previousButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { @@ -305,7 +327,7 @@ public class SubsonicFragmentActivity extends SubsonicActivity implements Downlo } }); - ImageButton nextButton = (ImageButton) findViewById(R.id.download_next); + nextButton = (ImageButton) findViewById(R.id.download_next); nextButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { @@ -322,6 +344,24 @@ public class SubsonicFragmentActivity extends SubsonicActivity implements Downlo }.execute(); } }); + + fastforwardButton = (ImageButton) findViewById(R.id.download_fastforward); + fastforwardButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + new SilentBackgroundTask(SubsonicFragmentActivity.this) { + @Override + protected Void doInBackground() throws Throwable { + if (getDownloadService() == null) { + return null; + } + + getDownloadService().fastForward(); + return null; + } + }.execute(); + } + }); } @Override @@ -875,6 +915,20 @@ public class SubsonicFragmentActivity extends SubsonicActivity implements Downlo } getImageLoader().loadImage(coverArtView, song, false, height, false); } + + if(currentPlaying != null && currentPlaying.getSong() != null && (currentPlaying.getSong().isPodcast() || currentPlaying.getSong().isAudioBook())) { + previousButton.setVisibility(View.GONE); + nextButton.setVisibility(View.GONE); + + rewindButton.setVisibility(View.VISIBLE); + fastforwardButton.setVisibility(View.VISIBLE); + } else { + previousButton.setVisibility(View.VISIBLE); + nextButton.setVisibility(View.VISIBLE); + + rewindButton.setVisibility(View.GONE); + fastforwardButton.setVisibility(View.GONE); + } } @Override diff --git a/app/src/main/java/github/daneren2005/dsub/fragments/NowPlayingFragment.java b/app/src/main/java/github/daneren2005/dsub/fragments/NowPlayingFragment.java index 9bca096b..c8e99f51 100644 --- a/app/src/main/java/github/daneren2005/dsub/fragments/NowPlayingFragment.java +++ b/app/src/main/java/github/daneren2005/dsub/fragments/NowPlayingFragment.java @@ -88,7 +88,6 @@ import java.util.concurrent.ScheduledFuture; public class NowPlayingFragment extends SubsonicFragment implements OnGestureListener, SectionAdapter.OnItemClickedListener, OnSongChangedListener { private static final String TAG = NowPlayingFragment.class.getSimpleName(); private static final int PERCENTAGE_OF_SCREEN_FOR_SWIPE = 10; - private static final int INCREMENT_TIME = 5000; private static final int ACTION_PREVIOUS = 1; private static final int ACTION_NEXT = 2; @@ -106,6 +105,8 @@ public class NowPlayingFragment extends SubsonicFragment implements OnGestureLis private SeekBar progressBar; private AutoRepeatButton previousButton; private AutoRepeatButton nextButton; + private AutoRepeatButton rewindButton; + private AutoRepeatButton fastforwardButton; private View pauseButton; private View stopButton; private View startButton; @@ -172,6 +173,8 @@ public class NowPlayingFragment extends SubsonicFragment implements OnGestureLis progressBar = (SeekBar)rootView.findViewById(R.id.download_progress_bar); previousButton = (AutoRepeatButton)rootView.findViewById(R.id.download_previous); nextButton = (AutoRepeatButton)rootView.findViewById(R.id.download_next); + rewindButton = (AutoRepeatButton) rootView.findViewById(R.id.download_rewind); + fastforwardButton = (AutoRepeatButton) rootView.findViewById(R.id.download_fastforward); pauseButton =rootView.findViewById(R.id.download_pause); stopButton =rootView.findViewById(R.id.download_stop); startButton =rootView.findViewById(R.id.download_start); @@ -240,7 +243,7 @@ public class NowPlayingFragment extends SubsonicFragment implements OnGestureLis }); previousButton.setOnRepeatListener(new Runnable() { public void run() { - changeProgress(-INCREMENT_TIME); + changeProgress(true); } }); @@ -260,10 +263,35 @@ public class NowPlayingFragment extends SubsonicFragment implements OnGestureLis }); nextButton.setOnRepeatListener(new Runnable() { public void run() { - changeProgress(INCREMENT_TIME); + changeProgress(false); } }); + rewindButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + changeProgress(true); + } + }); + rewindButton.setOnRepeatListener(new Runnable() { + public void run() { + changeProgress(true); + } + }); + + fastforwardButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + changeProgress(false); + } + }); + fastforwardButton.setOnRepeatListener(new Runnable() { + public void run() { + changeProgress(false); + } + }); + + pauseButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { @@ -948,31 +976,22 @@ public class NowPlayingFragment extends SubsonicFragment implements OnGestureLis } } - private void changeProgress(final int ms) { + private void changeProgress(final boolean rewind) { final DownloadService downloadService = getDownloadService(); if(downloadService == null) { return; } new SilentBackgroundTask(context) { - boolean isJukeboxEnabled; - int msPlayed; - Integer duration; - PlayerState playerState; int seekTo; @Override protected Void doInBackground() throws Throwable { - msPlayed = Math.max(0, downloadService.getPlayerPosition()); - duration = downloadService.getPlayerDuration(); - playerState = getDownloadService().getPlayerState(); - int msTotal = duration == null ? 0 : duration; - if(msPlayed + ms > msTotal) { - seekTo = msTotal; + if(rewind) { + seekTo = downloadService.rewind(); } else { - seekTo = msPlayed + ms; + seekTo = downloadService.fastForward(); } - downloadService.seekTo(seekTo); return null; } @@ -1169,6 +1188,20 @@ public class NowPlayingFragment extends SubsonicFragment implements OnGestureLis public void onSongChanged(DownloadFile currentPlaying, int currentPlayingIndex) { this.currentPlaying = currentPlaying; setupSubtitle(currentPlayingIndex); + + if(currentPlaying != null && currentPlaying.getSong() != null && (currentPlaying.getSong().isPodcast() || currentPlaying.getSong().isAudioBook())) { + previousButton.setVisibility(View.GONE); + nextButton.setVisibility(View.GONE); + + rewindButton.setVisibility(View.VISIBLE); + fastforwardButton.setVisibility(View.VISIBLE); + } else { + previousButton.setVisibility(View.VISIBLE); + nextButton.setVisibility(View.VISIBLE); + + rewindButton.setVisibility(View.GONE); + fastforwardButton.setVisibility(View.GONE); + } } private void setupSubtitle(int currentPlayingIndex) { diff --git a/app/src/main/java/github/daneren2005/dsub/service/DownloadService.java b/app/src/main/java/github/daneren2005/dsub/service/DownloadService.java index 2d46c1d4..01007b68 100644 --- a/app/src/main/java/github/daneren2005/dsub/service/DownloadService.java +++ b/app/src/main/java/github/daneren2005/dsub/service/DownloadService.java @@ -1131,6 +1131,27 @@ public class DownloadService extends Service { handleError(x); } } + public synchronized int rewind() { + return seekToWrapper(-REWIND); + } + public synchronized int fastForward() { + return seekToWrapper(FAST_FORWARD); + } + protected int seekToWrapper(int difference) { + int msPlayed = Math.max(0, getPlayerPosition()); + Integer duration = getPlayerDuration(); + int msTotal = duration == null ? 0 : duration; + + int seekTo; + if(msPlayed + difference > msTotal) { + seekTo = msTotal; + } else { + seekTo = msPlayed + difference; + } + seekTo(seekTo); + + return seekTo; + } public synchronized void previous() { int index = getCurrentPlayingIndex(); diff --git a/app/src/main/java/github/daneren2005/dsub/service/DownloadServiceLifecycleSupport.java b/app/src/main/java/github/daneren2005/dsub/service/DownloadServiceLifecycleSupport.java index fe75e248..8c61464f 100644 --- a/app/src/main/java/github/daneren2005/dsub/service/DownloadServiceLifecycleSupport.java +++ b/app/src/main/java/github/daneren2005/dsub/service/DownloadServiceLifecycleSupport.java @@ -408,6 +408,12 @@ public class DownloadServiceLifecycleSupport { case KeyEvent.KEYCODE_MEDIA_NEXT: downloadService.next(); break; + case KeyEvent.KEYCODE_MEDIA_REWIND: + downloadService.rewind(); + break; + case KeyEvent.KEYCODE_MEDIA_FAST_FORWARD: + downloadService.fastForward(); + break; case RemoteControlClient.FLAG_KEY_MEDIA_STOP: case KeyEvent.KEYCODE_MEDIA_STOP: downloadService.stop(); diff --git a/app/src/main/java/github/daneren2005/dsub/util/Notifications.java b/app/src/main/java/github/daneren2005/dsub/util/Notifications.java index a59a9766..e4f9edeb 100644 --- a/app/src/main/java/github/daneren2005/dsub/util/Notifications.java +++ b/app/src/main/java/github/daneren2005/dsub/util/Notifications.java @@ -104,7 +104,7 @@ public final class Notifications { handler.post(new Runnable() { @Override public void run() { - if(playing) { + if (playing) { downloadService.startForeground(NOTIFICATION_ID_PLAYING, notification); } else { playShowing = false; @@ -121,7 +121,8 @@ public final class Notifications { DSubWidgetProvider.notifyInstances(context, downloadService, playing); } - private static void setupViews(RemoteViews rv, Context context, MusicDirectory.Entry song, boolean expanded, boolean playing, boolean remote){ + private static void setupViews(RemoteViews rv, Context context, MusicDirectory.Entry song, boolean expanded, boolean playing, boolean remote) { + boolean isLongFile = song.isAudioBook() || song.isPodcast(); // Use the same text for the ticker and the expanded notification String title = song.getTitle(); @@ -156,20 +157,47 @@ public final class Notifications { if(persistent) { if(expanded) { rv.setImageViewResource(R.id.control_pause, playing ? R.drawable.notification_pause : R.drawable.notification_start); + + if(isLongFile && playing) { + rv.setImageViewResource(R.id.control_previous, R.drawable.notification_rewind); + rv.setImageViewResource(R.id.control_next, R.drawable.notification_fastforward); + } else { + rv.setImageViewResource(R.id.control_previous, R.drawable.notification_backward); + rv.setImageViewResource(R.id.control_next, R.drawable.notification_forward); + } } else { rv.setImageViewResource(R.id.control_previous, playing ? R.drawable.notification_pause : R.drawable.notification_start); - rv.setImageViewResource(R.id.control_pause, R.drawable.notification_forward); + if(isLongFile && playing) { + rv.setImageViewResource(R.id.control_pause, R.drawable.notification_fastforward); + } else { + rv.setImageViewResource(R.id.control_pause, R.drawable.notification_forward); + } rv.setImageViewResource(R.id.control_next, R.drawable.notification_close); } + } else if(isLongFile) { + rv.setImageViewResource(R.id.control_previous, R.drawable.notification_rewind); + rv.setImageViewResource(R.id.control_next, R.drawable.notification_fastforward); + } else { + // Necessary for switching back since it appears to re-use the same layout + rv.setImageViewResource(R.id.control_previous, R.drawable.notification_backward); + rv.setImageViewResource(R.id.control_next, R.drawable.notification_forward); } // Create actions for media buttons PendingIntent pendingIntent; - int previous = 0, pause = 0, next = 0, close = 0; + int previous = 0, pause = 0, next = 0, close = 0, rewind = 0, fastForward = 0; if(persistent && !expanded) { pause = R.id.control_previous; - next = R.id.control_pause; + if(isLongFile && playing) { + fastForward = R.id.control_pause; + } else { + next = R.id.control_pause; + } close = R.id.control_next; + } else if(isLongFile && (!persistent || (expanded && playing))) { + rewind = R.id.control_previous; + pause = R.id.control_pause; + fastForward = R.id.control_next; } else { previous = R.id.control_previous; pause = R.id.control_pause; @@ -188,6 +216,13 @@ public final class Notifications { pendingIntent = PendingIntent.getService(context, 0, prevIntent, 0); rv.setOnClickPendingIntent(previous, pendingIntent); } + if(rewind > 0) { + Intent rewindIntent = new Intent("KEYCODE_MEDIA_REWIND"); + rewindIntent.setComponent(new ComponentName(context, DownloadService.class)); + rewindIntent.putExtra(Intent.EXTRA_KEY_EVENT, new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_MEDIA_REWIND)); + pendingIntent = PendingIntent.getService(context, 0, rewindIntent, 0); + rv.setOnClickPendingIntent(rewind, pendingIntent); + } if(pause > 0) { if(playing) { Intent pauseIntent = new Intent("KEYCODE_MEDIA_PLAY_PAUSE"); @@ -210,6 +245,13 @@ public final class Notifications { pendingIntent = PendingIntent.getService(context, 0, nextIntent, 0); rv.setOnClickPendingIntent(next, pendingIntent); } + if(fastForward > 0) { + Intent fastForwardIntent = new Intent("KEYCODE_MEDIA_FAST_FORWARD"); + fastForwardIntent.setComponent(new ComponentName(context, DownloadService.class)); + fastForwardIntent.putExtra(Intent.EXTRA_KEY_EVENT, new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_MEDIA_FAST_FORWARD)); + pendingIntent = PendingIntent.getService(context, 0, fastForwardIntent, 0); + rv.setOnClickPendingIntent(fastForward, pendingIntent); + } if(close > 0) { Intent prevIntent = new Intent("KEYCODE_MEDIA_STOP"); prevIntent.setComponent(new ComponentName(context, DownloadService.class)); diff --git a/app/src/main/res/drawable-hdpi/media_fastforward_dark.png b/app/src/main/res/drawable-hdpi/media_fastforward_dark.png new file mode 100644 index 00000000..eab0cdfd Binary files /dev/null and b/app/src/main/res/drawable-hdpi/media_fastforward_dark.png differ diff --git a/app/src/main/res/drawable-hdpi/media_fastforward_light.png b/app/src/main/res/drawable-hdpi/media_fastforward_light.png new file mode 100644 index 00000000..905faa9c Binary files /dev/null and b/app/src/main/res/drawable-hdpi/media_fastforward_light.png differ diff --git a/app/src/main/res/drawable-hdpi/media_rewind_dark.png b/app/src/main/res/drawable-hdpi/media_rewind_dark.png new file mode 100644 index 00000000..5d2d62a7 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/media_rewind_dark.png differ diff --git a/app/src/main/res/drawable-hdpi/media_rewind_light.png b/app/src/main/res/drawable-hdpi/media_rewind_light.png new file mode 100644 index 00000000..15bc91a8 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/media_rewind_light.png differ diff --git a/app/src/main/res/drawable-mdpi/media_fastforward_dark.png b/app/src/main/res/drawable-mdpi/media_fastforward_dark.png new file mode 100644 index 00000000..f999e0b8 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/media_fastforward_dark.png differ diff --git a/app/src/main/res/drawable-mdpi/media_fastforward_light.png b/app/src/main/res/drawable-mdpi/media_fastforward_light.png new file mode 100644 index 00000000..23107742 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/media_fastforward_light.png differ diff --git a/app/src/main/res/drawable-mdpi/media_rewind_dark.png b/app/src/main/res/drawable-mdpi/media_rewind_dark.png new file mode 100644 index 00000000..2ecda48a Binary files /dev/null and b/app/src/main/res/drawable-mdpi/media_rewind_dark.png differ diff --git a/app/src/main/res/drawable-mdpi/media_rewind_light.png b/app/src/main/res/drawable-mdpi/media_rewind_light.png new file mode 100644 index 00000000..f7c9b303 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/media_rewind_light.png differ diff --git a/app/src/main/res/drawable-v21/notification_fastforward.xml b/app/src/main/res/drawable-v21/notification_fastforward.xml new file mode 100644 index 00000000..d0ab76a2 --- /dev/null +++ b/app/src/main/res/drawable-v21/notification_fastforward.xml @@ -0,0 +1,4 @@ + + \ No newline at end of file diff --git a/app/src/main/res/drawable-v21/notification_rewind.xml b/app/src/main/res/drawable-v21/notification_rewind.xml new file mode 100644 index 00000000..25a16a02 --- /dev/null +++ b/app/src/main/res/drawable-v21/notification_rewind.xml @@ -0,0 +1,4 @@ + + \ No newline at end of file diff --git a/app/src/main/res/drawable-xhdpi/media_fastforward_dark.png b/app/src/main/res/drawable-xhdpi/media_fastforward_dark.png new file mode 100644 index 00000000..3c653286 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/media_fastforward_dark.png differ diff --git a/app/src/main/res/drawable-xhdpi/media_fastforward_light.png b/app/src/main/res/drawable-xhdpi/media_fastforward_light.png new file mode 100644 index 00000000..f105b458 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/media_fastforward_light.png differ diff --git a/app/src/main/res/drawable-xhdpi/media_rewind_dark.png b/app/src/main/res/drawable-xhdpi/media_rewind_dark.png new file mode 100644 index 00000000..08fdff06 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/media_rewind_dark.png differ diff --git a/app/src/main/res/drawable-xhdpi/media_rewind_light.png b/app/src/main/res/drawable-xhdpi/media_rewind_light.png new file mode 100644 index 00000000..3998f715 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/media_rewind_light.png differ diff --git a/app/src/main/res/drawable-xxhdpi/media_fastforward_dark.png b/app/src/main/res/drawable-xxhdpi/media_fastforward_dark.png new file mode 100644 index 00000000..90f045ea Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/media_fastforward_dark.png differ diff --git a/app/src/main/res/drawable-xxhdpi/media_fastforward_light.png b/app/src/main/res/drawable-xxhdpi/media_fastforward_light.png new file mode 100644 index 00000000..73f0fba4 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/media_fastforward_light.png differ diff --git a/app/src/main/res/drawable-xxhdpi/media_rewind_dark.png b/app/src/main/res/drawable-xxhdpi/media_rewind_dark.png new file mode 100644 index 00000000..ff5bda9a Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/media_rewind_dark.png differ diff --git a/app/src/main/res/drawable-xxhdpi/media_rewind_light.png b/app/src/main/res/drawable-xxhdpi/media_rewind_light.png new file mode 100644 index 00000000..c50c0825 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/media_rewind_light.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/media_fastforward_dark.png b/app/src/main/res/drawable-xxxhdpi/media_fastforward_dark.png new file mode 100644 index 00000000..63ac58e0 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/media_fastforward_dark.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/media_fastforward_light.png b/app/src/main/res/drawable-xxxhdpi/media_fastforward_light.png new file mode 100644 index 00000000..d2f7506b Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/media_fastforward_light.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/media_rewind_dark.png b/app/src/main/res/drawable-xxxhdpi/media_rewind_dark.png new file mode 100644 index 00000000..e911b342 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/media_rewind_dark.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/media_rewind_light.png b/app/src/main/res/drawable-xxxhdpi/media_rewind_light.png new file mode 100644 index 00000000..461118f1 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/media_rewind_light.png differ diff --git a/app/src/main/res/drawable/notification_fastforward.xml b/app/src/main/res/drawable/notification_fastforward.xml new file mode 100644 index 00000000..355c6a5b --- /dev/null +++ b/app/src/main/res/drawable/notification_fastforward.xml @@ -0,0 +1,4 @@ + + \ No newline at end of file diff --git a/app/src/main/res/drawable/notification_rewind.xml b/app/src/main/res/drawable/notification_rewind.xml new file mode 100644 index 00000000..ab7827a9 --- /dev/null +++ b/app/src/main/res/drawable/notification_rewind.xml @@ -0,0 +1,4 @@ + + \ No newline at end of file diff --git a/app/src/main/res/layout/abstract_fragment_activity.xml b/app/src/main/res/layout/abstract_fragment_activity.xml index 180cce97..462ee7ef 100644 --- a/app/src/main/res/layout/abstract_fragment_activity.xml +++ b/app/src/main/res/layout/abstract_fragment_activity.xml @@ -103,6 +103,13 @@ android:layout_width="0dp" android:layout_weight="1"> + + + + diff --git a/app/src/main/res/layout/download_media_buttons.xml b/app/src/main/res/layout/download_media_buttons.xml index 58fda5c0..0610c5f9 100644 --- a/app/src/main/res/layout/download_media_buttons.xml +++ b/app/src/main/res/layout/download_media_buttons.xml @@ -21,6 +21,14 @@ android:layout_centerVertical="true" /> + + + + + + @@ -14,6 +16,8 @@ + + diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index 4915c012..e86084b0 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -4,6 +4,8 @@ @drawable/main_offline_light @drawable/media_backward_light @drawable/media_forward_light + @drawable/media_rewind_light + @drawable/media_fastforward_light @drawable/media_pause_light @drawable/media_repeat_off_light @drawable/media_repeat_single_light @@ -15,6 +17,8 @@ @drawable/media_pause_dark @drawable/media_start_dark @drawable/media_stop_dark + @drawable/media_rewind_dark + @drawable/media_fastforward_dark @drawable/ic_menu_chat_send_light @drawable/ic_action_add_dark @drawable/download_none_light @@ -70,6 +74,8 @@ @drawable/main_offline_dark @drawable/media_backward_dark @drawable/media_forward_dark + @drawable/media_rewind_dark + @drawable/media_fastforward_dark @drawable/media_pause_dark @drawable/media_repeat_off_dark @drawable/media_repeat_single_dark @@ -81,6 +87,8 @@ @drawable/media_pause_dark @drawable/media_start_dark @drawable/media_stop_dark + @drawable/media_rewind_dark + @drawable/media_fastforward_dark @drawable/ic_menu_chat_send_dark @drawable/ic_action_add_dark @drawable/download_none_dark @@ -183,6 +191,8 @@ @drawable/media_pause_light @drawable/media_start_light @drawable/media_stop_light + @drawable/media_rewind_light + @drawable/media_fastforward_light @drawable/ic_action_add_light @drawable/ic_menu_shuffle_light @drawable/ic_menu_refresh_light -- cgit v1.2.3