diff options
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.java | 113 |
1 files changed, 53 insertions, 60 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 b9afa6d57..dd9fe7bc4 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/FeedItemlistFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/FeedItemlistFragment.java @@ -1,6 +1,5 @@ package de.danoeh.antennapod.fragment; -import android.annotation.SuppressLint; import android.content.Context; import android.content.DialogInterface; import android.graphics.LightingColorFilter; @@ -12,31 +11,26 @@ import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; +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; - 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.ListFragment; - +import androidx.fragment.app.Fragment; import com.bumptech.glide.Glide; import com.bumptech.glide.request.RequestOptions; import com.joanzapata.iconify.Iconify; import com.joanzapata.iconify.widget.IconTextView; - -import org.apache.commons.lang3.Validate; -import org.greenrobot.eventbus.EventBus; -import org.greenrobot.eventbus.Subscribe; -import org.greenrobot.eventbus.ThreadMode; - -import java.util.List; - import de.danoeh.antennapod.R; import de.danoeh.antennapod.activity.MainActivity; import de.danoeh.antennapod.adapter.FeedItemlistAdapter; @@ -46,28 +40,23 @@ import de.danoeh.antennapod.core.dialog.DownloadRequestErrorDialogCreator; 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.FeedListUpdateEvent; import de.danoeh.antennapod.core.event.PlaybackPositionEvent; import de.danoeh.antennapod.core.event.PlayerStatusEvent; import de.danoeh.antennapod.core.event.UnreadItemsUpdateEvent; - import de.danoeh.antennapod.core.feed.Feed; import de.danoeh.antennapod.core.feed.FeedEvent; import de.danoeh.antennapod.core.feed.FeedItem; import de.danoeh.antennapod.core.feed.FeedItemFilter; -import de.danoeh.antennapod.core.feed.FeedMedia; import de.danoeh.antennapod.core.glide.ApGlideSettings; import de.danoeh.antennapod.core.glide.FastBlurTransformation; import de.danoeh.antennapod.core.service.download.DownloadService; -import de.danoeh.antennapod.core.service.download.Downloader; import de.danoeh.antennapod.core.storage.DBReader; import de.danoeh.antennapod.core.storage.DBTasks; import de.danoeh.antennapod.core.storage.DownloadRequestException; import de.danoeh.antennapod.core.storage.DownloadRequester; import de.danoeh.antennapod.core.util.FeedItemPermutors; import de.danoeh.antennapod.core.util.FeedItemUtil; -import de.danoeh.antennapod.core.util.LongList; import de.danoeh.antennapod.core.util.Optional; import de.danoeh.antennapod.core.util.gui.MoreContentListFooterUtil; import de.danoeh.antennapod.dialog.EpisodesApplyActionFragment; @@ -79,12 +68,17 @@ import io.reactivex.Observable; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.Disposable; import io.reactivex.schedulers.Schedulers; +import org.apache.commons.lang3.Validate; +import org.greenrobot.eventbus.EventBus; +import org.greenrobot.eventbus.Subscribe; +import org.greenrobot.eventbus.ThreadMode; + +import java.util.List; /** * Displays a list of FeedItems. */ -@SuppressLint("ValidFragment") -public class FeedItemlistFragment extends ListFragment { +public class FeedItemlistFragment extends Fragment implements AdapterView.OnItemClickListener { private static final String TAG = "ItemlistFragment"; private static final String ARGUMENT_FEED_ID = "argument.de.danoeh.antennapod.feed_id"; @@ -102,6 +96,8 @@ public class FeedItemlistFragment extends ListFragment { private ImageView imgvBackground; private ImageView imgvCover; private TextView txtvInformation; + private ListView listView; + private ProgressBar progressBar; private Disposable disposable; @@ -131,22 +127,23 @@ public class FeedItemlistFragment extends ListFragment { feedID = args.getLong(ARGUMENT_FEED_ID); } + @Nullable @Override - public void onHiddenChanged(boolean hidden) { - super.onHiddenChanged(hidden); - if (!hidden && getActivity() != null) { - ((MainActivity) getActivity()).getSupportActionBar().setTitle(""); - } - } - - @Override - public void onViewCreated(View view, Bundle savedInstanceState) { - super.onViewCreated(view, savedInstanceState); - - registerForContextMenu(getListView()); + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, + @Nullable Bundle savedInstanceState) { + View root = inflater.inflate(R.layout.feed_item_list_fragment, container, false); + Toolbar toolbar = root.findViewById(R.id.toolbar); + toolbar.setTitle(""); + ((AppCompatActivity) getActivity()).setSupportActionBar(toolbar); + + listView = root.findViewById(android.R.id.list); + listView.setOnItemClickListener(this); + registerForContextMenu(listView); + progressBar = root.findViewById(R.id.progLoading); EventBus.getDefault().register(this); loadItems(); + return root; } @Override @@ -320,21 +317,20 @@ public class FeedItemlistFragment extends ListFragment { } @Override - public void onListItemClick(ListView l, View v, int position, long id) { - if(adapter == null) { + public void onItemClick(AdapterView<?> parent, View view, int position, long id) { + if (adapter == null) { return; } - position -= l.getHeaderViewsCount(); + position -= listView.getHeaderViewsCount(); MainActivity activity = (MainActivity) getActivity(); long[] ids = FeedItemUtil.getIds(feed.getItems()); activity.loadChildFragment(ItemPagerFragment.newInstance(ids, position)); - activity.getSupportActionBar().setTitle(feed.getTitle()); } @Subscribe public void onEvent(FeedEvent event) { Log.d(TAG, "onEvent() called with: " + "event = [" + event + "]"); - if(event.feedId == feedID) { + if (event.feedId == feedID) { loadItems(); } } @@ -342,12 +338,12 @@ public class FeedItemlistFragment extends ListFragment { @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 || adapter == null) { return; } - for(FeedItem item : event.items) { + for (FeedItem item : event.items) { int pos = FeedItemUtil.indexOfItemWithId(feed.getItems(), item.getId()); - if(pos >= 0) { + if (pos >= 0) { loadItems(); return; } @@ -369,7 +365,7 @@ public class FeedItemlistFragment extends ListFragment { @Subscribe(threadMode = ThreadMode.MAIN) public void onEventMainThread(PlaybackPositionEvent event) { if (adapter != null) { - adapter.notifyCurrentlyPlayingItemChanged(event, getListView()); + adapter.notifyCurrentlyPlayingItemChanged(event, listView); } } @@ -412,39 +408,40 @@ public class FeedItemlistFragment extends ListFragment { return; } if (adapter == null) { - setListAdapter(null); + listView.setAdapter(null); setupHeaderView(); setupFooterView(); adapter = new FeedItemlistAdapter((MainActivity) getActivity(), itemAccess, false, true); - setListAdapter(adapter); + listView.setAdapter(adapter); } refreshHeaderView(); - setListShown(true); + listView.setVisibility(View.VISIBLE); + progressBar.setVisibility(View.GONE); adapter.notifyDataSetChanged(); getActivity().supportInvalidateOptionsMenu(); if (feed != null && feed.getNextPageLink() == null && listFooter != null) { - getListView().removeFooterView(listFooter.getRoot()); + listView.removeFooterView(listFooter.getRoot()); } } private void refreshHeaderView() { - if (getListView() == null || feed == null || !headerCreated) { + if (listView == null || feed == null || !headerCreated) { Log.e(TAG, "Unable to refresh header view"); return; } loadFeedImage(); - if(feed.hasLastUpdateFailed()) { + if (feed.hasLastUpdateFailed()) { txtvFailure.setVisibility(View.VISIBLE); } else { txtvFailure.setVisibility(View.GONE); } txtvTitle.setText(feed.getTitle()); - if(feed.getItemFilter() != null) { + if (feed.getItemFilter() != null) { FeedItemFilter filter = feed.getItemFilter(); - if(filter.getValues().length > 0) { - if(feed.hasLastUpdateFailed()) { + if (filter.getValues().length > 0) { + if (feed.hasLastUpdateFailed()) { RelativeLayout.LayoutParams p = (RelativeLayout.LayoutParams) txtvInformation.getLayoutParams(); p.addRule(RelativeLayout.BELOW, R.id.txtvFailure); } @@ -460,15 +457,14 @@ public class FeedItemlistFragment extends ListFragment { } private void setupHeaderView() { - if (getListView() == null || feed == null) { + if (listView == null || feed == null) { Log.e(TAG, "Unable to setup listview: recyclerView = null or feed = null"); return; } - ListView lv = getListView(); LayoutInflater inflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE); - View header = inflater.inflate(R.layout.feeditemlist_header, lv, false); - lv.addHeaderView(header); + View header = inflater.inflate(R.layout.feeditemlist_header, listView, false); + listView.addHeaderView(header); txtvTitle = header.findViewById(R.id.txtvTitle); TextView txtvAuthor = header.findViewById(R.id.txtvAuthor); @@ -482,7 +478,6 @@ public class FeedItemlistFragment extends ListFragment { txtvTitle.setText(feed.getTitle()); txtvAuthor.setText(feed.getAuthor()); - // https://github.com/bumptech/glide/issues/529 imgvBackground.setColorFilter(new LightingColorFilter(0xff828282, 0x000000)); @@ -530,16 +525,15 @@ public class FeedItemlistFragment extends ListFragment { private void setupFooterView() { - if (getListView() == null || feed == null) { + if (listView == null || feed == null) { Log.e(TAG, "Unable to setup listview: recyclerView = null or feed = null"); return; } if (feed.isPaged() && feed.getNextPageLink() != null) { - ListView lv = getListView(); LayoutInflater inflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE); - View header = inflater.inflate(R.layout.more_content_list_footer, lv, false); - lv.addFooterView(header); + View header = inflater.inflate(R.layout.more_content_list_footer, listView, false); + listView.addFooterView(header); listFooter = new MoreContentListFooterUtil(header); listFooter.setClickListener(() -> { if (feed != null) { @@ -573,7 +567,7 @@ public class FeedItemlistFragment extends ListFragment { }; private void loadItems() { - if(disposable != null) { + if (disposable != null) { disposable.dispose(); } disposable = Observable.fromCallable(this::loadData) @@ -600,5 +594,4 @@ public class FeedItemlistFragment extends ListFragment { } return Optional.ofNullable(feed); } - } |