Make page transitions setting apply to webtoon viewer as well
(cherry picked from commit b363b9fc1a5f3cd574bf0829d90b50319b83aeee) # Conflicts: # app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderSettingsSheet.kt # app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/ViewerConfig.kt # app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonViewer.kt # app/src/main/res/layout/reader_settings_sheet.xml
This commit is contained in:
parent
439b78c39f
commit
57565fce2d
@ -12,6 +12,7 @@ import eu.kanade.tachiyomi.R
|
|||||||
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
||||||
import eu.kanade.tachiyomi.ui.reader.viewer.pager.PagerViewer
|
import eu.kanade.tachiyomi.ui.reader.viewer.pager.PagerViewer
|
||||||
import eu.kanade.tachiyomi.ui.reader.viewer.webtoon.WebtoonViewer
|
import eu.kanade.tachiyomi.ui.reader.viewer.webtoon.WebtoonViewer
|
||||||
|
import eu.kanade.tachiyomi.util.view.gone
|
||||||
import eu.kanade.tachiyomi.util.view.invisible
|
import eu.kanade.tachiyomi.util.view.invisible
|
||||||
import eu.kanade.tachiyomi.util.view.visible
|
import eu.kanade.tachiyomi.util.view.visible
|
||||||
import eu.kanade.tachiyomi.widget.IgnoreFirstSpinnerListener
|
import eu.kanade.tachiyomi.widget.IgnoreFirstSpinnerListener
|
||||||
@ -23,11 +24,13 @@ import kotlinx.android.synthetic.main.reader_settings_sheet.cutout_short
|
|||||||
import kotlinx.android.synthetic.main.reader_settings_sheet.fullscreen
|
import kotlinx.android.synthetic.main.reader_settings_sheet.fullscreen
|
||||||
import kotlinx.android.synthetic.main.reader_settings_sheet.keepscreen
|
import kotlinx.android.synthetic.main.reader_settings_sheet.keepscreen
|
||||||
import kotlinx.android.synthetic.main.reader_settings_sheet.long_tap
|
import kotlinx.android.synthetic.main.reader_settings_sheet.long_tap
|
||||||
|
import kotlinx.android.synthetic.main.reader_settings_sheet.navigation_prefs_group
|
||||||
import kotlinx.android.synthetic.main.reader_settings_sheet.page_transitions
|
import kotlinx.android.synthetic.main.reader_settings_sheet.page_transitions
|
||||||
import kotlinx.android.synthetic.main.reader_settings_sheet.pager_prefs_group
|
import kotlinx.android.synthetic.main.reader_settings_sheet.pager_prefs_group
|
||||||
import kotlinx.android.synthetic.main.reader_settings_sheet.rotation_mode
|
import kotlinx.android.synthetic.main.reader_settings_sheet.rotation_mode
|
||||||
import kotlinx.android.synthetic.main.reader_settings_sheet.scale_type
|
import kotlinx.android.synthetic.main.reader_settings_sheet.scale_type
|
||||||
import kotlinx.android.synthetic.main.reader_settings_sheet.show_page_number
|
import kotlinx.android.synthetic.main.reader_settings_sheet.show_page_number
|
||||||
|
import kotlinx.android.synthetic.main.reader_settings_sheet.tapping_inverted
|
||||||
import kotlinx.android.synthetic.main.reader_settings_sheet.true_color
|
import kotlinx.android.synthetic.main.reader_settings_sheet.true_color
|
||||||
import kotlinx.android.synthetic.main.reader_settings_sheet.viewer
|
import kotlinx.android.synthetic.main.reader_settings_sheet.viewer
|
||||||
import kotlinx.android.synthetic.main.reader_settings_sheet.webtoon_prefs_group
|
import kotlinx.android.synthetic.main.reader_settings_sheet.webtoon_prefs_group
|
||||||
@ -57,6 +60,7 @@ class ReaderSettingsSheet(private val activity: ReaderActivity) : BottomSheetDia
|
|||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
|
|
||||||
initGeneralPreferences()
|
initGeneralPreferences()
|
||||||
|
initNavigationPreferences()
|
||||||
|
|
||||||
when (activity.viewer) {
|
when (activity.viewer) {
|
||||||
is PagerViewer -> initPagerPreferences()
|
is PagerViewer -> initPagerPreferences()
|
||||||
@ -89,6 +93,7 @@ class ReaderSettingsSheet(private val activity: ReaderActivity) : BottomSheetDia
|
|||||||
long_tap.bindToPreference(preferences.readWithLongTap())
|
long_tap.bindToPreference(preferences.readWithLongTap())
|
||||||
always_show_chapter_transition.bindToPreference(preferences.alwaysShowChapterTransition())
|
always_show_chapter_transition.bindToPreference(preferences.alwaysShowChapterTransition())
|
||||||
crop_borders.bindToPreference(preferences.cropBorders())
|
crop_borders.bindToPreference(preferences.cropBorders())
|
||||||
|
page_transitions.bindToPreference(preferences.pageTransitions())
|
||||||
// SY -->
|
// SY -->
|
||||||
auto_webtoon_mode.bindToPreference(preferences.eh_useAutoWebtoon())
|
auto_webtoon_mode.bindToPreference(preferences.eh_useAutoWebtoon())
|
||||||
// SY <--
|
// SY <--
|
||||||
@ -108,7 +113,6 @@ class ReaderSettingsSheet(private val activity: ReaderActivity) : BottomSheetDia
|
|||||||
|
|
||||||
scale_type.bindToPreference(preferences.imageScaleType(), 1)
|
scale_type.bindToPreference(preferences.imageScaleType(), 1)
|
||||||
zoom_start.bindToPreference(preferences.zoomStart(), 1)
|
zoom_start.bindToPreference(preferences.zoomStart(), 1)
|
||||||
page_transitions.bindToPreference(preferences.pageTransitions())
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -121,6 +125,17 @@ class ReaderSettingsSheet(private val activity: ReaderActivity) : BottomSheetDia
|
|||||||
webtoon_side_padding.bindToIntPreference(preferences.webtoonSidePadding(), R.array.webtoon_side_padding_values)
|
webtoon_side_padding.bindToIntPreference(preferences.webtoonSidePadding(), R.array.webtoon_side_padding_values)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Init the preferences for navigation.
|
||||||
|
*/
|
||||||
|
private fun initNavigationPreferences() {
|
||||||
|
if (!preferences.readWithTapping().get()) {
|
||||||
|
navigation_prefs_group.gone()
|
||||||
|
}
|
||||||
|
|
||||||
|
tapping_inverted.bindToPreference(preferences.readWithTappingInverted())
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Binds a checkbox or switch view with a boolean preference.
|
* Binds a checkbox or switch view with a boolean preference.
|
||||||
*/
|
*/
|
||||||
@ -139,6 +154,19 @@ class ReaderSettingsSheet(private val activity: ReaderActivity) : BottomSheetDia
|
|||||||
setSelection(pref.get() - offset, false)
|
setSelection(pref.get() - offset, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Binds a spinner to an enum preference.
|
||||||
|
*/
|
||||||
|
private inline fun <reified T : Enum<T>> Spinner.bindToPreference(pref: Preference<T>) {
|
||||||
|
val enumConstants = T::class.java.enumConstants
|
||||||
|
|
||||||
|
onItemSelectedListener = IgnoreFirstSpinnerListener { position ->
|
||||||
|
enumConstants?.get(position)?.let { pref.set(it) }
|
||||||
|
}
|
||||||
|
|
||||||
|
enumConstants?.indexOf(pref.get())?.let { setSelection(it, false) }
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Binds a spinner to an int preference. The position of the spinner item must
|
* Binds a spinner to an int preference. The position of the spinner item must
|
||||||
* correlate with the [intValues] resource item (in arrays.xml), which is a <string-array>
|
* correlate with the [intValues] resource item (in arrays.xml), which is a <string-array>
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package eu.kanade.tachiyomi.ui.reader.viewer
|
package eu.kanade.tachiyomi.ui.reader.viewer
|
||||||
|
|
||||||
import com.tfcporciuncula.flow.Preference
|
import com.tfcporciuncula.flow.Preference
|
||||||
|
import eu.kanade.tachiyomi.data.preference.PreferenceValues.TappingInvertMode
|
||||||
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
@ -19,7 +20,9 @@ abstract class ViewerConfig(preferences: PreferencesHelper) {
|
|||||||
var imagePropertyChangedListener: (() -> Unit)? = null
|
var imagePropertyChangedListener: (() -> Unit)? = null
|
||||||
|
|
||||||
var tappingEnabled = true
|
var tappingEnabled = true
|
||||||
|
var tappingInverted = TappingInvertMode.NONE
|
||||||
var longTapEnabled = true
|
var longTapEnabled = true
|
||||||
|
var usePageTransitions = false
|
||||||
var doubleTapAnimDuration = 500
|
var doubleTapAnimDuration = 500
|
||||||
var volumeKeysEnabled = false
|
var volumeKeysEnabled = false
|
||||||
var volumeKeysInverted = false
|
var volumeKeysInverted = false
|
||||||
@ -31,9 +34,15 @@ abstract class ViewerConfig(preferences: PreferencesHelper) {
|
|||||||
preferences.readWithTapping()
|
preferences.readWithTapping()
|
||||||
.register({ tappingEnabled = it })
|
.register({ tappingEnabled = it })
|
||||||
|
|
||||||
|
preferences.readWithTappingInverted()
|
||||||
|
.register({ tappingInverted = it })
|
||||||
|
|
||||||
preferences.readWithLongTap()
|
preferences.readWithLongTap()
|
||||||
.register({ longTapEnabled = it })
|
.register({ longTapEnabled = it })
|
||||||
|
|
||||||
|
preferences.pageTransitions()
|
||||||
|
.register({ usePageTransitions = it })
|
||||||
|
|
||||||
preferences.doubleTapAnimSpeed()
|
preferences.doubleTapAnimSpeed()
|
||||||
.register({ doubleTapAnimDuration = it })
|
.register({ doubleTapAnimDuration = it })
|
||||||
|
|
||||||
|
@ -11,9 +11,6 @@ import uy.kohesive.injekt.api.get
|
|||||||
class PagerConfig(private val viewer: PagerViewer, preferences: PreferencesHelper = Injekt.get()) :
|
class PagerConfig(private val viewer: PagerViewer, preferences: PreferencesHelper = Injekt.get()) :
|
||||||
ViewerConfig(preferences) {
|
ViewerConfig(preferences) {
|
||||||
|
|
||||||
var usePageTransitions = false
|
|
||||||
private set
|
|
||||||
|
|
||||||
var imageScaleType = 1
|
var imageScaleType = 1
|
||||||
private set
|
private set
|
||||||
|
|
||||||
@ -21,9 +18,6 @@ class PagerConfig(private val viewer: PagerViewer, preferences: PreferencesHelpe
|
|||||||
private set
|
private set
|
||||||
|
|
||||||
init {
|
init {
|
||||||
preferences.pageTransitions()
|
|
||||||
.register({ usePageTransitions = it })
|
|
||||||
|
|
||||||
preferences.imageScaleType()
|
preferences.imageScaleType()
|
||||||
.register({ imageScaleType = it }, { imagePropertyChangedListener?.invoke() })
|
.register({ imageScaleType = it }, { imagePropertyChangedListener?.invoke() })
|
||||||
|
|
||||||
|
@ -93,13 +93,16 @@ class WebtoonViewer(val activity: ReaderActivity, val isContinuous: Boolean = tr
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
recycler.tapListener = { event ->
|
recycler.tapListener = { event ->
|
||||||
val positionX = event.rawX
|
|
||||||
val positionY = event.rawY
|
val positionY = event.rawY
|
||||||
|
val invertMode = config.tappingInverted
|
||||||
|
val topSideTap = positionY < recycler.height * 0.33f && config.tappingEnabled
|
||||||
|
val bottomSideTap = positionY > recycler.height * 0.66f && config.tappingEnabled
|
||||||
|
|
||||||
|
val tappingInverted = invertMode == TappingInvertMode.VERTICAL || invertMode == TappingInvertMode.BOTH
|
||||||
|
|
||||||
when {
|
when {
|
||||||
positionY < recycler.height * 0.25 && config.tappingEnabled -> scrollUp()
|
topSideTap && !tappingInverted || bottomSideTap && tappingInverted -> scrollUp()
|
||||||
positionY > recycler.height * 0.75 && config.tappingEnabled -> scrollDown()
|
bottomSideTap && !tappingInverted || topSideTap && tappingInverted -> scrollDown()
|
||||||
positionX < recycler.width * 0.33 && config.tappingEnabled -> scrollUp()
|
|
||||||
positionX > recycler.width * 0.66 && config.tappingEnabled -> scrollDown()
|
|
||||||
else -> activity.toggleMenu()
|
else -> activity.toggleMenu()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -232,14 +235,22 @@ class WebtoonViewer(val activity: ReaderActivity, val isContinuous: Boolean = tr
|
|||||||
* Scrolls up by [scrollDistance].
|
* Scrolls up by [scrollDistance].
|
||||||
*/
|
*/
|
||||||
private fun scrollUp() {
|
private fun scrollUp() {
|
||||||
|
if (config.usePageTransitions) {
|
||||||
recycler.smoothScrollBy(0, -scrollDistance)
|
recycler.smoothScrollBy(0, -scrollDistance)
|
||||||
|
} else {
|
||||||
|
recycler.scrollBy(0, -scrollDistance)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Scrolls down by [scrollDistance].
|
* Scrolls down by [scrollDistance].
|
||||||
*/
|
*/
|
||||||
/* [EXH] private */ fun scrollDown() {
|
/* [EXH] private */ fun scrollDown() {
|
||||||
|
if (config.usePageTransitions) {
|
||||||
recycler.smoothScrollBy(0, scrollDistance)
|
recycler.smoothScrollBy(0, scrollDistance)
|
||||||
|
} else {
|
||||||
|
recycler.scrollBy(0, scrollDistance)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -105,6 +105,11 @@ class SettingsReaderController : SettingsController() {
|
|||||||
titleRes = R.string.pref_crop_borders
|
titleRes = R.string.pref_crop_borders
|
||||||
defaultValue = false
|
defaultValue = false
|
||||||
}
|
}
|
||||||
|
switchPreference {
|
||||||
|
key = Keys.enableTransitions
|
||||||
|
titleRes = R.string.pref_page_transitions
|
||||||
|
defaultValue = true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
preferenceCategory {
|
preferenceCategory {
|
||||||
@ -268,11 +273,6 @@ class SettingsReaderController : SettingsController() {
|
|||||||
defaultValue = "1"
|
defaultValue = "1"
|
||||||
summary = "%s"
|
summary = "%s"
|
||||||
}
|
}
|
||||||
switchPreference {
|
|
||||||
key = Keys.enableTransitions
|
|
||||||
titleRes = R.string.pref_page_transitions
|
|
||||||
defaultValue = true
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
preferenceCategory {
|
preferenceCategory {
|
||||||
|
@ -179,6 +179,13 @@
|
|||||||
android:textColor="?android:attr/textColorSecondary"
|
android:textColor="?android:attr/textColorSecondary"
|
||||||
app:layout_constraintTop_toBottomOf="@id/always_show_chapter_transition" />
|
app:layout_constraintTop_toBottomOf="@id/always_show_chapter_transition" />
|
||||||
|
|
||||||
|
<com.google.android.material.switchmaterial.SwitchMaterial
|
||||||
|
android:id="@+id/page_transitions"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/pref_page_transitions"
|
||||||
|
android:textColor="?android:attr/textColorSecondary"
|
||||||
|
app:layout_constraintTop_toBottomOf="@id/crop_borders" />
|
||||||
|
|
||||||
<com.google.android.material.switchmaterial.SwitchMaterial
|
<com.google.android.material.switchmaterial.SwitchMaterial
|
||||||
android:id="@+id/auto_webtoon_mode"
|
android:id="@+id/auto_webtoon_mode"
|
||||||
@ -186,7 +193,7 @@
|
|||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="@string/eh_auto_webtoon_mode"
|
android:text="@string/eh_auto_webtoon_mode"
|
||||||
android:textColor="?android:attr/textColorSecondary"
|
android:textColor="?android:attr/textColorSecondary"
|
||||||
app:layout_constraintTop_toBottomOf="@id/crop_borders" />
|
app:layout_constraintTop_toBottomOf="@id/page_transitions" />
|
||||||
|
|
||||||
<android.widget.Space
|
<android.widget.Space
|
||||||
android:id="@+id/end_general_preferences"
|
android:id="@+id/end_general_preferences"
|
||||||
@ -205,7 +212,7 @@
|
|||||||
android:textColor="?attr/colorAccent"
|
android:textColor="?attr/colorAccent"
|
||||||
android:textStyle="bold"
|
android:textStyle="bold"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toBottomOf="@id/end_general_preferences" />
|
app:layout_constraintTop_toBottomOf="@id/end_navigation_preferences" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/scale_type_text"
|
android:id="@+id/scale_type_text"
|
||||||
@ -245,14 +252,49 @@
|
|||||||
app:layout_constraintStart_toEndOf="@id/verticalcenter"
|
app:layout_constraintStart_toEndOf="@id/verticalcenter"
|
||||||
app:layout_constraintTop_toBottomOf="@id/scale_type" />
|
app:layout_constraintTop_toBottomOf="@id/scale_type" />
|
||||||
|
|
||||||
<com.google.android.material.switchmaterial.SwitchMaterial
|
<android.widget.Space
|
||||||
android:id="@+id/page_transitions"
|
android:id="@+id/end_paged_preferences"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="0dp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="@+id/zoom_start"
|
||||||
|
tools:layout_editor_absoluteX="24dp" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/navigation_prefs"
|
||||||
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginTop="10dp"
|
android:layout_marginTop="24dp"
|
||||||
android:text="@string/pref_page_transitions"
|
android:text="@string/pref_reader_navigation"
|
||||||
android:textColor="?android:attr/textColorSecondary"
|
android:textColor="?attr/colorAccent"
|
||||||
app:layout_constraintTop_toBottomOf="@id/zoom_start" />
|
android:textStyle="bold"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="@+id/end_general_preferences" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tapping_inverted_text"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/pref_read_with_tapping_inverted"
|
||||||
|
app:layout_constraintBaseline_toBaselineOf="@id/tapping_inverted"
|
||||||
|
app:layout_constraintEnd_toStartOf="@id/verticalcenter"
|
||||||
|
app:layout_constraintStart_toStartOf="parent" />
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.AppCompatSpinner
|
||||||
|
android:id="@+id/tapping_inverted"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="20dp"
|
||||||
|
android:entries="@array/invert_tapping_mode"
|
||||||
|
app:layout_constraintEnd_toEndOf="@id/spinner_end"
|
||||||
|
app:layout_constraintStart_toEndOf="@id/verticalcenter"
|
||||||
|
app:layout_constraintTop_toBottomOf="@+id/navigation_prefs" />
|
||||||
|
|
||||||
|
<android.widget.Space
|
||||||
|
android:id="@+id/end_navigation_preferences"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="0dp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="@+id/tapping_inverted"
|
||||||
|
tools:layout_editor_absoluteX="24dp" />
|
||||||
|
|
||||||
<!-- Webtoon preferences -->
|
<!-- Webtoon preferences -->
|
||||||
|
|
||||||
@ -265,7 +307,7 @@
|
|||||||
android:textColor="?attr/colorAccent"
|
android:textColor="?attr/colorAccent"
|
||||||
android:textStyle="bold"
|
android:textStyle="bold"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toBottomOf="@id/end_general_preferences" />
|
app:layout_constraintTop_toBottomOf="@id/end_navigation_preferences" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/webtoon_side_padding_text"
|
android:id="@+id/webtoon_side_padding_text"
|
||||||
@ -293,7 +335,7 @@
|
|||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:visibility="gone"
|
android:visibility="gone"
|
||||||
app:constraint_referenced_ids="pager_prefs,scale_type_text,scale_type,zoom_start_text,zoom_start,page_transitions"
|
app:constraint_referenced_ids="pager_prefs,scale_type_text,scale_type,zoom_start_text,zoom_start"
|
||||||
tools:visibility="visible" />
|
tools:visibility="visible" />
|
||||||
|
|
||||||
<androidx.constraintlayout.widget.Group
|
<androidx.constraintlayout.widget.Group
|
||||||
@ -310,4 +352,11 @@
|
|||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
app:layout_constraintGuide_percent="0.5" />
|
app:layout_constraintGuide_percent="0.5" />
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.Group
|
||||||
|
android:id="@+id/navigation_prefs_group"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
app:constraint_referenced_ids="navigation_prefs,tapping_inverted_text,end_navigation_preferences,tapping_inverted"
|
||||||
|
tools:layout_editor_absoluteX="24dp" />
|
||||||
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user