Ported several classes from FeedManager to DB*-classes
This commit is contained in:
parent
b83656049d
commit
71a47c0a5b
@ -1,15 +1,20 @@
|
||||
package de.danoeh.antennapod.activity;
|
||||
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Bundle;
|
||||
|
||||
import android.util.Log;
|
||||
import com.actionbarsherlock.app.SherlockListActivity;
|
||||
import com.actionbarsherlock.view.Menu;
|
||||
import com.actionbarsherlock.view.MenuItem;
|
||||
|
||||
import de.danoeh.antennapod.adapter.DownloadLogAdapter;
|
||||
import de.danoeh.antennapod.feed.EventDistributor;
|
||||
import de.danoeh.antennapod.feed.FeedManager;
|
||||
import de.danoeh.antennapod.preferences.UserPreferences;
|
||||
import de.danoeh.antennapod.service.download.DownloadStatus;
|
||||
import de.danoeh.antennapod.storage.DBReader;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Displays completed and failed downloads in a list. The data comes from the
|
||||
@ -18,18 +23,18 @@ import de.danoeh.antennapod.preferences.UserPreferences;
|
||||
public class DownloadLogActivity extends SherlockListActivity {
|
||||
private static final String TAG = "DownloadLogActivity";
|
||||
|
||||
DownloadLogAdapter dla;
|
||||
FeedManager manager;
|
||||
private List<DownloadStatus> downloadLog;
|
||||
private DownloadLogAdapter dla;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
setTheme(UserPreferences.getTheme());
|
||||
super.onCreate(savedInstanceState);
|
||||
manager = FeedManager.getInstance();
|
||||
|
||||
dla = new DownloadLogAdapter(this);
|
||||
dla = new DownloadLogAdapter(this, itemAccess);
|
||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
setListAdapter(dla);
|
||||
loadData();
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -62,12 +67,48 @@ public class DownloadLogActivity extends SherlockListActivity {
|
||||
return true;
|
||||
}
|
||||
|
||||
private void loadData() {
|
||||
AsyncTask<Void, Void, List<DownloadStatus>> loadTask = new AsyncTask<Void, Void, List<DownloadStatus>>() {
|
||||
@Override
|
||||
protected List<DownloadStatus> doInBackground(Void... voids) {
|
||||
return DBReader.getDownloadLog(DownloadLogActivity.this);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostExecute(List<DownloadStatus> downloadStatuses) {
|
||||
super.onPostExecute(downloadStatuses);
|
||||
if (downloadStatuses != null) {
|
||||
downloadLog = downloadStatuses;
|
||||
if (dla != null) {
|
||||
dla.notifyDataSetChanged();
|
||||
}
|
||||
} else {
|
||||
Log.e(TAG, "Could not load download log");
|
||||
}
|
||||
}
|
||||
};
|
||||
loadTask.execute();
|
||||
}
|
||||
|
||||
private DownloadLogAdapter.ItemAccess itemAccess = new DownloadLogAdapter.ItemAccess() {
|
||||
|
||||
@Override
|
||||
public int getCount() {
|
||||
return (downloadLog != null) ? downloadLog.size() : 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public DownloadStatus getItem(int position) {
|
||||
return (downloadLog != null) ? downloadLog.get(position) : null;
|
||||
}
|
||||
};
|
||||
|
||||
private EventDistributor.EventListener contentUpdate = new EventDistributor.EventListener() {
|
||||
|
||||
@Override
|
||||
public void update(EventDistributor eventDistributor, Integer arg) {
|
||||
if ((arg & EventDistributor.DOWNLOADLOG_UPDATE) != 0) {
|
||||
dla.notifyDataSetChanged();
|
||||
loadData();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
@ -1,5 +1,6 @@
|
||||
package de.danoeh.antennapod.activity;
|
||||
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Bundle;
|
||||
import android.util.Log;
|
||||
import android.widget.ImageView;
|
||||
@ -15,8 +16,8 @@ import de.danoeh.antennapod.R;
|
||||
import de.danoeh.antennapod.asynctask.ImageLoader;
|
||||
import de.danoeh.antennapod.dialog.DownloadRequestErrorDialogCreator;
|
||||
import de.danoeh.antennapod.feed.Feed;
|
||||
import de.danoeh.antennapod.feed.FeedManager;
|
||||
import de.danoeh.antennapod.preferences.UserPreferences;
|
||||
import de.danoeh.antennapod.storage.DBReader;
|
||||
import de.danoeh.antennapod.storage.DownloadRequestException;
|
||||
import de.danoeh.antennapod.util.LangUtils;
|
||||
import de.danoeh.antennapod.util.menuhandler.FeedMenuHandler;
|
||||
@ -42,47 +43,66 @@ public class FeedInfoActivity extends SherlockActivity {
|
||||
setContentView(R.layout.feedinfo);
|
||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
long feedId = getIntent().getLongExtra(EXTRA_FEED_ID, -1);
|
||||
FeedManager manager = FeedManager.getInstance();
|
||||
feed = manager.getFeed(feedId);
|
||||
if (feed != null) {
|
||||
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() {
|
||||
|
||||
AsyncTask<Long, Void, Feed> loadTask = new AsyncTask<Long, Void, Feed>() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
ImageLoader.getInstance().loadThumbnailBitmap(
|
||||
feed.getImage(), imgvCover);
|
||||
@Override
|
||||
protected Feed doInBackground(Long... params) {
|
||||
return DBReader.getFeed(FeedInfoActivity.this, params[0]);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostExecute(Feed result) {
|
||||
super.onPostExecute(result);
|
||||
if (result != null) {
|
||||
feed = result;
|
||||
if (feed != null) {
|
||||
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
|
||||
public void run() {
|
||||
ImageLoader.getInstance().loadThumbnailBitmap(
|
||||
feed.getImage(), imgvCover);
|
||||
}
|
||||
});
|
||||
|
||||
txtvTitle.setText(feed.getTitle());
|
||||
txtvDescription.setText(feed.getDescription());
|
||||
if (feed.getAuthor() != null) {
|
||||
txtvAuthor.setText(feed.getAuthor());
|
||||
}
|
||||
if (feed.getLanguage() != null) {
|
||||
txtvLanguage.setText(LangUtils
|
||||
.getLanguageString(feed.getLanguage()));
|
||||
}
|
||||
supportInvalidateOptionsMenu();
|
||||
}
|
||||
} else {
|
||||
Log.e(TAG, "Activity was started with invalid arguments");
|
||||
}
|
||||
});
|
||||
|
||||
txtvTitle.setText(feed.getTitle());
|
||||
txtvDescription.setText(feed.getDescription());
|
||||
if (feed.getAuthor() != null) {
|
||||
txtvAuthor.setText(feed.getAuthor());
|
||||
}
|
||||
if (feed.getLanguage() != null) {
|
||||
txtvLanguage.setText(LangUtils.getLanguageString(feed
|
||||
.getLanguage()));
|
||||
}
|
||||
} else {
|
||||
Log.e(TAG, "Activity was started with invalid arguments");
|
||||
}
|
||||
|
||||
};
|
||||
loadTask.execute(feedId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCreateOptionsMenu(Menu menu) {
|
||||
MenuInflater inflater = new MenuInflater(this);
|
||||
inflater.inflate(R.menu.feedinfo, menu);
|
||||
return true;
|
||||
if (feed != null) {
|
||||
MenuInflater inflater = new MenuInflater(this);
|
||||
inflater.inflate(R.menu.feedinfo, menu);
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -105,7 +125,8 @@ public class FeedInfoActivity extends SherlockActivity {
|
||||
return FeedMenuHandler.onOptionsItemClicked(this, item, feed);
|
||||
} catch (DownloadRequestException e) {
|
||||
e.printStackTrace();
|
||||
DownloadRequestErrorDialogCreator.newRequestErrorDialog(this, e.getMessage());
|
||||
DownloadRequestErrorDialogCreator.newRequestErrorDialog(this,
|
||||
e.getMessage());
|
||||
}
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
|
@ -4,6 +4,7 @@ import android.annotation.SuppressLint;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.content.res.TypedArray;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Bundle;
|
||||
import android.support.v4.app.FragmentManager;
|
||||
import android.support.v4.app.FragmentTransaction;
|
||||
@ -15,16 +16,17 @@ import com.actionbarsherlock.view.MenuInflater;
|
||||
import com.actionbarsherlock.view.MenuItem;
|
||||
import com.actionbarsherlock.view.Window;
|
||||
|
||||
import de.danoeh.antennapod.AppConfig;
|
||||
import de.danoeh.antennapod.R;
|
||||
import de.danoeh.antennapod.asynctask.FeedRemover;
|
||||
import de.danoeh.antennapod.dialog.ConfirmationDialog;
|
||||
import de.danoeh.antennapod.dialog.DownloadRequestErrorDialogCreator;
|
||||
import de.danoeh.antennapod.feed.Feed;
|
||||
import de.danoeh.antennapod.feed.FeedManager;
|
||||
import de.danoeh.antennapod.fragment.ExternalPlayerFragment;
|
||||
import de.danoeh.antennapod.fragment.FeedlistFragment;
|
||||
import de.danoeh.antennapod.fragment.ItemlistFragment;
|
||||
import de.danoeh.antennapod.preferences.UserPreferences;
|
||||
import de.danoeh.antennapod.storage.DBReader;
|
||||
import de.danoeh.antennapod.storage.DownloadRequestException;
|
||||
import de.danoeh.antennapod.util.StorageUtils;
|
||||
import de.danoeh.antennapod.util.menuhandler.FeedMenuHandler;
|
||||
@ -33,8 +35,6 @@ import de.danoeh.antennapod.util.menuhandler.FeedMenuHandler;
|
||||
public class FeedItemlistActivity extends SherlockFragmentActivity {
|
||||
private static final String TAG = "FeedItemlistActivity";
|
||||
|
||||
private FeedManager manager;
|
||||
|
||||
/** The feed which the activity displays */
|
||||
private Feed feed;
|
||||
private ItemlistFragment filf;
|
||||
@ -50,27 +50,52 @@ public class FeedItemlistActivity extends SherlockFragmentActivity {
|
||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
setContentView(R.layout.feeditemlist_activity);
|
||||
|
||||
manager = FeedManager.getInstance();
|
||||
long feedId = getIntent().getLongExtra(
|
||||
FeedlistFragment.EXTRA_SELECTED_FEED, -1);
|
||||
if (feedId == -1)
|
||||
if (feedId == -1) {
|
||||
Log.e(TAG, "Received invalid feed selection.");
|
||||
|
||||
feed = manager.getFeed(feedId);
|
||||
setTitle(feed.getTitle());
|
||||
|
||||
FragmentManager fragmentManager = getSupportFragmentManager();
|
||||
FragmentTransaction fT = fragmentManager.beginTransaction();
|
||||
|
||||
filf = ItemlistFragment.newInstance(feed.getId());
|
||||
fT.replace(R.id.feeditemlistFragment, filf);
|
||||
|
||||
externalPlayerFragment = new ExternalPlayerFragment();
|
||||
fT.replace(R.id.playerFragment, externalPlayerFragment);
|
||||
fT.commit();
|
||||
} else {
|
||||
loadData(feedId);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void loadData(long id) {
|
||||
AsyncTask<Long, Void, Feed> loadTask = new AsyncTask<Long, Void, Feed>() {
|
||||
|
||||
@Override
|
||||
protected Feed doInBackground(Long... longs) {
|
||||
if (AppConfig.DEBUG)
|
||||
Log.d(TAG, "Loading feed data in background");
|
||||
return DBReader.getFeed(FeedItemlistActivity.this, longs[0]);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostExecute(Feed result) {
|
||||
super.onPostExecute(result);
|
||||
if (result != null) {
|
||||
if (AppConfig.DEBUG) Log.d(TAG, "Finished loading feed data");
|
||||
feed = result;
|
||||
setTitle(feed.getTitle());
|
||||
|
||||
FragmentManager fragmentManager = getSupportFragmentManager();
|
||||
FragmentTransaction fT = fragmentManager.beginTransaction();
|
||||
|
||||
filf = ItemlistFragment.newInstance(feed.getId());
|
||||
fT.replace(R.id.feeditemlistFragment, filf);
|
||||
|
||||
externalPlayerFragment = new ExternalPlayerFragment();
|
||||
fT.replace(R.id.playerFragment, externalPlayerFragment);
|
||||
fT.commit();
|
||||
supportInvalidateOptionsMenu();
|
||||
} else {
|
||||
Log.e(TAG, "Error: Feed was null");
|
||||
}
|
||||
}
|
||||
};
|
||||
loadTask.execute(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onResume() {
|
||||
super.onResume();
|
||||
@ -79,13 +104,17 @@ public class FeedItemlistActivity extends SherlockFragmentActivity {
|
||||
|
||||
@Override
|
||||
public boolean onCreateOptionsMenu(Menu menu) {
|
||||
TypedArray drawables = obtainStyledAttributes(new int[] { R.attr.action_search });
|
||||
menu.add(Menu.NONE, R.id.search_item, Menu.NONE, R.string.search_label)
|
||||
.setIcon(drawables.getDrawable(0))
|
||||
.setShowAsAction(MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);
|
||||
return FeedMenuHandler
|
||||
.onCreateOptionsMenu(new MenuInflater(this), menu);
|
||||
}
|
||||
if (feed != null) {
|
||||
TypedArray drawables = obtainStyledAttributes(new int[] { R.attr.action_search });
|
||||
menu.add(Menu.NONE, R.id.search_item, Menu.NONE, R.string.search_label)
|
||||
.setIcon(drawables.getDrawable(0))
|
||||
.setShowAsAction(MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);
|
||||
return FeedMenuHandler
|
||||
.onCreateOptionsMenu(new MenuInflater(this), menu);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onPrepareOptionsMenu(Menu menu) {
|
||||
@ -142,10 +171,14 @@ public class FeedItemlistActivity extends SherlockFragmentActivity {
|
||||
|
||||
@Override
|
||||
public boolean onSearchRequested() {
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putLong(SearchActivity.EXTRA_FEED_ID, feed.getId());
|
||||
startSearch(null, false, bundle, false);
|
||||
return true;
|
||||
if (feed != null) {
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putLong(SearchActivity.EXTRA_FEED_ID, feed.getId());
|
||||
startSearch(null, false, bundle, false);
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,55 +1,56 @@
|
||||
package de.danoeh.antennapod.activity;
|
||||
|
||||
import java.text.DateFormat;
|
||||
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Bundle;
|
||||
import android.support.v4.app.FragmentManager;
|
||||
import android.support.v4.app.FragmentTransaction;
|
||||
import android.text.format.DateUtils;
|
||||
import android.util.Log;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.actionbarsherlock.app.SherlockFragmentActivity;
|
||||
import com.actionbarsherlock.view.Menu;
|
||||
import com.actionbarsherlock.view.MenuInflater;
|
||||
import com.actionbarsherlock.view.MenuItem;
|
||||
import com.actionbarsherlock.view.Window;
|
||||
|
||||
import de.danoeh.antennapod.AppConfig;
|
||||
import de.danoeh.antennapod.R;
|
||||
import de.danoeh.antennapod.dialog.DownloadRequestErrorDialogCreator;
|
||||
import de.danoeh.antennapod.feed.Feed;
|
||||
import de.danoeh.antennapod.feed.EventDistributor;
|
||||
import de.danoeh.antennapod.feed.FeedItem;
|
||||
import de.danoeh.antennapod.feed.FeedManager;
|
||||
import de.danoeh.antennapod.fragment.FeedlistFragment;
|
||||
import de.danoeh.antennapod.fragment.ItemDescriptionFragment;
|
||||
import de.danoeh.antennapod.fragment.ItemlistFragment;
|
||||
import de.danoeh.antennapod.preferences.UserPreferences;
|
||||
import de.danoeh.antennapod.storage.DBReader;
|
||||
import de.danoeh.antennapod.storage.DownloadRequestException;
|
||||
import de.danoeh.antennapod.util.StorageUtils;
|
||||
import de.danoeh.antennapod.util.menuhandler.FeedItemMenuHandler;
|
||||
|
||||
import java.text.DateFormat;
|
||||
|
||||
/** Displays a single FeedItem and provides various actions */
|
||||
public class ItemviewActivity extends SherlockFragmentActivity {
|
||||
private static final String TAG = "ItemviewActivity";
|
||||
|
||||
private FeedManager manager;
|
||||
private FeedItem item;
|
||||
private static final int EVENTS = EventDistributor.DOWNLOAD_HANDLED | EventDistributor.DOWNLOAD_QUEUED;
|
||||
|
||||
// Widgets
|
||||
private TextView txtvTitle;
|
||||
private TextView txtvPublished;
|
||||
private FeedItem item;
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
setTheme(UserPreferences.getTheme());
|
||||
super.onCreate(savedInstanceState);
|
||||
StorageUtils.checkStorageAvailability(this);
|
||||
manager = FeedManager.getInstance();
|
||||
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
|
||||
getSupportActionBar().setDisplayShowTitleEnabled(false);
|
||||
extractFeeditem();
|
||||
populateUI();
|
||||
EventDistributor.getInstance().register(contentUpdate);
|
||||
|
||||
long itemId = getIntent().getLongExtra(
|
||||
ItemlistFragment.EXTRA_SELECTED_FEEDITEM, -1);
|
||||
if (itemId == -1) {
|
||||
Log.e(TAG, "Received invalid selection of either feeditem or feed.");
|
||||
} else {
|
||||
loadData(itemId);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -66,28 +67,38 @@ public class ItemviewActivity extends SherlockFragmentActivity {
|
||||
Log.d(TAG, "Stopping Activity");
|
||||
}
|
||||
|
||||
/** Extracts FeedItem object the activity is supposed to display */
|
||||
private void extractFeeditem() {
|
||||
long itemId = getIntent().getLongExtra(
|
||||
ItemlistFragment.EXTRA_SELECTED_FEEDITEM, -1);
|
||||
long feedId = getIntent().getLongExtra(
|
||||
FeedlistFragment.EXTRA_SELECTED_FEED, -1);
|
||||
if (itemId == -1 || feedId == -1) {
|
||||
Log.e(TAG, "Received invalid selection of either feeditem or feed.");
|
||||
}
|
||||
Feed feed = manager.getFeed(feedId);
|
||||
item = manager.getFeedItem(itemId, feed);
|
||||
if (AppConfig.DEBUG)
|
||||
Log.d(TAG, "Title of item is " + item.getTitle());
|
||||
if (AppConfig.DEBUG)
|
||||
Log.d(TAG, "Title of feed is " + item.getFeed().getTitle());
|
||||
}
|
||||
private void loadData(long itemId) {
|
||||
AsyncTask<Long, Void, FeedItem> loadTask = new AsyncTask<Long, Void, FeedItem>() {
|
||||
|
||||
@Override
|
||||
protected FeedItem doInBackground(Long... longs) {
|
||||
return DBReader.getFeedItem(ItemviewActivity.this, longs[0]);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostExecute(FeedItem feedItem) {
|
||||
super.onPostExecute(feedItem);
|
||||
if (feedItem != null && feedItem.getFeed() != null) {
|
||||
item = feedItem;
|
||||
populateUI();
|
||||
supportInvalidateOptionsMenu();
|
||||
} else {
|
||||
if (feedItem == null) {
|
||||
Log.e(TAG, "Error: FeedItem was null");
|
||||
} else if (feedItem.getFeed() == null) {
|
||||
Log.e(TAG, "Error: Feed was null");
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
loadTask.execute(itemId);
|
||||
}
|
||||
|
||||
private void populateUI() {
|
||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
setContentView(R.layout.feeditemview);
|
||||
txtvTitle = (TextView) findViewById(R.id.txtvItemname);
|
||||
txtvPublished = (TextView) findViewById(R.id.txtvPublished);
|
||||
TextView txtvTitle = (TextView) findViewById(R.id.txtvItemname);
|
||||
TextView txtvPublished = (TextView) findViewById(R.id.txtvPublished);
|
||||
setTitle(item.getFeed().getTitle());
|
||||
|
||||
txtvPublished.setText(DateUtils.formatSameDayTime(item.getPubDate()
|
||||
@ -106,9 +117,13 @@ public class ItemviewActivity extends SherlockFragmentActivity {
|
||||
|
||||
@Override
|
||||
public boolean onCreateOptionsMenu(Menu menu) {
|
||||
MenuInflater inflater = getSupportMenuInflater();
|
||||
inflater.inflate(R.menu.feeditem, menu);
|
||||
return true;
|
||||
if (item != null) {
|
||||
MenuInflater inflater = getSupportMenuInflater();
|
||||
inflater.inflate(R.menu.feeditem, menu);
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -143,4 +158,19 @@ public class ItemviewActivity extends SherlockFragmentActivity {
|
||||
}, item, true);
|
||||
}
|
||||
|
||||
private EventDistributor.EventListener contentUpdate = new EventDistributor.EventListener() {
|
||||
|
||||
@Override
|
||||
public void update(EventDistributor eventDistributor, Integer arg) {
|
||||
if ((EVENTS & arg) != 0) {
|
||||
if (AppConfig.DEBUG)
|
||||
Log.d(TAG, "Received contentUpdate Intent.");
|
||||
if (item != null) {
|
||||
loadData(item.getId());
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
}
|
||||
|
@ -21,7 +21,6 @@ import de.danoeh.antennapod.AppConfig;
|
||||
import de.danoeh.antennapod.R;
|
||||
import de.danoeh.antennapod.asynctask.FlattrClickWorker;
|
||||
import de.danoeh.antennapod.dialog.TimeDialog;
|
||||
import de.danoeh.antennapod.feed.FeedManager;
|
||||
import de.danoeh.antennapod.preferences.UserPreferences;
|
||||
import de.danoeh.antennapod.service.PlaybackService;
|
||||
import de.danoeh.antennapod.util.Converter;
|
||||
@ -39,8 +38,6 @@ public abstract class MediaplayerActivity extends SherlockFragmentActivity
|
||||
implements OnSeekBarChangeListener {
|
||||
private static final String TAG = "MediaplayerActivity";
|
||||
|
||||
protected FeedManager manager;
|
||||
|
||||
protected PlaybackController controller;
|
||||
|
||||
protected TextView txtvPosition;
|
||||
@ -149,7 +146,6 @@ public abstract class MediaplayerActivity extends SherlockFragmentActivity
|
||||
StorageUtils.checkStorageAvailability(this);
|
||||
|
||||
orientation = getResources().getConfiguration().orientation;
|
||||
manager = FeedManager.getInstance();
|
||||
getWindow().setFormat(PixelFormat.TRANSPARENT);
|
||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
}
|
||||
|
@ -1,36 +1,41 @@
|
||||
package de.danoeh.antennapod.activity;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.res.TypedArray;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Bundle;
|
||||
import android.os.Parcel;
|
||||
import android.os.Parcelable;
|
||||
import android.util.Log;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.BaseAdapter;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.actionbarsherlock.app.SherlockListActivity;
|
||||
import com.actionbarsherlock.view.Menu;
|
||||
import com.actionbarsherlock.view.MenuItem;
|
||||
import com.mobeta.android.dslv.DragSortListView;
|
||||
|
||||
import de.danoeh.antennapod.R;
|
||||
import de.danoeh.antennapod.asynctask.ImageLoader;
|
||||
import de.danoeh.antennapod.feed.EventDistributor;
|
||||
import de.danoeh.antennapod.feed.FeedItem;
|
||||
import de.danoeh.antennapod.feed.FeedManager;
|
||||
import de.danoeh.antennapod.preferences.UserPreferences;
|
||||
import de.danoeh.antennapod.storage.DBReader;
|
||||
import de.danoeh.antennapod.storage.DBTasks;
|
||||
import de.danoeh.antennapod.storage.DBWriter;
|
||||
import de.danoeh.antennapod.util.UndoBarController;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class OrganizeQueueActivity extends SherlockListActivity implements
|
||||
UndoBarController.UndoListener {
|
||||
private static final String TAG = "OrganizeQueueActivity";
|
||||
|
||||
private static final int MENU_ID_ACCEPT = 2;
|
||||
|
||||
private List<FeedItem> queue;
|
||||
|
||||
private OrganizeAdapter adapter;
|
||||
private UndoBarController undoBarController;
|
||||
|
||||
@ -45,13 +50,37 @@ public class OrganizeQueueActivity extends SherlockListActivity implements
|
||||
listView.setDropListener(dropListener);
|
||||
listView.setRemoveListener(removeListener);
|
||||
|
||||
adapter = new OrganizeAdapter(this);
|
||||
setListAdapter(adapter);
|
||||
|
||||
loadData();
|
||||
undoBarController = new UndoBarController(findViewById(R.id.undobar),
|
||||
this);
|
||||
}
|
||||
|
||||
private void loadData() {
|
||||
AsyncTask<Void, Void, List<FeedItem>> loadTask = new AsyncTask<Void, Void, List<FeedItem>>() {
|
||||
|
||||
@Override
|
||||
protected List<FeedItem> doInBackground(Void... voids) {
|
||||
return DBReader.getQueue(OrganizeQueueActivity.this);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostExecute(List<FeedItem> feedItems) {
|
||||
super.onPostExecute(feedItems);
|
||||
if (feedItems != null) {
|
||||
queue = feedItems;
|
||||
if (adapter == null) {
|
||||
adapter = new OrganizeAdapter(OrganizeQueueActivity.this);
|
||||
setListAdapter(adapter);
|
||||
}
|
||||
adapter.notifyDataSetChanged();
|
||||
} else {
|
||||
Log.e(TAG, "Queue was null");
|
||||
}
|
||||
}
|
||||
};
|
||||
loadTask.execute();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPause() {
|
||||
super.onPause();
|
||||
@ -61,8 +90,7 @@ public class OrganizeQueueActivity extends SherlockListActivity implements
|
||||
@Override
|
||||
protected void onStop() {
|
||||
super.onStop();
|
||||
FeedManager.getInstance().autodownloadUndownloadedItems(
|
||||
getApplicationContext());
|
||||
DBTasks.autodownloadUndownloadedItems(getApplicationContext());
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -76,9 +104,7 @@ public class OrganizeQueueActivity extends SherlockListActivity implements
|
||||
@Override
|
||||
public void update(EventDistributor eventDistributor, Integer arg) {
|
||||
if (((EventDistributor.QUEUE_UPDATE | EventDistributor.FEED_LIST_UPDATE) & arg) != 0) {
|
||||
if (adapter != null) {
|
||||
adapter.notifyDataSetChanged();
|
||||
}
|
||||
loadData();
|
||||
}
|
||||
}
|
||||
};
|
||||
@ -87,9 +113,9 @@ public class OrganizeQueueActivity extends SherlockListActivity implements
|
||||
|
||||
@Override
|
||||
public void drop(int from, int to) {
|
||||
FeedManager manager = FeedManager.getInstance();
|
||||
manager.moveQueueItem(OrganizeQueueActivity.this, from, to, false);
|
||||
adapter.notifyDataSetChanged();
|
||||
|
||||
DBWriter.moveQueueItem(OrganizeQueueActivity.this, from, to, true);
|
||||
//adapter.notifyDataSetChanged();
|
||||
}
|
||||
};
|
||||
|
||||
@ -97,9 +123,8 @@ public class OrganizeQueueActivity extends SherlockListActivity implements
|
||||
|
||||
@Override
|
||||
public void remove(int which) {
|
||||
FeedManager manager = FeedManager.getInstance();
|
||||
FeedItem item = (FeedItem) getListAdapter().getItem(which);
|
||||
manager.removeQueueItem(OrganizeQueueActivity.this, item, false);
|
||||
DBWriter.removeQueueItem(OrganizeQueueActivity.this, item.getId(), true);
|
||||
undoBarController.showUndoBar(false,
|
||||
getString(R.string.removed_from_queue), new UndoToken(item,
|
||||
which));
|
||||
@ -127,22 +152,18 @@ public class OrganizeQueueActivity extends SherlockListActivity implements
|
||||
public void onUndo(Parcelable token) {
|
||||
// Perform the undo
|
||||
UndoToken undoToken = (UndoToken) token;
|
||||
FeedItem feedItem = undoToken.getFeedItem();
|
||||
long itemId = undoToken.getFeedItemId();
|
||||
int position = undoToken.getPosition();
|
||||
|
||||
FeedManager manager = FeedManager.getInstance();
|
||||
manager.addQueueItemAt(OrganizeQueueActivity.this, feedItem, position,
|
||||
false);
|
||||
DBWriter.addQueueItemAt(OrganizeQueueActivity.this, itemId, position, false);
|
||||
}
|
||||
|
||||
private static class OrganizeAdapter extends BaseAdapter {
|
||||
|
||||
private Context context;
|
||||
private FeedManager manager = FeedManager.getInstance();
|
||||
private OrganizeQueueActivity organizeQueueActivity;
|
||||
|
||||
public OrganizeAdapter(Context context) {
|
||||
public OrganizeAdapter(OrganizeQueueActivity organizeQueueActivity) {
|
||||
super();
|
||||
this.context = context;
|
||||
this.organizeQueueActivity = organizeQueueActivity;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -152,7 +173,7 @@ public class OrganizeQueueActivity extends SherlockListActivity implements
|
||||
|
||||
if (convertView == null) {
|
||||
holder = new Holder();
|
||||
LayoutInflater inflater = (LayoutInflater) context
|
||||
LayoutInflater inflater = (LayoutInflater) organizeQueueActivity
|
||||
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
||||
convertView = inflater.inflate(
|
||||
R.layout.organize_queue_listitem, null);
|
||||
@ -189,13 +210,20 @@ public class OrganizeQueueActivity extends SherlockListActivity implements
|
||||
|
||||
@Override
|
||||
public int getCount() {
|
||||
int queueSize = manager.getQueueSize(true);
|
||||
return queueSize;
|
||||
if (organizeQueueActivity.queue != null) {
|
||||
return organizeQueueActivity.queue.size();
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public FeedItem getItem(int position) {
|
||||
return manager.getQueueItemAtIndex(position, true);
|
||||
if (organizeQueueActivity.queue != null) {
|
||||
return organizeQueueActivity.queue.get(position);
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -211,7 +239,6 @@ public class OrganizeQueueActivity extends SherlockListActivity implements
|
||||
private int position;
|
||||
|
||||
public UndoToken(FeedItem item, int position) {
|
||||
FeedManager manager = FeedManager.getInstance();
|
||||
this.itemId = item.getId();
|
||||
this.feedId = item.getFeed().getId();
|
||||
this.position = position;
|
||||
@ -243,9 +270,8 @@ public class OrganizeQueueActivity extends SherlockListActivity implements
|
||||
out.writeInt(position);
|
||||
}
|
||||
|
||||
public FeedItem getFeedItem() {
|
||||
FeedManager manager = FeedManager.getInstance();
|
||||
return manager.getFeedItem(itemId, feedId);
|
||||
public long getFeedItemId() {
|
||||
return itemId;
|
||||
}
|
||||
|
||||
public int getPosition() {
|
||||
|
@ -14,6 +14,7 @@ import de.danoeh.antennapod.R;
|
||||
import de.danoeh.antennapod.feed.FeedManager;
|
||||
import de.danoeh.antennapod.fragment.PlaybackHistoryFragment;
|
||||
import de.danoeh.antennapod.preferences.UserPreferences;
|
||||
import de.danoeh.antennapod.storage.DBWriter;
|
||||
|
||||
public class PlaybackHistoryActivity extends SherlockFragmentActivity {
|
||||
private static final String TAG = "PlaybackHistoryActivity";
|
||||
@ -36,7 +37,7 @@ public class PlaybackHistoryActivity extends SherlockFragmentActivity {
|
||||
startActivity(intent);
|
||||
return true;
|
||||
case R.id.clear_history_item:
|
||||
FeedManager.getInstance().clearPlaybackHistory(this);
|
||||
DBWriter.clearPlaybackHistory(this);
|
||||
return true;
|
||||
}
|
||||
return super.onOptionsItemSelected(item);
|
||||
|
@ -10,7 +10,6 @@ import android.widget.TextView;
|
||||
import de.danoeh.antennapod.R;
|
||||
import de.danoeh.antennapod.feed.Feed;
|
||||
import de.danoeh.antennapod.feed.FeedImage;
|
||||
import de.danoeh.antennapod.feed.FeedManager;
|
||||
import de.danoeh.antennapod.feed.FeedMedia;
|
||||
import de.danoeh.antennapod.service.download.DownloadStatus;
|
||||
import de.danoeh.antennapod.util.DownloadError;
|
||||
@ -19,10 +18,12 @@ import de.danoeh.antennapod.util.DownloadError;
|
||||
public class DownloadLogAdapter extends BaseAdapter {
|
||||
|
||||
private Context context;
|
||||
private FeedManager manager = FeedManager.getInstance();
|
||||
|
||||
public DownloadLogAdapter(Context context) {
|
||||
private ItemAccess itemAccess;
|
||||
|
||||
public DownloadLogAdapter(Context context, ItemAccess itemAccess) {
|
||||
super();
|
||||
this.itemAccess = itemAccess;
|
||||
this.context = context;
|
||||
}
|
||||
|
||||
@ -92,12 +93,12 @@ public class DownloadLogAdapter extends BaseAdapter {
|
||||
|
||||
@Override
|
||||
public int getCount() {
|
||||
return manager.getDownloadLogSize();
|
||||
return itemAccess.getCount();
|
||||
}
|
||||
|
||||
@Override
|
||||
public DownloadStatus getItem(int position) {
|
||||
return manager.getDownloadStatusFromLogAtIndex(position);
|
||||
return itemAccess.getItem(position);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -105,4 +106,9 @@ public class DownloadLogAdapter extends BaseAdapter {
|
||||
return position;
|
||||
}
|
||||
|
||||
public static interface ItemAccess {
|
||||
public int getCount();
|
||||
public DownloadStatus getItem(int position);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -14,7 +14,6 @@ import android.widget.TextView;
|
||||
import de.danoeh.antennapod.R;
|
||||
import de.danoeh.antennapod.asynctask.ImageLoader;
|
||||
import de.danoeh.antennapod.feed.FeedItem;
|
||||
import de.danoeh.antennapod.feed.FeedManager;
|
||||
import de.danoeh.antennapod.feed.FeedMedia;
|
||||
import de.danoeh.antennapod.storage.DownloadRequester;
|
||||
import de.danoeh.antennapod.util.Converter;
|
||||
@ -30,17 +29,18 @@ public class ExternalEpisodesListAdapter extends BaseExpandableListAdapter {
|
||||
public static final int GROUP_POS_UNREAD = 1;
|
||||
|
||||
private Context context;
|
||||
private FeedManager manager = FeedManager.getInstance();
|
||||
private ItemAccess itemAccess;
|
||||
|
||||
private ActionButtonCallback feedItemActionCallback;
|
||||
private OnGroupActionClicked groupActionCallback;
|
||||
|
||||
public ExternalEpisodesListAdapter(Context context,
|
||||
ActionButtonCallback callback,
|
||||
OnGroupActionClicked groupActionCallback) {
|
||||
OnGroupActionClicked groupActionCallback,
|
||||
ItemAccess itemAccess) {
|
||||
super();
|
||||
this.context = context;
|
||||
|
||||
this.itemAccess = itemAccess;
|
||||
this.feedItemActionCallback = callback;
|
||||
this.groupActionCallback = groupActionCallback;
|
||||
}
|
||||
@ -53,10 +53,10 @@ public class ExternalEpisodesListAdapter extends BaseExpandableListAdapter {
|
||||
@Override
|
||||
public FeedItem getChild(int groupPosition, int childPosition) {
|
||||
if (groupPosition == GROUP_POS_QUEUE) {
|
||||
return manager.getQueueItemAtIndex(childPosition, true);
|
||||
return itemAccess.getQueueItemAt(childPosition);
|
||||
} else if (groupPosition == GROUP_POS_UNREAD) {
|
||||
return manager.getUnreadItemAtIndex(childPosition, true);
|
||||
}
|
||||
return itemAccess.getUnreadItemAt(childPosition);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@ -200,9 +200,9 @@ public class ExternalEpisodesListAdapter extends BaseExpandableListAdapter {
|
||||
@Override
|
||||
public int getChildrenCount(int groupPosition) {
|
||||
if (groupPosition == GROUP_POS_QUEUE) {
|
||||
return manager.getQueueSize(true);
|
||||
return itemAccess.getQueueSize();
|
||||
} else if (groupPosition == GROUP_POS_UNREAD) {
|
||||
return manager.getUnreadItemsSize(true);
|
||||
return itemAccess.getUnreadItemsSize();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@ -210,7 +210,7 @@ public class ExternalEpisodesListAdapter extends BaseExpandableListAdapter {
|
||||
@Override
|
||||
public int getGroupCount() {
|
||||
// Hide 'unread items' group if empty
|
||||
if (manager.getUnreadItemsSize(true) > 0) {
|
||||
if (itemAccess.getUnreadItemsSize() > 0) {
|
||||
return 2;
|
||||
} else {
|
||||
return 1;
|
||||
@ -264,8 +264,8 @@ public class ExternalEpisodesListAdapter extends BaseExpandableListAdapter {
|
||||
|
||||
@Override
|
||||
public boolean isEmpty() {
|
||||
return manager.getUnreadItemsSize(true) == 0
|
||||
&& manager.getQueueSize(true) == 0;
|
||||
return itemAccess.getUnreadItemsSize() == 0
|
||||
&& itemAccess.getQueueSize() == 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -287,4 +287,11 @@ public class ExternalEpisodesListAdapter extends BaseExpandableListAdapter {
|
||||
public void onClick(long groupId);
|
||||
}
|
||||
|
||||
public static interface ItemAccess {
|
||||
public int getQueueSize();
|
||||
public int getUnreadItemsSize();
|
||||
public FeedItem getQueueItemAt(int position);
|
||||
public FeedItem getUnreadItemAt(int position);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -11,7 +11,6 @@ import android.widget.TextView;
|
||||
import de.danoeh.antennapod.R;
|
||||
import de.danoeh.antennapod.asynctask.ImageLoader;
|
||||
import de.danoeh.antennapod.feed.Feed;
|
||||
import de.danoeh.antennapod.feed.FeedManager;
|
||||
import de.danoeh.antennapod.storage.DownloadRequester;
|
||||
import de.danoeh.antennapod.util.ThemeUtils;
|
||||
|
||||
@ -19,15 +18,23 @@ public class FeedlistAdapter extends BaseAdapter {
|
||||
private static final String TAG = "FeedlistAdapter";
|
||||
|
||||
private Context context;
|
||||
private FeedManager manager = FeedManager.getInstance();
|
||||
protected ItemAccess itemAccess;
|
||||
|
||||
private int selectedItemIndex;
|
||||
private ImageLoader imageLoader;
|
||||
public static final int SELECTION_NONE = -1;
|
||||
|
||||
public FeedlistAdapter(Context context) {
|
||||
public FeedlistAdapter(Context context, ItemAccess itemAccess) {
|
||||
super();
|
||||
if (context == null) {
|
||||
throw new IllegalArgumentException("context must not be null");
|
||||
}
|
||||
if (itemAccess == null) {
|
||||
throw new IllegalArgumentException("itemAccess must not be null");
|
||||
}
|
||||
|
||||
this.context = context;
|
||||
this.itemAccess = itemAccess;
|
||||
selectedItemIndex = SELECTION_NONE;
|
||||
imageLoader = ImageLoader.getInstance();
|
||||
}
|
||||
@ -145,12 +152,12 @@ public class FeedlistAdapter extends BaseAdapter {
|
||||
|
||||
@Override
|
||||
public int getCount() {
|
||||
return manager.getFeedsSize();
|
||||
return itemAccess.getCount();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Feed getItem(int position) {
|
||||
return manager.getFeedAtIndex(position);
|
||||
return itemAccess.getItem(position);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -158,4 +165,9 @@ public class FeedlistAdapter extends BaseAdapter {
|
||||
return position;
|
||||
}
|
||||
|
||||
public interface ItemAccess {
|
||||
int getCount();
|
||||
|
||||
Feed getItem(int position);
|
||||
}
|
||||
}
|
||||
|
@ -14,13 +14,14 @@ import android.widget.ProgressBar;
|
||||
import android.widget.TextView;
|
||||
import de.danoeh.antennapod.R;
|
||||
import de.danoeh.antennapod.feed.FeedItem;
|
||||
import de.danoeh.antennapod.feed.FeedManager;
|
||||
import de.danoeh.antennapod.feed.FeedMedia;
|
||||
import de.danoeh.antennapod.feed.MediaType;
|
||||
import de.danoeh.antennapod.storage.DownloadRequester;
|
||||
import de.danoeh.antennapod.util.Converter;
|
||||
import de.danoeh.antennapod.util.ThemeUtils;
|
||||
|
||||
import java.util.Iterator;
|
||||
|
||||
/** List adapter for items of feeds that the user has already subscribed to. */
|
||||
public class InternalFeedItemlistAdapter extends DefaultFeedItemlistAdapter {
|
||||
|
||||
@ -31,7 +32,7 @@ public class InternalFeedItemlistAdapter extends DefaultFeedItemlistAdapter {
|
||||
public static final int SELECTION_NONE = -1;
|
||||
|
||||
public InternalFeedItemlistAdapter(Context context,
|
||||
DefaultFeedItemlistAdapter.ItemAccess itemAccess,
|
||||
ItemAccess itemAccess,
|
||||
ActionButtonCallback callback, boolean showFeedtitle) {
|
||||
super(context, itemAccess);
|
||||
this.callback = callback;
|
||||
@ -155,7 +156,7 @@ public class InternalFeedItemlistAdapter extends DefaultFeedItemlistAdapter {
|
||||
}
|
||||
|
||||
holder.lenSize.setVisibility(View.VISIBLE);
|
||||
if (FeedManager.getInstance().isInQueue(item)) {
|
||||
if (isInQueue(item)) {
|
||||
holder.inPlaylist.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
holder.inPlaylist.setVisibility(View.GONE);
|
||||
@ -204,6 +205,19 @@ public class InternalFeedItemlistAdapter extends DefaultFeedItemlistAdapter {
|
||||
|
||||
}
|
||||
|
||||
private boolean isInQueue(FeedItem item) {
|
||||
Iterator<FeedItem> iter = ((ItemAccess) itemAccess).queueIterator();
|
||||
if (iter != null) {
|
||||
while (iter.hasNext()) {
|
||||
FeedItem current = iter.next();
|
||||
if (current.getId() == item.getId()) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
static class Holder extends DefaultFeedItemlistAdapter.Holder {
|
||||
TextView feedtitle;
|
||||
ImageView inPlaylist;
|
||||
@ -224,4 +238,8 @@ public class InternalFeedItemlistAdapter extends DefaultFeedItemlistAdapter {
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
|
||||
public static interface ItemAccess extends DefaultFeedItemlistAdapter.ItemAccess {
|
||||
public Iterator<FeedItem> queueIterator();
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -7,7 +7,9 @@ import android.content.DialogInterface;
|
||||
import android.content.DialogInterface.OnCancelListener;
|
||||
import android.os.AsyncTask;
|
||||
import de.danoeh.antennapod.feed.Feed;
|
||||
import de.danoeh.antennapod.feed.FeedManager;
|
||||
import de.danoeh.antennapod.storage.DBWriter;
|
||||
|
||||
import java.util.concurrent.ExecutionException;
|
||||
|
||||
/** Removes a feed in the background. */
|
||||
public class FeedRemover extends AsyncTask<Void, Void, Void> {
|
||||
@ -23,9 +25,14 @@ public class FeedRemover extends AsyncTask<Void, Void, Void> {
|
||||
|
||||
@Override
|
||||
protected Void doInBackground(Void... params) {
|
||||
FeedManager manager = FeedManager.getInstance();
|
||||
manager.deleteFeed(context, feed);
|
||||
return null;
|
||||
try {
|
||||
DBWriter.deleteFeed(context, feed.getId()).get();
|
||||
} catch (InterruptedException e) {
|
||||
e.printStackTrace();
|
||||
} catch (ExecutionException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -1448,7 +1448,7 @@ public class FeedManager {
|
||||
long imageIndex = feedlistCursor
|
||||
.getLong(PodDBAdapter.KEY_IMAGE_INDEX);
|
||||
if (imageIndex != 0) {
|
||||
// feed.setImage(DBReader.getFeedImage(adapter, imageIndex));
|
||||
feed.setImage(DBReader.getFeedImage(adapter, imageIndex));
|
||||
feed.getImage().setFeed(feed);
|
||||
}
|
||||
feed.file_url = feedlistCursor
|
||||
|
@ -1,6 +1,8 @@
|
||||
package de.danoeh.antennapod.fragment;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Bundle;
|
||||
import android.util.Log;
|
||||
import android.view.ContextMenu;
|
||||
@ -25,9 +27,14 @@ import de.danoeh.antennapod.dialog.DownloadRequestErrorDialogCreator;
|
||||
import de.danoeh.antennapod.feed.EventDistributor;
|
||||
import de.danoeh.antennapod.feed.FeedItem;
|
||||
import de.danoeh.antennapod.feed.FeedManager;
|
||||
import de.danoeh.antennapod.storage.DBReader;
|
||||
import de.danoeh.antennapod.storage.DBTasks;
|
||||
import de.danoeh.antennapod.storage.DBWriter;
|
||||
import de.danoeh.antennapod.storage.DownloadRequestException;
|
||||
import de.danoeh.antennapod.util.menuhandler.FeedItemMenuHandler;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class EpisodesFragment extends SherlockFragment {
|
||||
private static final String TAG = "EpisodesFragment";
|
||||
|
||||
@ -40,6 +47,9 @@ public class EpisodesFragment extends SherlockFragment {
|
||||
private ExpandableListView listView;
|
||||
private ExternalEpisodesListAdapter adapter;
|
||||
|
||||
private List<FeedItem> queue;
|
||||
private List<FeedItem> unreadItems;
|
||||
|
||||
protected FeedItem selectedItem = null;
|
||||
protected long selectedGroupId = -1;
|
||||
protected boolean contextMenuClosed = true;
|
||||
@ -92,7 +102,7 @@ public class EpisodesFragment extends SherlockFragment {
|
||||
public void onViewCreated(View view, Bundle savedInstanceState) {
|
||||
super.onViewCreated(view, savedInstanceState);
|
||||
adapter = new ExternalEpisodesListAdapter(getActivity(),
|
||||
adapterCallback, groupActionCallback);
|
||||
adapterCallback, groupActionCallback, itemAccess);
|
||||
listView.setAdapter(adapter);
|
||||
listView.expandGroup(ExternalEpisodesListAdapter.GROUP_POS_QUEUE);
|
||||
listView.expandGroup(ExternalEpisodesListAdapter.GROUP_POS_UNREAD);
|
||||
@ -117,9 +127,73 @@ public class EpisodesFragment extends SherlockFragment {
|
||||
return true;
|
||||
}
|
||||
});
|
||||
loadData();
|
||||
registerForContextMenu(listView);
|
||||
|
||||
}
|
||||
|
||||
ExternalEpisodesListAdapter.ItemAccess itemAccess = new ExternalEpisodesListAdapter.ItemAccess() {
|
||||
|
||||
@Override
|
||||
public int getQueueSize() {
|
||||
return (queue != null) ? queue.size() : 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getUnreadItemsSize() {
|
||||
return (unreadItems != null) ? unreadItems.size() : 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public FeedItem getQueueItemAt(int position) {
|
||||
return (queue != null) ? queue.get(position) : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public FeedItem getUnreadItemAt(int position) {
|
||||
return (unreadItems != null) ? unreadItems.get(position) : null;
|
||||
}
|
||||
};
|
||||
|
||||
private void loadData() {
|
||||
AsyncTask<Void, Void, Void> loadTask = new AsyncTask<Void, Void, Void>() {
|
||||
private volatile List<FeedItem> queueRef;
|
||||
private volatile List<FeedItem> unreadItemsRef;
|
||||
|
||||
@Override
|
||||
protected Void doInBackground(Void... voids) {
|
||||
if (AppConfig.DEBUG) Log.d(TAG, "Starting to load list data");
|
||||
Context context = EpisodesFragment.this.getActivity();
|
||||
if (context != null) {
|
||||
queueRef = DBReader.getQueue(context);
|
||||
unreadItemsRef = DBReader.getUnreadItemsList(context);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostExecute(Void aVoid) {
|
||||
super.onPostExecute(aVoid);
|
||||
if (queueRef != null && unreadItemsRef != null) {
|
||||
if (AppConfig.DEBUG) Log.d(TAG, "Done loading list data");
|
||||
queue = queueRef;
|
||||
unreadItems = unreadItemsRef;
|
||||
if (adapter != null) {
|
||||
adapter.notifyDataSetChanged();
|
||||
}
|
||||
} else {
|
||||
if (queueRef == null) {
|
||||
Log.e(TAG, "Could not load queue");
|
||||
}
|
||||
if (unreadItemsRef == null) {
|
||||
Log.e(TAG, "Could not load unread items");
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
loadTask.execute();
|
||||
}
|
||||
|
||||
private EventDistributor.EventListener contentUpdate = new EventDistributor.EventListener() {
|
||||
|
||||
@Override
|
||||
@ -127,7 +201,7 @@ public class EpisodesFragment extends SherlockFragment {
|
||||
if ((EVENTS & arg) != 0) {
|
||||
if (AppConfig.DEBUG)
|
||||
Log.d(TAG, "Received contentUpdate Intent.");
|
||||
adapter.notifyDataSetChanged();
|
||||
loadData();
|
||||
}
|
||||
}
|
||||
};
|
||||
@ -172,7 +246,6 @@ public class EpisodesFragment extends SherlockFragment {
|
||||
@Override
|
||||
public boolean onContextItemSelected(android.view.MenuItem item) {
|
||||
boolean handled = false;
|
||||
FeedManager manager = FeedManager.getInstance();
|
||||
if (selectedItem != null) {
|
||||
try {
|
||||
handled = FeedItemMenuHandler.onMenuItemClicked(
|
||||
@ -191,10 +264,10 @@ public class EpisodesFragment extends SherlockFragment {
|
||||
OrganizeQueueActivity.class));
|
||||
break;
|
||||
case R.id.clear_queue_item:
|
||||
manager.clearQueue(getActivity());
|
||||
DBWriter.clearQueue(getActivity());
|
||||
break;
|
||||
case R.id.download_all_item:
|
||||
manager.downloadAllItemsInQueue(getActivity());
|
||||
DBTasks.downloadAllItemsInQueue(getActivity());
|
||||
break;
|
||||
default:
|
||||
handled = false;
|
||||
@ -203,10 +276,10 @@ public class EpisodesFragment extends SherlockFragment {
|
||||
handled = true;
|
||||
switch (item.getItemId()) {
|
||||
case R.id.mark_all_read_item:
|
||||
manager.markAllItemsRead(getActivity());
|
||||
DBWriter.markAllItemsRead(getActivity());
|
||||
break;
|
||||
case R.id.enqueue_all_item:
|
||||
manager.enqueueAllNewItems(getActivity());
|
||||
DBTasks.enqueueAllNewItems(getActivity());
|
||||
break;
|
||||
default:
|
||||
handled = false;
|
||||
|
@ -1,9 +1,11 @@
|
||||
package de.danoeh.antennapod.fragment;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.app.Activity;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Bundle;
|
||||
import android.util.Log;
|
||||
import android.view.LayoutInflater;
|
||||
@ -28,7 +30,7 @@ import de.danoeh.antennapod.dialog.ConfirmationDialog;
|
||||
import de.danoeh.antennapod.dialog.DownloadRequestErrorDialogCreator;
|
||||
import de.danoeh.antennapod.feed.EventDistributor;
|
||||
import de.danoeh.antennapod.feed.Feed;
|
||||
import de.danoeh.antennapod.feed.FeedManager;
|
||||
import de.danoeh.antennapod.storage.DBReader;
|
||||
import de.danoeh.antennapod.storage.DownloadRequestException;
|
||||
import de.danoeh.antennapod.util.menuhandler.FeedMenuHandler;
|
||||
|
||||
@ -41,11 +43,11 @@ public class FeedlistFragment extends SherlockFragment implements
|
||||
| EventDistributor.DOWNLOAD_QUEUED
|
||||
| EventDistributor.FEED_LIST_UPDATE
|
||||
| EventDistributor.UNREAD_ITEMS_UPDATE;
|
||||
|
||||
|
||||
public static final String EXTRA_SELECTED_FEED = "extra.de.danoeh.antennapod.activity.selected_feed";
|
||||
|
||||
private FeedManager manager;
|
||||
private FeedlistAdapter fla;
|
||||
private List<Feed> feeds;
|
||||
|
||||
private Feed selectedFeed;
|
||||
private ActionMode mActionMode;
|
||||
@ -54,24 +56,57 @@ public class FeedlistFragment extends SherlockFragment implements
|
||||
private ListView listView;
|
||||
private TextView txtvEmpty;
|
||||
|
||||
@Override
|
||||
public void onAttach(Activity activity) {
|
||||
super.onAttach(activity);
|
||||
}
|
||||
private FeedlistAdapter.ItemAccess itemAccess = new FeedlistAdapter.ItemAccess() {
|
||||
|
||||
@Override
|
||||
public void onDetach() {
|
||||
super.onDetach();
|
||||
}
|
||||
@Override
|
||||
public Feed getItem(int position) {
|
||||
if (feeds != null) {
|
||||
return feeds.get(position);
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getCount() {
|
||||
if (feeds != null) {
|
||||
return feeds.size();
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
if (AppConfig.DEBUG)
|
||||
Log.d(TAG, "Creating");
|
||||
manager = FeedManager.getInstance();
|
||||
fla = new FeedlistAdapter(getActivity());
|
||||
fla = new FeedlistAdapter(getActivity(), itemAccess);
|
||||
loadFeeds();
|
||||
}
|
||||
|
||||
private void loadFeeds() {
|
||||
AsyncTask<Void, Void, List<Feed>> loadTask = new AsyncTask<Void, Void, List<Feed>>() {
|
||||
@Override
|
||||
protected List<Feed> doInBackground(Void... params) {
|
||||
return DBReader.getFeedList(getActivity());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostExecute(List<Feed> result) {
|
||||
super.onPostExecute(result);
|
||||
if (result != null) {
|
||||
feeds = result;
|
||||
if (fla != null) {
|
||||
fla.notifyDataSetChanged();
|
||||
}
|
||||
} else {
|
||||
Log.e(TAG, "Failed to load feeds");
|
||||
}
|
||||
}
|
||||
};
|
||||
loadTask.execute();
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -112,7 +147,6 @@ public class FeedlistFragment extends SherlockFragment implements
|
||||
if (AppConfig.DEBUG)
|
||||
Log.d(TAG, "Resuming");
|
||||
EventDistributor.getInstance().register(contentUpdate);
|
||||
fla.notifyDataSetChanged();
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -125,13 +159,13 @@ public class FeedlistFragment extends SherlockFragment implements
|
||||
}
|
||||
|
||||
private EventDistributor.EventListener contentUpdate = new EventDistributor.EventListener() {
|
||||
|
||||
|
||||
@Override
|
||||
public void update(EventDistributor eventDistributor, Integer arg) {
|
||||
if ((EVENTS & arg) != 0) {
|
||||
if (AppConfig.DEBUG)
|
||||
Log.d(TAG, "Received contentUpdate Intent.");
|
||||
fla.notifyDataSetChanged();
|
||||
loadFeeds();
|
||||
}
|
||||
}
|
||||
};
|
||||
@ -154,7 +188,7 @@ public class FeedlistFragment extends SherlockFragment implements
|
||||
try {
|
||||
if (FeedMenuHandler.onOptionsItemClicked(getSherlockActivity(),
|
||||
item, selectedFeed)) {
|
||||
fla.notifyDataSetChanged();
|
||||
loadFeeds();
|
||||
} else {
|
||||
switch (item.getItemId()) {
|
||||
case R.id.remove_item:
|
||||
@ -163,7 +197,7 @@ public class FeedlistFragment extends SherlockFragment implements
|
||||
@Override
|
||||
protected void onPostExecute(Void result) {
|
||||
super.onPostExecute(result);
|
||||
fla.notifyDataSetChanged();
|
||||
loadFeeds();
|
||||
}
|
||||
};
|
||||
ConfirmationDialog conDialog = new ConfirmationDialog(
|
||||
|
@ -1,7 +1,9 @@
|
||||
package de.danoeh.antennapod.fragment;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Bundle;
|
||||
import android.util.Log;
|
||||
import android.view.ContextMenu;
|
||||
@ -18,18 +20,20 @@ import de.danoeh.antennapod.AppConfig;
|
||||
import de.danoeh.antennapod.R;
|
||||
import de.danoeh.antennapod.activity.ItemviewActivity;
|
||||
import de.danoeh.antennapod.adapter.ActionButtonCallback;
|
||||
import de.danoeh.antennapod.adapter.DefaultFeedItemlistAdapter;
|
||||
import de.danoeh.antennapod.adapter.InternalFeedItemlistAdapter;
|
||||
import de.danoeh.antennapod.dialog.DownloadRequestErrorDialogCreator;
|
||||
import de.danoeh.antennapod.feed.EventDistributor;
|
||||
import de.danoeh.antennapod.feed.Feed;
|
||||
import de.danoeh.antennapod.feed.FeedItem;
|
||||
import de.danoeh.antennapod.feed.FeedManager;
|
||||
import de.danoeh.antennapod.service.download.DownloadService;
|
||||
import de.danoeh.antennapod.storage.DBReader;
|
||||
import de.danoeh.antennapod.storage.DownloadRequestException;
|
||||
import de.danoeh.antennapod.storage.DownloadRequester;
|
||||
import de.danoeh.antennapod.util.menuhandler.FeedItemMenuHandler;
|
||||
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
/** Displays a list of FeedItems. */
|
||||
@SuppressLint("ValidFragment")
|
||||
public class ItemlistFragment extends SherlockListFragment {
|
||||
@ -43,12 +47,10 @@ public class ItemlistFragment extends SherlockListFragment {
|
||||
public static final String EXTRA_SELECTED_FEEDITEM = "extra.de.danoeh.antennapod.activity.selected_feeditem";
|
||||
public static final String ARGUMENT_FEED_ID = "argument.de.danoeh.antennapod.feed_id";
|
||||
protected InternalFeedItemlistAdapter fila;
|
||||
protected FeedManager manager = FeedManager.getInstance();
|
||||
protected DownloadRequester requester = DownloadRequester.getInstance();
|
||||
|
||||
private DefaultFeedItemlistAdapter.ItemAccess itemAccess;
|
||||
|
||||
private Feed feed;
|
||||
protected List<FeedItem> queue;
|
||||
|
||||
protected FeedItem selectedItem = null;
|
||||
protected boolean contextMenuClosed = true;
|
||||
@ -56,10 +58,8 @@ public class ItemlistFragment extends SherlockListFragment {
|
||||
/** Argument for FeeditemlistAdapter */
|
||||
protected boolean showFeedtitle;
|
||||
|
||||
public ItemlistFragment(DefaultFeedItemlistAdapter.ItemAccess itemAccess,
|
||||
boolean showFeedtitle) {
|
||||
public ItemlistFragment(boolean showFeedtitle) {
|
||||
super();
|
||||
this.itemAccess = itemAccess;
|
||||
this.showFeedtitle = showFeedtitle;
|
||||
}
|
||||
|
||||
@ -83,6 +83,30 @@ public class ItemlistFragment extends SherlockListFragment {
|
||||
return i;
|
||||
}
|
||||
|
||||
private InternalFeedItemlistAdapter.ItemAccess itemAccessRef;
|
||||
protected InternalFeedItemlistAdapter.ItemAccess itemAccess() {
|
||||
if (itemAccessRef == null) {
|
||||
itemAccessRef = new InternalFeedItemlistAdapter.ItemAccess() {
|
||||
|
||||
@Override
|
||||
public FeedItem getItem(int position) {
|
||||
return (feed != null) ? feed.getItemAtIndex(true, position) : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getCount() {
|
||||
return (feed != null) ? feed.getNumOfItems(true) : 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Iterator<FeedItem> queueIterator() {
|
||||
return (queue != null) ? queue.iterator() : null;
|
||||
}
|
||||
};
|
||||
}
|
||||
return itemAccessRef;
|
||||
}
|
||||
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||
Bundle savedInstanceState) {
|
||||
@ -92,27 +116,60 @@ public class ItemlistFragment extends SherlockListFragment {
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
if (itemAccess == null) {
|
||||
long feedId = getArguments().getLong(ARGUMENT_FEED_ID);
|
||||
final Feed feed = FeedManager.getInstance().getFeed(feedId);
|
||||
this.feed = feed;
|
||||
itemAccess = new DefaultFeedItemlistAdapter.ItemAccess() {
|
||||
|
||||
@Override
|
||||
public FeedItem getItem(int position) {
|
||||
return feed.getItemAtIndex(true, position);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getCount() {
|
||||
return feed.getNumOfItems(true);
|
||||
}
|
||||
};
|
||||
}
|
||||
loadData();
|
||||
}
|
||||
|
||||
protected void loadData() {
|
||||
final long feedId;
|
||||
if (feed == null) {
|
||||
feedId = getArguments().getLong(ARGUMENT_FEED_ID);
|
||||
} else {
|
||||
feedId = feed.getId();
|
||||
}
|
||||
AsyncTask<Long, Void, Feed> loadTask = new AsyncTask<Long, Void, Feed>(){
|
||||
private volatile List<FeedItem> queueRef;
|
||||
|
||||
@Override
|
||||
protected Feed doInBackground(Long... longs) {
|
||||
Context context = ItemlistFragment.this.getActivity();
|
||||
if (context != null) {
|
||||
Feed result = DBReader.getFeed(context, longs[0]);
|
||||
if (result != null) {
|
||||
result.setItems(DBReader.getFeedItemList(context, result));
|
||||
queueRef = DBReader.getQueue(context);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostExecute(Feed result) {
|
||||
super.onPostExecute(result);
|
||||
if (result != null && result.getItems() != null) {
|
||||
feed = result;
|
||||
if (queueRef != null) {
|
||||
queue = queueRef;
|
||||
} else {
|
||||
Log.e(TAG, "Could not load queue");
|
||||
}
|
||||
if (fila != null) {
|
||||
fila.notifyDataSetChanged();
|
||||
}
|
||||
} else {
|
||||
if (result == null) {
|
||||
Log.e(TAG, "Could not load feed with id " + feedId);
|
||||
} else if (result.getItems() == null) {
|
||||
Log.e(TAG, "Could not load feed items");
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
loadTask.execute(feedId);
|
||||
}
|
||||
|
||||
protected InternalFeedItemlistAdapter createListAdapter() {
|
||||
return new InternalFeedItemlistAdapter(getActivity(), itemAccess,
|
||||
return new InternalFeedItemlistAdapter(getActivity(), itemAccess(),
|
||||
adapterCallback, showFeedtitle);
|
||||
}
|
||||
|
||||
@ -162,7 +219,9 @@ public class ItemlistFragment extends SherlockListFragment {
|
||||
if ((EventDistributor.DOWNLOAD_QUEUED & arg) != 0) {
|
||||
updateProgressBarVisibility();
|
||||
} else {
|
||||
fila.notifyDataSetChanged();
|
||||
if (feed != null) {
|
||||
loadData();
|
||||
}
|
||||
updateProgressBarVisibility();
|
||||
}
|
||||
}
|
||||
|
@ -1,33 +1,53 @@
|
||||
package de.danoeh.antennapod.fragment;
|
||||
|
||||
import android.content.Context;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Bundle;
|
||||
import android.util.Log;
|
||||
import de.danoeh.antennapod.AppConfig;
|
||||
import de.danoeh.antennapod.adapter.DefaultFeedItemlistAdapter;
|
||||
import de.danoeh.antennapod.adapter.InternalFeedItemlistAdapter;
|
||||
import de.danoeh.antennapod.feed.EventDistributor;
|
||||
import de.danoeh.antennapod.feed.FeedItem;
|
||||
import de.danoeh.antennapod.feed.FeedManager;
|
||||
import de.danoeh.antennapod.storage.DBReader;
|
||||
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
public class PlaybackHistoryFragment extends ItemlistFragment {
|
||||
private static final String TAG = "PlaybackHistoryFragment";
|
||||
|
||||
private List<FeedItem> playbackHistory;
|
||||
|
||||
public PlaybackHistoryFragment() {
|
||||
super(new DefaultFeedItemlistAdapter.ItemAccess() {
|
||||
|
||||
@Override
|
||||
public FeedItem getItem(int position) {
|
||||
return FeedManager.getInstance().getPlaybackHistoryItemIndex(
|
||||
position);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getCount() {
|
||||
return FeedManager.getInstance().getPlaybackHistorySize();
|
||||
}
|
||||
}, true);
|
||||
super(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
InternalFeedItemlistAdapter.ItemAccess itemAccessRef;
|
||||
@Override
|
||||
protected InternalFeedItemlistAdapter.ItemAccess itemAccess() {
|
||||
if (itemAccessRef == null) {
|
||||
itemAccessRef = new InternalFeedItemlistAdapter.ItemAccess() {
|
||||
|
||||
@Override
|
||||
public FeedItem getItem(int position) {
|
||||
return (playbackHistory != null) ? playbackHistory.get(position) : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getCount() {
|
||||
return (playbackHistory != null) ? playbackHistory.size() : 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Iterator<FeedItem> queueIterator() {
|
||||
return (queue != null) ? queue.iterator() : null;
|
||||
}
|
||||
};
|
||||
}
|
||||
return itemAccessRef;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
EventDistributor.getInstance().register(historyUpdate);
|
||||
@ -46,10 +66,48 @@ public class PlaybackHistoryFragment extends ItemlistFragment {
|
||||
if ((EventDistributor.PLAYBACK_HISTORY_UPDATE & arg) != 0) {
|
||||
if (AppConfig.DEBUG)
|
||||
Log.d(TAG, "Received content update");
|
||||
fila.notifyDataSetChanged();
|
||||
loadData();
|
||||
}
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
@Override
|
||||
protected void loadData() {
|
||||
AsyncTask<Void, Void, Void> loadTask = new AsyncTask<Void, Void, Void>() {
|
||||
private volatile List<FeedItem> phRef;
|
||||
private volatile List<FeedItem> queueRef;
|
||||
|
||||
@Override
|
||||
protected Void doInBackground(Void... voids) {
|
||||
Context context = PlaybackHistoryFragment.this.getActivity();
|
||||
if (context != null) {
|
||||
queueRef = DBReader.getQueue(context);
|
||||
phRef = DBReader.getPlaybackHistory(context);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostExecute(Void aVoid) {
|
||||
super.onPostExecute(aVoid);
|
||||
if (queueRef != null && phRef != null) {
|
||||
queue = queueRef;
|
||||
playbackHistory = phRef;
|
||||
Log.i(TAG, "Number of items in playback history: " + playbackHistory.size());
|
||||
if (fila != null) {
|
||||
fila.notifyDataSetChanged();
|
||||
}
|
||||
} else {
|
||||
if (queueRef == null) {
|
||||
Log.e(TAG, "Could not load queue");
|
||||
}
|
||||
if (phRef == null) {
|
||||
Log.e(TAG, "Could not load playback history");
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
loadTask.execute();
|
||||
}
|
||||
}
|
||||
|
@ -78,6 +78,9 @@ public final class DBReader {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (item.getFeed() == null) {
|
||||
Log.w(TAG, "No match found for item with ID " + item.getId() + ". Feed ID was " + item.getFeedId());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -107,7 +110,7 @@ public final class DBReader {
|
||||
|
||||
private static List<FeedItem> extractItemlistFromCursor(
|
||||
PodDBAdapter adapter, Cursor itemlistCursor) {
|
||||
ArrayList<String> mediaIds = new ArrayList<String>();
|
||||
ArrayList<String> itemIds = new ArrayList<String>();
|
||||
List<FeedItem> items = new ArrayList<FeedItem>(
|
||||
itemlistCursor.getCount());
|
||||
|
||||
@ -126,12 +129,8 @@ public final class DBReader {
|
||||
.getString(PodDBAdapter.IDX_FI_SMALL_PAYMENT_LINK));
|
||||
item.setFeedId(itemlistCursor
|
||||
.getLong(PodDBAdapter.IDX_FI_SMALL_FEED));
|
||||
long mediaId = itemlistCursor
|
||||
.getLong(PodDBAdapter.IDX_FI_SMALL_MEDIA);
|
||||
if (mediaId != 0) {
|
||||
mediaIds.add(String.valueOf(mediaId));
|
||||
item.setMedia(new FeedMedia(mediaId, item));
|
||||
}
|
||||
itemIds.add(String.valueOf(item.getId()));
|
||||
|
||||
item.setRead((itemlistCursor
|
||||
.getInt(PodDBAdapter.IDX_FI_SMALL_READ) > 0) ? true
|
||||
: false);
|
||||
@ -182,23 +181,23 @@ public final class DBReader {
|
||||
} while (itemlistCursor.moveToNext());
|
||||
}
|
||||
|
||||
extractMediafromItemlist(adapter, items, mediaIds);
|
||||
extractMediafromItemlist(adapter, items, itemIds);
|
||||
Collections.sort(items, new FeedItemPubdateComparator());
|
||||
return items;
|
||||
}
|
||||
|
||||
private static void extractMediafromItemlist(PodDBAdapter adapter,
|
||||
List<FeedItem> items, ArrayList<String> mediaIds) {
|
||||
List<FeedItem> items, ArrayList<String> itemIds) {
|
||||
|
||||
List<FeedItem> itemsCopy = new ArrayList<FeedItem>(items);
|
||||
Cursor cursor = adapter.getFeedMediaCursor(mediaIds
|
||||
.toArray(new String[mediaIds.size()]));
|
||||
Cursor cursor = adapter.getFeedMediaCursor(itemIds
|
||||
.toArray(new String[itemIds.size()]));
|
||||
if (cursor.moveToFirst()) {
|
||||
do {
|
||||
long mediaId = cursor.getLong(PodDBAdapter.KEY_ID_INDEX);
|
||||
long itemId = cursor.getLong(PodDBAdapter.KEY_MEDIA_FEEDITEM_INDEX);
|
||||
// find matching feed item
|
||||
FeedItem item = getMatchingItemForMedia(mediaId, itemsCopy);
|
||||
itemsCopy.remove(item);
|
||||
FeedItem item = getMatchingItemForMedia(itemId, itemsCopy);
|
||||
if (item != null) {
|
||||
Date playbackCompletionDate = null;
|
||||
long playbackCompletionTime = cursor
|
||||
@ -257,10 +256,10 @@ public final class DBReader {
|
||||
return feed;
|
||||
}
|
||||
|
||||
private static FeedItem getMatchingItemForMedia(long mediaId,
|
||||
private static FeedItem getMatchingItemForMedia(long itemId,
|
||||
List<FeedItem> items) {
|
||||
for (FeedItem item : items) {
|
||||
if (item.getMedia() != null && item.getMedia().getId() == mediaId) {
|
||||
if (item.getId() == itemId) {
|
||||
return item;
|
||||
}
|
||||
}
|
||||
@ -355,12 +354,13 @@ public final class DBReader {
|
||||
|
||||
Cursor mediaCursor = adapter.getCompletedMediaCursor(PLAYBACK_HISTORY_SIZE);
|
||||
String[] itemIds = new String[mediaCursor.getCount()];
|
||||
for (int i = 0; i < itemIds.length; i++) {
|
||||
itemIds[i] = Long.toString(mediaCursor.getLong(PodDBAdapter.KEY_FEEDITEM_INDEX));
|
||||
for (int i = 0; i < itemIds.length && mediaCursor.moveToPosition(i); i++) {
|
||||
itemIds[i] = Long.toString(mediaCursor.getLong(PodDBAdapter.KEY_MEDIA_FEEDITEM_INDEX));
|
||||
}
|
||||
mediaCursor.close();
|
||||
Cursor itemCursor = adapter.getFeedItemCursor(itemIds);
|
||||
List<FeedItem> items = extractItemlistFromCursor(adapter, itemCursor);
|
||||
loadFeedDataOfFeedItemlist(context, items);
|
||||
itemCursor.close();
|
||||
|
||||
adapter.close();
|
||||
@ -417,7 +417,9 @@ public final class DBReader {
|
||||
if (feedCursor.moveToFirst()) {
|
||||
feed = extractFeedFromCursorRow(adapter, feedCursor);
|
||||
feed.setItems(getFeedItemList(context, feed));
|
||||
}
|
||||
} else {
|
||||
Log.e(TAG, "getFeed could not find feed with id " + feedId);
|
||||
}
|
||||
adapter.close();
|
||||
return feed;
|
||||
}
|
||||
@ -432,6 +434,7 @@ public final class DBReader {
|
||||
List<FeedItem> list = extractItemlistFromCursor(adapter, itemCursor);
|
||||
if (list.size() > 0) {
|
||||
item = list.get(0);
|
||||
loadFeedDataOfFeedItemlist(context, list);
|
||||
}
|
||||
}
|
||||
return item;
|
||||
@ -465,7 +468,7 @@ public final class DBReader {
|
||||
* The id of the object
|
||||
* @return The found object
|
||||
* */
|
||||
private static FeedImage getFeedImage(PodDBAdapter adapter, final long id) {
|
||||
public static FeedImage getFeedImage(PodDBAdapter adapter, final long id) {
|
||||
Cursor cursor = adapter.getImageOfFeedCursor(id);
|
||||
if ((cursor.getCount() == 0) || !cursor.moveToFirst()) {
|
||||
throw new SQLException("No FeedImage found at index: " + id);
|
||||
|
@ -5,6 +5,7 @@ import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.Future;
|
||||
import java.util.concurrent.ThreadFactory;
|
||||
|
||||
import android.content.Context;
|
||||
@ -88,8 +89,8 @@ public class DBWriter {
|
||||
});
|
||||
}
|
||||
|
||||
public static void deleteFeed(final Context context, final long feedId) {
|
||||
dbExec.submit(new Runnable() {
|
||||
public static Future<?> deleteFeed(final Context context, final long feedId) {
|
||||
return dbExec.submit(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
DownloadRequester requester = DownloadRequester.getInstance();
|
||||
@ -378,7 +379,7 @@ public class DBWriter {
|
||||
|
||||
}
|
||||
|
||||
public void moveQueueItem(final Context context, final int from,
|
||||
public static void moveQueueItem(final Context context, final int from,
|
||||
final int to, final boolean broadcastUpdate) {
|
||||
dbExec.submit(new Runnable() {
|
||||
|
||||
|
@ -86,7 +86,7 @@ public class DownloadRequester {
|
||||
"Requesting download of url " + item.getDownload_url());
|
||||
item.setDownload_url(URLChecker.prepareURL(item.getDownload_url()));
|
||||
|
||||
DownloadRequest request = new DownloadRequest(item.getFile_url(),
|
||||
DownloadRequest request = new DownloadRequest(dest.toString(),
|
||||
item.getDownload_url(), item.getHumanReadableIdentifier(),
|
||||
item.getId(), item.getTypeAsInt());
|
||||
|
||||
|
@ -22,12 +22,14 @@ import de.danoeh.antennapod.feed.FeedItem;
|
||||
import de.danoeh.antennapod.feed.FeedMedia;
|
||||
import de.danoeh.antennapod.service.download.DownloadStatus;
|
||||
|
||||
// TODO Remove media column from feeditem table
|
||||
|
||||
/**
|
||||
* Implements methods for accessing the database
|
||||
* */
|
||||
public class PodDBAdapter {
|
||||
private static final String TAG = "PodDBAdapter";
|
||||
private static final int DATABASE_VERSION = 8;
|
||||
private static final int DATABASE_VERSION = 9;
|
||||
private static final String DATABASE_NAME = "Antennapod.db";
|
||||
|
||||
/** Maximum number of arguments for IN-operator. */
|
||||
@ -64,6 +66,7 @@ public class PodDBAdapter {
|
||||
public static final int KEY_SIZE_INDEX = 6;
|
||||
public static final int KEY_MIME_TYPE_INDEX = 7;
|
||||
public static final int KEY_PLAYBACK_COMPLETION_DATE_INDEX = 8;
|
||||
public static final int KEY_MEDIA_FEEDITEM_INDEX = 9;
|
||||
// --------- Download log indices
|
||||
public static final int KEY_FEEDFILE_INDEX = 1;
|
||||
public static final int KEY_FEEDFILETYPE_INDEX = 2;
|
||||
@ -160,7 +163,8 @@ public class PodDBAdapter {
|
||||
+ " INTEGER," + KEY_FILE_URL + " TEXT," + KEY_DOWNLOAD_URL
|
||||
+ " TEXT," + KEY_DOWNLOADED + " INTEGER," + KEY_POSITION
|
||||
+ " INTEGER," + KEY_SIZE + " INTEGER," + KEY_MIME_TYPE + " TEXT,"
|
||||
+ KEY_PLAYBACK_COMPLETION_DATE + " INTEGER)";
|
||||
+ KEY_PLAYBACK_COMPLETION_DATE + " INTEGER,"
|
||||
+ KEY_FEEDITEM + " INTEGER)";
|
||||
|
||||
private static final String CREATE_TABLE_DOWNLOAD_LOG = "CREATE TABLE "
|
||||
+ TABLE_NAME_DOWNLOAD_LOG + " (" + TABLE_PRIMARY_KEY + KEY_FEEDFILE
|
||||
@ -186,9 +190,16 @@ public class PodDBAdapter {
|
||||
* Select all columns from the feeditems-table except description and
|
||||
* content-encoded.
|
||||
*/
|
||||
private static final String[] SEL_FI_SMALL = { KEY_ID, KEY_TITLE,
|
||||
KEY_PUBDATE, KEY_READ, KEY_LINK, KEY_PAYMENT_LINK, KEY_MEDIA,
|
||||
KEY_FEED, KEY_HAS_CHAPTERS, KEY_ITEM_IDENTIFIER };
|
||||
private static final String[] SEL_FI_SMALL = {
|
||||
TABLE_NAME_FEED_ITEMS + "." + KEY_ID,
|
||||
TABLE_NAME_FEED_ITEMS + "." + KEY_TITLE,
|
||||
TABLE_NAME_FEED_ITEMS + "." + KEY_PUBDATE,
|
||||
TABLE_NAME_FEED_ITEMS + "." + KEY_READ,
|
||||
TABLE_NAME_FEED_ITEMS + "." + KEY_LINK,
|
||||
TABLE_NAME_FEED_ITEMS + "." + KEY_PAYMENT_LINK, KEY_MEDIA,
|
||||
TABLE_NAME_FEED_ITEMS + "." + KEY_FEED,
|
||||
TABLE_NAME_FEED_ITEMS + "." + KEY_HAS_CHAPTERS,
|
||||
TABLE_NAME_FEED_ITEMS + "." + KEY_ITEM_IDENTIFIER };
|
||||
|
||||
// column indices for SEL_FI_SMALL
|
||||
|
||||
@ -214,9 +225,18 @@ public class PodDBAdapter {
|
||||
public static final int IDX_FI_EXTRA_CONTENT_ENCODED = 2;
|
||||
public static final int IDX_FI_EXTRA_FEED = 3;
|
||||
|
||||
static PodDBHelper dbHelperSingleton;
|
||||
|
||||
private static synchronized PodDBHelper getDbHelperSingleton(Context appContext) {
|
||||
if (dbHelperSingleton == null) {
|
||||
dbHelperSingleton = new PodDBHelper(appContext, DATABASE_NAME, null, DATABASE_VERSION);
|
||||
}
|
||||
return dbHelperSingleton;
|
||||
}
|
||||
|
||||
public PodDBAdapter(Context c) {
|
||||
this.context = c;
|
||||
helper = new PodDBHelper(context, DATABASE_NAME, null, DATABASE_VERSION);
|
||||
helper = getDbHelperSingleton(c.getApplicationContext());
|
||||
}
|
||||
|
||||
public PodDBAdapter open() {
|
||||
@ -236,7 +256,7 @@ public class PodDBAdapter {
|
||||
public void close() {
|
||||
if (AppConfig.DEBUG)
|
||||
Log.d(TAG, "Closing DB");
|
||||
db.close();
|
||||
//db.close();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -319,6 +339,9 @@ public class PodDBAdapter {
|
||||
} else {
|
||||
values.put(KEY_PLAYBACK_COMPLETION_DATE, 0);
|
||||
}
|
||||
if (media.getItem() != null) {
|
||||
values.put(KEY_FEEDITEM, media.getItem().getId());
|
||||
}
|
||||
if (media.getId() == 0) {
|
||||
media.setId(db.insert(TABLE_NAME_FEED_MEDIA, null, values));
|
||||
} else {
|
||||
@ -376,12 +399,6 @@ public class PodDBAdapter {
|
||||
}
|
||||
values.put(KEY_PUBDATE, item.getPubDate().getTime());
|
||||
values.put(KEY_PAYMENT_LINK, item.getPaymentLink());
|
||||
if (item.getMedia() != null) {
|
||||
if (item.getMedia().getId() == 0) {
|
||||
setMedia(item.getMedia());
|
||||
}
|
||||
values.put(KEY_MEDIA, item.getMedia().getId());
|
||||
}
|
||||
if (item.getFeed().getId() == 0) {
|
||||
setFeed(item.getFeed());
|
||||
}
|
||||
@ -395,6 +412,11 @@ public class PodDBAdapter {
|
||||
db.update(TABLE_NAME_FEED_ITEMS, values, KEY_ID + "=?",
|
||||
new String[] { String.valueOf(item.getId()) });
|
||||
}
|
||||
if (item.getMedia() != null) {
|
||||
if (item.getMedia().getId() == 0) {
|
||||
setMedia(item.getMedia());
|
||||
}
|
||||
}
|
||||
if (item.getChapters() != null) {
|
||||
setChapters(item);
|
||||
}
|
||||
@ -662,11 +684,22 @@ public class PodDBAdapter {
|
||||
*/
|
||||
public final Cursor getQueueCursor() {
|
||||
open();
|
||||
Cursor c = db.query(TABLE_NAME_FEED_ITEMS, 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);
|
||||
String selFiSmall = Arrays.toString(SEL_FI_SMALL);
|
||||
Object[] args = (Object[]) new String[] {
|
||||
selFiSmall.substring(1, selFiSmall.length() - 1),
|
||||
TABLE_NAME_FEED_ITEMS, TABLE_NAME_QUEUE,
|
||||
TABLE_NAME_FEED_ITEMS + "." + KEY_ID,
|
||||
TABLE_NAME_QUEUE + "." + KEY_FEEDITEM,
|
||||
TABLE_NAME_QUEUE + "." + KEY_FEEDITEM };
|
||||
String query = String.format(
|
||||
"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, 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);
|
||||
*/
|
||||
return c;
|
||||
}
|
||||
|
||||
@ -715,7 +748,7 @@ public class PodDBAdapter {
|
||||
throw new IllegalArgumentException("Limit must be >= 0");
|
||||
}
|
||||
open();
|
||||
Cursor c = db.query(CREATE_TABLE_FEED_MEDIA, null,
|
||||
Cursor c = db.query(TABLE_NAME_FEED_MEDIA, null,
|
||||
KEY_PLAYBACK_COMPLETION_DATE + " IS NOT NULL", null, null,
|
||||
null, KEY_PLAYBACK_COMPLETION_DATE + " DESC LIMIT " + limit);
|
||||
return c;
|
||||
@ -746,12 +779,12 @@ public class PodDBAdapter {
|
||||
}
|
||||
|
||||
cursors[i] = db.rawQuery("SELECT * FROM "
|
||||
+ TABLE_NAME_FEED_MEDIA + " WHERE " + KEY_ID + " IN "
|
||||
+ TABLE_NAME_FEED_MEDIA + " WHERE " + KEY_FEEDITEM + " IN "
|
||||
+ buildInOperator(neededLength), parts);
|
||||
}
|
||||
return new MergeCursor(cursors);
|
||||
} else {
|
||||
return db.query(TABLE_NAME_FEED_MEDIA, null, KEY_ID + " IN "
|
||||
return db.query(TABLE_NAME_FEED_MEDIA, null, KEY_FEEDITEM + " IN "
|
||||
+ buildInOperator(length), mediaIds, null, null, null);
|
||||
}
|
||||
}
|
||||
@ -781,7 +814,7 @@ public class PodDBAdapter {
|
||||
}
|
||||
|
||||
open();
|
||||
return db.query(TABLE_NAME_FEED_ITEMS, null, KEY_ID + " IN "
|
||||
return db.query(TABLE_NAME_FEED_ITEMS, SEL_FI_SMALL, KEY_ID + " IN "
|
||||
+ buildInOperator(ids.length), ids, null, null, null);
|
||||
|
||||
}
|
||||
@ -883,43 +916,65 @@ public class PodDBAdapter {
|
||||
db.execSQL(CREATE_TABLE_SIMPLECHAPTERS);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUpgrade(final SQLiteDatabase db, final int oldVersion,
|
||||
final int newVersion) {
|
||||
Log.w("DBAdapter", "Upgrading from version " + oldVersion + " to "
|
||||
+ newVersion + ".");
|
||||
if (oldVersion <= 1) {
|
||||
db.execSQL("ALTER TABLE " + TABLE_NAME_FEEDS + " ADD COLUMN "
|
||||
+ KEY_TYPE + " TEXT");
|
||||
}
|
||||
if (oldVersion <= 2) {
|
||||
db.execSQL("ALTER TABLE " + TABLE_NAME_SIMPLECHAPTERS
|
||||
+ " ADD COLUMN " + KEY_LINK + " TEXT");
|
||||
}
|
||||
if (oldVersion <= 3) {
|
||||
db.execSQL("ALTER TABLE " + TABLE_NAME_FEED_ITEMS
|
||||
+ " ADD COLUMN " + KEY_ITEM_IDENTIFIER + " TEXT");
|
||||
}
|
||||
if (oldVersion <= 4) {
|
||||
db.execSQL("ALTER TABLE " + TABLE_NAME_FEEDS + " ADD COLUMN "
|
||||
+ KEY_FEED_IDENTIFIER + " TEXT");
|
||||
}
|
||||
if (oldVersion <= 5) {
|
||||
db.execSQL("ALTER TABLE " + TABLE_NAME_DOWNLOAD_LOG
|
||||
+ " ADD COLUMN " + KEY_REASON_DETAILED + " TEXT");
|
||||
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");
|
||||
}
|
||||
if (oldVersion <= 7) {
|
||||
db.execSQL("ALTER TABLE " + TABLE_NAME_FEED_MEDIA
|
||||
+ " ADD COLUMN " + KEY_PLAYBACK_COMPLETION_DATE
|
||||
+ " INTEGER");
|
||||
}
|
||||
}
|
||||
}
|
||||
@Override
|
||||
public void onUpgrade(final SQLiteDatabase db, final int oldVersion,
|
||||
final int newVersion) {
|
||||
Log.w("DBAdapter", "Upgrading from version " + oldVersion + " to "
|
||||
+ newVersion + ".");
|
||||
if (oldVersion <= 1) {
|
||||
db.execSQL("ALTER TABLE " + TABLE_NAME_FEEDS + " ADD COLUMN "
|
||||
+ KEY_TYPE + " TEXT");
|
||||
}
|
||||
if (oldVersion <= 2) {
|
||||
db.execSQL("ALTER TABLE " + TABLE_NAME_SIMPLECHAPTERS
|
||||
+ " ADD COLUMN " + KEY_LINK + " TEXT");
|
||||
}
|
||||
if (oldVersion <= 3) {
|
||||
db.execSQL("ALTER TABLE " + TABLE_NAME_FEED_ITEMS
|
||||
+ " ADD COLUMN " + KEY_ITEM_IDENTIFIER + " TEXT");
|
||||
}
|
||||
if (oldVersion <= 4) {
|
||||
db.execSQL("ALTER TABLE " + TABLE_NAME_FEEDS + " ADD COLUMN "
|
||||
+ KEY_FEED_IDENTIFIER + " TEXT");
|
||||
}
|
||||
if (oldVersion <= 5) {
|
||||
db.execSQL("ALTER TABLE " + TABLE_NAME_DOWNLOAD_LOG
|
||||
+ " ADD COLUMN " + KEY_REASON_DETAILED + " TEXT");
|
||||
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");
|
||||
}
|
||||
if (oldVersion <= 7) {
|
||||
db.execSQL("ALTER TABLE " + TABLE_NAME_FEED_MEDIA
|
||||
+ " ADD COLUMN " + KEY_PLAYBACK_COMPLETION_DATE
|
||||
+ " INTEGER");
|
||||
}
|
||||
if (oldVersion <= 8) {
|
||||
final int KEY_ID_POSITION = 0;
|
||||
final int KEY_MEDIA_POSITION = 1;
|
||||
|
||||
// Add feeditem column to feedmedia table
|
||||
db.execSQL("ALTER TABLE " + TABLE_NAME_FEED_MEDIA
|
||||
+ " ADD COLUMN " + KEY_FEEDITEM
|
||||
+ " INTEGER");
|
||||
Cursor feeditemCursor = db.query(TABLE_NAME_FEED_ITEMS, new String[]{KEY_ID, KEY_MEDIA}, "? > 0", new String[] {KEY_MEDIA}, null, null, null);
|
||||
if (feeditemCursor.moveToFirst()) {
|
||||
db.beginTransaction();
|
||||
ContentValues contentValues = new ContentValues();
|
||||
do {
|
||||
long mediaId = feeditemCursor.getLong(KEY_MEDIA_POSITION);
|
||||
contentValues.put(KEY_FEEDITEM, feeditemCursor.getLong(KEY_ID_POSITION));
|
||||
db.update(TABLE_NAME_FEED_MEDIA, contentValues, "?=?", new String[] {KEY_ID, Long.toString(mediaId)});
|
||||
contentValues.clear();
|
||||
} while (feeditemCursor.moveToNext());
|
||||
db.setTransactionSuccessful();
|
||||
db.endTransaction();
|
||||
}
|
||||
feeditemCursor.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user