From 5a1510d4431779a2f4c13159e21f29a8a11c4e6d Mon Sep 17 00:00:00 2001 From: Scott Jackson Date: Sun, 10 Nov 2013 22:41:59 -0800 Subject: Fix another Galaxy S3 freeze situation --- .../dsub/fragments/DownloadFragment.java | 98 +++++++++++++--------- 1 file changed, 58 insertions(+), 40 deletions(-) (limited to 'src') diff --git a/src/github/daneren2005/dsub/fragments/DownloadFragment.java b/src/github/daneren2005/dsub/fragments/DownloadFragment.java index 50960834..057b302f 100644 --- a/src/github/daneren2005/dsub/fragments/DownloadFragment.java +++ b/src/github/daneren2005/dsub/fragments/DownloadFragment.java @@ -103,6 +103,7 @@ public class DownloadFragment extends SubsonicFragment implements OnGestureListe private SongListAdapter songListAdapter; private SilentBackgroundTask onProgressChangedTask; private SilentBackgroundTask onCurrentChangedTask; + private SilentBackgroundTask onDownloadListChangedTask; private boolean seekInProgress = false; private boolean startFlipped = false; @@ -899,54 +900,71 @@ public class DownloadFragment extends SubsonicFragment implements OnGestureListe private void onDownloadListChanged() { onDownloadListChanged(false); } - private void onDownloadListChanged(boolean refresh) { - DownloadService downloadService = getDownloadService(); - if (downloadService == null) { + private void onDownloadListChanged(final boolean refresh) { + final DownloadService downloadService = getDownloadService(); + if (downloadService == null || onDownloadListChangedTask != null) { return; } - List list; - if(nowPlaying) { - list = downloadService.getSongs(); - } - else { - list = downloadService.getBackgroundDownloads(); - } + onDownloadListChangedTask = new SilentBackgroundTask(context) { + int currentPlayingIndex; + int size; - if(downloadService.isShufflePlayEnabled()) { - emptyTextView.setText(R.string.download_shuffle_loading); - } - else { - emptyTextView.setText(R.string.download_empty); - } + @Override + protected Void doInBackground() throws Throwable { + currentPlayingIndex = downloadService.getCurrentPlayingIndex() + 1; + size = downloadService.size(); + return null; + } - if(songListAdapter == null || refresh) { - playlistView.setAdapter(songListAdapter = new SongListAdapter(list)); - } else { - songListAdapter.notifyDataSetChanged(); - } - emptyTextView.setVisibility(list.isEmpty() ? View.VISIBLE : View.GONE); - currentRevision = downloadService.getDownloadListUpdateRevision(); + @Override + protected void done(Void result) { + List list; + if(nowPlaying) { + list = downloadService.getSongs(); + } + else { + list = downloadService.getBackgroundDownloads(); + } - switch (downloadService.getRepeatMode()) { - case OFF: - if("light".equals(SubsonicActivity.getThemeName()) | "light_fullscreen".equals(SubsonicActivity.getThemeName())) { - repeatButton.setImageResource(R.drawable.media_repeat_off_light); + if(downloadService.isShufflePlayEnabled()) { + emptyTextView.setText(R.string.download_shuffle_loading); + } + else { + emptyTextView.setText(R.string.download_empty); + } + + if(songListAdapter == null || refresh) { + playlistView.setAdapter(songListAdapter = new SongListAdapter(list)); } else { - repeatButton.setImageResource(R.drawable.media_repeat_off); + songListAdapter.notifyDataSetChanged(); } - break; - case ALL: - repeatButton.setImageResource(R.drawable.media_repeat_all); - break; - case SINGLE: - repeatButton.setImageResource(R.drawable.media_repeat_single); - break; - default: - break; - } - - setSubtitle(context.getResources().getString(R.string.download_playing_out_of, downloadService.getCurrentPlayingIndex() + 1, downloadService.size())); + emptyTextView.setVisibility(list.isEmpty() ? View.VISIBLE : View.GONE); + currentRevision = downloadService.getDownloadListUpdateRevision(); + + switch (downloadService.getRepeatMode()) { + case OFF: + if("light".equals(SubsonicActivity.getThemeName()) | "light_fullscreen".equals(SubsonicActivity.getThemeName())) { + repeatButton.setImageResource(R.drawable.media_repeat_off_light); + } else { + repeatButton.setImageResource(R.drawable.media_repeat_off); + } + break; + case ALL: + repeatButton.setImageResource(R.drawable.media_repeat_all); + break; + case SINGLE: + repeatButton.setImageResource(R.drawable.media_repeat_single); + break; + default: + break; + } + + setSubtitle(context.getResources().getString(R.string.download_playing_out_of, currentPlayingIndex, size)); + onDownloadListChangedTask = null; + } + }; + onDownloadListChangedTask.execute(); } private void onCurrentChanged() { -- cgit v1.2.3