summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
Diffstat (limited to 'app')
-rw-r--r--app/src/main/java/de/danoeh/antennapod/adapter/AllEpisodesRecycleAdapter.java9
-rw-r--r--app/src/main/java/de/danoeh/antennapod/adapter/QueueRecyclerAdapter.java5
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java29
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/ItemFragment.java41
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java21
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java14
-rw-r--r--app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java24
-rw-r--r--app/src/main/res/menu/feeditemlist_context.xml9
8 files changed, 121 insertions, 31 deletions
diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/AllEpisodesRecycleAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/AllEpisodesRecycleAdapter.java
index 1fa4b7c48..d749b0313 100644
--- a/app/src/main/java/de/danoeh/antennapod/adapter/AllEpisodesRecycleAdapter.java
+++ b/app/src/main/java/de/danoeh/antennapod/adapter/AllEpisodesRecycleAdapter.java
@@ -35,6 +35,7 @@ import de.danoeh.antennapod.core.preferences.UserPreferences;
import de.danoeh.antennapod.core.storage.DownloadRequester;
import de.danoeh.antennapod.core.util.Converter;
import de.danoeh.antennapod.core.util.DateUtils;
+import de.danoeh.antennapod.core.util.LongList;
import de.danoeh.antennapod.core.util.NetworkUtils;
import de.danoeh.antennapod.fragment.ItemFragment;
import de.danoeh.antennapod.menuhandler.FeedItemMenuHandler;
@@ -328,8 +329,8 @@ public class AllEpisodesRecycleAdapter extends RecyclerView.Adapter<AllEpisodesR
item1.setVisible(visible);
}
};
- FeedItemMenuHandler.onPrepareMenu(mainActivityRef.get(), contextMenuInterface, item, true,
- null);
+ FeedItemMenuHandler.onPrepareMenu(contextMenuInterface, item, true,
+ itemAccess.getQueueIds(), itemAccess.getFavoritesIds());
}
}
@@ -344,6 +345,10 @@ public class AllEpisodesRecycleAdapter extends RecyclerView.Adapter<AllEpisodesR
boolean isInQueue(FeedItem item);
+ LongList getQueueIds();
+
+ LongList getFavoritesIds();
+
}
/**
diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/QueueRecyclerAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/QueueRecyclerAdapter.java
index ca1f59e8d..d0266be6d 100644
--- a/app/src/main/java/de/danoeh/antennapod/adapter/QueueRecyclerAdapter.java
+++ b/app/src/main/java/de/danoeh/antennapod/adapter/QueueRecyclerAdapter.java
@@ -183,8 +183,8 @@ public class QueueRecyclerAdapter extends RecyclerView.Adapter<QueueRecyclerAdap
item1.setVisible(visible);
}
};
- FeedItemMenuHandler.onPrepareMenu(mainActivity.get(), contextMenuInterface, item, true,
- itemAccess.getQueueIds());
+ FeedItemMenuHandler.onPrepareMenu(contextMenuInterface, item, true,
+ itemAccess.getQueueIds(), itemAccess.getFavoritesIds());
}
@Override
@@ -351,6 +351,7 @@ public class QueueRecyclerAdapter extends RecyclerView.Adapter<QueueRecyclerAdap
long getItemDownloadSize(FeedItem item);
int getItemDownloadProgressPercent(FeedItem item);
LongList getQueueIds();
+ LongList getFavoritesIds();
}
/**
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 2bc4e9ded..273c75240 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java
@@ -46,6 +46,7 @@ import de.danoeh.antennapod.core.storage.DBWriter;
import de.danoeh.antennapod.core.storage.DownloadRequestException;
import de.danoeh.antennapod.core.storage.DownloadRequester;
import de.danoeh.antennapod.core.util.FeedItemUtil;
+import de.danoeh.antennapod.core.util.LongList;
import de.danoeh.antennapod.menuhandler.FeedItemMenuHandler;
import de.danoeh.antennapod.menuhandler.MenuItemUtils;
import de.greenrobot.event.EventBus;
@@ -382,6 +383,34 @@ public class AllEpisodesFragment extends Fragment {
}
return false;
}
+
+ @Override
+ public LongList getQueueIds() {
+ LongList queueIds = new LongList();
+ if(episodes == null) {
+ return queueIds;
+ }
+ for(FeedItem item : episodes) {
+ if(item.isTagged(FeedItem.TAG_QUEUE)) {
+ queueIds.add(item.getId());
+ }
+ }
+ return queueIds;
+ }
+
+ @Override
+ public LongList getFavoritesIds() {
+ LongList favoritesIds = new LongList();
+ if(episodes == null) {
+ return favoritesIds;
+ }
+ for(FeedItem item : episodes) {
+ if(item.isTagged(FeedItem.TAG_FAVORITE)) {
+ favoritesIds.add(item.getId());
+ }
+ }
+ return favoritesIds;
+ }
};
public void onEventMainThread(FeedItemEvent event) {
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 bbffd2dea..ce80dc827 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/ItemFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/ItemFragment.java
@@ -9,7 +9,6 @@ import android.os.Build;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
-import android.support.v4.util.Pair;
import android.text.TextUtils;
import android.util.Log;
import android.view.ContextMenu;
@@ -40,6 +39,7 @@ import de.danoeh.antennapod.activity.MainActivity;
import de.danoeh.antennapod.adapter.DefaultActionButtonCallback;
import de.danoeh.antennapod.core.event.DownloadEvent;
import de.danoeh.antennapod.core.event.DownloaderUpdate;
+import de.danoeh.antennapod.core.event.FavoritesEvent;
import de.danoeh.antennapod.core.event.FeedItemEvent;
import de.danoeh.antennapod.core.event.QueueEvent;
import de.danoeh.antennapod.core.feed.EventDistributor;
@@ -95,6 +95,7 @@ public class ItemFragment extends Fragment {
private long itemID;
private FeedItem item;
private LongList queue;
+ private LongList favorites;
private String webviewData;
private List<Downloader> downloaderList;
@@ -249,10 +250,10 @@ public class ItemFragment extends Fragment {
inflater.inflate(R.menu.feeditem_options, menu);
popupMenu = menu;
if (item.hasMedia()) {
- FeedItemMenuHandler.onPrepareMenu(getActivity(), popupMenuInterface, item, true, queue);
+ FeedItemMenuHandler.onPrepareMenu(popupMenuInterface, item, true, queue, favorites);
} else {
// these are already available via button1 and button2
- FeedItemMenuHandler.onPrepareMenu(getActivity(), popupMenuInterface, item, true, queue,
+ FeedItemMenuHandler.onPrepareMenu(popupMenuInterface, item, true, queue, favorites,
R.id.mark_read_item, R.id.visit_website_item);
}
}
@@ -457,6 +458,12 @@ public class ItemFragment extends Fragment {
}
}
+ public void onEventMainThread(FavoritesEvent event) {
+ if(event.item.getId() == itemID) {
+ load();
+ }
+ }
+
public void onEventMainThread(FeedItemEvent event) {
Log.d(TAG, "onEventMainThread() called with: " + "event = [" + event + "]");
for(FeedItem item : event.items) {
@@ -500,8 +507,9 @@ public class ItemFragment extends Fragment {
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(result -> {
- item = result.first;
- queue = result.second;
+ item = (FeedItem) result[0];
+ queue = (LongList) result[1];
+ favorites = (LongList) result[2];
if (!itemsLoaded) {
itemsLoaded = true;
onFragmentLoaded();
@@ -513,14 +521,25 @@ public class ItemFragment extends Fragment {
});
}
- private Pair<FeedItem,LongList> loadInBackground() {
- FeedItem data1 = DBReader.getFeedItem(itemID);
- if (data1 != null) {
- Timeline t = new Timeline(getActivity(), data1);
+ private Object[] loadInBackground() {
+ FeedItem feedItem = DBReader.getFeedItem(itemID);
+ if (feedItem != null) {
+ Timeline t = new Timeline(getActivity(), feedItem);
webviewData = t.processShownotes(false);
}
- LongList data2 = DBReader.getQueueIDList();
- return Pair.create(data1, data2);
+ LongList queue;
+ if(feedItem.isTagged(FeedItem.TAG_QUEUE)) {
+ queue = LongList.of(feedItem.getId());
+ } else {
+ queue = new LongList(0);
+ }
+ LongList favorites;
+ if(feedItem.isTagged(FeedItem.TAG_FAVORITE)) {
+ favorites = LongList.of(feedItem.getId());
+ } else {
+ favorites = new LongList(0);
+ }
+ return new Object[] { feedItem, queue, favorites };
}
}
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 97c446fab..7a9b73982 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java
@@ -10,7 +10,6 @@ import android.graphics.LightingColorFilter;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.app.ListFragment;
-import android.support.v4.util.Pair;
import android.support.v4.view.MenuItemCompat;
import android.support.v7.widget.SearchView;
import android.util.Log;
@@ -48,6 +47,7 @@ import de.danoeh.antennapod.core.dialog.ConfirmationDialog;
import de.danoeh.antennapod.core.dialog.DownloadRequestErrorDialogCreator;
import de.danoeh.antennapod.core.event.DownloadEvent;
import de.danoeh.antennapod.core.event.DownloaderUpdate;
+import de.danoeh.antennapod.core.event.FavoritesEvent;
import de.danoeh.antennapod.core.event.FeedItemEvent;
import de.danoeh.antennapod.core.event.QueueEvent;
import de.danoeh.antennapod.core.feed.EventDistributor;
@@ -99,6 +99,7 @@ public class ItemlistFragment extends ListFragment {
private long feedID;
private Feed feed;
private LongList queuedItemsIds;
+ private LongList favoritedItemsId;
private boolean itemsLoaded = false;
private boolean viewsCreated = false;
@@ -324,7 +325,8 @@ public class ItemlistFragment extends ListFragment {
contextMenu = menu;
lastMenuInfo = (AdapterView.AdapterContextMenuInfo) menuInfo;
- FeedItemMenuHandler.onPrepareMenu(getActivity(), contextMenuInterface, item, true, queuedItemsIds);
+ FeedItemMenuHandler.onPrepareMenu(contextMenuInterface, item, true, queuedItemsIds,
+ favoritedItemsId);
}
@Override
@@ -389,6 +391,11 @@ public class ItemlistFragment extends ListFragment {
loadItems();
}
+ public void onEvent(FavoritesEvent event) {
+ Log.d(TAG, "onEvent() called with: " + "event = [" + event + "]");
+ loadItems();
+ }
+
public void onEvent(FeedEvent event) {
Log.d(TAG, "onEvent() called with: " + "event = [" + event + "]");
if(event.feedId == feedID) {
@@ -626,8 +633,9 @@ public class ItemlistFragment extends ListFragment {
.observeOn(AndroidSchedulers.mainThread())
.subscribe(result -> {
if (result != null) {
- feed = result.first;
- queuedItemsIds = result.second;
+ feed = (Feed) result[0];
+ queuedItemsIds = (LongList) result[1];
+ favoritedItemsId = (LongList) result[2];
itemsLoaded = true;
if (viewsCreated) {
onFragmentLoaded();
@@ -638,14 +646,15 @@ public class ItemlistFragment extends ListFragment {
});
}
- private Pair<Feed, LongList> loadData() {
+ private Object[] loadData() {
Feed feed = DBReader.getFeed(feedID);
if(feed != null && feed.getItemFilter() != null) {
FeedItemFilter filter = feed.getItemFilter();
feed.setItems(filter.filter(feed.getItems()));
}
LongList queuedItemsIds = DBReader.getQueueIDList();
- return Pair.create(feed, queuedItemsIds);
+ LongList favoritedItemsId = DBReader.getFavoriteIDList();
+ return new Object[] { feed, queuedItemsIds, favoritedItemsId };
}
}
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 43f22a587..b3f6c3534 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java
@@ -568,6 +568,20 @@ public class QueueFragment extends Fragment {
public LongList getQueueIds() {
return queue != null ? LongList.of(FeedItemUtil.getIds(queue)) : new LongList(0);
}
+
+ @Override
+ public LongList getFavoritesIds() {
+ LongList favoritesIds = new LongList();
+ if(queue == null) {
+ return favoritesIds;
+ }
+ for(FeedItem item : queue) {
+ if(item.isTagged(FeedItem.TAG_FAVORITE)) {
+ favoritesIds.add(item.getId());
+ }
+ }
+ return favoritesIds;
+ }
};
private EventDistributor.EventListener contentUpdate = new EventDistributor.EventListener() {
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 0224d2c7e..58fe8afbf 100644
--- a/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java
+++ b/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java
@@ -57,16 +57,16 @@ public class FeedItemMenuHandler {
* @param queueAccess Used for testing if the queue contains the selected item
* @return Returns true if selectedItem is not null.
*/
- public static boolean onPrepareMenu(Context context, MenuInterface mi, FeedItem selectedItem,
- boolean showExtendedMenu, LongList queueAccess) {
+ public static boolean onPrepareMenu(MenuInterface mi,
+ FeedItem selectedItem,
+ boolean showExtendedMenu,
+ LongList queueAccess,
+ LongList favorites) {
if (selectedItem == null) {
return false;
}
boolean hasMedia = selectedItem.getMedia() != null;
- boolean isPlaying = hasMedia
- && selectedItem.getState() == FeedItem.State.PLAYING;
-
- FeedItem.State state = selectedItem.getState();
+ boolean isPlaying = hasMedia && selectedItem.getState() == FeedItem.State.PLAYING;
if (!isPlaying) {
mi.setItemVisibility(R.id.skip_episode_item, false);
@@ -126,7 +126,7 @@ public class FeedItemMenuHandler {
mi.setItemVisibility(R.id.support_item, false);
}
- boolean isFavorite = selectedItem.isTagged(FeedItem.TAG_FAVORITE);
+ boolean isFavorite = favorites != null && favorites.contains(selectedItem.getId());
mi.setItemVisibility(R.id.add_to_favorites_item, !isFavorite);
mi.setItemVisibility(R.id.remove_from_favorites_item, isFavorite);
@@ -140,9 +140,13 @@ public class FeedItemMenuHandler {
* @param excludeIds Menu item that should be excluded
* @return true if selectedItem is not null.
*/
- public static boolean onPrepareMenu(Context context, MenuInterface mi, FeedItem selectedItem,
- boolean showExtendedMenu, LongList queueAccess, int... excludeIds) {
- boolean rc = onPrepareMenu(context, mi, selectedItem, showExtendedMenu, queueAccess);
+ public static boolean onPrepareMenu(MenuInterface mi,
+ FeedItem selectedItem,
+ boolean showExtendedMenu,
+ LongList queueAccess,
+ LongList favorites,
+ int... excludeIds) {
+ boolean rc = onPrepareMenu(mi, selectedItem, showExtendedMenu, queueAccess, favorites);
if (rc && excludeIds != null) {
for (int id : excludeIds) {
mi.setItemVisibility(id, false);
diff --git a/app/src/main/res/menu/feeditemlist_context.xml b/app/src/main/res/menu/feeditemlist_context.xml
index 7b10e5cce..271cb96a7 100644
--- a/app/src/main/res/menu/feeditemlist_context.xml
+++ b/app/src/main/res/menu/feeditemlist_context.xml
@@ -26,6 +26,15 @@
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" />