aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorScott Jackson <daneren2005@gmail.com>2014-02-06 07:18:04 -0800
committerScott Jackson <daneren2005@gmail.com>2014-02-06 07:18:04 -0800
commit7dcbd97e56f8abfd1cd1f6f6d9790f1996b41cc3 (patch)
tree5a1fcdfd49c141b2dbd11b5a384f8efe0fce3044 /src
parent4f1b3ff5e76cb0453e3b43784ef81d3a1b5abadc (diff)
downloaddsub-7dcbd97e56f8abfd1cd1f6f6d9790f1996b41cc3.tar.gz
dsub-7dcbd97e56f8abfd1cd1f6f6d9790f1996b41cc3.tar.bz2
dsub-7dcbd97e56f8abfd1cd1f6f6d9790f1996b41cc3.zip
#168 Shutdown shuffle buffer thread and use preference listeners
Diffstat (limited to 'src')
-rw-r--r--src/github/daneren2005/dsub/util/ShufflePlayBuffer.java33
1 files changed, 28 insertions, 5 deletions
diff --git a/src/github/daneren2005/dsub/util/ShufflePlayBuffer.java b/src/github/daneren2005/dsub/util/ShufflePlayBuffer.java
index 55858c03..fd7ffb72 100644
--- a/src/github/daneren2005/dsub/util/ShufflePlayBuffer.java
+++ b/src/github/daneren2005/dsub/util/ShufflePlayBuffer.java
@@ -44,14 +44,16 @@ public class ShufflePlayBuffer {
private static final int CAPACITY = 50;
private static final int REFILL_THRESHOLD = 40;
- private final ScheduledExecutorService executorService;
+ private ScheduledExecutorService executorService;
+ private Runnable runnable;
private boolean firstRun = true;
private final ArrayList<MusicDirectory.Entry> buffer = new ArrayList<MusicDirectory.Entry>();
private int lastCount = -1;
private Context context;
+
+ private SharedPreferences.OnSharedPreferenceChangeListener listener;
private int currentServer;
private String currentFolder = "";
-
private String genre = "";
private String startYear = "";
private String endYear = "";
@@ -60,7 +62,7 @@ public class ShufflePlayBuffer {
this.context = context;
executorService = Executors.newSingleThreadScheduledExecutor();
- Runnable runnable = new Runnable() {
+ runnable = new Runnable() {
@Override
public void run() {
refill();
@@ -71,6 +73,8 @@ public class ShufflePlayBuffer {
public List<MusicDirectory.Entry> get(int size) {
clearBufferIfnecessary();
+ // Make sure fetcher is running if needed
+ restart();
List<MusicDirectory.Entry> result = new ArrayList<MusicDirectory.Entry>(size);
synchronized (buffer) {
@@ -91,14 +95,24 @@ public class ShufflePlayBuffer {
public void shutdown() {
executorService.shutdown();
+ Util.getPreferences(context).unregisterOnSharedPreferenceChangeListener(listener);
}
- private void refill() {
+ private void restart() {
+ synchronized(buffer) {
+ if(buffer.size() <= REFILL_THRESHOLD && lastCount != 0 && executorService.isShutdown()) {
+ executorService = Executors.newSingleThreadScheduledExecutor();
+ executorService.scheduleWithFixedDelay(runnable, 0, 10, TimeUnit.SECONDS);
+ }
+ }
+ }
+ private void refill() {
// Check if active server has changed.
clearBufferIfnecessary();
if (buffer != null && (buffer.size() > REFILL_THRESHOLD || (!Util.isNetworkConnected(context) && !Util.isOffline(context)) || lastCount == 0)) {
+ executorService.shutdown();
return;
}
@@ -125,7 +139,7 @@ public class ShufflePlayBuffer {
synchronized (buffer) {
final SharedPreferences prefs = Util.getPreferences(context);
if (currentServer != Util.getActiveServer(context)
- || (currentFolder != null && !currentFolder.equals(Util.getSelectedMusicFolderId(context)))
+ || !Util.equals(currentFolder, Util.getSelectedMusicFolderId(context))
|| (genre != null && !genre.equals(prefs.getString(Constants.PREFERENCES_KEY_SHUFFLE_GENRE, "")))
|| (startYear != null && !startYear.equals(prefs.getString(Constants.PREFERENCES_KEY_SHUFFLE_START_YEAR, "")))
|| (endYear != null && !endYear.equals(prefs.getString(Constants.PREFERENCES_KEY_SHUFFLE_END_YEAR, "")))) {
@@ -142,6 +156,15 @@ public class ShufflePlayBuffer {
if(cacheList != null) {
buffer.addAll(cacheList);
}
+
+ listener = new SharedPreferences.OnSharedPreferenceChangeListener() {
+ @Override
+ public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
+ clearBufferIfnecessary();
+ restart();
+ }
+ };
+ prefs.registerOnSharedPreferenceChangeListener(listener);
firstRun = false;
} else {
// Clear cache