From b307d96e9502a39917778f879c9b46c6eee4c8bc Mon Sep 17 00:00:00 2001 From: Domingos Lopes Date: Sat, 2 Jul 2016 00:53:17 -0400 Subject: Make gpodnet sync error notifications optional --- .../core/preferences/GpodnetPreferences.java | 48 ++++++++++++++++++++-- .../core/preferences/UserPreferences.java | 11 +++++ .../core/service/GpodnetSyncService.java | 28 ++++++++----- core/src/main/res/values/strings.xml | 6 +++ 4 files changed, 80 insertions(+), 13 deletions(-) (limited to 'core/src') 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 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 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 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 @@ Sync subscriptions and episode states with gpodder.net Sync started %1$s with device %2$s]]> + Show sync error notifications + This setting does not apply to authentication errors. + Last sync attempt: %1$s Playback Speeds Customize the speeds available for variable speed audio playback Fast forward time @@ -502,6 +505,9 @@ Wrong username or password gpodder.net sync error An error occurred during syncing:\u0020 + Successful + Failed + Undetermined Selected folder: -- cgit v1.2.3