summaryrefslogtreecommitdiff
path: root/app/src/main/java/de/danoeh/antennapod/fragment/FeedItemlistFragment.java
diff options
context:
space:
mode:
authorByteHamster <info@bytehamster.com>2020-03-17 00:17:21 +0100
committerByteHamster <info@bytehamster.com>2020-03-17 14:35:06 +0100
commit4f0de071ec4654c8d0a829d2edb60d9891ce74da (patch)
treedb1dcd0b128841f6f9303ec71efdcf46dc348b57 /app/src/main/java/de/danoeh/antennapod/fragment/FeedItemlistFragment.java
parent4e0e4baa056509536f34078bf15031d8c0c97053 (diff)
downloadAntennaPod-4f0de071ec4654c8d0a829d2edb60d9891ce74da.zip
Converted lists to RecyclerView
Also, cleaned up list adapters
Diffstat (limited to 'app/src/main/java/de/danoeh/antennapod/fragment/FeedItemlistFragment.java')
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/FeedItemlistFragment.java144
1 files changed, 66 insertions, 78 deletions
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/FeedItemlistFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/FeedItemlistFragment.java
index befe8757e..cb3697091 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/FeedItemlistFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/FeedItemlistFragment.java
@@ -5,7 +5,6 @@ import android.content.DialogInterface;
import android.graphics.LightingColorFilter;
import android.os.Bundle;
import android.util.Log;
-import android.view.ContextMenu;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
@@ -15,7 +14,6 @@ import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ImageButton;
import android.widget.ImageView;
-import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.RelativeLayout;
import android.widget.TextView;
@@ -23,19 +21,20 @@ import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
-import androidx.appcompat.widget.SearchView;
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.bumptech.glide.Glide;
import com.bumptech.glide.request.RequestOptions;
import com.google.android.material.appbar.AppBarLayout;
import com.google.android.material.appbar.CollapsingToolbarLayout;
import com.joanzapata.iconify.Iconify;
import com.joanzapata.iconify.widget.IconTextView;
+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.asynctask.FeedRemover;
import de.danoeh.antennapod.core.dialog.ConfirmationDialog;
import de.danoeh.antennapod.core.dialog.DownloadRequestErrorDialogCreator;
@@ -68,6 +67,7 @@ import de.danoeh.antennapod.menuhandler.FeedItemMenuHandler;
import de.danoeh.antennapod.menuhandler.FeedMenuHandler;
import de.danoeh.antennapod.menuhandler.MenuItemUtils;
import de.danoeh.antennapod.view.ToolbarIconTintManager;
+import de.danoeh.antennapod.view.viewholder.EpisodeItemViewHolder;
import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
@@ -86,12 +86,11 @@ public class FeedItemlistFragment extends Fragment implements AdapterView.OnItem
private static final String TAG = "ItemlistFragment";
private static final String ARGUMENT_FEED_ID = "argument.de.danoeh.antennapod.feed_id";
- private FeedItemlistAdapter adapter;
- private AdapterView.AdapterContextMenuInfo lastMenuInfo = null;
+ private FeedItemListAdapter adapter;
private MoreContentListFooterUtil listFooter;
private ProgressBar progressBar;
- private ListView listView;
+ private RecyclerView recyclerView;
private TextView txtvTitle;
private IconTextView txtvFailure;
private ImageView imgvBackground;
@@ -144,9 +143,13 @@ public class FeedItemlistFragment extends Fragment implements AdapterView.OnItem
toolbar.setTitle("");
((AppCompatActivity) getActivity()).setSupportActionBar(toolbar);
- listView = root.findViewById(android.R.id.list);
- listView.setOnItemClickListener(this);
- registerForContextMenu(listView);
+ 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);
+
progressBar = root.findViewById(R.id.progLoading);
txtvTitle = root.findViewById(R.id.txtvTitle);
txtvAuthor = root.findViewById(R.id.txtvAuthor);
@@ -283,35 +286,12 @@ public class FeedItemlistFragment extends Fragment implements AdapterView.OnItem
}
@Override
- public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
- super.onCreateContextMenu(menu, v, menuInfo);
- AdapterView.AdapterContextMenuInfo adapterInfo = (AdapterView.AdapterContextMenuInfo) menuInfo;
-
- FeedItem item = (FeedItem) itemAccess.getItem(adapterInfo.position);
- MenuInflater inflater = getActivity().getMenuInflater();
- inflater.inflate(R.menu.feeditemlist_context, menu);
-
- if (item != null) {
- menu.setHeaderTitle(item.getTitle());
- }
-
- lastMenuInfo = (AdapterView.AdapterContextMenuInfo) menuInfo;
- FeedItemMenuHandler.onPrepareMenu(menu, item);
- }
-
- @Override
- public boolean onContextItemSelected(MenuItem item) {
- AdapterView.AdapterContextMenuInfo menuInfo = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
- if (menuInfo == null) {
- menuInfo = lastMenuInfo;
- }
- FeedItem selectedItem = feed.getItemAtIndex(menuInfo.position);
-
+ public boolean onContextItemSelected(@NonNull MenuItem item) {
+ FeedItem selectedItem = adapter.getSelectedItem();
if (selectedItem == null) {
- Log.i(TAG, "Selected item at position " + menuInfo.position + " was null, ignoring selection");
+ Log.i(TAG, "Selected item at current position was null, ignoring selection");
return super.onContextItemSelected(item);
}
-
return FeedItemMenuHandler.onMenuItemClicked(this, item.getItemId(), selectedItem);
}
@@ -336,14 +316,19 @@ public class FeedItemlistFragment extends Fragment implements AdapterView.OnItem
@Subscribe(threadMode = ThreadMode.MAIN)
public void onEventMainThread(FeedItemEvent event) {
Log.d(TAG, "onEventMainThread() called with: " + "event = [" + event + "]");
- if (feed == null || feed.getItems() == null || adapter == null) {
+ if (feed == null || feed.getItems() == null) {
+ return;
+ } else if (adapter == null) {
+ loadItems();
return;
}
- for (FeedItem item : event.items) {
+ for (int i = 0, size = event.items.size(); i < size; i++) {
+ FeedItem item = event.items.get(i);
int pos = FeedItemUtil.indexOfItemWithId(feed.getItems(), item.getId());
if (pos >= 0) {
- loadItems();
- return;
+ feed.getItems().remove(pos);
+ feed.getItems().add(pos, item);
+ adapter.notifyItemChanged(pos);
}
}
}
@@ -356,14 +341,25 @@ public class FeedItemlistFragment extends Fragment implements AdapterView.OnItem
updateProgressBarVisibility();
}
if (adapter != null && update.mediaIds.length > 0) {
- adapter.notifyDataSetChanged();
+ for (long mediaId : update.mediaIds) {
+ int pos = FeedItemUtil.indexOfItemWithMediaId(feed.getItems(), mediaId);
+ if (pos >= 0) {
+ adapter.notifyItemChanged(pos);
+ }
+ }
}
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onEventMainThread(PlaybackPositionEvent event) {
if (adapter != null) {
- adapter.notifyCurrentlyPlayingItemChanged(event, listView);
+ for (int i = 0; i < adapter.getItemCount(); i++) {
+ EpisodeItemViewHolder holder = (EpisodeItemViewHolder) recyclerView.findViewHolderForAdapterPosition(i);
+ if (holder != null && holder.isCurrentlyPlayingItem()) {
+ holder.notifyPlaybackPositionUpdated(event);
+ break;
+ }
+ }
}
}
@@ -405,24 +401,24 @@ public class FeedItemlistFragment extends Fragment implements AdapterView.OnItem
return;
}
if (adapter == null) {
- listView.setAdapter(null);
+ recyclerView.setAdapter(null);
setupFooterView();
- adapter = new FeedItemlistAdapter((MainActivity) getActivity(), itemAccess, false, true);
- listView.setAdapter(adapter);
+ adapter = new FeedItemListAdapter((MainActivity) getActivity());
+ recyclerView.setAdapter(adapter);
}
- listView.setVisibility(View.VISIBLE);
+ recyclerView.setVisibility(View.VISIBLE);
progressBar.setVisibility(View.GONE);
- adapter.notifyDataSetChanged();
+ adapter.updateItems(feed.getItems());
getActivity().supportInvalidateOptionsMenu();
- if (feed != null && feed.getNextPageLink() == null && listFooter != null) {
+ /*if (feed != null && feed.getNextPageLink() == null && listFooter != null) {
listView.removeFooterView(listFooter.getRoot());
- }
+ }*/
}
private void refreshHeaderView() {
- if (listView == null || feed == null || !headerCreated) {
+ if (recyclerView == null || feed == null || !headerCreated) {
Log.e(TAG, "Unable to refresh header view");
return;
}
@@ -453,11 +449,7 @@ public class FeedItemlistFragment extends Fragment implements AdapterView.OnItem
}
private void setupHeaderView() {
- if (listView == null || feed == null) {
- Log.e(TAG, "Unable to setup listview: recyclerView = null or feed = null");
- return;
- }
- if (headerCreated) {
+ if (feed == null || headerCreated) {
return;
}
@@ -506,16 +498,16 @@ public class FeedItemlistFragment extends Fragment implements AdapterView.OnItem
private void setupFooterView() {
- if (listView == null || feed == null) {
+ if (recyclerView == null || feed == null) {
Log.e(TAG, "Unable to setup listview: recyclerView = null or feed = null");
return;
}
if (feed.isPaged() && feed.getNextPageLink() != null) {
LayoutInflater inflater = (LayoutInflater)
getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
- View header = inflater.inflate(R.layout.more_content_list_footer, listView, false);
- listView.addFooterView(header);
- listFooter = new MoreContentListFooterUtil(header);
+ View footer = inflater.inflate(R.layout.more_content_list_footer, null, false);
+ //adapter.setFooterView(footer);
+ listFooter = new MoreContentListFooterUtil(footer);
listFooter.setClickListener(() -> {
if (feed != null) {
try {
@@ -529,24 +521,6 @@ public class FeedItemlistFragment extends Fragment implements AdapterView.OnItem
}
}
- private final FeedItemlistAdapter.ItemAccess itemAccess = new FeedItemlistAdapter.ItemAccess() {
-
- @Override
- public FeedItem getItem(int position) {
- if (feed != null && 0 <= position && position < feed.getNumOfItems()) {
- return feed.getItemAtIndex(position);
- } else {
- return null;
- }
- }
-
- @Override
- public int getCount() {
- return (feed != null) ? feed.getNumOfItems() : 0;
- }
-
- };
-
private void loadItems() {
if (disposable != null) {
disposable.dispose();
@@ -576,4 +550,18 @@ public class FeedItemlistFragment extends Fragment implements AdapterView.OnItem
}
return Optional.ofNullable(feed);
}
+
+ private static class FeedItemListAdapter extends EpisodeItemListAdapter {
+ public FeedItemListAdapter(MainActivity mainActivity) {
+ super(mainActivity);
+ }
+
+ @NonNull
+ @Override
+ public EpisodeItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+ EpisodeItemViewHolder viewHolder = super.onCreateViewHolder(parent, viewType);
+ viewHolder.coverHolder.setVisibility(View.GONE);
+ return viewHolder;
+ }
+ }
}