summaryrefslogtreecommitdiff
path: root/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java
diff options
context:
space:
mode:
authorH. Lehmann <ByteHamster@users.noreply.github.com>2020-03-17 15:41:24 +0100
committerGitHub <noreply@github.com>2020-03-17 15:41:24 +0100
commit54056dd8d95fe88d1a582c55e066778ce25eff50 (patch)
tree17eddd45c779ccb01c34e43dab06d0bd046e949d /app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java
parent4e0e4baa056509536f34078bf15031d8c0c97053 (diff)
parent6066fef1f2a3f3b8d5c5d946c750d356429e75a8 (diff)
downloadAntennaPod-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.java138
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);
+ }
+ }
}