summaryrefslogtreecommitdiff
path: root/app/src/main/java/de/danoeh
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/de/danoeh')
-rw-r--r--app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java8
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/AddFeedFragment.java10
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/FeedItemlistFragment.java176
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java57
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java211
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/SubscriptionFragment.java40
-rw-r--r--app/src/main/java/de/danoeh/antennapod/menuhandler/FeedMenuHandler.java5
7 files changed, 216 insertions, 291 deletions
diff --git a/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java
index a398a5e94..e4a57e161 100644
--- a/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java
+++ b/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java
@@ -5,7 +5,6 @@ import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.res.Configuration;
-import android.content.res.Resources;
import android.media.AudioManager;
import android.os.Build;
import android.os.Bundle;
@@ -13,7 +12,6 @@ import android.os.Handler;
import android.os.Looper;
import android.util.DisplayMetrics;
import android.util.Log;
-import android.util.TypedValue;
import android.view.KeyEvent;
import android.view.MenuItem;
import android.view.View;
@@ -194,8 +192,7 @@ public class MainActivity extends CastEnabledActivity {
}
};
- @Override
- public void setSupportActionBar(@Nullable Toolbar toolbar) {
+ public void setupToolbarToggle(@Nullable Toolbar toolbar) {
if (drawerLayout != null) { // Tablet layout does not have a drawer
drawerLayout.removeDrawerListener(drawerToggle);
drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar,
@@ -203,12 +200,13 @@ public class MainActivity extends CastEnabledActivity {
drawerLayout.addDrawerListener(drawerToggle);
drawerToggle.syncState();
drawerToggle.setDrawerIndicatorEnabled(getSupportFragmentManager().getBackStackEntryCount() == 0);
+ drawerToggle.setToolbarNavigationClickListener(v -> getSupportFragmentManager().popBackStack());
} else if (getSupportFragmentManager().getBackStackEntryCount() == 0) {
toolbar.setNavigationIcon(null);
} else {
toolbar.setNavigationIcon(ThemeUtils.getDrawableFromAttr(this, R.attr.homeAsUpIndicator));
+ toolbar.setNavigationOnClickListener(v -> getSupportFragmentManager().popBackStack());
}
- super.setSupportActionBar(toolbar);
}
private void checkFirstLaunch() {
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/AddFeedFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/AddFeedFragment.java
index fa0df9abb..3056f8955 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/AddFeedFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/AddFeedFragment.java
@@ -17,7 +17,7 @@ import android.widget.EditText;
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;
import com.google.android.material.snackbar.Snackbar;
@@ -58,7 +58,8 @@ public class AddFeedFragment extends Fragment {
super.onCreateView(inflater, container, savedInstanceState);
View root = inflater.inflate(R.layout.addfeed, container, false);
activity = (MainActivity) getActivity();
- ((AppCompatActivity) getActivity()).setSupportActionBar(root.findViewById(R.id.toolbar));
+ Toolbar toolbar = root.findViewById(R.id.toolbar);
+ ((MainActivity) getActivity()).setupToolbarToggle(toolbar);
root.findViewById(R.id.btn_search_itunes).setOnClickListener(v
-> activity.loadChildFragment(OnlineSearchFragment.newInstance(ItunesPodcastSearcher.class)));
@@ -143,11 +144,6 @@ public class AddFeedFragment extends Fragment {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
-
- // So, we certainly *don't* have an options menu,
- // but unless we say we do, old options menus sometimes
- // persist. mfietz thinks this causes the ActionBar to be invalidated
- setHasOptionsMenu(true);
}
@Override
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 b66f15c7e..a02b60196 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/FeedItemlistFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/FeedItemlistFragment.java
@@ -10,8 +10,6 @@ import android.os.Handler;
import android.os.Looper;
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;
@@ -24,7 +22,6 @@ 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.Toolbar;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.RecyclerView;
@@ -90,7 +87,8 @@ import java.util.Set;
/**
* Displays a list of FeedItems.
*/
-public class FeedItemlistFragment extends Fragment implements AdapterView.OnItemClickListener {
+public class FeedItemlistFragment extends Fragment implements AdapterView.OnItemClickListener,
+ Toolbar.OnMenuItemClickListener {
private static final String TAG = "ItemlistFragment";
private static final String ARGUMENT_FEED_ID = "argument.de.danoeh.antennapod.feed_id";
@@ -108,7 +106,7 @@ public class FeedItemlistFragment extends Fragment implements AdapterView.OnItem
private ImageButton butShowInfo;
private ImageButton butShowSettings;
private View header;
- private Menu optionsMenu;
+ private Toolbar toolbar;
private ToolbarIconTintManager iconTintManager;
private long feedID;
@@ -136,7 +134,6 @@ public class FeedItemlistFragment extends Fragment implements AdapterView.OnItem
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
- setHasOptionsMenu(true);
Bundle args = getArguments();
Validate.notNull(args);
@@ -148,9 +145,11 @@ public class FeedItemlistFragment extends Fragment implements AdapterView.OnItem
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);
+ toolbar = root.findViewById(R.id.toolbar);
+ toolbar.inflateMenu(R.menu.feedlist);
+ toolbar.setOnMenuItemClickListener(this);
+ ((MainActivity) getActivity()).setupToolbarToggle(toolbar);
+ refreshToolbarState();
recyclerView = root.findViewById(R.id.recyclerView);
recyclerView.setRecycledViewPool(((MainActivity) getActivity()).getRecycledViewPool());
@@ -172,19 +171,17 @@ public class FeedItemlistFragment extends Fragment implements AdapterView.OnItem
iconTintManager = new ToolbarIconTintManager(getContext(), toolbar, collapsingToolbar) {
@Override
protected void doTint(Context themedContext) {
- if (optionsMenu == null) {
- return;
- }
- optionsMenu.findItem(R.id.sort_items)
+ toolbar.getMenu().findItem(R.id.sort_items)
.setIcon(ThemeUtils.getDrawableFromAttr(themedContext, R.attr.ic_sort));
- optionsMenu.findItem(R.id.filter_items)
+ toolbar.getMenu().findItem(R.id.filter_items)
.setIcon(ThemeUtils.getDrawableFromAttr(themedContext, R.attr.ic_filter));
- optionsMenu.findItem(R.id.refresh_item)
+ toolbar.getMenu().findItem(R.id.refresh_item)
.setIcon(ThemeUtils.getDrawableFromAttr(themedContext, R.attr.navigation_refresh));
- optionsMenu.findItem(R.id.action_search)
+ toolbar.getMenu().findItem(R.id.action_search)
.setIcon(ThemeUtils.getDrawableFromAttr(themedContext, R.attr.action_search));
}
};
+ iconTintManager.updateTint();
appBar.addOnOffsetChangedListener(iconTintManager);
nextPageLoader = new MoreContentListFooterUtil(root.findViewById(R.id.more_content_list_footer));
@@ -243,33 +240,18 @@ public class FeedItemlistFragment extends Fragment implements AdapterView.OnItem
}
};
- @Override
- public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) {
- if (!isAdded()) {
+ private void refreshToolbarState() {
+ if (feed == null) {
return;
}
- super.onCreateOptionsMenu(menu, inflater);
- optionsMenu = menu;
- FeedMenuHandler.onCreateOptionsMenu(inflater, menu);
- iconTintManager.updateTint();
- if (feed != null) {
- MenuItemUtils.setupSearchItem(menu, (MainActivity) getActivity(), feedID, feed.getTitle());
- } else {
- MenuItemUtils.setupSearchItem(menu, (MainActivity) getActivity(), feedID, "");
- }
- if (feed == null || feed.getLink() == null) {
- menu.findItem(R.id.share_link_item).setVisible(false);
- menu.findItem(R.id.visit_website_item).setVisible(false);
- }
+ MenuItemUtils.setupSearchItem(toolbar.getMenu(), (MainActivity) getActivity(), feedID, feed.getTitle());
- isUpdatingFeed = MenuItemUtils.updateRefreshMenuItem(menu, R.id.refresh_item, updateRefreshMenuItemChecker);
- }
+ toolbar.getMenu().findItem(R.id.share_link_item).setVisible(feed.getLink() != null);
+ toolbar.getMenu().findItem(R.id.visit_website_item).setVisible(feed.getLink() != null);
- @Override
- public void onPrepareOptionsMenu(@NonNull Menu menu) {
- if (feed != null) {
- FeedMenuHandler.onPrepareOptionsMenu(menu, feed);
- }
+ isUpdatingFeed = MenuItemUtils.updateRefreshMenuItem(toolbar.getMenu(),
+ R.id.refresh_item, updateRefreshMenuItemChecker);
+ FeedMenuHandler.onPrepareOptionsMenu(toolbar.getMenu(), feed);
}
@Override
@@ -280,71 +262,67 @@ public class FeedItemlistFragment extends Fragment implements AdapterView.OnItem
}
@Override
- public boolean onOptionsItemSelected(@NonNull MenuItem item) {
+ public boolean onMenuItemClick(MenuItem item) {
if (item.getItemId() == R.id.action_search) {
item.getActionView().post(() -> iconTintManager.updateTint());
}
- if (super.onOptionsItemSelected(item)) {
+ if (feed == null) {
+ ((MainActivity) getActivity()).showSnackbarAbovePlayer(
+ R.string.please_wait_for_data, Toast.LENGTH_LONG);
return true;
- } else {
- if (feed == null) {
- ((MainActivity) getActivity()).showSnackbarAbovePlayer(
- R.string.please_wait_for_data, Toast.LENGTH_LONG);
+ }
+ boolean feedMenuHandled;
+ try {
+ feedMenuHandled = FeedMenuHandler.onOptionsItemClicked(getActivity(), item, feed);
+ } catch (DownloadRequestException e) {
+ e.printStackTrace();
+ DownloadRequestErrorDialogCreator.newRequestErrorDialog(getActivity(), e.getMessage());
+ return true;
+ }
+ if (feedMenuHandled) {
+ return true;
+ }
+ switch (item.getItemId()) {
+ case R.id.episode_actions:
+ int actions = EpisodesApplyActionFragment.ACTION_ALL;
+ if (feed.isLocalFeed()) {
+ // turn off download and delete actions for local feed
+ actions ^= EpisodesApplyActionFragment.ACTION_DOWNLOAD;
+ actions ^= EpisodesApplyActionFragment.ACTION_DELETE;
+ }
+ EpisodesApplyActionFragment fragment = EpisodesApplyActionFragment
+ .newInstance(feed.getItems(), actions);
+ ((MainActivity)getActivity()).loadChildFragment(fragment);
return true;
- }
- try {
- if (!FeedMenuHandler.onOptionsItemClicked(getActivity(), item, feed)) {
- switch (item.getItemId()) {
- case R.id.episode_actions:
- int actions = EpisodesApplyActionFragment.ACTION_ALL;
- if (feed.isLocalFeed()) {
- // turn off download and delete actions for local feed
- actions ^= EpisodesApplyActionFragment.ACTION_DOWNLOAD;
- actions ^= EpisodesApplyActionFragment.ACTION_DELETE;
- }
- EpisodesApplyActionFragment fragment = EpisodesApplyActionFragment
- .newInstance(feed.getItems(), actions);
- ((MainActivity)getActivity()).loadChildFragment(fragment);
- return true;
- case R.id.rename_item:
- new RenameFeedDialog(getActivity(), feed).show();
- return true;
- case R.id.remove_item:
- final FeedRemover remover = new FeedRemover(
- getActivity(), feed) {
- @Override
- protected void onPostExecute(Void result) {
- super.onPostExecute(result);
- ((MainActivity) getActivity()).loadFragment(EpisodesFragment.TAG, null);
- }
- };
- int messageId = feed.isLocalFeed() ? R.string.feed_delete_confirmation_local_msg
- : R.string.feed_delete_confirmation_msg;
- ConfirmationDialog conDialog = new ConfirmationDialog(getActivity(),
- R.string.remove_feed_label,
- getString(messageId, feed.getTitle())) {
-
- @Override
- public void onConfirmButtonPressed(
- DialogInterface dialog) {
- dialog.dismiss();
- remover.executeAsync();
- }
- };
- conDialog.createNewDialog().show();
- return true;
- default:
- return false;
-
+ case R.id.rename_item:
+ new RenameFeedDialog(getActivity(), feed).show();
+ return true;
+ case R.id.remove_item:
+ final FeedRemover remover = new FeedRemover(
+ getActivity(), feed) {
+ @Override
+ protected void onPostExecute(Void result) {
+ super.onPostExecute(result);
+ ((MainActivity) getActivity()).loadFragment(EpisodesFragment.TAG, null);
}
- } else {
- return true;
- }
- } catch (DownloadRequestException e) {
- e.printStackTrace();
- DownloadRequestErrorDialogCreator.newRequestErrorDialog(getActivity(), e.getMessage());
+ };
+ int messageId = feed.isLocalFeed() ? R.string.feed_delete_confirmation_local_msg
+ : R.string.feed_delete_confirmation_msg;
+ ConfirmationDialog conDialog = new ConfirmationDialog(getActivity(),
+ R.string.remove_feed_label,
+ getString(messageId, feed.getTitle())) {
+
+ @Override
+ public void onConfirmButtonPressed(
+ DialogInterface dialog) {
+ dialog.dismiss();
+ remover.executeAsync();
+ }
+ };
+ conDialog.createNewDialog().show();
return true;
- }
+ default:
+ return false;
}
}
@@ -450,7 +428,7 @@ public class FeedItemlistFragment extends Fragment implements AdapterView.OnItem
private void updateSyncProgressBarVisibility() {
if (isUpdatingFeed != updateRefreshMenuItemChecker.isRefreshing()) {
- getActivity().invalidateOptionsMenu();
+ refreshToolbarState();
}
if (!DownloadRequester.getInstance().isDownloadingFeeds()) {
nextPageLoader.getRoot().setVisibility(View.GONE);
@@ -474,7 +452,7 @@ public class FeedItemlistFragment extends Fragment implements AdapterView.OnItem
adapter.updateItems(feed.getItems());
}
- getActivity().invalidateOptionsMenu();
+ refreshToolbarState();
updateSyncProgressBarVisibility();
}
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java
index db4bda1f5..4549e2a09 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java
@@ -1,20 +1,15 @@
package de.danoeh.antennapod.fragment;
-import android.content.res.TypedArray;
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;
import android.widget.ProgressBar;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
-import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
-import androidx.core.view.MenuItemCompat;
import androidx.fragment.app.Fragment;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.activity.MainActivity;
@@ -43,7 +38,7 @@ import org.greenrobot.eventbus.ThreadMode;
import java.util.List;
-public class PlaybackHistoryFragment extends Fragment {
+public class PlaybackHistoryFragment extends Fragment implements Toolbar.OnMenuItemClickListener {
public static final String TAG = "PlaybackHistoryFragment";
private List<FeedItem> playbackHistory;
@@ -52,21 +47,24 @@ public class PlaybackHistoryFragment extends Fragment {
private EpisodeItemListRecyclerView recyclerView;
private EmptyViewHandler emptyView;
private ProgressBar progressBar;
+ private Toolbar toolbar;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
- setHasOptionsMenu(true);
}
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
View root = inflater.inflate(R.layout.simple_list_fragment, container, false);
- Toolbar toolbar = root.findViewById(R.id.toolbar);
+ toolbar = root.findViewById(R.id.toolbar);
toolbar.setTitle(R.string.playback_history_label);
- ((AppCompatActivity) getActivity()).setSupportActionBar(toolbar);
+ toolbar.setOnMenuItemClickListener(this);
+ ((MainActivity) getActivity()).setupToolbarToggle(toolbar);
+ toolbar.inflateMenu(R.menu.playback_history);
+ refreshToolbarState();
recyclerView = root.findViewById(R.id.recyclerView);
recyclerView.setRecycledViewPool(((MainActivity) getActivity()).getRecycledViewPool());
@@ -146,39 +144,18 @@ public class PlaybackHistoryFragment extends Fragment {
}
}
- @Override
- public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
- if (!isAdded()) {
- return;
- }
- super.onCreateOptionsMenu(menu, inflater);
- MenuItem clearHistory = menu.add(Menu.NONE, R.id.clear_history_item, Menu.CATEGORY_CONTAINER, R.string.clear_history_label);
- clearHistory.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
- TypedArray drawables = getActivity().obtainStyledAttributes(new int[]{R.attr.ic_delete});
- clearHistory.setIcon(drawables.getDrawable(0));
- drawables.recycle();
- }
-
- @Override
- public void onPrepareOptionsMenu(Menu menu) {
- super.onPrepareOptionsMenu(menu);
- MenuItem menuItem = menu.findItem(R.id.clear_history_item);
- if (menuItem != null) {
- menuItem.setVisible(playbackHistory != null && !playbackHistory.isEmpty());
- }
+ public void refreshToolbarState() {
+ boolean hasHistory = playbackHistory != null && !playbackHistory.isEmpty();
+ toolbar.getMenu().findItem(R.id.clear_history_item).setVisible(hasHistory);
}
@Override
- public boolean onOptionsItemSelected(MenuItem item) {
- if (!super.onOptionsItemSelected(item)) {
- if (item.getItemId() == R.id.clear_history_item) {
- DBWriter.clearPlaybackHistory();
- return true;
- }
- return false;
- } else {
+ public boolean onMenuItemClick(MenuItem item) {
+ if (item.getItemId() == R.id.clear_history_item) {
+ DBWriter.clearPlaybackHistory();
return true;
}
+ return false;
}
@Override
@@ -194,18 +171,18 @@ public class PlaybackHistoryFragment extends Fragment {
@Subscribe(threadMode = ThreadMode.MAIN)
public void onHistoryUpdated(PlaybackHistoryEvent event) {
loadItems();
- getActivity().invalidateOptionsMenu();
+ refreshToolbarState();
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onPlayerStatusChanged(PlayerStatusEvent event) {
loadItems();
- getActivity().invalidateOptionsMenu();
+ refreshToolbarState();
}
private void onFragmentLoaded() {
adapter.notifyDataSetChanged();
- getActivity().invalidateOptionsMenu();
+ refreshToolbarState();
}
private void loadItems() {
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java
index 122524b48..11457e46d 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java
@@ -6,8 +6,6 @@ import android.content.SharedPreferences;
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;
@@ -15,7 +13,7 @@ import android.widget.CheckBox;
import android.widget.ProgressBar;
import android.widget.TextView;
import androidx.appcompat.app.AlertDialog;
-import androidx.appcompat.app.AppCompatActivity;
+import androidx.appcompat.widget.Toolbar;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.ItemTouchHelper;
import androidx.recyclerview.widget.RecyclerView;
@@ -67,7 +65,7 @@ import static de.danoeh.antennapod.dialog.EpisodesApplyActionFragment.ACTION_REM
/**
* Shows all items in the queue.
*/
-public class QueueFragment extends Fragment {
+public class QueueFragment extends Fragment implements Toolbar.OnMenuItemClickListener {
public static final String TAG = "QueueFragment";
private TextView infoBar;
@@ -75,6 +73,7 @@ public class QueueFragment extends Fragment {
private QueueRecyclerAdapter recyclerAdapter;
private EmptyViewHandler emptyView;
private ProgressBar progLoading;
+ private Toolbar toolbar;
private List<FeedItem> queue;
@@ -91,7 +90,6 @@ public class QueueFragment extends Fragment {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
- setHasOptionsMenu(true);
prefs = getActivity().getSharedPreferences(PREFS, Context.MODE_PRIVATE);
}
@@ -182,7 +180,7 @@ public class QueueFragment extends Fragment {
Log.d(TAG, "onEventMainThread() called with DownloadEvent");
DownloaderUpdate update = event.update;
if (event.hasChangedFeedUpdateStatus(isUpdatingFeeds)) {
- getActivity().invalidateOptionsMenu();
+ refreshToolbarState();
}
if (recyclerAdapter != null && update.mediaIds.length > 0) {
for (long mediaId : update.mediaIds) {
@@ -212,7 +210,7 @@ public class QueueFragment extends Fragment {
public void onPlayerStatusChanged(PlayerStatusEvent event) {
loadItems(false);
if (isUpdatingFeeds != updateRefreshMenuItemChecker.isRefreshing()) {
- getActivity().invalidateOptionsMenu();
+ refreshToolbarState();
}
}
@@ -221,7 +219,7 @@ public class QueueFragment extends Fragment {
// Sent when playback position is reset
loadItems(false);
if (isUpdatingFeeds != updateRefreshMenuItemChecker.isRefreshing()) {
- getActivity().invalidateOptionsMenu();
+ refreshToolbarState();
}
}
@@ -238,114 +236,93 @@ public class QueueFragment extends Fragment {
private final MenuItemUtils.UpdateRefreshMenuItemChecker updateRefreshMenuItemChecker =
() -> DownloadService.isRunning && DownloadRequester.getInstance().isDownloadingFeeds();
- @Override
- public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
- if(!isAdded()) {
- return;
- }
- super.onCreateOptionsMenu(menu, inflater);
- if (queue != null) {
- inflater.inflate(R.menu.queue, menu);
- MenuItemUtils.setupSearchItem(menu, (MainActivity) getActivity(), 0, "");
- MenuItemUtils.refreshLockItem(getActivity(), menu);
-
- // Show Lock Item only if queue is sorted manually
- boolean keepSorted = UserPreferences.isQueueKeepSorted();
- MenuItem lockItem = menu.findItem(R.id.queue_lock);
- lockItem.setVisible(!keepSorted);
-
- // Random sort is not supported in keep sorted mode
- MenuItem sortRandomItem = menu.findItem(R.id.queue_sort_random);
- sortRandomItem.setVisible(!keepSorted);
-
- // Set keep sorted checkbox
- MenuItem keepSortedItem = menu.findItem(R.id.queue_keep_sorted);
- keepSortedItem.setChecked(keepSorted);
+ private void refreshToolbarState() {
+ MenuItemUtils.refreshLockItem(getActivity(), toolbar.getMenu());
+ boolean keepSorted = UserPreferences.isQueueKeepSorted();
+ toolbar.getMenu().findItem(R.id.queue_lock).setVisible(!keepSorted);
- isUpdatingFeeds = MenuItemUtils.updateRefreshMenuItem(menu, R.id.refresh_item, updateRefreshMenuItemChecker);
- }
+ toolbar.getMenu().findItem(R.id.queue_sort_random).setVisible(!keepSorted);
+ toolbar.getMenu().findItem(R.id.queue_keep_sorted).setChecked(keepSorted);
+ isUpdatingFeeds = MenuItemUtils.updateRefreshMenuItem(toolbar.getMenu(),
+ R.id.refresh_item, updateRefreshMenuItemChecker);
}
@Override
- public boolean onOptionsItemSelected(MenuItem item) {
- if (!super.onOptionsItemSelected(item)) {
- switch (item.getItemId()) {
- case R.id.queue_lock:
- toggleQueueLock();
- return true;
- case R.id.refresh_item:
- AutoUpdateManager.runImmediate(requireContext());
- return true;
- case R.id.clear_queue:
- // make sure the user really wants to clear the queue
- ConfirmationDialog conDialog = new ConfirmationDialog(getActivity(),
- R.string.clear_queue_label,
- R.string.clear_queue_confirmation_msg) {
-
- @Override
- public void onConfirmButtonPressed(
- DialogInterface dialog) {
- dialog.dismiss();
- DBWriter.clearQueue();
- }
- };
- conDialog.createNewDialog().show();
- return true;
- case R.id.episode_actions:
- ((MainActivity) requireActivity()).loadChildFragment(
- EpisodesApplyActionFragment.newInstance(queue, ACTION_DELETE | ACTION_REMOVE_FROM_QUEUE | ACTION_DOWNLOAD));
- return true;
- case R.id.queue_sort_episode_title_asc:
- setSortOrder(SortOrder.EPISODE_TITLE_A_Z);
- return true;
- case R.id.queue_sort_episode_title_desc:
- setSortOrder(SortOrder.EPISODE_TITLE_Z_A);
- return true;
- case R.id.queue_sort_date_asc:
- setSortOrder(SortOrder.DATE_OLD_NEW);
- return true;
- case R.id.queue_sort_date_desc:
- setSortOrder(SortOrder.DATE_NEW_OLD);
- return true;
- case R.id.queue_sort_duration_asc:
- setSortOrder(SortOrder.DURATION_SHORT_LONG);
- return true;
- case R.id.queue_sort_duration_desc:
- setSortOrder(SortOrder.DURATION_LONG_SHORT);
- return true;
- case R.id.queue_sort_feed_title_asc:
- setSortOrder(SortOrder.FEED_TITLE_A_Z);
- return true;
- case R.id.queue_sort_feed_title_desc:
- setSortOrder(SortOrder.FEED_TITLE_Z_A);
- return true;
- case R.id.queue_sort_random:
- setSortOrder(SortOrder.RANDOM);
- return true;
- case R.id.queue_sort_smart_shuffle_asc:
- setSortOrder(SortOrder.SMART_SHUFFLE_OLD_NEW);
- return true;
- case R.id.queue_sort_smart_shuffle_desc:
- setSortOrder(SortOrder.SMART_SHUFFLE_NEW_OLD);
- return true;
- case R.id.queue_keep_sorted:
- boolean keepSortedOld = UserPreferences.isQueueKeepSorted();
- boolean keepSortedNew = !keepSortedOld;
- UserPreferences.setQueueKeepSorted(keepSortedNew);
- if (keepSortedNew) {
- SortOrder sortOrder = UserPreferences.getQueueKeepSortedOrder();
- DBWriter.reorderQueue(sortOrder, true);
- }
- if (recyclerAdapter != null) {
- recyclerAdapter.updateDragDropEnabled();
+ public boolean onMenuItemClick(MenuItem item) {
+ switch (item.getItemId()) {
+ case R.id.queue_lock:
+ toggleQueueLock();
+ return true;
+ case R.id.refresh_item:
+ AutoUpdateManager.runImmediate(requireContext());
+ return true;
+ case R.id.clear_queue:
+ // make sure the user really wants to clear the queue
+ ConfirmationDialog conDialog = new ConfirmationDialog(getActivity(),
+ R.string.clear_queue_label,
+ R.string.clear_queue_confirmation_msg) {
+
+ @Override
+ public void onConfirmButtonPressed(
+ DialogInterface dialog) {
+ dialog.dismiss();
+ DBWriter.clearQueue();
}
- getActivity().invalidateOptionsMenu();
- return true;
- default:
- return false;
- }
- } else {
- return true;
+ };
+ conDialog.createNewDialog().show();
+ return true;
+ case R.id.episode_actions:
+ ((MainActivity) requireActivity()).loadChildFragment(
+ EpisodesApplyActionFragment.newInstance(queue, ACTION_DELETE | ACTION_REMOVE_FROM_QUEUE | ACTION_DOWNLOAD));
+ return true;
+ case R.id.queue_sort_episode_title_asc:
+ setSortOrder(SortOrder.EPISODE_TITLE_A_Z);
+ return true;
+ case R.id.queue_sort_episode_title_desc:
+ setSortOrder(SortOrder.EPISODE_TITLE_Z_A);
+ return true;
+ case R.id.queue_sort_date_asc:
+ setSortOrder(SortOrder.DATE_OLD_NEW);
+ return true;
+ case R.id.queue_sort_date_desc:
+ setSortOrder(SortOrder.DATE_NEW_OLD);
+ return true;
+ case R.id.queue_sort_duration_asc:
+ setSortOrder(SortOrder.DURATION_SHORT_LONG);
+ return true;
+ case R.id.queue_sort_duration_desc:
+ setSortOrder(SortOrder.DURATION_LONG_SHORT);
+ return true;
+ case R.id.queue_sort_feed_title_asc:
+ setSortOrder(SortOrder.FEED_TITLE_A_Z);
+ return true;
+ case R.id.queue_sort_feed_title_desc:
+ setSortOrder(SortOrder.FEED_TITLE_Z_A);
+ return true;
+ case R.id.queue_sort_random:
+ setSortOrder(SortOrder.RANDOM);
+ return true;
+ case R.id.queue_sort_smart_shuffle_asc:
+ setSortOrder(SortOrder.SMART_SHUFFLE_OLD_NEW);
+ return true;
+ case R.id.queue_sort_smart_shuffle_desc:
+ setSortOrder(SortOrder.SMART_SHUFFLE_NEW_OLD);
+ return true;
+ case R.id.queue_keep_sorted:
+ boolean keepSortedOld = UserPreferences.isQueueKeepSorted();
+ boolean keepSortedNew = !keepSortedOld;
+ UserPreferences.setQueueKeepSorted(keepSortedNew);
+ if (keepSortedNew) {
+ SortOrder sortOrder = UserPreferences.getQueueKeepSortedOrder();
+ DBWriter.reorderQueue(sortOrder, true);
+ }
+ if (recyclerAdapter != null) {
+ recyclerAdapter.updateDragDropEnabled();
+ }
+ refreshToolbarState();
+ return true;
+ default:
+ return false;
}
}
@@ -378,7 +355,7 @@ public class QueueFragment extends Fragment {
private void setQueueLocked(boolean locked) {
UserPreferences.setQueueLocked(locked);
- getActivity().invalidateOptionsMenu();
+ refreshToolbarState();
if (recyclerAdapter != null) {
recyclerAdapter.updateDragDropEnabled();
}
@@ -440,7 +417,13 @@ public class QueueFragment extends Fragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
View root = inflater.inflate(R.layout.queue_fragment, container, false);
- ((AppCompatActivity) getActivity()).setSupportActionBar(root.findViewById(R.id.toolbar));
+ toolbar = root.findViewById(R.id.toolbar);
+ toolbar.setOnMenuItemClickListener(this);
+ ((MainActivity) getActivity()).setupToolbarToggle(toolbar);
+ toolbar.inflateMenu(R.menu.queue);
+ MenuItemUtils.setupSearchItem(toolbar.getMenu(), (MainActivity) getActivity(), 0, "");
+ refreshToolbarState();
+
infoBar = root.findViewById(R.id.info_bar);
recyclerView = root.findViewById(R.id.recyclerView);
RecyclerView.ItemAnimator animator = recyclerView.getItemAnimator();
@@ -568,7 +551,7 @@ public class QueueFragment extends Fragment {
// we need to refresh the options menu because it sometimes
// needs data that may have just been loaded.
- getActivity().invalidateOptionsMenu();
+ refreshToolbarState();
refreshInfoBar();
}
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/SubscriptionFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/SubscriptionFragment.java
index 3b2a72210..7d3312e8e 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/SubscriptionFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/SubscriptionFragment.java
@@ -9,14 +9,13 @@ import android.os.Handler;
import android.os.Looper;
import android.widget.ProgressBar;
import androidx.annotation.StringRes;
-import androidx.appcompat.app.AppCompatActivity;
+import androidx.appcompat.widget.Toolbar;
import androidx.fragment.app.Fragment;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
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.View;
@@ -65,7 +64,7 @@ import org.greenrobot.eventbus.ThreadMode;
/**
* Fragment for displaying feed subscriptions
*/
-public class SubscriptionFragment extends Fragment {
+public class SubscriptionFragment extends Fragment implements Toolbar.OnMenuItemClickListener {
public static final String TAG = "SubscriptionFragment";
private static final String PREFS = "SubscriptionFragment";
@@ -78,6 +77,7 @@ public class SubscriptionFragment extends Fragment {
private ProgressBar progressBar;
private EmptyViewHandler emptyView;
private TextView feedsFilteredMsg;
+ private Toolbar toolbar;
private int mPosition = -1;
private boolean isUpdatingFeeds = false;
@@ -89,7 +89,6 @@ public class SubscriptionFragment extends Fragment {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
- setHasOptionsMenu(true);
prefs = requireActivity().getSharedPreferences(PREFS, Context.MODE_PRIVATE);
}
@@ -98,7 +97,12 @@ public class SubscriptionFragment extends Fragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View root = inflater.inflate(R.layout.fragment_subscriptions, container, false);
- ((AppCompatActivity) getActivity()).setSupportActionBar(root.findViewById(R.id.toolbar));
+ toolbar = root.findViewById(R.id.toolbar);
+ toolbar.setOnMenuItemClickListener(this);
+ ((MainActivity) getActivity()).setupToolbarToggle(toolbar);
+ toolbar.inflateMenu(R.menu.subscriptions);
+ refreshToolbarState();
+
subscriptionGridLayout = root.findViewById(R.id.subscriptions_grid);
subscriptionGridLayout.setNumColumns(prefs.getInt(PREF_NUM_COLUMNS, getDefaultNumOfColumns()));
registerForContextMenu(subscriptionGridLayout);
@@ -117,25 +121,19 @@ public class SubscriptionFragment extends Fragment {
return root;
}
- @Override
- public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
- super.onCreateOptionsMenu(menu, inflater);
- inflater.inflate(R.menu.subscriptions, menu);
-
+ private void refreshToolbarState() {
int columns = prefs.getInt(PREF_NUM_COLUMNS, getDefaultNumOfColumns());
- menu.findItem(R.id.subscription_num_columns_2).setChecked(columns == 2);
- menu.findItem(R.id.subscription_num_columns_3).setChecked(columns == 3);
- menu.findItem(R.id.subscription_num_columns_4).setChecked(columns == 4);
- menu.findItem(R.id.subscription_num_columns_5).setChecked(columns == 5);
+ toolbar.getMenu().findItem(R.id.subscription_num_columns_2).setChecked(columns == 2);
+ toolbar.getMenu().findItem(R.id.subscription_num_columns_3).setChecked(columns == 3);
+ toolbar.getMenu().findItem(R.id.subscription_num_columns_4).setChecked(columns == 4);
+ toolbar.getMenu().findItem(R.id.subscription_num_columns_5).setChecked(columns == 5);
- isUpdatingFeeds = MenuItemUtils.updateRefreshMenuItem(menu, R.id.refresh_item, updateRefreshMenuItemChecker);
+ isUpdatingFeeds = MenuItemUtils.updateRefreshMenuItem(toolbar.getMenu(),
+ R.id.refresh_item, updateRefreshMenuItemChecker);
}
@Override
- public boolean onOptionsItemSelected(MenuItem item) {
- if (super.onOptionsItemSelected(item)) {
- return true;
- }
+ public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.refresh_item:
AutoUpdateManager.runImmediate(requireContext());
@@ -166,7 +164,7 @@ public class SubscriptionFragment extends Fragment {
private void setColumnNumber(int columns) {
subscriptionGridLayout.setNumColumns(columns);
prefs.edit().putInt(PREF_NUM_COLUMNS, columns).apply();
- getActivity().invalidateOptionsMenu();
+ refreshToolbarState();
}
private void setupEmptyView() {
@@ -361,7 +359,7 @@ public class SubscriptionFragment extends Fragment {
public void onEventMainThread(DownloadEvent event) {
Log.d(TAG, "onEventMainThread() called with: " + "event = [" + event + "]");
if (event.hasChangedFeedUpdateStatus(isUpdatingFeeds)) {
- getActivity().invalidateOptionsMenu();
+ refreshToolbarState();
}
}
diff --git a/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedMenuHandler.java b/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedMenuHandler.java
index 5446d0191..9ceed9369 100644
--- a/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedMenuHandler.java
+++ b/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedMenuHandler.java
@@ -34,11 +34,6 @@ public class FeedMenuHandler {
private static final String TAG = "FeedMenuHandler";
- public static boolean onCreateOptionsMenu(MenuInflater inflater, Menu menu) {
- inflater.inflate(R.menu.feedlist, menu);
- return true;
- }
-
public static boolean onPrepareOptionsMenu(Menu menu, Feed selectedFeed) {
if (selectedFeed == null) {
return true;