From 1c1fd68a30685db4970a9f5ac77d51090b96d2f3 Mon Sep 17 00:00:00 2001 From: Scott Jackson Date: Thu, 26 Jun 2014 20:36:54 -0700 Subject: Fix Show Media not being available on old album view --- src/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java | 1 + 1 file changed, 1 insertion(+) (limited to 'src') diff --git a/src/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java b/src/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java index e372bf51..0df04671 100644 --- a/src/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java +++ b/src/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java @@ -1164,6 +1164,7 @@ public class SelectDirectoryFragment extends SubsonicFragment implements Adapter } if(songCount == 0) { showHeader = false; + hideButtons = true; return null; } -- cgit v1.2.3 From db18bc94c5603da2db90d6c77154bd8df7e1ee25 Mon Sep 17 00:00:00 2001 From: Scott Jackson Date: Thu, 26 Jun 2014 20:40:38 -0700 Subject: Exception to playlist permissions for MusicCabinet --- src/github/daneren2005/dsub/fragments/SelectPlaylistFragment.java | 2 +- src/github/daneren2005/dsub/fragments/SubsonicFragment.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/github/daneren2005/dsub/fragments/SelectPlaylistFragment.java b/src/github/daneren2005/dsub/fragments/SelectPlaylistFragment.java index b07be642..2b328156 100644 --- a/src/github/daneren2005/dsub/fragments/SelectPlaylistFragment.java +++ b/src/github/daneren2005/dsub/fragments/SelectPlaylistFragment.java @@ -56,7 +56,7 @@ public class SelectPlaylistFragment extends SelectListFragment { if(!Util.checkServerVersion(context, "1.8")) { menu.removeItem(R.id.playlist_update_info); - } else if(playlist.getPublic() != null && playlist.getPublic() == true && !UserUtil.getCurrentUsername(context).equals(playlist.getOwner())) { + } else if(playlist.getPublic() != null && playlist.getPublic() == true && playlist.getId().indexOf(".m3u") == -1 && !UserUtil.getCurrentUsername(context).equals(playlist.getOwner())) { menu.removeItem(R.id.playlist_update_info); menu.removeItem(R.id.playlist_menu_delete); } diff --git a/src/github/daneren2005/dsub/fragments/SubsonicFragment.java b/src/github/daneren2005/dsub/fragments/SubsonicFragment.java index 1e3f832d..4a87fd39 100644 --- a/src/github/daneren2005/dsub/fragments/SubsonicFragment.java +++ b/src/github/daneren2005/dsub/fragments/SubsonicFragment.java @@ -832,7 +832,7 @@ public class SubsonicFragment extends Fragment implements SwipeRefreshLayout.OnR Iterator it = playlists.iterator(); while(it.hasNext()) { Playlist playlist = it.next(); - if(playlist.getPublic() == true && !UserUtil.getCurrentUsername(context).equals(playlist.getOwner())) { + if(playlist.getPublic() == true && playlist.getId().indexOf(".m3u") == -1 && !UserUtil.getCurrentUsername(context).equals(playlist.getOwner())) { it.remove(); } } -- cgit v1.2.3 From cfda4d70ed52147ff639103b380c47463b246eb4 Mon Sep 17 00:00:00 2001 From: Scott Jackson Date: Thu, 26 Jun 2014 22:30:33 -0700 Subject: Move sync notifications into central util as well --- .../dsub/service/sync/MostRecentSyncAdapter.java | 3 ++- .../dsub/service/sync/PlaylistSyncAdapter.java | 3 ++- .../dsub/service/sync/PodcastSyncAdapter.java | 3 ++- .../dsub/service/sync/StarredSyncAdapter.java | 4 +++- src/github/daneren2005/dsub/util/Notifications.java | 21 +++++++++++++++++++++ src/github/daneren2005/dsub/util/SyncUtil.java | 21 --------------------- 6 files changed, 30 insertions(+), 25 deletions(-) (limited to 'src') diff --git a/src/github/daneren2005/dsub/service/sync/MostRecentSyncAdapter.java b/src/github/daneren2005/dsub/service/sync/MostRecentSyncAdapter.java index 0801bf7c..6dfbbbe4 100644 --- a/src/github/daneren2005/dsub/service/sync/MostRecentSyncAdapter.java +++ b/src/github/daneren2005/dsub/service/sync/MostRecentSyncAdapter.java @@ -32,6 +32,7 @@ import github.daneren2005.dsub.domain.MusicDirectory; import github.daneren2005.dsub.domain.PodcastEpisode; import github.daneren2005.dsub.service.DownloadFile; import github.daneren2005.dsub.util.FileUtil; +import github.daneren2005.dsub.util.Notifications; import github.daneren2005.dsub.util.SyncUtil; import github.daneren2005.dsub.util.SyncUtil.SyncSet; import github.daneren2005.dsub.util.Util; @@ -89,7 +90,7 @@ public class MostRecentSyncAdapter extends SubsonicSyncAdapter { musicService.getIndexes(Util.getSelectedMusicFolderId(context), true, context, null); } - SyncUtil.showSyncNotification(context, R.string.sync_new_albums, SyncUtil.joinNames(updated)); + Notifications.showSyncNotification(context, R.string.sync_new_albums, SyncUtil.joinNames(updated)); } else if(firstRun) { FileUtil.serialize(context, syncedList, SyncUtil.getMostRecentSyncFile(context, instance)); } diff --git a/src/github/daneren2005/dsub/service/sync/PlaylistSyncAdapter.java b/src/github/daneren2005/dsub/service/sync/PlaylistSyncAdapter.java index f680becf..68bfdcb6 100644 --- a/src/github/daneren2005/dsub/service/sync/PlaylistSyncAdapter.java +++ b/src/github/daneren2005/dsub/service/sync/PlaylistSyncAdapter.java @@ -32,6 +32,7 @@ import github.daneren2005.dsub.domain.MusicDirectory; import github.daneren2005.dsub.service.DownloadFile; import github.daneren2005.dsub.service.parser.SubsonicRESTException; import github.daneren2005.dsub.util.FileUtil; +import github.daneren2005.dsub.util.Notifications; import github.daneren2005.dsub.util.SyncUtil; import github.daneren2005.dsub.util.SyncUtil.SyncSet; import github.daneren2005.dsub.util.Util; @@ -122,7 +123,7 @@ public class PlaylistSyncAdapter extends SubsonicSyncAdapter { } if(updated.size() > 0) { - SyncUtil.showSyncNotification(context, R.string.sync_new_playlists, SyncUtil.joinNames(updated)); + Notifications.showSyncNotification(context, R.string.sync_new_playlists, SyncUtil.joinNames(updated)); } } } diff --git a/src/github/daneren2005/dsub/service/sync/PodcastSyncAdapter.java b/src/github/daneren2005/dsub/service/sync/PodcastSyncAdapter.java index bd9f26c7..a1878cad 100644 --- a/src/github/daneren2005/dsub/service/sync/PodcastSyncAdapter.java +++ b/src/github/daneren2005/dsub/service/sync/PodcastSyncAdapter.java @@ -32,6 +32,7 @@ import github.daneren2005.dsub.domain.MusicDirectory; import github.daneren2005.dsub.domain.PodcastEpisode; import github.daneren2005.dsub.service.DownloadFile; import github.daneren2005.dsub.service.parser.SubsonicRESTException; +import github.daneren2005.dsub.util.Notifications; import github.daneren2005.dsub.util.SyncUtil; import github.daneren2005.dsub.util.SyncUtil.SyncSet; import github.daneren2005.dsub.util.FileUtil; @@ -104,7 +105,7 @@ public class PodcastSyncAdapter extends SubsonicSyncAdapter { // Make sure there are is at least one change before re-syncing if(updated.size() > 0) { FileUtil.serialize(context, podcastList, SyncUtil.getPodcastSyncFile(context, instance)); - SyncUtil.showSyncNotification(context, R.string.sync_new_podcasts, SyncUtil.joinNames(updated)); + Notifications.showSyncNotification(context, R.string.sync_new_podcasts, SyncUtil.joinNames(updated)); } } catch(Exception e) { Log.w(TAG, "Failed to get podcasts for " + Util.getServerName(context, instance)); diff --git a/src/github/daneren2005/dsub/service/sync/StarredSyncAdapter.java b/src/github/daneren2005/dsub/service/sync/StarredSyncAdapter.java index 54c10f41..b99c501d 100644 --- a/src/github/daneren2005/dsub/service/sync/StarredSyncAdapter.java +++ b/src/github/daneren2005/dsub/service/sync/StarredSyncAdapter.java @@ -20,6 +20,7 @@ package github.daneren2005.dsub.service.sync; import android.annotation.TargetApi; +import android.app.Notification; import android.content.Context; import android.util.Log; @@ -29,6 +30,7 @@ import java.util.ArrayList; import github.daneren2005.dsub.R; import github.daneren2005.dsub.domain.MusicDirectory; import github.daneren2005.dsub.util.FileUtil; +import github.daneren2005.dsub.util.Notifications; import github.daneren2005.dsub.util.SyncUtil; import github.daneren2005.dsub.util.Util; @@ -69,7 +71,7 @@ public class StarredSyncAdapter extends SubsonicSyncAdapter { SyncUtil.setSyncedStarred(syncedList, context, instance); if(updated) { - SyncUtil.showSyncNotification(context, R.string.sync_new_starred, null); + Notifications.showSyncNotification(context, R.string.sync_new_starred, null); } } catch(Exception e) { Log.e(TAG, "Failed to get starred list for " + Util.getServerName(context, instance)); diff --git a/src/github/daneren2005/dsub/util/Notifications.java b/src/github/daneren2005/dsub/util/Notifications.java index 3eec7517..c6e9b14f 100644 --- a/src/github/daneren2005/dsub/util/Notifications.java +++ b/src/github/daneren2005/dsub/util/Notifications.java @@ -286,6 +286,27 @@ public final class Notifications { } } + public static void showSyncNotification(final Context context, int stringId, String extra) { + if(Util.getPreferences(context).getBoolean(Constants.PREFERENCES_KEY_SYNC_NOTIFICATION, true)) { + String content = (extra != null) ? context.getResources().getString(stringId, extra) : context.getResources().getString(stringId); + + NotificationCompat.Builder builder; + builder = new NotificationCompat.Builder(context) + .setSmallIcon(R.drawable.stat_notify_sync) + .setContentTitle(context.getResources().getString(R.string.sync_title)) + .setContentText(content) + .setStyle(new NotificationCompat.BigTextStyle().bigText(content.replace(", ", "\n"))) + .setOngoing(false); + + Intent notificationIntent = new Intent(context, SubsonicFragmentActivity.class); + notificationIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP); + builder.setContentIntent(PendingIntent.getActivity(context, 2, notificationIntent, 0)); + + NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); + notificationManager.notify(stringId, builder.build()); + } + } + /** * Resolves the default text color for notifications. * diff --git a/src/github/daneren2005/dsub/util/SyncUtil.java b/src/github/daneren2005/dsub/util/SyncUtil.java index 0c567681..15fa2d47 100644 --- a/src/github/daneren2005/dsub/util/SyncUtil.java +++ b/src/github/daneren2005/dsub/util/SyncUtil.java @@ -181,27 +181,6 @@ public final class SyncUtil { return "sync-most_recent-" + (Util.getRestUrl(context, null, instance, false)).hashCode() + ".ser"; } - public static void showSyncNotification(final Context context, int stringId, String extra) { - if(Util.getPreferences(context).getBoolean(Constants.PREFERENCES_KEY_SYNC_NOTIFICATION, true)) { - String content = (extra != null) ? context.getResources().getString(stringId, extra) : context.getResources().getString(stringId); - - NotificationCompat.Builder builder; - builder = new NotificationCompat.Builder(context) - .setSmallIcon(R.drawable.stat_notify_sync) - .setContentTitle(context.getResources().getString(R.string.sync_title)) - .setContentText(content) - .setStyle(new NotificationCompat.BigTextStyle().bigText(content.replace(", ", "\n"))) - .setOngoing(false); - - Intent notificationIntent = new Intent(context, SubsonicFragmentActivity.class); - notificationIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP); - builder.setContentIntent(PendingIntent.getActivity(context, 2, notificationIntent, 0)); - - NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); - notificationManager.notify(stringId, builder.build()); - } - } - public static String joinNames(List names) { StringBuilder builder = new StringBuilder(); for (String val : names) { -- cgit v1.2.3 From ed010604dfc7dcda226b99c39ade8204d8824a0b Mon Sep 17 00:00:00 2001 From: daneren2005 Date: Fri, 27 Jun 2014 09:54:30 -0700 Subject: Serialize when turning on remove played --- src/github/daneren2005/dsub/service/DownloadService.java | 1 + 1 file changed, 1 insertion(+) (limited to 'src') diff --git a/src/github/daneren2005/dsub/service/DownloadService.java b/src/github/daneren2005/dsub/service/DownloadService.java index 4c0c9151..0c5c8e24 100644 --- a/src/github/daneren2005/dsub/service/DownloadService.java +++ b/src/github/daneren2005/dsub/service/DownloadService.java @@ -410,6 +410,7 @@ public class DownloadService extends Service { removePlayed = enabled; if(removePlayed) { checkDownloads(); + lifecycleSupport.serializeDownloadQueue(); } SharedPreferences.Editor editor = Util.getPreferences(this).edit(); editor.putBoolean(Constants.PREFERENCES_KEY_REMOVE_PLAYED, enabled); -- cgit v1.2.3 From 097b04ed83250619def3935df3808b9d57bbc391 Mon Sep 17 00:00:00 2001 From: daneren2005 Date: Fri, 27 Jun 2014 15:52:41 -0700 Subject: Don't try to scrobble if supposed to be online but isn't --- src/github/daneren2005/dsub/service/Scrobbler.java | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'src') diff --git a/src/github/daneren2005/dsub/service/Scrobbler.java b/src/github/daneren2005/dsub/service/Scrobbler.java index 1f831a80..9958ff9e 100644 --- a/src/github/daneren2005/dsub/service/Scrobbler.java +++ b/src/github/daneren2005/dsub/service/Scrobbler.java @@ -24,6 +24,11 @@ public class Scrobbler { if (song == null || !Util.isScrobblingEnabled(context)) { return; } + + // Ignore if online with no network access + if(!Util.isOffline(context) && !Util.isNetworkConnected(context)) { + return; + } // Ignore podcasts if(song.getSong() instanceof PodcastEpisode) { -- cgit v1.2.3 From 8d21df50cb8a7cd0961c054d0050c1b2634c503d Mon Sep 17 00:00:00 2001 From: daneren2005 Date: Fri, 27 Jun 2014 16:05:53 -0700 Subject: Set sync notifications to group and have a low priority --- src/github/daneren2005/dsub/util/Notifications.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/github/daneren2005/dsub/util/Notifications.java b/src/github/daneren2005/dsub/util/Notifications.java index c6e9b14f..ca76e5ba 100644 --- a/src/github/daneren2005/dsub/util/Notifications.java +++ b/src/github/daneren2005/dsub/util/Notifications.java @@ -48,6 +48,7 @@ public final class Notifications { // Notification IDs. public static final int NOTIFICATION_ID_PLAYING = 100; public static final int NOTIFICATION_ID_DOWNLOADING = 102; + public static final String NOTIFICATION_SYNC_GROUP = "github.daneren2005.dsub.sync"; private static boolean playShowing = false; private static boolean downloadShowing = false; @@ -296,7 +297,9 @@ public final class Notifications { .setContentTitle(context.getResources().getString(R.string.sync_title)) .setContentText(content) .setStyle(new NotificationCompat.BigTextStyle().bigText(content.replace(", ", "\n"))) - .setOngoing(false); + .setOngoing(false) + .setGroup(NOTIFICATION_SYNC_GROUP) + .setPriority(NotificationCompat.PRIORITY_LOW); Intent notificationIntent = new Intent(context, SubsonicFragmentActivity.class); notificationIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP); -- cgit v1.2.3 From 44460d426bae0a074fe2dbd5cec79b0c370bf1f2 Mon Sep 17 00:00:00 2001 From: daneren2005 Date: Fri, 27 Jun 2014 16:14:22 -0700 Subject: Set Now Playing notification as high priority --- src/github/daneren2005/dsub/util/Notifications.java | 1 + 1 file changed, 1 insertion(+) (limited to 'src') diff --git a/src/github/daneren2005/dsub/util/Notifications.java b/src/github/daneren2005/dsub/util/Notifications.java index ca76e5ba..de4129e9 100644 --- a/src/github/daneren2005/dsub/util/Notifications.java +++ b/src/github/daneren2005/dsub/util/Notifications.java @@ -67,6 +67,7 @@ public final class Notifications { RemoteViews expandedContentView = new RemoteViews(context.getPackageName(), R.layout.notification_expanded); setupViews(expandedContentView,context,song, playing, remote); notification.bigContentView = expandedContentView; + notification.priority = Notification.PRIORITY_HIGH; } RemoteViews smallContentView = new RemoteViews(context.getPackageName(), R.layout.notification); -- cgit v1.2.3 From a525c940f3e3910c052f9caffa906048bdab14fc Mon Sep 17 00:00:00 2001 From: Scott Jackson Date: Sat, 28 Jun 2014 09:21:03 -0700 Subject: Fix for threads in pool exiting --- .../daneren2005/dsub/service/DownloadService.java | 5 +++++ src/github/daneren2005/dsub/util/BackgroundTask.java | 17 ++++++++++++----- 2 files changed, 17 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/github/daneren2005/dsub/service/DownloadService.java b/src/github/daneren2005/dsub/service/DownloadService.java index 0c5c8e24..0a13e16e 100644 --- a/src/github/daneren2005/dsub/service/DownloadService.java +++ b/src/github/daneren2005/dsub/service/DownloadService.java @@ -29,6 +29,7 @@ import static github.daneren2005.dsub.domain.PlayerState.PREPARING; import static github.daneren2005.dsub.domain.PlayerState.STARTED; import static github.daneren2005.dsub.domain.PlayerState.STOPPED; +import github.daneren2005.dsub.R; import github.daneren2005.dsub.audiofx.AudioEffectsController; import github.daneren2005.dsub.audiofx.EqualizerController; import github.daneren2005.dsub.audiofx.VisualizerController; @@ -45,6 +46,7 @@ import github.daneren2005.dsub.util.Constants; import github.daneren2005.dsub.util.MediaRouteManager; import github.daneren2005.dsub.util.ShufflePlayBuffer; import github.daneren2005.dsub.util.SimpleServiceBinder; +import github.daneren2005.dsub.util.SyncUtil; import github.daneren2005.dsub.util.Util; import github.daneren2005.dsub.util.compat.RemoteControlClientHelper; import github.daneren2005.serverproxy.BufferProxy; @@ -263,9 +265,11 @@ public class DownloadService extends Service { if(bufferTask != null) { bufferTask.cancel(); + bufferTask = null; } if(nextPlayingTask != null) { nextPlayingTask.cancel(); + nextPlayingTask = null; } if(remoteController != null) { remoteController.stop(); @@ -975,6 +979,7 @@ public class DownloadService extends Service { public synchronized void reset() { if (bufferTask != null) { bufferTask.cancel(); + bufferTask = null; } try { // Only set to idle if it's not being killed to start RemoteController diff --git a/src/github/daneren2005/dsub/util/BackgroundTask.java b/src/github/daneren2005/dsub/util/BackgroundTask.java index 63515f19..ad9d89c0 100644 --- a/src/github/daneren2005/dsub/util/BackgroundTask.java +++ b/src/github/daneren2005/dsub/util/BackgroundTask.java @@ -135,13 +135,20 @@ public abstract class BackgroundTask implements ProgressListener { } public void cancel() { - cancelled = true; - if(task != null) { - task.cancel(); + if(cancelled) { + // Already cancelled, don't do anything + return; } - if(cancelListener != null) { - cancelListener.onCancel(); + cancelled = true; + if(task != null && task.isRunning()) { + if(cancelListener != null) { + cancelListener.onCancel(); + } else { + task.cancel(); + } + + task = null; } } public boolean isCancelled() { -- cgit v1.2.3 From ddefc94516d121eb6b6681237a73f7eebdc7250d Mon Sep 17 00:00:00 2001 From: Scott Jackson Date: Sat, 28 Jun 2014 12:20:52 -0700 Subject: Fix for switching now playing not stopping old download --- .../daneren2005/dsub/service/DownloadFile.java | 8 +++++--- .../daneren2005/dsub/service/RESTMusicService.java | 10 +++++---- .../daneren2005/dsub/util/BackgroundTask.java | 24 +++++++++------------- src/github/daneren2005/dsub/util/ImageLoader.java | 4 ++-- src/github/daneren2005/dsub/util/LoadingTask.java | 4 ++-- .../daneren2005/dsub/util/TabBackgroundTask.java | 2 +- 6 files changed, 26 insertions(+), 26 deletions(-) (limited to 'src') diff --git a/src/github/daneren2005/dsub/service/DownloadFile.java b/src/github/daneren2005/dsub/service/DownloadFile.java index c82607f5..4fb6bb42 100644 --- a/src/github/daneren2005/dsub/service/DownloadFile.java +++ b/src/github/daneren2005/dsub/service/DownloadFile.java @@ -237,7 +237,7 @@ public class DownloadFile implements BufferFile { @Override public synchronized void onResume() { - if(!isFailedMax() && !isDownloading()) { + if(!isFailedMax() && !isDownloading() && !isDownloadCancelled()) { download(); } } @@ -477,8 +477,10 @@ public class DownloadFile implements BufferFile { } // Only run these if not interrupted, ie: cancelled - new CacheCleaner(context, DownloadService.getInstance()).cleanSpace(); - checkDownloads(); + if(!isCancelled()) { + new CacheCleaner(context, DownloadService.getInstance()).cleanSpace(); + checkDownloads(); + } return null; } diff --git a/src/github/daneren2005/dsub/service/RESTMusicService.java b/src/github/daneren2005/dsub/service/RESTMusicService.java index 3299ec4b..43d443d2 100644 --- a/src/github/daneren2005/dsub/service/RESTMusicService.java +++ b/src/github/daneren2005/dsub/service/RESTMusicService.java @@ -92,6 +92,7 @@ import github.daneren2005.dsub.service.parser.UserParser; import github.daneren2005.dsub.service.parser.VersionParser; import github.daneren2005.dsub.service.ssl.SSLSocketFactory; import github.daneren2005.dsub.service.ssl.TrustSelfSignedStrategy; +import github.daneren2005.dsub.util.BackgroundTask; import github.daneren2005.dsub.util.SilentBackgroundTask; import github.daneren2005.dsub.util.Constants; import github.daneren2005.dsub.util.FileUtil; @@ -1526,7 +1527,7 @@ public class RESTMusicService implements MusicService { HttpConnectionParams.setSoTimeout(newParams, networkTimeout); httpClient.setParams(newParams); - final AtomicReference cancelled = new AtomicReference(false); + final AtomicReference isCancelled = new AtomicReference(false); int attempts = 0; while (true) { attempts++; @@ -1535,10 +1536,11 @@ public class RESTMusicService implements MusicService { if (task != null) { // Attempt to abort the HTTP request if the task is cancelled. - task.setOnCancelListener(new SilentBackgroundTask.OnCancelListener() { + task.setOnCancelListener(new BackgroundTask.OnCancelListener() { @Override public void onCancel() { try { + isCancelled.set(true); request.abort(); } catch(Exception e) { Log.e(TAG, "Failed to stop http task"); @@ -1579,14 +1581,14 @@ public class RESTMusicService implements MusicService { return response; } catch (IOException x) { request.abort(); - if (attempts >= HTTP_REQUEST_MAX_ATTEMPTS || cancelled.get()) { + if (attempts >= HTTP_REQUEST_MAX_ATTEMPTS || isCancelled.get()) { throw x; } if (progressListener != null) { String msg = context.getResources().getString(R.string.music_service_retry, attempts, HTTP_REQUEST_MAX_ATTEMPTS - 1); progressListener.updateProgress(msg); } - Log.w(TAG, "Got IOException (" + attempts + "), will retry", x); + Log.w(TAG, "Got IOException " + x + " (" + attempts + "), will retry"); increaseTimeouts(requestParams); Thread.sleep(2000L); } diff --git a/src/github/daneren2005/dsub/util/BackgroundTask.java b/src/github/daneren2005/dsub/util/BackgroundTask.java index ad9d89c0..f64acbff 100644 --- a/src/github/daneren2005/dsub/util/BackgroundTask.java +++ b/src/github/daneren2005/dsub/util/BackgroundTask.java @@ -44,7 +44,7 @@ public abstract class BackgroundTask implements ProgressListener { private static final String TAG = BackgroundTask.class.getSimpleName(); private final Context context; - protected boolean cancelled = false; + protected AtomicBoolean cancelled = new AtomicBoolean(false); protected OnCancelListener cancelListener; protected Task task; @@ -135,24 +135,20 @@ public abstract class BackgroundTask implements ProgressListener { } public void cancel() { - if(cancelled) { - // Already cancelled, don't do anything - return; - } + if(cancelled.compareAndSet(false, true)) { + if(task != null && task.isRunning()) { + if(cancelListener != null) { + cancelListener.onCancel(); + } else { + task.cancel(); + } - cancelled = true; - if(task != null && task.isRunning()) { - if(cancelListener != null) { - cancelListener.onCancel(); - } else { - task.cancel(); + task = null; } - - task = null; } } public boolean isCancelled() { - return cancelled; + return cancelled.get(); } public void setOnCancelListener(OnCancelListener listener) { cancelListener = listener; diff --git a/src/github/daneren2005/dsub/util/ImageLoader.java b/src/github/daneren2005/dsub/util/ImageLoader.java index f9c5fed5..dc10ebba 100644 --- a/src/github/daneren2005/dsub/util/ImageLoader.java +++ b/src/github/daneren2005/dsub/util/ImageLoader.java @@ -292,7 +292,7 @@ public class ImageLoader { mDrawable = Util.createDrawableFromBitmap(mContext, bitmap); } catch (Throwable x) { Log.e(TAG, "Failed to download album art.", x); - cancelled = true; + cancelled.set(true); } return null; @@ -358,7 +358,7 @@ public class ImageLoader { } } catch (Throwable x) { Log.e(TAG, "Failed to download album art.", x); - cancelled = true; + cancelled.set(true); } return null; diff --git a/src/github/daneren2005/dsub/util/LoadingTask.java b/src/github/daneren2005/dsub/util/LoadingTask.java index f774aa5b..6c3385d2 100644 --- a/src/github/daneren2005/dsub/util/LoadingTask.java +++ b/src/github/daneren2005/dsub/util/LoadingTask.java @@ -52,12 +52,12 @@ public abstract class LoadingTask extends BackgroundTask { @Override public boolean isCancelled() { - return (tabActivity instanceof SubsonicActivity && ((SubsonicActivity) tabActivity).isDestroyedCompat()) || cancelled; + return (tabActivity instanceof SubsonicActivity && ((SubsonicActivity) tabActivity).isDestroyedCompat()) || cancelled.get(); } @Override public void updateProgress(final String message) { - if(!cancelled) { + if(!cancelled.get()) { getHandler().post(new Runnable() { @Override public void run() { diff --git a/src/github/daneren2005/dsub/util/TabBackgroundTask.java b/src/github/daneren2005/dsub/util/TabBackgroundTask.java index 022bcaa7..b0a24b28 100644 --- a/src/github/daneren2005/dsub/util/TabBackgroundTask.java +++ b/src/github/daneren2005/dsub/util/TabBackgroundTask.java @@ -36,7 +36,7 @@ public abstract class TabBackgroundTask extends BackgroundTask { @Override public boolean isCancelled() { - return !tabFragment.isAdded() || cancelled; + return !tabFragment.isAdded() || cancelled.get(); } @Override -- cgit v1.2.3 From 9a68c8ed3ae8cea08d41cd97e03e41ce884f95d4 Mon Sep 17 00:00:00 2001 From: Scott Jackson Date: Sat, 28 Jun 2014 12:21:36 -0700 Subject: Accidental extra tab --- src/github/daneren2005/dsub/service/RESTMusicService.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/github/daneren2005/dsub/service/RESTMusicService.java b/src/github/daneren2005/dsub/service/RESTMusicService.java index 43d443d2..4f53cb30 100644 --- a/src/github/daneren2005/dsub/service/RESTMusicService.java +++ b/src/github/daneren2005/dsub/service/RESTMusicService.java @@ -1539,12 +1539,12 @@ public class RESTMusicService implements MusicService { task.setOnCancelListener(new BackgroundTask.OnCancelListener() { @Override public void onCancel() { - try { - isCancelled.set(true); - request.abort(); - } catch(Exception e) { - Log.e(TAG, "Failed to stop http task"); - } + try { + isCancelled.set(true); + request.abort(); + } catch(Exception e) { + Log.e(TAG, "Failed to stop http task"); + } } }); } -- cgit v1.2.3 From 8f32ac4778ceebe754970b98cdc928de2ebf9b60 Mon Sep 17 00:00:00 2001 From: Scott Jackson Date: Sat, 28 Jun 2014 12:24:40 -0700 Subject: Revert, just kidding --- src/github/daneren2005/dsub/service/RESTMusicService.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/github/daneren2005/dsub/service/RESTMusicService.java b/src/github/daneren2005/dsub/service/RESTMusicService.java index 4f53cb30..43d443d2 100644 --- a/src/github/daneren2005/dsub/service/RESTMusicService.java +++ b/src/github/daneren2005/dsub/service/RESTMusicService.java @@ -1539,12 +1539,12 @@ public class RESTMusicService implements MusicService { task.setOnCancelListener(new BackgroundTask.OnCancelListener() { @Override public void onCancel() { - try { - isCancelled.set(true); - request.abort(); - } catch(Exception e) { - Log.e(TAG, "Failed to stop http task"); - } + try { + isCancelled.set(true); + request.abort(); + } catch(Exception e) { + Log.e(TAG, "Failed to stop http task"); + } } }); } -- cgit v1.2.3 From b24f517aed50fcd72613c5b9b57bab760464ac65 Mon Sep 17 00:00:00 2001 From: Scott Jackson Date: Sat, 28 Jun 2014 12:39:15 -0700 Subject: Trigger UI update immediately after changing fragments --- src/github/daneren2005/dsub/fragments/SubsonicFragment.java | 3 +++ src/github/daneren2005/dsub/view/UpdateView.java | 8 ++++++++ 2 files changed, 11 insertions(+) (limited to 'src') diff --git a/src/github/daneren2005/dsub/fragments/SubsonicFragment.java b/src/github/daneren2005/dsub/fragments/SubsonicFragment.java index 4a87fd39..5a643daa 100644 --- a/src/github/daneren2005/dsub/fragments/SubsonicFragment.java +++ b/src/github/daneren2005/dsub/fragments/SubsonicFragment.java @@ -67,6 +67,8 @@ import github.daneren2005.dsub.util.SilentBackgroundTask; import github.daneren2005.dsub.util.LoadingTask; import github.daneren2005.dsub.util.UserUtil; import github.daneren2005.dsub.util.Util; +import github.daneren2005.dsub.view.UpdateView; + import java.io.File; import java.text.DateFormat; import java.text.SimpleDateFormat; @@ -124,6 +126,7 @@ public class SubsonicFragment extends Fragment implements SwipeRefreshLayout.OnR @Override public void onResume() { super.onResume(); + UpdateView.triggerUpdate(); } @Override diff --git a/src/github/daneren2005/dsub/view/UpdateView.java b/src/github/daneren2005/dsub/view/UpdateView.java index 66f34471..5278f83a 100644 --- a/src/github/daneren2005/dsub/view/UpdateView.java +++ b/src/github/daneren2005/dsub/view/UpdateView.java @@ -123,6 +123,14 @@ public class UpdateView extends LinearLayout { }, "UpdateView").start(); } + public static synchronized void triggerUpdate() { + if(backgroundHandler != null) { + uiHandler.removeCallbacksAndMessages(null); + backgroundHandler.removeCallbacksAndMessages(null); + uiHandler.post(updateRunnable); + } + } + private static void updateAll() { try { // If nothing can see this, stop updating -- cgit v1.2.3 From 5f8673f0ef2589697a66e71e2b2010475acacb8a Mon Sep 17 00:00:00 2001 From: daneren2005 Date: Mon, 30 Jun 2014 09:27:13 -0700 Subject: Return fast scroll hack for only 4.4.2 --- src/github/daneren2005/dsub/fragments/SelectArtistFragment.java | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'src') diff --git a/src/github/daneren2005/dsub/fragments/SelectArtistFragment.java b/src/github/daneren2005/dsub/fragments/SelectArtistFragment.java index 08d9c13a..4817967f 100644 --- a/src/github/daneren2005/dsub/fragments/SelectArtistFragment.java +++ b/src/github/daneren2005/dsub/fragments/SelectArtistFragment.java @@ -64,6 +64,10 @@ public class SelectArtistFragment extends SelectListFragment { public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle bundle) { folderButton = null; super.onCreateView(inflater, container, bundle); + + if("4.4.2".equals(Build.VERSION.RELEASE)) { + listView.setFastScrollAlwaysVisible(true); + } if(objects != null) { if (Util.isOffline(context) || Util.isTagBrowsing(context)) { -- cgit v1.2.3 From 40d6b10e23800fff096f99677d2812f3a0efb599 Mon Sep 17 00:00:00 2001 From: daneren2005 Date: Mon, 30 Jun 2014 10:58:40 -0700 Subject: #369 Don't allow change password if not settingsRole --- src/github/daneren2005/dsub/fragments/UserFragment.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/github/daneren2005/dsub/fragments/UserFragment.java b/src/github/daneren2005/dsub/fragments/UserFragment.java index 1ad62d87..7a6eab9f 100644 --- a/src/github/daneren2005/dsub/fragments/UserFragment.java +++ b/src/github/daneren2005/dsub/fragments/UserFragment.java @@ -82,8 +82,10 @@ public class UserFragment extends SubsonicFragment{ if(UserUtil.isCurrentAdmin() && Util.checkServerVersion(context, "1.10")) { menuInflater.inflate(R.menu.user, menu); - } else { + } else if(UserUtil.isCurrentRole("settingsRole")) { menuInflater.inflate(R.menu.user_user, menu); + } else { + menuInflater.inflate(R.menu.empty, menu); } } -- cgit v1.2.3 From 6aed8bf8a104693928bec7958978f273fec6531a Mon Sep 17 00:00:00 2001 From: daneren2005 Date: Mon, 30 Jun 2014 10:59:46 -0700 Subject: #369 Don't allow change password if not settingsRole --- src/github/daneren2005/dsub/fragments/AdminFragment.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/github/daneren2005/dsub/fragments/AdminFragment.java b/src/github/daneren2005/dsub/fragments/AdminFragment.java index 5e14aff5..cbced58c 100644 --- a/src/github/daneren2005/dsub/fragments/AdminFragment.java +++ b/src/github/daneren2005/dsub/fragments/AdminFragment.java @@ -70,7 +70,7 @@ public class AdminFragment extends SelectListFragment { MenuInflater inflater = context.getMenuInflater(); if(UserUtil.isCurrentAdmin()) { inflater.inflate(R.menu.admin_context, menu); - } else { + } else if(UserUtil.isCurrentRole("settingsRole")) { inflater.inflate(R.menu.admin_context_user, menu); } } -- cgit v1.2.3 From 3ba6075d9b06484f8ddafceb7578d4788e3d01fa Mon Sep 17 00:00:00 2001 From: daneren2005 Date: Mon, 30 Jun 2014 13:11:54 -0700 Subject: Fix clearing current playing when downloading in background --- src/github/daneren2005/dsub/service/DownloadService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/github/daneren2005/dsub/service/DownloadService.java b/src/github/daneren2005/dsub/service/DownloadService.java index 0a13e16e..a998c655 100644 --- a/src/github/daneren2005/dsub/service/DownloadService.java +++ b/src/github/daneren2005/dsub/service/DownloadService.java @@ -593,7 +593,7 @@ public class DownloadService extends Service { reset(); downloadList.clear(); revision++; - if (currentDownloading != null) { + if (currentDownloading != null && !backgroundDownloadList.contains(currentDownloading)) { currentDownloading.cancelDownload(); currentDownloading = null; } -- cgit v1.2.3 From e6e25fd2c136a1c5dc884074b9e6556eaa750129 Mon Sep 17 00:00:00 2001 From: daneren2005 Date: Mon, 30 Jun 2014 15:15:20 -0700 Subject: Added serverType constant --- src/github/daneren2005/dsub/util/Constants.java | 1 + 1 file changed, 1 insertion(+) (limited to 'src') diff --git a/src/github/daneren2005/dsub/util/Constants.java b/src/github/daneren2005/dsub/util/Constants.java index 0c263d3a..ec686529 100644 --- a/src/github/daneren2005/dsub/util/Constants.java +++ b/src/github/daneren2005/dsub/util/Constants.java @@ -73,6 +73,7 @@ public final class Constants { public static final String PREFERENCES_KEY_SERVER_INTERNAL_URL = "serverInternalUrl"; public static final String PREFERENCES_KEY_SERVER_LOCAL_NETWORK_SSID = "serverLocalNetworkSSID"; public static final String PREFERENCES_KEY_SERVER_VERSION = "serverVersion"; + public static final String PREFERENCES_KEY_SERVER_TYPE = "serverType"; public static final String PREFERENCES_KEY_TEST_CONNECTION = "serverTestConnection"; public static final String PREFERENCES_KEY_OPEN_BROWSER = "openBrowser"; public static final String PREFERENCES_KEY_MUSIC_FOLDER_ID = "musicFolderId"; -- cgit v1.2.3 From 03d752e2f9551d02080b6680a4ac291a3e11cef7 Mon Sep 17 00:00:00 2001 From: daneren2005 Date: Mon, 30 Jun 2014 15:27:12 -0700 Subject: Trigger view update when toggling to view songs --- src/github/daneren2005/dsub/fragments/NowPlayingFragment.java | 3 +++ 1 file changed, 3 insertions(+) (limited to 'src') diff --git a/src/github/daneren2005/dsub/fragments/NowPlayingFragment.java b/src/github/daneren2005/dsub/fragments/NowPlayingFragment.java index e7c34d9a..3486f154 100644 --- a/src/github/daneren2005/dsub/fragments/NowPlayingFragment.java +++ b/src/github/daneren2005/dsub/fragments/NowPlayingFragment.java @@ -69,6 +69,7 @@ import github.daneren2005.dsub.util.SilentBackgroundTask; import github.daneren2005.dsub.view.DownloadFileAdapter; import github.daneren2005.dsub.view.FadeOutAnimation; import github.daneren2005.dsub.view.SongView; +import github.daneren2005.dsub.view.UpdateView; import github.daneren2005.dsub.util.Util; import github.daneren2005.dsub.view.VisualizerView; @@ -1008,6 +1009,8 @@ public class NowPlayingFragment extends SubsonicFragment implements OnGestureLis playlistFlipper.setInAnimation(AnimationUtils.loadAnimation(context, R.anim.push_up_in)); playlistFlipper.setOutAnimation(AnimationUtils.loadAnimation(context, R.anim.push_up_out)); playlistFlipper.setDisplayedChild(1); + + UpdateView.triggerUpdate(); } } -- cgit v1.2.3 From 72e6f108d614f8e053582d4144c75494dbc1383e Mon Sep 17 00:00:00 2001 From: daneren2005 Date: Tue, 1 Jul 2014 11:31:30 -0700 Subject: Use the User Constant --- src/github/daneren2005/dsub/util/Util.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/github/daneren2005/dsub/util/Util.java b/src/github/daneren2005/dsub/util/Util.java index 72fc8511..02cb8eb9 100644 --- a/src/github/daneren2005/dsub/util/Util.java +++ b/src/github/daneren2005/dsub/util/Util.java @@ -8,7 +8,6 @@ Subsonic is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License @@ -62,6 +61,7 @@ import github.daneren2005.dsub.activity.SubsonicFragmentActivity; import github.daneren2005.dsub.domain.MusicDirectory; import github.daneren2005.dsub.domain.PlayerState; import github.daneren2005.dsub.domain.RepeatMode; +import github.daneren2005.dsub.domain.User; import github.daneren2005.dsub.domain.Version; import github.daneren2005.dsub.provider.DSubWidgetProvider; import github.daneren2005.dsub.receiver.MediaButtonIntentReceiver; @@ -154,7 +154,7 @@ public final class Util { public static boolean isScrobblingEnabled(Context context) { SharedPreferences prefs = getPreferences(context); - return prefs.getBoolean(Constants.PREFERENCES_KEY_SCROBBLE, true) && (isOffline(context) || UserUtil.isCurrentRole("scrobblingEnabled")); + return prefs.getBoolean(Constants.PREFERENCES_KEY_SCROBBLE, true) && (isOffline(context) || UserUtil.isCurrentRole(User.SCROBBLING)); } public static void setActiveServer(Context context, int instance) { -- cgit v1.2.3 From b468a7eeedb9d1521835409012c1ea2144aae5e7 Mon Sep 17 00:00:00 2001 From: daneren2005 Date: Tue, 1 Jul 2014 11:32:29 -0700 Subject: Use User constants --- src/github/daneren2005/dsub/util/UserUtil.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/github/daneren2005/dsub/util/UserUtil.java b/src/github/daneren2005/dsub/util/UserUtil.java index baa56935..435b2bd9 100644 --- a/src/github/daneren2005/dsub/util/UserUtil.java +++ b/src/github/daneren2005/dsub/util/UserUtil.java @@ -107,17 +107,17 @@ public final class UserUtil { } public static boolean isCurrentAdmin() { - return isCurrentRole("adminRole"); + return isCurrentRole(User.ADMIN); } public static boolean canPodcast() { - return isCurrentRole("podcastRole"); + return isCurrentRole(User.PODCAST); } public static boolean canShare() { - return isCurrentRole("shareRole"); + return isCurrentRole(User.SHARE); } public static boolean canJukebox() { - return isCurrentRole("jukeboxRole"); + return isCurrentRole(User.JUKEBOX); } public static boolean isCurrentRole(String role) { -- cgit v1.2.3 From 19ea712225738881cae9bf0210ea68ea36208109 Mon Sep 17 00:00:00 2001 From: daneren2005 Date: Tue, 1 Jul 2014 11:33:51 -0700 Subject: Use User constant --- src/github/daneren2005/dsub/fragments/AdminFragment.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/github/daneren2005/dsub/fragments/AdminFragment.java b/src/github/daneren2005/dsub/fragments/AdminFragment.java index cbced58c..5a69534d 100644 --- a/src/github/daneren2005/dsub/fragments/AdminFragment.java +++ b/src/github/daneren2005/dsub/fragments/AdminFragment.java @@ -70,7 +70,7 @@ public class AdminFragment extends SelectListFragment { MenuInflater inflater = context.getMenuInflater(); if(UserUtil.isCurrentAdmin()) { inflater.inflate(R.menu.admin_context, menu); - } else if(UserUtil.isCurrentRole("settingsRole")) { + } else if(UserUtil.isCurrentRole(User.SETTINGS)) { inflater.inflate(R.menu.admin_context_user, menu); } } -- cgit v1.2.3 From dd15c1d6c49c7bc74005083d9b1159823821d976 Mon Sep 17 00:00:00 2001 From: daneren2005 Date: Tue, 1 Jul 2014 11:34:20 -0700 Subject: Use User constant --- src/github/daneren2005/dsub/fragments/UserFragment.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/github/daneren2005/dsub/fragments/UserFragment.java b/src/github/daneren2005/dsub/fragments/UserFragment.java index 7a6eab9f..438b8218 100644 --- a/src/github/daneren2005/dsub/fragments/UserFragment.java +++ b/src/github/daneren2005/dsub/fragments/UserFragment.java @@ -82,7 +82,7 @@ public class UserFragment extends SubsonicFragment{ if(UserUtil.isCurrentAdmin() && Util.checkServerVersion(context, "1.10")) { menuInflater.inflate(R.menu.user, menu); - } else if(UserUtil.isCurrentRole("settingsRole")) { + } else if(UserUtil.isCurrentRole(User.SETTINGS)) { menuInflater.inflate(R.menu.user_user, menu); } else { menuInflater.inflate(R.menu.empty, menu); -- cgit v1.2.3 From 02d76ce05cb6573a5cf98ed9068bb5af73f93c42 Mon Sep 17 00:00:00 2001 From: Scott Jackson Date: Tue, 1 Jul 2014 19:18:09 -0700 Subject: Fix force refreshing as admin not refreshing personal credentials --- src/github/daneren2005/dsub/fragments/AdminFragment.java | 6 ++++-- src/github/daneren2005/dsub/fragments/MainFragment.java | 2 +- src/github/daneren2005/dsub/util/UserUtil.java | 12 ++++++++---- 3 files changed, 13 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/github/daneren2005/dsub/fragments/AdminFragment.java b/src/github/daneren2005/dsub/fragments/AdminFragment.java index 5a69534d..08a78fd6 100644 --- a/src/github/daneren2005/dsub/fragments/AdminFragment.java +++ b/src/github/daneren2005/dsub/fragments/AdminFragment.java @@ -114,7 +114,9 @@ public class AdminFragment extends SelectListFragment { try { // Will only work if user is admin List users = musicService.getUsers(refresh, context, listener); - UserUtil.refreshCurrentUser(context); + if(refresh) { + UserUtil.refreshCurrentUser(context, true); + } return users; } catch(SubsonicRESTException e) { // Delete cached users if not allowed to get them @@ -126,7 +128,7 @@ public class AdminFragment extends SelectListFragment { List users = new ArrayList(); users.add(musicService.getUser(refresh, UserUtil.getCurrentUsername(context), context, listener)); - UserUtil.refreshCurrentUser(context); + UserUtil.refreshCurrentUser(context, false); return users; } } diff --git a/src/github/daneren2005/dsub/fragments/MainFragment.java b/src/github/daneren2005/dsub/fragments/MainFragment.java index c673fc12..fc86ad36 100644 --- a/src/github/daneren2005/dsub/fragments/MainFragment.java +++ b/src/github/daneren2005/dsub/fragments/MainFragment.java @@ -209,7 +209,7 @@ public class MainFragment extends SubsonicFragment { } Util.setActiveServer(context, instance); context.invalidate(); - UserUtil.refreshCurrentUser(context); + UserUtil.refreshCurrentUser(context, false); } } diff --git a/src/github/daneren2005/dsub/util/UserUtil.java b/src/github/daneren2005/dsub/util/UserUtil.java index 435b2bd9..2d1b097a 100644 --- a/src/github/daneren2005/dsub/util/UserUtil.java +++ b/src/github/daneren2005/dsub/util/UserUtil.java @@ -46,11 +46,15 @@ public final class UserUtil { private static int instance = -1; private static User currentUser; - public static void refreshCurrentUser(Context context) { + public static void refreshCurrentUser(Context context, boolean forceRefresh) { currentUser = null; - seedCurrentUser(context); + seedCurrentUser(context, forceRefresh); } - public static void seedCurrentUser(final Context context) { + + public static void seedCurrentUser(Context context) { + seedCurrentUser(context, false); + } + public static void seedCurrentUser(final Context context, final boolean refresh) { // Only try to seed if online if(Util.isOffline(context)) { currentUser = null; @@ -67,7 +71,7 @@ public final class UserUtil { new SilentBackgroundTask(context) { @Override protected Void doInBackground() throws Throwable { - currentUser = MusicServiceFactory.getMusicService(context).getUser(false, getCurrentUsername(context, instance), context, null); + currentUser = MusicServiceFactory.getMusicService(context).getUser(refresh, getCurrentUsername(context, instance), context, null); // If running, redo cast selector DownloadService downloadService = DownloadService.getInstance(); -- cgit v1.2.3 From 8859c94f25916210844ca061f32419719f6b8d82 Mon Sep 17 00:00:00 2001 From: daneren2005 Date: Wed, 2 Jul 2014 10:35:39 -0700 Subject: Fix calls not keeping notification so service isn't killed --- .../daneren2005/dsub/service/DownloadServiceLifecycleSupport.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/github/daneren2005/dsub/service/DownloadServiceLifecycleSupport.java b/src/github/daneren2005/dsub/service/DownloadServiceLifecycleSupport.java index ed092328..76c9abeb 100644 --- a/src/github/daneren2005/dsub/service/DownloadServiceLifecycleSupport.java +++ b/src/github/daneren2005/dsub/service/DownloadServiceLifecycleSupport.java @@ -326,7 +326,7 @@ public class DownloadServiceLifecycleSupport { case TelephonyManager.CALL_STATE_OFFHOOK: if (downloadService.getPlayerState() == PlayerState.STARTED) { resumeAfterCall = true; - downloadService.pause(); + downloadService.pause(true); } break; case TelephonyManager.CALL_STATE_IDLE: -- cgit v1.2.3 From 66daf64911150f4d8f7e6c29d06d504bf79643cf Mon Sep 17 00:00:00 2001 From: daneren2005 Date: Wed, 2 Jul 2014 13:12:27 -0700 Subject: Don't force redownload if BufferProxy calls onResume --- src/github/daneren2005/dsub/service/DownloadFile.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/github/daneren2005/dsub/service/DownloadFile.java b/src/github/daneren2005/dsub/service/DownloadFile.java index 4fb6bb42..3fe3ba93 100644 --- a/src/github/daneren2005/dsub/service/DownloadFile.java +++ b/src/github/daneren2005/dsub/service/DownloadFile.java @@ -237,7 +237,7 @@ public class DownloadFile implements BufferFile { @Override public synchronized void onResume() { - if(!isFailedMax() && !isDownloading() && !isDownloadCancelled()) { + if(!isWorkDone() && !isFailedMax() && !isDownloading() && !isDownloadCancelled()) { download(); } } -- cgit v1.2.3 From cf9de6ebdc40a76ca8f47ccf2f25c3100cc33934 Mon Sep 17 00:00:00 2001 From: Scott Jackson Date: Wed, 2 Jul 2014 19:20:57 -0700 Subject: #374 Fix small album view incorrectly using AlbumListAdapter --- src/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java b/src/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java index 0df04671..79d5fc4d 100644 --- a/src/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java +++ b/src/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java @@ -680,9 +680,11 @@ public class SelectDirectoryFragment extends SubsonicFragment implements Adapter } listAdapter = new AlbumListAdapter(context, entryAdapter, albumListType, albumListExtra, albumListSize); - } else if((albumListType == null || "starred".equals(albumListType)) && largeAlbums) { + } else if(albumListType == null || "starred".equals(albumListType)) { // Only set standard album adapter if not album list and largeAlbums is true - albumList.setAdapter(new AlbumGridAdapter(context, getImageLoader(), albums, !artist)); + if(largeAlbums) { + albumList.setAdapter(new AlbumGridAdapter(context, getImageLoader(), albums, !artist)); + } } else { // If album list, use infinite adapters for either depending on whether or not largeAlbums is true if(largeAlbums) { -- cgit v1.2.3 From b7430917ae32ce49e46aff4e35f2aa8a7b19e27f Mon Sep 17 00:00:00 2001 From: Scott Jackson Date: Wed, 2 Jul 2014 20:13:50 -0700 Subject: #362 Scroll to song when clicking in search results --- .../daneren2005/dsub/activity/QueryReceiverActivity.java | 8 +++++++- .../daneren2005/dsub/activity/SubsonicFragmentActivity.java | 1 + .../daneren2005/dsub/fragments/SelectDirectoryFragment.java | 12 ++++++++++++ src/github/daneren2005/dsub/provider/DSubSearchProvider.java | 2 +- src/github/daneren2005/dsub/util/Constants.java | 1 + 5 files changed, 22 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/github/daneren2005/dsub/activity/QueryReceiverActivity.java b/src/github/daneren2005/dsub/activity/QueryReceiverActivity.java index 4678bbc5..eefb9c56 100644 --- a/src/github/daneren2005/dsub/activity/QueryReceiverActivity.java +++ b/src/github/daneren2005/dsub/activity/QueryReceiverActivity.java @@ -24,6 +24,7 @@ import android.app.SearchManager; import android.content.Intent; import android.os.Bundle; import android.provider.SearchRecentSuggestions; +import android.util.Log; import github.daneren2005.dsub.fragments.SubsonicFragment; import github.daneren2005.dsub.util.Constants; @@ -37,7 +38,9 @@ import github.daneren2005.dsub.provider.DSubSearchProvider; */ public class QueryReceiverActivity extends Activity { - @Override + private static final String TAG = QueryReceiverActivity.class.getSimpleName(); + + @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -68,6 +71,9 @@ public class QueryReceiverActivity extends Activity { if(albumId.indexOf("ar-") == 0) { intent.putExtra(Constants.INTENT_EXTRA_NAME_ARTIST, true); albumId = albumId.replace("ar-", ""); + } else if(albumId.indexOf("so-") == 0) { + intent.putExtra(Constants.INTENT_EXTRA_SEARCH_SONG, name); + albumId = albumId.replace("so-", ""); } intent.putExtra(Constants.INTENT_EXTRA_NAME_ID, albumId); if (name != null) { diff --git a/src/github/daneren2005/dsub/activity/SubsonicFragmentActivity.java b/src/github/daneren2005/dsub/activity/SubsonicFragmentActivity.java index aa977c2c..9845411a 100644 --- a/src/github/daneren2005/dsub/activity/SubsonicFragmentActivity.java +++ b/src/github/daneren2005/dsub/activity/SubsonicFragmentActivity.java @@ -282,6 +282,7 @@ public class SubsonicFragmentActivity extends SubsonicActivity { Bundle args = new Bundle(); args.putString(Constants.INTENT_EXTRA_NAME_ID, getIntent().getStringExtra(Constants.INTENT_EXTRA_NAME_ID)); args.putString(Constants.INTENT_EXTRA_NAME_NAME, getIntent().getStringExtra(Constants.INTENT_EXTRA_NAME_NAME)); + args.putString(Constants.INTENT_EXTRA_SEARCH_SONG, getIntent().getStringExtra(Constants.INTENT_EXTRA_SEARCH_SONG)); if(getIntent().hasExtra(Constants.INTENT_EXTRA_NAME_ARTIST)) { args.putBoolean(Constants.INTENT_EXTRA_NAME_ARTIST, true); } diff --git a/src/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java b/src/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java index 79d5fc4d..d40f8fad 100644 --- a/src/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java +++ b/src/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java @@ -80,6 +80,7 @@ public class SelectDirectoryFragment extends SubsonicFragment implements Adapter boolean restoredInstance = false; boolean lookupParent = false; boolean largeAlbums = false; + String lookupEntry; public SelectDirectoryFragment() { super(); @@ -121,6 +122,7 @@ public class SelectDirectoryFragment extends SubsonicFragment implements Adapter albumListSize = args.getInt(Constants.INTENT_EXTRA_NAME_ALBUM_LIST_SIZE, 0); refreshListing = args.getBoolean(Constants.INTENT_EXTRA_REFRESH_LISTINGS); artist = args.getBoolean(Constants.INTENT_EXTRA_NAME_ARTIST, false); + lookupEntry = args.getString(Constants.INTENT_EXTRA_SEARCH_SONG); String childId = args.getString(Constants.INTENT_EXTRA_NAME_CHILD_ID); if(childId != null) { @@ -699,6 +701,16 @@ public class SelectDirectoryFragment extends SubsonicFragment implements Adapter } context.supportInvalidateOptionsMenu(); + if(lookupEntry != null) { + for(int i = 0; i < entries.size(); i++) { + if(lookupEntry.equals(entries.get(i).getTitle())) { + entryList.setSelection(i + entryList.getHeaderViewsCount()); + lookupEntry = null; + break; + } + } + } + Bundle args = getArguments(); boolean playAll = args.getBoolean(Constants.INTENT_EXTRA_NAME_AUTOPLAY, false); if (playAll && !restoredInstance) { diff --git a/src/github/daneren2005/dsub/provider/DSubSearchProvider.java b/src/github/daneren2005/dsub/provider/DSubSearchProvider.java index 4fd4b218..6c23a5d0 100644 --- a/src/github/daneren2005/dsub/provider/DSubSearchProvider.java +++ b/src/github/daneren2005/dsub/provider/DSubSearchProvider.java @@ -83,7 +83,7 @@ public class DSubSearchProvider extends ContentProvider { } for (MusicDirectory.Entry song : searchResult.getSongs()) { String icon = RESOURCE_PREFIX + R.drawable.ic_action_song; - cursor.addRow(new Object[]{song.getId().hashCode(), song.getTitle(), song.getArtist(), song.getParent(), song.getTitle(), icon}); + cursor.addRow(new Object[]{song.getId().hashCode(), song.getTitle(), song.getArtist(), "so-" + song.getParent(), song.getTitle(), icon}); } return cursor; } diff --git a/src/github/daneren2005/dsub/util/Constants.java b/src/github/daneren2005/dsub/util/Constants.java index ec686529..f566c78c 100644 --- a/src/github/daneren2005/dsub/util/Constants.java +++ b/src/github/daneren2005/dsub/util/Constants.java @@ -61,6 +61,7 @@ public final class Constants { public static final String INTENT_EXTRA_NAME_SHARE = "subsonic.share"; public static final String INTENT_EXTRA_FRAGMENT_TYPE = "fragmentType"; public static final String INTENT_EXTRA_REFRESH_LISTINGS = "refreshListings"; + public static final String INTENT_EXTRA_SEARCH_SONG = "searchSong"; // Preferences keys. public static final String PREFERENCES_KEY_SERVER_KEY = "server"; -- cgit v1.2.3 From f11af4586d886553f5017621f11a4a873662726a Mon Sep 17 00:00:00 2001 From: Scott Jackson Date: Wed, 2 Jul 2014 20:16:39 -0700 Subject: Fix random crash --- src/github/daneren2005/dsub/activity/SettingsActivity.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/github/daneren2005/dsub/activity/SettingsActivity.java b/src/github/daneren2005/dsub/activity/SettingsActivity.java index 56c3e387..91703f16 100644 --- a/src/github/daneren2005/dsub/activity/SettingsActivity.java +++ b/src/github/daneren2005/dsub/activity/SettingsActivity.java @@ -245,7 +245,11 @@ public class SettingsActivity extends PreferenceActivity implements SharedPrefer @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { - Log.d(TAG, "Preference changed: " + key); + // Random error I have no idea how to reproduce + if(sharedPreferences == null) { + return; + } + update(); if (Constants.PREFERENCES_KEY_HIDE_MEDIA.equals(key)) { -- cgit v1.2.3 From 48b472cbdb5756d478c3593c735b9249eb45b2be Mon Sep 17 00:00:00 2001 From: Scott Jackson Date: Thu, 3 Jul 2014 10:11:55 -0700 Subject: Fix unplugging headphone not pausing when in call --- src/github/daneren2005/dsub/receiver/AudioNoisyReceiver.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/github/daneren2005/dsub/receiver/AudioNoisyReceiver.java b/src/github/daneren2005/dsub/receiver/AudioNoisyReceiver.java index 058d04b4..b4ace297 100644 --- a/src/github/daneren2005/dsub/receiver/AudioNoisyReceiver.java +++ b/src/github/daneren2005/dsub/receiver/AudioNoisyReceiver.java @@ -39,7 +39,7 @@ public class AudioNoisyReceiver extends BroadcastReceiver { } if (AudioManager.ACTION_AUDIO_BECOMING_NOISY.equals (intent.getAction ())) { - if(!downloadService.isRemoteEnabled() && downloadService.getPlayerState() == PlayerState.STARTED) { + if(!downloadService.isRemoteEnabled() && (downloadService.getPlayerState() == PlayerState.STARTED || downloadService.getPlayerState() == PlayerState.PAUSED_TEMP)) { SharedPreferences prefs = Util.getPreferences(downloadService); int pausePref = Integer.parseInt(prefs.getString(Constants.PREFERENCES_KEY_PAUSE_DISCONNECT, "0")); if(pausePref == 0) { -- cgit v1.2.3 From 31f7a64aa97003874db567b1a78d0fa5d0bdaea9 Mon Sep 17 00:00:00 2001 From: Scott Jackson Date: Thu, 3 Jul 2014 12:49:52 -0700 Subject: Add ability to define whether or not to check for wifi requirement, default to false --- src/github/daneren2005/dsub/util/Util.java | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/github/daneren2005/dsub/util/Util.java b/src/github/daneren2005/dsub/util/Util.java index 02cb8eb9..27bfa365 100644 --- a/src/github/daneren2005/dsub/util/Util.java +++ b/src/github/daneren2005/dsub/util/Util.java @@ -873,15 +873,22 @@ public final class Util { return Util.getScaledHeight((double) bitmap.getHeight(), (double) bitmap.getWidth(), width); } - public static boolean isNetworkConnected(Context context) { + public static boolean isNetworkConnected(Context context) { + return isNetworkConnected(context, false); + } + public static boolean isNetworkConnected(Context context, boolean streaming) { ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = manager.getActiveNetworkInfo(); boolean connected = networkInfo != null && networkInfo.isConnected(); - boolean wifiConnected = connected && networkInfo.getType() == ConnectivityManager.TYPE_WIFI; - boolean wifiRequired = isWifiRequiredForDownload(context); + if(streaming) { + boolean wifiConnected = connected && networkInfo.getType() == ConnectivityManager.TYPE_WIFI; + boolean wifiRequired = isWifiRequiredForDownload(context); - return connected && (!wifiRequired || wifiConnected); + return connected && (!wifiRequired || wifiConnected); + } else { + return connected; + } } public static boolean isWifiConnected(Context context) { ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); -- cgit v1.2.3 From 5f51bae6238b30cfa7df12276fea63ce7b9b7cac Mon Sep 17 00:00:00 2001 From: Scott Jackson Date: Thu, 3 Jul 2014 12:50:23 -0700 Subject: Check wifi requirement for checkDownloads --- src/github/daneren2005/dsub/service/DownloadService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/github/daneren2005/dsub/service/DownloadService.java b/src/github/daneren2005/dsub/service/DownloadService.java index a998c655..f28c38dc 100644 --- a/src/github/daneren2005/dsub/service/DownloadService.java +++ b/src/github/daneren2005/dsub/service/DownloadService.java @@ -1606,7 +1606,7 @@ public class DownloadService extends Service { checkShufflePlay(); } - if (remoteState != RemoteControlState.LOCAL || !Util.isNetworkConnected(this) || Util.isOffline(this)) { + if (remoteState != RemoteControlState.LOCAL || !Util.isNetworkConnected(this, true) || Util.isOffline(this)) { return; } -- cgit v1.2.3 From 43f1fdc4b10df4470e7d87360207676c2262c643 Mon Sep 17 00:00:00 2001 From: Scott Jackson Date: Fri, 4 Jul 2014 09:27:36 -0700 Subject: GB crash --- src/github/daneren2005/dsub/fragments/UserFragment.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/github/daneren2005/dsub/fragments/UserFragment.java b/src/github/daneren2005/dsub/fragments/UserFragment.java index 438b8218..9bf26baf 100644 --- a/src/github/daneren2005/dsub/fragments/UserFragment.java +++ b/src/github/daneren2005/dsub/fragments/UserFragment.java @@ -70,7 +70,7 @@ public class UserFragment extends SubsonicFragment{ @Override public void onAttach(Activity activity) { super.onAttach(activity); - activity.invalidateOptionsMenu(); + ((SubsonicActivity) activity).supportInvalidateOptionsMenu(); } @Override -- cgit v1.2.3 From 4a0cc3eeadae1cdec7852ba96b0c40d15145dfce Mon Sep 17 00:00:00 2001 From: Scott Jackson Date: Fri, 4 Jul 2014 09:38:10 -0700 Subject: Reaarange to possibly fix crash --- src/github/daneren2005/dsub/fragments/SelectPlaylistFragment.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/github/daneren2005/dsub/fragments/SelectPlaylistFragment.java b/src/github/daneren2005/dsub/fragments/SelectPlaylistFragment.java index 2b328156..7f6de2d8 100644 --- a/src/github/daneren2005/dsub/fragments/SelectPlaylistFragment.java +++ b/src/github/daneren2005/dsub/fragments/SelectPlaylistFragment.java @@ -155,7 +155,7 @@ public class SelectPlaylistFragment extends SelectListFragment { Bundle args = new Bundle(); args.putString(Constants.INTENT_EXTRA_NAME_PLAYLIST_ID, playlist.getId()); args.putString(Constants.INTENT_EXTRA_NAME_PLAYLIST_NAME, playlist.getName()); - if(Util.checkServerVersion(context, "1.8") && UserUtil.getCurrentUsername(context).equals(playlist.getOwner())) { + if(Util.checkServerVersion(context, "1.8") && playlist.getOwner() != null && playlist.getOwner().equals(UserUtil.getCurrentUsername(context))) { args.putBoolean(Constants.INTENT_EXTRA_NAME_PLAYLIST_OWNER, true); } fragment.setArguments(args); -- cgit v1.2.3 From a3da272e3c83996f4c559fcc0b9b20c6ebea1c73 Mon Sep 17 00:00:00 2001 From: Scott Jackson Date: Sat, 5 Jul 2014 07:16:20 -0700 Subject: Change default theme to Light --- AndroidManifest.xml | 2 +- res/xml/settings.xml | 2 +- .../daneren2005/dsub/activity/SettingsActivity.java | 17 +---------------- .../daneren2005/dsub/activity/SubsonicActivity.java | 17 +---------------- src/github/daneren2005/dsub/util/Util.java | 21 +++++++++++++++++++++ 5 files changed, 25 insertions(+), 34 deletions(-) (limited to 'src') diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 7caac225..0eb73517 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -32,7 +32,7 @@ + android:theme="@style/Theme.DSub.Light"> diff --git a/src/github/daneren2005/dsub/activity/SettingsActivity.java b/src/github/daneren2005/dsub/activity/SettingsActivity.java index 91703f16..48f67dd5 100644 --- a/src/github/daneren2005/dsub/activity/SettingsActivity.java +++ b/src/github/daneren2005/dsub/activity/SettingsActivity.java @@ -472,22 +472,7 @@ public class SettingsActivity extends PreferenceActivity implements SharedPrefer private void applyTheme() { String activeTheme = Util.getTheme(this); - if ("dark".equals(activeTheme)) { - setTheme(R.style.Theme_DSub_Dark); - } else if ("black".equals(activeTheme)) { - setTheme(R.style.Theme_DSub_Black); - } else if ("light".equals(activeTheme)) { - setTheme(R.style.Theme_DSub_Light); - } else { - setTheme(R.style.Theme_DSub_Holo); - } - - SharedPreferences prefs = Util.getPreferences(this); - if(prefs.getBoolean(Constants.PREFERENCES_KEY_OVERRIDE_SYSTEM_LANGUAGE, false)) { - Configuration config = new Configuration(); - config.locale = Locale.ENGLISH; - getResources().updateConfiguration(config,getResources().getDisplayMetrics()); - } + Util.applyTheme(this, activeTheme); } private void setHideMedia(boolean hide) { diff --git a/src/github/daneren2005/dsub/activity/SubsonicActivity.java b/src/github/daneren2005/dsub/activity/SubsonicActivity.java index 7aec30c4..78589a44 100644 --- a/src/github/daneren2005/dsub/activity/SubsonicActivity.java +++ b/src/github/daneren2005/dsub/activity/SubsonicActivity.java @@ -629,22 +629,7 @@ public class SubsonicActivity extends ActionBarActivity implements OnItemSelecte Util.setTheme(this, theme); } - if ("dark".equals(theme)) { - setTheme(R.style.Theme_DSub_Dark); - } else if ("black".equals(theme)) { - setTheme(R.style.Theme_DSub_Black); - } else if ("light".equals(theme)) { - setTheme(R.style.Theme_DSub_Light); - } else { - setTheme(R.style.Theme_DSub_Holo); - } - - SharedPreferences prefs = Util.getPreferences(this); - if(prefs.getBoolean(Constants.PREFERENCES_KEY_OVERRIDE_SYSTEM_LANGUAGE, false)) { - Configuration config = new Configuration(); - config.locale = Locale.ENGLISH; - getResources().updateConfiguration(config,getResources().getDisplayMetrics()); - } + Util.applyTheme(this, theme); } private void applyFullscreen() { fullScreen = Util.getPreferences(this).getBoolean(Constants.PREFERENCES_KEY_FULL_SCREEN, false); diff --git a/src/github/daneren2005/dsub/util/Util.java b/src/github/daneren2005/dsub/util/Util.java index 27bfa365..cea5813e 100644 --- a/src/github/daneren2005/dsub/util/Util.java +++ b/src/github/daneren2005/dsub/util/Util.java @@ -28,6 +28,7 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; +import android.content.res.Configuration; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.BitmapFactory; @@ -84,6 +85,7 @@ import java.lang.reflect.Method; import java.security.MessageDigest; import java.text.DecimalFormat; import java.text.NumberFormat; +import java.util.Locale; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -274,6 +276,25 @@ public final class Util { editor.putString(Constants.PREFERENCES_KEY_THEME, theme); editor.commit(); } + + public static void applyTheme(Context context, String theme) { + if ("dark".equals(theme)) { + context.setTheme(R.style.Theme_DSub_Dark); + } else if ("black".equals(theme)) { + context.setTheme(R.style.Theme_DSub_Black); + } else if ("holo".equals(theme)) { + context.setTheme(R.style.Theme_DSub_Holo); + } else { + context.setTheme(R.style.Theme_DSub_Light); + } + + SharedPreferences prefs = Util.getPreferences(context); + if(prefs.getBoolean(Constants.PREFERENCES_KEY_OVERRIDE_SYSTEM_LANGUAGE, false)) { + Configuration config = new Configuration(); + config.locale = Locale.ENGLISH; + context.getResources().updateConfiguration(config, context.getResources().getDisplayMetrics()); + } + } public static boolean getDisplayTrack(Context context) { SharedPreferences prefs = getPreferences(context); -- cgit v1.2.3 From 2cd841bcd2c3017a2d3ee865661eeab432ad382e Mon Sep 17 00:00:00 2001 From: Scott Jackson Date: Mon, 7 Jul 2014 06:18:35 -0700 Subject: Fix ANR by moving service logic into doInBackground --- .../dsub/fragments/SubsonicFragment.java | 47 +++++++++++++--------- 1 file changed, 27 insertions(+), 20 deletions(-) (limited to 'src') diff --git a/src/github/daneren2005/dsub/fragments/SubsonicFragment.java b/src/github/daneren2005/dsub/fragments/SubsonicFragment.java index 5a643daa..54709ec0 100644 --- a/src/github/daneren2005/dsub/fragments/SubsonicFragment.java +++ b/src/github/daneren2005/dsub/fragments/SubsonicFragment.java @@ -732,11 +732,11 @@ public class SubsonicFragment extends Fragment implements SwipeRefreshLayout.OnR downloadRecursively(id, name, isDirectory, save, append, autoplay, shuffle, background, false); } protected void downloadRecursively(final String id, final String name, final boolean isDirectory, final boolean save, final boolean append, final boolean autoplay, final boolean shuffle, final boolean background, final boolean playNext) { - LoadingTask> task = new LoadingTask>(context) { + LoadingTask task = new LoadingTask(context) { private static final int MAX_SONGS = 500; @Override - protected List doInBackground() throws Throwable { + protected Boolean doInBackground() throws Throwable { MusicService musicService = MusicServiceFactory.getMusicService(context); MusicDirectory root; if(share != null) { @@ -755,7 +755,26 @@ public class SubsonicFragment extends Fragment implements SwipeRefreshLayout.OnR List songs = new LinkedList(); getSongsRecursively(root, songs); - return songs; + + DownloadService downloadService = getDownloadService(); + boolean transition = false; + if (!songs.isEmpty() && downloadService != null) { + if (!append) { + downloadService.clear(); + } + if(!background) { + downloadService.download(songs, save, autoplay, playNext, false); + if(!append) { + transition = true; + } + } + else { + downloadService.downloadBackground(songs, save); + } + } + artistOverride = false; + + return transition; } private void getSongsRecursively(MusicDirectory parent, List songs) throws Exception { @@ -782,24 +801,12 @@ public class SubsonicFragment extends Fragment implements SwipeRefreshLayout.OnR } @Override - protected void done(List songs) { - DownloadService downloadService = getDownloadService(); - if (!songs.isEmpty() && downloadService != null) { - if (!append) { - downloadService.clear(); - } - warnIfNetworkOrStorageUnavailable(); - if(!background) { - downloadService.download(songs, save, autoplay, playNext, false); - if(!append) { - Util.startActivityWithoutTransition(context, DownloadActivity.class); - } - } - else { - downloadService.downloadBackground(songs, save); - } + protected void done(Boolean result) { + warnIfNetworkOrStorageUnavailable(); + + if(result) { + Util.startActivityWithoutTransition(context, DownloadActivity.class); } - artistOverride = false; } }; -- cgit v1.2.3 From 9501ca530dfbe3f97917c5488167d20518492c24 Mon Sep 17 00:00:00 2001 From: Scott Jackson Date: Mon, 7 Jul 2014 10:38:11 -0700 Subject: Just refresh data by default, use serialization if fails --- src/github/daneren2005/dsub/service/CachedMusicService.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/github/daneren2005/dsub/service/CachedMusicService.java b/src/github/daneren2005/dsub/service/CachedMusicService.java index bd43fbed..31280b19 100644 --- a/src/github/daneren2005/dsub/service/CachedMusicService.java +++ b/src/github/daneren2005/dsub/service/CachedMusicService.java @@ -511,13 +511,15 @@ public class CachedMusicService implements MusicService { public User getUser(boolean refresh, String username, Context context, ProgressListener progressListener) throws Exception { User result = null; - if(!refresh) { - result = FileUtil.deserialize(context, getCacheName(context, "user-" + username), User.class); - } - - if(result == null) { + try { result = musicService.getUser(refresh, username, context, progressListener); FileUtil.serialize(context, result, getCacheName(context, "user-" + username)); + } catch(Exception e) { + // Don't care + } + + if(result == null && !refresh) { + result = FileUtil.deserialize(context, getCacheName(context, "user-" + username), User.class); } return result; -- cgit v1.2.3 From c2aec99e54c7f3ca91debbda6b952d8609f9441e Mon Sep 17 00:00:00 2001 From: Scott Jackson Date: Mon, 7 Jul 2014 11:32:39 -0700 Subject: #321 Hide all the format/kbps info on song details --- src/github/daneren2005/dsub/view/SongView.java | 35 +++++++++++++------------- 1 file changed, 17 insertions(+), 18 deletions(-) (limited to 'src') diff --git a/src/github/daneren2005/dsub/view/SongView.java b/src/github/daneren2005/dsub/view/SongView.java index 2176b768..dd956376 100644 --- a/src/github/daneren2005/dsub/view/SongView.java +++ b/src/github/daneren2005/dsub/view/SongView.java @@ -87,11 +87,6 @@ public class SongView extends UpdateView implements Checkable { boolean checkable = (Boolean) obj2; StringBuilder artist = new StringBuilder(40); - - String bitRate = null; - if (song.getBitRate() != null) { - bitRate = String.format(getContext().getString(R.string.song_details_kbps), song.getBitRate()); - } String fileFormat = null; if (song.getTranscodedSuffix() != null && !song.getTranscodedSuffix().equals(song.getSuffix())) { @@ -112,20 +107,24 @@ public class SongView extends UpdateView implements Checkable { artist.append(song.getArtist()); } - String status = (song instanceof PodcastEpisode) ? ((PodcastEpisode)song).getStatus() : ""; - artist.append(" ("); - if("error".equals(status)) { - artist.append(getContext().getString(R.string.song_details_error)); - } else if("skipped".equals(status)) { - artist.append(getContext().getString(R.string.song_details_skipped)); - } else if("downloading".equals(status)) { - artist.append(getContext().getString(R.string.song_details_downloading)); - } else { - artist.append(String.format(getContext().getString(R.string.song_details_all), bitRate == null ? "" : bitRate, fileFormat)); + if(song instanceof PodcastEpisode) { + String status = ((PodcastEpisode) song).getStatus(); + int statusRes = -1; + + if("error".equals(status)) { + statusRes = R.string.song_details_error; + } else if("skipped".equals(status)) { + statusRes = R.string.song_details_skipped; + } else if("downloading".equals(status)) { + statusRes = R.string.song_details_downloading; + } + + if(statusRes != -1) { + artist.append(" ("); + artist.append(getContext().getString(statusRes)); + artist.append(")"); + } } - artist.append(")"); - } else { - artist.append(String.format(getContext().getString(R.string.song_details_all), bitRate == null ? "" : bitRate, fileFormat)); } String title = song.getTitle(); -- cgit v1.2.3 From 2a9d768e70ddedc75f82d819ae5029cbb163702e Mon Sep 17 00:00:00 2001 From: Scott Jackson Date: Mon, 7 Jul 2014 12:41:59 -0700 Subject: Add a line break before Podcast description --- src/github/daneren2005/dsub/fragments/SelectPodcastsFragment.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/github/daneren2005/dsub/fragments/SelectPodcastsFragment.java b/src/github/daneren2005/dsub/fragments/SelectPodcastsFragment.java index 616af757..73a415ba 100644 --- a/src/github/daneren2005/dsub/fragments/SelectPodcastsFragment.java +++ b/src/github/daneren2005/dsub/fragments/SelectPodcastsFragment.java @@ -238,7 +238,7 @@ public class SelectPodcastsFragment extends SelectListFragment { "\nURL: " + channel.getUrl() + "\nStatus: " + channel.getStatus() + ((channel.getErrorMessage()) == null ? "" : "\nError Message: " + channel.getErrorMessage()) + - ((channel.getDescription()) == null ? "" : "\nDescription: " + channel.getDescription()); + ((channel.getDescription()) == null ? "" : "\n\nDescription: " + channel.getDescription()); Util.info(context, channel.getName(), message); } -- cgit v1.2.3 From 7ef4a53106e94621cab5082cfb225c1ef436944d Mon Sep 17 00:00:00 2001 From: Scott Jackson Date: Mon, 7 Jul 2014 22:18:55 -0700 Subject: #372 Use bold for drawer, fix delay between opening for first time and showing selection --- res/values-v16/themes.xml | 4 ++++ res/values/themes.xml | 4 ++++ .../dsub/activity/SubsonicActivity.java | 22 ++++++++++++++++------ .../daneren2005/dsub/view/DrawerAdapter.java | 10 ++++++++++ 4 files changed, 34 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/res/values-v16/themes.xml b/res/values-v16/themes.xml index aabcfaa9..3bbdd5ed 100644 --- a/res/values-v16/themes.xml +++ b/res/values-v16/themes.xml @@ -4,6 +4,10 @@ sans-serif-light + + diff --git a/res/values/themes.xml b/res/values/themes.xml index 6611cff7..1700aa88 100644 --- a/res/values/themes.xml +++ b/res/values/themes.xml @@ -120,6 +120,10 @@ + +