From e96eae29d5d3013e38071ed2e4b0901d469f24f3 Mon Sep 17 00:00:00 2001 From: Yahor Berdnikau Date: Thu, 28 Dec 2017 22:02:09 +0100 Subject: [PATCH] Add option to resume playback on headphones insertion. This is disabled by default and should be enabled in app settings. Playback resume only happened when app is not in Jukebox mode and playback is paused. Signed-off-by: Yahor Berdnikau --- .../DownloadServiceLifecycleSupport.java | 71 ++++++++++++------- ultrasonic/src/main/res/values-es/strings.xml | 2 + ultrasonic/src/main/res/values-fr/strings.xml | 2 + ultrasonic/src/main/res/values-hu/strings.xml | 2 + .../src/main/res/values-pt-rBR/strings.xml | 2 + ultrasonic/src/main/res/values-pt/strings.xml | 2 + .../res/values/playback_preferences_keys.xml | 4 ++ ultrasonic/src/main/res/values/strings.xml | 2 + ultrasonic/src/main/res/xml/settings.xml | 6 ++ 9 files changed, 67 insertions(+), 26 deletions(-) create mode 100644 ultrasonic/src/main/res/values/playback_preferences_keys.xml diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/service/DownloadServiceLifecycleSupport.java b/ultrasonic/src/main/java/org/moire/ultrasonic/service/DownloadServiceLifecycleSupport.java index 79f64e76..d9af9881 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/service/DownloadServiceLifecycleSupport.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/service/DownloadServiceLifecycleSupport.java @@ -18,17 +18,22 @@ */ package org.moire.ultrasonic.service; +import android.annotation.SuppressLint; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; +import android.content.SharedPreferences; +import android.media.AudioManager; import android.os.AsyncTask; +import android.os.Build; import android.os.Bundle; import android.telephony.PhoneStateListener; import android.telephony.TelephonyManager; import android.util.Log; import android.view.KeyEvent; +import org.moire.ultrasonic.R; import org.moire.ultrasonic.domain.MusicDirectory; import org.moire.ultrasonic.domain.PlayerState; import org.moire.ultrasonic.util.CacheCleaner; @@ -128,32 +133,9 @@ public class DownloadServiceLifecycleSupport executorService = Executors.newSingleThreadScheduledExecutor(); executorService.scheduleWithFixedDelay(downloadChecker, 5, 5, TimeUnit.SECONDS); - // Pause when headset is unplugged. - headsetEventReceiver = new BroadcastReceiver() - { - @Override - public void onReceive(Context context, Intent intent) - { - Bundle extras = intent.getExtras(); + registerHeadsetReceiver(); - if (extras == null) - { - return; - } - - Log.i(TAG, String.format("Headset event for: %s", extras.get("name"))); - if (extras.getInt("state") == 0) - { - if (!downloadService.isJukeboxEnabled()) - { - downloadService.pause(); - } - } - } - }; - downloadService.registerReceiver(headsetEventReceiver, new IntentFilter(Intent.ACTION_HEADSET_PLUG)); - - // Stop when SD card is ejected. + // Stop when SD card is ejected. ejectEventReceiver = new BroadcastReceiver() { @Override @@ -202,7 +184,44 @@ public class DownloadServiceLifecycleSupport new CacheCleaner(downloadService, downloadService).clean(); } - public void onStart(Intent intent) + private void registerHeadsetReceiver() { + // Pause when headset is unplugged. + final SharedPreferences sp = Util.getPreferences(downloadService); + final String spKey = downloadService + .getString(R.string.settings_playback_resume_play_on_headphones_plug); + + headsetEventReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + final Bundle extras = intent.getExtras(); + + if (extras == null) { + return; + } + + Log.i(TAG, String.format("Headset event for: %s", extras.get("name"))); + final int state = extras.getInt("state"); + if (state == 0) { + if (!downloadService.isJukeboxEnabled()) { + downloadService.pause(); + } + } else if (state == 1) { + if (!downloadService.isJukeboxEnabled() && + sp.getBoolean(spKey, false) && + downloadService.getPlayerState() == PlayerState.PAUSED) { + downloadService.start(); + } + } + } + }; + @SuppressLint("InlinedApi") + IntentFilter headsetIntentFilter = (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) ? + new IntentFilter(AudioManager.ACTION_HEADSET_PLUG) : + new IntentFilter(Intent.ACTION_HEADSET_PLUG); + downloadService.registerReceiver(headsetEventReceiver, headsetIntentFilter); + } + + public void onStart(Intent intent) { if (intent != null && intent.getExtras() != null) { diff --git a/ultrasonic/src/main/res/values-es/strings.xml b/ultrasonic/src/main/res/values-es/strings.xml index e96ec80f..5f633be2 100644 --- a/ultrasonic/src/main/res/values-es/strings.xml +++ b/ultrasonic/src/main/res/values-es/strings.xml @@ -249,6 +249,8 @@ 3 canciónes 5 canciónes Ilimitado + Reanudación de la inserción de auriculares + La aplicación reanudará la reproducción en pausa al insertar los auriculares en el dispositivo. Mantener la pantalla encendida mientras descarga mejora la velocidad de la misma. Mantener la pantalla encendida Recuerda configurar tu nombre de usuario y contraseña de Last.fm en el servidor de Subsonic diff --git a/ultrasonic/src/main/res/values-fr/strings.xml b/ultrasonic/src/main/res/values-fr/strings.xml index eeb7d42b..d32bb208 100644 --- a/ultrasonic/src/main/res/values-fr/strings.xml +++ b/ultrasonic/src/main/res/values-fr/strings.xml @@ -249,6 +249,8 @@ 3 morceaux 5 morceaux Illimité + Reprise de l\'insertion des écouteurs + L\'application reprendra la lecture en pause lors de l\'insertion du casque dans l\'appareil. Garder l\'écran allumé pendant le téléchargement permet d\'améliorer la vitesse de téléchargement. Garder écran allumé N\'oubliez pas de définir votre nom d\'utilisateur et mot de passe Last.fm sur le serveur Subsonic diff --git a/ultrasonic/src/main/res/values-hu/strings.xml b/ultrasonic/src/main/res/values-hu/strings.xml index 6389458c..2c561cd2 100644 --- a/ultrasonic/src/main/res/values-hu/strings.xml +++ b/ultrasonic/src/main/res/values-hu/strings.xml @@ -249,6 +249,8 @@ 3 dal 5 dal Korlátlan + Folytatás a fejhallgató behelyezésekor + Az alkalmazás folytatja a szüneteltetett lejátszást a fejhallgató behelyezésekor a készülékbe. Képernyő ébrentartása a letöltés alatt, a magasabb letöltési sebesség érdekében. Képernyő ébrentartása A Last.fm felhasználónevet és jelszót be kell állítani a Subsonic kiszolgálón! diff --git a/ultrasonic/src/main/res/values-pt-rBR/strings.xml b/ultrasonic/src/main/res/values-pt-rBR/strings.xml index 839c8643..553c9f89 100644 --- a/ultrasonic/src/main/res/values-pt-rBR/strings.xml +++ b/ultrasonic/src/main/res/values-pt-rBR/strings.xml @@ -252,6 +252,8 @@ 3 músicas 5 músicas Ilimitado + Currículo na inserção de fone de ouvido + O aplicativo retomará a reprodução em pausa na inserção dos fones de ouvido no dispositivo. Manter a tela ligada enquanto baixando aumenta a velocidade de download. Manter a Tela Ligada Lembre-se de definir seu usuário e senha do Last.fm no servidor Subsonic diff --git a/ultrasonic/src/main/res/values-pt/strings.xml b/ultrasonic/src/main/res/values-pt/strings.xml index 0cf5ac22..ae8eaf4f 100644 --- a/ultrasonic/src/main/res/values-pt/strings.xml +++ b/ultrasonic/src/main/res/values-pt/strings.xml @@ -252,6 +252,8 @@ 3 músicas 5 músicas Ilimitado + Currículo na inserção de fone de ouvido + O aplicativo retomará a reprodução em pausa na inserção dos fones de ouvido no dispositivo. Manter o ecrã ligado enquanto descarrega aumenta a velocidade de download. Manter o Ecrã Ligado Lembre-se de definir seu usuário e senha do Last.fm no servidor Subsonic diff --git a/ultrasonic/src/main/res/values/playback_preferences_keys.xml b/ultrasonic/src/main/res/values/playback_preferences_keys.xml new file mode 100644 index 00000000..99c2cfa9 --- /dev/null +++ b/ultrasonic/src/main/res/values/playback_preferences_keys.xml @@ -0,0 +1,4 @@ + + + playback.resume_play_on_headphones_plug + \ No newline at end of file diff --git a/ultrasonic/src/main/res/values/strings.xml b/ultrasonic/src/main/res/values/strings.xml index 7ed490c8..97687ad0 100644 --- a/ultrasonic/src/main/res/values/strings.xml +++ b/ultrasonic/src/main/res/values/strings.xml @@ -253,6 +253,8 @@ 3 songs 5 songs Unlimited + Resume on headphones insertion + App will resume paused playback on headphones insertion into device. Keeping the screen on while downloading improves download speed. Keep Screen On Remember to set up your Last.fm user and password on the Subsonic server diff --git a/ultrasonic/src/main/res/xml/settings.xml b/ultrasonic/src/main/res/xml/settings.xml index e4e2b4bd..e66f2b7e 100644 --- a/ultrasonic/src/main/res/xml/settings.xml +++ b/ultrasonic/src/main/res/xml/settings.xml @@ -100,6 +100,12 @@ a:entryValues="@array/incrementTimeValues" a:key="incrementTime" a:title="@string/settings.increment_time"/> +