#1678 Read filter menu

This commit is contained in:
Andrei 2022-05-14 15:07:02 -07:00
parent 5df7662433
commit 013694c539
7 changed files with 30 additions and 136 deletions

View file

@ -1,23 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<RadioGroup xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|center_horizontal"
android:orientation="vertical"
android:layout_marginTop="10dp"
android:paddingLeft="25dip"
android:paddingRight="25dip"
android:paddingBottom="10dip"
android:paddingTop="10dip"
>
<RadioButton android:id="@+id/radio_all"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/all_stories"/>
<RadioButton android:id="@+id/radio_unread"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/unread_only"/>
</RadioGroup>

View file

@ -20,7 +20,16 @@
</item>
<item android:id="@+id/menu_read_filter"
android:title="@string/menu_read_filter"
app:showAsAction="never" />
app:showAsAction="never">
<menu>
<group android:checkableBehavior="single">
<item android:id="@+id/menu_read_filter_all_stories"
android:title="@string/all_stories" />
<item android:id="@+id/menu_read_filter_unread_only"
android:title="@string/unread_only" />
</group>
</menu>
</item>
<item android:id="@+id/menu_mark_read_on_scroll"
android:title="@string/menu_mark_read_on_scroll"
app:showAsAction="never" >

View file

@ -411,7 +411,8 @@
<string name="menu_story_content_preview">Story content preview</string>
<string name="menu_story_thumbnail_preview">Thumbnail preview</string>
<string name="menu_mark_read_on_scroll">Mark read on scroll</string>
<string name="menu_read_filter">Read story filter…</string>
<string name="settings_read_filter">Read story filter…</string>
<string name="menu_read_filter">Read story filter</string>
<string-array name="default_read_filter_entries">
<item>@string/all_stories</item>
<item>@string/unread_only</item>

View file

@ -69,13 +69,13 @@
<ListPreference
android:key="default_story_order"
android:title="@string/settings_story_order"
android:dialogTitle="@string/settings_story_order"
android:dialogTitle="@string/menu_story_order"
android:entries="@array/default_story_order_entries"
android:entryValues="@array/default_story_order_values"
android:defaultValue="@string/default_story_order_value" />
<ListPreference
android:key="default_read_filter"
android:title="@string/menu_read_filter"
android:title="@string/settings_read_filter"
android:dialogTitle="@string/menu_read_filter"
android:entries="@array/default_read_filter_entries"
android:entryValues="@array/default_read_filter_values"

View file

@ -20,7 +20,6 @@ import com.newsblur.database.BlurDatabaseHelper;
import com.newsblur.databinding.ActivityItemslistBinding;
import com.newsblur.di.IconLoader;
import com.newsblur.fragment.ItemSetFragment;
import com.newsblur.fragment.ReadFilterDialogFragment;
import com.newsblur.fragment.SaveSearchFragment;
import com.newsblur.service.NBSyncService;
import com.newsblur.util.AppConstants;
@ -30,7 +29,6 @@ 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.ReadFilterChangedListener;
import com.newsblur.util.SpacingStyle;
import com.newsblur.util.StateFilter;
import com.newsblur.util.StoryContentPreviewStyle;
@ -45,7 +43,7 @@ import javax.inject.Inject;
import dagger.hilt.android.AndroidEntryPoint;
@AndroidEntryPoint
public abstract class ItemsList extends NbActivity implements ReadFilterChangedListener {
public abstract class ItemsList extends NbActivity {
@Inject
BlurDatabaseHelper dbHelper;
@ -61,7 +59,6 @@ public abstract class ItemsList extends NbActivity implements ReadFilterChangedL
public static final String EXTRA_STORY_HASH = "story_hash";
public static final String EXTRA_WIDGET_STORY = "widget_story";
public static final String EXTRA_VISIBLE_SEARCH = "visibleSearch";
private static final String READ_FILTER = "readFilter";
private static final String BUNDLE_ACTIVE_SEARCH_QUERY = "activeSearchQuery";
private ActivityItemslistBinding binding;
@ -236,6 +233,13 @@ public abstract class ItemsList extends NbActivity implements ReadFilterChangedL
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);
@ -334,12 +338,13 @@ public abstract class ItemsList extends NbActivity implements ReadFilterChangedL
} else if (item.getItemId() == R.id.menu_story_order_oldest) {
updateStoryOrder(StoryOrder.OLDEST);
return true;
} else if (item.getItemId() == R.id.menu_read_filter) {
ReadFilter currentValue = getReadFilter();
ReadFilterDialogFragment readFilter = ReadFilterDialogFragment.newInstance(currentValue);
readFilter.show(getSupportFragmentManager(), READ_FILTER);
} else if (item.getItemId() == R.id.menu_read_filter_all_stories) {
updateReadFilter(ReadFilter.ALL);
return true;
} else if (item.getItemId() == R.id.menu_text_size_xs) {
} 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) {
@ -435,14 +440,6 @@ public abstract class ItemsList extends NbActivity implements ReadFilterChangedL
return false;
}
private ReadFilter getReadFilter() {
return PrefsUtils.getReadFilter(this, fs);
}
private void updateReadFilterPreference(ReadFilter newValue) {
PrefsUtils.updateReadFilter(this, fs, newValue);
}
@Override
public void handleUpdate(int updateType) {
@ -530,9 +527,8 @@ public abstract class ItemsList extends NbActivity implements ReadFilterChangedL
restartReadingSession();
}
@Override
public void readFilterChanged(ReadFilter newValue) {
updateReadFilterPreference(newValue);
private void updateReadFilter(ReadFilter readFilter) {
PrefsUtils.updateReadFilter(this, fs, readFilter);
restartReadingSession();
}

View file

@ -1,84 +0,0 @@
package com.newsblur.fragment;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.DialogFragment;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import com.newsblur.R;
import com.newsblur.databinding.ReadfilterDialogBinding;
import com.newsblur.util.ReadFilter;
import com.newsblur.util.ReadFilterChangedListener;
public class ReadFilterDialogFragment extends DialogFragment {
private static String CURRENT_FILTER = "currentFilter";
private ReadFilter currentValue;
private ReadfilterDialogBinding binding;
public static ReadFilterDialogFragment newInstance(ReadFilter currentValue) {
ReadFilterDialogFragment dialog = new ReadFilterDialogFragment();
Bundle args = new Bundle();
args.putSerializable(CURRENT_FILTER, currentValue);
dialog.setArguments(args);
return dialog;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle bundle) {
currentValue = (ReadFilter) getArguments().getSerializable(CURRENT_FILTER);
View v = inflater.inflate(R.layout.readfilter_dialog, null);
binding = ReadfilterDialogBinding.bind(v);
binding.radioAll.setChecked(currentValue == ReadFilter.ALL);
binding.radioUnread.setChecked(currentValue == ReadFilter.UNREAD);
getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE);
getDialog().getWindow().getAttributes().gravity = Gravity.BOTTOM;
return v;
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
binding.radioAll.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
selectAll();
}
});
binding.radioUnread.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
selectUnread();
}
});
}
private void selectAll() {
if (currentValue != ReadFilter.ALL) {
((ReadFilterChangedListener) getActivity()).readFilterChanged(ReadFilter.ALL);
}
dismiss();
}
private void selectUnread() {
if (currentValue != ReadFilter.UNREAD) {
((ReadFilterChangedListener) getActivity()).readFilterChanged(ReadFilter.UNREAD);
}
dismiss();
}
}

View file

@ -1,5 +0,0 @@
package com.newsblur.util;
public interface ReadFilterChangedListener {
void readFilterChanged(ReadFilter newValue);
}