From d8c5a9f8b4b58489e113c637d358ba64df899a42 Mon Sep 17 00:00:00 2001 From: Scott Jackson Date: Wed, 31 Aug 2016 17:34:52 -0700 Subject: Fixes #726: Add custom playback speed --- .../dsub/fragments/NowPlayingFragment.java | 80 +++++++++++++++++++--- .../github/daneren2005/dsub/util/Constants.java | 1 + app/src/main/res/layout/set_playback_speed.xml | 22 ++++++ app/src/main/res/menu/playback_speed_options.xml | 4 ++ app/src/main/res/values-hu/strings.xml | 22 ++++-- app/src/main/res/values/strings.xml | 1 + 6 files changed, 117 insertions(+), 13 deletions(-) create mode 100644 app/src/main/res/layout/set_playback_speed.xml (limited to 'app') 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 7c20dc28..9eddbc89 100644 --- a/app/src/main/java/github/daneren2005/dsub/fragments/NowPlayingFragment.java +++ b/app/src/main/java/github/daneren2005/dsub/fragments/NowPlayingFragment.java @@ -400,11 +400,6 @@ public class NowPlayingFragment extends SubsonicFragment implements OnGestureLis popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem menuItem) { - DownloadService downloadService = getDownloadService(); - if (downloadService == null) { - return false; - } - float playbackSpeed = 1.0f; switch (menuItem.getItemId()) { case R.id.playback_speed_half: @@ -419,10 +414,12 @@ public class NowPlayingFragment extends SubsonicFragment implements OnGestureLis case R.id.playback_speed_tripple: playbackSpeed = 3.0f; break; + case R.id.playback_speed_custom: + setPlaybackSpeed(); + return true; } - downloadService.setPlaybackSpeed(playbackSpeed); - updateTitle(); + setPlaybackSpeed(playbackSpeed); return true; } }); @@ -1485,8 +1482,15 @@ public class NowPlayingFragment extends SubsonicFragment implements OnGestureLis stringRes = R.string.download_playback_speed_tripple; } + String playbackSpeedText = null; if(stringRes != -1) { - title += " (" + context.getResources().getString(stringRes) + ")"; + playbackSpeedText = context.getResources().getString(stringRes); + } else if(Math.abs(playbackSpeed - 1.0) > 0.01) { + playbackSpeedText = Float.toString(playbackSpeed) + "x"; + } + + if(playbackSpeedText != null) { + title += " (" + playbackSpeedText + ")"; } setTitle(title); } @@ -1504,4 +1508,64 @@ public class NowPlayingFragment extends SubsonicFragment implements OnGestureLis return entries; } + + private void setPlaybackSpeed() { + View dialogView = context.getLayoutInflater().inflate(R.layout.set_playback_speed, null); + + // Setup playbackSpeed label + final TextView playbackSpeedBox = (TextView) dialogView.findViewById(R.id.playback_speed_label); + final SharedPreferences prefs = Util.getPreferences(context); + String playbackSpeedString = prefs.getString(Constants.PREFERENCES_KEY_CUSTOM_PLAYBACK_SPEED, "17"); + int playbackSpeed = Integer.parseInt(playbackSpeedString); + playbackSpeedBox.setText(new Float(playbackSpeed / 10.0).toString()); + + // Setup playbackSpeed slider + final SeekBar playbackSpeedBar = (SeekBar) dialogView.findViewById(R.id.playback_speed_bar); + playbackSpeedBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { + @Override + public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { + if (fromUser) { + playbackSpeedBox.setText(new Float((progress + 5) / 10.0).toString()); + seekBar.setProgress(progress); + } + } + + @Override + public void onStartTrackingTouch(SeekBar seekBar) { + } + + @Override + public void onStopTrackingTouch(SeekBar seekBar) { + } + }); + playbackSpeedBar.setProgress(playbackSpeed - 5); + + AlertDialog.Builder builder = new AlertDialog.Builder(context); + builder.setTitle(R.string.download_playback_speed_custom) + .setView(dialogView) + .setPositiveButton(R.string.common_ok, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int id) { + int playbackSpeed = playbackSpeedBar.getProgress() + 5; + + SharedPreferences.Editor editor = prefs.edit(); + editor.putString(Constants.PREFERENCES_KEY_CUSTOM_PLAYBACK_SPEED, Integer.toString(playbackSpeed)); + editor.commit(); + + setPlaybackSpeed(new Float(playbackSpeed / 10.0)); + } + }) + .setNegativeButton(R.string.common_cancel, null); + AlertDialog dialog = builder.create(); + dialog.show(); + } + private void setPlaybackSpeed(float playbackSpeed) { + DownloadService downloadService = getDownloadService(); + if (downloadService == null) { + return; + } + + downloadService.setPlaybackSpeed(playbackSpeed); + updateTitle(); + } } diff --git a/app/src/main/java/github/daneren2005/dsub/util/Constants.java b/app/src/main/java/github/daneren2005/dsub/util/Constants.java index 4109ea67..b7a68962 100644 --- a/app/src/main/java/github/daneren2005/dsub/util/Constants.java +++ b/app/src/main/java/github/daneren2005/dsub/util/Constants.java @@ -176,6 +176,7 @@ public final class Constants { public static final String PREFERENCES_KEY_HEADS_UP_NOTIFICATION = "headsUpNotification"; public static final String PREFERENCES_KEY_CAST_CACHE = "castCache"; public static final String PREFERENCES_KEY_PLAYBACK_SPEED = "playbackSpeed"; + public static final String PREFERENCES_KEY_CUSTOM_PLAYBACK_SPEED = "customPlaybackSpeed"; public static final String OFFLINE_SCROBBLE_COUNT = "scrobbleCount"; public static final String OFFLINE_SCROBBLE_ID = "scrobbleID"; diff --git a/app/src/main/res/layout/set_playback_speed.xml b/app/src/main/res/layout/set_playback_speed.xml new file mode 100644 index 00000000..42f23a35 --- /dev/null +++ b/app/src/main/res/layout/set_playback_speed.xml @@ -0,0 +1,22 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/playback_speed_options.xml b/app/src/main/res/menu/playback_speed_options.xml index e64ecd04..909d3b3c 100644 --- a/app/src/main/res/menu/playback_speed_options.xml +++ b/app/src/main/res/menu/playback_speed_options.xml @@ -19,4 +19,8 @@ + + \ No newline at end of file diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 8ac830a7..a720b214 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -220,6 +220,11 @@ Nem jó Kötegelt mód + 0.5x + 1x + 1.5x + 2x + 3x Új podcastok: \"%s\" Új lejátszási listák: \"%s\" @@ -442,6 +447,11 @@ A rendszer nyelvének felülbírálása A Dsub megjelenítése angol nyelven abban az esetben is, ha rendelkezik fordítással. Az alkalmazást törölni kell a memóriából, mert a beállítás csak újraindítás után lép érvénybe! Oldalsáv elemei + Viselkedés dal megérintésekor + Dal lejátszása + A teljes album hozzáadása a várólistához + Dal sorba állítása következőnek + Dal sorba állítása utolsónak Nagyméretű albumborítók Albumok megjelenítése rácsnézetben és nagyméretű albumborítóval a listanézet helyett. Admin engedélyezése @@ -530,7 +540,7 @@ Jukebox vezérlése Megosztások kezelése Videók konvertálása - Last.fm funkció használata + Last.fm szolgáltatás használata Hálózati hiba történt! Újrapróbálkozás %1$d/%2$d. @@ -555,8 +565,8 @@ Equalizer Engedélyezve Profil kiválasztása - Basszus fokozás - Beszédhang fokozás + Basszus fokozása + Beszédhang fokozása %d dB %d ezer @@ -578,7 +588,9 @@ OK Továbbiak… - Üzenet küldése + Üzenet küldése + + Verzió %s Lejátszás indítása Lejátszás indítása kevert sorrendben @@ -624,7 +636,7 @@ Verzió Gyorsítótárazott fájlok Megőrzött fájlok - Felhasznált tároló + Felhasznált tárhely Rendelkezésre álló hely %1$s/%2$s Dal diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d372940f..b987bad6 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -225,6 +225,7 @@ 1.5x 2x 3x + Custom New podcasts available New songs in playlists -- cgit v1.2.3