From 1ffb9f94644b136aaf16ae13bc777485268cb247 Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Sun, 1 Nov 2020 09:58:18 +0100 Subject: [PATCH] Converted second-level fragments to stand-alone toolbar --- .../dialog/EpisodesApplyActionFragment.java | 73 +++++++------------ .../fragment/DiscoveryFragment.java | 7 +- .../antennapod/fragment/FeedInfoFragment.java | 49 +++++-------- .../fragment/FeedSettingsFragment.java | 3 +- .../fragment/ItemPagerFragment.java | 35 ++++----- .../fragment/OnlineSearchFragment.java | 19 ++--- .../antennapod/fragment/SearchFragment.java | 18 ++--- .../fragment/gpodnet/GpodnetMainFragment.java | 3 +- .../fragment/gpodnet/PodcastListFragment.java | 62 +++++++--------- 9 files changed, 103 insertions(+), 166 deletions(-) diff --git a/app/src/main/java/de/danoeh/antennapod/dialog/EpisodesApplyActionFragment.java b/app/src/main/java/de/danoeh/antennapod/dialog/EpisodesApplyActionFragment.java index f2524c40c..5aee3f2be 100644 --- a/app/src/main/java/de/danoeh/antennapod/dialog/EpisodesApplyActionFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/dialog/EpisodesApplyActionFragment.java @@ -1,12 +1,8 @@ package de.danoeh.antennapod.dialog; -import android.content.res.TypedArray; -import android.graphics.drawable.Drawable; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; -import android.view.Menu; -import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; @@ -17,10 +13,8 @@ import androidx.annotation.NonNull; import androidx.annotation.PluralsRes; import androidx.annotation.StringRes; import androidx.appcompat.app.AlertDialog; -import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.Toolbar; import androidx.collection.ArrayMap; -import androidx.core.app.ActivityCompat; import androidx.fragment.app.Fragment; import com.google.android.material.snackbar.Snackbar; import com.leinardi.android.speeddial.SpeedDialView; @@ -34,6 +28,7 @@ import de.danoeh.antennapod.core.storage.DownloadRequester; import de.danoeh.antennapod.core.util.FeedItemPermutors; import de.danoeh.antennapod.core.util.LongList; import de.danoeh.antennapod.core.util.SortOrder; +import de.danoeh.antennapod.core.util.ThemeUtils; import java.util.ArrayList; import java.util.Arrays; @@ -41,7 +36,7 @@ import java.util.Collections; import java.util.List; import java.util.Map; -public class EpisodesApplyActionFragment extends Fragment { +public class EpisodesApplyActionFragment extends Fragment implements Toolbar.OnMenuItemClickListener { public static final String TAG = "EpisodeActionFragment"; @@ -53,7 +48,6 @@ public class EpisodesApplyActionFragment extends Fragment { public static final int ACTION_DELETE = 32; public static final int ACTION_ALL = ACTION_ADD_TO_QUEUE | ACTION_REMOVE_FROM_QUEUE | ACTION_MARK_PLAYED | ACTION_MARK_UNPLAYED | ACTION_DOWNLOAD | ACTION_DELETE; - private Toolbar toolbar; /** * Specify an action (defined by #flag) 's UI bindings. @@ -84,7 +78,7 @@ public class EpisodesApplyActionFragment extends Fragment { private ListView mListView; private ArrayAdapter mAdapter; private SpeedDialView mSpeedDialView; - private MenuItem mSelectToggle; + private Toolbar toolbar; public EpisodesApplyActionFragment() { actionBindings = Arrays.asList( @@ -117,7 +111,6 @@ public class EpisodesApplyActionFragment extends Fragment { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setRetainInstance(true); - setHasOptionsMenu(true); } @Override @@ -125,6 +118,12 @@ public class EpisodesApplyActionFragment extends Fragment { Bundle savedInstanceState) { View view = inflater.inflate(R.layout.episodes_apply_action_fragment, container, false); + toolbar = view.findViewById(R.id.toolbar); + toolbar.inflateMenu(R.menu.episodes_apply_action_options); + toolbar.setNavigationOnClickListener(v -> getParentFragmentManager().popBackStack()); + toolbar.setOnMenuItemClickListener(this); + refreshToolbarState(); + mListView = view.findViewById(android.R.id.list); mListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); mListView.setOnItemClickListener((listView, view1, position, rowId) -> { @@ -167,8 +166,6 @@ public class EpisodesApplyActionFragment extends Fragment { mAdapter = new ArrayAdapter<>(getActivity(), R.layout.simple_list_item_multiple_choice_on_start, titles); mListView.setAdapter(mAdapter); - toolbar = view.findViewById(R.id.toolbar); - ((AppCompatActivity) getActivity()).setSupportActionBar(toolbar); // Init action UI (via a FAB Speed Dial) mSpeedDialView = view.findViewById(R.id.fabSD); @@ -215,42 +212,15 @@ public class EpisodesApplyActionFragment extends Fragment { return view; } - @Override - public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) { - super.onCreateOptionsMenu(menu, inflater); - inflater.inflate(R.menu.episodes_apply_action_options, menu); - - mSelectToggle = menu.findItem(R.id.select_toggle); - mSelectToggle.setOnMenuItemClickListener(item -> { - if (checkedIds.size() == episodes.size()) { - checkNone(); - } else { - checkAll(); - } - return true; - }); - } - - @Override - public void onPrepareOptionsMenu(@NonNull Menu menu) { - // Prepare icon for select toggle button - - int[] icon = new int[1]; - @StringRes int titleResId; + public void refreshToolbarState() { + MenuItem selectAllItem = toolbar.getMenu().findItem(R.id.select_toggle); if (checkedIds.size() == episodes.size()) { - icon[0] = R.attr.ic_select_none; - titleResId = R.string.deselect_all_label; + selectAllItem.setIcon(ThemeUtils.getDrawableFromAttr(getContext(), R.attr.ic_select_none)); + selectAllItem.setTitle(R.string.deselect_all_label); } else { - icon[0] = R.attr.ic_select_all; - titleResId = R.string.select_all_label; + selectAllItem.setIcon(ThemeUtils.getDrawableFromAttr(getContext(), R.attr.ic_select_all)); + selectAllItem.setTitle(R.string.select_all_label); } - - TypedArray a = getActivity().obtainStyledAttributes(icon); - Drawable iconDrawable = a.getDrawable(0); - a.recycle(); - - mSelectToggle.setIcon(iconDrawable); - mSelectToggle.setTitle(titleResId); } private static final Map menuItemIdToSortOrder; @@ -266,11 +236,18 @@ public class EpisodesApplyActionFragment extends Fragment { } @Override - public boolean onOptionsItemSelected(MenuItem item) { + public boolean onMenuItemClick(MenuItem item) { @StringRes int resId = 0; - switch(item.getItemId()) { + switch (item.getItemId()) { case R.id.select_options: return true; + case R.id.select_toggle: + if (checkedIds.size() == episodes.size()) { + checkNone(); + } else { + checkAll(); + } + return true; case R.id.check_all: checkAll(); resId = R.string.selected_all_label; @@ -409,7 +386,7 @@ public class EpisodesApplyActionFragment extends Fragment { boolean checked = checkedIds.contains(episode.getId()); mListView.setItemChecked(i, checked); } - getActivity().invalidateOptionsMenu(); + refreshToolbarState(); toolbar.setTitle(getResources().getQuantityString(R.plurals.num_selected_label, checkedIds.size(), checkedIds.size())); } diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/DiscoveryFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/DiscoveryFragment.java index 5bc950d50..034b111e1 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/DiscoveryFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/DiscoveryFragment.java @@ -15,7 +15,7 @@ import android.widget.ProgressBar; import android.widget.Spinner; import android.widget.TextView; import androidx.annotation.NonNull; -import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.Toolbar; import androidx.fragment.app.Fragment; import org.greenrobot.eventbus.EventBus; @@ -90,7 +90,6 @@ public class DiscoveryFragment extends Fragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setHasOptionsMenu(true); prefs = getActivity().getSharedPreferences(ItunesTopListLoader.PREFS, MODE_PRIVATE); countryCode = prefs.getString(ItunesTopListLoader.PREF_KEY_COUNTRY_CODE, Locale.getDefault().getCountry()); } @@ -100,11 +99,13 @@ public class DiscoveryFragment extends Fragment { Bundle savedInstanceState) { // Inflate the layout for this fragment View root = inflater.inflate(R.layout.fragment_itunes_search, container, false); - ((AppCompatActivity) getActivity()).setSupportActionBar(root.findViewById(R.id.toolbar)); gridView = root.findViewById(R.id.gridView); adapter = new ItunesAdapter(getActivity(), new ArrayList<>()); gridView.setAdapter(adapter); + Toolbar toolbar = root.findViewById(R.id.toolbar); + toolbar.setNavigationOnClickListener(v -> getParentFragmentManager().popBackStack()); + //Show information about the podcast when the list item is clicked gridView.setOnItemClickListener((parent, view1, position, id) -> { PodcastSearchResult podcast = searchResults.get(position); diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/FeedInfoFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/FeedInfoFragment.java index 5fd2c3c8d..674ee5757 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/FeedInfoFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/FeedInfoFragment.java @@ -13,7 +13,6 @@ import android.os.Bundle; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AlertDialog; -import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.Toolbar; import androidx.documentfile.provider.DocumentFile; import androidx.fragment.app.Fragment; @@ -21,8 +20,6 @@ import android.text.TextUtils; import android.text.format.Formatter; import android.util.Log; import android.view.LayoutInflater; -import android.view.Menu; -import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; @@ -67,7 +64,7 @@ import java.util.Locale; /** * Displays information about a feed. */ -public class FeedInfoFragment extends Fragment { +public class FeedInfoFragment extends Fragment implements Toolbar.OnMenuItemClickListener { private static final String EXTRA_FEED_ID = "de.danoeh.antennapod.extra.feedId"; private static final String TAG = "FeedInfoActivity"; @@ -89,7 +86,7 @@ public class FeedInfoFragment extends Fragment { private ImageView imgvBackground; private View infoContainer; private View header; - private Menu optionsMenu; + private Toolbar toolbar; private ToolbarIconTintManager iconTintManager; public static FeedInfoFragment newInstance(Feed feed) { @@ -119,25 +116,25 @@ public class FeedInfoFragment extends Fragment { public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View root = inflater.inflate(R.layout.feedinfo, null); - Toolbar toolbar = root.findViewById(R.id.toolbar); + toolbar = root.findViewById(R.id.toolbar); toolbar.setTitle(""); - ((AppCompatActivity) getActivity()).setSupportActionBar(toolbar); + toolbar.inflateMenu(R.menu.feedinfo); + toolbar.setNavigationOnClickListener(v -> getParentFragmentManager().popBackStack()); + toolbar.setOnMenuItemClickListener(this); + refreshToolbarState(); + AppBarLayout appBar = root.findViewById(R.id.appBar); CollapsingToolbarLayout collapsingToolbar = root.findViewById(R.id.collapsing_toolbar); iconTintManager = new ToolbarIconTintManager(getContext(), toolbar, collapsingToolbar) { @Override protected void doTint(Context themedContext) { - if (optionsMenu == null) { - return; - } - optionsMenu.findItem(R.id.visit_website_item) + toolbar.getMenu().findItem(R.id.visit_website_item) .setIcon(ThemeUtils.getDrawableFromAttr(themedContext, R.attr.location_web_site)); } }; + iconTintManager.updateTint(); appBar.addOnOffsetChangedListener(iconTintManager); - setHasOptionsMenu(true); - imgvCover = root.findViewById(R.id.imgvCover); txtvTitle = root.findViewById(R.id.txtvTitle); txtvAuthorHeader = root.findViewById(R.id.txtvAuthor); @@ -234,7 +231,7 @@ public class FeedInfoFragment extends Fragment { txtvUrl.setText(feed.getDownload_url() + " {fa-paperclip}"); Iconify.addIcons(txtvUrl); - getActivity().invalidateOptionsMenu(); + refreshToolbarState(); } private void loadStatistics() { @@ -286,29 +283,19 @@ public class FeedInfoFragment extends Fragment { } } - @Override - public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) { - super.onCreateOptionsMenu(menu, inflater); - inflater.inflate(R.menu.feedinfo, menu); - optionsMenu = menu; - iconTintManager.updateTint(); - } - - @Override - public void onPrepareOptionsMenu(@NonNull Menu menu) { - super.onPrepareOptionsMenu(menu); - menu.findItem(R.id.reconnect_local_folder).setVisible(feed != null && feed.isLocalFeed()); - menu.findItem(R.id.share_link_item).setVisible(feed != null && feed.getLink() != null); - menu.findItem(R.id.visit_website_item).setVisible(feed != null && feed.getLink() != null + private void refreshToolbarState() { + toolbar.getMenu().findItem(R.id.reconnect_local_folder).setVisible(feed != null && feed.isLocalFeed()); + toolbar.getMenu().findItem(R.id.share_link_item).setVisible(feed != null && feed.getLink() != null); + toolbar.getMenu().findItem(R.id.visit_website_item).setVisible(feed != null && feed.getLink() != null && IntentUtils.isCallable(getContext(), new Intent(Intent.ACTION_VIEW, Uri.parse(feed.getLink())))); } @Override - public boolean onOptionsItemSelected(@NonNull MenuItem item) { + public boolean onMenuItemClick(MenuItem item) { if (feed == null) { ((MainActivity) getActivity()).showSnackbarAbovePlayer( R.string.please_wait_for_data, Toast.LENGTH_LONG); - return super.onOptionsItemSelected(item); + return false; } boolean handled = false; try { @@ -335,7 +322,7 @@ public class FeedInfoFragment extends Fragment { return true; } - return handled || super.onOptionsItemSelected(item); + return handled; } @Override diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/FeedSettingsFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/FeedSettingsFragment.java index 21280896a..568b56304 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/FeedSettingsFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/FeedSettingsFragment.java @@ -9,7 +9,6 @@ import android.view.View; 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.preference.ListPreference; @@ -65,7 +64,7 @@ public class FeedSettingsFragment extends Fragment { long feedId = getArguments().getLong(EXTRA_FEED_ID); Toolbar toolbar = root.findViewById(R.id.toolbar); - ((AppCompatActivity) getActivity()).setSupportActionBar(toolbar); + toolbar.setNavigationOnClickListener(v -> getParentFragmentManager().popBackStack()); getParentFragmentManager().beginTransaction() .replace(R.id.settings_fragment_container, 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 2425a174e..7b7a09082 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/ItemPagerFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/ItemPagerFragment.java @@ -2,15 +2,12 @@ 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; import androidx.annotation.Nullable; -import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.Toolbar; import androidx.core.view.ViewCompat; import androidx.fragment.app.Fragment; @@ -35,7 +32,7 @@ import io.reactivex.schedulers.Schedulers; /** * Displays information about a list of FeedItems. */ -public class ItemPagerFragment extends Fragment { +public class ItemPagerFragment extends Fragment implements Toolbar.OnMenuItemClickListener { private static final String ARG_FEEDITEMS = "feeditems"; private static final String ARG_FEEDITEM_POS = "feeditem_pos"; private static final String KEY_PAGER_ID = "pager_id"; @@ -60,21 +57,18 @@ public class ItemPagerFragment extends Fragment { private long[] feedItems; private FeedItem item; private Disposable disposable; - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setHasOptionsMenu(true); - } + private Toolbar toolbar; @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { super.onCreateView(inflater, container, savedInstanceState); View layout = inflater.inflate(R.layout.feeditem_pager_fragment, container, false); - Toolbar toolbar = layout.findViewById(R.id.toolbar); + toolbar = layout.findViewById(R.id.toolbar); toolbar.setTitle(""); - ((AppCompatActivity) getActivity()).setSupportActionBar(toolbar); + toolbar.inflateMenu(R.menu.feeditem_options); + toolbar.setNavigationOnClickListener(v -> getParentFragmentManager().popBackStack()); + toolbar.setOnMenuItemClickListener(this); feedItems = getArguments().getLongArray(ARG_FEEDITEMS); int feedItemPos = getArguments().getInt(ARG_FEEDITEM_POS); @@ -130,28 +124,25 @@ public class ItemPagerFragment extends Fragment { .observeOn(AndroidSchedulers.mainThread()) .subscribe(result -> { item = result; - getActivity().invalidateOptionsMenu(); + refreshToolbarState(); }, Throwable::printStackTrace); } - @Override - public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { - if (!isAdded() || item == null) { + public void refreshToolbarState() { + if (item == null) { return; } - super.onCreateOptionsMenu(menu, inflater); - inflater.inflate(R.menu.feeditem_options, menu); if (item.hasMedia()) { - FeedItemMenuHandler.onPrepareMenu(menu, item); + FeedItemMenuHandler.onPrepareMenu(toolbar.getMenu(), item); } else { // these are already available via button1 and button2 - FeedItemMenuHandler.onPrepareMenu(menu, item, + FeedItemMenuHandler.onPrepareMenu(toolbar.getMenu(), item, R.id.mark_read_item, R.id.visit_website_item); } } @Override - public boolean onOptionsItemSelected(MenuItem menuItem) { + public boolean onMenuItemClick(MenuItem menuItem) { if (menuItem.getItemId() == R.id.open_podcast) { openPodcast(); return true; @@ -164,7 +155,7 @@ public class ItemPagerFragment extends Fragment { for (FeedItem item : event.items) { if (this.item != null && this.item.getId() == item.getId()) { this.item = item; - getActivity().invalidateOptionsMenu(); + refreshToolbarState(); return; } } diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/OnlineSearchFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/OnlineSearchFragment.java index 435590a0c..ba817650b 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/OnlineSearchFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/OnlineSearchFragment.java @@ -2,14 +2,11 @@ package de.danoeh.antennapod.fragment; import android.content.Intent; import android.os.Bundle; -import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.Toolbar; import androidx.fragment.app.Fragment; -import androidx.core.view.MenuItemCompat; import androidx.appcompat.widget.SearchView; import android.util.Log; import android.view.LayoutInflater; -import android.view.Menu; -import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; @@ -77,7 +74,6 @@ public class OnlineSearchFragment extends Fragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setHasOptionsMenu(true); for (PodcastSearcherRegistry.SearcherInfo info : PodcastSearcherRegistry.getSearchProviders()) { if (info.searcher.getClass().getName().equals(getArguments().getString(ARG_SEARCHER))) { @@ -94,7 +90,7 @@ public class OnlineSearchFragment extends Fragment { public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View root = inflater.inflate(R.layout.fragment_itunes_search, container, false); - ((AppCompatActivity) getActivity()).setSupportActionBar(root.findViewById(R.id.toolbar)); + setupToolbar(root.findViewById(R.id.toolbar)); root.findViewById(R.id.spinner_country).setVisibility(INVISIBLE); gridView = root.findViewById(R.id.gridView); adapter = new ItunesAdapter(getActivity(), new ArrayList<>()); @@ -126,11 +122,11 @@ public class OnlineSearchFragment extends Fragment { adapter = null; } - @Override - public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { - super.onCreateOptionsMenu(menu, inflater); - inflater.inflate(R.menu.online_search, menu); - MenuItem searchItem = menu.findItem(R.id.action_search); + private void setupToolbar(Toolbar toolbar) { + toolbar.inflateMenu(R.menu.online_search); + toolbar.setNavigationOnClickListener(v -> getParentFragmentManager().popBackStack()); + + MenuItem searchItem = toolbar.getMenu().findItem(R.id.action_search); final SearchView sv = (SearchView) searchItem.getActionView(); sv.setQueryHint(getString(R.string.search_podcast_hint)); sv.setOnQueryTextListener(new SearchView.OnQueryTextListener() { @@ -163,7 +159,6 @@ public class OnlineSearchFragment extends Fragment { if (getArguments().getString(ARG_QUERY, null) != null) { sv.setQuery(getArguments().getString(ARG_QUERY, null), true); } - } private void search(String query) { diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/SearchFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/SearchFragment.java index 2061a8ba4..4526c789c 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/SearchFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/SearchFragment.java @@ -4,16 +4,14 @@ import android.os.Bundle; import android.util.Log; import android.util.Pair; 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 android.widget.ProgressBar; 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.fragment.app.Fragment; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -96,7 +94,6 @@ public class SearchFragment extends Fragment { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setRetainInstance(true); - setHasOptionsMenu(true); } @Override @@ -118,7 +115,7 @@ public class SearchFragment extends Fragment { public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View layout = inflater.inflate(R.layout.search_fragment, container, false); - ((AppCompatActivity) getActivity()).setSupportActionBar(layout.findViewById(R.id.toolbar)); + setupToolbar(layout.findViewById(R.id.toolbar)); progressBar = layout.findViewById(R.id.progressBar); recyclerView = layout.findViewById(R.id.recyclerView); @@ -154,11 +151,12 @@ public class SearchFragment extends Fragment { EventBus.getDefault().unregister(this); } - @Override - public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) { - super.onCreateOptionsMenu(menu, inflater); - inflater.inflate(R.menu.search, menu); - MenuItem item = menu.findItem(R.id.action_search); + private void setupToolbar(Toolbar toolbar) { + toolbar.setTitle(R.string.search_label); + toolbar.setNavigationOnClickListener(v -> getParentFragmentManager().popBackStack()); + toolbar.inflateMenu(R.menu.gpodder_podcasts); + + MenuItem item = toolbar.getMenu().findItem(R.id.action_search); item.expandActionView(); final SearchView sv = (SearchView) item.getActionView(); sv.setQueryHint(getString(R.string.search_label)); diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/GpodnetMainFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/GpodnetMainFragment.java index 4ccc53118..641e82b5a 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/GpodnetMainFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/GpodnetMainFragment.java @@ -6,7 +6,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; @@ -33,7 +32,7 @@ public class GpodnetMainFragment extends Fragment { View root = inflater.inflate(R.layout.pager_fragment, container, false); Toolbar toolbar = root.findViewById(R.id.toolbar); toolbar.setTitle(R.string.gpodnet_main_label); - ((AppCompatActivity) getActivity()).setSupportActionBar(toolbar); + toolbar.setNavigationOnClickListener(v -> getParentFragmentManager().popBackStack()); ViewPager2 viewPager = root.findViewById(R.id.viewpager); GpodnetPagerAdapter pagerAdapter = new GpodnetPagerAdapter(this); diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/PodcastListFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/PodcastListFragment.java index 4cb50e2f4..b3f56941b 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/PodcastListFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/PodcastListFragment.java @@ -4,15 +4,11 @@ import android.content.Context; import android.content.Intent; import android.os.AsyncTask; import android.os.Bundle; -import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.Toolbar; import androidx.fragment.app.Fragment; -import androidx.core.view.MenuItemCompat; import androidx.appcompat.widget.SearchView; import android.util.Log; import android.view.LayoutInflater; -import android.view.Menu; -import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; @@ -46,16 +42,34 @@ public abstract class PodcastListFragment extends Fragment { private Button butRetry; @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setHasOptionsMenu(true); + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + View root = inflater.inflate(R.layout.gpodnet_podcast_list, container, false); + setupToolbar(root.findViewById(R.id.toolbar)); + + gridView = root.findViewById(R.id.gridView); + progressBar = root.findViewById(R.id.progressBar); + txtvError = root.findViewById(R.id.txtvError); + butRetry = root.findViewById(R.id.butRetry); + + gridView.setOnItemClickListener((parent, view, position, id) -> + onPodcastSelected((GpodnetPodcast) gridView.getAdapter().getItem(position))); + butRetry.setOnClickListener(v -> loadData()); + + loadData(); + return root; } - @Override - public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { - super.onCreateOptionsMenu(menu, inflater); - inflater.inflate(R.menu.gpodder_podcasts, menu); - MenuItem searchItem = menu.findItem(R.id.action_search); + private void setupToolbar(Toolbar toolbar) { + if (getArguments() != null && getArguments().getBoolean(ARGUMENT_HIDE_TOOLBAR, false)) { + toolbar.setVisibility(View.GONE); + return; + } + + toolbar.setTitle(R.string.gpodnet_main_label); + toolbar.setNavigationOnClickListener(v -> getParentFragmentManager().popBackStack()); + toolbar.inflateMenu(R.menu.gpodder_podcasts); + + MenuItem searchItem = toolbar.getMenu().findItem(R.id.action_search); final SearchView sv = (SearchView) searchItem.getActionView(); sv.setQueryHint(getString(R.string.gpodnet_search_hint)); sv.setOnQueryTextListener(new SearchView.OnQueryTextListener() { @@ -76,30 +90,6 @@ public abstract class PodcastListFragment extends Fragment { }); } - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - View root = inflater.inflate(R.layout.gpodnet_podcast_list, container, false); - Toolbar toolbar = root.findViewById(R.id.toolbar); - if (getArguments() == null || !getArguments().getBoolean(ARGUMENT_HIDE_TOOLBAR, false)) { - toolbar.setTitle(R.string.gpodnet_main_label); - ((AppCompatActivity) getActivity()).setSupportActionBar(toolbar); - } else { - toolbar.setVisibility(View.GONE); - } - - gridView = root.findViewById(R.id.gridView); - progressBar = root.findViewById(R.id.progressBar); - txtvError = root.findViewById(R.id.txtvError); - butRetry = root.findViewById(R.id.butRetry); - - gridView.setOnItemClickListener((parent, view, position, id) -> - onPodcastSelected((GpodnetPodcast) gridView.getAdapter().getItem(position))); - butRetry.setOnClickListener(v -> loadData()); - - loadData(); - return root; - } - private void onPodcastSelected(GpodnetPodcast selection) { Log.d(TAG, "Selected podcast: " + selection.toString()); Intent intent = new Intent(getActivity(), OnlineFeedViewActivity.class);