#1678 Reading font menu

This commit is contained in:
Andrei 2022-05-16 21:04:16 -07:00
parent 013694c539
commit 8ef65aefa5
7 changed files with 72 additions and 168 deletions

View file

@ -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>

View file

@ -44,8 +44,29 @@
<item
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
android:id="@+id/menu_reading_save"

View file

@ -136,7 +136,7 @@
<string name="menu_delete_saved_search">Delete saved search</string>
<string name="menu_unfollow">Unfollow user</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_focus">Notify on new focus 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_xl">XL</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_unsave_story">Unsave this story</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_intel">Intelligence trainer</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_web_search">Web search</string>
<string name="list_style_list">List</string>

View file

@ -42,8 +42,7 @@ import javax.inject.Inject
import kotlin.math.abs
@AndroidEntryPoint
abstract class Reading : NbActivity(), OnPageChangeListener,
ScrollChangeListener, ReadingFontChangedListener {
abstract class Reading : NbActivity(), OnPageChangeListener, ScrollChangeListener {
@Inject
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.
*/

View file

@ -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;
}
}
}

View file

@ -40,7 +40,6 @@ import com.newsblur.service.OriginalTextService
import com.newsblur.util.*
import com.newsblur.util.PrefConstants.ThemeValue
import dagger.hilt.android.AndroidEntryPoint
import java.util.*
import java.util.regex.Pattern
import javax.inject.Inject
import kotlin.math.roundToInt
@ -76,7 +75,6 @@ class ReadingItemFragment : NbFragment(), PopupMenu.OnMenuItemClickListener {
private var feedIconUrl: String? = null
private var faviconText: String? = null
private var classifier: Classifier? = null
private var readingFontReceiver: BroadcastReceiver? = null
private var displayFeedDetails = false
private var user: UserDetails? = null
@ -128,9 +126,6 @@ class ReadingItemFragment : NbFragment(), PopupMenu.OnMenuItemClickListener {
user = PrefsUtils.getUserDetails(requireContext())
markStoryReadBehavior = PrefsUtils.getMarkStoryReadBehavior(requireContext())
readingFontReceiver = ReadingFontReceiver()
requireActivity().registerReceiver(readingFontReceiver, IntentFilter(READING_FONT_CHANGED))
if (markStoryReadBehavior == MarkStoryReadBehavior.IMMEDIATELY) {
sampledQueue = SampledQueue(250, 5)
}
@ -153,7 +148,6 @@ class ReadingItemFragment : NbFragment(), PopupMenu.OnMenuItemClickListener {
}
override fun onDestroy() {
requireActivity().unregisterReceiver(readingFontReceiver)
binding.readingWebview.setOnTouchListener(null)
binding.root.setOnTouchListener(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
}
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.show()
}
@ -342,9 +347,36 @@ class ReadingItemFragment : NbFragment(), PopupMenu.OnMenuItemClickListener {
setTextSizeStyle(ReadingTextSize.XXL)
true
}
R.id.menu_font -> {
val storyFont = ReadingFontDialogFragment.newInstance(PrefsUtils.getFontString(requireContext()))
storyFont.show(requireActivity().supportFragmentManager, ReadingFontDialogFragment::class.java.name)
R.id.menu_font_anonymous -> {
setReadingFont(getString(R.string.anonymous_pro_font_prefvalue))
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
}
R.id.menu_reading_save -> {
@ -958,17 +990,14 @@ class ReadingItemFragment : NbFragment(), PopupMenu.OnMenuItemClickListener {
binding.readingWebview.setTextSize(textSize)
}
private inner class ReadingFontReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
private fun setReadingFont(font: String) {
PrefsUtils.setFontString(requireContext(), font)
contentHash = 0 // Force reload since content hasn't changed
reloadStoryContent()
}
}
companion object {
private const val BUNDLE_SCROLL_POS_REL = "scrollStateRel"
const val READING_FONT_CHANGED = "readingFontChanged"
@JvmStatic
fun newInstance(story: Story?, feedTitle: String?, feedFaviconColor: String?, feedFaviconFade: String?, feedFaviconBorder: String?, faviconText: String?, faviconUrl: String?, classifier: Classifier?, displayFeedDetails: Boolean, sourceUserId: String?): ReadingItemFragment {

View file

@ -1,10 +0,0 @@
package com.newsblur.util;
/**
* Created by mark on 02/05/2017.
*/
public interface ReadingFontChangedListener {
void readingFontChanged(String newValue);
}