diff options
author | H. Lehmann <ByteHamster@users.noreply.github.com> | 2020-03-17 15:41:24 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-03-17 15:41:24 +0100 |
commit | 54056dd8d95fe88d1a582c55e066778ce25eff50 (patch) | |
tree | 17eddd45c779ccb01c34e43dab06d0bd046e949d /app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java | |
parent | 4e0e4baa056509536f34078bf15031d8c0c97053 (diff) | |
parent | 6066fef1f2a3f3b8d5c5d946c750d356429e75a8 (diff) | |
download | AntennaPod-54056dd8d95fe88d1a582c55e066778ce25eff50.zip |
Merge pull request #3937 from ByteHamster/recyclerview
Converted lists to RecyclerView
Diffstat (limited to 'app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java')
-rw-r--r-- | app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java | 138 |
1 files changed, 87 insertions, 51 deletions
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java index f9bc6642e..36cda5c84 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java @@ -9,26 +9,31 @@ import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; -import android.widget.AdapterView; -import android.widget.ListView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.Toolbar; import androidx.core.view.MenuItemCompat; import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import com.yqritc.recyclerviewflexibledivider.HorizontalDividerItemDecoration; import de.danoeh.antennapod.R; import de.danoeh.antennapod.activity.MainActivity; -import de.danoeh.antennapod.adapter.FeedItemlistAdapter; +import de.danoeh.antennapod.adapter.EpisodeItemListAdapter; import de.danoeh.antennapod.core.event.DownloadEvent; +import de.danoeh.antennapod.core.event.DownloaderUpdate; import de.danoeh.antennapod.core.event.FeedItemEvent; import de.danoeh.antennapod.core.event.PlaybackHistoryEvent; +import de.danoeh.antennapod.core.event.PlaybackPositionEvent; import de.danoeh.antennapod.core.event.PlayerStatusEvent; import de.danoeh.antennapod.core.feed.FeedItem; import de.danoeh.antennapod.core.storage.DBReader; import de.danoeh.antennapod.core.storage.DBWriter; import de.danoeh.antennapod.core.util.FeedItemUtil; +import de.danoeh.antennapod.menuhandler.FeedItemMenuHandler; import de.danoeh.antennapod.view.EmptyViewHandler; +import de.danoeh.antennapod.view.viewholder.EpisodeItemViewHolder; import io.reactivex.Observable; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.Disposable; @@ -39,13 +44,13 @@ import org.greenrobot.eventbus.ThreadMode; import java.util.List; -public class PlaybackHistoryFragment extends Fragment implements AdapterView.OnItemClickListener { +public class PlaybackHistoryFragment extends Fragment { public static final String TAG = "PlaybackHistoryFragment"; private List<FeedItem> playbackHistory; - private FeedItemlistAdapter adapter; + private PlaybackHistoryListAdapter adapter; private Disposable disposable; - private ListView listView; + private RecyclerView recyclerView; @Override public void onCreate(Bundle savedInstanceState) { @@ -62,18 +67,20 @@ public class PlaybackHistoryFragment extends Fragment implements AdapterView.OnI toolbar.setTitle(R.string.playback_history_label); ((AppCompatActivity) getActivity()).setSupportActionBar(toolbar); - listView = root.findViewById(android.R.id.list); + recyclerView = root.findViewById(R.id.recyclerView); + LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity()); + recyclerView.setLayoutManager(layoutManager); + recyclerView.setHasFixedSize(true); + recyclerView.addItemDecoration(new HorizontalDividerItemDecoration.Builder(getActivity()).build()); + recyclerView.setVisibility(View.GONE); + adapter = new PlaybackHistoryListAdapter((MainActivity) getActivity()); + recyclerView.setAdapter(adapter); + EmptyViewHandler emptyView = new EmptyViewHandler(getActivity()); emptyView.setIcon(R.attr.ic_history); emptyView.setTitle(R.string.no_history_head_label); emptyView.setMessage(R.string.no_history_label); - emptyView.attachToListView(listView); - - // played items shoudln't be transparent for this fragment since, *all* items - // in this fragment will, by definition, be played. So it serves no purpose and can make - // it harder to read. - adapter = new FeedItemlistAdapter((MainActivity) getActivity(), itemAccess, true, false); - listView.setAdapter(adapter); + emptyView.attachToRecyclerView(recyclerView); return root; } @@ -93,17 +100,51 @@ public class PlaybackHistoryFragment extends Fragment implements AdapterView.OnI } } + @Subscribe(threadMode = ThreadMode.MAIN) + public void onEventMainThread(FeedItemEvent event) { + Log.d(TAG, "onEventMainThread() called with: " + "event = [" + event + "]"); + if (playbackHistory == null) { + return; + } else if (adapter == null) { + loadItems(); + return; + } + for (int i = 0, size = event.items.size(); i < size; i++) { + FeedItem item = event.items.get(i); + int pos = FeedItemUtil.indexOfItemWithId(playbackHistory, item.getId()); + if (pos >= 0) { + playbackHistory.remove(pos); + playbackHistory.add(pos, item); + adapter.notifyItemChanged(pos); + } + } + } + @Subscribe(sticky = true, threadMode = ThreadMode.MAIN) - public void onEvent(DownloadEvent event) { - Log.d(TAG, "onEvent() called with: " + "event = [" + event + "]"); - adapter.notifyDataSetChanged(); + public void onEventMainThread(DownloadEvent event) { + Log.d(TAG, "onEventMainThread() called with: " + "event = [" + event + "]"); + DownloaderUpdate update = event.update; + if (adapter != null && update.mediaIds.length > 0) { + for (long mediaId : update.mediaIds) { + int pos = FeedItemUtil.indexOfItemWithMediaId(playbackHistory, mediaId); + if (pos >= 0) { + adapter.notifyItemChanged(pos); + } + } + } } - @Override - public void onItemClick(AdapterView<?> parent, View view, int position, long id) { - position -= listView.getHeaderViewsCount(); - long[] ids = FeedItemUtil.getIds(playbackHistory); - ((MainActivity) getActivity()).loadChildFragment(ItemPagerFragment.newInstance(ids, position)); + @Subscribe(threadMode = ThreadMode.MAIN) + public void onEventMainThread(PlaybackPositionEvent event) { + if (adapter != null) { + for (int i = 0; i < adapter.getItemCount(); i++) { + EpisodeItemViewHolder holder = (EpisodeItemViewHolder) recyclerView.findViewHolderForAdapterPosition(i); + if (holder != null && holder.isCurrentlyPlayingItem()) { + holder.notifyPlaybackPositionUpdated(event); + break; + } + } + } } @Override @@ -143,19 +184,14 @@ public class PlaybackHistoryFragment extends Fragment implements AdapterView.OnI } } - @Subscribe(threadMode = ThreadMode.MAIN) - public void onEventMainThread(FeedItemEvent event) { - Log.d(TAG, "onEventMainThread() called with: " + "event = [" + event + "]"); - if (playbackHistory == null) { - return; - } - for (FeedItem item : event.items) { - int pos = FeedItemUtil.indexOfItemWithId(playbackHistory, item.getId()); - if (pos >= 0) { - loadItems(); - return; - } + @Override + public boolean onContextItemSelected(@NonNull MenuItem item) { + FeedItem selectedItem = adapter.getSelectedItem(); + if (selectedItem == null) { + Log.i(TAG, "Selected item at current position was null, ignoring selection"); + return super.onContextItemSelected(item); } + return FeedItemMenuHandler.onMenuItemClicked(this, item.getItemId(), selectedItem); } @Subscribe(threadMode = ThreadMode.MAIN) @@ -175,23 +211,6 @@ public class PlaybackHistoryFragment extends Fragment implements AdapterView.OnI getActivity().supportInvalidateOptionsMenu(); } - private final FeedItemlistAdapter.ItemAccess itemAccess = new FeedItemlistAdapter.ItemAccess() { - - @Override - public int getCount() { - return (playbackHistory != null) ? playbackHistory.size() : 0; - } - - @Override - public FeedItem getItem(int position) { - if (playbackHistory != null && 0 <= position && position < playbackHistory.size()) { - return playbackHistory.get(position); - } else { - return null; - } - } - }; - private void loadItems() { if (disposable != null) { disposable.dispose(); @@ -202,6 +221,7 @@ public class PlaybackHistoryFragment extends Fragment implements AdapterView.OnI .subscribe(result -> { if (result != null) { playbackHistory = result; + adapter.updateItems(playbackHistory); onFragmentLoaded(); } }, error -> Log.e(TAG, Log.getStackTraceString(error))); @@ -213,4 +233,20 @@ public class PlaybackHistoryFragment extends Fragment implements AdapterView.OnI DBReader.loadAdditionalFeedItemListData(history); return history; } + + private static class PlaybackHistoryListAdapter extends EpisodeItemListAdapter { + + public PlaybackHistoryListAdapter(MainActivity mainActivity) { + super(mainActivity); + } + + @Override + public void onBindViewHolder(EpisodeItemViewHolder holder, int pos) { + super.onBindViewHolder(holder, pos); + // played items shouldn't be transparent for this fragment since, *all* items + // in this fragment will, by definition, be played. So it serves no purpose and can make + // it harder to read. + holder.itemView.setAlpha(1.0f); + } + } } |