Compare commits
	
		
			3 Commits
		
	
	
		
			309500276f
			...
			v125010201
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 1893904135 | |||
| a4cb28ba81 | |||
| ae3cada1c7 | 
| @@ -156,7 +156,7 @@ dependencies { | ||||
|     implementation("com.github.bumptech.glide:okhttp3-integration:4.16.0") | ||||
|  | ||||
|     // Themes | ||||
|     implementation("com.github.rubensousa:floatingtoolbar:1.5.1") | ||||
|     implementation("com.leinardi.android:speed-dial:3.3.0") | ||||
|  | ||||
|     // Pager | ||||
|     implementation("me.relex:circleindicator:2.1.6") | ||||
|   | ||||
| @@ -65,19 +65,6 @@ class SettingsActivityGeneralTest { | ||||
|                 ), | ||||
|             ), | ||||
|         ) | ||||
|         onView(withSettingsCheckboxWidget(R.string.reader_static_bar_title)).check( | ||||
|             matches( | ||||
|                 allOf( | ||||
|                     isDisplayed(), | ||||
|                     not(isChecked()), | ||||
|                 ), | ||||
|             ), | ||||
|         ) | ||||
|         onView(withSettingsCheckboxFrame(R.string.reader_static_bar_title)).check( | ||||
|             matches( | ||||
|                 isEnabled(), | ||||
|             ), | ||||
|         ) | ||||
|         onView(withText(R.string.pref_general_category_displaying)).check(matches(isDisplayed())) | ||||
|         onView(withSettingsCheckboxWidget(R.string.pref_switch_card_view_title)).check( | ||||
|             matches( | ||||
| @@ -161,19 +148,6 @@ class SettingsActivityGeneralTest { | ||||
|  | ||||
|     @Test | ||||
|     fun testGeneralActionsCheckboxes() { | ||||
|         // article viewer settings | ||||
|         onView(withSettingsCheckboxFrame(R.string.reader_static_bar_title)).check( | ||||
|             matches( | ||||
|                 isEnabled(), | ||||
|             ), | ||||
|         ) | ||||
|         onView(withSettingsCheckboxWidget(R.string.pref_article_viewer_title)).perform(click()) | ||||
|         onView(withSettingsCheckboxFrame(R.string.reader_static_bar_title)).check( | ||||
|             matches( | ||||
|                 not(isEnabled()), | ||||
|             ), | ||||
|         ) | ||||
|  | ||||
|         onView(withSettingsCheckboxFrame(R.string.card_height_title)).check(matches(not(isEnabled()))) | ||||
|         onView(withSettingsCheckboxWidget(R.string.pref_switch_card_view_title)).perform(click()) | ||||
|         onView(withSettingsCheckboxFrame(R.string.card_height_title)).check(matches(isEnabled())) | ||||
|   | ||||
| @@ -2,18 +2,14 @@ package bou.amine.apps.readerforselfossv2.android.fragments | ||||
|  | ||||
| import android.content.Context | ||||
| import android.content.Intent | ||||
| import android.content.res.ColorStateList | ||||
| import android.content.res.TypedArray | ||||
| import android.graphics.Bitmap | ||||
| import android.graphics.Typeface | ||||
| import android.graphics.drawable.ColorDrawable | ||||
| import android.os.Bundle | ||||
| import android.util.TypedValue | ||||
| import android.util.TypedValue.DATA_NULL_UNDEFINED | ||||
| import android.view.GestureDetector | ||||
| import android.view.InflateException | ||||
| import android.view.LayoutInflater | ||||
| import android.view.MenuItem | ||||
| import android.view.MotionEvent | ||||
| import android.view.View | ||||
| import android.view.ViewGroup | ||||
| @@ -23,7 +19,6 @@ import android.webkit.WebView | ||||
| import android.webkit.WebViewClient | ||||
| import android.widget.Toast | ||||
| import androidx.appcompat.app.AlertDialog | ||||
| import androidx.core.widget.NestedScrollView | ||||
| import androidx.fragment.app.Fragment | ||||
| import bou.amine.apps.readerforselfossv2.android.ImageActivity | ||||
| import bou.amine.apps.readerforselfossv2.android.R | ||||
| @@ -32,6 +27,8 @@ import bou.amine.apps.readerforselfossv2.android.model.ParecelableItem | ||||
| import bou.amine.apps.readerforselfossv2.android.model.toModel | ||||
| import bou.amine.apps.readerforselfossv2.android.model.toParcelable | ||||
| import bou.amine.apps.readerforselfossv2.android.utils.acra.sendSilentlyWithAcraWithName | ||||
| import bou.amine.apps.readerforselfossv2.android.utils.bottombar.addHomeMadeActionItem | ||||
| import bou.amine.apps.readerforselfossv2.android.utils.getColorFromAttr | ||||
| import bou.amine.apps.readerforselfossv2.android.utils.glide.bitmapFitCenter | ||||
| import bou.amine.apps.readerforselfossv2.android.utils.glide.getBitmapInputStream | ||||
| import bou.amine.apps.readerforselfossv2.android.utils.glide.getGlideImageForResource | ||||
| @@ -48,8 +45,7 @@ import bou.amine.apps.readerforselfossv2.utils.getHtmlDecoded | ||||
| import bou.amine.apps.readerforselfossv2.utils.getImages | ||||
| import bou.amine.apps.readerforselfossv2.utils.getThumbnail | ||||
| import bou.amine.apps.readerforselfossv2.utils.isEmptyOrNullOrNullString | ||||
| import com.github.rubensousa.floatingtoolbar.FloatingToolbar | ||||
| import com.google.android.material.floatingactionbutton.FloatingActionButton | ||||
| import com.leinardi.android.speeddial.SpeedDialView | ||||
| import kotlinx.coroutines.CoroutineScope | ||||
| import kotlinx.coroutines.Dispatchers | ||||
| import kotlinx.coroutines.launch | ||||
| @@ -74,6 +70,8 @@ private const val DEFAULT_FONT_SIZE = 16 | ||||
| class ArticleFragment : | ||||
|     Fragment(), | ||||
|     DIAware { | ||||
|     private var colorOnSurface: Int = 0 | ||||
|     private var colorSurface: Int = 0 | ||||
|     private var fontSize: Int = DEFAULT_FONT_SIZE | ||||
|     private lateinit var item: SelfossModel.Item | ||||
|     private lateinit var url: String | ||||
| @@ -82,7 +80,7 @@ class ArticleFragment : | ||||
|     private lateinit var contentImage: String | ||||
|     private lateinit var contentTitle: String | ||||
|     private lateinit var allImages: ArrayList<String> | ||||
|     private lateinit var fab: FloatingActionButton | ||||
|     private lateinit var fab: SpeedDialView | ||||
|     private lateinit var textAlignment: String | ||||
|     private lateinit var binding: FragmentArticleBinding | ||||
|  | ||||
| @@ -93,7 +91,6 @@ class ArticleFragment : | ||||
|     private var typeface: Typeface? = null | ||||
|     private var resId: Int = 0 | ||||
|     private var font = "" | ||||
|     private var staticBar = false | ||||
|  | ||||
|     private val mercuryApi: MercuryApi by instance() | ||||
|  | ||||
| @@ -120,6 +117,9 @@ class ArticleFragment : | ||||
|                 e.sendSilentlyWithAcra() | ||||
|             } | ||||
|  | ||||
|             colorOnSurface = requireContext().getColorFromAttr(R.attr.colorOnSurface) | ||||
|             colorSurface = requireContext().getColorFromAttr(R.attr.colorSurface) | ||||
|  | ||||
|             contentText = item.content | ||||
|             contentTitle = item.title.getHtmlDecoded() | ||||
|             contentImage = item.getThumbnail(repository.baseUrl) | ||||
| @@ -133,23 +133,11 @@ class ArticleFragment : | ||||
|             allImages = item.getImages() | ||||
|  | ||||
|             fontSize = appSettingsService.getFontSize() | ||||
|             staticBar = appSettingsService.isStaticBarEnabled() | ||||
|             font = appSettingsService.getFont() | ||||
|  | ||||
|             refreshAlignment() | ||||
|  | ||||
|             fab = binding.fab | ||||
|  | ||||
|             fab.backgroundTintList = ColorStateList.valueOf(resources.getColor(R.color.colorAccent)) | ||||
|  | ||||
|             fab.rippleColor = resources.getColor(R.color.colorAccentDark) | ||||
|  | ||||
|             val floatingToolbar: FloatingToolbar = handleFloatingToolbar() | ||||
|  | ||||
|             if (staticBar) { | ||||
|                 fab.hide() | ||||
|                 floatingToolbar.show() | ||||
|             } | ||||
|             handleFloatingToolbar() | ||||
|  | ||||
|             binding.source.text = contentSource | ||||
|             if (typeface != null) { | ||||
| @@ -157,21 +145,6 @@ class ArticleFragment : | ||||
|             } | ||||
|  | ||||
|             handleContent() | ||||
|  | ||||
|             binding.nestedScrollView.setOnScrollChangeListener( | ||||
|                 NestedScrollView.OnScrollChangeListener { _, _, scrollY, _, oldScrollY -> | ||||
|                     if (scrollY > oldScrollY) { | ||||
|                         floatingToolbar.hide() | ||||
|                         fab.hide() | ||||
|                     } else { | ||||
|                         if (staticBar) { | ||||
|                             floatingToolbar.show() | ||||
|                         } else { | ||||
|                             if (floatingToolbar.isShowing) floatingToolbar.hide() else fab.show() | ||||
|                         } | ||||
|                     } | ||||
|                 }, | ||||
|             ) | ||||
|         } catch (e: InflateException) { | ||||
|             e.sendSilentlyWithAcraWithName("webview not available") | ||||
|             try { | ||||
| @@ -216,60 +189,77 @@ class ArticleFragment : | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private fun handleFloatingToolbar(): FloatingToolbar { | ||||
|         val floatingToolbar: FloatingToolbar = binding.floatingToolbar | ||||
|         if (appSettingsService.getPublicAccess()) { | ||||
|             floatingToolbar.setMenu(R.menu.reader_toolbar_no_read) | ||||
|         } | ||||
|         floatingToolbar.attachFab(fab) | ||||
|     private fun handleFloatingToolbar() { | ||||
|         fab = binding.speedDial | ||||
|         fab.mainFabClosedIconColor = colorOnSurface | ||||
|         fab.mainFabOpenedIconColor = colorOnSurface | ||||
|  | ||||
|         floatingToolbar.background = ColorDrawable(resources.getColor(R.color.colorAccent)) | ||||
|         handleFloatingToolbarActionItems() | ||||
|  | ||||
|         floatingToolbar.setClickListener( | ||||
|             object : FloatingToolbar.ItemClickListener { | ||||
|                 override fun onItemClick(item: MenuItem) { | ||||
|                     when (item.itemId) { | ||||
|                         R.id.share_action -> requireActivity().shareLink(url, contentTitle) | ||||
|                         R.id.open_action -> requireActivity().openItemUrlInBrowserAsNewTask(this@ArticleFragment.item) | ||||
|                         R.id.unread_action -> | ||||
|                             try { | ||||
|                                 if (this@ArticleFragment.item.unread) { | ||||
|                                     CoroutineScope(Dispatchers.IO).launch { | ||||
|                                         repository.markAsRead(this@ArticleFragment.item) | ||||
|                                     } | ||||
|                                     this@ArticleFragment.item.unread = false | ||||
|                                     Toast | ||||
|                                         .makeText( | ||||
|                                             requireContext(), | ||||
|                                             R.string.marked_as_read, | ||||
|                                             Toast.LENGTH_LONG, | ||||
|                                         ).show() | ||||
|                                 } else { | ||||
|                                     CoroutineScope(Dispatchers.IO).launch { | ||||
|                                         repository.unmarkAsRead(this@ArticleFragment.item) | ||||
|                                     } | ||||
|                                     this@ArticleFragment.item.unread = true | ||||
|                                     Toast | ||||
|                                         .makeText( | ||||
|                                             context, | ||||
|                                             R.string.marked_as_unread, | ||||
|                                             Toast.LENGTH_LONG, | ||||
|                                         ).show() | ||||
|                                 } | ||||
|                             } catch (e: IllegalStateException) { | ||||
|                                 e.sendSilentlyWithAcraWithName("Context required is null") | ||||
|         fab.setOnActionSelectedListener { actionItem -> | ||||
|             when (actionItem.id) { | ||||
|                 R.id.share_action -> requireActivity().shareLink(url, contentTitle) | ||||
|                 R.id.open_action -> requireActivity().openItemUrlInBrowserAsNewTask(this@ArticleFragment.item) | ||||
|                 R.id.unread_action -> | ||||
|                     try { | ||||
|                         if (this@ArticleFragment.item.unread) { | ||||
|                             CoroutineScope(Dispatchers.IO).launch { | ||||
|                                 repository.markAsRead(this@ArticleFragment.item) | ||||
|                             } | ||||
|  | ||||
|                         else -> Unit | ||||
|                             this@ArticleFragment.item.unread = false | ||||
|                             Toast | ||||
|                                 .makeText( | ||||
|                                     requireContext(), | ||||
|                                     R.string.marked_as_read, | ||||
|                                     Toast.LENGTH_LONG, | ||||
|                                 ).show() | ||||
|                         } else { | ||||
|                             CoroutineScope(Dispatchers.IO).launch { | ||||
|                                 repository.unmarkAsRead(this@ArticleFragment.item) | ||||
|                             } | ||||
|                             this@ArticleFragment.item.unread = true | ||||
|                             Toast | ||||
|                                 .makeText( | ||||
|                                     context, | ||||
|                                     R.string.marked_as_unread, | ||||
|                                     Toast.LENGTH_LONG, | ||||
|                                 ).show() | ||||
|                         } | ||||
|                     } catch (e: IllegalStateException) { | ||||
|                         e.sendSilentlyWithAcraWithName("Context required is null") | ||||
|                     } | ||||
|                 } | ||||
|  | ||||
|                 override fun onItemLongClick(item: MenuItem?) { | ||||
|                     // We do nothing | ||||
|                 } | ||||
|             }, | ||||
|                 else -> Unit | ||||
|             } | ||||
|             false | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private fun handleFloatingToolbarActionItems() { | ||||
|         fab.addHomeMadeActionItem( | ||||
|             R.id.share_action, | ||||
|             resources.getDrawable(R.drawable.ic_share_white_24dp), | ||||
|             R.string.reader_action_share, | ||||
|             colorOnSurface, | ||||
|             colorSurface, | ||||
|             requireContext(), | ||||
|         ) | ||||
|         fab.addHomeMadeActionItem( | ||||
|             R.id.open_action, | ||||
|             resources.getDrawable(R.drawable.ic_open_in_browser_white_24dp), | ||||
|             R.string.reader_action_open, | ||||
|             colorOnSurface, | ||||
|             colorSurface, | ||||
|             requireContext(), | ||||
|         ) | ||||
|         fab.addHomeMadeActionItem( | ||||
|             R.id.unread_action, | ||||
|             resources.getDrawable(R.drawable.ic_baseline_white_eye_24dp), | ||||
|             R.string.unmark, | ||||
|             colorOnSurface, | ||||
|             colorSurface, | ||||
|             requireContext(), | ||||
|         ) | ||||
|         return floatingToolbar | ||||
|     } | ||||
|  | ||||
|     private fun refreshAlignment() { | ||||
| @@ -392,19 +382,12 @@ class ArticleFragment : | ||||
|             return | ||||
|         } | ||||
|  | ||||
|         val colorOnSurface = TypedValue() | ||||
|         val colorSurface = TypedValue() | ||||
|  | ||||
|         try { | ||||
|             val attrs: IntArray = intArrayOf(android.R.attr.fontFamily) | ||||
|             val a: TypedArray = context.obtainStyledAttributes(resId, attrs) | ||||
|  | ||||
|             binding.webcontent.settings.standardFontFamily = a.getString(0) | ||||
|             binding.webcontent.visibility = View.VISIBLE | ||||
|  | ||||
|             context.theme.resolveAttribute(R.attr.colorOnSurface, colorOnSurface, true) | ||||
|  | ||||
|             context.theme.resolveAttribute(R.attr.colorSurface, colorSurface, true) | ||||
|         } catch (e: IllegalStateException) { | ||||
|             e.sendSilentlyWithAcraWithName("Context issue when setting attributes, but context wasn't null before") | ||||
|         } | ||||
| @@ -412,13 +395,13 @@ class ArticleFragment : | ||||
|         val colorSurfaceString = | ||||
|             String.format( | ||||
|                 "#%06X", | ||||
|                 WHITE_COLOR_HEX and (if (colorSurface.data != DATA_NULL_UNDEFINED) colorSurface.data else WHITE_COLOR_HEX), | ||||
|                 WHITE_COLOR_HEX and (if (colorSurface != DATA_NULL_UNDEFINED) colorSurface else WHITE_COLOR_HEX), | ||||
|             ) | ||||
|  | ||||
|         val colorOnSurfaceString = | ||||
|             String.format( | ||||
|                 "#%06X", | ||||
|                 WHITE_COLOR_HEX and (if (colorOnSurface.data != DATA_NULL_UNDEFINED) colorOnSurface.data else 0), | ||||
|                 WHITE_COLOR_HEX and (if (colorOnSurface != DATA_NULL_UNDEFINED) colorOnSurface else 0), | ||||
|             ) | ||||
|  | ||||
|         try { | ||||
|   | ||||
| @@ -2,7 +2,11 @@ package bou.amine.apps.readerforselfossv2.android.utils | ||||
|  | ||||
| import android.content.Context | ||||
| import android.content.Intent | ||||
| import android.util.TypedValue | ||||
| import androidx.annotation.AttrRes | ||||
| import androidx.annotation.ColorInt | ||||
| import bou.amine.apps.readerforselfossv2.android.R | ||||
| import bou.amine.apps.readerforselfossv2.android.utils.acra.sendSilentlyWithAcraWithName | ||||
| import bou.amine.apps.readerforselfossv2.utils.toStringUriWithHttp | ||||
|  | ||||
| fun Context.shareLink( | ||||
| @@ -23,3 +27,17 @@ fun Context.shareLink( | ||||
|             ).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK), | ||||
|     ) | ||||
| } | ||||
|  | ||||
| @ColorInt | ||||
| fun Context.getColorFromAttr( | ||||
|     @AttrRes attrColor: Int, | ||||
|     resolveRefs: Boolean = true, | ||||
| ): Int { | ||||
|     val typedValue = TypedValue() | ||||
|     try { | ||||
|         this.theme.resolveAttribute(attrColor, typedValue, resolveRefs) | ||||
|     } catch (e: Throwable) { | ||||
|         e.sendSilentlyWithAcraWithName("ColorFromAttr") | ||||
|     } | ||||
|     return typedValue.data | ||||
| } | ||||
|   | ||||
| @@ -1,6 +1,13 @@ | ||||
| package bou.amine.apps.readerforselfossv2.android.utils.bottombar | ||||
|  | ||||
| import android.content.Context | ||||
| import android.graphics.drawable.Drawable | ||||
| import androidx.annotation.IdRes | ||||
| import androidx.annotation.StringRes | ||||
| import bou.amine.apps.readerforselfossv2.android.R | ||||
| import com.ashokvarma.bottomnavigation.TextBadgeItem | ||||
| import com.leinardi.android.speeddial.SpeedDialActionItem | ||||
| import com.leinardi.android.speeddial.SpeedDialView | ||||
|  | ||||
| fun TextBadgeItem.removeBadge(): TextBadgeItem { | ||||
|     this.setText("") | ||||
| @@ -9,3 +16,25 @@ fun TextBadgeItem.removeBadge(): TextBadgeItem { | ||||
| } | ||||
|  | ||||
| fun TextBadgeItem.maybeShow(): TextBadgeItem = if (this.isHidden) this.show() else this | ||||
|  | ||||
| @Suppress("detekt:LongParameterList") | ||||
| fun SpeedDialView.addHomeMadeActionItem( | ||||
|     @IdRes actionId: Int, | ||||
|     actionIcon: Drawable, | ||||
|     @StringRes labelId: Int, | ||||
|     colorOnSurface: Int, | ||||
|     colorSurface: Int, | ||||
|     context: Context, | ||||
| ) { | ||||
|     this.addActionItem( | ||||
|         SpeedDialActionItem | ||||
|             .Builder(actionId, actionIcon) | ||||
|             .setFabBackgroundColor(context.resources.getColor(R.color.colorAccent)) | ||||
|             .setFabImageTintColor(colorOnSurface) | ||||
|             .setLabel(context.getString(labelId)) | ||||
|             .setLabelClickable(false) | ||||
|             .setLabelBackgroundColor(colorOnSurface) | ||||
|             .setLabelColor(colorSurface) | ||||
|             .create(), | ||||
|     ) | ||||
| } | ||||
|   | ||||
| @@ -7,6 +7,7 @@ import android.webkit.WebView | ||||
| import android.widget.ImageView | ||||
| import bou.amine.apps.readerforselfossv2.android.utils.CircleImageView | ||||
| import bou.amine.apps.readerforselfossv2.service.AppSettingsService | ||||
| import bou.amine.apps.readerforselfossv2.utils.isEmptyOrNullOrNullString | ||||
| import com.bumptech.glide.Glide | ||||
| import com.bumptech.glide.load.engine.DiskCacheStrategy | ||||
| import com.bumptech.glide.load.model.GlideUrl | ||||
| @@ -24,6 +25,9 @@ private const val PRELOAD_IMAGE_TIMEOUT = 10000 | ||||
|  | ||||
| @OptIn(ExperimentalEncodingApi::class) | ||||
| fun String.toGlideUrl(appSettingsService: AppSettingsService): GlideUrl { | ||||
|     if (this.isEmptyOrNullOrNullString()) { | ||||
|         return GlideUrl("") | ||||
|     } | ||||
|     if (appSettingsService.getBasicUserName().isNotEmpty()) { | ||||
|         val authString = "${appSettingsService.getBasicUserName()}:${appSettingsService.getBasicPassword()}" | ||||
|         val authBuf = Base64.encode(authString.toByteArray(Charsets.UTF_8)) | ||||
|   | ||||
| @@ -71,35 +71,13 @@ | ||||
|  | ||||
|     </androidx.core.widget.NestedScrollView> | ||||
|  | ||||
|     <FrameLayout | ||||
|         android:layout_width="match_parent" | ||||
|     <com.leinardi.android.speeddial.SpeedDialView | ||||
|         android:id="@+id/speedDial" | ||||
|         android:layout_width="wrap_content" | ||||
|         android:layout_height="wrap_content" | ||||
|         android:layout_gravity="start|bottom|end" | ||||
|         app:layout_constraintBottom_toBottomOf="parent" | ||||
|         app:layout_constraintEnd_toEndOf="parent" | ||||
|         app:layout_constraintStart_toStartOf="parent"> | ||||
|  | ||||
|         <com.github.rubensousa.floatingtoolbar.FloatingToolbar | ||||
|             android:id="@+id/floatingToolbar" | ||||
|             android:layout_width="match_parent" | ||||
|             android:layout_height="?attr/actionBarSize" | ||||
|             android:layout_gravity="bottom" | ||||
|             app:floatingMenu="@menu/reader_toolbar" /> | ||||
|  | ||||
|         <com.google.android.material.floatingactionbutton.FloatingActionButton | ||||
|             android:id="@+id/fab" | ||||
|             android:layout_width="wrap_content" | ||||
|             android:layout_height="wrap_content" | ||||
|             android:layout_gravity="end|bottom" | ||||
|             android:layout_marginEnd="16dp" | ||||
|             android:layout_marginBottom="16dp" | ||||
|             android:paddingTop="@dimen/activity_vertical_margin" | ||||
|             android:paddingBottom="@dimen/activity_vertical_margin" | ||||
|             android:src="@drawable/ic_add_white_24dp" | ||||
|             app:backgroundTint="?attr/colorAccent" | ||||
|             app:fabSize="mini" | ||||
|             app:rippleColor="?attr/colorAccentDark" /> | ||||
|     </FrameLayout> | ||||
|         android:layout_gravity="bottom|end" | ||||
|         app:layout_behavior="@string/speeddial_scrolling_view_snackbar_behavior" | ||||
|         app:sdMainFabClosedSrc="@drawable/ic_add_white_24dp" /> | ||||
|  | ||||
|     <FrameLayout | ||||
|         android:id="@+id/progressBar" | ||||
| @@ -119,4 +97,5 @@ | ||||
|             android:progressTint="?attr/colorAccent" /> | ||||
|     </FrameLayout> | ||||
|  | ||||
| </androidx.coordinatorlayout.widget.CoordinatorLayout> | ||||
|  | ||||
| </androidx.coordinatorlayout.widget.CoordinatorLayout> | ||||
|   | ||||
| @@ -1,23 +0,0 @@ | ||||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <menu xmlns:android="http://schemas.android.com/apk/res/android" | ||||
|     xmlns:app="http://schemas.android.com/apk/res-auto"> | ||||
|  | ||||
|     <item | ||||
|         android:id="@+id/unread_action" | ||||
|         android:icon="@drawable/ic_baseline_white_eye_24dp" | ||||
|         android:title="@string/unmark" | ||||
|         app:showAsAction="ifRoom" /> | ||||
|  | ||||
|     <item | ||||
|         android:id="@+id/open_action" | ||||
|         android:icon="@drawable/ic_open_in_browser_white_24dp" | ||||
|         android:title="@string/reader_action_open" | ||||
|         app:showAsAction="ifRoom" /> | ||||
|  | ||||
|     <item | ||||
|         android:id="@+id/share_action" | ||||
|         android:icon="@drawable/ic_share_white_24dp" | ||||
|         android:title="@string/reader_action_share" | ||||
|         app:showAsAction="ifRoom" /> | ||||
|  | ||||
| </menu> | ||||
| @@ -106,9 +106,6 @@ | ||||
|     <string name="reader_text_align_left">Align left</string> | ||||
|     <string name="reader_text_align_justify">Justify</string> | ||||
|     <string name="settings_reader_font">Reader font</string> | ||||
|     <string name="reader_static_bar_title">Static bottom bar in the article viewer</string> | ||||
|     <string name="reader_static_bar_on">The bottom bar will always be displayed</string> | ||||
|     <string name="reader_static_bar_off">The bottom bar can be shown through the floating button</string> | ||||
|     <string name="remove_source">Remove source</string> | ||||
|     <string name="pref_theme_title">Light/Dark mode</string> | ||||
|     <string name="mode_dark">Dark mode</string> | ||||
| @@ -132,4 +129,4 @@ | ||||
|     <string name="action_about">"Quant a"</string> | ||||
|     <string name="marked_as_read">"Element llegit"</string> | ||||
|     <string name="marked_as_unread">"Item unread"</string> | ||||
| </resources> | ||||
| </resources> | ||||
|   | ||||
| @@ -106,9 +106,6 @@ | ||||
|     <string name="reader_text_align_left">Linksbündig</string> | ||||
|     <string name="reader_text_align_justify">Blocksatz</string> | ||||
|     <string name="settings_reader_font">Schriftgröße im Lesemodus</string> | ||||
|     <string name="reader_static_bar_title">Statische untere Leiste im Lesemodus</string> | ||||
|     <string name="reader_static_bar_on">Die untere Leiste wird dauerhaft angezeigt</string> | ||||
|     <string name="reader_static_bar_off">Die untere Leiste kann über einen schwebenden Button angezeigt werden</string> | ||||
|     <string name="remove_source">Quelle entfernen</string> | ||||
|     <string name="pref_theme_title">Heller/Dunkler Modus</string> | ||||
|     <string name="mode_dark">Dunkler Modus</string> | ||||
| @@ -132,4 +129,4 @@ | ||||
|     <string name="action_about">"Über"</string> | ||||
|     <string name="marked_as_read">"Artikel gelesen"</string> | ||||
|     <string name="marked_as_unread">"Item unread"</string> | ||||
| </resources> | ||||
| </resources> | ||||
|   | ||||
| @@ -106,9 +106,6 @@ | ||||
|     <string name="reader_text_align_left">Alinear a la izquierda</string> | ||||
|     <string name="reader_text_align_justify">Justificado</string> | ||||
|     <string name="settings_reader_font">Modo lectura</string> | ||||
|     <string name="reader_static_bar_title">Static bottom bar in the article viewer</string> | ||||
|     <string name="reader_static_bar_on">The bottom bar will always be displayed</string> | ||||
|     <string name="reader_static_bar_off">The bottom bar can be shown through the floating button</string> | ||||
|     <string name="remove_source">Remove source</string> | ||||
|     <string name="pref_theme_title">Light/Dark mode</string> | ||||
|     <string name="mode_dark">Dark mode</string> | ||||
| @@ -132,4 +129,4 @@ | ||||
|     <string name="action_about">"Acerca de"</string> | ||||
|     <string name="marked_as_read">"Artículo leído"</string> | ||||
|     <string name="marked_as_unread">"Artículo no leído"</string> | ||||
| </resources> | ||||
| </resources> | ||||
|   | ||||
| @@ -106,9 +106,6 @@ | ||||
|     <string name="reader_text_align_left">Aligner à gauche</string> | ||||
|     <string name="reader_text_align_justify">Justifier le texte</string> | ||||
|     <string name="settings_reader_font">Police du lecteur d\'articles</string> | ||||
|     <string name="reader_static_bar_title">Barre statique pour le visionneur d\'articles</string> | ||||
|     <string name="reader_static_bar_on">La barre sera affichée</string> | ||||
|     <string name="reader_static_bar_off">La barre sera affichée grâce au bouton</string> | ||||
|     <string name="remove_source">Supprimer la source</string> | ||||
|     <string name="pref_theme_title">Thème Clair/Sombre</string> | ||||
|     <string name="mode_dark">Thème sombre</string> | ||||
| @@ -132,4 +129,4 @@ | ||||
|     <string name="action_about">"À propos"</string> | ||||
|     <string name="marked_as_read">"Marqué comme lu"</string> | ||||
|     <string name="marked_as_unread">"Marqué comme non lu"</string> | ||||
| </resources> | ||||
| </resources> | ||||
|   | ||||
| @@ -106,9 +106,6 @@ | ||||
|     <string name="reader_text_align_left">Aliñar á esquerda</string> | ||||
|     <string name="reader_text_align_justify">Xustificado</string> | ||||
|     <string name="settings_reader_font">Modo lector</string> | ||||
|     <string name="reader_static_bar_title">Barra inferior estática na vista de artigos</string> | ||||
|     <string name="reader_static_bar_on">A barra inferior mostrarase sempre</string> | ||||
|     <string name="reader_static_bar_off">A barra inferior pode mostrarse a través do botón flotante</string> | ||||
|     <string name="remove_source">Eliminar fonte</string> | ||||
|     <string name="pref_theme_title">Modo Claro/Escuro</string> | ||||
|     <string name="mode_dark">Modo escuro</string> | ||||
| @@ -132,4 +129,4 @@ | ||||
|     <string name="action_about">"Acerca de"</string> | ||||
|     <string name="marked_as_read">"Elemento lido"</string> | ||||
|     <string name="marked_as_unread">"Elemento non lido"</string> | ||||
| </resources> | ||||
| </resources> | ||||
|   | ||||
| @@ -106,9 +106,6 @@ | ||||
|     <string name="reader_text_align_left">Align left</string> | ||||
|     <string name="reader_text_align_justify">Justify</string> | ||||
|     <string name="settings_reader_font">Reader font</string> | ||||
|     <string name="reader_static_bar_title">Static bottom bar in the article viewer</string> | ||||
|     <string name="reader_static_bar_on">The bottom bar will always be displayed</string> | ||||
|     <string name="reader_static_bar_off">The bottom bar can be shown through the floating button</string> | ||||
|     <string name="remove_source">Remove source</string> | ||||
|     <string name="pref_theme_title">Light/Dark mode</string> | ||||
|     <string name="mode_dark">Dark mode</string> | ||||
| @@ -132,4 +129,4 @@ | ||||
|     <string name="action_about">"Tentang"</string> | ||||
|     <string name="marked_as_read">"Membaca item"</string> | ||||
|     <string name="marked_as_unread">"Item unread"</string> | ||||
| </resources> | ||||
| </resources> | ||||
|   | ||||
| @@ -106,9 +106,6 @@ | ||||
|     <string name="reader_text_align_left">Align left</string> | ||||
|     <string name="reader_text_align_justify">Justify</string> | ||||
|     <string name="settings_reader_font">Reader font</string> | ||||
|     <string name="reader_static_bar_title">Static bottom bar in the article viewer</string> | ||||
|     <string name="reader_static_bar_on">The bottom bar will always be displayed</string> | ||||
|     <string name="reader_static_bar_off">The bottom bar can be shown through the floating button</string> | ||||
|     <string name="remove_source">Remove source</string> | ||||
|     <string name="pref_theme_title">Light/Dark mode</string> | ||||
|     <string name="mode_dark">Dark mode</string> | ||||
| @@ -132,4 +129,4 @@ | ||||
|     <string name="action_about">"Informazioni"</string> | ||||
|     <string name="marked_as_read">"Articolo letto"</string> | ||||
|     <string name="marked_as_unread">"Item unread"</string> | ||||
| </resources> | ||||
| </resources> | ||||
|   | ||||
| @@ -106,9 +106,6 @@ | ||||
|     <string name="reader_text_align_left">Align left</string> | ||||
|     <string name="reader_text_align_justify">Justify</string> | ||||
|     <string name="settings_reader_font">Reader font</string> | ||||
|     <string name="reader_static_bar_title">Static bottom bar in the article viewer</string> | ||||
|     <string name="reader_static_bar_on">The bottom bar will always be displayed</string> | ||||
|     <string name="reader_static_bar_off">The bottom bar can be shown through the floating button</string> | ||||
|     <string name="remove_source">Remove source</string> | ||||
|     <string name="pref_theme_title">Light/Dark mode</string> | ||||
|     <string name="mode_dark">Dark mode</string> | ||||
| @@ -132,4 +129,4 @@ | ||||
|     <string name="action_about">"정보"</string> | ||||
|     <string name="marked_as_read">"항목 읽기"</string> | ||||
|     <string name="marked_as_unread">"Item unread"</string> | ||||
| </resources> | ||||
| </resources> | ||||
|   | ||||
| @@ -23,6 +23,7 @@ | ||||
|     <string name="wrong_infos">"Controleer de gegevens nogmaals."</string> | ||||
|     <string name="all_posts_not_read">"Fout bij markeren als gelezen"</string> | ||||
|     <string name="all_posts_read">"Alle artikelen gemarkeerd als gelezen"</string> | ||||
|     <string name="undo_string">"Ongedaan maken"</string> | ||||
|     <string name="addStringNoUrl">"Login om bronnen toe te voegen"</string> | ||||
|     <string name="cant_get_sources">"Kan de lijst met bronnen niet ophalen"</string> | ||||
|     <string name="cant_create_source">"Kan bron niet creëeren"</string> | ||||
| @@ -105,9 +106,6 @@ | ||||
|     <string name="reader_text_align_left">Align left</string> | ||||
|     <string name="reader_text_align_justify">Justify</string> | ||||
|     <string name="settings_reader_font">Reader font</string> | ||||
|     <string name="reader_static_bar_title">Static bottom bar in the article viewer</string> | ||||
|     <string name="reader_static_bar_on">The bottom bar will always be displayed</string> | ||||
|     <string name="reader_static_bar_off">The bottom bar can be shown through the floating button</string> | ||||
|     <string name="remove_source">Remove source</string> | ||||
|     <string name="pref_theme_title">Light/Dark mode</string> | ||||
|     <string name="mode_dark">Dark mode</string> | ||||
| @@ -131,5 +129,4 @@ | ||||
|     <string name="action_about">"Over"</string> | ||||
|     <string name="marked_as_read">"Artikel gelezen"</string> | ||||
|     <string name="marked_as_unread">"Item unread"</string> | ||||
|     <string name="undo_string">"Ongedaan maken"</string> | ||||
| </resources> | ||||
| </resources> | ||||
|   | ||||
| @@ -106,9 +106,6 @@ | ||||
|     <string name="reader_text_align_left">Align left</string> | ||||
|     <string name="reader_text_align_justify">Justify</string> | ||||
|     <string name="settings_reader_font">Reader font</string> | ||||
|     <string name="reader_static_bar_title">Static bottom bar in the article viewer</string> | ||||
|     <string name="reader_static_bar_on">The bottom bar will always be displayed</string> | ||||
|     <string name="reader_static_bar_off">The bottom bar can be shown through the floating button</string> | ||||
|     <string name="remove_source">Remove source</string> | ||||
|     <string name="pref_theme_title">Light/Dark mode</string> | ||||
|     <string name="mode_dark">Dark mode</string> | ||||
| @@ -132,4 +129,4 @@ | ||||
|     <string name="action_about">"Sobre"</string> | ||||
|     <string name="marked_as_read">"Item lido"</string> | ||||
|     <string name="marked_as_unread">"Item unread"</string> | ||||
| </resources> | ||||
| </resources> | ||||
|   | ||||
| @@ -106,9 +106,6 @@ | ||||
|     <string name="reader_text_align_left">Align left</string> | ||||
|     <string name="reader_text_align_justify">Justify</string> | ||||
|     <string name="settings_reader_font">Reader font</string> | ||||
|     <string name="reader_static_bar_title">Static bottom bar in the article viewer</string> | ||||
|     <string name="reader_static_bar_on">The bottom bar will always be displayed</string> | ||||
|     <string name="reader_static_bar_off">The bottom bar can be shown through the floating button</string> | ||||
|     <string name="remove_source">Remove source</string> | ||||
|     <string name="pref_theme_title">Light/Dark mode</string> | ||||
|     <string name="mode_dark">Dark mode</string> | ||||
| @@ -132,4 +129,4 @@ | ||||
|     <string name="action_about">"Sobre"</string> | ||||
|     <string name="marked_as_read">"Item lido"</string> | ||||
|     <string name="marked_as_unread">"Item unread"</string> | ||||
| </resources> | ||||
| </resources> | ||||
|   | ||||
| @@ -106,9 +106,6 @@ | ||||
|     <string name="reader_text_align_left">Align left</string> | ||||
|     <string name="reader_text_align_justify">Justify</string> | ||||
|     <string name="settings_reader_font">Reader font</string> | ||||
|     <string name="reader_static_bar_title">Static bottom bar in the article viewer</string> | ||||
|     <string name="reader_static_bar_on">The bottom bar will always be displayed</string> | ||||
|     <string name="reader_static_bar_off">The bottom bar can be shown through the floating button</string> | ||||
|     <string name="remove_source">Remove source</string> | ||||
|     <string name="pref_theme_title">Light/Dark mode</string> | ||||
|     <string name="mode_dark">Dark mode</string> | ||||
| @@ -132,4 +129,4 @@ | ||||
|     <string name="action_about">"මේ ගැන"</string> | ||||
|     <string name="marked_as_read">"Item read"</string> | ||||
|     <string name="marked_as_unread">"Item unread"</string> | ||||
| </resources> | ||||
| </resources> | ||||
|   | ||||
| @@ -106,9 +106,6 @@ | ||||
|     <string name="reader_text_align_left">Align left</string> | ||||
|     <string name="reader_text_align_justify">Justify</string> | ||||
|     <string name="settings_reader_font">Reader font</string> | ||||
|     <string name="reader_static_bar_title">Static bottom bar in the article viewer</string> | ||||
|     <string name="reader_static_bar_on">The bottom bar will always be displayed</string> | ||||
|     <string name="reader_static_bar_off">The bottom bar can be shown through the floating button</string> | ||||
|     <string name="remove_source">Remove source</string> | ||||
|     <string name="pref_theme_title">Light/Dark mode</string> | ||||
|     <string name="mode_dark">Dark mode</string> | ||||
| @@ -132,4 +129,4 @@ | ||||
|     <string name="action_about">"Hakkında"</string> | ||||
|     <string name="marked_as_read">"Öğeleri oku"</string> | ||||
|     <string name="marked_as_unread">"Item unread"</string> | ||||
| </resources> | ||||
| </resources> | ||||
|   | ||||
| @@ -106,9 +106,6 @@ | ||||
|     <string name="reader_text_align_left">左对齐</string> | ||||
|     <string name="reader_text_align_justify">左右对齐</string> | ||||
|     <string name="settings_reader_font">阅读器字体</string> | ||||
|     <string name="reader_static_bar_title">文章查看器中的静态底部栏</string> | ||||
|     <string name="reader_static_bar_on">底部栏将始终显示</string> | ||||
|     <string name="reader_static_bar_off">底部栏可以通过浮动按钮显示</string> | ||||
|     <string name="remove_source">删除源</string> | ||||
|     <string name="pref_theme_title">浅色/深色模式</string> | ||||
|     <string name="mode_dark">深色模式</string> | ||||
| @@ -132,4 +129,4 @@ | ||||
|     <string name="action_about">"关于我们"</string> | ||||
|     <string name="marked_as_read">"已读"</string> | ||||
|     <string name="marked_as_unread">"未读条目"</string> | ||||
| </resources> | ||||
| </resources> | ||||
|   | ||||
| @@ -106,9 +106,6 @@ | ||||
|     <string name="reader_text_align_left">Align left</string> | ||||
|     <string name="reader_text_align_justify">Justify</string> | ||||
|     <string name="settings_reader_font">Reader font</string> | ||||
|     <string name="reader_static_bar_title">Static bottom bar in the article viewer</string> | ||||
|     <string name="reader_static_bar_on">The bottom bar will always be displayed</string> | ||||
|     <string name="reader_static_bar_off">The bottom bar can be shown through the floating button</string> | ||||
|     <string name="remove_source">Remove source</string> | ||||
|     <string name="pref_theme_title">Light/Dark mode</string> | ||||
|     <string name="mode_dark">Dark mode</string> | ||||
| @@ -132,4 +129,4 @@ | ||||
|     <string name="action_about">"关于我们"</string> | ||||
|     <string name="marked_as_read">"已读"</string> | ||||
|     <string name="marked_as_unread">"未讀項目"</string> | ||||
| </resources> | ||||
| </resources> | ||||
|   | ||||
							
								
								
									
										6
									
								
								androidApp/src/main/res/values/ids.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								androidApp/src/main/res/values/ids.xml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | ||||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <resources> | ||||
|     <item name="unread_action" type="id" /> | ||||
|     <item name="open_action" type="id" /> | ||||
|     <item name="share_action" type="id" /> | ||||
| </resources> | ||||
| @@ -108,9 +108,6 @@ | ||||
|     <string name="source_code_pro_font_id" translatable="false">source_code_pro_medium</string> | ||||
|     <string name="open_sans_font_id" translatable="false">open_sans</string> | ||||
|     <string name="roboto_font_id" translatable="false">roboto</string> | ||||
|     <string name="reader_static_bar_title">Static bottom bar in the article viewer</string> | ||||
|     <string name="reader_static_bar_on">The bottom bar will always be displayed</string> | ||||
|     <string name="reader_static_bar_off">The bottom bar can be shown through the floating button</string> | ||||
|     <string name="remove_source">Remove source</string> | ||||
|     <string name="pref_theme_title">Light/Dark mode</string> | ||||
|     <string name="mode_dark">Dark mode</string> | ||||
| @@ -134,4 +131,4 @@ | ||||
|     <string name="action_about">"About"</string> | ||||
|     <string name="marked_as_read">"Item read"</string> | ||||
|     <string name="marked_as_unread">"Item unread"</string> | ||||
| </resources> | ||||
| </resources> | ||||
|   | ||||
| @@ -30,14 +30,6 @@ | ||||
|         android:summaryOn="@string/pref_article_viewer_on" | ||||
|         android:title="@string/pref_article_viewer_title" | ||||
|         app:iconSpaceReserved="false"/> | ||||
|     <SwitchPreference | ||||
|         android:defaultValue="false" | ||||
|         android:dependency="prefer_article_viewer" | ||||
|         android:key="reader_static_bar" | ||||
|         android:summaryOff="@string/reader_static_bar_off" | ||||
|         android:summaryOn="@string/reader_static_bar_on" | ||||
|         android:title="@string/reader_static_bar_title" | ||||
|         app:iconSpaceReserved="false"/> | ||||
|  | ||||
|     <PreferenceCategory | ||||
|         android:title="@string/pref_general_category_displaying"> | ||||
|   | ||||
| @@ -18,7 +18,7 @@ kotlin.code.style=official | ||||
| #Android | ||||
| android.useAndroidX=true | ||||
| #android.nonTransitiveRClass=true | ||||
| android.enableJetifier=true | ||||
| android.enableJetifier=false | ||||
| android.nonTransitiveRClass=false | ||||
| #MPP | ||||
| kotlin.mpp.enableCInteropCommonization=true | ||||
|   | ||||
| @@ -53,7 +53,6 @@ class AppSettingsService( | ||||
|     private var activeAlignment: Int? = null | ||||
|  | ||||
|     private var fontSize: Int? = null | ||||
|     private var staticBar: Boolean? = null | ||||
|     private var font: String = "" | ||||
|     private var theme: Int? = null | ||||
|  | ||||
| @@ -386,17 +385,6 @@ class AppSettingsService( | ||||
|         return fontSize ?: DEFAULT_FONT_SIZE | ||||
|     } | ||||
|  | ||||
|     private fun refreshStaticBarEnabled() { | ||||
|         staticBar = settings.getBoolean(READER_STATIC_BAR, false) | ||||
|     } | ||||
|  | ||||
|     fun isStaticBarEnabled(): Boolean { | ||||
|         if (staticBar != null) { | ||||
|             refreshStaticBarEnabled() | ||||
|         } | ||||
|         return staticBar == true | ||||
|     } | ||||
|  | ||||
|     private fun refreshFont() { | ||||
|         font = settings.getString(READER_FONT, "") | ||||
|     } | ||||
| @@ -449,7 +437,6 @@ class AppSettingsService( | ||||
|         refreshActiveAllignment() | ||||
|         refreshFontSize() | ||||
|         refreshFont() | ||||
|         refreshStaticBarEnabled() | ||||
|         refreshCurrentTheme() | ||||
|     } | ||||
|  | ||||
| @@ -547,8 +534,6 @@ class AppSettingsService( | ||||
|  | ||||
|         const val READER_FONT = "reader_font" | ||||
|  | ||||
|         const val READER_STATIC_BAR = "reader_static_bar" | ||||
|  | ||||
|         const val READER_FONT_SIZE = "reader_font_size" | ||||
|  | ||||
|         const val TEXT_ALIGN = "text_align" | ||||
|   | ||||
		Reference in New Issue
	
	Block a user