mirror of
https://github.com/viq/NewsBlur.git
synced 2025-09-18 21:43:31 +00:00
#1678 Reading font menu
This commit is contained in:
parent
013694c539
commit
8ef65aefa5
7 changed files with 72 additions and 168 deletions
|
@ -1,46 +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_anonymous"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:text="@string/anonymous_pro_font"/>
|
|
||||||
<RadioButton android:id="@+id/radio_chronicle"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:text="@string/chronicle_font"/>
|
|
||||||
<RadioButton android:id="@+id/radio_default"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:text="@string/default_font"/>
|
|
||||||
<RadioButton android:id="@+id/radio_gotham"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:text="@string/gotham_narrow_font"/>
|
|
||||||
<RadioButton android:id="@+id/radio_noto_sans"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:text="@string/noto_sans_font"/>
|
|
||||||
<RadioButton android:id="@+id/radio_noto_serif"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:text="@string/noto_serif_font"/>
|
|
||||||
<RadioButton android:id="@+id/radio_open_sans_condensed"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:text="@string/open_sans_condensed_font"/>
|
|
||||||
<RadioButton android:id="@+id/radio_roboto"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:text="@string/roboto_font"/>
|
|
||||||
|
|
||||||
</RadioGroup>
|
|
|
@ -44,8 +44,29 @@
|
||||||
|
|
||||||
<item
|
<item
|
||||||
android:id="@+id/menu_font"
|
android:id="@+id/menu_font"
|
||||||
app:showAsAction="never"
|
android:title="@string/menu_font"
|
||||||
android:title="@string/menu_font"/>
|
app:showAsAction="never">
|
||||||
|
<menu>
|
||||||
|
<group android:checkableBehavior="single">
|
||||||
|
<item android:id="@+id/menu_font_anonymous"
|
||||||
|
android:title="@string/anonymous_pro_font" />
|
||||||
|
<item android:id="@+id/menu_font_chronicle"
|
||||||
|
android:title="@string/chronicle_font" />
|
||||||
|
<item android:id="@+id/menu_font_default"
|
||||||
|
android:title="@string/default_font" />
|
||||||
|
<item android:id="@+id/menu_font_gotham"
|
||||||
|
android:title="@string/gotham_narrow_font" />
|
||||||
|
<item android:id="@+id/menu_font_noto_sand"
|
||||||
|
android:title="@string/noto_sans_font" />
|
||||||
|
<item android:id="@+id/menu_font_noto_serif"
|
||||||
|
android:title="@string/noto_serif_font" />
|
||||||
|
<item android:id="@+id/menu_font_open_sans"
|
||||||
|
android:title="@string/open_sans_condensed_font" />
|
||||||
|
<item android:id="@+id/menu_font_roboto"
|
||||||
|
android:title="@string/roboto_font" />
|
||||||
|
</group>
|
||||||
|
</menu>
|
||||||
|
</item>
|
||||||
|
|
||||||
<item
|
<item
|
||||||
android:id="@+id/menu_reading_save"
|
android:id="@+id/menu_reading_save"
|
||||||
|
|
|
@ -136,7 +136,7 @@
|
||||||
<string name="menu_delete_saved_search">Delete saved search</string>
|
<string name="menu_delete_saved_search">Delete saved search</string>
|
||||||
<string name="menu_unfollow">Unfollow user</string>
|
<string name="menu_unfollow">Unfollow user</string>
|
||||||
<string name="menu_choose_folders">Choose folders</string>
|
<string name="menu_choose_folders">Choose folders</string>
|
||||||
<string name="menu_notifications_choose">Notifications…</string>
|
<string name="menu_notifications_choose">Notifications</string>
|
||||||
<string name="menu_notifications_disable">Disable notifications</string>
|
<string name="menu_notifications_disable">Disable notifications</string>
|
||||||
<string name="menu_notifications_focus">Notify on new focus stories</string>
|
<string name="menu_notifications_focus">Notify on new focus stories</string>
|
||||||
<string name="menu_notifications_unread">Notify on all new stories</string>
|
<string name="menu_notifications_unread">Notify on all new stories</string>
|
||||||
|
@ -149,7 +149,7 @@
|
||||||
<string name="menu_text_size_l">L</string>
|
<string name="menu_text_size_l">L</string>
|
||||||
<string name="menu_text_size_xl">XL</string>
|
<string name="menu_text_size_xl">XL</string>
|
||||||
<string name="menu_text_size_xxl">XXL</string>
|
<string name="menu_text_size_xxl">XXL</string>
|
||||||
<string name="menu_font">Change font</string>
|
<string name="menu_font">Font</string>
|
||||||
<string name="menu_save_story">Save this story</string>
|
<string name="menu_save_story">Save this story</string>
|
||||||
<string name="menu_unsave_story">Unsave this story</string>
|
<string name="menu_unsave_story">Unsave this story</string>
|
||||||
<string name="menu_newest_mark_older_stories_as_read">\u21E3 Mark older as read</string>
|
<string name="menu_newest_mark_older_stories_as_read">\u21E3 Mark older as read</string>
|
||||||
|
@ -169,7 +169,7 @@
|
||||||
<string name="menu_infrequent_cutoff">Infrequent stories per month</string>
|
<string name="menu_infrequent_cutoff">Infrequent stories per month</string>
|
||||||
<string name="menu_intel">Intelligence trainer</string>
|
<string name="menu_intel">Intelligence trainer</string>
|
||||||
<string name="menu_rename_feed">Rename feed</string>
|
<string name="menu_rename_feed">Rename feed</string>
|
||||||
<string name="menu_story_list_style_choose">List style…</string>
|
<string name="menu_story_list_style_choose">List style</string>
|
||||||
<string name="menu_save_search">Save Search</string>
|
<string name="menu_save_search">Save Search</string>
|
||||||
<string name="menu_web_search">Web search</string>
|
<string name="menu_web_search">Web search</string>
|
||||||
<string name="list_style_list">List</string>
|
<string name="list_style_list">List</string>
|
||||||
|
|
|
@ -42,8 +42,7 @@ import javax.inject.Inject
|
||||||
import kotlin.math.abs
|
import kotlin.math.abs
|
||||||
|
|
||||||
@AndroidEntryPoint
|
@AndroidEntryPoint
|
||||||
abstract class Reading : NbActivity(), OnPageChangeListener,
|
abstract class Reading : NbActivity(), OnPageChangeListener, ScrollChangeListener {
|
||||||
ScrollChangeListener, ReadingFontChangedListener {
|
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
lateinit var feedUtils: FeedUtils
|
lateinit var feedUtils: FeedUtils
|
||||||
|
@ -577,11 +576,6 @@ abstract class Reading : NbActivity(), OnPageChangeListener,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun readingFontChanged(newValue: String) {
|
|
||||||
PrefsUtils.setFontString(this, newValue)
|
|
||||||
sendBroadcast(Intent(ReadingItemFragment.READING_FONT_CHANGED))
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Click handler for the righthand overlay nav button.
|
* Click handler for the righthand overlay nav button.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -1,84 +0,0 @@
|
||||||
package com.newsblur.fragment;
|
|
||||||
|
|
||||||
import android.os.Bundle;
|
|
||||||
import android.view.Gravity;
|
|
||||||
import android.view.LayoutInflater;
|
|
||||||
import android.view.View;
|
|
||||||
import android.view.ViewGroup;
|
|
||||||
import android.view.Window;
|
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
import androidx.annotation.Nullable;
|
|
||||||
import androidx.fragment.app.DialogFragment;
|
|
||||||
|
|
||||||
import com.newsblur.R;
|
|
||||||
import com.newsblur.databinding.ReadingfontDialogBinding;
|
|
||||||
import com.newsblur.util.ReadingFontChangedListener;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Created by mark on 02/05/2017.
|
|
||||||
*/
|
|
||||||
|
|
||||||
public class ReadingFontDialogFragment extends DialogFragment {
|
|
||||||
|
|
||||||
private static final String SELECTED_FONT = "selectedFont";
|
|
||||||
|
|
||||||
private String currentValue;
|
|
||||||
|
|
||||||
private ReadingfontDialogBinding binding;
|
|
||||||
|
|
||||||
public static ReadingFontDialogFragment newInstance(String selectedFont) {
|
|
||||||
ReadingFontDialogFragment dialog = new ReadingFontDialogFragment();
|
|
||||||
Bundle args = new Bundle();
|
|
||||||
args.putString(SELECTED_FONT, selectedFont);
|
|
||||||
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 = getArguments().getString(SELECTED_FONT);
|
|
||||||
View v = inflater.inflate(R.layout.readingfont_dialog, null);
|
|
||||||
binding = ReadingfontDialogBinding.bind(v);
|
|
||||||
|
|
||||||
binding.radioAnonymous.setChecked(currentValue.equals(getString(R.string.anonymous_pro_font_prefvalue)));
|
|
||||||
binding.radioChronicle.setChecked(currentValue.equals(getString(R.string.chronicle_font_prefvalue)));
|
|
||||||
binding.radioDefault.setChecked(currentValue.equals(getString(R.string.default_font_prefvalue)) ||
|
|
||||||
currentValue.equals(getString(R.string.whitney_font_prefvalue)));
|
|
||||||
binding.radioGotham.setChecked(currentValue.equals(getString(R.string.gotham_narrow_font_prefvalue)));
|
|
||||||
binding.radioNotoSans.setChecked(currentValue.equals(getString(R.string.noto_sans_font_prefvalue)));
|
|
||||||
binding.radioNotoSerif.setChecked(currentValue.equals(getString(R.string.noto_serif_font_prefvalue)));
|
|
||||||
binding.radioOpenSansCondensed.setChecked(currentValue.equals(getString(R.string.open_sans_condensed_font_prefvalue)));
|
|
||||||
binding.radioRoboto.setChecked(currentValue.equals(getString(R.string.roboto_font_prefvalue)));
|
|
||||||
|
|
||||||
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.radioAnonymous.setOnClickListener(v -> switchFont(getString(R.string.anonymous_pro_font_prefvalue)));
|
|
||||||
binding.radioDefault.setOnClickListener(v -> switchFont(getString(R.string.default_font_prefvalue)));
|
|
||||||
binding.radioChronicle.setOnClickListener(v -> switchFont(getString(R.string.chronicle_font_prefvalue)));
|
|
||||||
binding.radioGotham.setOnClickListener(v -> switchFont(getString(R.string.gotham_narrow_font_prefvalue)));
|
|
||||||
binding.radioNotoSans.setOnClickListener(v -> switchFont(getString(R.string.noto_sans_font_prefvalue)));
|
|
||||||
binding.radioNotoSerif.setOnClickListener(v -> switchFont(getString(R.string.noto_serif_font_prefvalue)));
|
|
||||||
binding.radioOpenSansCondensed.setOnClickListener(v -> switchFont(getString(R.string.open_sans_condensed_font_prefvalue)));
|
|
||||||
binding.radioRoboto.setOnClickListener(v -> switchFont(getString(R.string.roboto_font_prefvalue)));
|
|
||||||
}
|
|
||||||
|
|
||||||
private void switchFont(String newValue) {
|
|
||||||
if (!currentValue.equals(newValue)) {
|
|
||||||
((ReadingFontChangedListener) getActivity()).readingFontChanged(newValue);
|
|
||||||
currentValue = newValue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -40,7 +40,6 @@ import com.newsblur.service.OriginalTextService
|
||||||
import com.newsblur.util.*
|
import com.newsblur.util.*
|
||||||
import com.newsblur.util.PrefConstants.ThemeValue
|
import com.newsblur.util.PrefConstants.ThemeValue
|
||||||
import dagger.hilt.android.AndroidEntryPoint
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import java.util.*
|
|
||||||
import java.util.regex.Pattern
|
import java.util.regex.Pattern
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
import kotlin.math.roundToInt
|
import kotlin.math.roundToInt
|
||||||
|
@ -76,7 +75,6 @@ class ReadingItemFragment : NbFragment(), PopupMenu.OnMenuItemClickListener {
|
||||||
private var feedIconUrl: String? = null
|
private var feedIconUrl: String? = null
|
||||||
private var faviconText: String? = null
|
private var faviconText: String? = null
|
||||||
private var classifier: Classifier? = null
|
private var classifier: Classifier? = null
|
||||||
private var readingFontReceiver: BroadcastReceiver? = null
|
|
||||||
private var displayFeedDetails = false
|
private var displayFeedDetails = false
|
||||||
private var user: UserDetails? = null
|
private var user: UserDetails? = null
|
||||||
|
|
||||||
|
@ -128,9 +126,6 @@ class ReadingItemFragment : NbFragment(), PopupMenu.OnMenuItemClickListener {
|
||||||
user = PrefsUtils.getUserDetails(requireContext())
|
user = PrefsUtils.getUserDetails(requireContext())
|
||||||
markStoryReadBehavior = PrefsUtils.getMarkStoryReadBehavior(requireContext())
|
markStoryReadBehavior = PrefsUtils.getMarkStoryReadBehavior(requireContext())
|
||||||
|
|
||||||
readingFontReceiver = ReadingFontReceiver()
|
|
||||||
requireActivity().registerReceiver(readingFontReceiver, IntentFilter(READING_FONT_CHANGED))
|
|
||||||
|
|
||||||
if (markStoryReadBehavior == MarkStoryReadBehavior.IMMEDIATELY) {
|
if (markStoryReadBehavior == MarkStoryReadBehavior.IMMEDIATELY) {
|
||||||
sampledQueue = SampledQueue(250, 5)
|
sampledQueue = SampledQueue(250, 5)
|
||||||
}
|
}
|
||||||
|
@ -153,7 +148,6 @@ class ReadingItemFragment : NbFragment(), PopupMenu.OnMenuItemClickListener {
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onDestroy() {
|
override fun onDestroy() {
|
||||||
requireActivity().unregisterReceiver(readingFontReceiver)
|
|
||||||
binding.readingWebview.setOnTouchListener(null)
|
binding.readingWebview.setOnTouchListener(null)
|
||||||
binding.root.setOnTouchListener(null)
|
binding.root.setOnTouchListener(null)
|
||||||
requireActivity().window.decorView.setOnSystemUiVisibilityChangeListener(null)
|
requireActivity().window.decorView.setOnSystemUiVisibilityChangeListener(null)
|
||||||
|
@ -288,6 +282,17 @@ class ReadingItemFragment : NbFragment(), PopupMenu.OnMenuItemClickListener {
|
||||||
ReadingTextSize.XXL -> menu.findItem(R.id.menu_text_size_xxl).isChecked = true
|
ReadingTextSize.XXL -> menu.findItem(R.id.menu_text_size_xxl).isChecked = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
when (Font.getFont(PrefsUtils.getFontString(requireContext()))) {
|
||||||
|
Font.ANONYMOUS_PRO -> menu.findItem(R.id.menu_font_anonymous).isChecked = true
|
||||||
|
Font.CHRONICLE -> menu.findItem(R.id.menu_font_chronicle).isChecked = true
|
||||||
|
Font.DEFAULT -> menu.findItem(R.id.menu_font_default).isChecked = true
|
||||||
|
Font.GOTHAM_NARROW -> menu.findItem(R.id.menu_font_gotham).isChecked = true
|
||||||
|
Font.NOTO_SANS -> menu.findItem(R.id.menu_font_noto_sand).isChecked = true
|
||||||
|
Font.NOTO_SERIF -> menu.findItem(R.id.menu_font_noto_serif).isChecked = true
|
||||||
|
Font.OPEN_SANS_CONDENSED -> menu.findItem(R.id.menu_font_open_sans).isChecked = true
|
||||||
|
Font.ROBOTO -> menu.findItem(R.id.menu_font_roboto).isChecked = true
|
||||||
|
}
|
||||||
|
|
||||||
pm.setOnMenuItemClickListener(this)
|
pm.setOnMenuItemClickListener(this)
|
||||||
pm.show()
|
pm.show()
|
||||||
}
|
}
|
||||||
|
@ -342,9 +347,36 @@ class ReadingItemFragment : NbFragment(), PopupMenu.OnMenuItemClickListener {
|
||||||
setTextSizeStyle(ReadingTextSize.XXL)
|
setTextSizeStyle(ReadingTextSize.XXL)
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
R.id.menu_font -> {
|
R.id.menu_font_anonymous -> {
|
||||||
val storyFont = ReadingFontDialogFragment.newInstance(PrefsUtils.getFontString(requireContext()))
|
setReadingFont(getString(R.string.anonymous_pro_font_prefvalue))
|
||||||
storyFont.show(requireActivity().supportFragmentManager, ReadingFontDialogFragment::class.java.name)
|
true
|
||||||
|
}
|
||||||
|
R.id.menu_font_chronicle -> {
|
||||||
|
setReadingFont(getString(R.string.chronicle_font_prefvalue))
|
||||||
|
true
|
||||||
|
}
|
||||||
|
R.id.menu_font_default -> {
|
||||||
|
setReadingFont(getString(R.string.default_font_prefvalue))
|
||||||
|
true
|
||||||
|
}
|
||||||
|
R.id.menu_font_gotham -> {
|
||||||
|
setReadingFont(getString(R.string.gotham_narrow_font_prefvalue))
|
||||||
|
true
|
||||||
|
}
|
||||||
|
R.id.menu_font_noto_sand -> {
|
||||||
|
setReadingFont(getString(R.string.noto_sans_font_prefvalue))
|
||||||
|
true
|
||||||
|
}
|
||||||
|
R.id.menu_font_noto_serif -> {
|
||||||
|
setReadingFont(getString(R.string.noto_serif_font_prefvalue))
|
||||||
|
true
|
||||||
|
}
|
||||||
|
R.id.menu_font_open_sans -> {
|
||||||
|
setReadingFont(getString(R.string.open_sans_condensed_font_prefvalue))
|
||||||
|
true
|
||||||
|
}
|
||||||
|
R.id.menu_font_roboto -> {
|
||||||
|
setReadingFont(getString(R.string.roboto_font_prefvalue))
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
R.id.menu_reading_save -> {
|
R.id.menu_reading_save -> {
|
||||||
|
@ -958,17 +990,14 @@ class ReadingItemFragment : NbFragment(), PopupMenu.OnMenuItemClickListener {
|
||||||
binding.readingWebview.setTextSize(textSize)
|
binding.readingWebview.setTextSize(textSize)
|
||||||
}
|
}
|
||||||
|
|
||||||
private inner class ReadingFontReceiver : BroadcastReceiver() {
|
private fun setReadingFont(font: String) {
|
||||||
|
PrefsUtils.setFontString(requireContext(), font)
|
||||||
override fun onReceive(context: Context, intent: Intent) {
|
contentHash = 0 // Force reload since content hasn't changed
|
||||||
contentHash = 0 // Force reload since content hasn't changed
|
reloadStoryContent()
|
||||||
reloadStoryContent()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private const val BUNDLE_SCROLL_POS_REL = "scrollStateRel"
|
private const val BUNDLE_SCROLL_POS_REL = "scrollStateRel"
|
||||||
const val READING_FONT_CHANGED = "readingFontChanged"
|
|
||||||
|
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
fun newInstance(story: Story?, feedTitle: String?, feedFaviconColor: String?, feedFaviconFade: String?, feedFaviconBorder: String?, faviconText: String?, faviconUrl: String?, classifier: Classifier?, displayFeedDetails: Boolean, sourceUserId: String?): ReadingItemFragment {
|
fun newInstance(story: Story?, feedTitle: String?, feedFaviconColor: String?, feedFaviconFade: String?, feedFaviconBorder: String?, faviconText: String?, faviconUrl: String?, classifier: Classifier?, displayFeedDetails: Boolean, sourceUserId: String?): ReadingItemFragment {
|
||||||
|
|
|
@ -1,10 +0,0 @@
|
||||||
package com.newsblur.util;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Created by mark on 02/05/2017.
|
|
||||||
*/
|
|
||||||
|
|
||||||
public interface ReadingFontChangedListener {
|
|
||||||
|
|
||||||
void readingFontChanged(String newValue);
|
|
||||||
}
|
|
Loading…
Add table
Reference in a new issue