diff options
author | Domingos Lopes <domingos86lopes+github@gmail.com> | 2016-07-02 00:53:17 -0400 |
---|---|---|
committer | Domingos Lopes <domingos86lopes+github@gmail.com> | 2016-07-02 02:37:58 -0400 |
commit | b307d96e9502a39917778f879c9b46c6eee4c8bc (patch) | |
tree | 7c9bbfcc29751f8e453630236b5f82dc8e568231 /core/src | |
parent | a806d58966bca19cb89ca0b2b2d287f2611c3e36 (diff) | |
download | AntennaPod-b307d96e9502a39917778f879c9b46c6eee4c8bc.zip |
Make gpodnet sync error notifications optional
Diffstat (limited to 'core/src')
4 files changed, 80 insertions, 13 deletions
diff --git a/core/src/main/java/de/danoeh/antennapod/core/preferences/GpodnetPreferences.java b/core/src/main/java/de/danoeh/antennapod/core/preferences/GpodnetPreferences.java index 6d4d3baa6..0062647ed 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/preferences/GpodnetPreferences.java +++ b/core/src/main/java/de/danoeh/antennapod/core/preferences/GpodnetPreferences.java @@ -37,6 +37,8 @@ public class GpodnetPreferences { public static final String PREF_SYNC_ADDED = "de.danoeh.antennapod.preferences.gpoddernet.sync_added"; public static final String PREF_SYNC_REMOVED = "de.danoeh.antennapod.preferences.gpoddernet.sync_removed"; public static final String PREF_SYNC_EPISODE_ACTIONS = "de.danoeh.antennapod.preferences.gpoddernet.sync_queued_episode_actions"; + public static final String PREF_LAST_SYNC_ATTEMPT_TIMESTAMP = "de.danoeh.antennapod.preferences.gpoddernet.last_sync_attempt_timestamp"; + public static final String PREF_LAST_SYNC_ATTEMPT_RESULT = "de.danoeh.antennapod.preferences.gpoddernet.last_sync_attempt_result"; private static String username; private static String password; @@ -56,6 +58,12 @@ public class GpodnetPreferences { private static long lastEpisodeActionsSyncTimeStamp; + private static long lastSyncAttemptTimestamp; + + private static boolean lastSyncAttemptResult; + + private static Runnable syncAttemptListener; + private static boolean preferencesLoaded = false; private static SharedPreferences getPreferences() { @@ -70,6 +78,8 @@ public class GpodnetPreferences { deviceID = prefs.getString(PREF_GPODNET_DEVICEID, null); lastSubscriptionSyncTimestamp = prefs.getLong(PREF_LAST_SUBSCRIPTION_SYNC_TIMESTAMP, 0); lastEpisodeActionsSyncTimeStamp = prefs.getLong(PREF_LAST_EPISODE_ACTIONS_SYNC_TIMESTAMP, 0); + lastSyncAttemptTimestamp = prefs.getLong(PREF_LAST_SYNC_ATTEMPT_TIMESTAMP, 0); + lastSyncAttemptResult = prefs.getBoolean(PREF_LAST_SYNC_ATTEMPT_RESULT, false); addedFeeds = readListFromString(prefs.getString(PREF_SYNC_ADDED, "")); removedFeeds = readListFromString(prefs.getString(PREF_SYNC_REMOVED, "")); queuedEpisodeActions = readEpisodeActionsFromString(prefs.getString(PREF_SYNC_EPISODE_ACTIONS, "")); @@ -82,19 +92,25 @@ public class GpodnetPreferences { private static void writePreference(String key, String value) { SharedPreferences.Editor editor = getPreferences().edit(); editor.putString(key, value); - editor.commit(); + editor.apply(); } private static void writePreference(String key, long value) { SharedPreferences.Editor editor = getPreferences().edit(); editor.putLong(key, value); - editor.commit(); + editor.apply(); } private static void writePreference(String key, Collection<String> value) { SharedPreferences.Editor editor = getPreferences().edit(); editor.putString(key, writeListToString(value)); - editor.commit(); + editor.apply(); + } + + private static void writePreference(String key, boolean value) { + SharedPreferences.Editor editor = getPreferences().edit(); + editor.putBoolean(key, value); + editor.apply(); } public static String getUsername() { @@ -147,6 +163,26 @@ public class GpodnetPreferences { writePreference(PREF_LAST_EPISODE_ACTIONS_SYNC_TIMESTAMP, timestamp); } + public static long getLastSyncAttemptTimestamp() { + ensurePreferencesLoaded(); + return lastSyncAttemptTimestamp; + } + + public static boolean getLastSyncAttemptResult() { + ensurePreferencesLoaded(); + return lastSyncAttemptResult; + } + + public static void setLastSyncAttempt(boolean result, long timestamp) { + GpodnetPreferences.lastSyncAttemptResult = result; + GpodnetPreferences.lastSyncAttemptTimestamp = timestamp; + writePreference(PREF_LAST_SYNC_ATTEMPT_RESULT, result); + writePreference(PREF_LAST_SYNC_ATTEMPT_TIMESTAMP, timestamp); + if (timestamp != 0 && syncAttemptListener != null) { + syncAttemptListener.run(); + } + } + public static String getHostname() { ensurePreferencesLoaded(); return hostname; @@ -269,6 +305,12 @@ public class GpodnetPreferences { writePreference(PREF_SYNC_EPISODE_ACTIONS, writeEpisodeActionsToString(queuedEpisodeActions)); feedListLock.unlock(); setLastSubscriptionSyncTimestamp(0); + setLastSyncAttempt(false, 0); + UserPreferences.setGpodnetNotificationsEnabled(); + } + + public static void setSyncAttemptListener(Runnable listener) { + syncAttemptListener = listener; } private static Set<String> readListFromString(String s) { diff --git a/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java b/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java index b5bbb0350..0772597a2 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java +++ b/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java @@ -92,6 +92,7 @@ public class UserPreferences { // Services public static final String PREF_AUTO_FLATTR = "pref_auto_flattr"; public static final String PREF_AUTO_FLATTR_PLAYED_DURATION_THRESHOLD = "prefAutoFlattrPlayedDurationThreshold"; + public static final String PREF_GPODNET_NOTIFICATIONS = "pref_gpodnet_notifications"; // Other public static final String PREF_DATA_FOLDER = "prefDataFolder"; @@ -546,6 +547,16 @@ public class UserPreferences { .apply(); } + public static boolean gpodnetNotificationsEnabled() { + return prefs.getBoolean(PREF_GPODNET_NOTIFICATIONS, true); + } + + public static void setGpodnetNotificationsEnabled() { + prefs.edit() + .putBoolean(PREF_GPODNET_NOTIFICATIONS, true) + .apply(); + } + public static void setHiddenDrawerItems(List<String> items) { String str = TextUtils.join(",", items); prefs.edit() diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/GpodnetSyncService.java b/core/src/main/java/de/danoeh/antennapod/core/service/GpodnetSyncService.java index 160ba487b..7aad134e4 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/GpodnetSyncService.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/GpodnetSyncService.java @@ -30,6 +30,7 @@ import de.danoeh.antennapod.core.gpoddernet.model.GpodnetEpisodeActionPostRespon import de.danoeh.antennapod.core.gpoddernet.model.GpodnetSubscriptionChange; import de.danoeh.antennapod.core.gpoddernet.model.GpodnetUploadChangesResponse; import de.danoeh.antennapod.core.preferences.GpodnetPreferences; +import de.danoeh.antennapod.core.preferences.UserPreferences; import de.danoeh.antennapod.core.storage.DBReader; import de.danoeh.antennapod.core.storage.DBTasks; import de.danoeh.antennapod.core.storage.DBWriter; @@ -107,7 +108,7 @@ public class GpodnetSyncService extends Service { private synchronized void sync() { - if (GpodnetPreferences.loggedIn() == false || NetworkUtils.networkAvailable() == false) { + if (!GpodnetPreferences.loggedIn() || !NetworkUtils.networkAvailable()) { stopSelf(); return; } @@ -161,6 +162,7 @@ public class GpodnetSyncService extends Service { GpodnetPreferences.removeRemovedFeeds(localRemoved); } GpodnetPreferences.setLastSubscriptionSyncTimestamp(newTimeStamp); + GpodnetPreferences.setLastSyncAttempt(true, System.currentTimeMillis()); clearErrorNotifications(); } catch (GpodnetServiceException e) { e.printStackTrace(); @@ -177,15 +179,15 @@ public class GpodnetSyncService extends Service { // local changes are always superior to remote changes! // add subscription if (1) not already subscribed and (2) not just unsubscribed for (String downloadUrl : changes.getAdded()) { - if (false == localSubscriptions.contains(downloadUrl) && - false == localRemoved.contains(downloadUrl)) { + if (!localSubscriptions.contains(downloadUrl) && + !localRemoved.contains(downloadUrl)) { Feed feed = new Feed(downloadUrl, null); DownloadRequester.getInstance().downloadFeed(this, feed); } } // remove subscription if not just subscribed (again) for (String downloadUrl : changes.getRemoved()) { - if(false == localAdded.contains(downloadUrl)) { + if(!localAdded.contains(downloadUrl)) { DBTasks.removeFeedWithDownloadUrl(GpodnetSyncService.this, downloadUrl); } } @@ -215,6 +217,7 @@ public class GpodnetSyncService extends Service { GpodnetPreferences.removeQueuedEpisodeActions(localActions); } GpodnetPreferences.setLastEpisodeActionsSyncTimestamp(lastUpdate); + GpodnetPreferences.setLastSyncAttempt(true, System.currentTimeMillis()); clearErrorNotifications(); } catch (GpodnetServiceException e) { e.printStackTrace(); @@ -299,7 +302,6 @@ public class GpodnetSyncService extends Service { private void updateErrorNotification(GpodnetServiceException exception) { Log.d(TAG, "Posting error notification"); - NotificationCompat.Builder builder = new NotificationCompat.Builder(this); final String title; final String description; final int id; @@ -308,18 +310,24 @@ public class GpodnetSyncService extends Service { description = getString(R.string.gpodnetsync_auth_error_descr); id = R.id.notification_gpodnet_sync_autherror; } else { - title = getString(R.string.gpodnetsync_error_title); - description = getString(R.string.gpodnetsync_error_descr) + exception.getMessage(); - id = R.id.notification_gpodnet_sync_error; + GpodnetPreferences.setLastSyncAttempt(false, System.currentTimeMillis()); + if (UserPreferences.gpodnetNotificationsEnabled()) { + title = getString(R.string.gpodnetsync_error_title); + description = getString(R.string.gpodnetsync_error_descr) + exception.getMessage(); + id = R.id.notification_gpodnet_sync_error; + } else { + return; + } } PendingIntent activityIntent = ClientConfig.gpodnetCallbacks.getGpodnetSyncServiceErrorNotificationPendingIntent(this); - Notification notification = builder.setContentTitle(title) + Notification notification = new NotificationCompat.Builder(this) + .setContentTitle(title) .setContentText(description) .setContentIntent(activityIntent) .setSmallIcon(R.drawable.stat_notify_sync_error) .setAutoCancel(true) - .setVisibility(Notification.VISIBILITY_PUBLIC) + .setVisibility(NotificationCompat.VISIBILITY_PUBLIC) .build(); NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); nm.notify(id, notification); diff --git a/core/src/main/res/values/strings.xml b/core/src/main/res/values/strings.xml index 783f6c1d9..834a2ecc9 100644 --- a/core/src/main/res/values/strings.xml +++ b/core/src/main/res/values/strings.xml @@ -368,6 +368,9 @@ <string name="pref_gpodnet_sync_sum">Sync subscriptions and episode states with gpodder.net</string> <string name="pref_gpodnet_sync_started">Sync started</string> <string name="pref_gpodnet_login_status"><![CDATA[Logged in as <i>%1$s</i> with device <i>%2$s</i>]]></string> + <string name="pref_gpodnet_notifications_title">Show sync error notifications</string> + <string name="pref_gpodnet_notifications_sum">This setting does not apply to authentication errors.</string> + <string name="pref_gpodnet_last_sync_title">Last sync attempt: %1$s</string> <string name="pref_playback_speed_title">Playback Speeds</string> <string name="pref_playback_speed_sum">Customize the speeds available for variable speed audio playback</string> <string name="pref_fast_forward">Fast forward time</string> @@ -502,6 +505,9 @@ <string name="gpodnetsync_auth_error_descr">Wrong username or password</string> <string name="gpodnetsync_error_title">gpodder.net sync error</string> <string name="gpodnetsync_error_descr">An error occurred during syncing:\u0020</string> + <string name="gpodnetsync_pref_report_successful">Successful</string> + <string name="gpodnetsync_pref_report_failed">Failed</string> + <string name="gpodnetsync_pref_report_undetermined">Undetermined</string> <!-- Directory chooser --> <string name="selected_folder_label">Selected folder:</string> |