summaryrefslogtreecommitdiff
path: root/app/src/main
diff options
context:
space:
mode:
authorTom Hennen <tom.hennen@gmail.com>2015-09-19 14:40:01 -0400
committerTom Hennen <tom.hennen@gmail.com>2015-09-20 14:21:15 -0400
commit1993f779e8b25507a4096effd72618937c2f4ad0 (patch)
tree53b14b25a51af25844bde6eacc91af87ae4e0eb7 /app/src/main
parenta89edfcad4f69a7f8ddbce62ca33d4ba80d4a9ad (diff)
downloadAntennaPod-1993f779e8b25507a4096effd72618937c2f4ad0.zip
basic favorite functionality
Diffstat (limited to 'app/src/main')
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java28
-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.java130
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/NewEpisodesFragment.java28
-rw-r--r--app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java6
-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
9 files changed, 207 insertions, 19 deletions
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..b2932ddb7 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java
@@ -64,7 +64,8 @@ public class AllEpisodesFragment extends Fragment {
EventDistributor.FEED_LIST_UPDATE |
EventDistributor.DOWNLOAD_QUEUED |
EventDistributor.UNREAD_ITEMS_UPDATE |
- EventDistributor.PLAYER_STATUS_UPDATE;
+ EventDistributor.PLAYER_STATUS_UPDATE |
+ EventDistributor.FAVORITE_UPDATE;
private static final int RECENT_EPISODES_LIMIT = 150;
private static final String DEFAULT_PREF_NAME = "PrefAllEpisodesFragment";
@@ -87,7 +88,7 @@ public class AllEpisodesFragment extends Fragment {
private boolean viewsCreated = false;
private final boolean showOnlyNewEpisodes;
- private AtomicReference<MainActivity> activity = new AtomicReference<MainActivity>();
+ protected AtomicReference<MainActivity> mainActivity = new AtomicReference<MainActivity>();
private DownloadObserver downloadObserver = null;
@@ -125,7 +126,7 @@ public class AllEpisodesFragment extends Fragment {
public void onStart() {
super.onStart();
EventDistributor.getInstance().register(contentUpdate);
- this.activity.set((MainActivity) getActivity());
+ this.mainActivity.set((MainActivity) getActivity());
if (downloadObserver != null) {
downloadObserver.setActivity(getActivity());
downloadObserver.onResume();
@@ -153,7 +154,7 @@ public class AllEpisodesFragment extends Fragment {
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
- this.activity.set((MainActivity) getActivity());
+ this.mainActivity.set((MainActivity) getActivity());
}
@Override
@@ -188,7 +189,7 @@ public class AllEpisodesFragment extends Fragment {
protected void resetViewState() {
listAdapter = null;
- activity.set(null);
+ mainActivity.set(null);
viewsCreated = false;
if (downloadObserver != null) {
downloadObserver.onPause();
@@ -313,7 +314,7 @@ public class AllEpisodesFragment extends Fragment {
viewsCreated = true;
- if (itemsLoaded && activity.get() != null) {
+ if (itemsLoaded && mainActivity.get() != null) {
onFragmentLoaded();
}
@@ -375,11 +376,11 @@ public class AllEpisodesFragment extends Fragment {
private void onFragmentLoaded() {
if (listAdapter == null) {
- listAdapter = new AllEpisodesListAdapter(activity.get(), itemAccess,
- new DefaultActionButtonCallback(activity.get()), showOnlyNewEpisodes);
+ listAdapter = new AllEpisodesListAdapter(mainActivity.get(), itemAccess,
+ new DefaultActionButtonCallback(mainActivity.get()), showOnlyNewEpisodes);
listView.setAdapter(listAdapter);
listView.setEmptyView(txtvEmpty);
- downloadObserver = new DownloadObserver(activity.get(), new Handler(), downloadObserverCallback);
+ downloadObserver = new DownloadObserver(mainActivity.get(), new Handler(), downloadObserverCallback);
downloadObserver.onResume();
}
listAdapter.notifyDataSetChanged();
@@ -452,12 +453,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() {
@@ -479,7 +475,7 @@ public class AllEpisodesFragment extends Fragment {
episodes = data.first;
queuedItemsIds = data.second;
itemsLoaded = true;
- if (viewsCreated && activity.get() != null) {
+ if (viewsCreated && mainActivity.get() != null) {
onFragmentLoaded();
}
}
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..aff1e575a
--- /dev/null
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/FavoriteEpisodesFragment.java
@@ -0,0 +1,130 @@
+package de.danoeh.antennapod.fragment;
+
+import android.content.Context;
+import android.os.AsyncTask;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import com.mobeta.android.dslv.DragSortListView;
+
+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.storage.DBReader;
+import de.danoeh.antennapod.core.storage.DBWriter;
+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(QueueEvent event) {
+ Log.d(TAG, "onEvent(" + event + ")");
+ startItemLoader();
+ }
+
+ @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 + ")");
+ stopItemLoader();
+ FeedItem item = (FeedItem) listView.getAdapter().getItem(which);
+
+ // TODO: actually remove the item from favorites
+
+ undoBarController.showUndoBar(false,
+ getString(R.string.removed_from_favorites), new FeedItemUndoToken(item,
+ which)
+ );
+
+ throw new RuntimeException("can't remove yet");
+ });
+
+ 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();
+ // TODO: put it back DBWriter.markItemPlayed(FeedItem.NEW, itemId);
+ throw new RuntimeException("can't undo remove yet");
+ }
+ }
+
+ @Override
+ public void onHide(FeedItemUndoToken token) {
+ // nothing to do
+ }
+ });
+ return root;
+ }
+
+ @Override
+ protected void startItemLoader() {
+ if (itemLoader != null) {
+ itemLoader.cancel(true);
+ }
+ itemLoader = new FavItemLoader();
+ itemLoader.execute();
+ }
+
+ private class FavItemLoader extends AllEpisodesFragment.ItemLoader {
+
+ @Override
+ protected Object[] doInBackground(Void... params) {
+ Context context = mainActivity.get();
+ if (context != null) {
+ return new Object[]{
+ DBReader.getFavoriteItemsList(),
+ DBReader.getQueueIDList()
+ };
+ } else {
+ return null;
+ }
+ }
+ }
+
+}
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..41630f6d9 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/NewEpisodesFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/NewEpisodesFragment.java
@@ -63,7 +63,7 @@ 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
@@ -109,4 +109,30 @@ public class NewEpisodesFragment extends AllEpisodesFragment {
return root;
}
+ @Override
+ protected void startItemLoader() {
+ if (itemLoader != null) {
+ itemLoader.cancel(true);
+ }
+ itemLoader = new NewItemLoader();
+ itemLoader.execute();
+ }
+
+ private class NewItemLoader extends AllEpisodesFragment.ItemLoader {
+
+ @Override
+ protected Object[] doInBackground(Void... params) {
+ Context context = mainActivity.get();
+ if (context != null) {
+ return new Object[] {
+ DBReader.getNewItemsList(),
+ DBReader.getQueueIDList(),
+ null // see ItemAccess.isNew
+ };
+ } else {
+ return null;
+ }
+ }
+ }
+
}
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..ede40c53f 100644
--- a/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java
+++ b/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java
@@ -193,6 +193,12 @@ public class FeedItemMenuHandler {
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" />