propagate timeline changes to ShowQueue

This commit is contained in:
Adrian Ulrich 2014-10-17 09:08:34 +02:00
parent 12f2655ec8
commit c92bc5a56e
2 changed files with 46 additions and 16 deletions

View File

@ -264,7 +264,14 @@ public final class PlaybackService extends Service
* The appplication-wide instance of the PlaybackService.
*/
public static PlaybackService sInstance;
/**
* Static referenced-array to PlaybackActivities, used for callbacks
*/
private static final ArrayList<PlaybackActivity> sActivities = new ArrayList<PlaybackActivity>(5);
/**
* Static reference to the ShowQueueActivity
*/
private static ShowQueueActivity sShowQueueActivity = null;
/**
* Cached app-wide SharedPreferences instance.
*/
@ -1652,6 +1659,10 @@ public final class PlaybackService extends Service
// to processSong();
mHandler.removeMessages(GAPLESS_UPDATE);
mHandler.sendEmptyMessageDelayed(GAPLESS_UPDATE, 350);
if (sShowQueueActivity != null)
sShowQueueActivity.refreshSongQueueList(false);
}
@Override
@ -1720,6 +1731,14 @@ public final class PlaybackService extends Service
sActivities.remove(activity);
}
public static void addActivity(ShowQueueActivity activity) {
sShowQueueActivity = activity;
}
public static void removeActivity(ShowQueueActivity activity) {
sShowQueueActivity = null;
}
/**
* Initializes the service state, loading songs saved from the disk into the
* song timeline.

View File

@ -50,6 +50,8 @@ public class ShowQueueActivity
mListView.setFastScrollAlwaysVisible(true);
mListView.setEditable(true);
PlaybackService.addActivity(this);
mListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
@ -60,10 +62,6 @@ public class ShowQueueActivity
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
mService.jumpToQueuePosition(position);
/* This activity will stay open on longpress, so we have
* to update the playmerker ourselfs */
listAdapter.highlightRow(position);
listAdapter.notifyDataSetChanged();
return true;
}});
@ -89,6 +87,12 @@ public class ShowQueueActivity
refreshSongQueueList(true);
}
@Override
public void onDestroy() {
PlaybackService.removeActivity(this);
super.onDestroy();
}
/**
* Fired from adapter list if user moved an item
* @param from the item index that was dragged
@ -96,23 +100,30 @@ public class ShowQueueActivity
*/
public void onItemMoved(int from, int to) {
mService.moveSong(from, to);
refreshSongQueueList(false);
}
private void refreshSongQueueList(boolean scroll) {
int i, stotal, spos;
/**
* Triggers a refresh of the queueview
* @param scroll enable or disable jumping to the currently playing item
*/
public void refreshSongQueueList(final boolean scroll) {
runOnUiThread(new Runnable(){
public void run() {
int i, stotal, spos;
stotal = mService.getTimelineLength(); /* Total number of songs in queue */
spos = mService.getTimelinePosition(); /* Current position in queue */
stotal = mService.getTimelineLength(); /* Total number of songs in queue */
spos = mService.getTimelinePosition(); /* Current position in queue */
listAdapter.clear(); /* Flush all existing entries... */
listAdapter.highlightRow(spos); /* and highlight current position */
listAdapter.clear(); /* Flush all existing entries... */
listAdapter.highlightRow(spos); /* and highlight current position */
for(i=0 ; i<stotal; i++) {
listAdapter.add(mService.getSongByQueuePosition(i));
}
for(i=0 ; i<stotal; i++) {
listAdapter.add(mService.getSongByQueuePosition(i));
}
if (scroll == true)
mListView.setSelectionFromTop(spos, 0); /* scroll to currently playing song */
if (scroll == true)
mListView.setSelectionFromTop(spos, 0); /* scroll to currently playing song */
}
});
}