Make gpodnet sync error notifications optional

This commit is contained in:
Domingos Lopes 2016-07-02 00:53:17 -04:00
parent a806d58966
commit b307d96e95
9 changed files with 146 additions and 18 deletions

View File

@ -118,5 +118,14 @@ public class PreferenceActivity extends AppCompatActivity {
activity.preferenceController.onResume(); activity.preferenceController.onResume();
} }
} }
@Override
public void onPause() {
PreferenceActivity activity = instance.get();
if(activity != null && activity.preferenceController != null) {
activity.preferenceController.onPause();
}
super.onPause();
}
} }
} }

View File

@ -54,6 +54,12 @@ public class PreferenceActivityGingerbread extends android.preference.Preference
preferenceController.onResume(); preferenceController.onResume();
} }
@Override
protected void onPause() {
preferenceController.onPause();
super.onPause();
}
@Override @Override
protected void onApplyThemeResource(Theme theme, int resid, boolean first) { protected void onApplyThemeResource(Theme theme, int resid, boolean first) {
theme.applyStyle(UserPreferences.getTheme(), true); theme.applyStyle(UserPreferences.getTheme(), true);

View File

@ -6,7 +6,7 @@ import android.content.res.Configuration;
import android.os.AsyncTask; import android.os.AsyncTask;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.support.v7.app.ActionBarActivity; import android.support.v7.app.AppCompatActivity;
import android.util.Log; import android.util.Log;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.MenuItem; import android.view.MenuItem;
@ -40,7 +40,7 @@ import de.danoeh.antennapod.core.service.GpodnetSyncService;
* Step 2: Choose device from a list of available devices or create a new one * Step 2: Choose device from a list of available devices or create a new one
* Step 3: Choose from a list of actions * Step 3: Choose from a list of actions
*/ */
public class GpodnetAuthenticationActivity extends ActionBarActivity { public class GpodnetAuthenticationActivity extends AppCompatActivity {
private static final String TAG = "GpodnetAuthActivity"; private static final String TAG = "GpodnetAuthActivity";
private static final String CURRENT_STEP = "current_step"; private static final String CURRENT_STEP = "current_step";

View File

@ -28,10 +28,11 @@ import android.text.Editable;
import android.text.Html; import android.text.Html;
import android.text.TextWatcher; import android.text.TextWatcher;
import android.text.format.DateFormat; import android.text.format.DateFormat;
import android.text.format.DateUtils;
import android.util.Log; import android.util.Log;
import android.widget.EditText; import android.widget.EditText;
import android.widget.Toast;
import android.widget.ListView; import android.widget.ListView;
import android.widget.Toast;
import com.afollestad.materialdialogs.MaterialDialog; import com.afollestad.materialdialogs.MaterialDialog;
@ -89,6 +90,8 @@ public class PreferenceController implements SharedPreferences.OnSharedPreferenc
public static final String PREF_GPODNET_SYNC = "pref_gpodnet_sync"; public static final String PREF_GPODNET_SYNC = "pref_gpodnet_sync";
public static final String PREF_GPODNET_LOGOUT = "pref_gpodnet_logout"; public static final String PREF_GPODNET_LOGOUT = "pref_gpodnet_logout";
public static final String PREF_GPODNET_HOSTNAME = "pref_gpodnet_hostname"; public static final String PREF_GPODNET_HOSTNAME = "pref_gpodnet_hostname";
public static final String PREF_GPODNET_NOTIFICATIONS = "pref_gpodnet_notifications";
public static final String PREF_GPODNET_SYNC_REPORT = "pref_gpodnet_sync_report";
public static final String PREF_EXPANDED_NOTIFICATION = "prefExpandNotify"; public static final String PREF_EXPANDED_NOTIFICATION = "prefExpandNotify";
public static final String PREF_PROXY = "prefProxy"; public static final String PREF_PROXY = "prefProxy";
public static final String PREF_KNOWN_ISSUES = "prefKnownIssues"; public static final String PREF_KNOWN_ISSUES = "prefKnownIssues";
@ -433,9 +436,17 @@ public class PreferenceController implements SharedPreferences.OnSharedPreferenc
setParallelDownloadsText(UserPreferences.getParallelDownloads()); setParallelDownloadsText(UserPreferences.getParallelDownloads());
setEpisodeCacheSizeText(UserPreferences.getEpisodeCacheSize()); setEpisodeCacheSizeText(UserPreferences.getEpisodeCacheSize());
setDataFolderText(); setDataFolderText();
GpodnetPreferences.setSyncAttemptListener(() -> ui.getActivity().runOnUiThread(
() -> updateLastGpodnetSyncReport(
GpodnetPreferences.getLastSyncAttemptResult(),
GpodnetPreferences.getLastSyncAttemptTimestamp())));
updateGpodnetPreferenceScreen(); updateGpodnetPreferenceScreen();
} }
public void onPause() {
GpodnetPreferences.setSyncAttemptListener(null);
}
@SuppressLint("NewApi") @SuppressLint("NewApi")
public void onActivityResult(int requestCode, int resultCode, Intent data) { public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == Activity.RESULT_OK && if (resultCode == Activity.RESULT_OK &&
@ -478,17 +489,43 @@ public class PreferenceController implements SharedPreferences.OnSharedPreferenc
ui.findPreference(PreferenceController.PREF_GPODNET_SETLOGIN_INFORMATION).setEnabled(loggedIn); ui.findPreference(PreferenceController.PREF_GPODNET_SETLOGIN_INFORMATION).setEnabled(loggedIn);
ui.findPreference(PreferenceController.PREF_GPODNET_SYNC).setEnabled(loggedIn); ui.findPreference(PreferenceController.PREF_GPODNET_SYNC).setEnabled(loggedIn);
ui.findPreference(PreferenceController.PREF_GPODNET_LOGOUT).setEnabled(loggedIn); ui.findPreference(PreferenceController.PREF_GPODNET_LOGOUT).setEnabled(loggedIn);
ui.findPreference(PREF_GPODNET_NOTIFICATIONS).setEnabled(loggedIn);
if(loggedIn) { if(loggedIn) {
String format = ui.getActivity().getString(R.string.pref_gpodnet_login_status); String format = ui.getActivity().getString(R.string.pref_gpodnet_login_status);
String summary = String.format(format, GpodnetPreferences.getUsername(), String summary = String.format(format, GpodnetPreferences.getUsername(),
GpodnetPreferences.getDeviceID()); GpodnetPreferences.getDeviceID());
ui.findPreference(PreferenceController.PREF_GPODNET_LOGOUT).setSummary(Html.fromHtml(summary)); ui.findPreference(PreferenceController.PREF_GPODNET_LOGOUT).setSummary(Html.fromHtml(summary));
updateLastGpodnetSyncReport(GpodnetPreferences.getLastSyncAttemptResult(),
GpodnetPreferences.getLastSyncAttemptTimestamp());
} else { } else {
ui.findPreference(PreferenceController.PREF_GPODNET_LOGOUT).setSummary(null); ui.findPreference(PreferenceController.PREF_GPODNET_LOGOUT).setSummary(null);
updateLastGpodnetSyncReport(false, 0);
} }
ui.findPreference(PreferenceController.PREF_GPODNET_HOSTNAME).setSummary(GpodnetPreferences.getHostname()); ui.findPreference(PreferenceController.PREF_GPODNET_HOSTNAME).setSummary(GpodnetPreferences.getHostname());
} }
private void updateLastGpodnetSyncReport(boolean successful, long lastTime) {
Preference syncReport = ui.findPreference(PREF_GPODNET_SYNC_REPORT);
if (lastTime != 0) {
syncReport.setTitle(ui.getActivity().getString(R.string.pref_gpodnet_last_sync_title,
ui.getActivity().getString(successful ?
R.string.gpodnetsync_pref_report_successful :
R.string.gpodnetsync_pref_report_failed)));
syncReport.setSummary(DateUtils.getRelativeDateTimeString(
ui.getActivity(),
lastTime,
DateUtils.MINUTE_IN_MILLIS,
DateUtils.WEEK_IN_MILLIS,
DateUtils.FORMAT_SHOW_TIME));
syncReport.setEnabled(true);
} else {
syncReport.setTitle(ui.getActivity().getString(R.string.pref_gpodnet_last_sync_title,
ui.getActivity().getString(R.string.gpodnetsync_pref_report_undetermined)));
syncReport.setSummary(null);
syncReport.setEnabled(false);
}
}
private String[] getUpdateIntervalEntries(final String[] values) { private String[] getUpdateIntervalEntries(final String[] values) {
final Resources res = ui.getActivity().getResources(); final Resources res = ui.getActivity().getResources();
String[] entries = new String[values.length]; String[] entries = new String[values.length];

View File

@ -74,7 +74,6 @@
android:key="prefQueueAddToFront" android:key="prefQueueAddToFront"
android:summary="@string/pref_queueAddToFront_sum" android:summary="@string/pref_queueAddToFront_sum"
android:title="@string/pref_queueAddToFront_title"/> android:title="@string/pref_queueAddToFront_title"/>
/>
</PreferenceCategory> </PreferenceCategory>
<PreferenceCategory android:title="@string/playback_pref"> <PreferenceCategory android:title="@string/playback_pref">
@ -233,7 +232,7 @@
android:title="@string/pref_revokeAccess_title"/> android:title="@string/pref_revokeAccess_title"/>
</PreferenceScreen> </PreferenceScreen>
<PreferenceScreen <PreferenceScreen
android:key="prefFlattrSettings" android:key="prefGpodderSettings"
android:title="@string/gpodnet_main_label"> android:title="@string/gpodnet_main_label">
<PreferenceScreen <PreferenceScreen
@ -256,6 +255,16 @@
<Preference <Preference
android:key="pref_gpodnet_hostname" android:key="pref_gpodnet_hostname"
android:title="@string/pref_gpodnet_sethostname_title"/> android:title="@string/pref_gpodnet_sethostname_title"/>
<de.danoeh.antennapod.preferences.SwitchCompatPreference
android:key="pref_gpodnet_notifications"
android:title="@string/pref_gpodnet_notifications_title"
android:summary="@string/pref_gpodnet_notifications_sum"
android:defaultValue="true"/>
<Preference android:key="pref_gpodnet_sync_report"
android:title="@string/pref_gpodnet_last_sync_title"
android:selectable="false"
android:enabled="false"
android:shouldDisableView="true"/>
</PreferenceScreen> </PreferenceScreen>
</PreferenceCategory> </PreferenceCategory>
<PreferenceCategory android:title="@string/storage_pref"> <PreferenceCategory android:title="@string/storage_pref">

View File

@ -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_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_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_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 username;
private static String password; private static String password;
@ -56,6 +58,12 @@ public class GpodnetPreferences {
private static long lastEpisodeActionsSyncTimeStamp; private static long lastEpisodeActionsSyncTimeStamp;
private static long lastSyncAttemptTimestamp;
private static boolean lastSyncAttemptResult;
private static Runnable syncAttemptListener;
private static boolean preferencesLoaded = false; private static boolean preferencesLoaded = false;
private static SharedPreferences getPreferences() { private static SharedPreferences getPreferences() {
@ -70,6 +78,8 @@ public class GpodnetPreferences {
deviceID = prefs.getString(PREF_GPODNET_DEVICEID, null); deviceID = prefs.getString(PREF_GPODNET_DEVICEID, null);
lastSubscriptionSyncTimestamp = prefs.getLong(PREF_LAST_SUBSCRIPTION_SYNC_TIMESTAMP, 0); lastSubscriptionSyncTimestamp = prefs.getLong(PREF_LAST_SUBSCRIPTION_SYNC_TIMESTAMP, 0);
lastEpisodeActionsSyncTimeStamp = prefs.getLong(PREF_LAST_EPISODE_ACTIONS_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, "")); addedFeeds = readListFromString(prefs.getString(PREF_SYNC_ADDED, ""));
removedFeeds = readListFromString(prefs.getString(PREF_SYNC_REMOVED, "")); removedFeeds = readListFromString(prefs.getString(PREF_SYNC_REMOVED, ""));
queuedEpisodeActions = readEpisodeActionsFromString(prefs.getString(PREF_SYNC_EPISODE_ACTIONS, "")); queuedEpisodeActions = readEpisodeActionsFromString(prefs.getString(PREF_SYNC_EPISODE_ACTIONS, ""));
@ -82,19 +92,25 @@ public class GpodnetPreferences {
private static void writePreference(String key, String value) { private static void writePreference(String key, String value) {
SharedPreferences.Editor editor = getPreferences().edit(); SharedPreferences.Editor editor = getPreferences().edit();
editor.putString(key, value); editor.putString(key, value);
editor.commit(); editor.apply();
} }
private static void writePreference(String key, long value) { private static void writePreference(String key, long value) {
SharedPreferences.Editor editor = getPreferences().edit(); SharedPreferences.Editor editor = getPreferences().edit();
editor.putLong(key, value); editor.putLong(key, value);
editor.commit(); editor.apply();
} }
private static void writePreference(String key, Collection<String> value) { private static void writePreference(String key, Collection<String> value) {
SharedPreferences.Editor editor = getPreferences().edit(); SharedPreferences.Editor editor = getPreferences().edit();
editor.putString(key, writeListToString(value)); 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() { public static String getUsername() {
@ -147,6 +163,26 @@ public class GpodnetPreferences {
writePreference(PREF_LAST_EPISODE_ACTIONS_SYNC_TIMESTAMP, timestamp); 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() { public static String getHostname() {
ensurePreferencesLoaded(); ensurePreferencesLoaded();
return hostname; return hostname;
@ -269,6 +305,12 @@ public class GpodnetPreferences {
writePreference(PREF_SYNC_EPISODE_ACTIONS, writeEpisodeActionsToString(queuedEpisodeActions)); writePreference(PREF_SYNC_EPISODE_ACTIONS, writeEpisodeActionsToString(queuedEpisodeActions));
feedListLock.unlock(); feedListLock.unlock();
setLastSubscriptionSyncTimestamp(0); setLastSubscriptionSyncTimestamp(0);
setLastSyncAttempt(false, 0);
UserPreferences.setGpodnetNotificationsEnabled();
}
public static void setSyncAttemptListener(Runnable listener) {
syncAttemptListener = listener;
} }
private static Set<String> readListFromString(String s) { private static Set<String> readListFromString(String s) {

View File

@ -92,6 +92,7 @@ public class UserPreferences {
// Services // Services
public static final String PREF_AUTO_FLATTR = "pref_auto_flattr"; 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_AUTO_FLATTR_PLAYED_DURATION_THRESHOLD = "prefAutoFlattrPlayedDurationThreshold";
public static final String PREF_GPODNET_NOTIFICATIONS = "pref_gpodnet_notifications";
// Other // Other
public static final String PREF_DATA_FOLDER = "prefDataFolder"; public static final String PREF_DATA_FOLDER = "prefDataFolder";
@ -546,6 +547,16 @@ public class UserPreferences {
.apply(); .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) { public static void setHiddenDrawerItems(List<String> items) {
String str = TextUtils.join(",", items); String str = TextUtils.join(",", items);
prefs.edit() prefs.edit()

View File

@ -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.GpodnetSubscriptionChange;
import de.danoeh.antennapod.core.gpoddernet.model.GpodnetUploadChangesResponse; import de.danoeh.antennapod.core.gpoddernet.model.GpodnetUploadChangesResponse;
import de.danoeh.antennapod.core.preferences.GpodnetPreferences; 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.DBReader;
import de.danoeh.antennapod.core.storage.DBTasks; import de.danoeh.antennapod.core.storage.DBTasks;
import de.danoeh.antennapod.core.storage.DBWriter; import de.danoeh.antennapod.core.storage.DBWriter;
@ -107,7 +108,7 @@ public class GpodnetSyncService extends Service {
private synchronized void sync() { private synchronized void sync() {
if (GpodnetPreferences.loggedIn() == false || NetworkUtils.networkAvailable() == false) { if (!GpodnetPreferences.loggedIn() || !NetworkUtils.networkAvailable()) {
stopSelf(); stopSelf();
return; return;
} }
@ -161,6 +162,7 @@ public class GpodnetSyncService extends Service {
GpodnetPreferences.removeRemovedFeeds(localRemoved); GpodnetPreferences.removeRemovedFeeds(localRemoved);
} }
GpodnetPreferences.setLastSubscriptionSyncTimestamp(newTimeStamp); GpodnetPreferences.setLastSubscriptionSyncTimestamp(newTimeStamp);
GpodnetPreferences.setLastSyncAttempt(true, System.currentTimeMillis());
clearErrorNotifications(); clearErrorNotifications();
} catch (GpodnetServiceException e) { } catch (GpodnetServiceException e) {
e.printStackTrace(); e.printStackTrace();
@ -177,15 +179,15 @@ public class GpodnetSyncService extends Service {
// local changes are always superior to remote changes! // local changes are always superior to remote changes!
// add subscription if (1) not already subscribed and (2) not just unsubscribed // add subscription if (1) not already subscribed and (2) not just unsubscribed
for (String downloadUrl : changes.getAdded()) { for (String downloadUrl : changes.getAdded()) {
if (false == localSubscriptions.contains(downloadUrl) && if (!localSubscriptions.contains(downloadUrl) &&
false == localRemoved.contains(downloadUrl)) { !localRemoved.contains(downloadUrl)) {
Feed feed = new Feed(downloadUrl, null); Feed feed = new Feed(downloadUrl, null);
DownloadRequester.getInstance().downloadFeed(this, feed); DownloadRequester.getInstance().downloadFeed(this, feed);
} }
} }
// remove subscription if not just subscribed (again) // remove subscription if not just subscribed (again)
for (String downloadUrl : changes.getRemoved()) { for (String downloadUrl : changes.getRemoved()) {
if(false == localAdded.contains(downloadUrl)) { if(!localAdded.contains(downloadUrl)) {
DBTasks.removeFeedWithDownloadUrl(GpodnetSyncService.this, downloadUrl); DBTasks.removeFeedWithDownloadUrl(GpodnetSyncService.this, downloadUrl);
} }
} }
@ -215,6 +217,7 @@ public class GpodnetSyncService extends Service {
GpodnetPreferences.removeQueuedEpisodeActions(localActions); GpodnetPreferences.removeQueuedEpisodeActions(localActions);
} }
GpodnetPreferences.setLastEpisodeActionsSyncTimestamp(lastUpdate); GpodnetPreferences.setLastEpisodeActionsSyncTimestamp(lastUpdate);
GpodnetPreferences.setLastSyncAttempt(true, System.currentTimeMillis());
clearErrorNotifications(); clearErrorNotifications();
} catch (GpodnetServiceException e) { } catch (GpodnetServiceException e) {
e.printStackTrace(); e.printStackTrace();
@ -299,7 +302,6 @@ public class GpodnetSyncService extends Service {
private void updateErrorNotification(GpodnetServiceException exception) { private void updateErrorNotification(GpodnetServiceException exception) {
Log.d(TAG, "Posting error notification"); Log.d(TAG, "Posting error notification");
NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
final String title; final String title;
final String description; final String description;
final int id; final int id;
@ -308,18 +310,24 @@ public class GpodnetSyncService extends Service {
description = getString(R.string.gpodnetsync_auth_error_descr); description = getString(R.string.gpodnetsync_auth_error_descr);
id = R.id.notification_gpodnet_sync_autherror; id = R.id.notification_gpodnet_sync_autherror;
} else { } else {
title = getString(R.string.gpodnetsync_error_title); GpodnetPreferences.setLastSyncAttempt(false, System.currentTimeMillis());
description = getString(R.string.gpodnetsync_error_descr) + exception.getMessage(); if (UserPreferences.gpodnetNotificationsEnabled()) {
id = R.id.notification_gpodnet_sync_error; 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); PendingIntent activityIntent = ClientConfig.gpodnetCallbacks.getGpodnetSyncServiceErrorNotificationPendingIntent(this);
Notification notification = builder.setContentTitle(title) Notification notification = new NotificationCompat.Builder(this)
.setContentTitle(title)
.setContentText(description) .setContentText(description)
.setContentIntent(activityIntent) .setContentIntent(activityIntent)
.setSmallIcon(R.drawable.stat_notify_sync_error) .setSmallIcon(R.drawable.stat_notify_sync_error)
.setAutoCancel(true) .setAutoCancel(true)
.setVisibility(Notification.VISIBILITY_PUBLIC) .setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
.build(); .build();
NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
nm.notify(id, notification); nm.notify(id, notification);

View File

@ -368,6 +368,9 @@
<string name="pref_gpodnet_sync_sum">Sync subscriptions and episode states with gpodder.net</string> <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_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_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_title">Playback Speeds</string>
<string name="pref_playback_speed_sum">Customize the speeds available for variable speed audio playback</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> <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_auth_error_descr">Wrong username or password</string>
<string name="gpodnetsync_error_title">gpodder.net sync error</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_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 --> <!-- Directory chooser -->
<string name="selected_folder_label">Selected folder:</string> <string name="selected_folder_label">Selected folder:</string>