Created abstract Chapter class to support other chapter types

This commit is contained in:
daniel oeh 2012-09-21 18:40:56 +02:00
parent 81fbf3bcb6
commit cc18f609d0
9 changed files with 101 additions and 55 deletions

View File

@ -62,7 +62,7 @@ public class AudioplayerActivity extends MediaplayerActivity {
FeedMedia media = controller.getMedia();
int tabcount = 2;
if (media != null && media.getItem().getSimpleChapters() != null) {
if (media != null && media.getItem().getChapters() != null) {
tabcount = 3;
}
pagerAdapter = new MediaPlayerPagerAdapter(getSupportFragmentManager(),
@ -132,7 +132,7 @@ public class AudioplayerActivity extends MediaplayerActivity {
sCChapterFragment.setListAdapter(new SCListAdapter(
activity, 0, media.getItem()
.getSimpleChapters()));
.getChapters()));
return sCChapterFragment;
default:

View File

@ -20,15 +20,16 @@ import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.feed.Chapter;
import de.danoeh.antennapod.feed.SimpleChapter;
import de.danoeh.antennapod.util.Converter;
public class SCListAdapter extends ArrayAdapter<SimpleChapter> {
public class SCListAdapter extends ArrayAdapter<Chapter> {
private static final String TAG = "SCListAdapter";
public SCListAdapter(Context context, int textViewResourceId,
List<SimpleChapter> objects) {
List<Chapter> objects) {
super(context, textViewResourceId, objects);
}
@ -36,7 +37,7 @@ public class SCListAdapter extends ArrayAdapter<SimpleChapter> {
public View getView(int position, View convertView, ViewGroup parent) {
Holder holder;
SimpleChapter sc = getItem(position);
Chapter sc = getItem(position);
// Inflate Layout
if (convertView == null) {
@ -114,7 +115,7 @@ public class SCListAdapter extends ArrayAdapter<SimpleChapter> {
}
});
SimpleChapter current = sc.getItem().getCurrentChapter();
Chapter current = sc.getItem().getCurrentChapter();
if (current != null) {
if (current == sc) {
holder.title.setTextColor(convertView.getResources().getColor(

View File

@ -0,0 +1,37 @@
package de.danoeh.antennapod.feed;
public abstract class Chapter extends FeedComponent{
/** Defines starting point in milliseconds. */
protected long start;
protected String title;
protected FeedItem item;
protected String link;
public Chapter(long start, String title, FeedItem item, String link) {
super();
this.start = start;
this.title = title;
this.item = item;
this.link = link;
}
public abstract int getChapterType();
public long getStart() {
return start;
}
public String getTitle() {
return title;
}
public FeedItem getItem() {
return item;
}
public String getLink() {
return link;
}
}

View File

@ -22,7 +22,7 @@ public class FeedItem extends FeedComponent {
private Feed feed;
protected boolean read;
private String paymentLink;
private ArrayList<SimpleChapter> simpleChapters;
private ArrayList<Chapter> chapters;
public FeedItem() {
this.read = true;
@ -41,11 +41,11 @@ public class FeedItem extends FeedComponent {
}
/** Get the chapter that fits the position. */
public SimpleChapter getCurrentChapter(int position) {
SimpleChapter current = null;
if (simpleChapters != null) {
current = simpleChapters.get(0);
for (SimpleChapter sc : simpleChapters) {
public Chapter getCurrentChapter(int position) {
Chapter current = null;
if (chapters != null) {
current = chapters.get(0);
for (Chapter sc : chapters) {
if (sc.getStart() > position) {
break;
} else {
@ -57,7 +57,7 @@ public class FeedItem extends FeedComponent {
}
/** Calls getCurrentChapter with current position. */
public SimpleChapter getCurrentChapter() {
public Chapter getCurrentChapter() {
return getCurrentChapter(media.getPosition());
}
@ -144,12 +144,12 @@ public class FeedItem extends FeedComponent {
this.paymentLink = paymentLink;
}
public ArrayList<SimpleChapter> getSimpleChapters() {
return simpleChapters;
public ArrayList<Chapter> getChapters() {
return chapters;
}
public void setSimpleChapters(ArrayList<SimpleChapter> simpleChapters) {
this.simpleChapters = simpleChapters;
public void setChapters(ArrayList<Chapter> chapters) {
this.chapters = chapters;
}
public String getItemIdentifier() {

View File

@ -919,19 +919,22 @@ public class FeedManager {
Cursor chapterCursor = adapter
.getSimpleChaptersOfFeedItemCursor(item);
if (chapterCursor.moveToFirst()) {
item.setSimpleChapters(new ArrayList<SimpleChapter>());
item.setChapters(new ArrayList<Chapter>());
do {
SimpleChapter chapter = new SimpleChapter(
item,
chapterCursor
.getLong(PodDBAdapter.KEY_SC_START_INDEX),
chapterCursor
.getString(PodDBAdapter.KEY_TITLE_INDEX),
chapterCursor
.getString(PodDBAdapter.KEY_SC_LINK_INDEX));
int chapterType = chapterCursor.getInt(PodDBAdapter.KEY_CHAPTER_TYPE_INDEX);
Chapter chapter = null;
long start = chapterCursor.getLong(PodDBAdapter.KEY_SC_START_INDEX);
String title = chapterCursor.getString(PodDBAdapter.KEY_TITLE_INDEX);
String link = chapterCursor.getString(PodDBAdapter.KEY_SC_LINK_INDEX);
switch (chapterType) {
case SimpleChapter.CHAPTERTYPE_SIMPLECHAPTER:
chapter = new SimpleChapter(start, title, item, link);
break;
}
chapter.setId(chapterCursor
.getLong(PodDBAdapter.KEY_ID_INDEX));
item.getSimpleChapters().add(chapter);
item.getChapters().add(chapter);
} while (chapterCursor.moveToNext());
}
chapterCursor.close();

View File

@ -114,8 +114,8 @@ public class FeedSearcher {
private static void searchFeedItemChaptersSingleFeed(String query,
ArrayList<SearchResult> destination, Feed feed) {
for (FeedItem item : feed.getItems()) {
if (item.getSimpleChapters() != null) {
for (SimpleChapter sc : item.getSimpleChapters()) {
if (item.getChapters() != null) {
for (Chapter sc : item.getChapters()) {
SearchResult result = createSearchResult(item, query, sc
.getTitle().toLowerCase(), VALUE_ITEM_CHAPTER);
if (result != null) {

View File

@ -1,18 +1,10 @@
package de.danoeh.antennapod.feed;
public class SimpleChapter extends FeedComponent {
/** Defines starting point in milliseconds. */
private long start;
private String title;
private FeedItem item;
private String link;
public SimpleChapter(FeedItem item, long start, String title, String link) {
super();
this.item = item;
this.start = start;
this.title = title;
this.link = link;
public class SimpleChapter extends Chapter {
public static final int CHAPTERTYPE_SIMPLECHAPTER = 0;
public SimpleChapter(long start, String title, FeedItem item, String link) {
super(start, title, item, link);
}
public String getTitle() {
@ -35,4 +27,9 @@ public class SimpleChapter extends FeedComponent {
return link;
}
@Override
public int getChapterType() {
return CHAPTERTYPE_SIMPLECHAPTER;
}
}

View File

@ -14,6 +14,7 @@ import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
import de.danoeh.antennapod.AppConfig;
import de.danoeh.antennapod.asynctask.DownloadStatus;
import de.danoeh.antennapod.feed.Chapter;
import de.danoeh.antennapod.feed.Feed;
import de.danoeh.antennapod.feed.FeedImage;
import de.danoeh.antennapod.feed.FeedItem;
@ -25,7 +26,7 @@ import de.danoeh.antennapod.feed.SimpleChapter;
* */
public class PodDBAdapter {
private static final String TAG = "PodDBAdapter";
private static final int DATABASE_VERSION = 6;
private static final int DATABASE_VERSION = 7;
private static final String DATABASE_NAME = "Antennapod.db";
/** Maximum number of arguments for IN-operator. */
@ -72,10 +73,11 @@ public class PodDBAdapter {
// --------- Queue indices
public static final int KEY_FEEDITEM_INDEX = 1;
public static final int KEY_QUEUE_FEED_INDEX = 2;
// --------- Simplechapters indices
// --------- Chapters indices
public static final int KEY_SC_START_INDEX = 2;
public static final int KEY_SC_FEEDITEM_INDEX = 3;
public static final int KEY_SC_LINK_INDEX = 4;
public static final int KEY_CHAPTER_TYPE_INDEX = 5;
// Key-constants
public static final String KEY_ID = "id";
@ -113,6 +115,7 @@ public class PodDBAdapter {
public static final String KEY_FEED_IDENTIFIER = "feed_identifier";
public static final String KEY_REASON_DETAILED = "reason_detailed";
public static final String KEY_DOWNLOADSTATUS_TITLE = "title";
public static final String KEY_CHAPTER_TYPE = "type";
// Table names
public static final String TABLE_NAME_FEEDS = "Feeds";
@ -170,7 +173,7 @@ public class PodDBAdapter {
private static final String CREATE_TABLE_SIMPLECHAPTERS = "CREATE TABLE "
+ TABLE_NAME_SIMPLECHAPTERS + " (" + TABLE_PRIMARY_KEY + KEY_TITLE
+ " TEXT," + KEY_START + " INTEGER," + KEY_FEEDITEM + " INTEGER,"
+ KEY_LINK + " TEXT)";
+ KEY_LINK + " TEXT," + KEY_CHAPTER_TYPE + " INTEGER)";
private SQLiteDatabase db;
private final Context context;
@ -330,7 +333,7 @@ public class PodDBAdapter {
}
values.put(KEY_FEED, item.getFeed().getId());
values.put(KEY_READ, item.isRead());
values.put(KEY_HAS_SIMPLECHAPTERS, item.getSimpleChapters() != null);
values.put(KEY_HAS_SIMPLECHAPTERS, item.getChapters() != null);
values.put(KEY_ITEM_IDENTIFIER, item.getItemIdentifier());
if (item.getId() == 0) {
item.setId(db.insert(TABLE_NAME_FEED_ITEMS, null, values));
@ -338,7 +341,7 @@ public class PodDBAdapter {
db.update(TABLE_NAME_FEED_ITEMS, values, KEY_ID + "=?",
new String[] { String.valueOf(item.getId()) });
}
if (item.getSimpleChapters() != null) {
if (item.getChapters() != null) {
setSimpleChapters(item);
}
return item.getId();
@ -346,11 +349,12 @@ public class PodDBAdapter {
public void setSimpleChapters(FeedItem item) {
ContentValues values = new ContentValues();
for (SimpleChapter chapter : item.getSimpleChapters()) {
for (Chapter chapter : item.getChapters()) {
values.put(KEY_TITLE, chapter.getTitle());
values.put(KEY_START, chapter.getStart());
values.put(KEY_FEEDITEM, item.getId());
values.put(KEY_LINK, chapter.getLink());
values.put(KEY_CHAPTER_TYPE, chapter.getChapterType());
if (chapter.getId() == 0) {
chapter.setId(db
.insert(TABLE_NAME_SIMPLECHAPTERS, null, values));
@ -670,6 +674,10 @@ public class PodDBAdapter {
db.execSQL("ALTER TABLE " + TABLE_NAME_DOWNLOAD_LOG
+ " ADD COLUMN " + KEY_DOWNLOADSTATUS_TITLE + " TEXT");
}
if (oldVersion <= 6) {
db.execSQL("ALTER TABLE " + TABLE_NAME_SIMPLECHAPTERS
+ " ADD COLUMN " + KEY_CHAPTER_TYPE + " INTEGER");
}
}
}

View File

@ -4,6 +4,7 @@ import java.util.ArrayList;
import org.xml.sax.Attributes;
import de.danoeh.antennapod.feed.Chapter;
import de.danoeh.antennapod.feed.SimpleChapter;
import de.danoeh.antennapod.syndication.handler.HandlerState;
import de.danoeh.antennapod.syndication.namespace.Namespace;
@ -24,15 +25,14 @@ public class NSSimpleChapters extends Namespace {
public SyndElement handleElementStart(String localName, HandlerState state,
Attributes attributes) {
if (localName.equals(CHAPTERS)) {
state.getCurrentItem().setSimpleChapters(
new ArrayList<SimpleChapter>());
state.getCurrentItem().setChapters(new ArrayList<Chapter>());
} else if (localName.equals(CHAPTER)) {
state.getCurrentItem()
.getSimpleChapters()
.add(new SimpleChapter(state.getCurrentItem(),
SyndDateUtils.parseTimeString(attributes
.getValue(START)), attributes
.getValue(TITLE), attributes.getValue(HREF)));
.getChapters()
.add(new SimpleChapter(SyndDateUtils
.parseTimeString(attributes.getValue(START)),
attributes.getValue(TITLE), state.getCurrentItem(),
attributes.getValue(HREF)));
}
return new SyndElement(localName, this);