mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-11-04 08:08:55 +01:00 
			
		
		
		
	Bump dependencies
This commit is contained in:
		@@ -14,7 +14,6 @@ import androidx.compose.material3.ButtonElevation
 | 
			
		||||
import androidx.compose.material3.LocalContentColor
 | 
			
		||||
import androidx.compose.material3.MaterialTheme
 | 
			
		||||
import androidx.compose.material3.ProvideTextStyle
 | 
			
		||||
import androidx.compose.material3.Shapes
 | 
			
		||||
import androidx.compose.runtime.Composable
 | 
			
		||||
import androidx.compose.runtime.CompositionLocalProvider
 | 
			
		||||
import androidx.compose.runtime.remember
 | 
			
		||||
@@ -31,7 +30,7 @@ fun TextButton(
 | 
			
		||||
    enabled: Boolean = true,
 | 
			
		||||
    interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
 | 
			
		||||
    elevation: ButtonElevation? = null,
 | 
			
		||||
    shape: Shape = Shapes.Full,
 | 
			
		||||
    shape: Shape = ButtonDefaults.textShape,
 | 
			
		||||
    border: BorderStroke? = null,
 | 
			
		||||
    colors: ButtonColors = ButtonDefaults.textButtonColors(),
 | 
			
		||||
    contentPadding: PaddingValues = ButtonDefaults.TextButtonContentPadding,
 | 
			
		||||
@@ -59,7 +58,7 @@ fun Button(
 | 
			
		||||
    enabled: Boolean = true,
 | 
			
		||||
    interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
 | 
			
		||||
    elevation: ButtonElevation? = ButtonDefaults.buttonElevation(),
 | 
			
		||||
    shape: Shape = Shapes.Full,
 | 
			
		||||
    shape: Shape = ButtonDefaults.textShape,
 | 
			
		||||
    border: BorderStroke? = null,
 | 
			
		||||
    colors: ButtonColors = ButtonDefaults.buttonColors(),
 | 
			
		||||
    contentPadding: PaddingValues = ButtonDefaults.ContentPadding,
 | 
			
		||||
 
 | 
			
		||||
@@ -11,7 +11,6 @@ import androidx.compose.material3.ColorScheme
 | 
			
		||||
import androidx.compose.material3.LocalAbsoluteTonalElevation
 | 
			
		||||
import androidx.compose.material3.LocalContentColor
 | 
			
		||||
import androidx.compose.material3.MaterialTheme
 | 
			
		||||
import androidx.compose.material3.Shapes
 | 
			
		||||
import androidx.compose.material3.contentColorFor
 | 
			
		||||
import androidx.compose.runtime.Composable
 | 
			
		||||
import androidx.compose.runtime.CompositionLocalProvider
 | 
			
		||||
@@ -22,6 +21,7 @@ import androidx.compose.ui.Modifier
 | 
			
		||||
import androidx.compose.ui.draw.clip
 | 
			
		||||
import androidx.compose.ui.draw.shadow
 | 
			
		||||
import androidx.compose.ui.graphics.Color
 | 
			
		||||
import androidx.compose.ui.graphics.RectangleShape
 | 
			
		||||
import androidx.compose.ui.graphics.Shape
 | 
			
		||||
import androidx.compose.ui.graphics.compositeOver
 | 
			
		||||
import androidx.compose.ui.semantics.Role
 | 
			
		||||
@@ -37,7 +37,7 @@ fun Surface(
 | 
			
		||||
    modifier: Modifier = Modifier,
 | 
			
		||||
    onLongClick: (() -> Unit)? = null,
 | 
			
		||||
    enabled: Boolean = true,
 | 
			
		||||
    shape: Shape = Shapes.None,
 | 
			
		||||
    shape: Shape = RectangleShape,
 | 
			
		||||
    color: Color = MaterialTheme.colorScheme.surface,
 | 
			
		||||
    contentColor: Color = contentColorFor(color),
 | 
			
		||||
    tonalElevation: Dp = 0.dp,
 | 
			
		||||
 
 | 
			
		||||
@@ -1,158 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright 2021 The Android Open Source Project
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *      http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
package eu.kanade.presentation.util
 | 
			
		||||
 | 
			
		||||
import androidx.compose.animation.core.AnimationState
 | 
			
		||||
import androidx.compose.animation.core.DecayAnimationSpec
 | 
			
		||||
import androidx.compose.animation.core.animateDecay
 | 
			
		||||
import androidx.compose.material3.TopAppBarScrollBehavior
 | 
			
		||||
import androidx.compose.material3.TopAppBarScrollState
 | 
			
		||||
import androidx.compose.ui.geometry.Offset
 | 
			
		||||
import androidx.compose.ui.input.nestedscroll.NestedScrollConnection
 | 
			
		||||
import androidx.compose.ui.input.nestedscroll.NestedScrollSource
 | 
			
		||||
import androidx.compose.ui.unit.Velocity
 | 
			
		||||
import kotlin.math.abs
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * A [TopAppBarScrollBehavior] that adjusts its properties to affect the colors and height of a top
 | 
			
		||||
 * app bar.
 | 
			
		||||
 *
 | 
			
		||||
 * A top app bar that is set up with this [TopAppBarScrollBehavior] will immediately collapse when
 | 
			
		||||
 * the nested content is pulled up, and will expand back the collapsed area when the content is
 | 
			
		||||
 * pulled all the way down.
 | 
			
		||||
 *
 | 
			
		||||
 * @param decayAnimationSpec a [DecayAnimationSpec] that will be used by the top app bar motion
 | 
			
		||||
 * when the user flings the content. Preferably, this should match the animation spec used by the
 | 
			
		||||
 * scrollable content. See also [androidx.compose.animation.rememberSplineBasedDecay] for a
 | 
			
		||||
 * default [DecayAnimationSpec] that can be used with this behavior.
 | 
			
		||||
 * @param canScroll a callback used to determine whether scroll events are to be
 | 
			
		||||
 * handled by this [ExitUntilCollapsedScrollBehavior]
 | 
			
		||||
 */
 | 
			
		||||
class ExitUntilCollapsedScrollBehavior(
 | 
			
		||||
    override val state: TopAppBarScrollState,
 | 
			
		||||
    val decayAnimationSpec: DecayAnimationSpec<Float>,
 | 
			
		||||
    val canScroll: () -> Boolean = { true },
 | 
			
		||||
) : TopAppBarScrollBehavior {
 | 
			
		||||
    override val scrollFraction: Float
 | 
			
		||||
        get() = if (state.offsetLimit != 0f) state.offset / state.offsetLimit else 0f
 | 
			
		||||
    override var nestedScrollConnection =
 | 
			
		||||
        object : NestedScrollConnection {
 | 
			
		||||
            override fun onPreScroll(available: Offset, source: NestedScrollSource): Offset {
 | 
			
		||||
                // Don't intercept if scrolling down.
 | 
			
		||||
                if (!canScroll() || available.y > 0f) return Offset.Zero
 | 
			
		||||
 | 
			
		||||
                val newOffset = (state.offset + available.y)
 | 
			
		||||
                val coerced =
 | 
			
		||||
                    newOffset.coerceIn(minimumValue = state.offsetLimit, maximumValue = 0f)
 | 
			
		||||
                return if (newOffset == coerced) {
 | 
			
		||||
                    // Nothing coerced, meaning we're in the middle of top app bar collapse or
 | 
			
		||||
                    // expand.
 | 
			
		||||
                    state.offset = coerced
 | 
			
		||||
                    // Consume only the scroll on the Y axis.
 | 
			
		||||
                    available.copy(x = 0f)
 | 
			
		||||
                } else {
 | 
			
		||||
                    Offset.Zero
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            override fun onPostScroll(
 | 
			
		||||
                consumed: Offset,
 | 
			
		||||
                available: Offset,
 | 
			
		||||
                source: NestedScrollSource,
 | 
			
		||||
            ): Offset {
 | 
			
		||||
                if (!canScroll()) return Offset.Zero
 | 
			
		||||
                state.contentOffset += consumed.y
 | 
			
		||||
 | 
			
		||||
                if (available.y < 0f || consumed.y < 0f) {
 | 
			
		||||
                    // When scrolling up, just update the state's offset.
 | 
			
		||||
                    val oldOffset = state.offset
 | 
			
		||||
                    state.offset = (state.offset + consumed.y).coerceIn(
 | 
			
		||||
                        minimumValue = state.offsetLimit,
 | 
			
		||||
                        maximumValue = 0f,
 | 
			
		||||
                    )
 | 
			
		||||
                    return Offset(0f, state.offset - oldOffset)
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                if (consumed.y == 0f && available.y > 0) {
 | 
			
		||||
                    // Reset the total offset to zero when scrolling all the way down. This will
 | 
			
		||||
                    // eliminate some float precision inaccuracies.
 | 
			
		||||
                    state.contentOffset = 0f
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                if (available.y > 0f) {
 | 
			
		||||
                    // Adjust the offset in case the consumed delta Y is less than what was recorded
 | 
			
		||||
                    // as available delta Y in the pre-scroll.
 | 
			
		||||
                    val oldOffset = state.offset
 | 
			
		||||
                    state.offset = (state.offset + available.y).coerceIn(
 | 
			
		||||
                        minimumValue = state.offsetLimit,
 | 
			
		||||
                        maximumValue = 0f,
 | 
			
		||||
                    )
 | 
			
		||||
                    return Offset(0f, state.offset - oldOffset)
 | 
			
		||||
                }
 | 
			
		||||
                return Offset.Zero
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            override suspend fun onPostFling(consumed: Velocity, available: Velocity): Velocity {
 | 
			
		||||
                val result = super.onPostFling(consumed, available)
 | 
			
		||||
                if ((available.y < 0f && state.contentOffset == 0f) ||
 | 
			
		||||
                    (available.y > 0f && state.offset < 0f)
 | 
			
		||||
                ) {
 | 
			
		||||
                    return result +
 | 
			
		||||
                        onTopBarFling(
 | 
			
		||||
                            scrollBehavior = this@ExitUntilCollapsedScrollBehavior,
 | 
			
		||||
                            initialVelocity = available.y,
 | 
			
		||||
                            decayAnimationSpec = decayAnimationSpec,
 | 
			
		||||
                        )
 | 
			
		||||
                }
 | 
			
		||||
                return result
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Tachiyomi: Remove snap behavior
 | 
			
		||||
 */
 | 
			
		||||
private suspend fun onTopBarFling(
 | 
			
		||||
    scrollBehavior: TopAppBarScrollBehavior,
 | 
			
		||||
    initialVelocity: Float,
 | 
			
		||||
    decayAnimationSpec: DecayAnimationSpec<Float>,
 | 
			
		||||
): Velocity {
 | 
			
		||||
    if (abs(initialVelocity) > 1f) {
 | 
			
		||||
        var remainingVelocity = initialVelocity
 | 
			
		||||
        var lastValue = 0f
 | 
			
		||||
        AnimationState(
 | 
			
		||||
            initialValue = 0f,
 | 
			
		||||
            initialVelocity = initialVelocity,
 | 
			
		||||
        )
 | 
			
		||||
            .animateDecay(decayAnimationSpec) {
 | 
			
		||||
                val delta = value - lastValue
 | 
			
		||||
                val initialOffset = scrollBehavior.state.offset
 | 
			
		||||
                scrollBehavior.state.offset =
 | 
			
		||||
                    (initialOffset + delta).coerceIn(
 | 
			
		||||
                        minimumValue = scrollBehavior.state.offsetLimit,
 | 
			
		||||
                        maximumValue = 0f,
 | 
			
		||||
                    )
 | 
			
		||||
                val consumed = abs(initialOffset - scrollBehavior.state.offset)
 | 
			
		||||
                lastValue = value
 | 
			
		||||
                remainingVelocity = this.velocity
 | 
			
		||||
                // avoid rounding errors and stop if anything is unconsumed
 | 
			
		||||
                if (abs(delta - consumed) > 0.5f) this.cancelAnimation()
 | 
			
		||||
            }
 | 
			
		||||
        return Velocity(0f, remainingVelocity)
 | 
			
		||||
    }
 | 
			
		||||
    return Velocity.Zero
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user