mirror of
https://github.com/AntennaPod/AntennaPod.git
synced 2025-02-02 11:46:55 +01:00
Converted main fragments except pagers to stand-alone toolbar
This commit is contained in:
parent
1ffb9f9464
commit
8975b60ecd
@ -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() {
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
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;
|
||||
|
||||
}
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
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;
|
||||
}
|
||||
} catch (DownloadRequestException e) {
|
||||
e.printStackTrace();
|
||||
DownloadRequestErrorDialogCreator.newRequestErrorDialog(getActivity(), e.getMessage());
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
@ -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();
|
||||
}
|
||||
|
||||
|
@ -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();
|
||||
public void refreshToolbarState() {
|
||||
boolean hasHistory = playbackHistory != null && !playbackHistory.isEmpty();
|
||||
toolbar.getMenu().findItem(R.id.clear_history_item).setVisible(hasHistory);
|
||||
}
|
||||
|
||||
@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());
|
||||
}
|
||||
}
|
||||
|
||||
@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() {
|
||||
|
@ -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);
|
||||
private void refreshToolbarState() {
|
||||
MenuItemUtils.refreshLockItem(getActivity(), toolbar.getMenu());
|
||||
boolean keepSorted = UserPreferences.isQueueKeepSorted();
|
||||
toolbar.getMenu().findItem(R.id.queue_lock).setVisible(!keepSorted);
|
||||
|
||||
// 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);
|
||||
|
||||
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) {
|
||||
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();
|
||||
}
|
||||
};
|
||||
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);
|
||||
@Override
|
||||
public void onConfirmButtonPressed(
|
||||
DialogInterface dialog) {
|
||||
dialog.dismiss();
|
||||
DBWriter.clearQueue();
|
||||
}
|
||||
if (recyclerAdapter != null) {
|
||||
recyclerAdapter.updateDragDropEnabled();
|
||||
}
|
||||
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();
|
||||
}
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
9
app/src/main/res/menu/playback_history.xml
Normal file
9
app/src/main/res/menu/playback_history.xml
Normal file
@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
<item
|
||||
android:id="@+id/clear_history_item"
|
||||
android:icon="?attr/ic_delete"
|
||||
android:title="@string/clear_history_label"
|
||||
app:showAsAction="ifRoom"/>
|
||||
</menu>
|
Loading…
x
Reference in New Issue
Block a user