summaryrefslogtreecommitdiff
path: root/app/src/main/java/de/danoeh/antennapod/fragment
diff options
context:
space:
mode:
authorByteHamster <info@bytehamster.com>2020-11-01 13:07:29 +0100
committerByteHamster <info@bytehamster.com>2020-11-01 15:35:44 +0100
commit7c2c97c747d56c2d55b12ff91b9c0aac6c56244b (patch)
treedfecbee503d9989c01d7c8157129724db0e1f783 /app/src/main/java/de/danoeh/antennapod/fragment
parent5f2b436ddcbf33ea7c4525c93981cd70ce9f000d (diff)
downloadAntennaPod-7c2c97c747d56c2d55b12ff91b9c0aac6c56244b.zip
Converted pagers to stand-alone toolbar
Diffstat (limited to 'app/src/main/java/de/danoeh/antennapod/fragment')
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/CompletedDownloadsFragment.java15
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/DownloadLogFragment.java19
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/DownloadsFragment.java9
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/EpisodesFragment.java17
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/EpisodesListFragment.java15
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/NewEpisodesFragment.java5
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/PagedToolbarFragment.java52
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/RunningDownloadsFragment.java13
8 files changed, 88 insertions, 57 deletions
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/CompletedDownloadsFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/CompletedDownloadsFragment.java
index 55a5d744e..a18d7acb9 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/CompletedDownloadsFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/CompletedDownloadsFragment.java
@@ -97,12 +97,6 @@ public class CompletedDownloadsFragment extends Fragment {
}
@Override
- public void onResume() {
- super.onResume();
- setHasOptionsMenu(true);
- }
-
- @Override
public void onStop() {
super.onStop();
if (disposable != null) {
@@ -112,8 +106,11 @@ public class CompletedDownloadsFragment extends Fragment {
@Override
public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) {
- super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.downloads_completed, menu);
+ }
+
+ @Override
+ public void onPrepareOptionsMenu(@NonNull Menu menu) {
menu.findItem(R.id.episode_actions).setVisible(items.size() > 0);
isUpdatingFeeds = MenuItemUtils.updateRefreshMenuItem(menu, R.id.refresh_item, updateRefreshMenuItemChecker);
}
@@ -135,7 +132,7 @@ public class CompletedDownloadsFragment extends Fragment {
public void onEventMainThread(DownloadEvent event) {
Log.d(TAG, "onEventMainThread() called with: " + "event = [" + event + "]");
if (event.hasChangedFeedUpdateStatus(isUpdatingFeeds)) {
- getActivity().invalidateOptionsMenu();
+ ((PagedToolbarFragment) getParentFragment()).invalidateOptionsMenuIfActive(this);
}
}
@@ -225,7 +222,7 @@ public class CompletedDownloadsFragment extends Fragment {
.subscribe(result -> {
items = result;
adapter.updateItems(result);
- requireActivity().invalidateOptionsMenu();
+ ((PagedToolbarFragment) getParentFragment()).invalidateOptionsMenuIfActive(this);
progressBar.setVisibility(View.GONE);
}, error -> Log.e(TAG, Log.getStackTraceString(error)));
}
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/DownloadLogFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/DownloadLogFragment.java
index 055d88285..91b8ee5cb 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/DownloadLogFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/DownloadLogFragment.java
@@ -66,12 +66,6 @@ public class DownloadLogFragment extends ListFragment {
}
@Override
- public void onResume() {
- super.onResume();
- setHasOptionsMenu(true);
- }
-
- @Override
public void onStop() {
super.onStop();
if (disposable != null) {
@@ -108,7 +102,7 @@ public class DownloadLogFragment extends ListFragment {
private void onFragmentLoaded() {
setListShown(true);
adapter.notifyDataSetChanged();
- getActivity().invalidateOptionsMenu();
+ ((PagedToolbarFragment) getParentFragment()).invalidateOptionsMenuIfActive(this);
}
@Override
@@ -173,18 +167,13 @@ public class DownloadLogFragment extends ListFragment {
@Override
public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) {
- super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.downloads_log, menu);
- isUpdatingFeeds = MenuItemUtils.updateRefreshMenuItem(menu, R.id.refresh_item, updateRefreshMenuItemChecker);
}
@Override
public void onPrepareOptionsMenu(@NonNull Menu menu) {
- super.onPrepareOptionsMenu(menu);
- MenuItem menuItem = menu.findItem(R.id.clear_history_item);
- if (menuItem != null) {
- menuItem.setVisible(!downloadLog.isEmpty());
- }
+ menu.findItem(R.id.clear_history_item).setVisible(!downloadLog.isEmpty());
+ isUpdatingFeeds = MenuItemUtils.updateRefreshMenuItem(menu, R.id.refresh_item, updateRefreshMenuItemChecker);
}
@Override
@@ -209,7 +198,7 @@ public class DownloadLogFragment extends ListFragment {
public void onEventMainThread(DownloadEvent event) {
Log.d(TAG, "onEventMainThread() called with: " + "event = [" + event + "]");
if (event.hasChangedFeedUpdateStatus(isUpdatingFeeds)) {
- getActivity().invalidateOptionsMenu();
+ ((PagedToolbarFragment) getParentFragment()).invalidateOptionsMenuIfActive(this);
}
}
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/DownloadsFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/DownloadsFragment.java
index bc2d85452..1a84fd69e 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/DownloadsFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/DownloadsFragment.java
@@ -9,7 +9,6 @@ import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
-import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.fragment.app.Fragment;
import androidx.viewpager2.adapter.FragmentStateAdapter;
@@ -19,11 +18,12 @@ import com.google.android.material.tabs.TabLayout;
import com.google.android.material.tabs.TabLayoutMediator;
import de.danoeh.antennapod.R;
+import de.danoeh.antennapod.activity.MainActivity;
/**
- * Shows the CompletedDownloadsFragment and the RunningDownloadsFragment
+ * Shows the CompletedDownloadsFragment and the RunningDownloadsFragment.
*/
-public class DownloadsFragment extends Fragment {
+public class DownloadsFragment extends PagedToolbarFragment {
public static final String TAG = "DownloadsFragment";
@@ -47,11 +47,12 @@ public class DownloadsFragment extends Fragment {
View root = inflater.inflate(R.layout.pager_fragment, container, false);
Toolbar toolbar = root.findViewById(R.id.toolbar);
toolbar.setTitle(R.string.downloads_label);
- ((AppCompatActivity) getActivity()).setSupportActionBar(toolbar);
+ ((MainActivity) getActivity()).setupToolbarToggle(toolbar);
viewPager = root.findViewById(R.id.viewpager);
viewPager.setAdapter(new DownloadsPagerAdapter(this));
viewPager.setOffscreenPageLimit(2);
+ super.setupPagedToolbar(toolbar, viewPager);
// Give the TabLayout the ViewPager
tabLayout = root.findViewById(R.id.sliding_tabs);
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/EpisodesFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/EpisodesFragment.java
index afd027b3a..83f769207 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/EpisodesFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/EpisodesFragment.java
@@ -8,7 +8,6 @@ import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
-import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.fragment.app.Fragment;
import androidx.viewpager2.adapter.FragmentStateAdapter;
@@ -18,8 +17,9 @@ import com.google.android.material.tabs.TabLayout;
import com.google.android.material.tabs.TabLayoutMediator;
import de.danoeh.antennapod.R;
+import de.danoeh.antennapod.activity.MainActivity;
-public class EpisodesFragment extends Fragment {
+public class EpisodesFragment extends PagedToolbarFragment {
public static final String TAG = "EpisodesFragment";
private static final String PREF_LAST_TAB_POSITION = "tab_position";
@@ -29,18 +29,11 @@ public class EpisodesFragment extends Fragment {
private static final int POS_FAV_EPISODES = 2;
private static final int TOTAL_COUNT = 3;
-
private TabLayout tabLayout;
- private ViewPager2 viewPager;
-
- //Mandatory Constructor
- public EpisodesFragment() {
- }
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
- setHasOptionsMenu(true);
}
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
@@ -48,10 +41,12 @@ public class EpisodesFragment extends Fragment {
View rootView = inflater.inflate(R.layout.pager_fragment, container, false);
Toolbar toolbar = rootView.findViewById(R.id.toolbar);
toolbar.setTitle(R.string.episodes_label);
- ((AppCompatActivity) getActivity()).setSupportActionBar(toolbar);
- viewPager = rootView.findViewById(R.id.viewpager);
+ ((MainActivity) getActivity()).setupToolbarToggle(toolbar);
+
+ ViewPager2 viewPager = rootView.findViewById(R.id.viewpager);
viewPager.setAdapter(new EpisodesPagerAdapter(this));
viewPager.setOffscreenPageLimit(2);
+ super.setupPagedToolbar(toolbar, viewPager);
// Give the TabLayout the ViewPager
tabLayout = rootView.findViewById(R.id.sliding_tabs);
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/EpisodesListFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/EpisodesListFragment.java
index 62400d81d..cfb38881d 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/EpisodesListFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/EpisodesListFragment.java
@@ -94,7 +94,6 @@ public abstract class EpisodesListFragment extends Fragment {
@Override
public void onResume() {
super.onResume();
- setHasOptionsMenu(true);
registerForContextMenu(recyclerView);
}
@@ -125,12 +124,12 @@ public abstract class EpisodesListFragment extends Fragment {
@Override
public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) {
- if (!isAdded()) {
- return;
- }
- super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.episodes, menu);
MenuItemUtils.setupSearchItem(menu, (MainActivity) getActivity(), 0, "");
+ }
+
+ @Override
+ public void onPrepareOptionsMenu(@NonNull Menu menu) {
isUpdatingFeeds = MenuItemUtils.updateRefreshMenuItem(menu, R.id.refresh_item, updateRefreshMenuItemChecker);
}
@@ -290,7 +289,7 @@ public abstract class EpisodesListFragment extends Fragment {
recyclerView.restoreScrollPosition(getPrefName());
}
if (isMenuVisible && isUpdatingFeeds != updateRefreshMenuItemChecker.isRefreshing()) {
- requireActivity().invalidateOptionsMenu();
+ ((PagedToolbarFragment) getParentFragment()).invalidateOptionsMenuIfActive(this);
}
}
@@ -345,7 +344,7 @@ public abstract class EpisodesListFragment extends Fragment {
Log.d(TAG, "onEventMainThread() called with: " + "event = [" + event + "]");
DownloaderUpdate update = event.update;
if (isMenuVisible && event.hasChangedFeedUpdateStatus(isUpdatingFeeds)) {
- requireActivity().invalidateOptionsMenu();
+ ((PagedToolbarFragment) getParentFragment()).invalidateOptionsMenuIfActive(this);
}
if (update.mediaIds.length > 0) {
for (long mediaId : update.mediaIds) {
@@ -360,7 +359,7 @@ public abstract class EpisodesListFragment extends Fragment {
private void updateUi() {
loadItems();
if (isMenuVisible && isUpdatingFeeds != updateRefreshMenuItemChecker.isRefreshing()) {
- requireActivity().invalidateOptionsMenu();
+ ((PagedToolbarFragment) getParentFragment()).invalidateOptionsMenuIfActive(this);
}
}
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/NewEpisodesFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/NewEpisodesFragment.java
index 4577aed23..96c02f54d 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/NewEpisodesFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/NewEpisodesFragment.java
@@ -1,6 +1,7 @@
package de.danoeh.antennapod.fragment;
import android.os.Bundle;
+import android.view.MenuInflater;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import androidx.recyclerview.widget.ItemTouchHelper;
@@ -37,8 +38,8 @@ public class NewEpisodesFragment extends EpisodesListFragment {
}
@Override
- public void onPrepareOptionsMenu(Menu menu) {
- super.onPrepareOptionsMenu(menu);
+ public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) {
+ super.onCreateOptionsMenu(menu, inflater);
menu.findItem(R.id.remove_all_new_flags_item).setVisible(true);
}
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/PagedToolbarFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/PagedToolbarFragment.java
new file mode 100644
index 000000000..686765b90
--- /dev/null
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/PagedToolbarFragment.java
@@ -0,0 +1,52 @@
+package de.danoeh.antennapod.fragment;
+
+import androidx.appcompat.widget.Toolbar;
+import androidx.fragment.app.Fragment;
+import androidx.viewpager2.widget.ViewPager2;
+
+/**
+ * Fragment with a ViewPager where the displayed items influence the top toolbar's menu.
+ */
+public abstract class PagedToolbarFragment extends Fragment {
+ private Toolbar toolbar;
+ private ViewPager2 viewPager;
+ private int currentInflatedMenu = -1;
+
+ void invalidateOptionsMenuIfActive(Fragment child) {
+ Fragment visibleChild = getChildFragmentManager().findFragmentByTag("f" + viewPager.getCurrentItem());
+ if (visibleChild == child) {
+ if (currentInflatedMenu != viewPager.getCurrentItem()) {
+ currentInflatedMenu = viewPager.getCurrentItem();
+ toolbar.getMenu().clear();
+ child.onCreateOptionsMenu(toolbar.getMenu(), getActivity().getMenuInflater());
+ }
+ child.onPrepareOptionsMenu(toolbar.getMenu());
+ }
+ }
+
+ protected void setupPagedToolbar(Toolbar toolbar, ViewPager2 viewPager) {
+ this.toolbar = toolbar;
+ this.viewPager = viewPager;
+
+ toolbar.setOnMenuItemClickListener(item -> {
+ Fragment child = getChildFragmentManager().findFragmentByTag("f" + viewPager.getCurrentItem());
+ if (child != null) {
+ return child.onOptionsItemSelected(item);
+ }
+ return false;
+ });
+ viewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
+ @Override
+ public void onPageSelected(int position) {
+ Fragment child = getChildFragmentManager().findFragmentByTag("f" + position);
+ if (child != null && getActivity() != null) {
+ toolbar.getMenu().clear();
+ child.onCreateOptionsMenu(toolbar.getMenu(), getActivity().getMenuInflater());
+ currentInflatedMenu = position;
+
+ child.onPrepareOptionsMenu(toolbar.getMenu());
+ }
+ }
+ });
+ }
+}
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/RunningDownloadsFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/RunningDownloadsFragment.java
index ca9fba694..d02da8b36 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/RunningDownloadsFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/RunningDownloadsFragment.java
@@ -76,12 +76,6 @@ public class RunningDownloadsFragment extends ListFragment {
}
@Override
- public void onResume() {
- super.onResume();
- setHasOptionsMenu(true);
- }
-
- @Override
public void onStop() {
super.onStop();
EventBus.getDefault().unregister(this);
@@ -95,8 +89,11 @@ public class RunningDownloadsFragment extends ListFragment {
@Override
public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) {
- super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.downloads_running, menu);
+ }
+
+ @Override
+ public void onPrepareOptionsMenu(@NonNull Menu menu) {
isUpdatingFeeds = MenuItemUtils.updateRefreshMenuItem(menu, R.id.refresh_item, updateRefreshMenuItemChecker);
}
@@ -113,7 +110,7 @@ public class RunningDownloadsFragment extends ListFragment {
public void onEventMainThread(DownloadEvent event) {
Log.d(TAG, "onEventMainThread() called with: " + "event = [" + event + "]");
if (event.hasChangedFeedUpdateStatus(isUpdatingFeeds)) {
- getActivity().invalidateOptionsMenu();
+ ((PagedToolbarFragment) getParentFragment()).invalidateOptionsMenuIfActive(this);
}
}