Add feed preference to include/exclude certain feeds from auto downloads
This commit is contained in:
parent
3a777628dc
commit
cb56bf053c
|
@ -93,6 +93,18 @@
|
|||
android:layout_below="@id/txtvAuthor"
|
||||
android:layout_margin="8dp"
|
||||
android:layout_toRightOf="@id/center_divider" />
|
||||
|
||||
<CheckBox
|
||||
android:id="@+id/cbxAutoDownload"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_below="@id/txtvLanguage"
|
||||
android:layout_margin="8dp"
|
||||
android:text="@string/auto_download_label"
|
||||
android:enabled="false"
|
||||
android:textStyle="bold" />
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
<TextView
|
||||
|
|
|
@ -51,6 +51,7 @@
|
|||
<string name="image_of_prefix">Image of:\u0020</string>
|
||||
<string name="save_username_password_label">Save username and password</string>
|
||||
<string name="close_label">Close</string>
|
||||
<string name="auto_download_label">Include in auto downloads</string>
|
||||
|
||||
|
||||
<!-- 'Add Feed' Activity labels -->
|
||||
|
|
|
@ -7,6 +7,8 @@ import android.util.Log;
|
|||
import android.view.Menu;
|
||||
import android.view.MenuInflater;
|
||||
import android.view.MenuItem;
|
||||
import android.widget.CheckBox;
|
||||
import android.widget.CompoundButton;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
import de.danoeh.antennapod.AppConfig;
|
||||
|
@ -35,6 +37,7 @@ public class FeedInfoActivity extends ActionBarActivity {
|
|||
private TextView txtvDescription;
|
||||
private TextView txtvLanguage;
|
||||
private TextView txtvAuthor;
|
||||
private CheckBox cbxAutoDownload;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
|
@ -44,6 +47,13 @@ public class FeedInfoActivity extends ActionBarActivity {
|
|||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
long feedId = getIntent().getLongExtra(EXTRA_FEED_ID, -1);
|
||||
|
||||
imgvCover = (ImageView) findViewById(R.id.imgvCover);
|
||||
txtvTitle = (TextView) findViewById(R.id.txtvTitle);
|
||||
txtvDescription = (TextView) findViewById(R.id.txtvDescription);
|
||||
txtvLanguage = (TextView) findViewById(R.id.txtvLanguage);
|
||||
txtvAuthor = (TextView) findViewById(R.id.txtvAuthor);
|
||||
cbxAutoDownload = (CheckBox) findViewById(R.id.cbxAutoDownload);
|
||||
|
||||
AsyncTask<Long, Void, Feed> loadTask = new AsyncTask<Long, Void, Feed>() {
|
||||
|
||||
@Override
|
||||
|
@ -53,18 +63,12 @@ public class FeedInfoActivity extends ActionBarActivity {
|
|||
|
||||
@Override
|
||||
protected void onPostExecute(Feed result) {
|
||||
super.onPostExecute(result);
|
||||
if (result != null) {
|
||||
feed = result;
|
||||
if (AppConfig.DEBUG)
|
||||
Log.d(TAG, "Language is " + feed.getLanguage());
|
||||
if (AppConfig.DEBUG)
|
||||
Log.d(TAG, "Author is " + feed.getAuthor());
|
||||
imgvCover = (ImageView) findViewById(R.id.imgvCover);
|
||||
txtvTitle = (TextView) findViewById(R.id.txtvTitle);
|
||||
txtvDescription = (TextView) findViewById(R.id.txtvDescription);
|
||||
txtvLanguage = (TextView) findViewById(R.id.txtvLanguage);
|
||||
txtvAuthor = (TextView) findViewById(R.id.txtvAuthor);
|
||||
imgvCover.post(new Runnable() {
|
||||
|
||||
@Override
|
||||
|
@ -83,6 +87,17 @@ public class FeedInfoActivity extends ActionBarActivity {
|
|||
txtvLanguage.setText(LangUtils
|
||||
.getLanguageString(feed.getLanguage()));
|
||||
}
|
||||
|
||||
cbxAutoDownload.setEnabled(UserPreferences.isEnableAutodownload());
|
||||
cbxAutoDownload.setChecked(feed.getPreferences().getAutoDownload());
|
||||
cbxAutoDownload.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
|
||||
@Override
|
||||
public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
|
||||
feed.getPreferences().setAutoDownload(checked);
|
||||
feed.savePreferences(FeedInfoActivity.this);
|
||||
}
|
||||
});
|
||||
|
||||
supportInvalidateOptionsMenu();
|
||||
|
||||
} else {
|
||||
|
|
|
@ -1,11 +1,14 @@
|
|||
package de.danoeh.antennapod.feed;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import de.danoeh.antennapod.preferences.UserPreferences;
|
||||
import de.danoeh.antennapod.storage.DBWriter;
|
||||
import de.danoeh.antennapod.util.EpisodeFilter;
|
||||
|
||||
/**
|
||||
|
@ -46,6 +49,11 @@ public class Feed extends FeedFile {
|
|||
*/
|
||||
private String type;
|
||||
|
||||
/**
|
||||
* Feed preferences
|
||||
*/
|
||||
private FeedPreferences preferences;
|
||||
|
||||
/**
|
||||
* This constructor is used for restoring a feed from the database.
|
||||
*/
|
||||
|
@ -366,4 +374,15 @@ public class Feed extends FeedFile {
|
|||
this.type = type;
|
||||
}
|
||||
|
||||
public void setPreferences(FeedPreferences preferences) {
|
||||
this.preferences = preferences;
|
||||
}
|
||||
|
||||
public FeedPreferences getPreferences() {
|
||||
return preferences;
|
||||
}
|
||||
|
||||
public void savePreferences(Context context) {
|
||||
DBWriter.setFeedPreferences(context, preferences);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,14 +1,20 @@
|
|||
package de.danoeh.antennapod.feed;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import de.danoeh.antennapod.storage.DBWriter;
|
||||
|
||||
/**
|
||||
* Contains preferences for a single feed.
|
||||
*/
|
||||
public class FeedPreferences {
|
||||
|
||||
private long feedID;
|
||||
private boolean autoDownload;
|
||||
|
||||
public FeedPreferences(long feedID) {
|
||||
public FeedPreferences(long feedID, boolean autoDownload) {
|
||||
this.feedID = feedID;
|
||||
this.autoDownload = autoDownload;
|
||||
}
|
||||
|
||||
public long getFeedID() {
|
||||
|
@ -18,4 +24,16 @@ public class FeedPreferences {
|
|||
public void setFeedID(long feedID) {
|
||||
this.feedID = feedID;
|
||||
}
|
||||
|
||||
public boolean getAutoDownload() {
|
||||
return autoDownload;
|
||||
}
|
||||
|
||||
public void setAutoDownload(boolean autoDownload) {
|
||||
this.autoDownload = autoDownload;
|
||||
}
|
||||
|
||||
public void save(Context context) {
|
||||
DBWriter.setFeedPreferences(context, this);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -333,6 +333,11 @@ public final class DBReader {
|
|||
if (image != null) {
|
||||
image.setFeed(feed);
|
||||
}
|
||||
|
||||
FeedPreferences preferences = new FeedPreferences(cursor.getLong(PodDBAdapter.IDX_FEED_SEL_STD_ID),
|
||||
cursor.getInt(PodDBAdapter.IDX_FEED_SEL_PREFERENCES_AUTO_DOWNLOAD) > 0);
|
||||
|
||||
feed.setPreferences(preferences);
|
||||
return feed;
|
||||
}
|
||||
|
||||
|
@ -768,29 +773,4 @@ public final class DBReader {
|
|||
|
||||
return media;
|
||||
}
|
||||
|
||||
private static FeedPreferences extractFeedPreferencesFromCursorRow(final Cursor cursor) {
|
||||
return new FeedPreferences(cursor.getLong(PodDBAdapter.IDX_FEED_SEL_PREFERENCES_ID));
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads the FeedPreferences-object of a specific Feed from the database.
|
||||
*
|
||||
* @param context A context that is used for opening a database connection.
|
||||
* @param feedID ID of the Feed.
|
||||
* @return The FeedPreferences of the Feed with the given ID or null if the no Feed could be found.
|
||||
*/
|
||||
public static FeedPreferences getFeedPreferencesOfFeed(final Context context, final long feedID) {
|
||||
PodDBAdapter adapter = new PodDBAdapter(context);
|
||||
adapter.open();
|
||||
|
||||
Cursor prefCursor = adapter.getFeedPreferenceCursor(feedID);
|
||||
if (prefCursor.moveToFirst()) {
|
||||
FeedPreferences result = extractFeedPreferencesFromCursorRow(prefCursor);
|
||||
prefCursor.close();
|
||||
return result;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -324,12 +324,14 @@ public final class DBTasks {
|
|||
int counter = 0;
|
||||
for (FeedItem item : queue) {
|
||||
if (item.hasMedia() && !item.getMedia().isDownloaded()
|
||||
&& !item.getMedia().isPlaying()) {
|
||||
&& !item.getMedia().isPlaying()
|
||||
&& item.getFeed().getPreferences().getAutoDownload()) {
|
||||
counter++;
|
||||
}
|
||||
}
|
||||
for (FeedItem item : unreadItems) {
|
||||
if (item.hasMedia() && !item.getMedia().isDownloaded()) {
|
||||
if (item.hasMedia() && !item.getMedia().isDownloaded()
|
||||
&& item.getFeed().getPreferences().getAutoDownload()) {
|
||||
counter++;
|
||||
}
|
||||
}
|
||||
|
@ -375,7 +377,8 @@ public final class DBTasks {
|
|||
for (int i = 0; i < queue.size(); i++) { // ignore playing item
|
||||
FeedItem item = queue.get(i);
|
||||
if (item.hasMedia() && !item.getMedia().isDownloaded()
|
||||
&& !item.getMedia().isPlaying()) {
|
||||
&& !item.getMedia().isPlaying()
|
||||
&& item.getFeed().getPreferences().getAutoDownload()) {
|
||||
itemsToDownload.add(item);
|
||||
episodeSpaceLeft--;
|
||||
undownloadedEpisodes--;
|
||||
|
@ -387,7 +390,8 @@ public final class DBTasks {
|
|||
}
|
||||
if (episodeSpaceLeft > 0 && undownloadedEpisodes > 0) {
|
||||
for (FeedItem item : unreadItems) {
|
||||
if (item.hasMedia() && !item.getMedia().isDownloaded()) {
|
||||
if (item.hasMedia() && !item.getMedia().isDownloaded()
|
||||
&& item.getFeed().getPreferences().getAutoDownload()) {
|
||||
itemsToDownload.add(item);
|
||||
episodeSpaceLeft--;
|
||||
undownloadedEpisodes--;
|
||||
|
|
|
@ -24,7 +24,7 @@ import de.danoeh.antennapod.service.download.DownloadStatus;
|
|||
*/
|
||||
public class PodDBAdapter {
|
||||
private static final String TAG = "PodDBAdapter";
|
||||
private static final int DATABASE_VERSION = 9;
|
||||
private static final int DATABASE_VERSION = 10;
|
||||
public static final String DATABASE_NAME = "Antennapod.db";
|
||||
|
||||
/**
|
||||
|
@ -124,6 +124,7 @@ public class PodDBAdapter {
|
|||
public static final String KEY_DOWNLOADSTATUS_TITLE = "title";
|
||||
public static final String KEY_CHAPTER_TYPE = "type";
|
||||
public static final String KEY_PLAYBACK_COMPLETION_DATE = "playback_completion_date";
|
||||
public static final String KEY_AUTO_DOWNLOAD = "auto_download";
|
||||
|
||||
// Table names
|
||||
public static final String TABLE_NAME_FEEDS = "Feeds";
|
||||
|
@ -145,8 +146,7 @@ public class PodDBAdapter {
|
|||
+ KEY_DESCRIPTION + " TEXT," + KEY_PAYMENT_LINK + " TEXT,"
|
||||
+ KEY_LASTUPDATE + " TEXT," + KEY_LANGUAGE + " TEXT," + KEY_AUTHOR
|
||||
+ " TEXT," + KEY_IMAGE + " INTEGER," + KEY_TYPE + " TEXT,"
|
||||
+ KEY_FEED_IDENTIFIER + " TEXT)";
|
||||
;
|
||||
+ KEY_FEED_IDENTIFIER + " TEXT," + KEY_AUTO_DOWNLOAD + " INTEGER DEFAULT 1)";
|
||||
|
||||
private static final String CREATE_TABLE_FEED_ITEMS = "CREATE TABLE "
|
||||
+ TABLE_NAME_FEED_ITEMS + " (" + TABLE_PRIMARY_KEY + KEY_TITLE
|
||||
|
@ -206,7 +206,8 @@ public class PodDBAdapter {
|
|||
TABLE_NAME_FEEDS + "." + KEY_AUTHOR,
|
||||
TABLE_NAME_FEEDS + "." + KEY_IMAGE,
|
||||
TABLE_NAME_FEEDS + "." + KEY_TYPE,
|
||||
TABLE_NAME_FEEDS + "." + KEY_FEED_IDENTIFIER
|
||||
TABLE_NAME_FEEDS + "." + KEY_FEED_IDENTIFIER,
|
||||
TABLE_NAME_FEEDS + "." + KEY_AUTO_DOWNLOAD,
|
||||
};
|
||||
|
||||
// column indices for FEED_SEL_STD
|
||||
|
@ -224,17 +225,8 @@ public class PodDBAdapter {
|
|||
public static final int IDX_FEED_SEL_STD_IMAGE = 11;
|
||||
public static final int IDX_FEED_SEL_STD_TYPE = 12;
|
||||
public static final int IDX_FEED_SEL_STD_FEED_IDENTIFIER = 13;
|
||||
public static final int IDX_FEED_SEL_PREFERENCES_AUTO_DOWNLOAD = 14;
|
||||
|
||||
/**
|
||||
* Select all preference-columns from the feed table
|
||||
*/
|
||||
private static final String[] FEED_SEL_PREFERENCES = {
|
||||
TABLE_NAME_FEEDS + "." + KEY_ID,
|
||||
// enter preferences here
|
||||
};
|
||||
|
||||
// column indices for FEED_SEL_PREFERENCES
|
||||
public static final int IDX_FEED_SEL_PREFERENCES_ID = 0;
|
||||
|
||||
/**
|
||||
* Select all columns from the feeditems-table except description and
|
||||
|
@ -373,6 +365,7 @@ public class PodDBAdapter {
|
|||
throw new IllegalArgumentException("Feed ID of preference must not be null");
|
||||
}
|
||||
ContentValues values = new ContentValues();
|
||||
values.put(KEY_AUTO_DOWNLOAD, prefs.getAutoDownload());
|
||||
db.update(TABLE_NAME_FEEDS, values, KEY_ID + "=?", new String[]{String.valueOf(prefs.getFeedID())});
|
||||
}
|
||||
|
||||
|
@ -930,10 +923,6 @@ public class PodDBAdapter {
|
|||
return c;
|
||||
}
|
||||
|
||||
public final Cursor getFeedPreferenceCursor(final long feedID) {
|
||||
return db.query(TABLE_NAME_FEEDS, FEED_SEL_PREFERENCES, KEY_ID + "=" + feedID, null, null, null, null);
|
||||
}
|
||||
|
||||
public final Cursor getFeedItemCursor(final String... ids) {
|
||||
if (ids.length > IN_OPERATOR_MAXIMUM) {
|
||||
throw new IllegalArgumentException(
|
||||
|
@ -1173,6 +1162,11 @@ public class PodDBAdapter {
|
|||
}
|
||||
feeditemCursor.close();
|
||||
}
|
||||
if (oldVersion <= 9) {
|
||||
db.execSQL("ALTER TABLE " + TABLE_NAME_FEEDS
|
||||
+ " ADD COLUMN " + KEY_AUTO_DOWNLOAD
|
||||
+ " INTEGER DEFAULT 1");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue