From bc2709aa309d4e62f35903bffb486b1eb1e5726f Mon Sep 17 00:00:00 2001 From: Scott Jackson Date: Fri, 30 Sep 2016 13:49:45 -0700 Subject: Fixes #738: Add support for radio station playlists --- .../SelectInternetRadioStationFragment.java | 45 ++++++++++++++++++++++ 1 file changed, 45 insertions(+) (limited to 'app/src/main') diff --git a/app/src/main/java/github/daneren2005/dsub/fragments/SelectInternetRadioStationFragment.java b/app/src/main/java/github/daneren2005/dsub/fragments/SelectInternetRadioStationFragment.java index 16082cbd..c39e9f61 100644 --- a/app/src/main/java/github/daneren2005/dsub/fragments/SelectInternetRadioStationFragment.java +++ b/app/src/main/java/github/daneren2005/dsub/fragments/SelectInternetRadioStationFragment.java @@ -18,10 +18,18 @@ */ package github.daneren2005.dsub.fragments; +import android.util.Log; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; +import java.io.BufferedInputStream; +import java.io.BufferedReader; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.MalformedURLException; +import java.net.URL; import java.util.ArrayList; import java.util.List; @@ -37,6 +45,8 @@ import github.daneren2005.dsub.util.Util; import github.daneren2005.dsub.view.UpdateView; public class SelectInternetRadioStationFragment extends SelectRecyclerFragment { + private static final String TAG = SelectInternetRadioStationFragment.class.getSimpleName(); + @Override public int getOptionsMenu() { return R.menu.abstract_top_menu; @@ -67,6 +77,7 @@ public class SelectInternetRadioStationFragment extends SelectRecyclerFragment 0 && line.indexOf('#') != 0) { + if(internetRadioStation.getStreamUrl().indexOf(".m3u") != -1) { + internetRadioStation.setStreamUrl(line); + break; + } else { + if(line.indexOf("File1=") == 0) { + internetRadioStation.setStreamUrl(line.replace("File1=", "")); + } else if(line.indexOf("Title1=") == 0) { + internetRadioStation.setTitle(line.replace("Title1=", "")); + } + } + } + } + } finally { + connection.disconnect(); + } + } catch (Exception e) { + Log.e(TAG, "Failed to get stream data from playlist"); + } + + } + } + private void displayInternetRadioStationInfo(final InternetRadioStation station) { List headers = new ArrayList<>(); List details = new ArrayList<>(); -- cgit v1.2.3 From 0e71e6cd066dad690ae433bdc1f279ff82cda871 Mon Sep 17 00:00:00 2001 From: Scott Jackson Date: Fri, 30 Sep 2016 13:50:44 -0700 Subject: Make sure BackgroundTask can add threads when we have too many tasks --- .../github/daneren2005/dsub/util/BackgroundTask.java | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) (limited to 'app/src/main') diff --git a/app/src/main/java/github/daneren2005/dsub/util/BackgroundTask.java b/app/src/main/java/github/daneren2005/dsub/util/BackgroundTask.java index 31e83200..2b0c6279 100644 --- a/app/src/main/java/github/daneren2005/dsub/util/BackgroundTask.java +++ b/app/src/main/java/github/daneren2005/dsub/util/BackgroundTask.java @@ -27,6 +27,7 @@ import java.util.List; import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicInteger; import org.xmlpull.v1.XmlPullParserException; @@ -54,6 +55,7 @@ public abstract class BackgroundTask implements ProgressListener { private static final Collection threads = Collections.synchronizedCollection(new ArrayList()); protected static final BlockingQueue queue = new LinkedBlockingQueue(10); private static Handler handler = null; + private static AtomicInteger currentlyRunning = new AtomicInteger(0); static { try { handler = new Handler(Looper.getMainLooper()); @@ -71,6 +73,11 @@ public abstract class BackgroundTask implements ProgressListener { threads.add(thread); thread.start(); } + } else if(currentlyRunning.get() >= threads.size()) { + Log.w(TAG, "Emergency add new thread: " + (threads.size() + 1)); + Thread thread = new Thread(new TaskRunnable(), String.format("BackgroundTask_%d", threads.size())); + threads.add(thread); + thread.start(); } if(handler == null) { try { @@ -304,22 +311,30 @@ public abstract class BackgroundTask implements ProgressListener { @Override public void run() { Looper.prepare(); + final Thread currentThread = Thread.currentThread(); while(running) { try { Task task = queue.take(); + currentlyRunning.incrementAndGet(); task.execute(); } catch(InterruptedException stop) { Log.e(TAG, "Thread died"); running = false; - threads.remove(Thread.currentThread()); } catch(Throwable t) { Log.e(TAG, "Unexpected crash in BackgroundTask thread", t); + running = false; } + + currentlyRunning.decrementAndGet(); + } + + if(threads.contains(currentThread)) { + threads.remove(currentThread); } } } - public static interface OnCancelListener { + public interface OnCancelListener { void onCancel(); } } -- cgit v1.2.3 From 3f3f850ea8328d5846d0e3ae8f600e8068f20ba6 Mon Sep 17 00:00:00 2001 From: Scott Jackson Date: Sat, 1 Oct 2016 21:05:35 -0700 Subject: Workaround for #739 --- .../github/daneren2005/dsub/util/Notifications.java | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) (limited to 'app/src/main') 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 0d4a0f9c..d6a92b07 100644 --- a/app/src/main/java/github/daneren2005/dsub/util/Notifications.java +++ b/app/src/main/java/github/daneren2005/dsub/util/Notifications.java @@ -99,7 +99,12 @@ public final class Notifications { public void run() { downloadService.stopForeground(true); showDownloadingNotification(context, downloadService, handler, downloadService.getCurrentDownloading(), downloadService.getBackgroundDownloads().size()); - downloadService.startForeground(NOTIFICATION_ID_PLAYING, notification); + + try { + downloadService.startForeground(NOTIFICATION_ID_PLAYING, notification); + } catch(Exception e) { + Log.e(TAG, "Failed to start notifications after stopping foreground download"); + } } }); } else { @@ -107,13 +112,22 @@ public final class Notifications { @Override public void run() { if (playing) { - downloadService.startForeground(NOTIFICATION_ID_PLAYING, notification); + try { + downloadService.startForeground(NOTIFICATION_ID_PLAYING, notification); + } catch(Exception e) { + Log.e(TAG, "Failed to start notifications while playing"); + } } else { playShowing = false; persistentPlayingShowing = true; NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); downloadService.stopForeground(false); - notificationManager.notify(NOTIFICATION_ID_PLAYING, notification); + + try { + notificationManager.notify(NOTIFICATION_ID_PLAYING, notification); + } catch(Exception e) { + Log.e(TAG, "Failed to start notifications while paused"); + } } } }); -- cgit v1.2.3 From 9cd467d3aee23ce24c95bd492ab79009b7aef430 Mon Sep 17 00:00:00 2001 From: YSmhXQDd6Z Date: Sun, 2 Oct 2016 21:19:22 +0000 Subject: Update strings.xml --- app/src/main/res/values-pt-rPT/strings.xml | 65 +++++++++++++++++++----------- 1 file changed, 42 insertions(+), 23 deletions(-) (limited to 'app/src/main') diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index 6cf7a8d6..885035a4 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -36,6 +36,7 @@ A reproduzir agora Podcasts Marcadores + Rádios online Partilhas Chat Administração @@ -43,17 +44,17 @@ Offline Bem-vindo! - Bem-vindo ao DSub! Atualmente a aplicação está configurada para usar o servidor de demonstração do Subsonic. Depois de configurar o seu servidor pessoal (disponível em subsonic.org), vá às Definições e altere as configurações para que possa conectar-se. + Bem-vindo ao DSub! Atualmente a aplicação está configurada para usar o servidor de demonstração do Subsonic. Depois de configurar o seu servidor pessoal (disponível em subsonic.org), consulte as Definições e altere as configurações para que possa conectar-se. Sobre o DSub FAQ Cache vs Cache permanente: -
Quando o DSub transfere as músicas, elas poderão vir a ser eliminadas mais tarde para dar espaço para novas transferências. Por outro lado, as músicas que ficam permanentemente na cache nunca serão eliminadas. -

Falhas com o ChromeCast: -
Experimente a opção Definições -> Reprodução -> Usar dispositivo como proxy. É uma solução alternativa devido ao Chromecast não aceitar certificados auto-assinados. +
Quando o DSub transfere as músicas, as mesmas poderão ser eliminadas mais tarde para dar espaço para novas transferências. Por outro lado, as músicas que ficam permanentemente na cache nunca serão eliminadas. +

Falhas com o Chromecast: +
Experimente a opção Definições -> Transmissão -> Usar dispositivo como proxy. É uma solução alternativa devido ao Chromecast não aceitar certificados auto-assinados.

Primeiro nível na biblioteca são grupos de artistas: -
No menu de opções, desmarque a opção "Artistas no primeiro nível". Isto irá fazer com que o primeiro nível de diretorias apresentado seja tratado como grupos de artistas em vez de artistas propriamente ditos. +
No menu de opções, desmarque a opção "Artistas no primeiro nível". Isto fará com que o primeiro nível de diretorias apresentado seja tratado como grupos de artistas em vez de artistas propriamente ditos. ]]> Aleatório @@ -192,7 +193,7 @@ A lista de reprodução foi aleatorizada Remover músicas reproduzidas Guardar lista de reprodução - Introduza o nome da lista de reprodução: + Introduza um nome para a lista de reprodução: A guardar a lista de reprodução \"%s\"... A lista de reprodução foi guardada com sucesso. Falha ao guardar a lista de reprodução, tente novamente mais tarde. @@ -219,6 +220,12 @@ Gosto Não gosto Modo em série + 0.5x + 1x + 1.5x + 2x + 3x + Personalizado Novos podcasts disponíveis Novas músicas nas listas de reprodução @@ -277,8 +284,8 @@ Ativar ou não a sincronização para este servidor Sincronização ativa Cache de música - Músicas para pre-carregar (Wi-Fi) - Músicas para pre-carregar (dados móveis) + Músicas para pré-carregar (Wi-Fi) + Músicas para pré-carregar (dados móveis) Tamanho da cache Localização da cache Localização da cache inválida. A utilizar predefinição. @@ -299,6 +306,8 @@ Escuro Preto Holo + Dia/Noite + Dia/Noite (Preto) Ecrã inteiro Ocultar o maior número de elementos da interface que o Android permita Mostrar número da faixa @@ -332,7 +341,7 @@ 2000 Kbps 3000 Kbps 5000 Kbps - Ilimitado + Ilimitada Transmissão apenas em Wi-Fi Apenas transmitir multimédia se ligado por Wi-Fi Intervalo de ligação @@ -352,7 +361,7 @@ O histório de pesquisa foi apagado Outras definições Scrobble para Last.FM - Lembrar de configurar o nome de utilizador e palavra-passe do Last.FM no servidor Subsonic + Não se esqueça de configurar o seu nome de utilizador e palavra-passe do Last.FM no servidor Subsonic Ocultar do resto Ocultar ficheiros de música das outras aplicações As mudanças terão efeito na próxima vez que o Android procure músicas no seu dispositivo. @@ -367,12 +376,12 @@ Desligado Ligado Sempre ligado - Perda de foco temporário + Perda temporária de foco Pausar sempre Pausar, baixar volume quando pedido Baixar sempre o volume Não fazer nada - Manter músicas reproduzidas + Manter as músicas reproduzidas Remover todas as músicas reproduzidas Manter as últimas músicas reproduzidas Manter as 2 últimas músicas reproduzidas @@ -384,14 +393,14 @@ Mostrar a notificação mesmo depois de pausar. Pressione o botão de parar para a remover Reprodução sem pausas Se notar falhas estranhas durante a reprodução, desmarcar esta opção pode ajudar - Taxa de atualização do Chat (s) + Taxa de atualização do chat (s) Ativar chat Mostrar ou não a opção \"Chat\" no menu lateral Vídeo Reprodutor de vídeo Raw (Requer Subsonic 4.8+) HTTP Live Stream (HLS) (Requer Subsonic 4.8+) - Transcodificação direta (Requísitos de vídeo -> mp4 ou configuração similar no servidor + Transcodificação direta (Requer vídeo -> mp4 ou configuração similar no servidor Flash (Requer plugin) Cache/Ligação Reprodução @@ -401,6 +410,8 @@ Mostrar ou não a opção \"Podcasts\" no menu lateral Ativar marcadores Mostrar ou não a opção \"Marcadores\" no menu lateral + Ativar rádios online + Mostrar ou não a opção \"Rádios online\" no menu lateral Ativar partilhas Mostrar ou não a opção \"Partilhas\" no menu lateral Sincronização @@ -437,23 +448,26 @@ Procurar por tags Procurar por tags em vez da estrutura das pastas. Requer Subsonic 4.7+ Desativar diálogo de saída - Fechar a aplicação imediatamente após pressionar o botão voltar no ecrã inicial + Fechar a aplicação imediatamente após pressionar o botão de voltar no ecrã inicial Sobrepor linguagem do sistema Mostrar a aplicação em inglês mesmo se o DSub tiver uma tradução disponível para a linguagem do sistema. Poderá ser necessário limpar a aplicação da memória para as alterações terem efeito Separadores laterais - Premir uma música - Reproduzir tudo - Premir uma música adiciona à fila \"Reproduzir agora\" todas as músicas do álbum a seguir à música selecionada + Ação ao pressionar uma música + Reproduzir apenas essa música + Adicionar tudo no álbum à fila de reprodução + Adicionar como próxima música + Adicionar música ao fim da fila de reprodução Grandes capas de álbum Mostrar os álbuns com uma grande capa em vez de em lista Ativar administração Mostrar ou não a opção \"Administração\" no menu lateral Replay Gain - Escalar ou não o volume da reprodução por tags de replay gain nos álbuns e faixas + Escalar ou não o volume da reprodução por tags \"replay gain\" nos álbuns e faixas Ler pelas tags Deteção inteligente Tags nos álbuns Tags nas faixas - Pré-amp do Replay Gain + Pré-amplificação do Replay Gain Músicas sem Replay Gain Transmissão Usar dispositivo como proxy @@ -463,14 +477,14 @@ Iniciar com os auscultadores Iniciar quando os auscultadores são ligados. Isto requer o uso de um serviço que inicia com o arranque, para verificar o evento de ligação dos auscultadores mesmo quando o DSub não está a ser executado Colorir barra de ações - Colorir ou não a barra de ações e barra de estado + Colorir ou não a barra de ações e a barra de estado Aleatorizar por álbum Aleatorizar a ordem dos álbuns Aleatorizar todas as músicas juntas Transmitir original Transmitir os ficheiros originais se suportado pelo dispositivo de transmissão Notificações Heads Up (5.0+) - Mostrar notificações de reprodução como notificações Heads Up (Android Lollipop+ apenas) + Mostrar notificações de reprodução como notificações \"Heads Up\" (Android Lollipop+ apenas) Cache durante a transmissão Adicionar à cache as músicas a reproduzir no momento da transmissão @@ -598,6 +612,7 @@ Detalhes do podcast Detalhes da lista de reprodução Detalhes do artista + Detalhes da rádio online Podcast Estado Artista @@ -637,6 +652,10 @@ Última reprodução Expiração Nº de reproduções + URL da transmissão + Página web + + O DSub não funciona se não puder escrever no armazenamento Sem músicas @@ -648,8 +667,8 @@ %d músicas agendadas para transferência. - Uma música adicionada à lista de reprodução. - %d músicas adicionadas à lista de reprodução. + Uma música adicionada à fila de reprodução. + %d músicas adicionadas à fila de reprodução. Um dia de período de testes restante -- cgit v1.2.3 From 54da1317ce7a9b846faf01fc22504334f357892c Mon Sep 17 00:00:00 2001 From: Scott Jackson Date: Tue, 4 Oct 2016 17:10:10 -0700 Subject: DSub 5.3.1 Released --- app/build.gradle | 4 ++-- app/src/main/res/xml/changelog.xml | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) (limited to 'app/src/main') diff --git a/app/build.gradle b/app/build.gradle index ced2d978..075e403c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ android { applicationId "github.daneren2005.dsub" minSdkVersion 14 targetSdkVersion 23 - versionCode 186 - versionName '5.3' + versionCode 187 + versionName '5.3.1' setProperty("archivesBaseName", "DSub $versionName") resConfigs "de", "es", "fr", "hu", "nl", "pt-rPT", "ru", "sv" } diff --git a/app/src/main/res/xml/changelog.xml b/app/src/main/res/xml/changelog.xml index 89f076f7..169edaa0 100644 --- a/app/src/main/res/xml/changelog.xml +++ b/app/src/main/res/xml/changelog.xml @@ -1,5 +1,9 @@ + + Fix Internet Radio streams which point to playlists + Don't show playback speed button below Android 6.0 + Listen to Radio Internet Stations Automatic Day/Night theme -- cgit v1.2.3 From 2a5b7f82f8dfea7d72c40daab32325b766111d19 Mon Sep 17 00:00:00 2001 From: Scott Jackson Date: Wed, 5 Oct 2016 17:35:26 -0700 Subject: Load playlist size in background before hitting RCC::setPlaybackState --- .../github/daneren2005/dsub/service/DownloadService.java | 6 ++++-- .../dsub/util/compat/RemoteControlClientBase.java | 2 +- .../dsub/util/compat/RemoteControlClientICS.java | 2 +- .../dsub/util/compat/RemoteControlClientJB.java | 13 +++---------- .../dsub/util/compat/RemoteControlClientLP.java | 14 +++++++------- 5 files changed, 16 insertions(+), 21 deletions(-) (limited to 'app/src/main') 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 a6bbc327..1cf482ca 100644 --- a/app/src/main/java/github/daneren2005/dsub/service/DownloadService.java +++ b/app/src/main/java/github/daneren2005/dsub/service/DownloadService.java @@ -1469,7 +1469,7 @@ public class DownloadService extends Service { Notifications.hidePlayingNotification(this, this, handler); } if(mRemoteControl != null) { - mRemoteControl.setPlaybackState(playerState.getRemoteControlClientPlayState()); + mRemoteControl.setPlaybackState(playerState.getRemoteControlClientPlayState(), getCurrentPlayingIndex(), size()); } if (playerState == STARTED) { @@ -2842,6 +2842,8 @@ public class DownloadService extends Service { final Integer duration = getPlayerDuration(); final boolean isSeekable = isSeekable(); final int position = getPlayerPosition(); + final int index = getCurrentPlayingIndex(); + final int queueSize = size(); synchronized(onSongChangedListeners) { for (final OnSongChangedListener listener : onSongChangedListeners) { @@ -2861,7 +2863,7 @@ public class DownloadService extends Service { @Override public void run() { if(mRemoteControl != null) { - mRemoteControl.setPlaybackState(playerState.getRemoteControlClientPlayState()); + mRemoteControl.setPlaybackState(playerState.getRemoteControlClientPlayState(), index, queueSize); } } }); diff --git a/app/src/main/java/github/daneren2005/dsub/util/compat/RemoteControlClientBase.java b/app/src/main/java/github/daneren2005/dsub/util/compat/RemoteControlClientBase.java index 1f7035dc..4f9a27f0 100644 --- a/app/src/main/java/github/daneren2005/dsub/util/compat/RemoteControlClientBase.java +++ b/app/src/main/java/github/daneren2005/dsub/util/compat/RemoteControlClientBase.java @@ -29,7 +29,7 @@ public abstract class RemoteControlClientBase { public abstract void register(final Context context, final ComponentName mediaButtonReceiverComponent); public abstract void unregister(final Context context); - public abstract void setPlaybackState(int state); + public abstract void setPlaybackState(int state, int index, int queueSize); public abstract void updateMetadata(Context context, MusicDirectory.Entry currentSong); public abstract void metadataChanged(MusicDirectory.Entry currentSong); public abstract void updateAlbumArt(MusicDirectory.Entry currentSong, Bitmap bitmap); diff --git a/app/src/main/java/github/daneren2005/dsub/util/compat/RemoteControlClientICS.java b/app/src/main/java/github/daneren2005/dsub/util/compat/RemoteControlClientICS.java index 2a06e798..74076afb 100644 --- a/app/src/main/java/github/daneren2005/dsub/util/compat/RemoteControlClientICS.java +++ b/app/src/main/java/github/daneren2005/dsub/util/compat/RemoteControlClientICS.java @@ -54,7 +54,7 @@ public class RemoteControlClientICS extends RemoteControlClientBase { audioManager.unregisterRemoteControlClient(mRemoteControl); } - public void setPlaybackState(final int state) { + public void setPlaybackState(final int state, int index, int queueSize) { if(mRemoteControl == null) { return; } diff --git a/app/src/main/java/github/daneren2005/dsub/util/compat/RemoteControlClientJB.java b/app/src/main/java/github/daneren2005/dsub/util/compat/RemoteControlClientJB.java index e61e9a47..d10c8594 100644 --- a/app/src/main/java/github/daneren2005/dsub/util/compat/RemoteControlClientJB.java +++ b/app/src/main/java/github/daneren2005/dsub/util/compat/RemoteControlClientJB.java @@ -1,17 +1,10 @@ package github.daneren2005.dsub.util.compat; -import github.daneren2005.dsub.domain.MusicDirectory; -import github.daneren2005.dsub.util.ImageLoader; import android.annotation.TargetApi; -import android.app.PendingIntent; import android.content.ComponentName; import android.content.Context; -import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaMetadataRetriever; import android.media.RemoteControlClient; -import github.daneren2005.dsub.activity.SubsonicActivity; -import github.daneren2005.dsub.service.DownloadService; + import github.daneren2005.dsub.util.SilentBackgroundTask; @TargetApi(18) @@ -36,13 +29,13 @@ public class RemoteControlClientJB extends RemoteControlClientICS { return null; } }.execute(); - setPlaybackState(RemoteControlClient.PLAYSTATE_PLAYING); + setPlaybackState(RemoteControlClient.PLAYSTATE_PLAYING, 0, 0); } }); } @Override - public void setPlaybackState(final int state) { + public void setPlaybackState(final int state, int index, int queueSize) { if(mRemoteControl == null) { return; } diff --git a/app/src/main/java/github/daneren2005/dsub/util/compat/RemoteControlClientLP.java b/app/src/main/java/github/daneren2005/dsub/util/compat/RemoteControlClientLP.java index df468155..d666afb2 100644 --- a/app/src/main/java/github/daneren2005/dsub/util/compat/RemoteControlClientLP.java +++ b/app/src/main/java/github/daneren2005/dsub/util/compat/RemoteControlClientLP.java @@ -39,7 +39,6 @@ import android.support.v7.media.MediaRouter; import android.util.Log; import android.view.KeyEvent; -import java.io.Serializable; import java.util.ArrayList; import java.util.List; @@ -50,7 +49,6 @@ import github.daneren2005.dsub.domain.Bookmark; import github.daneren2005.dsub.domain.MusicDirectory; import github.daneren2005.dsub.domain.MusicDirectory.Entry; import github.daneren2005.dsub.domain.Playlist; -import github.daneren2005.dsub.domain.PodcastEpisode; import github.daneren2005.dsub.domain.SearchCritera; import github.daneren2005.dsub.domain.SearchResult; import github.daneren2005.dsub.service.DownloadFile; @@ -123,8 +121,12 @@ public class RemoteControlClientLP extends RemoteControlClientBase { mediaSession.release(); } + private void setPlaybackState(int state) { + setPlaybackState(state, downloadService.getCurrentPlayingIndex(), downloadService.size()); + } + @Override - public void setPlaybackState(int state) { + public void setPlaybackState(int state, int index, int queueSize) { PlaybackState.Builder builder = new PlaybackState.Builder(); int newState = PlaybackState.STATE_NONE; @@ -156,7 +158,7 @@ public class RemoteControlClientLP extends RemoteControlClientBase { isSong = entry.isSong(); } - builder.setActions(getPlaybackActions(isSong)); + builder.setActions(getPlaybackActions(isSong, index, queueSize)); if(entry != null) { addCustomActions(entry, builder); @@ -240,14 +242,12 @@ public class RemoteControlClientLP extends RemoteControlClientBase { return mediaSession; } - protected long getPlaybackActions(boolean isSong) { + protected long getPlaybackActions(boolean isSong, int currentIndex, int size) { long actions = PlaybackState.ACTION_PLAY | PlaybackState.ACTION_PAUSE | PlaybackState.ACTION_SEEK_TO | PlaybackState.ACTION_SKIP_TO_QUEUE_ITEM; - int currentIndex = downloadService.getCurrentPlayingIndex(); - int size = downloadService.size(); if(isSong) { if (currentIndex > 0) { actions |= PlaybackState.ACTION_SKIP_TO_PREVIOUS; -- cgit v1.2.3