Resolve fast-scroll resource issues

Accidentally forgot to move the resources from the fast scroll library, so here it is.
This commit is contained in:
OxygenCobalt 2021-03-22 16:15:17 -06:00
parent 02fed16c31
commit ffd3275ca5
No known key found for this signature in database
GPG key ID: 37DBE3621FE9AD47
6 changed files with 65 additions and 10 deletions

View file

@ -53,6 +53,9 @@ afterEvaluate {
dependencies { dependencies {
implementation fileTree(dir: "libs", include: ["*.jar"]) implementation fileTree(dir: "libs", include: ["*.jar"])
// FIXME: A good chunk of the dependencies I use are implicit,
// I may want to explicitly declare them to avoid any annoying build issues in the future.
// Kotlin // Kotlin
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
@ -98,10 +101,11 @@ dependencies {
implementation 'com.google.android.material:material:1.3.0' implementation 'com.google.android.material:material:1.3.0'
// Dialogs // Dialogs
// TODO: Eliminate these, don't want their bloat.
implementation 'com.afollestad.material-dialogs:core:3.3.0' implementation 'com.afollestad.material-dialogs:core:3.3.0'
implementation 'com.afollestad.material-dialogs:files:3.3.0' implementation 'com.afollestad.material-dialogs:files:3.3.0'
// --- DEV --- // --- DEBUG ---
// Lint // Lint
ktlint "com.pinterest:ktlint:0.40.0" ktlint "com.pinterest:ktlint:0.40.0"

View file

@ -20,8 +20,9 @@ import org.oxycblt.auxio.ui.inflater
/** /**
* The companion thumb for [FastScrollView]. This does not need any setup, instead pass it as an * The companion thumb for [FastScrollView]. This does not need any setup, instead pass it as an
* argument to [FastScrollView.setup]. * argument to [FastScrollView.setup].
* This code is fundamentally an adaptation of Reddit's IndicatorFastScroll, targeted towards * This code is fundamentally an adaptation of Reddit's IndicatorFastScroll, albeit specialized
* Auxio specifically. Check them out here: https://github.com/reddit/IndicatorFastScroll/ * towards Auxio. The original library is here: https://github.com/reddit/IndicatorFastScroll/
* TODO: Merge this view and FastScrollView? They are effectively reliant on eachother
* @author OxygenCobalt * @author OxygenCobalt
*/ */
class FastScrollThumb @JvmOverloads constructor( class FastScrollThumb @JvmOverloads constructor(
@ -70,7 +71,7 @@ class FastScrollThumb @JvmOverloads constructor(
/** /**
* Make the thumb jump to a new position and update its text to the given [indicator]. * Make the thumb jump to a new position and update its text to the given [indicator].
* This is not meant for use outside of the main [FastScrollView] code, don't use it. * This is not meant for use outside of the main [FastScrollView] code. Do not use it.
*/ */
fun jumpTo(indicator: FastScrollView.Indicator, centerY: Int) { fun jumpTo(indicator: FastScrollView.Indicator, centerY: Int) {
binding.thumbText.text = indicator.char.toString() binding.thumbText.text = indicator.char.toString()

View file

@ -24,8 +24,8 @@ import kotlin.math.min
/** /**
* A view that allows for quick scrolling through a [RecyclerView] with many items. Unlike other * A view that allows for quick scrolling through a [RecyclerView] with many items. Unlike other
* fast-scrollers, this one displays indicators instead of simply a scroll bar. * fast-scrollers, this one displays indicators instead of simply a scroll bar.
* This code is fundamentally an adaptation of Reddit's IndicatorFastScroll, targeted towards * This code is fundamentally an adaptation of Reddit's IndicatorFastScroll, albeit specialized
* Auxio specifically. Check them out here: https://github.com/reddit/IndicatorFastScroll/ * towards Auxio. The original library is here: https://github.com/reddit/IndicatorFastScroll/
* @author OxygenCobalt * @author OxygenCobalt
*/ */
class FastScrollView @JvmOverloads constructor( class FastScrollView @JvmOverloads constructor(
@ -172,6 +172,7 @@ class FastScrollView @JvmOverloads constructor(
} }
if (touchY in (indicatorText.top until indicatorText.bottom)) { if (touchY in (indicatorText.top until indicatorText.bottom)) {
// Try to roughly caculate which indicator the user is currently touching [Since the
val textHeight = indicatorText.height / indicators.size val textHeight = indicatorText.height / indicators.size
val indicatorIndex = min( val indicatorIndex = min(
(touchY - indicatorText.top) / textHeight, indicators.lastIndex (touchY - indicatorText.top) / textHeight, indicators.lastIndex

View file

@ -0,0 +1,46 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Animator from IndicatorFastScroll (https://github.com/reddit/IndicatorFastScroll) -->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_activated="true">
<set>
<objectAnimator
android:duration="@android:integer/config_shortAnimTime"
android:propertyName="scaleX"
android:valueTo="1"
android:valueType="floatType" />
<objectAnimator
android:duration="@android:integer/config_shortAnimTime"
android:propertyName="scaleY"
android:valueTo="1"
android:valueType="floatType" />
<objectAnimator
android:duration="@android:integer/config_shortAnimTime"
android:propertyName="alpha"
android:valueTo="1"
android:valueType="floatType" />
</set>
</item>
<item>
<set>
<objectAnimator
android:duration="@android:integer/config_shortAnimTime"
android:propertyName="scaleX"
android:valueTo="0"
android:valueType="floatType" />
<objectAnimator
android:duration="@android:integer/config_shortAnimTime"
android:propertyName="scaleY"
android:valueTo="0"
android:valueType="floatType" />
<objectAnimator
android:duration="@android:integer/config_shortAnimTime"
android:propertyName="alpha"
android:valueTo="0"
android:valueType="floatType" />
</set>
</item>
</selector>

View file

@ -1,19 +1,20 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- Animator from IndicatorFastScroll (https://github.com/reddit/IndicatorFastScroll) -->
<layout> <layout>
<merge xmlns:android="http://schemas.android.com/apk/res/android" <merge xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
tools:layout_height="match_parent" tools:layout_height="match_parent"
tools:layout_width="@dimen/fast_scroller_thumb_size" tools:layout_width="@dimen/size_scroll_thumb"
tools:parentTag="androidx.constraintlayout.widget.ConstraintLayout"> tools:parentTag="androidx.constraintlayout.widget.ConstraintLayout">
<FrameLayout <FrameLayout
android:id="@+id/thumb_layout" android:id="@+id/thumb_layout"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="0dp" android:layout_height="0dp"
android:background="@drawable/thumb_circle" android:background="@drawable/ui_circular_button"
android:elevation="@dimen/fast_scroller_thumb_elevation" android:elevation="@dimen/elevation_small"
android:stateListAnimator="@animator/fast_scroll_thumb" android:stateListAnimator="@animator/animator_thumb"
app:layout_constraintDimensionRatio="W,1:1" app:layout_constraintDimensionRatio="W,1:1"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"> app:layout_constraintStart_toStartOf="parent">

View file

@ -40,6 +40,7 @@
<dimen name="size_play_pause">70dp</dimen> <dimen name="size_play_pause">70dp</dimen>
<dimen name="size_play_pause_compact">36dp</dimen> <dimen name="size_play_pause_compact">36dp</dimen>
<dimen name="size_scroll_thumb">32dp</dimen>
<dimen name="size_clear">32dp</dimen> <dimen name="size_clear">32dp</dimen>
<dimen name="size_app_icon">60dp</dimen> <dimen name="size_app_icon">60dp</dimen>
@ -55,6 +56,7 @@
<dimen name="text_size_toolbar_header">20sp</dimen> <dimen name="text_size_toolbar_header">20sp</dimen>
<!-- Misc --> <!-- Misc -->
<dimen name="elevation_small">2dp</dimen>
<dimen name="elevation_normal">4dp</dimen> <dimen name="elevation_normal">4dp</dimen>
<dimen name="offset_thumb">4dp</dimen> <dimen name="offset_thumb">4dp</dimen>
</resources> </resources>