master
Koitharu 9 months ago
parent d81173bf76
commit 506a8b6e90
Signed by: Koitharu
GPG Key ID: 676DEE768C17A9D7

@ -10,6 +10,6 @@
</option> </option>
</component> </component>
<component name="VcsDirectoryMappings"> <component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" /> <mapping directory="" vcs="Git" />
</component> </component>
</project> </project>

@ -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 val isPagesPreloadEnabled: Boolean
get() { get() {
if (isBackgroundNetworkRestricted()) { if (isBackgroundNetworkRestricted()) {
@ -751,6 +755,7 @@ class AppSettings @Inject constructor(@ApplicationContext context: Context) {
const val KEY_TIPS_CLOSED = "tips_closed" const val KEY_TIPS_CLOSED = "tips_closed"
const val KEY_SSL_BYPASS = "ssl_bypass" const val KEY_SSL_BYPASS = "ssl_bypass"
const val KEY_READER_AUTOSCROLL_SPEED = "as_speed" 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_MIRROR_SWITCHING = "mirror_switching"
const val KEY_PROXY = "proxy" const val KEY_PROXY = "proxy"
const val KEY_PROXY_TYPE = "proxy_type_2" const val KEY_PROXY_TYPE = "proxy_type_2"

@ -7,6 +7,7 @@ import android.view.View
import androidx.activity.OnBackPressedCallback import androidx.activity.OnBackPressedCallback
import androidx.annotation.IdRes import androidx.annotation.IdRes
import androidx.core.view.isEmpty import androidx.core.view.isEmpty
import androidx.core.view.isVisible
import androidx.core.view.iterator import androidx.core.view.iterator
import androidx.core.view.size import androidx.core.view.size
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
@ -89,25 +90,7 @@ class MainNavigationDelegate(
when (v.id) { when (v.id) {
R.id.button_expand -> { R.id.button_expand -> {
if (navBar is NavigationRailView) { if (navBar is NavigationRailView) {
if (navBar.isExpanded) { setNavbarIsExpanded(!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)
}
}
} }
} }
} }
@ -289,6 +272,10 @@ class MainNavigationDelegate(
}, },
) )
} }
navRailHeader?.buttonExpand?.isVisible = value
if (!value) {
setNavbarIsExpanded(false)
}
navBar.labelVisibilityMode = if (value) { navBar.labelVisibilityMode = if (value) {
NavigationBarView.LABEL_VISIBILITY_LABELED NavigationBarView.LABEL_VISIBILITY_LABELED
} else { } 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 interface OnFragmentChangedListener {
fun onFragmentChanged(fragment: Fragment, fromUser: Boolean) fun onFragmentChanged(fragment: Fragment, fromUser: Boolean)

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

@ -6,6 +6,7 @@ import android.view.LayoutInflater
import android.view.View import android.view.View
import android.widget.CompoundButton import android.widget.CompoundButton
import androidx.constraintlayout.widget.ConstraintLayout import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.view.isGone
import androidx.core.view.isVisible import androidx.core.view.isVisible
import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
@ -49,8 +50,10 @@ class ScrollTimerControlView @JvmOverloads constructor(
init { init {
binding.switchScrollTimer.setOnCheckedChangeListener(this) binding.switchScrollTimer.setOnCheckedChangeListener(this)
binding.sliderTimer.addOnChangeListener(this) binding.sliderTimer.addOnChangeListener(this)
binding.buttonFab.setOnClickListener(this)
binding.sliderTimer.setLabelFormatter(this) binding.sliderTimer.setLabelFormatter(this)
binding.buttonClose.setOnClickListener(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)) 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() updateDescription()
} }
@ -84,6 +94,7 @@ class ScrollTimerControlView @JvmOverloads constructor(
override fun onClick(v: View) { override fun onClick(v: View) {
when (v.id) { when (v.id) {
R.id.button_close -> hide() R.id.button_close -> hide()
R.id.button_fab -> settings.isReaderAutoscrollFabVisible = !settings.isReaderAutoscrollFabVisible
} }
} }

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

@ -84,4 +84,22 @@
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/slider_timer" app:layout_constraintTop_toBottomOf="@id/slider_timer"
tools:text="@string/page_switch_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> </merge>

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

@ -30,7 +30,7 @@ ksp = "2.1.21-2.0.1"
leakcanary = "3.0-alpha-8" leakcanary = "3.0-alpha-8"
lifecycle = "2.9.1" lifecycle = "2.9.1"
markwon = "4.6.2" markwon = "4.6.2"
material = "1.14.0-alpha02" material = "1.14.0-alpha03"
moshi = "1.15.2" moshi = "1.15.2"
okhttp = "4.12.0" okhttp = "4.12.0"
okio = "3.12.0" okio = "3.12.0"

Loading…
Cancel
Save