summaryrefslogtreecommitdiff
path: root/app/src
diff options
context:
space:
mode:
Diffstat (limited to 'app/src')
-rw-r--r--app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceTaskManagerTest.java2
-rw-r--r--app/src/androidTest/java/de/test/antennapod/storage/DBReaderTest.java2
-rw-r--r--app/src/androidTest/java/de/test/antennapod/storage/DBWriterTest.java8
-rw-r--r--app/src/androidTest/java/de/test/antennapod/ui/UITestUtils.java2
-rw-r--r--app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java2
-rw-r--r--app/src/main/java/de/danoeh/antennapod/activity/PreferenceActivity.java8
-rw-r--r--app/src/main/java/de/danoeh/antennapod/adapter/AdapterUtils.java1
-rw-r--r--app/src/main/java/de/danoeh/antennapod/adapter/AllEpisodesListAdapter.java9
-rw-r--r--app/src/main/java/de/danoeh/antennapod/adapter/DefaultActionButtonCallback.java4
-rw-r--r--app/src/main/java/de/danoeh/antennapod/adapter/QueueListAdapter.java9
-rw-r--r--app/src/main/java/de/danoeh/antennapod/dialog/EpisodesApplyActionFragment.java8
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java36
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/EpisodesFragment.java7
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/FavoriteEpisodesFragment.java111
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/ItemFragment.java2
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java2
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/NewEpisodesFragment.java18
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java4
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java2
-rw-r--r--app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java15
-rw-r--r--app/src/main/res/layout/episodes_fragment_with_undo.xml (renamed from app/src/main/res/layout/new_episodes_fragment.xml)0
-rw-r--r--app/src/main/res/menu/allepisodes_context.xml9
-rw-r--r--app/src/main/res/menu/feeditem_options.xml10
-rw-r--r--app/src/main/res/menu/queue_context.xml8
24 files changed, 229 insertions, 50 deletions
diff --git a/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceTaskManagerTest.java b/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceTaskManagerTest.java
index 869a13127..201ce17c0 100644
--- a/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceTaskManagerTest.java
+++ b/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceTaskManagerTest.java
@@ -12,7 +12,7 @@ import java.util.concurrent.TimeUnit;
import de.danoeh.antennapod.core.feed.EventDistributor;
import de.danoeh.antennapod.core.feed.Feed;
import de.danoeh.antennapod.core.feed.FeedItem;
-import de.danoeh.antennapod.core.feed.QueueEvent;
+import de.danoeh.antennapod.core.event.QueueEvent;
import de.danoeh.antennapod.core.service.playback.PlaybackServiceTaskManager;
import de.danoeh.antennapod.core.storage.PodDBAdapter;
import de.danoeh.antennapod.core.util.playback.Playable;
diff --git a/app/src/androidTest/java/de/test/antennapod/storage/DBReaderTest.java b/app/src/androidTest/java/de/test/antennapod/storage/DBReaderTest.java
index 6873cb9a6..3988669ce 100644
--- a/app/src/androidTest/java/de/test/antennapod/storage/DBReaderTest.java
+++ b/app/src/androidTest/java/de/test/antennapod/storage/DBReaderTest.java
@@ -102,7 +102,7 @@ public class DBReaderTest extends InstrumentationTestCase {
items.add(item);
}
}
- DBReader.loadFeedDataOfFeedItemlist(items);
+ DBReader.loadAdditionalFeedItemListData(items);
for (int i = 0; i < numFeeds; i++) {
for (int j = 0; j < numItems; j++) {
FeedItem item = feeds.get(i).getItems().get(j);
diff --git a/app/src/androidTest/java/de/test/antennapod/storage/DBWriterTest.java b/app/src/androidTest/java/de/test/antennapod/storage/DBWriterTest.java
index 2a63ef4b3..585e27e0b 100644
--- a/app/src/androidTest/java/de/test/antennapod/storage/DBWriterTest.java
+++ b/app/src/androidTest/java/de/test/antennapod/storage/DBWriterTest.java
@@ -556,7 +556,7 @@ public class DBWriterTest extends InstrumentationTestCase {
}
List<Future<?>> futures = new ArrayList<Future<?>>();
for (FeedItem item : feed.getItems()) {
- futures.add(DBWriter.addQueueItem(context, item.getId()));
+ futures.add(DBWriter.addQueueItem(context, item));
}
for (Future<?> f : futures) {
f.get(TIMEOUT, TimeUnit.SECONDS);
@@ -577,7 +577,7 @@ public class DBWriterTest extends InstrumentationTestCase {
adapter.close();
assertTrue(item.getId() != 0);
- DBWriter.addQueueItem(context, item.getId()).get(TIMEOUT, TimeUnit.SECONDS);
+ DBWriter.addQueueItem(context, item).get(TIMEOUT, TimeUnit.SECONDS);
adapter = PodDBAdapter.getInstance();
adapter.open();
@@ -601,7 +601,7 @@ public class DBWriterTest extends InstrumentationTestCase {
adapter.close();
assertTrue(item.getId() != 0);
- DBWriter.addQueueItem(context, item.getId()).get(TIMEOUT, TimeUnit.SECONDS);
+ DBWriter.addQueueItem(context, item).get(TIMEOUT, TimeUnit.SECONDS);
adapter = PodDBAdapter.getInstance();
adapter.open();
@@ -611,7 +611,7 @@ public class DBWriterTest extends InstrumentationTestCase {
cursor.close();
adapter.close();
- DBWriter.addQueueItem(context, item.getId()).get(TIMEOUT, TimeUnit.SECONDS);
+ DBWriter.addQueueItem(context, item).get(TIMEOUT, TimeUnit.SECONDS);
adapter = PodDBAdapter.getInstance();
adapter.open();
cursor = adapter.getQueueIDCursor();
diff --git a/app/src/androidTest/java/de/test/antennapod/ui/UITestUtils.java b/app/src/androidTest/java/de/test/antennapod/ui/UITestUtils.java
index 9859e7534..973426841 100644
--- a/app/src/androidTest/java/de/test/antennapod/ui/UITestUtils.java
+++ b/app/src/androidTest/java/de/test/antennapod/ui/UITestUtils.java
@@ -26,7 +26,7 @@ import de.danoeh.antennapod.core.feed.Feed;
import de.danoeh.antennapod.core.feed.FeedImage;
import de.danoeh.antennapod.core.feed.FeedItem;
import de.danoeh.antennapod.core.feed.FeedMedia;
-import de.danoeh.antennapod.core.feed.QueueEvent;
+import de.danoeh.antennapod.core.event.QueueEvent;
import de.danoeh.antennapod.core.storage.PodDBAdapter;
import de.greenrobot.event.EventBus;
import de.test.antennapod.util.service.download.HTTPBin;
diff --git a/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java
index 76d657585..4b3460476 100644
--- a/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java
+++ b/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java
@@ -43,7 +43,7 @@ import de.danoeh.antennapod.core.dialog.ConfirmationDialog;
import de.danoeh.antennapod.core.event.ProgressEvent;
import de.danoeh.antennapod.core.feed.EventDistributor;
import de.danoeh.antennapod.core.feed.Feed;
-import de.danoeh.antennapod.core.feed.QueueEvent;
+import de.danoeh.antennapod.core.event.QueueEvent;
import de.danoeh.antennapod.core.preferences.UserPreferences;
import de.danoeh.antennapod.core.storage.DBReader;
import de.danoeh.antennapod.core.storage.DBWriter;
diff --git a/app/src/main/java/de/danoeh/antennapod/activity/PreferenceActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/PreferenceActivity.java
index 133436b6f..fe94d82a1 100644
--- a/app/src/main/java/de/danoeh/antennapod/activity/PreferenceActivity.java
+++ b/app/src/main/java/de/danoeh/antennapod/activity/PreferenceActivity.java
@@ -102,13 +102,17 @@ public class PreferenceActivity extends ActionBarActivity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
- instance.preferenceController.onCreate();
+ if(instance.preferenceController != null) {
+ instance.preferenceController.onCreate();
+ }
}
@Override
public void onResume() {
super.onResume();
- instance.preferenceController.onResume();
+ if(instance.preferenceController != null) {
+ instance.preferenceController.onResume();
+ }
}
}
}
diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/AdapterUtils.java b/app/src/main/java/de/danoeh/antennapod/adapter/AdapterUtils.java
index 14853c5ae..1ea7daaa3 100644
--- a/app/src/main/java/de/danoeh/antennapod/adapter/AdapterUtils.java
+++ b/app/src/main/java/de/danoeh/antennapod/adapter/AdapterUtils.java
@@ -61,6 +61,7 @@ public class AdapterUtils {
txtvPos.setText("");
}
}, error -> {
+ txtvPos.setText("");
Log.e(TAG, Log.getStackTraceString(error));
});
} else {
diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/AllEpisodesListAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/AllEpisodesListAdapter.java
index 946fa431a..b1b85da9f 100644
--- a/app/src/main/java/de/danoeh/antennapod/adapter/AllEpisodesListAdapter.java
+++ b/app/src/main/java/de/danoeh/antennapod/adapter/AllEpisodesListAdapter.java
@@ -4,6 +4,7 @@ import android.content.Context;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.text.format.DateUtils;
+import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -124,13 +125,17 @@ public class AllEpisodesListAdapter extends BaseAdapter {
holder.txtvDuration.setText("{fa-spinner}");
Iconify.addIcons(holder.txtvDuration);
NetworkUtils.getFeedMediaSizeObservable(media)
- .subscribe(size -> {
+ .subscribe(
+ size -> {
if (size > 0) {
holder.txtvDuration.setText(Converter.byteToString(size));
} else {
holder.txtvDuration.setText("");
}
- });
+ }, error -> {
+ holder.txtvDuration.setText("");
+ Log.e(TAG, Log.getStackTraceString(error));
+ });
} else {
holder.txtvDuration.setText("");
}
diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/DefaultActionButtonCallback.java b/app/src/main/java/de/danoeh/antennapod/adapter/DefaultActionButtonCallback.java
index f17f0ba0f..445e4832c 100644
--- a/app/src/main/java/de/danoeh/antennapod/adapter/DefaultActionButtonCallback.java
+++ b/app/src/main/java/de/danoeh/antennapod/adapter/DefaultActionButtonCallback.java
@@ -67,7 +67,7 @@ public class DefaultActionButtonCallback implements ActionButtonCallback {
DownloadRequestErrorDialogCreator.newRequestErrorDialog(context, e.getMessage());
}
} else if(userChoseAddToQueue() && !queueIds.contains(item.getId())) {
- DBWriter.addQueueItem(context, item.getId());
+ DBWriter.addQueueItem(context, item);
Toast.makeText(context, R.string.added_to_queue_label, Toast.LENGTH_SHORT).show();
} else {
confirmMobileDownload(context, item);
@@ -124,7 +124,7 @@ public class DefaultActionButtonCallback implements ActionButtonCallback {
@Override
public void onClick(DialogInterface dialog, int which) {
onlyAddToQueueTimeStamp = System.currentTimeMillis();
- DBWriter.addQueueItem(context, item.getId());
+ DBWriter.addQueueItem(context, item);
Toast.makeText(context, R.string.added_to_queue_label, Toast.LENGTH_SHORT).show();
}
})
diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/QueueListAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/QueueListAdapter.java
index f54f01fcf..d5fb00b34 100644
--- a/app/src/main/java/de/danoeh/antennapod/adapter/QueueListAdapter.java
+++ b/app/src/main/java/de/danoeh/antennapod/adapter/QueueListAdapter.java
@@ -4,6 +4,7 @@ import android.content.Context;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.text.format.DateUtils;
+import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -147,13 +148,17 @@ public class QueueListAdapter extends BaseAdapter {
holder.progressLeft.setText("{fa-spinner}");
Iconify.addIcons(holder.progressLeft);
NetworkUtils.getFeedMediaSizeObservable(media)
- .subscribe(size -> {
+ .subscribe(
+ size -> {
if (size > 0) {
holder.progressLeft.setText(Converter.byteToString(size));
} else {
holder.progressLeft.setText("");
}
- });
+ }, error -> {
+ holder.progressLeft.setText("");
+ Log.e(TAG, Log.getStackTraceString(error));
+ });
} else {
holder.progressLeft.setText("");
}
diff --git a/app/src/main/java/de/danoeh/antennapod/dialog/EpisodesApplyActionFragment.java b/app/src/main/java/de/danoeh/antennapod/dialog/EpisodesApplyActionFragment.java
index 37ca0ad26..8e416139e 100644
--- a/app/src/main/java/de/danoeh/antennapod/dialog/EpisodesApplyActionFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/dialog/EpisodesApplyActionFragment.java
@@ -361,13 +361,7 @@ public class EpisodesApplyActionFragment extends Fragment {
}
private void queueChecked() {
- LongList orderedIds = new LongList();
- for(FeedItem episode : episodes) {
- if(checkedIds.contains(episode.getId())) {
- orderedIds.add((episode.getId()));
- }
- }
- DBWriter.addQueueItem(getActivity(), false, orderedIds.toArray());
+ DBWriter.addQueueItem(getActivity(), episodes.toArray(new FeedItem[0]));
close();
}
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java
index 5aed66013..31b24773f 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java
@@ -338,7 +338,6 @@ public class AllEpisodesFragment extends Fragment {
super.onCreateContextMenu(menu, v, menuInfo);
AdapterView.AdapterContextMenuInfo adapterInfo = (AdapterView.AdapterContextMenuInfo) menuInfo;
FeedItem item = itemAccess.getItem(adapterInfo.position);
-
MenuInflater inflater = getActivity().getMenuInflater();
inflater.inflate(R.menu.allepisodes_context, menu);
@@ -353,11 +352,27 @@ public class AllEpisodesFragment extends Fragment {
@Override
public boolean onContextItemSelected(MenuItem item) {
+ if (!getUserVisibleHint()) {
+ // we're not visible, don't do anything.
+ return false;
+ }
AdapterView.AdapterContextMenuInfo menuInfo = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
- if(menuInfo == null) {
+ if (menuInfo == null) {
menuInfo = lastMenuInfo;
}
- FeedItem selectedItem = itemAccess.getItem(menuInfo.position);
+ if (menuInfo == null) {
+ Log.e(TAG, "menuInfo is null, not doing anything");
+ return false;
+ }
+
+ FeedItem selectedItem = null;
+
+ // make sure the item still makes sense
+ if (menuInfo.position >= 0 && menuInfo.position < itemAccess.getCount()) {
+ selectedItem = itemAccess.getItem(menuInfo.position);
+ } else {
+ Log.d(TAG, "Selected item at position " + menuInfo.position + " does not exist, only " + itemAccess.getCount() + " items available");
+ }
if (selectedItem == null) {
Log.i(TAG, "Selected item at position " + menuInfo.position + " was null, ignoring selection");
@@ -452,12 +467,7 @@ public class AllEpisodesFragment extends Fragment {
};
private void updateShowOnlyEpisodesListViewState() {
- if (showOnlyNewEpisodes) {
- listView.setEmptyView(null);
- txtvEmpty.setVisibility(View.GONE);
- } else {
- listView.setEmptyView(txtvEmpty);
- }
+ listView.setEmptyView(txtvEmpty);
}
protected void loadItems() {
@@ -488,13 +498,9 @@ public class AllEpisodesFragment extends Fragment {
});
}
- private Pair<List<FeedItem>,LongList> loadData() {
+ protected Pair<List<FeedItem>,LongList> loadData() {
List<FeedItem> items;
- if(showOnlyNewEpisodes) {
- items = DBReader.getNewItemsList();
- } else {
- items = DBReader.getRecentlyPublishedEpisodes(RECENT_EPISODES_LIMIT);
- }
+ items = DBReader.getRecentlyPublishedEpisodes(RECENT_EPISODES_LIMIT);
LongList queuedIds = DBReader.getQueueIDList();
return Pair.create(items, queuedIds);
}
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/EpisodesFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/EpisodesFragment.java
index e234d95ad..f23981935 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/EpisodesFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/EpisodesFragment.java
@@ -23,7 +23,8 @@ public class EpisodesFragment extends Fragment {
public static final int POS_NEW_EPISODES = 0;
public static final int POS_ALL_EPISODES = 1;
- public static final int TOTAL_COUNT = 2;
+ public static final int POS_FAV_EPISODES = 2;
+ public static final int TOTAL_COUNT = 3;
private TabLayout tabLayout;
@@ -91,6 +92,8 @@ public class EpisodesFragment extends Fragment {
return new AllEpisodesFragment();
case POS_NEW_EPISODES:
return new NewEpisodesFragment();
+ case POS_FAV_EPISODES:
+ return new FavoriteEpisodesFragment();
}
return null;
}
@@ -107,6 +110,8 @@ public class EpisodesFragment extends Fragment {
return resources.getString(R.string.all_episodes_short_label);
case POS_NEW_EPISODES:
return resources.getString(R.string.new_label);
+ case POS_FAV_EPISODES:
+ return resources.getString(R.string.favorite_episodes_label);
default:
return super.getPageTitle(position);
}
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/FavoriteEpisodesFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/FavoriteEpisodesFragment.java
new file mode 100644
index 000000000..95f7cfcc1
--- /dev/null
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/FavoriteEpisodesFragment.java
@@ -0,0 +1,111 @@
+package de.danoeh.antennapod.fragment;
+
+import android.content.Context;
+import android.os.Bundle;
+import android.support.v4.util.Pair;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import java.util.List;
+
+import de.danoeh.antennapod.R;
+import de.danoeh.antennapod.core.event.FavoritesEvent;
+import de.danoeh.antennapod.core.feed.FeedItem;
+import de.danoeh.antennapod.core.storage.DBReader;
+import de.danoeh.antennapod.core.storage.DBWriter;
+import de.danoeh.antennapod.core.util.LongList;
+import de.danoeh.antennapod.core.util.gui.FeedItemUndoToken;
+import de.danoeh.antennapod.core.util.gui.UndoBarController;
+import de.greenrobot.event.EventBus;
+
+
+/**
+ * Like 'EpisodesFragment' except that it only shows favorite episodes and
+ * supports swiping to remove from favorites.
+ */
+
+public class FavoriteEpisodesFragment extends AllEpisodesFragment {
+
+ public static final String TAG = "FavoriteEpisodesFrag";
+
+ private static final String PREF_NAME = "PrefFavoriteEpisodesFragment";
+
+ private UndoBarController undoBarController;
+
+ public FavoriteEpisodesFragment() {
+ super(false, PREF_NAME);
+ }
+
+ public void onEvent(FavoritesEvent event) {
+ Log.d(TAG, "onEvent(" + event + ")");
+ loadItems();
+ }
+
+ @Override
+ public void onStart() {
+ super.onStart();
+ EventBus.getDefault().register(this);
+ }
+
+ @Override
+ public void onStop() {
+ super.onStop();
+ EventBus.getDefault().unregister(this);
+ }
+
+ @Override
+ protected void resetViewState() {
+ super.resetViewState();
+ undoBarController = null;
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+ View root = super.onCreateViewHelper(inflater, container, savedInstanceState,
+ R.layout.episodes_fragment_with_undo);
+
+ listView.setRemoveListener(which -> {
+ Log.d(TAG, "remove(" + which + ")");
+ if (subscription != null) {
+ subscription.unsubscribe();
+ }
+ FeedItem item = (FeedItem) listView.getAdapter().getItem(which);
+
+ DBWriter.removeFavoriteItem(item);
+
+ undoBarController.showUndoBar(false,
+ getString(R.string.removed_item), new FeedItemUndoToken(item,
+ which)
+ );
+ });
+
+ undoBarController = new UndoBarController<FeedItemUndoToken>(root.findViewById(R.id.undobar), new UndoBarController.UndoListener<FeedItemUndoToken>() {
+
+ private final Context context = getActivity();
+
+ @Override
+ public void onUndo(FeedItemUndoToken token) {
+ if (token != null) {
+ long itemId = token.getFeedItemId();
+ DBWriter.addFavoriteItemById(itemId);
+ }
+ }
+
+ @Override
+ public void onHide(FeedItemUndoToken token) {
+ // nothing to do
+ }
+ });
+ return root;
+ }
+
+ @Override
+ protected Pair<List<FeedItem>,LongList> loadData() {
+ List<FeedItem> items;
+ items = DBReader.getFavoriteItemsList();
+ LongList queuedIds = DBReader.getQueueIDList();
+ return Pair.create(items, queuedIds);
+ }
+}
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/ItemFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/ItemFragment.java
index 353d8149c..6d28478e9 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/ItemFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/ItemFragment.java
@@ -47,7 +47,7 @@ import de.danoeh.antennapod.core.asynctask.DownloadObserver;
import de.danoeh.antennapod.core.feed.EventDistributor;
import de.danoeh.antennapod.core.feed.FeedItem;
import de.danoeh.antennapod.core.feed.FeedMedia;
-import de.danoeh.antennapod.core.feed.QueueEvent;
+import de.danoeh.antennapod.core.event.QueueEvent;
import de.danoeh.antennapod.core.glide.ApGlideSettings;
import de.danoeh.antennapod.core.preferences.UserPreferences;
import de.danoeh.antennapod.core.service.download.Downloader;
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java
index 3d0ff66f7..d17788dde 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java
@@ -56,7 +56,7 @@ import de.danoeh.antennapod.core.feed.FeedEvent;
import de.danoeh.antennapod.core.feed.FeedItem;
import de.danoeh.antennapod.core.feed.FeedItemFilter;
import de.danoeh.antennapod.core.feed.FeedMedia;
-import de.danoeh.antennapod.core.feed.QueueEvent;
+import de.danoeh.antennapod.core.event.QueueEvent;
import de.danoeh.antennapod.core.glide.ApGlideSettings;
import de.danoeh.antennapod.core.glide.FastBlurTransformation;
import de.danoeh.antennapod.core.preferences.UserPreferences;
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/NewEpisodesFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/NewEpisodesFragment.java
index d454208c1..60d0161b2 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/NewEpisodesFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/NewEpisodesFragment.java
@@ -2,6 +2,7 @@ package de.danoeh.antennapod.fragment;
import android.content.Context;
import android.os.Bundle;
+import android.support.v4.util.Pair;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
@@ -9,12 +10,15 @@ import android.view.ViewGroup;
import com.mobeta.android.dslv.DragSortListView;
+import java.util.List;
+
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.core.feed.FeedItem;
import de.danoeh.antennapod.core.feed.FeedMedia;
-import de.danoeh.antennapod.core.feed.QueueEvent;
+import de.danoeh.antennapod.core.event.QueueEvent;
import de.danoeh.antennapod.core.storage.DBReader;
import de.danoeh.antennapod.core.storage.DBWriter;
+import de.danoeh.antennapod.core.util.LongList;
import de.danoeh.antennapod.core.util.gui.FeedItemUndoToken;
import de.danoeh.antennapod.core.util.gui.UndoBarController;
import de.greenrobot.event.EventBus;
@@ -63,13 +67,13 @@ public class NewEpisodesFragment extends AllEpisodesFragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View root = super.onCreateViewHelper(inflater, container, savedInstanceState,
- R.layout.new_episodes_fragment);
+ R.layout.episodes_fragment_with_undo);
listView.setRemoveListener(new DragSortListView.RemoveListener() {
@Override
public void remove(int which) {
Log.d(TAG, "remove(" + which + ")");
- if(subscription != null) {
+ if (subscription != null) {
subscription.unsubscribe();
}
FeedItem item = (FeedItem) listView.getAdapter().getItem(which);
@@ -109,4 +113,12 @@ public class NewEpisodesFragment extends AllEpisodesFragment {
return root;
}
+ @Override
+ protected Pair<List<FeedItem>,LongList> loadData() {
+ List<FeedItem> items;
+ items = DBReader.getNewItemsList();
+ LongList queuedIds = DBReader.getQueueIDList();
+ return Pair.create(items, queuedIds);
+ }
+
}
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java
index e6460309b..d7ffa3e23 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java
@@ -25,7 +25,7 @@ import de.danoeh.antennapod.core.asynctask.DownloadObserver;
import de.danoeh.antennapod.core.feed.EventDistributor;
import de.danoeh.antennapod.core.feed.FeedItem;
import de.danoeh.antennapod.core.feed.FeedMedia;
-import de.danoeh.antennapod.core.feed.QueueEvent;
+import de.danoeh.antennapod.core.event.QueueEvent;
import de.danoeh.antennapod.core.service.download.Downloader;
import de.danoeh.antennapod.core.storage.DBReader;
import de.danoeh.antennapod.core.storage.DBWriter;
@@ -277,7 +277,7 @@ public class PlaybackHistoryFragment extends ListFragment {
private Pair<List<FeedItem>, LongList> loadData() {
List<FeedItem> history = DBReader.getPlaybackHistory();
LongList queue = DBReader.getQueueIDList();
- DBReader.loadFeedDataOfFeedItemlist(history);
+ DBReader.loadAdditionalFeedItemListData(history);
return Pair.create(history, queue);
}
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java
index 7bcd98dc8..0ac33f8fb 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java
@@ -37,7 +37,7 @@ import de.danoeh.antennapod.core.feed.EventDistributor;
import de.danoeh.antennapod.core.feed.Feed;
import de.danoeh.antennapod.core.feed.FeedItem;
import de.danoeh.antennapod.core.feed.FeedMedia;
-import de.danoeh.antennapod.core.feed.QueueEvent;
+import de.danoeh.antennapod.core.event.QueueEvent;
import de.danoeh.antennapod.core.preferences.UserPreferences;
import de.danoeh.antennapod.core.service.download.DownloadService;
import de.danoeh.antennapod.core.service.download.Downloader;
diff --git a/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java b/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java
index 510ea2760..da87fb1b9 100644
--- a/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java
+++ b/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java
@@ -72,7 +72,7 @@ public class FeedItemMenuHandler {
mi.setItemVisibility(R.id.skip_episode_item, false);
}
- boolean isInQueue = queueAccess.contains(selectedItem.getId());
+ boolean isInQueue = selectedItem.isTagged(FeedItem.TAG_QUEUE);
if(queueAccess.size() == 0 || queueAccess.get(0) == selectedItem.getId()) {
mi.setItemVisibility(R.id.move_to_top_item, false);
}
@@ -123,6 +123,11 @@ public class FeedItemMenuHandler {
if (selectedItem.getPaymentLink() == null || !selectedItem.getFlattrStatus().flattrable()) {
mi.setItemVisibility(R.id.support_item, false);
}
+
+ boolean isFavorite = selectedItem.isTagged(FeedItem.TAG_FAVORITE);
+ mi.setItemVisibility(R.id.add_to_favorites_item, !isFavorite);
+ mi.setItemVisibility(R.id.remove_from_favorites_item, isFavorite);
+
return true;
}
@@ -188,11 +193,17 @@ public class FeedItemMenuHandler {
case R.id.move_to_bottom_item:
DBWriter.moveQueueItemToBottom(selectedItem.getId(), true);
case R.id.add_to_queue_item:
- DBWriter.addQueueItem(context, selectedItem.getId());
+ DBWriter.addQueueItem(context, selectedItem);
break;
case R.id.remove_from_queue_item:
DBWriter.removeQueueItem(context, selectedItem, true);
break;
+ case R.id.add_to_favorites_item:
+ DBWriter.addFavoriteItem(selectedItem);
+ break;
+ case R.id.remove_from_favorites_item:
+ DBWriter.removeFavoriteItem(selectedItem);
+ break;
case R.id.reset_position:
selectedItem.getMedia().setPosition(0);
DBWriter.markItemPlayed(selectedItem, FeedItem.UNPLAYED, true);
diff --git a/app/src/main/res/layout/new_episodes_fragment.xml b/app/src/main/res/layout/episodes_fragment_with_undo.xml
index e90171630..e90171630 100644
--- a/app/src/main/res/layout/new_episodes_fragment.xml
+++ b/app/src/main/res/layout/episodes_fragment_with_undo.xml
diff --git a/app/src/main/res/menu/allepisodes_context.xml b/app/src/main/res/menu/allepisodes_context.xml
index 171e509a8..c5356535c 100644
--- a/app/src/main/res/menu/allepisodes_context.xml
+++ b/app/src/main/res/menu/allepisodes_context.xml
@@ -24,7 +24,14 @@
android:id="@+id/remove_from_queue_item"
android:menuCategory="container"
android:title="@string/remove_from_queue_label" />
-
+ <item
+ android:id="@+id/add_to_favorites_item"
+ android:menuCategory="container"
+ android:title="@string/add_to_favorite_label" />
+ <item
+ android:id="@+id/remove_from_favorites_item"
+ android:menuCategory="container"
+ android:title="@string/remove_from_favorite_label" />
<item
android:id="@+id/reset_position"
android:menuCategory="container"
diff --git a/app/src/main/res/menu/feeditem_options.xml b/app/src/main/res/menu/feeditem_options.xml
index 650912ea2..898081486 100644
--- a/app/src/main/res/menu/feeditem_options.xml
+++ b/app/src/main/res/menu/feeditem_options.xml
@@ -31,6 +31,16 @@
</item>
<item
+ android:id="@+id/add_to_favorites_item"
+ android:menuCategory="container"
+ android:title="@string/add_to_favorite_label" />
+
+ <item
+ android:id="@+id/remove_from_favorites_item"
+ android:menuCategory="container"
+ android:title="@string/remove_from_favorite_label" />
+
+ <item
android:id="@+id/reset_position"
custom:showAsAction="collapseActionView"
android:title="@string/reset_position">
diff --git a/app/src/main/res/menu/queue_context.xml b/app/src/main/res/menu/queue_context.xml
index d09f3c84c..3eb1d9d5e 100644
--- a/app/src/main/res/menu/queue_context.xml
+++ b/app/src/main/res/menu/queue_context.xml
@@ -28,6 +28,14 @@
android:title="@string/remove_from_queue_label" />
<item
+ android:id="@+id/add_to_favorites_item"
+ android:menuCategory="container"
+ android:title="@string/add_to_favorite_label" />
+ <item
+ android:id="@+id/remove_from_favorites_item"
+ android:menuCategory="container"
+ android:title="@string/remove_from_favorite_label" />
+ <item
android:id="@+id/reset_position"
android:menuCategory="container"
android:title="@string/reset_position" />