Add "New Episodes Action" preference (#6095)
This commit is contained in:
parent
5c79bc7c45
commit
9fed944392
@ -129,7 +129,8 @@ public class PlaybackServiceMediaPlayerTest {
|
||||
|
||||
private Playable writeTestPlayable(String downloadUrl, String fileUrl) {
|
||||
Feed f = new Feed(0, null, "f", "l", "d", null, null, null, null, "i", null, null, "l", false);
|
||||
FeedPreferences prefs = new FeedPreferences(f.getId(), false, FeedPreferences.AutoDeleteAction.NO, VolumeAdaptionSetting.OFF, null, null);
|
||||
FeedPreferences prefs = new FeedPreferences(f.getId(), false, FeedPreferences.AutoDeleteAction.NEVER,
|
||||
VolumeAdaptionSetting.OFF, FeedPreferences.NewEpisodesAction.NOTHING, null, null);
|
||||
f.setPreferences(prefs);
|
||||
f.setItems(new ArrayList<>());
|
||||
FeedItem i = new FeedItem(0, "t", "i", "l", new Date(), FeedItem.UNPLAYED, f);
|
||||
|
@ -105,6 +105,7 @@ public class FeedSettingsFragment extends Fragment {
|
||||
private static final CharSequence PREF_AUTHENTICATION = "authentication";
|
||||
private static final CharSequence PREF_AUTO_DELETE = "autoDelete";
|
||||
private static final CharSequence PREF_CATEGORY_AUTO_DOWNLOAD = "autoDownloadCategory";
|
||||
private static final CharSequence PREF_NEW_EPISODES_ACTION = "feedNewEpisodesAction";
|
||||
private static final String PREF_FEED_PLAYBACK_SPEED = "feedPlaybackSpeed";
|
||||
private static final String PREF_AUTO_SKIP = "feedAutoSkip";
|
||||
private static final String PREF_TAGS = "tags";
|
||||
@ -156,6 +157,7 @@ public class FeedSettingsFragment extends Fragment {
|
||||
setupKeepUpdatedPreference();
|
||||
setupAutoDeletePreference();
|
||||
setupVolumeReductionPreferences();
|
||||
setupNewEpisodesAction();
|
||||
setupAuthentificationPreference();
|
||||
setupEpisodeFilterPreference();
|
||||
setupPlaybackSpeedPreference();
|
||||
@ -166,6 +168,7 @@ public class FeedSettingsFragment extends Fragment {
|
||||
updateAutoDeleteSummary();
|
||||
updateVolumeReductionValue();
|
||||
updateAutoDownloadEnabled();
|
||||
updateNewEpisodesAction();
|
||||
|
||||
if (feed.isLocalFeed()) {
|
||||
findPreference(PREF_AUTHENTICATION).setVisible(false);
|
||||
@ -283,11 +286,12 @@ public class FeedSettingsFragment extends Fragment {
|
||||
feedPreferences.setAutoDeleteAction(FeedPreferences.AutoDeleteAction.GLOBAL);
|
||||
break;
|
||||
case "always":
|
||||
feedPreferences.setAutoDeleteAction(FeedPreferences.AutoDeleteAction.YES);
|
||||
feedPreferences.setAutoDeleteAction(FeedPreferences.AutoDeleteAction.ALWAYS);
|
||||
break;
|
||||
case "never":
|
||||
feedPreferences.setAutoDeleteAction(FeedPreferences.AutoDeleteAction.NO);
|
||||
feedPreferences.setAutoDeleteAction(FeedPreferences.AutoDeleteAction.NEVER);
|
||||
break;
|
||||
default:
|
||||
}
|
||||
DBWriter.setFeedPreferences(feedPreferences);
|
||||
updateAutoDeleteSummary();
|
||||
@ -300,14 +304,14 @@ public class FeedSettingsFragment extends Fragment {
|
||||
|
||||
switch (feedPreferences.getAutoDeleteAction()) {
|
||||
case GLOBAL:
|
||||
autoDeletePreference.setSummary(R.string.feed_auto_download_global);
|
||||
autoDeletePreference.setSummary(R.string.global_default);
|
||||
autoDeletePreference.setValue("global");
|
||||
break;
|
||||
case YES:
|
||||
case ALWAYS:
|
||||
autoDeletePreference.setSummary(R.string.feed_auto_download_always);
|
||||
autoDeletePreference.setValue("always");
|
||||
break;
|
||||
case NO:
|
||||
case NEVER:
|
||||
autoDeletePreference.setSummary(R.string.feed_auto_download_never);
|
||||
autoDeletePreference.setValue("never");
|
||||
break;
|
||||
@ -327,6 +331,7 @@ public class FeedSettingsFragment extends Fragment {
|
||||
case "heavy":
|
||||
feedPreferences.setVolumeAdaptionSetting(VolumeAdaptionSetting.HEAVY_REDUCTION);
|
||||
break;
|
||||
default:
|
||||
}
|
||||
DBWriter.setFeedPreferences(feedPreferences);
|
||||
updateVolumeReductionValue();
|
||||
@ -352,6 +357,34 @@ public class FeedSettingsFragment extends Fragment {
|
||||
}
|
||||
}
|
||||
|
||||
private void setupNewEpisodesAction() {
|
||||
findPreference(PREF_NEW_EPISODES_ACTION).setOnPreferenceChangeListener((preference, newValue) -> {
|
||||
int code = Integer.parseInt((String) newValue);
|
||||
feedPreferences.setNewEpisodesAction(FeedPreferences.NewEpisodesAction.fromCode(code));
|
||||
DBWriter.setFeedPreferences(feedPreferences);
|
||||
updateNewEpisodesAction();
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
||||
private void updateNewEpisodesAction() {
|
||||
ListPreference newEpisodesAction = findPreference(PREF_NEW_EPISODES_ACTION);
|
||||
newEpisodesAction.setValue("" + feedPreferences.getNewEpisodesAction().code);
|
||||
|
||||
switch (feedPreferences.getNewEpisodesAction()) {
|
||||
case GLOBAL:
|
||||
newEpisodesAction.setSummary(R.string.global_default);
|
||||
break;
|
||||
case ADD_TO_INBOX:
|
||||
newEpisodesAction.setSummary(R.string.feed_new_episodes_action_add_to_inbox);
|
||||
break;
|
||||
case NOTHING:
|
||||
newEpisodesAction.setSummary(R.string.feed_new_episodes_action_nothing);
|
||||
break;
|
||||
default:
|
||||
}
|
||||
}
|
||||
|
||||
private void setupKeepUpdatedPreference() {
|
||||
SwitchPreferenceCompat pref = findPreference("keepUpdated");
|
||||
|
||||
|
@ -89,28 +89,12 @@ public class FeedMultiSelectActionHandler {
|
||||
|
||||
private void autoDeleteEpisodesPrefHandler() {
|
||||
PreferenceListDialog preferenceListDialog = new PreferenceListDialog(activity,
|
||||
"Auto delete episodes");
|
||||
activity.getString(R.string.auto_delete_label));
|
||||
String[] items = activity.getResources().getStringArray(R.array.spnAutoDeleteItems);
|
||||
String[] values = activity.getResources().getStringArray(R.array.spnAutoDeleteValues);
|
||||
preferenceListDialog.openDialog(items);
|
||||
preferenceListDialog.setOnPreferenceChangedListener(which -> {
|
||||
FeedPreferences.AutoDeleteAction autoDeleteAction = null;
|
||||
switch (values[which]) {
|
||||
case "global":
|
||||
autoDeleteAction = FeedPreferences.AutoDeleteAction.GLOBAL;
|
||||
break;
|
||||
case "always":
|
||||
autoDeleteAction = FeedPreferences.AutoDeleteAction.YES;
|
||||
break;
|
||||
case "never":
|
||||
autoDeleteAction = FeedPreferences.AutoDeleteAction.NO;
|
||||
break;
|
||||
default:
|
||||
}
|
||||
FeedPreferences.AutoDeleteAction finalAutoDeleteAction = autoDeleteAction;
|
||||
saveFeedPreferences(feedPreferences -> {
|
||||
feedPreferences.setAutoDeleteAction(finalAutoDeleteAction);
|
||||
});
|
||||
FeedPreferences.AutoDeleteAction autoDeleteAction = FeedPreferences.AutoDeleteAction.fromCode(which);
|
||||
saveFeedPreferences(feedPreferences -> feedPreferences.setAutoDeleteAction(autoDeleteAction));
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -10,7 +10,7 @@
|
||||
android:id="@+id/useGlobalCheckbox"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/feed_auto_download_global"
|
||||
android:text="@string/global_default"
|
||||
android:layout_marginBottom="8dp" />
|
||||
|
||||
<LinearLayout
|
||||
|
@ -45,7 +45,7 @@
|
||||
android:entryValues="@array/spnAutoDeleteValues"
|
||||
android:icon="@drawable/ic_delete"
|
||||
android:key="autoDelete"
|
||||
android:summary="@string/feed_auto_download_global"
|
||||
android:summary="@string/global_default"
|
||||
android:title="@string/auto_delete_label" />
|
||||
|
||||
<de.danoeh.antennapod.preferences.MaterialListPreference
|
||||
@ -57,6 +57,14 @@
|
||||
android:summary="@string/feed_volume_reduction_summary"
|
||||
android:title="@string/feed_volume_reduction" />
|
||||
|
||||
<de.danoeh.antennapod.preferences.MaterialListPreference
|
||||
android:entries="@array/feedNewEpisodesActionItems"
|
||||
android:entryValues="@array/feedNewEpisodesActionValues"
|
||||
android:icon="@drawable/ic_feed"
|
||||
android:key="feedNewEpisodesAction"
|
||||
android:summary="@string/global_default"
|
||||
android:title="@string/pref_new_episodes_action_title" />
|
||||
|
||||
<PreferenceCategory
|
||||
android:key="autoDownloadCategory"
|
||||
android:title="@string/auto_download_settings_label">
|
||||
|
@ -13,6 +13,13 @@
|
||||
android:key="prefAutoDownloadSettings"
|
||||
android:title="@string/pref_automatic_download_title"
|
||||
search:ignore="true" />
|
||||
<de.danoeh.antennapod.preferences.MaterialListPreference
|
||||
android:entryValues="@array/globalNewEpisodesActionValues"
|
||||
android:entries="@array/globalNewEpisodesActionItems"
|
||||
android:key="prefNewEpisodesAction"
|
||||
android:title="@string/pref_new_episodes_action_title"
|
||||
android:summary="@string/pref_new_episodes_action_sum"
|
||||
android:defaultValue="1"/>
|
||||
</PreferenceCategory>
|
||||
|
||||
<PreferenceCategory android:title="@string/download_pref_details">
|
||||
|
@ -124,7 +124,7 @@ public class LocalFeedUpdater {
|
||||
feed.setImageUrl(getImageUrl(allFiles, folderUri));
|
||||
|
||||
feed.getPreferences().setAutoDownload(false);
|
||||
feed.getPreferences().setAutoDeleteAction(FeedPreferences.AutoDeleteAction.NO);
|
||||
feed.getPreferences().setAutoDeleteAction(FeedPreferences.AutoDeleteAction.NEVER);
|
||||
feed.setDescription(context.getString(R.string.local_feed_description));
|
||||
feed.setAuthor(context.getString(R.string.local_folder));
|
||||
|
||||
|
@ -43,7 +43,8 @@ public class FeedParserTask implements Callable<FeedHandlerResult> {
|
||||
feed.setId(request.getFeedfileId());
|
||||
feed.setDownloaded(true);
|
||||
feed.setPreferences(new FeedPreferences(0, true, FeedPreferences.AutoDeleteAction.GLOBAL,
|
||||
VolumeAdaptionSetting.OFF, request.getUsername(), request.getPassword()));
|
||||
VolumeAdaptionSetting.OFF, FeedPreferences.NewEpisodesAction.GLOBAL, request.getUsername(),
|
||||
request.getPassword()));
|
||||
feed.setPageNr(request.getArguments().getInt(DownloadRequest.REQUEST_ARG_PAGE_NR, 0));
|
||||
|
||||
DownloadError reason = null;
|
||||
|
@ -1073,7 +1073,7 @@ public class PlaybackService extends MediaBrowserServiceCompat {
|
||||
// Delete episode if enabled
|
||||
FeedPreferences.AutoDeleteAction action =
|
||||
item.getFeed().getPreferences().getCurrentAutoDelete();
|
||||
boolean shouldAutoDelete = action == FeedPreferences.AutoDeleteAction.YES
|
||||
boolean shouldAutoDelete = action == FeedPreferences.AutoDeleteAction.ALWAYS
|
||||
|| (action == FeedPreferences.AutoDeleteAction.GLOBAL && UserPreferences.isAutoDelete());
|
||||
if (shouldAutoDelete && (!item.isTagged(FeedItem.TAG_FAVORITE)
|
||||
|| !UserPreferences.shouldFavoriteKeepEpisode())) {
|
||||
|
@ -42,6 +42,7 @@ import de.danoeh.antennapod.core.util.comparator.FeedItemPubdateComparator;
|
||||
import de.danoeh.antennapod.model.feed.Feed;
|
||||
import de.danoeh.antennapod.model.feed.FeedItem;
|
||||
import de.danoeh.antennapod.model.feed.FeedMedia;
|
||||
import de.danoeh.antennapod.model.feed.FeedPreferences;
|
||||
import de.danoeh.antennapod.net.sync.model.EpisodeAction;
|
||||
|
||||
/**
|
||||
@ -298,13 +299,6 @@ public final class DBTasks {
|
||||
Log.d(TAG, "Found no existing Feed with title "
|
||||
+ newFeed.getTitle() + ". Adding as new one.");
|
||||
|
||||
// Add a new Feed
|
||||
// all new feeds will have the most recent item marked as unplayed
|
||||
FeedItem mostRecent = newFeed.getMostRecentItem();
|
||||
if (mostRecent != null) {
|
||||
mostRecent.setNew();
|
||||
}
|
||||
|
||||
resultFeed = newFeed;
|
||||
} else {
|
||||
Log.d(TAG, "Feed with title " + newFeed.getTitle()
|
||||
@ -388,14 +382,15 @@ public final class DBTasks {
|
||||
savedFeed.getItems().add(idx, item);
|
||||
}
|
||||
|
||||
// only mark the item new if it was published after or at the same time
|
||||
// as the most recent item
|
||||
// (if the most recent date is null then we can assume there are no items
|
||||
// and this is the first, hence 'new')
|
||||
// New items that do not have a pubDate set are always marked as new
|
||||
if (item.getPubDate() == null || priorMostRecentDate == null
|
||||
|| priorMostRecentDate.before(item.getPubDate())
|
||||
|| priorMostRecentDate.equals(item.getPubDate())) {
|
||||
FeedPreferences.NewEpisodesAction action = savedFeed.getPreferences().getNewEpisodesAction();
|
||||
if (action == FeedPreferences.NewEpisodesAction.GLOBAL) {
|
||||
action = UserPreferences.getNewEpisodesAction();
|
||||
}
|
||||
if (action == FeedPreferences.NewEpisodesAction.ADD_TO_INBOX
|
||||
&& (item.getPubDate() == null
|
||||
|| priorMostRecentDate == null
|
||||
|| priorMostRecentDate.before(item.getPubDate())
|
||||
|| priorMostRecentDate.equals(item.getPubDate()))) {
|
||||
Log.d(TAG, "Marking item published on " + item.getPubDate()
|
||||
+ " new, prior most recent date = " + priorMostRecentDate);
|
||||
item.setNew();
|
||||
|
@ -2,7 +2,7 @@
|
||||
<resources>
|
||||
|
||||
<string-array name="spnAutoDeleteItems">
|
||||
<item>@string/feed_auto_download_global</item>
|
||||
<item>@string/global_default</item>
|
||||
<item>@string/feed_auto_download_always</item>
|
||||
<item>@string/feed_auto_download_never</item>
|
||||
</string-array>
|
||||
@ -25,6 +25,28 @@
|
||||
<item>heavy</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="globalNewEpisodesActionItems">
|
||||
<item>@string/feed_new_episodes_action_add_to_inbox</item>
|
||||
<item>@string/feed_new_episodes_action_nothing</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="globalNewEpisodesActionValues">
|
||||
<item>1</item>
|
||||
<item>2</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="feedNewEpisodesActionItems">
|
||||
<item>@string/global_default</item>
|
||||
<item>@string/feed_new_episodes_action_add_to_inbox</item>
|
||||
<item>@string/feed_new_episodes_action_nothing</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="feedNewEpisodesActionValues">
|
||||
<item>0</item>
|
||||
<item>1</item>
|
||||
<item>2</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="smart_mark_as_played_values">
|
||||
<item>0</item>
|
||||
<item>15</item>
|
||||
|
@ -173,7 +173,8 @@ public class Feed extends FeedFile {
|
||||
*/
|
||||
public Feed(String url, String lastUpdate, String title, String username, String password) {
|
||||
this(url, lastUpdate, title);
|
||||
preferences = new FeedPreferences(0, true, FeedPreferences.AutoDeleteAction.GLOBAL, VolumeAdaptionSetting.OFF, username, password);
|
||||
preferences = new FeedPreferences(0, true, FeedPreferences.AutoDeleteAction.GLOBAL, VolumeAdaptionSetting.OFF,
|
||||
FeedPreferences.NewEpisodesAction.GLOBAL, username, password);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -17,9 +17,45 @@ public class FeedPreferences implements Serializable {
|
||||
public static final String TAG_SEPARATOR = "\u001e";
|
||||
|
||||
public enum AutoDeleteAction {
|
||||
GLOBAL,
|
||||
YES,
|
||||
NO
|
||||
GLOBAL(0),
|
||||
ALWAYS(1),
|
||||
NEVER(2);
|
||||
|
||||
public final int code;
|
||||
|
||||
AutoDeleteAction(int code) {
|
||||
this.code = code;
|
||||
}
|
||||
|
||||
public static AutoDeleteAction fromCode(int code) {
|
||||
for (AutoDeleteAction action : values()) {
|
||||
if (code == action.code) {
|
||||
return action;
|
||||
}
|
||||
}
|
||||
return NEVER;
|
||||
}
|
||||
}
|
||||
|
||||
public enum NewEpisodesAction {
|
||||
GLOBAL(0),
|
||||
ADD_TO_INBOX(1),
|
||||
NOTHING(2);
|
||||
|
||||
public final int code;
|
||||
|
||||
NewEpisodesAction(int code) {
|
||||
this.code = code;
|
||||
}
|
||||
|
||||
public static NewEpisodesAction fromCode(int code) {
|
||||
for (NewEpisodesAction action : values()) {
|
||||
if (code == action.code) {
|
||||
return action;
|
||||
}
|
||||
}
|
||||
return ADD_TO_INBOX;
|
||||
}
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@ -29,6 +65,7 @@ public class FeedPreferences implements Serializable {
|
||||
private boolean keepUpdated;
|
||||
private AutoDeleteAction autoDeleteAction;
|
||||
private VolumeAdaptionSetting volumeAdaptionSetting;
|
||||
private NewEpisodesAction newEpisodesAction;
|
||||
private String username;
|
||||
private String password;
|
||||
private float feedPlaybackSpeed;
|
||||
@ -38,15 +75,17 @@ public class FeedPreferences implements Serializable {
|
||||
private final Set<String> tags = new HashSet<>();
|
||||
|
||||
public FeedPreferences(long feedID, boolean autoDownload, AutoDeleteAction autoDeleteAction,
|
||||
VolumeAdaptionSetting volumeAdaptionSetting, String username, String password) {
|
||||
this(feedID, autoDownload, true, autoDeleteAction, volumeAdaptionSetting,
|
||||
username, password, new FeedFilter(), SPEED_USE_GLOBAL, 0, 0, false, new HashSet<>());
|
||||
VolumeAdaptionSetting volumeAdaptionSetting, NewEpisodesAction newEpisodesAction,
|
||||
String username, String password) {
|
||||
this(feedID, autoDownload, true, autoDeleteAction, volumeAdaptionSetting, username, password,
|
||||
new FeedFilter(), SPEED_USE_GLOBAL, 0, 0, false, newEpisodesAction, new HashSet<>());
|
||||
}
|
||||
|
||||
public FeedPreferences(long feedID, boolean autoDownload, boolean keepUpdated,
|
||||
AutoDeleteAction autoDeleteAction, VolumeAdaptionSetting volumeAdaptionSetting,
|
||||
String username, String password, @NonNull FeedFilter filter, float feedPlaybackSpeed,
|
||||
int feedSkipIntro, int feedSkipEnding, boolean showEpisodeNotification,
|
||||
String username, String password, @NonNull FeedFilter filter,
|
||||
float feedPlaybackSpeed, int feedSkipIntro, int feedSkipEnding,
|
||||
boolean showEpisodeNotification, NewEpisodesAction newEpisodesAction,
|
||||
Set<String> tags) {
|
||||
this.feedID = feedID;
|
||||
this.autoDownload = autoDownload;
|
||||
@ -60,6 +99,7 @@ public class FeedPreferences implements Serializable {
|
||||
this.feedSkipIntro = feedSkipIntro;
|
||||
this.feedSkipEnding = feedSkipEnding;
|
||||
this.showEpisodeNotification = showEpisodeNotification;
|
||||
this.newEpisodesAction = newEpisodesAction;
|
||||
this.tags.addAll(tags);
|
||||
}
|
||||
|
||||
@ -140,6 +180,10 @@ public class FeedPreferences implements Serializable {
|
||||
return volumeAdaptionSetting;
|
||||
}
|
||||
|
||||
public NewEpisodesAction getNewEpisodesAction() {
|
||||
return newEpisodesAction;
|
||||
}
|
||||
|
||||
public void setAutoDeleteAction(AutoDeleteAction autoDeleteAction) {
|
||||
this.autoDeleteAction = autoDeleteAction;
|
||||
}
|
||||
@ -148,6 +192,10 @@ public class FeedPreferences implements Serializable {
|
||||
this.volumeAdaptionSetting = volumeAdaptionSetting;
|
||||
}
|
||||
|
||||
public void setNewEpisodesAction(NewEpisodesAction newEpisodesAction) {
|
||||
this.newEpisodesAction = newEpisodesAction;
|
||||
}
|
||||
|
||||
public AutoDeleteAction getCurrentAutoDelete() {
|
||||
return autoDeleteAction;
|
||||
}
|
||||
|
@ -330,6 +330,10 @@ class DBUpgrader {
|
||||
db.execSQL("ALTER TABLE " + PodDBAdapter.TABLE_NAME_FEED_ITEMS
|
||||
+ " ADD COLUMN " + PodDBAdapter.KEY_PODCASTINDEX_CHAPTER_URL + " TEXT");
|
||||
}
|
||||
if (oldVersion < 3010000) {
|
||||
db.execSQL("ALTER TABLE " + PodDBAdapter.TABLE_NAME_FEEDS
|
||||
+ " ADD COLUMN " + PodDBAdapter.KEY_NEW_EPISODES_ACTION + " INTEGER DEFAULT 0");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -54,7 +54,7 @@ public class PodDBAdapter {
|
||||
|
||||
private static final String TAG = "PodDBAdapter";
|
||||
public static final String DATABASE_NAME = "Antennapod.db";
|
||||
public static final int VERSION = 2060000;
|
||||
public static final int VERSION = 3010000;
|
||||
|
||||
/**
|
||||
* Maximum number of arguments for IN-operator.
|
||||
@ -120,6 +120,7 @@ public class PodDBAdapter {
|
||||
public static final String KEY_FEED_SKIP_ENDING = "feed_skip_ending";
|
||||
public static final String KEY_FEED_TAGS = "tags";
|
||||
public static final String KEY_EPISODE_NOTIFICATION = "episode_notification";
|
||||
public static final String KEY_NEW_EPISODES_ACTION = "new_episodes_action";
|
||||
public static final String KEY_PODCASTINDEX_CHAPTER_URL = "podcastindex_chapter_url";
|
||||
|
||||
// Table names
|
||||
@ -161,7 +162,8 @@ public class PodDBAdapter {
|
||||
+ KEY_FEED_TAGS + " TEXT,"
|
||||
+ KEY_FEED_SKIP_INTRO + " INTEGER DEFAULT 0,"
|
||||
+ KEY_FEED_SKIP_ENDING + " INTEGER DEFAULT 0,"
|
||||
+ KEY_EPISODE_NOTIFICATION + " INTEGER DEFAULT 0)";
|
||||
+ KEY_EPISODE_NOTIFICATION + " INTEGER DEFAULT 0,"
|
||||
+ KEY_NEW_EPISODES_ACTION + " INTEGER DEFAULT 0)";
|
||||
|
||||
private static final String CREATE_TABLE_FEED_ITEMS = "CREATE TABLE "
|
||||
+ TABLE_NAME_FEED_ITEMS + " (" + TABLE_PRIMARY_KEY
|
||||
@ -311,7 +313,8 @@ public class PodDBAdapter {
|
||||
+ TABLE_NAME_FEEDS + "." + KEY_FEED_TAGS + ", "
|
||||
+ TABLE_NAME_FEEDS + "." + KEY_FEED_SKIP_INTRO + ", "
|
||||
+ TABLE_NAME_FEEDS + "." + KEY_FEED_SKIP_ENDING + ", "
|
||||
+ TABLE_NAME_FEEDS + "." + KEY_EPISODE_NOTIFICATION;
|
||||
+ TABLE_NAME_FEEDS + "." + KEY_EPISODE_NOTIFICATION + ", "
|
||||
+ TABLE_NAME_FEEDS + "." + KEY_NEW_EPISODES_ACTION;
|
||||
|
||||
private static final String JOIN_FEED_ITEM_AND_MEDIA = " LEFT JOIN " + TABLE_NAME_FEED_MEDIA
|
||||
+ " ON " + TABLE_NAME_FEED_ITEMS + "." + KEY_ID + "=" + TABLE_NAME_FEED_MEDIA + "." + KEY_FEEDITEM + " ";
|
||||
@ -448,7 +451,7 @@ public class PodDBAdapter {
|
||||
ContentValues values = new ContentValues();
|
||||
values.put(KEY_AUTO_DOWNLOAD_ENABLED, prefs.getAutoDownload());
|
||||
values.put(KEY_KEEP_UPDATED, prefs.getKeepUpdated());
|
||||
values.put(KEY_AUTO_DELETE_ACTION, prefs.getAutoDeleteAction().ordinal());
|
||||
values.put(KEY_AUTO_DELETE_ACTION, prefs.getAutoDeleteAction().code);
|
||||
values.put(KEY_FEED_VOLUME_ADAPTION, prefs.getVolumeAdaptionSetting().toInteger());
|
||||
values.put(KEY_USERNAME, prefs.getUsername());
|
||||
values.put(KEY_PASSWORD, prefs.getPassword());
|
||||
@ -460,6 +463,7 @@ public class PodDBAdapter {
|
||||
values.put(KEY_FEED_SKIP_INTRO, prefs.getFeedSkipIntro());
|
||||
values.put(KEY_FEED_SKIP_ENDING, prefs.getFeedSkipEnding());
|
||||
values.put(KEY_EPISODE_NOTIFICATION, prefs.getShowEpisodeNotification());
|
||||
values.put(KEY_NEW_EPISODES_ACTION, prefs.getNewEpisodesAction().code);
|
||||
db.update(TABLE_NAME_FEEDS, values, KEY_ID + "=?", new String[]{String.valueOf(prefs.getFeedID())});
|
||||
}
|
||||
|
||||
|
@ -34,14 +34,14 @@ public abstract class FeedPreferencesCursorMapper {
|
||||
int indexAutoSkipIntro = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_FEED_SKIP_INTRO);
|
||||
int indexAutoSkipEnding = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_FEED_SKIP_ENDING);
|
||||
int indexEpisodeNotification = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_EPISODE_NOTIFICATION);
|
||||
int indexNewEpisodesAction = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_NEW_EPISODES_ACTION);
|
||||
int indexTags = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_FEED_TAGS);
|
||||
|
||||
long feedId = cursor.getLong(indexId);
|
||||
boolean autoDownload = cursor.getInt(indexAutoDownload) > 0;
|
||||
boolean autoRefresh = cursor.getInt(indexAutoRefresh) > 0;
|
||||
int autoDeleteActionIndex = cursor.getInt(indexAutoDeleteAction);
|
||||
FeedPreferences.AutoDeleteAction autoDeleteAction =
|
||||
FeedPreferences.AutoDeleteAction.values()[autoDeleteActionIndex];
|
||||
FeedPreferences.AutoDeleteAction.fromCode(cursor.getInt(indexAutoDeleteAction));
|
||||
int volumeAdaptionValue = cursor.getInt(indexVolumeAdaption);
|
||||
VolumeAdaptionSetting volumeAdaptionSetting = VolumeAdaptionSetting.fromInteger(volumeAdaptionValue);
|
||||
String username = cursor.getString(indexUsername);
|
||||
@ -52,6 +52,8 @@ public abstract class FeedPreferencesCursorMapper {
|
||||
float feedPlaybackSpeed = cursor.getFloat(indexFeedPlaybackSpeed);
|
||||
int feedAutoSkipIntro = cursor.getInt(indexAutoSkipIntro);
|
||||
int feedAutoSkipEnding = cursor.getInt(indexAutoSkipEnding);
|
||||
FeedPreferences.NewEpisodesAction feedNewEpisodesAction =
|
||||
FeedPreferences.NewEpisodesAction.fromCode(cursor.getInt(indexNewEpisodesAction));
|
||||
boolean showNotification = cursor.getInt(indexEpisodeNotification) > 0;
|
||||
String tagsString = cursor.getString(indexTags);
|
||||
if (TextUtils.isEmpty(tagsString)) {
|
||||
@ -69,6 +71,7 @@ public abstract class FeedPreferencesCursorMapper {
|
||||
feedAutoSkipIntro,
|
||||
feedAutoSkipEnding,
|
||||
showNotification,
|
||||
feedNewEpisodesAction,
|
||||
new HashSet<>(Arrays.asList(tagsString.split(FeedPreferences.TAG_SEPARATOR))));
|
||||
}
|
||||
}
|
||||
|
@ -13,6 +13,7 @@ import androidx.annotation.VisibleForTesting;
|
||||
import androidx.core.app.NotificationCompat;
|
||||
import androidx.preference.PreferenceManager;
|
||||
|
||||
import de.danoeh.antennapod.model.feed.FeedPreferences;
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONException;
|
||||
|
||||
@ -67,6 +68,7 @@ public class UserPreferences {
|
||||
|
||||
public static final String PREF_QUEUE_KEEP_SORTED = "prefQueueKeepSorted";
|
||||
public static final String PREF_QUEUE_KEEP_SORTED_ORDER = "prefQueueKeepSortedOrder";
|
||||
public static final String PREF_NEW_EPISODES_ACTION = "prefNewEpisodesAction";
|
||||
private static final String PREF_DOWNLOADS_SORTED_ORDER = "prefDownloadSortedOrder";
|
||||
|
||||
// Playback
|
||||
@ -944,6 +946,12 @@ public class UserPreferences {
|
||||
.apply();
|
||||
}
|
||||
|
||||
public static FeedPreferences.NewEpisodesAction getNewEpisodesAction() {
|
||||
String str = prefs.getString(PREF_NEW_EPISODES_ACTION,
|
||||
"" + FeedPreferences.NewEpisodesAction.ADD_TO_INBOX.code);
|
||||
return FeedPreferences.NewEpisodesAction.fromCode(Integer.parseInt(str));
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the sort order for the downloads.
|
||||
*/
|
||||
|
@ -102,6 +102,7 @@
|
||||
<string name="yes">Yes</string>
|
||||
<string name="no">No</string>
|
||||
<string name="reset">Reset</string>
|
||||
<string name="global_default">Global default</string>
|
||||
<string name="url_label">URL</string>
|
||||
<string name="support_funding_label">Support</string>
|
||||
<string name="support_podcast">Support this Podcast</string>
|
||||
@ -124,9 +125,10 @@
|
||||
<string name="feed_volume_reduction_light">Light</string>
|
||||
<string name="feed_volume_reduction_heavy">Heavy</string>
|
||||
<string name="parallel_downloads">%1$d parallel downloads</string>
|
||||
<string name="feed_auto_download_global">Global default</string>
|
||||
<string name="feed_auto_download_always">Always</string>
|
||||
<string name="feed_auto_download_never">Never</string>
|
||||
<string name="feed_new_episodes_action_add_to_inbox">Add to Inbox</string>
|
||||
<string name="feed_new_episodes_action_nothing">Nothing</string>
|
||||
<string name="send_label">Send…</string>
|
||||
<string name="episode_cleanup_never">Never</string>
|
||||
<string name="episode_cleanup_except_favorite_removal">When not favorited</string>
|
||||
@ -529,6 +531,8 @@
|
||||
<string name="pref_contribute">Contribute</string>
|
||||
<string name="pref_show_subscription_title">Show Subscription Title</string>
|
||||
<string name="pref_show_subscription_title_summary">Display the subscription title below the cover image.</string>
|
||||
<string name="pref_new_episodes_action_title">New Episodes Action</string>
|
||||
<string name="pref_new_episodes_action_sum">Action to take for new episodes</string>
|
||||
|
||||
<!-- About screen -->
|
||||
<string name="about_pref">About</string>
|
||||
|
Loading…
x
Reference in New Issue
Block a user