From c0c98dcfabe2faef59a08dd996bc332e407b8e12 Mon Sep 17 00:00:00 2001 From: daniel oeh Date: Wed, 11 Sep 2013 17:54:00 +0200 Subject: Added standard column selection for Feed table --- src/de/danoeh/antennapod/storage/DBReader.java | 28 ++++---- src/de/danoeh/antennapod/storage/PodDBAdapter.java | 77 ++++++++++++++++------ 2 files changed, 71 insertions(+), 34 deletions(-) diff --git a/src/de/danoeh/antennapod/storage/DBReader.java b/src/de/danoeh/antennapod/storage/DBReader.java index a5a4c8cd4..be38aa3eb 100644 --- a/src/de/danoeh/antennapod/storage/DBReader.java +++ b/src/de/danoeh/antennapod/storage/DBReader.java @@ -313,29 +313,29 @@ public final class DBReader { private static Feed extractFeedFromCursorRow(PodDBAdapter adapter, Cursor cursor) { Date lastUpdate = new Date( - cursor.getLong(PodDBAdapter.KEY_LAST_UPDATE_INDEX)); + cursor.getLong(PodDBAdapter.IDX_FEED_SEL_STD_LASTUPDATE)); final FeedImage image; - long imageIndex = cursor.getLong(PodDBAdapter.KEY_IMAGE_INDEX); + long imageIndex = cursor.getLong(PodDBAdapter.IDX_FEED_SEL_STD_IMAGE); if (imageIndex != 0) { image = getFeedImage(adapter, imageIndex); } else { image = null; } - Feed feed = new Feed(cursor.getLong(PodDBAdapter.KEY_ID_INDEX), + Feed feed = new Feed(cursor.getLong(PodDBAdapter.IDX_FEED_SEL_STD_ID), lastUpdate, - cursor.getString(PodDBAdapter.KEY_TITLE_INDEX), - cursor.getString(PodDBAdapter.KEY_LINK_INDEX), - cursor.getString(PodDBAdapter.KEY_DESCRIPTION_INDEX), - cursor.getString(PodDBAdapter.KEY_PAYMENT_LINK_INDEX), - cursor.getString(PodDBAdapter.KEY_AUTHOR_INDEX), - cursor.getString(PodDBAdapter.KEY_LANGUAGE_INDEX), - cursor.getString(PodDBAdapter.KEY_TYPE_INDEX), - cursor.getString(PodDBAdapter.KEY_FEED_IDENTIFIER_INDEX), + cursor.getString(PodDBAdapter.IDX_FEED_SEL_STD_TITLE), + cursor.getString(PodDBAdapter.IDX_FEED_SEL_STD_LINK), + cursor.getString(PodDBAdapter.IDX_FEED_SEL_STD_DESCRIPTION), + cursor.getString(PodDBAdapter.IDX_FEED_SEL_STD_PAYMENT_LINK), + cursor.getString(PodDBAdapter.IDX_FEED_SEL_STD_AUTHOR), + cursor.getString(PodDBAdapter.IDX_FEED_SEL_STD_LANGUAGE), + cursor.getString(PodDBAdapter.IDX_FEED_SEL_STD_TYPE), + cursor.getString(PodDBAdapter.IDX_FEED_SEL_STD_FEED_IDENTIFIER), image, - cursor.getString(PodDBAdapter.KEY_FILE_URL_INDEX), - cursor.getString(PodDBAdapter.KEY_DOWNLOAD_URL_INDEX), - cursor.getInt(PodDBAdapter.KEY_DOWNLOADED_INDEX) > 0); + cursor.getString(PodDBAdapter.IDX_FEED_SEL_STD_FILE_URL), + cursor.getString(PodDBAdapter.IDX_FEED_SEL_STD_DOWNLOAD_URL), + cursor.getInt(PodDBAdapter.IDX_FEED_SEL_STD_DOWNLOADED) > 0); if (image != null) { image.setFeed(feed); diff --git a/src/de/danoeh/antennapod/storage/PodDBAdapter.java b/src/de/danoeh/antennapod/storage/PodDBAdapter.java index 6d41f6dfd..5f58e9302 100644 --- a/src/de/danoeh/antennapod/storage/PodDBAdapter.java +++ b/src/de/danoeh/antennapod/storage/PodDBAdapter.java @@ -193,11 +193,48 @@ public class PodDBAdapter { private final Context context; private PodDBHelper helper; + /** + * Select all columns from the feed-table except feed preferences. + * */ + private static final String[] FEED_SEL_STD = { + TABLE_NAME_FEEDS + "." + KEY_ID, + TABLE_NAME_FEEDS + "." + KEY_TITLE, + TABLE_NAME_FEEDS + "." + KEY_FILE_URL, + TABLE_NAME_FEEDS + "." + KEY_DOWNLOAD_URL, + TABLE_NAME_FEEDS + "." + KEY_DOWNLOADED, + TABLE_NAME_FEEDS + "." + KEY_LINK, + TABLE_NAME_FEEDS + "." + KEY_DESCRIPTION, + TABLE_NAME_FEEDS + "." + KEY_PAYMENT_LINK, + TABLE_NAME_FEEDS + "." + KEY_LASTUPDATE, + TABLE_NAME_FEEDS + "." + KEY_LANGUAGE, + TABLE_NAME_FEEDS + "." + KEY_AUTHOR, + TABLE_NAME_FEEDS + "." + KEY_IMAGE, + TABLE_NAME_FEEDS + "." + KEY_TYPE, + TABLE_NAME_FEEDS + "." + KEY_FEED_IDENTIFIER + }; + + // column indices for FEED_SEL_STD + public static final int IDX_FEED_SEL_STD_ID = 0; + public static final int IDX_FEED_SEL_STD_TITLE = 1; + public static final int IDX_FEED_SEL_STD_FILE_URL = 2; + public static final int IDX_FEED_SEL_STD_DOWNLOAD_URL = 3; + public static final int IDX_FEED_SEL_STD_DOWNLOADED = 4; + public static final int IDX_FEED_SEL_STD_LINK = 5; + public static final int IDX_FEED_SEL_STD_DESCRIPTION = 6; + public static final int IDX_FEED_SEL_STD_PAYMENT_LINK = 7; + public static final int IDX_FEED_SEL_STD_LASTUPDATE = 8; + public static final int IDX_FEED_SEL_STD_LANGUAGE = 9; + public static final int IDX_FEED_SEL_STD_AUTHOR = 10; + 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; + + /** * Select all columns from the feeditems-table except description and * content-encoded. */ - private static final String[] SEL_FI_SMALL = { + private static final String[] FEEDITEM_SEL_FI_SMALL = { TABLE_NAME_FEED_ITEMS + "." + KEY_ID, TABLE_NAME_FEED_ITEMS + "." + KEY_TITLE, TABLE_NAME_FEED_ITEMS + "." + KEY_PUBDATE, @@ -209,16 +246,16 @@ public class PodDBAdapter { TABLE_NAME_FEED_ITEMS + "." + KEY_ITEM_IDENTIFIER}; /** - * Contains SEL_FI_SMALL as comma-separated list. Useful for raw queries. + * Contains FEEDITEM_SEL_FI_SMALL as comma-separated list. Useful for raw queries. */ private static final String SEL_FI_SMALL_STR; static { - String selFiSmall = Arrays.toString(SEL_FI_SMALL); + String selFiSmall = Arrays.toString(FEEDITEM_SEL_FI_SMALL); SEL_FI_SMALL_STR = selFiSmall.substring(1, selFiSmall.length() - 1); } - // column indices for SEL_FI_SMALL + // column indices for FEEDITEM_SEL_FI_SMALL public static final int IDX_FI_SMALL_ID = 0; public static final int IDX_FI_SMALL_TITLE = 1; @@ -663,7 +700,7 @@ public class PodDBAdapter { * @return The cursor of the query */ public final Cursor getAllFeedsCursor() { - Cursor c = db.query(TABLE_NAME_FEEDS, null, null, null, null, null, + Cursor c = db.query(TABLE_NAME_FEEDS, FEED_SEL_STD, null, null, null, null, KEY_TITLE + " ASC"); return c; } @@ -673,14 +710,14 @@ public class PodDBAdapter { } public final Cursor getExpiredFeedsCursor(long expirationTime) { - Cursor c = db.query(TABLE_NAME_FEEDS, null, "? Date: Wed, 11 Sep 2013 18:46:25 +0200 Subject: Added FeedPreferences class --- src/de/danoeh/antennapod/feed/FeedPreferences.java | 21 ++++++++++++ src/de/danoeh/antennapod/storage/DBReader.java | 40 ++++++++++++++++------ src/de/danoeh/antennapod/storage/DBWriter.java | 20 ++++++++++- src/de/danoeh/antennapod/storage/PodDBAdapter.java | 39 +++++++++++++++------ 4 files changed, 98 insertions(+), 22 deletions(-) create mode 100644 src/de/danoeh/antennapod/feed/FeedPreferences.java diff --git a/src/de/danoeh/antennapod/feed/FeedPreferences.java b/src/de/danoeh/antennapod/feed/FeedPreferences.java new file mode 100644 index 000000000..084aa5691 --- /dev/null +++ b/src/de/danoeh/antennapod/feed/FeedPreferences.java @@ -0,0 +1,21 @@ +package de.danoeh.antennapod.feed; + +/** + * Contains preferences for a single feed. + */ +public class FeedPreferences { + + private long feedID; + + public FeedPreferences(long feedID) { + this.feedID = feedID; + } + + public long getFeedID() { + return feedID; + } + + public void setFeedID(long feedID) { + this.feedID = feedID; + } +} diff --git a/src/de/danoeh/antennapod/storage/DBReader.java b/src/de/danoeh/antennapod/storage/DBReader.java index be38aa3eb..feebd2c34 100644 --- a/src/de/danoeh/antennapod/storage/DBReader.java +++ b/src/de/danoeh/antennapod/storage/DBReader.java @@ -10,14 +10,7 @@ import android.database.Cursor; import android.database.SQLException; import android.util.Log; import de.danoeh.antennapod.AppConfig; -import de.danoeh.antennapod.feed.Chapter; -import de.danoeh.antennapod.feed.Feed; -import de.danoeh.antennapod.feed.FeedImage; -import de.danoeh.antennapod.feed.FeedItem; -import de.danoeh.antennapod.feed.FeedMedia; -import de.danoeh.antennapod.feed.ID3Chapter; -import de.danoeh.antennapod.feed.SimpleChapter; -import de.danoeh.antennapod.feed.VorbisCommentChapter; +import de.danoeh.antennapod.feed.*; import de.danoeh.antennapod.service.download.*; import de.danoeh.antennapod.util.DownloadError; import de.danoeh.antennapod.util.comparator.DownloadStatusComparator; @@ -28,7 +21,6 @@ import de.danoeh.antennapod.util.comparator.FeedItemPubdateComparator; * In general, all database calls in DBReader-methods are executed on the caller's thread. * This means that the caller should make sure that DBReader-methods are not executed on the GUI-thread. * This class will use the {@link de.danoeh.antennapod.feed.EventDistributor} to notify listeners about changes in the database. - */ public final class DBReader { private static final String TAG = "DBReader"; @@ -77,9 +69,10 @@ public final class DBReader { /** * Returns a list with the download URLs of all feeds. + * * @param context A context that is used for opening the database connection. * @return A list of Strings with the download URLs of all feeds. - * */ + */ public static List getFeedListDownloadUrls(final Context context) { PodDBAdapter adapter = new PodDBAdapter(context); List result = new ArrayList(); @@ -337,7 +330,7 @@ public final class DBReader { cursor.getString(PodDBAdapter.IDX_FEED_SEL_STD_DOWNLOAD_URL), cursor.getInt(PodDBAdapter.IDX_FEED_SEL_STD_DOWNLOADED) > 0); - if (image != null) { + if (image != null) { image.setFeed(feed); } return feed; @@ -775,4 +768,29 @@ 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; + } + } } diff --git a/src/de/danoeh/antennapod/storage/DBWriter.java b/src/de/danoeh/antennapod/storage/DBWriter.java index b5cab8b5a..f4b47e5fc 100644 --- a/src/de/danoeh/antennapod/storage/DBWriter.java +++ b/src/de/danoeh/antennapod/storage/DBWriter.java @@ -729,7 +729,7 @@ public class DBWriter { /** * Updates download URLs of feeds from a given Map. The key of the Map is the original URL of the feed * and the value is the updated URL - * */ + */ public static Future updateFeedDownloadURLs(final Context context, final Map urls) { return dbExec.submit(new Runnable() { @Override @@ -746,6 +746,24 @@ public class DBWriter { }); } + /** + * Saves a FeedPreferences object in the database. The Feed ID of the FeedPreferences-object MUST NOT be 0. + * + * @param context Used for opening a database connection. + * @param preferences The FeedPreferences object. + */ + public static Future setFeedPreferences(final Context context, final FeedPreferences preferences) { + return dbExec.submit(new Runnable() { + @Override + public void run() { + PodDBAdapter adapter = new PodDBAdapter(context); + adapter.open(); + adapter.setFeedPreferences(preferences); + adapter.close(); + } + }); + } + private static boolean itemListContains(List items, long itemId) { for (FeedItem item : items) { if (item.getId() == itemId) { diff --git a/src/de/danoeh/antennapod/storage/PodDBAdapter.java b/src/de/danoeh/antennapod/storage/PodDBAdapter.java index 5f58e9302..bebbc7ff6 100644 --- a/src/de/danoeh/antennapod/storage/PodDBAdapter.java +++ b/src/de/danoeh/antennapod/storage/PodDBAdapter.java @@ -14,11 +14,7 @@ import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.database.sqlite.SQLiteOpenHelper; import android.util.Log; import de.danoeh.antennapod.AppConfig; -import de.danoeh.antennapod.feed.Chapter; -import de.danoeh.antennapod.feed.Feed; -import de.danoeh.antennapod.feed.FeedImage; -import de.danoeh.antennapod.feed.FeedItem; -import de.danoeh.antennapod.feed.FeedMedia; +import de.danoeh.antennapod.feed.*; import de.danoeh.antennapod.service.download.DownloadStatus; // TODO Remove media column from feeditem table @@ -195,9 +191,9 @@ public class PodDBAdapter { /** * Select all columns from the feed-table except feed preferences. - * */ + */ private static final String[] FEED_SEL_STD = { - TABLE_NAME_FEEDS + "." + KEY_ID, + TABLE_NAME_FEEDS + "." + KEY_ID, TABLE_NAME_FEEDS + "." + KEY_TITLE, TABLE_NAME_FEEDS + "." + KEY_FILE_URL, TABLE_NAME_FEEDS + "." + KEY_DOWNLOAD_URL, @@ -229,6 +225,16 @@ public class PodDBAdapter { public static final int IDX_FEED_SEL_STD_TYPE = 12; public static final int IDX_FEED_SEL_STD_FEED_IDENTIFIER = 13; + /** + * 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 @@ -362,6 +368,14 @@ public class PodDBAdapter { return feed.getId(); } + public void setFeedPreferences(FeedPreferences prefs) { + if (prefs.getFeedID() == 0) { + throw new IllegalArgumentException("Feed ID of preference must not be null"); + } + ContentValues values = new ContentValues(); + db.update(TABLE_NAME_FEEDS, values, KEY_ID + "=?", new String[]{String.valueOf(prefs.getFeedID())}); + } + /** * Inserts or updates an image entry * @@ -490,7 +504,8 @@ public class PodDBAdapter { /** * Inserts or updates a feeditem entry - * @param item The FeedItem + * + * @param item The FeedItem * @param saveFeed true if the Feed of the item should also be saved. This should be set to * false if the method is executed on a list of FeedItems of the same Feed. * @return the id of the entry @@ -521,7 +536,7 @@ public class PodDBAdapter { new String[]{String.valueOf(item.getId())}); } if (item.getMedia() != null) { - setMedia(item.getMedia()); + setMedia(item.getMedia()); } if (item.getChapters() != null) { setChapters(item); @@ -797,7 +812,7 @@ public class PodDBAdapter { "SELECT %s FROM %s INNER JOIN %s ON %s=%s ORDER BY %s", args); Cursor c = db.rawQuery(query, null); /* - * Cursor c = db.query(TABLE_NAME_FEED_ITEMS, FEEDITEM_SEL_FI_SMALL, + * Cursor c = db.query(TABLE_NAME_FEED_ITEMS, FEEDITEM_SEL_FI_SMALL, * "INNER JOIN ? ON ?=?", new String[] { TABLE_NAME_QUEUE, * TABLE_NAME_FEED_ITEMS + "." + KEY_ID, TABLE_NAME_QUEUE + "." + * KEY_FEEDITEM }, null, null, TABLE_NAME_QUEUE + "." + KEY_FEEDITEM); @@ -915,6 +930,10 @@ 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( -- cgit v1.2.3 From cb56bf053c22b958bb819d11aa5391c18c7e8c70 Mon Sep 17 00:00:00 2001 From: Michael Kaiser Date: Tue, 8 Oct 2013 17:23:04 +0200 Subject: Add feed preference to include/exclude certain feeds from auto downloads --- res/layout/feedinfo.xml | 12 +++++++++ res/values/strings.xml | 1 + .../antennapod/activity/FeedInfoActivity.java | 27 ++++++++++++++----- src/de/danoeh/antennapod/feed/Feed.java | 19 ++++++++++++++ src/de/danoeh/antennapod/feed/FeedPreferences.java | 20 ++++++++++++++- src/de/danoeh/antennapod/storage/DBReader.java | 30 ++++------------------ src/de/danoeh/antennapod/storage/DBTasks.java | 12 ++++++--- src/de/danoeh/antennapod/storage/PodDBAdapter.java | 30 +++++++++------------- 8 files changed, 97 insertions(+), 54 deletions(-) diff --git a/res/layout/feedinfo.xml b/res/layout/feedinfo.xml index b018eabbe..c146e5c25 100644 --- a/res/layout/feedinfo.xml +++ b/res/layout/feedinfo.xml @@ -93,6 +93,18 @@ android:layout_below="@id/txtvAuthor" android:layout_margin="8dp" android:layout_toRightOf="@id/center_divider" /> + + + Image of:\u0020 Save username and password Close + Include in auto downloads diff --git a/src/de/danoeh/antennapod/activity/FeedInfoActivity.java b/src/de/danoeh/antennapod/activity/FeedInfoActivity.java index 3cb46a4f8..a0f4dc36f 100644 --- a/src/de/danoeh/antennapod/activity/FeedInfoActivity.java +++ b/src/de/danoeh/antennapod/activity/FeedInfoActivity.java @@ -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 loadTask = new AsyncTask() { @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 { diff --git a/src/de/danoeh/antennapod/feed/Feed.java b/src/de/danoeh/antennapod/feed/Feed.java index 032930f83..a99213dc7 100644 --- a/src/de/danoeh/antennapod/feed/Feed.java +++ b/src/de/danoeh/antennapod/feed/Feed.java @@ -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); + } } diff --git a/src/de/danoeh/antennapod/feed/FeedPreferences.java b/src/de/danoeh/antennapod/feed/FeedPreferences.java index 084aa5691..a63c1d52b 100644 --- a/src/de/danoeh/antennapod/feed/FeedPreferences.java +++ b/src/de/danoeh/antennapod/feed/FeedPreferences.java @@ -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); + } } diff --git a/src/de/danoeh/antennapod/storage/DBReader.java b/src/de/danoeh/antennapod/storage/DBReader.java index feebd2c34..83ad1b676 100644 --- a/src/de/danoeh/antennapod/storage/DBReader.java +++ b/src/de/danoeh/antennapod/storage/DBReader.java @@ -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; - } - } } diff --git a/src/de/danoeh/antennapod/storage/DBTasks.java b/src/de/danoeh/antennapod/storage/DBTasks.java index b9a1fd002..35bcbd8cb 100644 --- a/src/de/danoeh/antennapod/storage/DBTasks.java +++ b/src/de/danoeh/antennapod/storage/DBTasks.java @@ -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--; diff --git a/src/de/danoeh/antennapod/storage/PodDBAdapter.java b/src/de/danoeh/antennapod/storage/PodDBAdapter.java index bebbc7ff6..48dfeb937 100644 --- a/src/de/danoeh/antennapod/storage/PodDBAdapter.java +++ b/src/de/danoeh/antennapod/storage/PodDBAdapter.java @@ -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"); + } } } } -- cgit v1.2.3 From cdd9a0dfdeef8d319063f844fce1e1722f7d9529 Mon Sep 17 00:00:00 2001 From: daniel oeh Date: Tue, 8 Oct 2013 23:22:04 +0200 Subject: Added settings and description label to FeedInfoActivity, improved layout --- res/layout/feedinfo.xml | 76 +++++++++++++++++++++++++++++++------------------ res/values/strings.xml | 2 ++ 2 files changed, 50 insertions(+), 28 deletions(-) diff --git a/res/layout/feedinfo.xml b/res/layout/feedinfo.xml index c146e5c25..e1c1c10a3 100644 --- a/res/layout/feedinfo.xml +++ b/res/layout/feedinfo.xml @@ -1,14 +1,14 @@ + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical"> + android:gravity="center_vertical"> + android:layout_margin="4dp"/> + android:textStyle="bold" + android:textColor="?android:attr/textColorPrimary"/> + android:background="@color/bright_blue"/> + android:layout_weight="1"> + android:orientation="vertical"> + android:layout_marginBottom="16dp"> + android:layout_centerHorizontal="true"/> + android:textColor="?android:attr/textColorPrimary"/> + android:layout_toRightOf="@id/center_divider"/> + android:textColor="?android:attr/textColorPrimary"/> - - - + android:layout_toRightOf="@id/center_divider"/> + + + android:layout_margin="8dp"/> + + + + diff --git a/res/values/strings.xml b/res/values/strings.xml index 19c8ae04d..a4c342ac4 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -34,6 +34,7 @@ Cancel Author Language + Settings Cover Error An error occurred: @@ -41,6 +42,7 @@ No external storage is available. Please make sure that external storage is mounted so that the app can work properly. Chapters Shownotes + Description Most Recent Episode:\u0020 \u0020episodes Published:\u0020 -- cgit v1.2.3