diff options
Diffstat (limited to 'app/src/main/java/de/danoeh/antennapod/fragment/SubscriptionFragment.java')
-rw-r--r-- | app/src/main/java/de/danoeh/antennapod/fragment/SubscriptionFragment.java | 86 |
1 files changed, 49 insertions, 37 deletions
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/SubscriptionFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/SubscriptionFragment.java index 9bbc03fba..58cfece14 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/SubscriptionFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/SubscriptionFragment.java @@ -28,6 +28,7 @@ import android.widget.TextView; import com.google.android.material.floatingactionbutton.FloatingActionButton; import com.joanzapata.iconify.Iconify; +import java.util.List; import java.util.Locale; import java.util.concurrent.Callable; @@ -44,6 +45,7 @@ import de.danoeh.antennapod.core.service.download.DownloadService; import de.danoeh.antennapod.core.storage.DBReader; import de.danoeh.antennapod.core.storage.DBWriter; import de.danoeh.antennapod.core.storage.DownloadRequester; +import de.danoeh.antennapod.core.storage.NavDrawerData; import de.danoeh.antennapod.core.util.download.AutoUpdateManager; import de.danoeh.antennapod.dialog.RemoveFeedDialog; import de.danoeh.antennapod.dialog.SubscriptionsFilterDialog; @@ -68,6 +70,7 @@ public class SubscriptionFragment extends Fragment implements Toolbar.OnMenuItem private static final String PREFS = "SubscriptionFragment"; private static final String PREF_NUM_COLUMNS = "columns"; private static final String KEY_UP_ARROW = "up_arrow"; + private static final String ARGUMENT_FOLDER = "folder"; private static final int MIN_NUM_COLUMNS = 2; private static final int[] COLUMN_CHECKBOX_IDS = { @@ -77,21 +80,30 @@ public class SubscriptionFragment extends Fragment implements Toolbar.OnMenuItem R.id.subscription_num_columns_5}; private GridView subscriptionGridLayout; - private DBReader.NavDrawerData navDrawerData; + private List<NavDrawerData.DrawerItem> listItems; private SubscriptionsAdapter subscriptionAdapter; private FloatingActionButton subscriptionAddButton; private ProgressBar progressBar; private EmptyViewHandler emptyView; private TextView feedsFilteredMsg; private Toolbar toolbar; + private String displayedFolder = null; - private int mPosition = -1; + private Feed selectedFeed = null; private boolean isUpdatingFeeds = false; private boolean displayUpArrow; private Disposable disposable; private SharedPreferences prefs; + public static SubscriptionFragment newInstance(String folderTitle) { + SubscriptionFragment fragment = new SubscriptionFragment(); + Bundle args = new Bundle(); + args.putString(ARGUMENT_FOLDER, folderTitle); + fragment.setArguments(args); + return fragment; + } + @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -119,6 +131,13 @@ public class SubscriptionFragment extends Fragment implements Toolbar.OnMenuItem } refreshToolbarState(); + if (getArguments() != null) { + displayedFolder = getArguments().getString(ARGUMENT_FOLDER, null); + if (displayedFolder != null) { + toolbar.setTitle(displayedFolder); + } + } + subscriptionGridLayout = root.findViewById(R.id.subscriptions_grid); subscriptionGridLayout.setNumColumns(prefs.getInt(PREF_NUM_COLUMNS, getDefaultNumOfColumns())); registerForContextMenu(subscriptionGridLayout); @@ -231,12 +250,23 @@ public class SubscriptionFragment extends Fragment implements Toolbar.OnMenuItem disposable.dispose(); } emptyView.hide(); - disposable = Observable.fromCallable(DBReader::getNavDrawerData) + disposable = Observable.fromCallable( + () -> { + NavDrawerData data = DBReader.getNavDrawerData(); + List<NavDrawerData.DrawerItem> items = data.items; + for (NavDrawerData.DrawerItem item : items) { + if (item.type == NavDrawerData.DrawerItem.Type.FOLDER + && item.getTitle().equals(displayedFolder)) { + return ((NavDrawerData.FolderDrawerItem) item).children; + } + } + return items; + }) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe( result -> { - navDrawerData = result; + listItems = result; subscriptionAdapter.notifyDataSetChanged(); emptyView.updateVisibility(); progressBar.setVisibility(View.GONE); // Keep hidden to avoid flickering while refreshing @@ -264,37 +294,24 @@ public class SubscriptionFragment extends Fragment implements Toolbar.OnMenuItem AdapterView.AdapterContextMenuInfo adapterInfo = (AdapterView.AdapterContextMenuInfo) menuInfo; int position = adapterInfo.position; - Object selectedObject = subscriptionAdapter.getItem(position); - if (selectedObject.equals(SubscriptionsAdapter.ADD_ITEM_OBJ)) { - mPosition = position; - return; - } - - Feed feed = (Feed) selectedObject; - - MenuInflater inflater = requireActivity().getMenuInflater(); - inflater.inflate(R.menu.nav_feed_context, menu); + NavDrawerData.DrawerItem selectedObject = (NavDrawerData.DrawerItem) subscriptionAdapter.getItem(position); - menu.setHeaderTitle(feed.getTitle()); - - mPosition = position; + if (selectedObject.type == NavDrawerData.DrawerItem.Type.FEED) { + MenuInflater inflater = requireActivity().getMenuInflater(); + inflater.inflate(R.menu.nav_feed_context, menu); + selectedFeed = ((NavDrawerData.FeedDrawerItem) selectedObject).feed; + } + menu.setHeaderTitle(selectedObject.getTitle()); } @Override public boolean onContextItemSelected(MenuItem item) { - final int position = mPosition; - mPosition = -1; // reset - if (position < 0) { - return false; - } - - Object selectedObject = subscriptionAdapter.getItem(position); - if (selectedObject.equals(SubscriptionsAdapter.ADD_ITEM_OBJ)) { - // this is the add object, do nothing + if (selectedFeed == null) { return false; } - Feed feed = (Feed) selectedObject; + Feed feed = selectedFeed; + selectedFeed = null; switch (item.getItemId()) { case R.id.remove_all_new_flags_item: displayConfirmationDialog( @@ -359,25 +376,20 @@ public class SubscriptionFragment extends Fragment implements Toolbar.OnMenuItem private final SubscriptionsAdapter.ItemAccess itemAccess = new SubscriptionsAdapter.ItemAccess() { @Override public int getCount() { - if (navDrawerData != null) { - return navDrawerData.feeds.size(); + if (listItems != null) { + return listItems.size(); } else { return 0; } } @Override - public Feed getItem(int position) { - if (navDrawerData != null && 0 <= position && position < navDrawerData.feeds.size()) { - return navDrawerData.feeds.get(position); + public NavDrawerData.DrawerItem getItem(int position) { + if (listItems != null && 0 <= position && position < listItems.size()) { + return listItems.get(position); } else { return null; } } - - @Override - public int getFeedCounter(long feedId) { - return navDrawerData != null ? navDrawerData.feedCounters.get(feedId) : 0; - } }; } |