From 2f0a4aed12d8e1e18e22dabf358a4a27ae99247c Mon Sep 17 00:00:00 2001 From: Scott Jackson Date: Fri, 30 Oct 2015 17:37:42 -0700 Subject: #590 Add toggle for showing more recent podcast episodes --- .../dsub/adapter/PodcastChannelAdapter.java | 70 ++++++++++++++++++++-- .../dsub/fragments/SelectDirectoryFragment.java | 4 +- .../dsub/fragments/SelectPodcastsFragment.java | 18 ++++-- app/src/main/res/values/attrs.xml | 1 + app/src/main/res/values/themes.xml | 2 + 5 files changed, 81 insertions(+), 14 deletions(-) (limited to 'app/src/main') diff --git a/app/src/main/java/github/daneren2005/dsub/adapter/PodcastChannelAdapter.java b/app/src/main/java/github/daneren2005/dsub/adapter/PodcastChannelAdapter.java index 875a4800..d9290f49 100644 --- a/app/src/main/java/github/daneren2005/dsub/adapter/PodcastChannelAdapter.java +++ b/app/src/main/java/github/daneren2005/dsub/adapter/PodcastChannelAdapter.java @@ -17,12 +17,14 @@ package github.daneren2005.dsub.adapter; import android.content.Context; import android.view.Menu; import android.view.MenuInflater; +import android.view.View; import android.view.ViewGroup; +import android.widget.ImageView; import github.daneren2005.dsub.R; -import github.daneren2005.dsub.domain.MusicDirectory; import github.daneren2005.dsub.domain.PodcastChannel; import github.daneren2005.dsub.domain.PodcastEpisode; +import github.daneren2005.dsub.util.DrawableTint; import github.daneren2005.dsub.util.ImageLoader; import github.daneren2005.dsub.util.Util; import github.daneren2005.dsub.view.BasicHeaderView; @@ -35,13 +37,18 @@ import java.io.Serializable; import java.util.List; public class PodcastChannelAdapter extends SectionAdapter implements FastScroller.BubbleTextGetter { - public static int VIEW_TYPE_PODCAST_LEGACY = 1; - public static int VIEW_TYPE_PODCAST_LINE = 2; - public static int VIEW_TYPE_PODCAST_CELL = 3; - public static int VIEW_TYPE_PODCAST_EPISODE = 4; + public static final int VIEW_TYPE_PODCAST_LEGACY = 1; + public static final int VIEW_TYPE_PODCAST_LINE = 2; + public static final int VIEW_TYPE_PODCAST_CELL = 3; + public static final int VIEW_TYPE_PODCAST_EPISODE = 4; + + public static final String EPISODE_HEADER = "episodes"; + public static final String CHANNEL_HEADER = "channels"; private ImageLoader imageLoader; private boolean largeCell; + private int selectToggleAttr = R.attr.select_server; + private List extraEpisodes; public PodcastChannelAdapter(Context context, List podcasts, ImageLoader imageLoader, OnItemClickedListener listener, boolean largeCell) { super(context, podcasts); @@ -49,8 +56,9 @@ public class PodcastChannelAdapter extends SectionAdapter implemen this.onItemClickedListener = listener; this.largeCell = largeCell; } - public PodcastChannelAdapter(Context context, List headers, List> sections, ImageLoader imageLoader, OnItemClickedListener listener, boolean largeCell) { + public PodcastChannelAdapter(Context context, List headers, List> sections, List extraEpisodes, ImageLoader imageLoader, OnItemClickedListener listener, boolean largeCell) { super(context, headers, sections); + this.extraEpisodes = extraEpisodes; this.imageLoader = imageLoader; this.onItemClickedListener = listener; this.largeCell = largeCell; @@ -118,4 +126,54 @@ public class PodcastChannelAdapter extends SectionAdapter implemen menu.removeItem(R.id.menu_remove_playlist); menu.removeItem(R.id.menu_unstar); } + + @Override + public UpdateView.UpdateViewHolder onCreateHeaderHolder(ViewGroup parent) { + return new UpdateView.UpdateViewHolder(new BasicHeaderView(context, R.layout.newest_episode_header)); + } + + @Override + public void onBindHeaderHolder(UpdateView.UpdateViewHolder holder, String header) { + UpdateView view = holder.getUpdateView(); + ImageView toggleSelectionView = (ImageView) view.findViewById(R.id.item_select); + + String display; + if(EPISODE_HEADER.equals(header)) { + display = context.getResources().getString(R.string.main_albums_newest); + + if(extraEpisodes != null && !extraEpisodes.isEmpty()) { + toggleSelectionView.setVisibility(View.VISIBLE); + toggleSelectionView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + // Update icon + if (selectToggleAttr == R.attr.select_server) { + selectToggleAttr = R.attr.select_tabs; + + // Update how many are displayed + sections.get(0).addAll(extraEpisodes); + notifyItemRangeInserted(4, extraEpisodes.size()); + } else { + selectToggleAttr = R.attr.select_server; + + // Update how many are displayed + sections.get(0).removeAll(extraEpisodes); + notifyItemRangeRemoved(4, extraEpisodes.size()); + } + + ((ImageView) v).setImageResource(DrawableTint.getDrawableRes(context, selectToggleAttr)); + + } + }); + toggleSelectionView.setImageResource(DrawableTint.getDrawableRes(context, selectToggleAttr)); + } + } else { + display = context.getResources().getString(R.string.select_podcasts_channels); + toggleSelectionView.setVisibility(View.GONE); + } + + if(view != null) { + view.setObject(display); + } + } } diff --git a/app/src/main/java/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java b/app/src/main/java/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java index 83e3e7e7..98467a2c 100644 --- a/app/src/main/java/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java +++ b/app/src/main/java/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java @@ -763,9 +763,7 @@ public class SelectDirectoryFragment extends SubsonicFragment implements Section } recyclerView.setAdapter(entryGridAdapter); - if(entryGridAdapter instanceof FastScroller.BubbleTextGetter) { - fastScroller.attachRecyclerView(recyclerView); - } + fastScroller.attachRecyclerView(recyclerView); context.supportInvalidateOptionsMenu(); if(scrollToPosition != -1) { diff --git a/app/src/main/java/github/daneren2005/dsub/fragments/SelectPodcastsFragment.java b/app/src/main/java/github/daneren2005/dsub/fragments/SelectPodcastsFragment.java index b77d6746..d605cecd 100644 --- a/app/src/main/java/github/daneren2005/dsub/fragments/SelectPodcastsFragment.java +++ b/app/src/main/java/github/daneren2005/dsub/fragments/SelectPodcastsFragment.java @@ -141,17 +141,25 @@ public class SelectPodcastsFragment extends SelectRecyclerFragment if(newestEpisodes == null || newestEpisodes.getChildrenSize() == 0) { return new PodcastChannelAdapter(context, channels, hasCoverArt ? getImageLoader() : null, this, largeAlbums); } else { - Resources res = context.getResources(); - List headers = Arrays.asList(res.getString(R.string.main_albums_newest), res.getString(R.string.select_podcasts_channels)); + List headers = Arrays.asList(PodcastChannelAdapter.EPISODE_HEADER, PodcastChannelAdapter.CHANNEL_HEADER); + List episodes = newestEpisodes.getChildren(); List serializableEpisodes = new ArrayList<>(); - serializableEpisodes.addAll(newestEpisodes.getChildren()); + + // Put 3 in current list + while(serializableEpisodes.size() < 3) { + serializableEpisodes.add(episodes.remove(0)); + } + + // Put rest in extra set + List extraEpisodes = new ArrayList<>(); + extraEpisodes.addAll(episodes); List> sections = new ArrayList<>(); sections.add(serializableEpisodes); sections.add(channels); - return new PodcastChannelAdapter(context, headers, sections, ServerInfo.checkServerVersion(context, "1.13") ? getImageLoader() : null, this, largeAlbums); + return new PodcastChannelAdapter(context, headers, sections, extraEpisodes, ServerInfo.checkServerVersion(context, "1.13") ? getImageLoader() : null, this, largeAlbums); } } @@ -161,7 +169,7 @@ public class SelectPodcastsFragment extends SelectRecyclerFragment if(!Util.isOffline(context) && ServerInfo.hasNewestPodcastEpisodes(context)) { try { - newestEpisodes = musicService.getNewestPodcastEpisodes(3, context, listener); + newestEpisodes = musicService.getNewestPodcastEpisodes(10, context, listener); } catch (Exception e) { Log.e(TAG, "Failed to download newest episodes", e); newestEpisodes = null; diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml index e14370e2..c4f80478 100644 --- a/app/src/main/res/values/attrs.xml +++ b/app/src/main/res/values/attrs.xml @@ -26,6 +26,7 @@ + diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index 4ed67e27..6321852f 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -27,6 +27,7 @@ @drawable/ic_action_volume_light @drawable/action_toggle_list_light @drawable/main_select_server_light + @drawable/main_select_tabs_light @drawable/playing_light @drawable/downloading_light @drawable/ic_menu_bookmark_light @@ -89,6 +90,7 @@ @drawable/ic_action_volume_dark @drawable/action_toggle_list_dark @drawable/main_select_server_dark + @drawable/main_select_tabs_dark @drawable/playing_dark @drawable/downloading_dark @drawable/ic_menu_bookmark_dark -- cgit v1.2.3