diff options
author | ByteHamster <info@bytehamster.com> | 2019-11-15 10:32:50 +0100 |
---|---|---|
committer | ByteHamster <info@bytehamster.com> | 2019-11-15 10:32:53 +0100 |
commit | 2b3b5567354549cc8c8ecbad43195c7cb5f0a613 (patch) | |
tree | f377f009f270efedf077795a809d2130da833be9 /app/src/main/java/de | |
parent | 0ae885255919d1aa202acecacc6380164b572eec (diff) | |
download | AntennaPod-2b3b5567354549cc8c8ecbad43195c7cb5f0a613.zip |
Moved actionbar menu to ItemPagerFragment
ViewPager keeps multiple fragments in background and therefore,
the menu was shown multiple times.
Diffstat (limited to 'app/src/main/java/de')
-rw-r--r-- | app/src/main/java/de/danoeh/antennapod/fragment/ItemFragment.java | 79 | ||||
-rw-r--r-- | app/src/main/java/de/danoeh/antennapod/fragment/ItemPagerFragment.java | 97 |
2 files changed, 108 insertions, 68 deletions
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/ItemFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/ItemFragment.java index dfab47217..396b09a37 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/ItemFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/ItemFragment.java @@ -6,52 +6,39 @@ import android.content.Intent; import android.net.Uri; import android.os.Build; import android.os.Bundle; -import androidx.annotation.Nullable; -import androidx.fragment.app.Fragment; -import androidx.core.content.ContextCompat; -import androidx.core.view.GestureDetectorCompat; import android.text.Layout; import android.text.TextUtils; import android.util.Log; import android.view.ContextMenu; import android.view.LayoutInflater; import android.view.Menu; -import android.view.MenuInflater; import android.view.MenuItem; -import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.ImageView; -import android.widget.LinearLayout; import android.widget.ProgressBar; import android.widget.TextView; import android.widget.Toast; - +import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; +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.IconButton; - -import de.danoeh.antennapod.core.event.UnreadItemsUpdateEvent; -import org.apache.commons.lang3.ArrayUtils; -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.CastEnabledActivity; import de.danoeh.antennapod.activity.MainActivity; import de.danoeh.antennapod.adapter.actionbutton.ItemActionButton; 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.UnreadItemsUpdateEvent; import de.danoeh.antennapod.core.feed.FeedItem; import de.danoeh.antennapod.core.feed.FeedMedia; +import de.danoeh.antennapod.core.feed.util.ImageResourceUtils; import de.danoeh.antennapod.core.glide.ApGlideSettings; import de.danoeh.antennapod.core.preferences.UserPreferences; import de.danoeh.antennapod.core.service.download.Downloader; @@ -61,19 +48,20 @@ import de.danoeh.antennapod.core.storage.DBWriter; import de.danoeh.antennapod.core.storage.DownloadRequester; import de.danoeh.antennapod.core.util.Converter; import de.danoeh.antennapod.core.util.DateUtils; -import de.danoeh.antennapod.core.util.Flavors; -import de.danoeh.antennapod.core.feed.util.ImageResourceUtils; import de.danoeh.antennapod.core.util.IntentUtils; import de.danoeh.antennapod.core.util.NetworkUtils; import de.danoeh.antennapod.core.util.ShareUtils; import de.danoeh.antennapod.core.util.playback.Timeline; -import de.danoeh.antennapod.menuhandler.FeedItemMenuHandler; -import de.danoeh.antennapod.view.OnSwipeGesture; -import de.danoeh.antennapod.view.SwipeGestureDetector; 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.ArrayUtils; +import org.greenrobot.eventbus.EventBus; +import org.greenrobot.eventbus.Subscribe; +import org.greenrobot.eventbus.ThreadMode; + +import java.util.List; /** * Displays information about a FeedItem and actions. @@ -114,7 +102,6 @@ public class ItemFragment extends Fragment { private ProgressBar progbarLoading; private IconButton butAction1; private IconButton butAction2; - private Menu popupMenu; private Disposable disposable; @@ -126,8 +113,6 @@ public class ItemFragment extends Fragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setRetainInstance(true); - setHasOptionsMenu(true); itemId = getArguments().getLong(ARG_FEEDITEM); } @@ -262,48 +247,6 @@ public class ItemFragment extends Fragment { } } - @Override - public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { - if(!isAdded() || item == null) { - return; - } - super.onCreateOptionsMenu(menu, inflater); - if (Flavors.FLAVOR == Flavors.PLAY) { - ((CastEnabledActivity) getActivity()).requestCastButton(MenuItem.SHOW_AS_ACTION_ALWAYS); - } - inflater.inflate(R.menu.feeditem_options, menu); - popupMenu = menu; - if (item.hasMedia()) { - FeedItemMenuHandler.onPrepareMenu(popupMenuInterface, item); - } else { - // these are already available via button1 and button2 - FeedItemMenuHandler.onPrepareMenu(popupMenuInterface, item, - R.id.mark_read_item, R.id.visit_website_item); - } - } - - @Override - public boolean onOptionsItemSelected(MenuItem menuItem) { - switch(menuItem.getItemId()) { - case R.id.open_podcast: - openPodcast(); - return true; - default: - return FeedItemMenuHandler.onMenuItemClicked(this, menuItem.getItemId(), item); - } - } - - private final FeedItemMenuHandler.MenuInterface popupMenuInterface = new FeedItemMenuHandler.MenuInterface() { - @Override - public void setItemVisibility(int id, boolean visible) { - MenuItem item = popupMenu.findItem(id); - if (item != null) { - item.setVisible(visible); - } - } - }; - - private void onFragmentLoaded() { if (webviewData != null) { webvDescription.loadDataWithBaseURL("https://127.0.0.1", webviewData, "text/html", "utf-8", "about:blank"); diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/ItemPagerFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/ItemPagerFragment.java index 5b91b4a9f..e6cdc5e26 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/ItemPagerFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/ItemPagerFragment.java @@ -2,6 +2,9 @@ package de.danoeh.antennapod.fragment; import android.os.Bundle; import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import androidx.annotation.NonNull; @@ -10,6 +13,16 @@ import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentStatePagerAdapter; import androidx.viewpager.widget.ViewPager; import de.danoeh.antennapod.R; +import de.danoeh.antennapod.activity.CastEnabledActivity; +import de.danoeh.antennapod.activity.MainActivity; +import de.danoeh.antennapod.core.feed.FeedItem; +import de.danoeh.antennapod.core.storage.DBReader; +import de.danoeh.antennapod.core.util.Flavors; +import de.danoeh.antennapod.menuhandler.FeedItemMenuHandler; +import io.reactivex.Observable; +import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.disposables.Disposable; +import io.reactivex.schedulers.Schedulers; /** * Displays information about a list of FeedItems. @@ -46,10 +59,13 @@ public class ItemPagerFragment extends Fragment { private long[] feedItems; private int feedItemPos; + private FeedItem item; + private Disposable disposable; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + setHasOptionsMenu(true); feedItems = getArguments().getLongArray(ARG_FEEDITEMS); feedItemPos = getArguments().getInt(ARG_FEEDITEM_POS); @@ -63,11 +79,92 @@ public class ItemPagerFragment extends Fragment { ViewPager pager = layout.findViewById(R.id.pager); pager.setAdapter(new ItemPagerAdapter()); + pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { + @Override + public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { + + } + + @Override + public void onPageSelected(int position) { + loadItem(position); + } + + @Override + public void onPageScrollStateChanged(int state) { + + } + }); pager.setCurrentItem(feedItemPos); return layout; } + @Override + public void onDestroyView() { + super.onDestroyView(); + if (disposable != null) { + disposable.dispose(); + } + } + + private void loadItem(int position) { + if (disposable != null) { + disposable.dispose(); + } + + disposable = Observable.fromCallable(() -> DBReader.getFeedItem(position)) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(result -> { + item = result; + getActivity().invalidateOptionsMenu(); + }, Throwable::printStackTrace); + } + + @Override + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + if (!isAdded() || item == null) { + return; + } + super.onCreateOptionsMenu(menu, inflater); + if (Flavors.FLAVOR == Flavors.PLAY) { + ((CastEnabledActivity) getActivity()).requestCastButton(MenuItem.SHOW_AS_ACTION_ALWAYS); + } + inflater.inflate(R.menu.feeditem_options, menu); + + FeedItemMenuHandler.MenuInterface popupMenuInterface = (id, visible) -> { + MenuItem item = menu.findItem(id); + if (item != null) { + item.setVisible(visible); + } + }; + + if (item.hasMedia()) { + FeedItemMenuHandler.onPrepareMenu(popupMenuInterface, item); + } else { + // these are already available via button1 and button2 + FeedItemMenuHandler.onPrepareMenu(popupMenuInterface, item, + R.id.mark_read_item, R.id.visit_website_item); + } + } + + @Override + public boolean onOptionsItemSelected(MenuItem menuItem) { + switch (menuItem.getItemId()) { + case R.id.open_podcast: + openPodcast(); + return true; + default: + return FeedItemMenuHandler.onMenuItemClicked(this, menuItem.getItemId(), item); + } + } + + private void openPodcast() { + Fragment fragment = FeedItemlistFragment.newInstance(item.getFeedId()); + ((MainActivity) getActivity()).loadChildFragment(fragment); + } + private class ItemPagerAdapter extends FragmentStatePagerAdapter { ItemPagerAdapter() { |