UI fixes
This commit is contained in:
2
.idea/vcs.xml
generated
2
.idea/vcs.xml
generated
@@ -10,6 +10,6 @@
|
||||
</option>
|
||||
</component>
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||
<mapping directory="" vcs="Git" />
|
||||
</component>
|
||||
</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
|
||||
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"
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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" />
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -30,7 +30,7 @@ ksp = "2.1.21-2.0.1"
|
||||
leakcanary = "3.0-alpha-8"
|
||||
lifecycle = "2.9.1"
|
||||
markwon = "4.6.2"
|
||||
material = "1.14.0-alpha02"
|
||||
material = "1.14.0-alpha03"
|
||||
moshi = "1.15.2"
|
||||
okhttp = "4.12.0"
|
||||
okio = "3.12.0"
|
||||
|
||||
Reference in New Issue
Block a user