diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d1a8f33..343d907 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -77,6 +77,9 @@ android:value="true" /> + diff --git a/app/src/main/java/apps/amine/bou/readerforselfoss/fragments/ArticleFragment.kt b/app/src/main/java/apps/amine/bou/readerforselfoss/fragments/ArticleFragment.kt index ea99349..a1354ff 100644 --- a/app/src/main/java/apps/amine/bou/readerforselfoss/fragments/ArticleFragment.kt +++ b/app/src/main/java/apps/amine/bou/readerforselfoss/fragments/ArticleFragment.kt @@ -3,6 +3,8 @@ package apps.amine.bou.readerforselfoss.fragments import android.content.Context import android.content.SharedPreferences import android.content.res.ColorStateList +import android.content.res.TypedArray +import android.graphics.Typeface import android.graphics.drawable.ColorDrawable import android.os.Build import android.os.Bundle @@ -19,6 +21,7 @@ import android.view.View import android.view.ViewGroup import android.webkit.WebSettings import androidx.appcompat.app.AlertDialog +import androidx.core.content.res.ResourcesCompat import androidx.room.Room import apps.amine.bou.readerforselfoss.R import apps.amine.bou.readerforselfoss.api.mercury.MercuryApi @@ -45,6 +48,7 @@ import apps.amine.bou.readerforselfoss.utils.succeeded import com.bumptech.glide.Glide import com.bumptech.glide.request.RequestOptions import com.github.rubensousa.floatingtoolbar.FloatingToolbar +import kotlinx.android.synthetic.main.fragment_article.* import kotlinx.android.synthetic.main.fragment_article.view.* import org.acra.ACRA import retrofit2.Call @@ -71,6 +75,14 @@ class ArticleFragment : Fragment() { private lateinit var textAlignment: String private lateinit var config: Config + private var rootView: ViewGroup? = null + + private lateinit var prefs: SharedPreferences + + private var typeface: Typeface? = null + private var resId: Int = 0 + private var font = "" + override fun onStop() { super.onStop() if (mCustomTabActivityHelper != null) { @@ -93,10 +105,6 @@ class ArticleFragment : Fragment() { ).addMigrations(MIGRATION_1_2).addMigrations(MIGRATION_2_3).build() } - private var rootView: ViewGroup? = null - - private lateinit var prefs: SharedPreferences - override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, @@ -115,6 +123,13 @@ class ArticleFragment : Fragment() { prefs = PreferenceManager.getDefaultSharedPreferences(activity) editor = prefs.edit() fontSize = prefs.getString("reader_font_size", "16").toInt() + + font = prefs.getString("reader_font", "") + if (font.isNotEmpty()) { + resId = context!!.resources.getIdentifier(font, "font", context!!.packageName) + typeface = ResourcesCompat.getFont(context!!, resId)!! + } + refreshAlignment() val settings = activity!!.getSharedPreferences(Config.settingsName, Context.MODE_PRIVATE) @@ -204,11 +219,17 @@ class ArticleFragment : Fragment() { ) rootView!!.source.text = contentSource + if (typeface != null) { + rootView!!.source.typeface = typeface + } if (contentText.isEmptyOrNullOrNullString()) { getContentFromMercury(customTabsIntent, prefs) } else { rootView!!.titleView.text = contentTitle + if (typeface != null) { + rootView!!.titleView.typeface = typeface + } htmlToWebview() @@ -283,6 +304,9 @@ class ArticleFragment : Fragment() { if (response.body() != null && response.body()!!.content != null && !response.body()!!.content.isNullOrEmpty()) { try { rootView!!.titleView.text = response.body()!!.title + if (typeface != null) { + rootView!!.titleView.typeface = typeface + } try { // Note: Mercury may return relative urls... If it does the url val will not be changed. URL(response.body()!!.url) @@ -364,6 +388,11 @@ class ArticleFragment : Fragment() { private fun htmlToWebview() { val stringColor = String.format("#%06X", 0xFFFFFF and appColors.colorAccent) + val attrs: IntArray = intArrayOf(android.R.attr.fontFamily) + val a: TypedArray = context!!.obtainStyledAttributes(resId, attrs) + + + rootView!!.webcontent.settings.standardFontFamily = a.getString(0) rootView!!.webcontent.visibility = View.VISIBLE val (textColor, backgroundColor) = if (appColors.isDarkTheme) { if (context != null) { @@ -423,6 +452,24 @@ class ArticleFragment : Fragment() { ACRA.getErrorReporter().maybeHandleSilentException(e, activity!!) } + val fontName = when (font) { + getString(R.string.open_sans_font_id) -> "Open Sans" + getString(R.string.roboto_font_id) -> "Roboto" + else -> "" + } + + val fontLinkAndStyle = if (font.isNotEmpty()) { + """ + | + """.trimMargin() + } else { + "" + } + rootView!!.webcontent.loadDataWithBaseURL( baseUrl, """ @@ -446,6 +493,7 @@ class ArticleFragment : Fragment() { | text-align: $textAlignment; | word-break: break-word; | overflow:hidden; + | line-height: 1.5em; | } | a, pre, code { | text-align: $textAlignment; @@ -456,6 +504,7 @@ class ArticleFragment : Fragment() { | background-color: $stringBackgroundColor; | } | + | $fontLinkAndStyle | | | $contentText diff --git a/app/src/main/res/font/open_sans.xml b/app/src/main/res/font/open_sans.xml new file mode 100644 index 0000000..f9284b2 --- /dev/null +++ b/app/src/main/res/font/open_sans.xml @@ -0,0 +1,7 @@ + + + diff --git a/app/src/main/res/font/roboto.xml b/app/src/main/res/font/roboto.xml new file mode 100644 index 0000000..2641caf --- /dev/null +++ b/app/src/main/res/font/roboto.xml @@ -0,0 +1,7 @@ + + + diff --git a/app/src/main/res/layout/fragment_article.xml b/app/src/main/res/layout/fragment_article.xml index ee087c4..18ee65e 100644 --- a/app/src/main/res/layout/fragment_article.xml +++ b/app/src/main/res/layout/fragment_article.xml @@ -31,8 +31,8 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginLeft="16dp" - android:layout_marginRight="16dp" android:layout_marginTop="8dp" + android:layout_marginRight="16dp" android:textAppearance="@style/TextAppearance.AppCompat.Small" android:textSize="12sp" app:layout_constraintHorizontal_bias="0.0" diff --git a/app/src/main/res/values/font_certs.xml b/app/src/main/res/values/font_certs.xml new file mode 100644 index 0000000..d2226ac --- /dev/null +++ b/app/src/main/res/values/font_certs.xml @@ -0,0 +1,17 @@ + + + + @array/com_google_android_gms_fonts_certs_dev + @array/com_google_android_gms_fonts_certs_prod + + + + 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 + + + diff --git a/app/src/main/res/values/preloaded_fonts.xml b/app/src/main/res/values/preloaded_fonts.xml new file mode 100644 index 0000000..467da32 --- /dev/null +++ b/app/src/main/res/values/preloaded_fonts.xml @@ -0,0 +1,7 @@ + + + + @font/open_sans + @font/roboto + + diff --git a/app/src/main/res/values/preloaded_fonts_keys.xml b/app/src/main/res/values/preloaded_fonts_keys.xml new file mode 100644 index 0000000..083f6b2 --- /dev/null +++ b/app/src/main/res/values/preloaded_fonts_keys.xml @@ -0,0 +1,8 @@ + + + + + @string/open_sans_font_id + @string/roboto_font_id + + \ No newline at end of file diff --git a/app/src/main/res/values/preloaded_fonts_values.xml b/app/src/main/res/values/preloaded_fonts_values.xml new file mode 100644 index 0000000..dca50bc --- /dev/null +++ b/app/src/main/res/values/preloaded_fonts_values.xml @@ -0,0 +1,8 @@ + + + + Systems + Open Sans + Roboto + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 1ecd75c..3e28001 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -172,4 +172,7 @@ Webview issue Align left Justify + Reader font + open_sans + roboto diff --git a/app/src/main/res/xml/pref_viewer.xml b/app/src/main/res/xml/pref_viewer.xml index 8fdc6c0..47889af 100644 --- a/app/src/main/res/xml/pref_viewer.xml +++ b/app/src/main/res/xml/pref_viewer.xml @@ -13,4 +13,10 @@ android:selectAllOnFocus="true" android:singleLine="true" android:title="@string/pref_content_reader_font_size" /> +