Item list context menu delegate

This commit is contained in:
Andrei 2022-10-16 15:09:41 -07:00
parent 49b301c7ce
commit b88906404c
4 changed files with 330 additions and 306 deletions

View file

@ -10,7 +10,6 @@ import androidx.fragment.app.FragmentTransaction;
import android.text.TextUtils;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnKeyListener;
@ -18,24 +17,17 @@ import android.view.View.OnKeyListener;
import com.newsblur.R;
import com.newsblur.database.BlurDatabaseHelper;
import com.newsblur.databinding.ActivityItemslistBinding;
import com.newsblur.delegate.ItemListContextMenuDelegate;
import com.newsblur.delegate.ItemListContextMenuDelegateImpl;
import com.newsblur.di.IconLoader;
import com.newsblur.fragment.ItemSetFragment;
import com.newsblur.fragment.SaveSearchFragment;
import com.newsblur.service.NBSyncService;
import com.newsblur.util.AppConstants;
import com.newsblur.util.FeedSet;
import com.newsblur.util.FeedUtils;
import com.newsblur.util.ImageLoader;
import com.newsblur.util.PrefConstants.ThemeValue;
import com.newsblur.util.PrefsUtils;
import com.newsblur.util.ReadFilter;
import com.newsblur.util.SpacingStyle;
import com.newsblur.util.StateFilter;
import com.newsblur.util.StoryContentPreviewStyle;
import com.newsblur.util.StoryListStyle;
import com.newsblur.util.StoryOrder;
import com.newsblur.util.ListTextSize;
import com.newsblur.util.ThumbnailStyle;
import com.newsblur.util.UIUtils;
import javax.inject.Inject;
@ -62,9 +54,9 @@ public abstract class ItemsList extends NbActivity {
private static final String BUNDLE_ACTIVE_SEARCH_QUERY = "activeSearchQuery";
private ActivityItemslistBinding binding;
protected ItemListContextMenuDelegate contextMenuDelegate;
protected ItemSetFragment itemSetFragment;
protected StateFilter intelState;
protected FeedSet fs;
@Override
@ -73,6 +65,7 @@ public abstract class ItemsList extends NbActivity {
overridePendingTransition(R.anim.slide_in_from_right, R.anim.slide_out_to_left);
contextMenuDelegate = new ItemListContextMenuDelegateImpl(this, feedUtils);
fs = (FeedSet) getIntent().getSerializableExtra(EXTRA_FEED_SET);
intelState = PrefsUtils.getStateFilter(this);
@ -137,11 +130,9 @@ public abstract class ItemsList extends NbActivity {
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
if (binding.itemlistSearchQuery != null) {
String q = binding.itemlistSearchQuery.getText().toString().trim();
if (q.length() > 0) {
outState.putString(BUNDLE_ACTIVE_SEARCH_QUERY, q);
}
String q = binding.itemlistSearchQuery.getText().toString().trim();
if (q.length() > 0) {
outState.putString(BUNDLE_ACTIVE_SEARCH_QUERY, q);
}
}
@ -167,277 +158,19 @@ public abstract class ItemsList extends NbActivity {
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.itemslist, menu);
if (fs.isGlobalShared() ||
fs.isAllSocial() ||
fs.isFilterSaved() ||
fs.isAllSaved() ||
fs.isSingleSavedTag() ||
fs.isInfrequent() ||
fs.isAllRead() ) {
menu.findItem(R.id.menu_mark_all_as_read).setVisible(false);
}
if (fs.isGlobalShared() ||
fs.isAllSocial() ||
fs.isAllRead() ) {
menu.findItem(R.id.menu_story_order).setVisible(false);
}
if (fs.isGlobalShared() ||
fs.isFilterSaved() ||
fs.isAllSaved() ||
fs.isSingleSavedTag() ||
fs.isInfrequent() ||
fs.isAllRead() ) {
menu.findItem(R.id.menu_read_filter).setVisible(false);
menu.findItem(R.id.menu_mark_read_on_scroll).setVisible(false);
menu.findItem(R.id.menu_story_content_preview_style).setVisible(false);
menu.findItem(R.id.menu_story_thumbnail_style).setVisible(false);
}
if (fs.isGlobalShared() ||
fs.isAllSocial() ||
fs.isInfrequent() ||
fs.isAllRead() ) {
menu.findItem(R.id.menu_search_stories).setVisible(false);
}
if ((!fs.isSingleNormal()) || fs.isFilterSaved()) {
menu.findItem(R.id.menu_notifications).setVisible(false);
menu.findItem(R.id.menu_delete_feed).setVisible(false);
menu.findItem(R.id.menu_instafetch_feed).setVisible(false);
menu.findItem(R.id.menu_intel).setVisible(false);
menu.findItem(R.id.menu_rename_feed).setVisible(false);
menu.findItem(R.id.menu_statistics).setVisible(false);
}
if (!fs.isInfrequent()) {
menu.findItem(R.id.menu_infrequent_cutoff).setVisible(false);
}
return true;
return contextMenuDelegate.onCreateMenuOptions(menu, getMenuInflater(), fs);
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
StoryOrder storyOrder = PrefsUtils.getStoryOrder(this, fs);
if (storyOrder == StoryOrder.NEWEST) {
menu.findItem(R.id.menu_story_order_newest).setChecked(true);
} else if (storyOrder == StoryOrder.OLDEST) {
menu.findItem(R.id.menu_story_order_oldest).setChecked(true);
}
ReadFilter readFilter = PrefsUtils.getReadFilter(this, fs);
if (readFilter == ReadFilter.ALL) {
menu.findItem(R.id.menu_read_filter_all_stories).setChecked(true);
} else if (readFilter == ReadFilter.UNREAD) {
menu.findItem(R.id.menu_read_filter_unread_only).setChecked(true);
}
StoryListStyle listStyle = PrefsUtils.getStoryListStyle(this, fs);
if (listStyle == StoryListStyle.GRID_F) {
menu.findItem(R.id.menu_list_style_grid_f).setChecked(true);
} else if (listStyle == StoryListStyle.GRID_M) {
menu.findItem(R.id.menu_list_style_grid_m).setChecked(true);
} else if (listStyle == StoryListStyle.GRID_C) {
menu.findItem(R.id.menu_list_style_grid_c).setChecked(true);
} else {
menu.findItem(R.id.menu_list_style_list).setChecked(true);
}
ThemeValue themeValue = PrefsUtils.getSelectedTheme(this);
if (themeValue == ThemeValue.LIGHT) {
menu.findItem(R.id.menu_theme_light).setChecked(true);
} else if (themeValue == ThemeValue.DARK) {
menu.findItem(R.id.menu_theme_dark).setChecked(true);
} else if (themeValue == ThemeValue.BLACK) {
menu.findItem(R.id.menu_theme_black).setChecked(true);
} else if (themeValue == ThemeValue.AUTO) {
menu.findItem(R.id.menu_theme_auto).setChecked(true);
}
if (!TextUtils.isEmpty(binding.itemlistSearchQuery.getText())) {
menu.findItem(R.id.menu_save_search).setVisible(true);
} else {
menu.findItem(R.id.menu_save_search).setVisible(false);
}
StoryContentPreviewStyle previewStyle = PrefsUtils.getStoryContentPreviewStyle(this);
if (previewStyle == StoryContentPreviewStyle.NONE) {
menu.findItem(R.id.menu_story_content_preview_none).setChecked(true);
} else if (previewStyle == StoryContentPreviewStyle.SMALL) {
menu.findItem(R.id.menu_story_content_preview_small).setChecked(true);
} else if (previewStyle == StoryContentPreviewStyle.MEDIUM) {
menu.findItem(R.id.menu_story_content_preview_medium).setChecked(true);
} else if (previewStyle == StoryContentPreviewStyle.LARGE) {
menu.findItem(R.id.menu_story_content_preview_large).setChecked(true);
}
ThumbnailStyle thumbnailStyle = PrefsUtils.getThumbnailStyle(this);
if (thumbnailStyle == ThumbnailStyle.LEFT_SMALL) {
menu.findItem(R.id.menu_story_thumbnail_left_small).setChecked(true);
} else if (thumbnailStyle == ThumbnailStyle.LEFT_LARGE) {
menu.findItem(R.id.menu_story_thumbnail_left_large).setChecked(true);
} else if (thumbnailStyle == ThumbnailStyle.RIGHT_SMALL) {
menu.findItem(R.id.menu_story_thumbnail_right_small).setChecked(true);
} else if (thumbnailStyle == ThumbnailStyle.RIGHT_LARGE) {
menu.findItem(R.id.menu_story_thumbnail_right_large).setChecked(true);
} else if (thumbnailStyle.isOff()) {
menu.findItem(R.id.menu_story_thumbnail_no_preview).setChecked(true);
}
SpacingStyle spacingStyle = PrefsUtils.getSpacingStyle(this);
if (spacingStyle == SpacingStyle.COMFORTABLE) {
menu.findItem(R.id.menu_spacing_comfortable).setChecked(true);
} else if (spacingStyle == SpacingStyle.COMPACT) {
menu.findItem(R.id.menu_spacing_compact).setChecked(true);
}
ListTextSize listTextSize = ListTextSize.fromSize(PrefsUtils.getListTextSize(this));
if (listTextSize == ListTextSize.XS) {
menu.findItem(R.id.menu_text_size_xs).setChecked(true);
} else if (listTextSize == ListTextSize.S) {
menu.findItem(R.id.menu_text_size_s).setChecked(true);
} else if (listTextSize == ListTextSize.M) {
menu.findItem(R.id.menu_text_size_m).setChecked(true);
} else if (listTextSize == ListTextSize.L) {
menu.findItem(R.id.menu_text_size_l).setChecked(true);
} else if (listTextSize == ListTextSize.XL) {
menu.findItem(R.id.menu_text_size_xl).setChecked(true);
} else if (listTextSize == ListTextSize.XXL) {
menu.findItem(R.id.menu_text_size_xxl).setChecked(true);
}
boolean isMarkReadOnScroll = PrefsUtils.isMarkReadOnFeedScroll(this);
if (isMarkReadOnScroll) {
menu.findItem(R.id.menu_mark_read_on_scroll_enabled).setChecked(true);
} else {
menu.findItem(R.id.menu_mark_read_on_scroll_disabled).setChecked(true);
}
return true;
}
super.onPrepareOptionsMenu(menu);
boolean showSavedSearch = !TextUtils.isEmpty(binding.itemlistSearchQuery.getText());
return contextMenuDelegate.onPrepareMenuOptions(menu, fs, showSavedSearch);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
finish();
return true;
} else if (item.getItemId() == R.id.menu_mark_all_as_read) {
feedUtils.markRead(this, fs, null, null, R.array.mark_all_read_options, true);
return true;
} else if (item.getItemId() == R.id.menu_story_order_newest) {
updateStoryOrder(StoryOrder.NEWEST);
return true;
} else if (item.getItemId() == R.id.menu_story_order_oldest) {
updateStoryOrder(StoryOrder.OLDEST);
return true;
} else if (item.getItemId() == R.id.menu_read_filter_all_stories) {
updateReadFilter(ReadFilter.ALL);
return true;
} else if (item.getItemId() == R.id.menu_read_filter_unread_only) {
updateReadFilter(ReadFilter.UNREAD);
return true;
} else if (item.getItemId() == R.id.menu_text_size_xs) {
updateTextSizeStyle(ListTextSize.XS);
return true;
} else if (item.getItemId() == R.id.menu_text_size_s) {
updateTextSizeStyle(ListTextSize.S);
return true;
} else if (item.getItemId() == R.id.menu_text_size_m) {
updateTextSizeStyle(ListTextSize.M);
return true;
} else if (item.getItemId() == R.id.menu_text_size_l) {
updateTextSizeStyle(ListTextSize.L);
return true;
} else if (item.getItemId() == R.id.menu_text_size_xl) {
updateTextSizeStyle(ListTextSize.XL);
return true;
} else if (item.getItemId() == R.id.menu_text_size_xxl) {
updateTextSizeStyle(ListTextSize.XXL);
return true;
} else if (item.getItemId() == R.id.menu_search_stories) {
if (binding.itemlistSearchQuery.getVisibility() != View.VISIBLE) {
binding.itemlistSearchQuery.setVisibility(View.VISIBLE);
binding.itemlistSearchQuery.requestFocus();
} else {
binding.itemlistSearchQuery.setVisibility(View.GONE);
checkSearchQuery();
}
} else if(item.getItemId() == R.id.menu_theme_auto) {
PrefsUtils.setSelectedTheme(this, ThemeValue.AUTO);
UIUtils.restartActivity(this);
} else if (item.getItemId() == R.id.menu_theme_light) {
PrefsUtils.setSelectedTheme(this, ThemeValue.LIGHT);
UIUtils.restartActivity(this);
} else if (item.getItemId() == R.id.menu_theme_dark) {
PrefsUtils.setSelectedTheme(this, ThemeValue.DARK);
UIUtils.restartActivity(this);
} else if (item.getItemId() == R.id.menu_theme_black) {
PrefsUtils.setSelectedTheme(this, ThemeValue.BLACK);
UIUtils.restartActivity(this);
} else if (item.getItemId() == R.id.menu_spacing_comfortable) {
updateSpacingStyle(SpacingStyle.COMFORTABLE);
} else if (item.getItemId() == R.id.menu_spacing_compact) {
updateSpacingStyle(SpacingStyle.COMPACT);
} else if (item.getItemId() == R.id.menu_list_style_list) {
PrefsUtils.updateStoryListStyle(this, fs, StoryListStyle.LIST);
itemSetFragment.updateListStyle();
} else if (item.getItemId() == R.id.menu_list_style_grid_f) {
PrefsUtils.updateStoryListStyle(this, fs, StoryListStyle.GRID_F);
itemSetFragment.updateListStyle();
} else if (item.getItemId() == R.id.menu_list_style_grid_m) {
PrefsUtils.updateStoryListStyle(this, fs, StoryListStyle.GRID_M);
itemSetFragment.updateListStyle();
} else if (item.getItemId() == R.id.menu_list_style_grid_c) {
PrefsUtils.updateStoryListStyle(this, fs, StoryListStyle.GRID_C);
itemSetFragment.updateListStyle();
} else if (item.getItemId() == R.id.menu_save_search) {
String feedId = getSaveSearchFeedId();
if (feedId != null) {
String query = binding.itemlistSearchQuery.getText().toString();
SaveSearchFragment frag = SaveSearchFragment.newInstance(feedId, query);
frag.show(getSupportFragmentManager(), SaveSearchFragment.class.getName());
}
} else if (item.getItemId() == R.id.menu_story_content_preview_none) {
PrefsUtils.setStoryContentPreviewStyle(this, StoryContentPreviewStyle.NONE);
itemSetFragment.notifyContentPrefsChanged();
} else if (item.getItemId() == R.id.menu_story_content_preview_small) {
PrefsUtils.setStoryContentPreviewStyle(this, StoryContentPreviewStyle.SMALL);
itemSetFragment.notifyContentPrefsChanged();
} else if (item.getItemId() == R.id.menu_story_content_preview_medium) {
PrefsUtils.setStoryContentPreviewStyle(this, StoryContentPreviewStyle.MEDIUM);
itemSetFragment.notifyContentPrefsChanged();
} else if (item.getItemId() == R.id.menu_story_content_preview_large) {
PrefsUtils.setStoryContentPreviewStyle(this, StoryContentPreviewStyle.LARGE);
itemSetFragment.notifyContentPrefsChanged();
} else if (item.getItemId() == R.id.menu_mark_read_on_scroll_disabled) {
PrefsUtils.setMarkReadOnScroll(this, false);
} else if (item.getItemId() == R.id.menu_mark_read_on_scroll_enabled) {
PrefsUtils.setMarkReadOnScroll(this, true);
} else if (item.getItemId() == R.id.menu_story_thumbnail_left_small) {
PrefsUtils.setThumbnailStyle(this, ThumbnailStyle.LEFT_SMALL);
itemSetFragment.updateThumbnailStyle();
} else if (item.getItemId() == R.id.menu_story_thumbnail_left_large) {
PrefsUtils.setThumbnailStyle(this, ThumbnailStyle.LEFT_LARGE);
itemSetFragment.updateThumbnailStyle();
} else if (item.getItemId() == R.id.menu_story_thumbnail_right_small) {
PrefsUtils.setThumbnailStyle(this, ThumbnailStyle.RIGHT_SMALL);
itemSetFragment.updateThumbnailStyle();
} else if (item.getItemId() == R.id.menu_story_thumbnail_right_large) {
PrefsUtils.setThumbnailStyle(this, ThumbnailStyle.RIGHT_LARGE);
itemSetFragment.updateThumbnailStyle();
} else if (item.getItemId() == R.id.menu_story_thumbnail_no_preview) {
PrefsUtils.setThumbnailStyle(this, ThumbnailStyle.OFF);
itemSetFragment.updateThumbnailStyle();
}
return false;
return contextMenuDelegate.onOptionsItemSelected(item, itemSetFragment, fs, binding.itemlistSearchQuery, getSaveSearchFeedId());
}
@Override
@ -511,26 +244,6 @@ public abstract class ItemsList extends NbActivity {
transaction.commit();
}
private void updateTextSizeStyle(ListTextSize listTextSize) {
PrefsUtils.setListTextSize(this, listTextSize.getSize());
itemSetFragment.updateTextSize();
}
private void updateSpacingStyle(SpacingStyle spacingStyle) {
PrefsUtils.setSpacingStyle(this, spacingStyle);
itemSetFragment.updateSpacingStyle();
}
private void updateStoryOrder(StoryOrder storyOrder) {
PrefsUtils.updateStoryOrder(this, fs, storyOrder);
restartReadingSession();
}
private void updateReadFilter(ReadFilter readFilter) {
PrefsUtils.updateReadFilter(this, fs, readFilter);
restartReadingSession();
}
protected void restartReadingSession() {
NBSyncService.resetFetchState(fs);
feedUtils.prepareReadingSession(fs, true);

View file

@ -268,7 +268,7 @@ public class Main extends NbActivity implements StateChangedListener, SwipeRefre
@Override
public boolean onMenuItemClick(MenuItem item) {
return contextMenuDelegate.onMenuItemClick(item, getSupportFragmentManager(), folderFeedList);
return contextMenuDelegate.onMenuItemClick(item, folderFeedList);
}
private void onClickAddButton() {

View file

@ -0,0 +1,312 @@
package com.newsblur.delegate
import android.view.Menu
import android.view.MenuInflater
import android.view.MenuItem
import android.view.View
import android.widget.EditText
import androidx.core.view.isVisible
import com.newsblur.R
import com.newsblur.activity.ItemsList
import com.newsblur.fragment.ItemSetFragment
import com.newsblur.fragment.SaveSearchFragment
import com.newsblur.service.NBSyncService
import com.newsblur.util.*
import com.newsblur.util.FeedUtils.Companion.triggerSync
import com.newsblur.util.ListTextSize.Companion.fromSize
import com.newsblur.util.PrefConstants.ThemeValue
interface ItemListContextMenuDelegate {
fun onCreateMenuOptions(menu: Menu, menuInflater: MenuInflater, fs: FeedSet): Boolean
fun onPrepareMenuOptions(menu: Menu, fs: FeedSet, showSavedSearch: Boolean): Boolean
fun onOptionsItemSelected(item: MenuItem, fragment: ItemSetFragment, fs: FeedSet, searchInputView: EditText, saveSearchFeedId: String?): Boolean
}
open class ItemListContextMenuDelegateImpl(
private val activity: ItemsList,
private val feedUtils: FeedUtils,
) : ItemListContextMenuDelegate {
override fun onCreateMenuOptions(menu: Menu, menuInflater: MenuInflater, fs: FeedSet): Boolean {
menuInflater.inflate(R.menu.itemslist, menu)
if (fs.isGlobalShared ||
fs.isAllSocial ||
fs.isFilterSaved ||
fs.isAllSaved ||
fs.isSingleSavedTag ||
fs.isInfrequent ||
fs.isAllRead) {
menu.findItem(R.id.menu_mark_all_as_read).isVisible = false
}
if (fs.isGlobalShared ||
fs.isAllSocial ||
fs.isAllRead) {
menu.findItem(R.id.menu_story_order).isVisible = false
}
if (fs.isGlobalShared ||
fs.isFilterSaved ||
fs.isAllSaved ||
fs.isSingleSavedTag ||
fs.isInfrequent ||
fs.isAllRead) {
menu.findItem(R.id.menu_read_filter).isVisible = false
menu.findItem(R.id.menu_mark_read_on_scroll).isVisible = false
menu.findItem(R.id.menu_story_content_preview_style).isVisible = false
menu.findItem(R.id.menu_story_thumbnail_style).isVisible = false
}
if (fs.isGlobalShared ||
fs.isAllSocial ||
fs.isInfrequent ||
fs.isAllRead) {
menu.findItem(R.id.menu_search_stories).isVisible = false
}
if (!fs.isSingleNormal || fs.isFilterSaved) {
menu.findItem(R.id.menu_notifications).isVisible = false
menu.findItem(R.id.menu_delete_feed).isVisible = false
menu.findItem(R.id.menu_instafetch_feed).isVisible = false
menu.findItem(R.id.menu_intel).isVisible = false
menu.findItem(R.id.menu_rename_feed).isVisible = false
menu.findItem(R.id.menu_statistics).isVisible = false
}
if (!fs.isInfrequent) {
menu.findItem(R.id.menu_infrequent_cutoff).isVisible = false
}
return true
}
override fun onPrepareMenuOptions(menu: Menu, fs: FeedSet, showSavedSearch: Boolean): Boolean {
val storyOrder = PrefsUtils.getStoryOrder(activity, fs)
if (storyOrder == StoryOrder.NEWEST) {
menu.findItem(R.id.menu_story_order_newest).isChecked = true
} else if (storyOrder == StoryOrder.OLDEST) {
menu.findItem(R.id.menu_story_order_oldest).isChecked = true
}
val readFilter = PrefsUtils.getReadFilter(activity, fs)
if (readFilter == ReadFilter.ALL) {
menu.findItem(R.id.menu_read_filter_all_stories).isChecked = true
} else if (readFilter == ReadFilter.UNREAD) {
menu.findItem(R.id.menu_read_filter_unread_only).isChecked = true
}
when (PrefsUtils.getStoryListStyle(activity, fs)) {
StoryListStyle.GRID_F -> menu.findItem(R.id.menu_list_style_grid_f).isChecked = true
StoryListStyle.GRID_M -> menu.findItem(R.id.menu_list_style_grid_m).isChecked = true
StoryListStyle.GRID_C -> menu.findItem(R.id.menu_list_style_grid_c).isChecked = true
else -> menu.findItem(R.id.menu_list_style_list).isChecked = true
}
when (PrefsUtils.getSelectedTheme(activity)) {
ThemeValue.LIGHT -> menu.findItem(R.id.menu_theme_light).isChecked = true
ThemeValue.DARK -> menu.findItem(R.id.menu_theme_dark).isChecked = true
ThemeValue.BLACK -> menu.findItem(R.id.menu_theme_black).isChecked = true
ThemeValue.AUTO -> menu.findItem(R.id.menu_theme_auto).isChecked = true
else -> Unit
}
if (showSavedSearch) {
menu.findItem(R.id.menu_save_search).isVisible = true
}
when (PrefsUtils.getStoryContentPreviewStyle(activity)) {
StoryContentPreviewStyle.NONE -> menu.findItem(R.id.menu_story_content_preview_none).isChecked = true
StoryContentPreviewStyle.SMALL -> menu.findItem(R.id.menu_story_content_preview_small).isChecked = true
StoryContentPreviewStyle.MEDIUM -> menu.findItem(R.id.menu_story_content_preview_medium).isChecked = true
StoryContentPreviewStyle.LARGE -> menu.findItem(R.id.menu_story_content_preview_large).isChecked = true
else -> Unit
}
when (PrefsUtils.getThumbnailStyle(activity)) {
ThumbnailStyle.LEFT_SMALL -> menu.findItem(R.id.menu_story_thumbnail_left_small).isChecked = true
ThumbnailStyle.LEFT_LARGE -> menu.findItem(R.id.menu_story_thumbnail_left_large).isChecked = true
ThumbnailStyle.RIGHT_SMALL -> menu.findItem(R.id.menu_story_thumbnail_right_small).isChecked = true
ThumbnailStyle.RIGHT_LARGE -> menu.findItem(R.id.menu_story_thumbnail_right_large).isChecked = true
ThumbnailStyle.OFF -> menu.findItem(R.id.menu_story_thumbnail_no_preview).isChecked = true
else -> Unit
}
val spacingStyle = PrefsUtils.getSpacingStyle(activity)
if (spacingStyle === SpacingStyle.COMFORTABLE) {
menu.findItem(R.id.menu_spacing_comfortable).isChecked = true
} else if (spacingStyle == SpacingStyle.COMPACT) {
menu.findItem(R.id.menu_spacing_compact).isChecked = true
}
when (fromSize(PrefsUtils.getListTextSize(activity))) {
ListTextSize.XS -> menu.findItem(R.id.menu_text_size_xs).isChecked = true
ListTextSize.S -> menu.findItem(R.id.menu_text_size_s).isChecked = true
ListTextSize.M -> menu.findItem(R.id.menu_text_size_m).isChecked = true
ListTextSize.L -> menu.findItem(R.id.menu_text_size_l).isChecked = true
ListTextSize.XL -> menu.findItem(R.id.menu_text_size_xl).isChecked = true
ListTextSize.XXL -> menu.findItem(R.id.menu_text_size_xxl).isChecked = true
}
val isMarkReadOnScroll = PrefsUtils.isMarkReadOnFeedScroll(activity)
if (isMarkReadOnScroll) {
menu.findItem(R.id.menu_mark_read_on_scroll_enabled).isChecked = true
} else {
menu.findItem(R.id.menu_mark_read_on_scroll_disabled).isChecked = true
}
return true
}
override fun onOptionsItemSelected(
item: MenuItem,
fragment: ItemSetFragment,
fs: FeedSet,
searchInputView: EditText,
saveSearchFeedId: String?,
): Boolean {
if (item.itemId == android.R.id.home) {
activity.finish()
return true
} else if (item.itemId == R.id.menu_mark_all_as_read) {
feedUtils.markRead(activity, fs, null, null, R.array.mark_all_read_options, true)
return true
} else if (item.itemId == R.id.menu_story_order_newest) {
updateStoryOrder(fragment, fs, StoryOrder.NEWEST)
return true
} else if (item.itemId == R.id.menu_story_order_oldest) {
updateStoryOrder(fragment, fs, StoryOrder.OLDEST)
return true
} else if (item.itemId == R.id.menu_read_filter_all_stories) {
updateReadFilter(fragment, fs, ReadFilter.ALL)
return true
} else if (item.itemId == R.id.menu_read_filter_unread_only) {
updateReadFilter(fragment, fs, ReadFilter.UNREAD)
return true
} else if (item.itemId == R.id.menu_text_size_xs) {
updateTextSizeStyle(fragment, ListTextSize.XS)
return true
} else if (item.itemId == R.id.menu_text_size_s) {
updateTextSizeStyle(fragment, ListTextSize.S)
return true
} else if (item.itemId == R.id.menu_text_size_m) {
updateTextSizeStyle(fragment, ListTextSize.M)
return true
} else if (item.itemId == R.id.menu_text_size_l) {
updateTextSizeStyle(fragment, ListTextSize.L)
return true
} else if (item.itemId == R.id.menu_text_size_xl) {
updateTextSizeStyle(fragment, ListTextSize.XL)
return true
} else if (item.itemId == R.id.menu_text_size_xxl) {
updateTextSizeStyle(fragment, ListTextSize.XXL)
return true
} else if (item.itemId == R.id.menu_search_stories) {
if (!searchInputView.isVisible) {
searchInputView.visibility = View.VISIBLE
searchInputView.requestFocus()
} else {
searchInputView.text.clear()
searchInputView.visibility = View.GONE
}
} else if (item.itemId == R.id.menu_theme_auto) {
PrefsUtils.setSelectedTheme(activity, ThemeValue.AUTO)
UIUtils.restartActivity(activity)
} else if (item.itemId == R.id.menu_theme_light) {
PrefsUtils.setSelectedTheme(activity, ThemeValue.LIGHT)
UIUtils.restartActivity(activity)
} else if (item.itemId == R.id.menu_theme_dark) {
PrefsUtils.setSelectedTheme(activity, ThemeValue.DARK)
UIUtils.restartActivity(activity)
} else if (item.itemId == R.id.menu_theme_black) {
PrefsUtils.setSelectedTheme(activity, ThemeValue.BLACK)
UIUtils.restartActivity(activity)
} else if (item.itemId == R.id.menu_spacing_comfortable) {
updateSpacingStyle(fragment, SpacingStyle.COMFORTABLE)
} else if (item.itemId == R.id.menu_spacing_compact) {
updateSpacingStyle(fragment, SpacingStyle.COMPACT)
} else if (item.itemId == R.id.menu_list_style_list) {
PrefsUtils.updateStoryListStyle(activity, fs, StoryListStyle.LIST)
fragment.updateListStyle()
} else if (item.itemId == R.id.menu_list_style_grid_f) {
PrefsUtils.updateStoryListStyle(activity, fs, StoryListStyle.GRID_F)
fragment.updateListStyle()
} else if (item.itemId == R.id.menu_list_style_grid_m) {
PrefsUtils.updateStoryListStyle(activity, fs, StoryListStyle.GRID_M)
fragment.updateListStyle()
} else if (item.itemId == R.id.menu_list_style_grid_c) {
PrefsUtils.updateStoryListStyle(activity, fs, StoryListStyle.GRID_C)
fragment.updateListStyle()
} else if (item.itemId == R.id.menu_save_search) {
saveSearchFeedId?.let {
val query: String = searchInputView.text.toString()
val frag = SaveSearchFragment.newInstance(it, query)
frag.show(activity.supportFragmentManager, SaveSearchFragment::class.java.name)
}
} else if (item.itemId == R.id.menu_story_content_preview_none) {
PrefsUtils.setStoryContentPreviewStyle(activity, StoryContentPreviewStyle.NONE)
fragment.notifyContentPrefsChanged()
} else if (item.itemId == R.id.menu_story_content_preview_small) {
PrefsUtils.setStoryContentPreviewStyle(activity, StoryContentPreviewStyle.SMALL)
fragment.notifyContentPrefsChanged()
} else if (item.itemId == R.id.menu_story_content_preview_medium) {
PrefsUtils.setStoryContentPreviewStyle(activity, StoryContentPreviewStyle.MEDIUM)
fragment.notifyContentPrefsChanged()
} else if (item.itemId == R.id.menu_story_content_preview_large) {
PrefsUtils.setStoryContentPreviewStyle(activity, StoryContentPreviewStyle.LARGE)
fragment.notifyContentPrefsChanged()
} else if (item.itemId == R.id.menu_mark_read_on_scroll_disabled) {
PrefsUtils.setMarkReadOnScroll(activity, false)
} else if (item.itemId == R.id.menu_mark_read_on_scroll_enabled) {
PrefsUtils.setMarkReadOnScroll(activity, true)
} else if (item.itemId == R.id.menu_story_thumbnail_left_small) {
PrefsUtils.setThumbnailStyle(activity, ThumbnailStyle.LEFT_SMALL)
fragment.updateThumbnailStyle()
} else if (item.itemId == R.id.menu_story_thumbnail_left_large) {
PrefsUtils.setThumbnailStyle(activity, ThumbnailStyle.LEFT_LARGE)
fragment.updateThumbnailStyle()
} else if (item.itemId == R.id.menu_story_thumbnail_right_small) {
PrefsUtils.setThumbnailStyle(activity, ThumbnailStyle.RIGHT_SMALL)
fragment.updateThumbnailStyle()
} else if (item.itemId == R.id.menu_story_thumbnail_right_large) {
PrefsUtils.setThumbnailStyle(activity, ThumbnailStyle.RIGHT_LARGE)
fragment.updateThumbnailStyle()
} else if (item.itemId == R.id.menu_story_thumbnail_no_preview) {
PrefsUtils.setThumbnailStyle(activity, ThumbnailStyle.OFF)
fragment.updateThumbnailStyle()
}
return false
}
private fun updateTextSizeStyle(fragment: ItemSetFragment, listTextSize: ListTextSize) {
PrefsUtils.setListTextSize(activity, listTextSize.size)
fragment.updateTextSize()
}
private fun updateSpacingStyle(fragment: ItemSetFragment, spacingStyle: SpacingStyle) {
PrefsUtils.setSpacingStyle(activity, spacingStyle)
fragment.updateSpacingStyle()
}
private fun updateStoryOrder(fragment: ItemSetFragment, fs: FeedSet, storyOrder: StoryOrder) {
PrefsUtils.updateStoryOrder(activity, fs, storyOrder)
restartReadingSession(fragment, fs)
}
private fun updateReadFilter(fragment: ItemSetFragment, fs: FeedSet, readFilter: ReadFilter) {
PrefsUtils.updateReadFilter(activity, fs, readFilter)
restartReadingSession(fragment, fs)
}
private fun restartReadingSession(fragment: ItemSetFragment, fs: FeedSet) {
NBSyncService.resetFetchState(fs)
feedUtils.prepareReadingSession(fs, true)
triggerSync(activity)
fragment.resetEmptyState()
fragment.hasUpdated()
fragment.scrollToTop()
}
}

View file

@ -7,7 +7,6 @@ import android.view.MenuItem
import android.view.View
import androidx.appcompat.widget.PopupMenu
import androidx.fragment.app.DialogFragment
import androidx.fragment.app.FragmentManager
import com.newsblur.R
import com.newsblur.activity.*
import com.newsblur.database.BlurDatabaseHelper
@ -27,7 +26,7 @@ interface MainContextMenuDelegate {
fun onMenuClick(anchor: View, listener: PopupMenu.OnMenuItemClickListener)
fun onMenuItemClick(item: MenuItem, fragmentManager: FragmentManager, fragment: FolderListFragment): Boolean
fun onMenuItemClick(item: MenuItem, fragment: FolderListFragment): Boolean
}
class MainContextMenuDelegateImpl(
@ -76,10 +75,10 @@ class MainContextMenuDelegateImpl(
pm.show()
}
override fun onMenuItemClick(item: MenuItem, fragmentManager: FragmentManager, fragment: FolderListFragment): Boolean = when (item.itemId) {
override fun onMenuItemClick(item: MenuItem, fragment: FolderListFragment): Boolean = when (item.itemId) {
R.id.menu_logout -> {
val newFragment: DialogFragment = LogoutDialogFragment()
newFragment.show(fragmentManager, "dialog")
newFragment.show(activity.supportFragmentManager, "dialog")
true
}
R.id.menu_settings -> {
@ -140,7 +139,7 @@ class MainContextMenuDelegateImpl(
}
R.id.menu_loginas -> {
val newFragment: DialogFragment = LoginAsDialogFragment()
newFragment.show(fragmentManager, "dialog")
newFragment.show(activity.supportFragmentManager, "dialog")
true
}
R.id.menu_theme_auto -> {