diff options
Diffstat (limited to 'app/src/main')
7 files changed, 113 insertions, 8 deletions
diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/FeedItemlistAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/FeedItemlistAdapter.java index d56bfc587..74fd4d9c0 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/FeedItemlistAdapter.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/FeedItemlistAdapter.java @@ -7,9 +7,14 @@ import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; -import android.widget.*; +import android.widget.Adapter; +import android.widget.BaseAdapter; +import android.widget.ImageButton; +import android.widget.ImageView; +import android.widget.ProgressBar; +import android.widget.TextView; + import de.danoeh.antennapod.R; -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.MediaType; @@ -211,8 +216,8 @@ public class FeedItemlistAdapter extends BaseAdapter { notifyDataSetChanged(); } - public static interface ItemAccess { - public boolean isInQueue(FeedItem item); + public interface ItemAccess { + boolean isInQueue(FeedItem item); int getItemDownloadProgressPercent(FeedItem item); diff --git a/app/src/main/java/de/danoeh/antennapod/config/StorageCallbacksImpl.java b/app/src/main/java/de/danoeh/antennapod/config/StorageCallbacksImpl.java index de9be4d58..2c5bc9cff 100644 --- a/app/src/main/java/de/danoeh/antennapod/config/StorageCallbacksImpl.java +++ b/app/src/main/java/de/danoeh/antennapod/config/StorageCallbacksImpl.java @@ -133,6 +133,8 @@ public class StorageCallbacksImpl implements StorageCallbacks { + " FROM " + PodDBAdapter.TABLE_NAME_FEEDS + " WHERE " + PodDBAdapter.TABLE_NAME_FEEDS + "." + PodDBAdapter.KEY_ID + " = " + PodDBAdapter.TABLE_NAME_FEED_ITEMS + "." + PodDBAdapter.KEY_FEED + ")"); + db.execSQL("ALTER TABLE " + PodDBAdapter.TABLE_NAME_FEEDS + + " ADD COLUMN " + PodDBAdapter.KEY_HIDE + " TEXT"); } } } 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 f872284a4..b16de1959 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java @@ -24,6 +24,7 @@ import android.widget.ListAdapter; import android.widget.ListView; import android.widget.TextView; +import com.joanzapata.android.iconify.Iconify; import com.squareup.picasso.Picasso; import org.apache.commons.lang3.Validate; @@ -42,7 +43,9 @@ import de.danoeh.antennapod.core.dialog.ConfirmationDialog; import de.danoeh.antennapod.core.dialog.DownloadRequestErrorDialogCreator; import de.danoeh.antennapod.core.feed.EventDistributor; import de.danoeh.antennapod.core.feed.Feed; +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.service.download.DownloadService; @@ -55,7 +58,6 @@ import de.danoeh.antennapod.core.util.LongList; import de.danoeh.antennapod.core.util.gui.MoreContentListFooterUtil; import de.danoeh.antennapod.menuhandler.FeedMenuHandler; import de.danoeh.antennapod.menuhandler.MenuItemUtils; -import de.danoeh.antennapod.menuhandler.NavDrawerActivity; import de.greenrobot.event.EventBus; /** @@ -89,6 +91,8 @@ public class ItemlistFragment extends ListFragment { private boolean isUpdatingFeed; + private TextView txtvInformation; + /** * Creates new ItemlistFragment which shows the Feeditems of a specific * feed. Sets 'showFeedtitle' to false @@ -291,6 +295,13 @@ public class ItemlistFragment extends ListFragment { startItemLoader(); } + public void onEvent(FeedEvent event) { + Log.d(TAG, "onEvent(" + event + ")"); + if(event.feedId == feedID) { + startItemLoader(); + } + } + private EventDistributor.EventListener contentUpdate = new EventDistributor.EventListener() { @Override @@ -330,6 +341,7 @@ public class ItemlistFragment extends ListFragment { downloadObserver = new DownloadObserver(getActivity(), new Handler(), downloadObserverCallback); downloadObserver.onResume(); } + refreshHeaderView(); setListShown(true); adapter.notifyDataSetChanged(); @@ -343,6 +355,22 @@ public class ItemlistFragment extends ListFragment { } + private void refreshHeaderView() { + if(feed.getItemFilter() != null) { + FeedItemFilter filter = feed.getItemFilter(); + if(filter.getValues().length > 0) { + txtvInformation.setText("{fa-info-circle} " + this.getString(R.string.filtered_label)); + Iconify.addIcons(txtvInformation); + txtvInformation.setVisibility(View.VISIBLE); + } else { + txtvInformation.setVisibility(View.GONE); + } + } else { + txtvInformation.setVisibility(View.GONE); + } + } + + private DownloadObserver.Callback downloadObserverCallback = new DownloadObserver.Callback() { @Override public void onContentChanged() { @@ -376,6 +404,7 @@ public class ItemlistFragment extends ListFragment { ImageView imgvBackground = (ImageView) header.findViewById(R.id.imgvBackground); ImageView imgvCover = (ImageView) header.findViewById(R.id.imgvCover); ImageButton butShowInfo = (ImageButton) header.findViewById(R.id.butShowInfo); + txtvInformation = (TextView) header.findViewById(R.id.txtvInformation); txtvTitle.setText(feed.getTitle()); txtvAuthor.setText(feed.getAuthor()); @@ -488,6 +517,10 @@ public class ItemlistFragment extends ListFragment { Context context = getActivity(); if (context != null) { Feed feed = DBReader.getFeed(context, feedID); + if(feed.getItemFilter() != null) { + FeedItemFilter filter = feed.getItemFilter(); + feed.setItems(filter.filter(context, feed.getItems())); + } LongList queue = DBReader.getQueueIDList(context); return Pair.create(feed, queue); } else { 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 ebb0a9e58..2b1770ee1 100644 --- a/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java +++ b/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java @@ -23,10 +23,10 @@ import de.danoeh.antennapod.core.util.ShareUtils; * Handles interactions with the FeedItemMenu. */ public class FeedItemMenuHandler { + private static final String TAG = "FeedItemMenuHandler"; private FeedItemMenuHandler() { - } /** diff --git a/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedMenuHandler.java b/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedMenuHandler.java index efb4adb01..6947c73c9 100644 --- a/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedMenuHandler.java +++ b/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedMenuHandler.java @@ -1,5 +1,6 @@ package de.danoeh.antennapod.menuhandler; +import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; @@ -9,6 +10,10 @@ import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + import de.danoeh.antennapod.R; import de.danoeh.antennapod.core.BuildConfig; import de.danoeh.antennapod.core.dialog.ConfirmationDialog; @@ -62,6 +67,9 @@ public class FeedMenuHandler { case R.id.refresh_complete_item: DBTasks.refreshCompleteFeed(context, selectedFeed); break; + case R.id.hide_items: + showHideDialog(context, selectedFeed); + break; case R.id.mark_all_read_item: ConfirmationDialog conDialog = new ConfirmationDialog(context, R.string.mark_all_read_label, @@ -94,4 +102,43 @@ public class FeedMenuHandler { } return true; } + + private static void showHideDialog(final Context context, final Feed feed) { + + final String[] items = context.getResources().getStringArray(R.array.episode_hide_options); + final String[] values = context.getResources().getStringArray(R.array.episode_hide_values); + final boolean[] checkedItems = new boolean[items.length]; + + final List<String> hidden = new ArrayList<String>(Arrays.asList(feed.getItemFilter().getValues())); + for(int i=0; i < values.length; i++) { + String value = values[i]; + if(hidden.contains(value)) { + checkedItems[i] = true; + } + } + + AlertDialog.Builder builder = new AlertDialog.Builder(context); + builder.setTitle(R.string.hide_episodes_title); + builder.setMultiChoiceItems(items, checkedItems, new DialogInterface.OnMultiChoiceClickListener() { + @Override + public void onClick(DialogInterface dialog, int which, boolean isChecked) { + if (isChecked) { + hidden.add(values[which]); + } else { + hidden.remove(values[which]); + } + } + }); + builder.setPositiveButton(R.string.confirm_label, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + feed.setFeedItemsFilter(hidden.toArray(new String[hidden.size()])); + DBWriter.setFeedItemsFilter(context, feed.getId(), hidden); + } + }); + builder.setNegativeButton(R.string.cancel_label, null); + builder.create().show(); + + } + } diff --git a/app/src/main/res/layout/feeditemlist_header.xml b/app/src/main/res/layout/feeditemlist_header.xml index 4619580e3..943f4fc92 100644 --- a/app/src/main/res/layout/feeditemlist_header.xml +++ b/app/src/main/res/layout/feeditemlist_header.xml @@ -3,7 +3,7 @@ <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" - android:layout_height="@dimen/feeditemlist_header_height" + android:layout_height="wrap_content" tools:context="de.danoeh.antennapod.activity.MainActivity" tools:background="@android:color/darker_gray"> @@ -11,7 +11,7 @@ android:id="@+id/imgvBackground" style="@style/BigBlurryBackground" android:layout_width="match_parent" - android:layout_height="match_parent" /> + android:layout_height="@dimen/feeditemlist_header_height" /> <ImageView android:id="@+id/imgvCover" @@ -78,5 +78,16 @@ tools:text="Podcast author" tools:background="@android:color/holo_green_dark" /> + <TextView + android:id="@+id/txtvInformation" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_below="@id/imgvBackground" + android:paddingTop="2dp" + android:paddingBottom="2dp" + android:gravity="center" + android:visibility="gone" + tools:text="(i) Information" + /> </RelativeLayout>
\ No newline at end of file diff --git a/app/src/main/res/menu/feedlist.xml b/app/src/main/res/menu/feedlist.xml index b6512e828..00785a29b 100644 --- a/app/src/main/res/menu/feedlist.xml +++ b/app/src/main/res/menu/feedlist.xml @@ -3,6 +3,13 @@ xmlns:custom="http://schemas.android.com/apk/res-auto"> <item + android:id="@+id/hide_items" + android:icon="?attr/ic_filter" + android:menuCategory="container" + android:title="@string/hide_episodes_title" + custom:showAsAction="always"> + </item> + <item android:id="@+id/refresh_item" android:icon="?attr/navigation_refresh" android:menuCategory="container" |