mirror of
https://github.com/samuelclay/NewsBlur.git
synced 2025-09-18 21:50:56 +00:00
Item list context menu delegate
This commit is contained in:
parent
49b301c7ce
commit
b88906404c
4 changed files with 330 additions and 306 deletions
|
@ -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);
|
||||
|
|
|
@ -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() {
|
||||
|
|
|
@ -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()
|
||||
}
|
||||
}
|
|
@ -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 -> {
|
||||
|
|
Loading…
Add table
Reference in a new issue