This commit is contained in:
Koitharu
2025-07-23 12:08:27 +03:00
parent d81173bf76
commit 506a8b6e90
9 changed files with 72 additions and 24 deletions

View File

@@ -502,6 +502,10 @@ class AppSettings @Inject constructor(@ApplicationContext context: Context) {
)
}
var isReaderAutoscrollFabVisible: Boolean
get() = prefs.getBoolean(KEY_READER_AUTOSCROLL_FAB, true)
set(value) = prefs.edit { putBoolean(KEY_READER_AUTOSCROLL_FAB, value) }
val isPagesPreloadEnabled: Boolean
get() {
if (isBackgroundNetworkRestricted()) {
@@ -751,6 +755,7 @@ class AppSettings @Inject constructor(@ApplicationContext context: Context) {
const val KEY_TIPS_CLOSED = "tips_closed"
const val KEY_SSL_BYPASS = "ssl_bypass"
const val KEY_READER_AUTOSCROLL_SPEED = "as_speed"
const val KEY_READER_AUTOSCROLL_FAB = "as_fab"
const val KEY_MIRROR_SWITCHING = "mirror_switching"
const val KEY_PROXY = "proxy"
const val KEY_PROXY_TYPE = "proxy_type_2"

View File

@@ -7,6 +7,7 @@ import android.view.View
import androidx.activity.OnBackPressedCallback
import androidx.annotation.IdRes
import androidx.core.view.isEmpty
import androidx.core.view.isVisible
import androidx.core.view.iterator
import androidx.core.view.size
import androidx.fragment.app.Fragment
@@ -89,25 +90,7 @@ class MainNavigationDelegate(
when (v.id) {
R.id.button_expand -> {
if (navBar is NavigationRailView) {
if (navBar.isExpanded) {
navBar.collapse()
navRailHeader?.run {
railFab.shrink()
buttonExpand.setImageResource(R.drawable.ic_drawer_menu)
buttonExpand.setContentDescriptionAndTooltip(R.string.expand)
val horizontalPadding = navBar.itemActiveIndicatorMarginHorizontal
root.setPadding(horizontalPadding, 0, horizontalPadding, 0)
}
} else {
navBar.expand()
navRailHeader?.run {
railFab.extend()
buttonExpand.setImageResource(R.drawable.ic_drawer_menu_open)
buttonExpand.setContentDescriptionAndTooltip(R.string.collapse)
val horizontalPadding = navBar.itemActiveIndicatorExpandedMarginHorizontal
root.setPadding(horizontalPadding, 0, horizontalPadding, 0)
}
}
setNavbarIsExpanded(!navBar.isExpanded)
}
}
}
@@ -289,6 +272,10 @@ class MainNavigationDelegate(
},
)
}
navRailHeader?.buttonExpand?.isVisible = value
if (!value) {
setNavbarIsExpanded(false)
}
navBar.labelVisibilityMode = if (value) {
NavigationBarView.LABEL_VISIBILITY_LABELED
} else {
@@ -296,6 +283,31 @@ class MainNavigationDelegate(
}
}
private fun setNavbarIsExpanded(value: Boolean) {
if (navBar !is NavigationRailView) {
return
}
if (value) {
navBar.expand()
navRailHeader?.run {
railFab.extend()
buttonExpand.setImageResource(R.drawable.ic_drawer_menu_open)
buttonExpand.setContentDescriptionAndTooltip(R.string.collapse)
val horizontalPadding = navBar.itemActiveIndicatorExpandedMarginHorizontal
root.setPadding(horizontalPadding, 0, horizontalPadding, 0)
}
} else {
navBar.collapse()
navRailHeader?.run {
railFab.shrink()
buttonExpand.setImageResource(R.drawable.ic_drawer_menu)
buttonExpand.setContentDescriptionAndTooltip(R.string.expand)
val horizontalPadding = navBar.itemActiveIndicatorMarginHorizontal
root.setPadding(horizontalPadding, 0, horizontalPadding, 0)
}
}
}
fun interface OnFragmentChangedListener {
fun onFragmentChanged(fragment: Fragment, fromUser: Boolean)

View File

@@ -72,7 +72,9 @@ class ReaderActivity :
ReaderControlDelegate.OnInteractionListener,
ReaderNavigationCallback,
IdlingDetector.Callback,
ZoomControl.ZoomControlListener, View.OnClickListener, ScrollTimerControlView.OnVisibilityChangeListener {
ZoomControl.ZoomControlListener,
View.OnClickListener,
ScrollTimerControlView.OnVisibilityChangeListener {
@Inject
lateinit var settings: AppSettings
@@ -480,6 +482,7 @@ class ReaderActivity :
private fun updateScrollTimerButton() {
val button = viewBinding.buttonTimer ?: return
val isButtonVisible = scrollTimer.isActive.value
&& settings.isReaderAutoscrollFabVisible
&& !viewBinding.appbarTop.isVisible
&& !viewBinding.timerControl.isVisible
if (button.isVisible != isButtonVisible) {

View File

@@ -6,6 +6,7 @@ import android.view.LayoutInflater
import android.view.View
import android.widget.CompoundButton
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.view.isGone
import androidx.core.view.isVisible
import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.lifecycleScope
@@ -49,8 +50,10 @@ class ScrollTimerControlView @JvmOverloads constructor(
init {
binding.switchScrollTimer.setOnCheckedChangeListener(this)
binding.sliderTimer.addOnChangeListener(this)
binding.buttonFab.setOnClickListener(this)
binding.sliderTimer.setLabelFormatter(this)
binding.buttonClose.setOnClickListener(this)
binding.buttonFab.isGone = resources.getBoolean(R.bool.is_tablet)
setPadding(0, 0, 0, context.resources.getDimensionPixelOffset(R.dimen.margin_normal))
}
@@ -73,6 +76,13 @@ class ScrollTimerControlView @JvmOverloads constructor(
)
}
}
settings.observeAsStateFlow(
scope = lifecycleOwner.lifecycleScope + Dispatchers.Default,
key = AppSettings.KEY_READER_AUTOSCROLL_FAB,
valueProducer = { isReaderAutoscrollFabVisible },
).observe(lifecycleOwner) {
binding.buttonFab.isChecked = it
}
updateDescription()
}
@@ -84,6 +94,7 @@ class ScrollTimerControlView @JvmOverloads constructor(
override fun onClick(v: View) {
when (v.id) {
R.id.button_close -> hide()
R.id.button_fab -> settings.isReaderAutoscrollFabVisible = !settings.isReaderAutoscrollFabVisible
}
}

View File

@@ -19,8 +19,6 @@
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_margin="16dp"
android:contentDescription="@string/page_switch_timer"
android:tooltipText="@string/page_switch_timer"
app:backgroundTint="@color/bg_floating_button"
app:icon="@drawable/ic_timelapse"
app:layout_insetEdge="bottom" />

View File

@@ -84,4 +84,22 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/slider_timer"
tools:text="@string/page_switch_timer" />
<CheckedTextView
android:id="@+id/button_fab"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/margin_small"
android:background="?selectableItemBackground"
android:drawableEnd="?android:listChoiceIndicatorMultiple"
android:gravity="center_vertical"
android:paddingHorizontal="@dimen/margin_normal"
android:paddingVertical="4dp"
android:singleLine="true"
android:text="@string/show_floating_control_button"
android:textAppearance="?attr/textAppearanceTitleSmall"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/textView_description" />
</merge>

View File

@@ -873,4 +873,5 @@
<string name="read_on_s">Read on %s</string>
<string name="rpc_skip_nsfw_summary">Do not use RPC for adult content</string>
<string name="invalid_token">Invalid token: %s</string>
<string name="show_floating_control_button">Show floating control button</string>
</resources>