mirror of
https://github.com/meowarex/rl-mobile.git
synced 2026-08-26 14:07:45 +10:00
feat(mini player gestures): track swipe feedback + fix stuck offsets
This commit is contained in:
@@ -169,6 +169,8 @@ enum class KnownPatch(
|
||||
extensionFileNames = listOf(
|
||||
"radiant/MiniPlayerTrackGestures.smali",
|
||||
"radiant/MiniPlayerTrackGestures\$Gesture.smali",
|
||||
"radiant/MiniPlayerTrackGestures\$OffsetLayer.smali",
|
||||
"radiant/MiniPlayerTrackGestures\$ResetAnimator.smali",
|
||||
"com/tidal/android/feature/appscaffold/ui/q\$c.smali",
|
||||
),
|
||||
),
|
||||
|
||||
@@ -468,6 +468,14 @@
|
||||
return v0
|
||||
.end method
|
||||
|
||||
.method public static isAnyDragging()Z
|
||||
.locals 1
|
||||
|
||||
sget-boolean v0, Lradiant/MiniPlayerGestures;->b:Z
|
||||
|
||||
return v0
|
||||
.end method
|
||||
|
||||
.method public static hasMiniPlayerMedia()Z
|
||||
.locals 1
|
||||
|
||||
|
||||
@@ -17,14 +17,6 @@
|
||||
# instance fields
|
||||
.field public final a:Lyl0/l;
|
||||
|
||||
# X at ACTION_DOWN
|
||||
.field public b:F
|
||||
|
||||
# Y at ACTION_DOWN
|
||||
.field public c:F
|
||||
|
||||
.field public d:Z
|
||||
|
||||
|
||||
# direct methods
|
||||
.method public constructor <init>(Lyl0/l;)V
|
||||
@@ -37,24 +29,6 @@
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method private static dp(F)F
|
||||
.locals 1
|
||||
|
||||
invoke-static {}, Landroid/content/res/Resources;->getSystem()Landroid/content/res/Resources;
|
||||
|
||||
move-result-object v0
|
||||
|
||||
invoke-virtual {v0}, Landroid/content/res/Resources;->getDisplayMetrics()Landroid/util/DisplayMetrics;
|
||||
|
||||
move-result-object v0
|
||||
|
||||
iget v0, v0, Landroid/util/DisplayMetrics;->density:F
|
||||
|
||||
mul-float/2addr p0, v0
|
||||
|
||||
return p0
|
||||
.end method
|
||||
|
||||
.method private nextTrack()V
|
||||
.locals 2
|
||||
|
||||
@@ -82,7 +56,7 @@
|
||||
|
||||
# virtual methods
|
||||
.method public final invoke(Landroid/view/MotionEvent;)Lkotlin/u;
|
||||
.locals 6
|
||||
.locals 3
|
||||
|
||||
invoke-virtual {p1}, Landroid/view/MotionEvent;->getActionMasked()I
|
||||
|
||||
@@ -94,6 +68,10 @@
|
||||
|
||||
if-eq v0, v1, :up
|
||||
|
||||
const/4 v1, 0x2
|
||||
|
||||
if-eq v0, v1, :move
|
||||
|
||||
const/4 v1, 0x3
|
||||
|
||||
if-eq v0, v1, :cancel
|
||||
@@ -105,101 +83,53 @@
|
||||
invoke-virtual {p1}, Landroid/view/MotionEvent;->getRawX()F
|
||||
|
||||
move-result v0
|
||||
|
||||
iput v0, p0, Lradiant/MiniPlayerTrackGestures$Gesture;->b:F
|
||||
|
||||
invoke-virtual {p1}, Landroid/view/MotionEvent;->getRawY()F
|
||||
|
||||
move-result v1
|
||||
invoke-static {v0, v1}, Lradiant/MiniPlayerTrackGestures;->beginDrag(FF)V
|
||||
goto :done
|
||||
|
||||
# ACTION_MOVE
|
||||
:move
|
||||
invoke-virtual {p1}, Landroid/view/MotionEvent;->getRawX()F
|
||||
|
||||
move-result v0
|
||||
invoke-virtual {p1}, Landroid/view/MotionEvent;->getRawY()F
|
||||
|
||||
iput v0, p0, Lradiant/MiniPlayerTrackGestures$Gesture;->c:F
|
||||
|
||||
const/4 v0, 0x1
|
||||
|
||||
iput-boolean v0, p0, Lradiant/MiniPlayerTrackGestures$Gesture;->d:Z
|
||||
|
||||
move-result v1
|
||||
invoke-static {v0, v1}, Lradiant/MiniPlayerTrackGestures;->moveDrag(FF)V
|
||||
goto :done
|
||||
|
||||
# ACTION_UP
|
||||
:up
|
||||
iget-boolean v0, p0, Lradiant/MiniPlayerTrackGestures$Gesture;->d:Z
|
||||
|
||||
if-eqz v0, :done
|
||||
|
||||
const/4 v0, 0x0
|
||||
|
||||
iput-boolean v0, p0, Lradiant/MiniPlayerTrackGestures$Gesture;->d:Z
|
||||
|
||||
invoke-virtual {p1}, Landroid/view/MotionEvent;->getRawX()F
|
||||
|
||||
move-result v0
|
||||
|
||||
iget v1, p0, Lradiant/MiniPlayerTrackGestures$Gesture;->b:F
|
||||
|
||||
sub-float/2addr v0, v1
|
||||
|
||||
invoke-virtual {p1}, Landroid/view/MotionEvent;->getRawY()F
|
||||
|
||||
move-result v1
|
||||
invoke-static {v0, v1}, Lradiant/MiniPlayerTrackGestures;->finishDrag(FF)I
|
||||
|
||||
iget v2, p0, Lradiant/MiniPlayerTrackGestures$Gesture;->c:F
|
||||
move-result v0
|
||||
|
||||
sub-float/2addr v1, v2
|
||||
if-eqz v0, :done
|
||||
|
||||
invoke-static {v0}, Ljava/lang/Math;->abs(F)F
|
||||
|
||||
move-result v2
|
||||
|
||||
const/high16 v3, 0x42400000 # 48.0f -> at least 48dp horizontal swipe
|
||||
|
||||
invoke-static {v3}, Lradiant/MiniPlayerTrackGestures$Gesture;->dp(F)F
|
||||
|
||||
move-result v3
|
||||
|
||||
cmpg-float v4, v2, v3
|
||||
|
||||
if-gez v4, :check_axis
|
||||
|
||||
goto :done
|
||||
|
||||
:check_axis
|
||||
invoke-static {v1}, Ljava/lang/Math;->abs(F)F
|
||||
|
||||
move-result v1
|
||||
|
||||
const/high16 v3, 0x3fc00000 # 1.5f -> horizontal distance must dominate vertical mov. by 1.5x
|
||||
|
||||
mul-float/2addr v1, v3
|
||||
|
||||
cmpg-float v2, v2, v1
|
||||
|
||||
if-lez v2, :done
|
||||
|
||||
const/4 v1, 0x0
|
||||
|
||||
cmpg-float v0, v0, v1
|
||||
|
||||
# Negative dx = swipe left -> next. Positive dx = swipe right -> previous
|
||||
if-ltz v0, :next
|
||||
# Negative result = swipe left -> next. Positive result = swipe right -> previous
|
||||
if-gez v0, :previous
|
||||
|
||||
invoke-static {}, Lradiant/MiniPlayerTrackGestures;->suppressTapOpen()V
|
||||
|
||||
invoke-direct {p0}, Lradiant/MiniPlayerTrackGestures$Gesture;->previousTrack()V
|
||||
|
||||
goto :done
|
||||
|
||||
:next
|
||||
invoke-static {}, Lradiant/MiniPlayerTrackGestures;->suppressTapOpen()V
|
||||
|
||||
invoke-direct {p0}, Lradiant/MiniPlayerTrackGestures$Gesture;->nextTrack()V
|
||||
goto :done
|
||||
|
||||
:previous
|
||||
|
||||
invoke-static {}, Lradiant/MiniPlayerTrackGestures;->suppressTapOpen()V
|
||||
invoke-direct {p0}, Lradiant/MiniPlayerTrackGestures$Gesture;->previousTrack()V
|
||||
goto :done
|
||||
|
||||
# ACTION_CANCEL
|
||||
:cancel
|
||||
const/4 v0, 0x0
|
||||
|
||||
iput-boolean v0, p0, Lradiant/MiniPlayerTrackGestures$Gesture;->d:Z
|
||||
invoke-static {}, Lradiant/MiniPlayerTrackGestures;->cancelDrag()V
|
||||
|
||||
:done
|
||||
sget-object p1, Lkotlin/u;->a:Lkotlin/u;
|
||||
|
||||
@@ -0,0 +1,70 @@
|
||||
.class public final Lradiant/MiniPlayerTrackGestures$OffsetLayer;
|
||||
.super Ljava/lang/Object;
|
||||
.implements Lyl0/l;
|
||||
|
||||
|
||||
# annotations
|
||||
.annotation system Ldalvik/annotation/EnclosingClass;
|
||||
value = Lradiant/MiniPlayerTrackGestures;
|
||||
.end annotation
|
||||
|
||||
.annotation system Ldalvik/annotation/InnerClass;
|
||||
accessFlags = 0x19
|
||||
name = "OffsetLayer"
|
||||
.end annotation
|
||||
|
||||
|
||||
# static fields
|
||||
.field public static final INSTANCE:Lradiant/MiniPlayerTrackGestures$OffsetLayer;
|
||||
|
||||
|
||||
# direct methods
|
||||
.method static constructor <clinit>()V
|
||||
.locals 1
|
||||
|
||||
new-instance v0, Lradiant/MiniPlayerTrackGestures$OffsetLayer;
|
||||
|
||||
invoke-direct {v0}, Lradiant/MiniPlayerTrackGestures$OffsetLayer;-><init>()V
|
||||
|
||||
sput-object v0, Lradiant/MiniPlayerTrackGestures$OffsetLayer;->INSTANCE:Lradiant/MiniPlayerTrackGestures$OffsetLayer;
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method private constructor <init>()V
|
||||
.locals 0
|
||||
|
||||
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
|
||||
# virtual methods
|
||||
.method public final invoke(Landroidx/compose/ui/graphics/GraphicsLayerScope;)Lkotlin/u;
|
||||
.locals 1
|
||||
|
||||
sget-object v0, Lradiant/MiniPlayerTrackGestures;->b:Landroidx/compose/runtime/MutableFloatState;
|
||||
|
||||
invoke-interface {v0}, Landroidx/compose/runtime/MutableFloatState;->getFloatValue()F
|
||||
|
||||
move-result v0
|
||||
|
||||
invoke-interface {p1, v0}, Landroidx/compose/ui/graphics/GraphicsLayerScope;->setTranslationX(F)V
|
||||
|
||||
sget-object p1, Lkotlin/u;->a:Lkotlin/u;
|
||||
|
||||
return-object p1
|
||||
.end method
|
||||
|
||||
.method public bridge synthetic invoke(Ljava/lang/Object;)Ljava/lang/Object;
|
||||
.locals 0
|
||||
|
||||
check-cast p1, Landroidx/compose/ui/graphics/GraphicsLayerScope;
|
||||
|
||||
invoke-virtual {p0, p1}, Lradiant/MiniPlayerTrackGestures$OffsetLayer;->invoke(Landroidx/compose/ui/graphics/GraphicsLayerScope;)Lkotlin/u;
|
||||
|
||||
move-result-object p1
|
||||
|
||||
return-object p1
|
||||
.end method
|
||||
@@ -0,0 +1,60 @@
|
||||
.class public final Lradiant/MiniPlayerTrackGestures$ResetAnimator;
|
||||
.super Ljava/lang/Object;
|
||||
.implements Landroid/animation/ValueAnimator$AnimatorUpdateListener;
|
||||
|
||||
|
||||
# annotations
|
||||
.annotation system Ldalvik/annotation/EnclosingClass;
|
||||
value = Lradiant/MiniPlayerTrackGestures;
|
||||
.end annotation
|
||||
|
||||
.annotation system Ldalvik/annotation/InnerClass;
|
||||
accessFlags = 0x19
|
||||
name = "ResetAnimator"
|
||||
.end annotation
|
||||
|
||||
|
||||
# direct methods
|
||||
.method public constructor <init>()V
|
||||
.locals 0
|
||||
|
||||
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
|
||||
# virtual methods
|
||||
.method public final onAnimationUpdate(Landroid/animation/ValueAnimator;)V
|
||||
.locals 3
|
||||
|
||||
move-object v0, p1
|
||||
|
||||
invoke-virtual {p1}, Landroid/animation/ValueAnimator;->getAnimatedValue()Ljava/lang/Object;
|
||||
|
||||
move-result-object v1
|
||||
|
||||
check-cast v1, Ljava/lang/Float;
|
||||
|
||||
invoke-virtual {v1}, Ljava/lang/Float;->floatValue()F
|
||||
|
||||
move-result v1
|
||||
|
||||
invoke-static {v1}, Lradiant/MiniPlayerTrackGestures;->setDragOffsetDirect(F)V
|
||||
|
||||
invoke-virtual {v0}, Landroid/animation/ValueAnimator;->getAnimatedFraction()F
|
||||
|
||||
move-result v1
|
||||
|
||||
const/high16 v2, 0x3f800000 # 1.0f
|
||||
|
||||
cmpg-float v1, v1, v2
|
||||
|
||||
if-gez v1, :done
|
||||
|
||||
invoke-static {v0}, Lradiant/MiniPlayerTrackGestures;->clearResetAnimator(Landroid/animation/ValueAnimator;)V
|
||||
|
||||
:done
|
||||
|
||||
return-void
|
||||
.end method
|
||||
@@ -5,8 +5,38 @@
|
||||
# static fields
|
||||
.field private static a:J
|
||||
|
||||
.field public static b:Landroidx/compose/runtime/MutableFloatState;
|
||||
|
||||
.field private static c:Landroid/animation/ValueAnimator;
|
||||
|
||||
.field private static d:Ljava/lang/Object;
|
||||
|
||||
# X at ACTION_DOWN
|
||||
.field private static e:F
|
||||
|
||||
# Y at ACTION_DOWN
|
||||
.field private static f:F
|
||||
|
||||
.field private static g:Z
|
||||
|
||||
.field private static h:Z
|
||||
|
||||
|
||||
# direct methods
|
||||
.method static constructor <clinit>()V
|
||||
.locals 1
|
||||
|
||||
const/4 v0, 0x0
|
||||
|
||||
invoke-static {v0}, Landroidx/compose/runtime/PrimitiveSnapshotStateKt;->mutableFloatStateOf(F)Landroidx/compose/runtime/MutableFloatState;
|
||||
|
||||
move-result-object v0
|
||||
|
||||
sput-object v0, Lradiant/MiniPlayerTrackGestures;->b:Landroidx/compose/runtime/MutableFloatState;
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method private constructor <init>()V
|
||||
.locals 0
|
||||
|
||||
@@ -15,6 +45,372 @@
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method public static animateReset()V
|
||||
.locals 7
|
||||
|
||||
sget-object v0, Lradiant/MiniPlayerTrackGestures;->c:Landroid/animation/ValueAnimator;
|
||||
|
||||
if-eqz v0, :read_offset
|
||||
|
||||
invoke-virtual {v0}, Landroid/animation/ValueAnimator;->cancel()V
|
||||
|
||||
const/4 v0, 0x0
|
||||
|
||||
sput-object v0, Lradiant/MiniPlayerTrackGestures;->c:Landroid/animation/ValueAnimator;
|
||||
|
||||
:read_offset
|
||||
sget-object v0, Lradiant/MiniPlayerTrackGestures;->b:Landroidx/compose/runtime/MutableFloatState;
|
||||
|
||||
invoke-interface {v0}, Landroidx/compose/runtime/MutableFloatState;->getFloatValue()F
|
||||
|
||||
move-result v0
|
||||
|
||||
invoke-static {v0}, Ljava/lang/Math;->abs(F)F
|
||||
|
||||
move-result v1
|
||||
|
||||
const/4 v3, 0x0
|
||||
|
||||
const/high16 v2, 0x3f000000 # 0.5f
|
||||
|
||||
cmpg-float v1, v1, v2
|
||||
|
||||
if-lez v1, :snap_zero
|
||||
|
||||
const/4 v1, 0x2
|
||||
|
||||
new-array v1, v1, [F
|
||||
|
||||
const/4 v2, 0x0
|
||||
|
||||
aput v0, v1, v2
|
||||
|
||||
const/4 v0, 0x1
|
||||
|
||||
aput v3, v1, v0
|
||||
|
||||
invoke-static {v1}, Landroid/animation/ValueAnimator;->ofFloat([F)Landroid/animation/ValueAnimator;
|
||||
|
||||
move-result-object v1
|
||||
|
||||
const-wide/16 v4, 0xb4 # 180ms
|
||||
|
||||
invoke-virtual {v1, v4, v5}, Landroid/animation/ValueAnimator;->setDuration(J)Landroid/animation/ValueAnimator;
|
||||
|
||||
new-instance v0, Landroid/view/animation/DecelerateInterpolator;
|
||||
|
||||
const/high16 v4, 0x3fc00000 # 1.5f
|
||||
|
||||
invoke-direct {v0, v4}, Landroid/view/animation/DecelerateInterpolator;-><init>(F)V
|
||||
|
||||
invoke-virtual {v1, v0}, Landroid/animation/ValueAnimator;->setInterpolator(Landroid/animation/TimeInterpolator;)V
|
||||
|
||||
new-instance v0, Lradiant/MiniPlayerTrackGestures$ResetAnimator;
|
||||
|
||||
invoke-direct {v0}, Lradiant/MiniPlayerTrackGestures$ResetAnimator;-><init>()V
|
||||
|
||||
invoke-virtual {v1, v0}, Landroid/animation/ValueAnimator;->addUpdateListener(Landroid/animation/ValueAnimator$AnimatorUpdateListener;)V
|
||||
|
||||
sput-object v1, Lradiant/MiniPlayerTrackGestures;->c:Landroid/animation/ValueAnimator;
|
||||
|
||||
invoke-virtual {v1}, Landroid/animation/ValueAnimator;->start()V
|
||||
|
||||
return-void
|
||||
|
||||
:snap_zero
|
||||
invoke-static {v3}, Lradiant/MiniPlayerTrackGestures;->setDragOffsetDirect(F)V
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method public static beginDrag(FF)V
|
||||
.locals 2
|
||||
|
||||
sput p0, Lradiant/MiniPlayerTrackGestures;->e:F
|
||||
|
||||
sput p1, Lradiant/MiniPlayerTrackGestures;->f:F
|
||||
|
||||
const/4 v0, 0x1
|
||||
|
||||
sput-boolean v0, Lradiant/MiniPlayerTrackGestures;->g:Z
|
||||
|
||||
const/4 v0, 0x0
|
||||
|
||||
sput-boolean v0, Lradiant/MiniPlayerTrackGestures;->h:Z
|
||||
|
||||
sget-object v0, Lradiant/MiniPlayerTrackGestures;->c:Landroid/animation/ValueAnimator;
|
||||
|
||||
if-eqz v0, :zero
|
||||
|
||||
invoke-virtual {v0}, Landroid/animation/ValueAnimator;->cancel()V
|
||||
|
||||
const/4 v0, 0x0
|
||||
|
||||
sput-object v0, Lradiant/MiniPlayerTrackGestures;->c:Landroid/animation/ValueAnimator;
|
||||
|
||||
:zero
|
||||
const/4 v0, 0x0
|
||||
|
||||
invoke-static {v0}, Lradiant/MiniPlayerTrackGestures;->setDragOffsetDirect(F)V
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method public static cancelDrag()V
|
||||
.locals 1
|
||||
|
||||
const/4 v0, 0x0
|
||||
|
||||
sput-boolean v0, Lradiant/MiniPlayerTrackGestures;->g:Z
|
||||
|
||||
sput-boolean v0, Lradiant/MiniPlayerTrackGestures;->h:Z
|
||||
|
||||
invoke-static {}, Lradiant/MiniPlayerTrackGestures;->animateReset()V
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method public static clearResetAnimator(Landroid/animation/ValueAnimator;)V
|
||||
.locals 1
|
||||
|
||||
sget-object v0, Lradiant/MiniPlayerTrackGestures;->c:Landroid/animation/ValueAnimator;
|
||||
|
||||
if-ne v0, p0, :done
|
||||
|
||||
const/4 v0, 0x0
|
||||
|
||||
sput-object v0, Lradiant/MiniPlayerTrackGestures;->c:Landroid/animation/ValueAnimator;
|
||||
|
||||
:done
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method public static finishDrag(FF)I
|
||||
.locals 5
|
||||
|
||||
sget-boolean v0, Lradiant/MiniPlayerTrackGestures;->g:Z
|
||||
|
||||
if-nez v0, :active
|
||||
|
||||
const/4 v0, 0x0
|
||||
|
||||
return v0
|
||||
|
||||
:active
|
||||
const/4 v0, 0x0
|
||||
|
||||
sput-boolean v0, Lradiant/MiniPlayerTrackGestures;->g:Z
|
||||
|
||||
sget-boolean v1, Lradiant/MiniPlayerTrackGestures;->h:Z
|
||||
|
||||
sput-boolean v0, Lradiant/MiniPlayerTrackGestures;->h:Z
|
||||
|
||||
sget v2, Lradiant/MiniPlayerTrackGestures;->e:F
|
||||
|
||||
sub-float/2addr p0, v2
|
||||
|
||||
sget v2, Lradiant/MiniPlayerTrackGestures;->f:F
|
||||
|
||||
sub-float/2addr p1, v2
|
||||
|
||||
if-eqz v1, :reset
|
||||
|
||||
invoke-static {}, Lradiant/MiniPlayerTrackGestures;->suppressTapOpen()V
|
||||
|
||||
:reset
|
||||
invoke-static {}, Lradiant/MiniPlayerTrackGestures;->animateReset()V
|
||||
|
||||
invoke-static {p0}, Ljava/lang/Math;->abs(F)F
|
||||
|
||||
move-result v1
|
||||
|
||||
const/high16 v2, 0x42400000 # 48.0f -> at least 48dp horizontal swipe
|
||||
|
||||
invoke-static {v2}, Lradiant/MiniPlayerTrackGestures;->dp(F)F
|
||||
|
||||
move-result v2
|
||||
|
||||
cmpg-float v3, v1, v2
|
||||
|
||||
if-gez v3, :check_axis
|
||||
|
||||
return v0
|
||||
|
||||
:check_axis
|
||||
invoke-static {p1}, Ljava/lang/Math;->abs(F)F
|
||||
|
||||
move-result p1
|
||||
|
||||
const/high16 v2, 0x3fc00000 # 1.5f -> horizontal distance must dominate vertical mov. by 1.5x
|
||||
|
||||
mul-float/2addr p1, v2
|
||||
|
||||
cmpg-float v1, v1, p1
|
||||
|
||||
if-lez v1, :no_swipe
|
||||
|
||||
const/4 p1, 0x0
|
||||
|
||||
cmpg-float p0, p0, p1
|
||||
|
||||
if-ltz p0, :next
|
||||
|
||||
const/4 v0, 0x1
|
||||
|
||||
return v0
|
||||
|
||||
:next
|
||||
const/4 v0, -0x1
|
||||
|
||||
return v0
|
||||
|
||||
:no_swipe
|
||||
return v0
|
||||
.end method
|
||||
|
||||
.method public static moveDrag(FF)V
|
||||
.locals 6
|
||||
|
||||
sget-boolean v0, Lradiant/MiniPlayerTrackGestures;->g:Z
|
||||
|
||||
if-eqz v0, :done
|
||||
|
||||
invoke-static {}, Lradiant/MiniPlayerGestures;->isAnyDragging()Z
|
||||
|
||||
move-result v0
|
||||
|
||||
if-eqz v0, :move_continue
|
||||
|
||||
const/4 v0, 0x0
|
||||
|
||||
sput-boolean v0, Lradiant/MiniPlayerTrackGestures;->g:Z
|
||||
|
||||
sput-boolean v0, Lradiant/MiniPlayerTrackGestures;->h:Z
|
||||
|
||||
invoke-static {}, Lradiant/MiniPlayerTrackGestures;->animateReset()V
|
||||
|
||||
goto :done
|
||||
|
||||
:move_continue
|
||||
sget v0, Lradiant/MiniPlayerTrackGestures;->e:F
|
||||
|
||||
sub-float/2addr p0, v0
|
||||
|
||||
sget v0, Lradiant/MiniPlayerTrackGestures;->f:F
|
||||
|
||||
sub-float/2addr p1, v0
|
||||
|
||||
invoke-static {p0}, Ljava/lang/Math;->abs(F)F
|
||||
|
||||
move-result v0
|
||||
|
||||
invoke-static {p1}, Ljava/lang/Math;->abs(F)F
|
||||
|
||||
move-result v1
|
||||
|
||||
sget-boolean v2, Lradiant/MiniPlayerTrackGestures;->h:Z
|
||||
|
||||
if-nez v2, :publish
|
||||
|
||||
const/high16 v2, 0x40c00000 # 6.0f dp dead zone
|
||||
|
||||
invoke-static {v2}, Lradiant/MiniPlayerTrackGestures;->dp(F)F
|
||||
|
||||
move-result v2
|
||||
|
||||
cmpg-float v3, v0, v2
|
||||
|
||||
if-gez v3, :move_axis
|
||||
|
||||
goto :done
|
||||
|
||||
:move_axis
|
||||
const v2, 0x3f8ccccd # 1.1f horizontal dominance while dragging
|
||||
|
||||
mul-float/2addr v1, v2
|
||||
|
||||
cmpg-float v2, v0, v1
|
||||
|
||||
if-gez v2, :accept
|
||||
|
||||
goto :done
|
||||
|
||||
:accept
|
||||
const/4 v2, 0x1
|
||||
|
||||
sput-boolean v2, Lradiant/MiniPlayerTrackGestures;->h:Z
|
||||
|
||||
:publish
|
||||
invoke-static {}, Lradiant/MiniPlayerTrackGestures;->suppressTapOpen()V
|
||||
|
||||
invoke-static {p0}, Lradiant/MiniPlayerTrackGestures;->setDragOffset(F)V
|
||||
|
||||
:done
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method private static dp(F)F
|
||||
.locals 1
|
||||
|
||||
invoke-static {}, Landroid/content/res/Resources;->getSystem()Landroid/content/res/Resources;
|
||||
|
||||
move-result-object v0
|
||||
|
||||
invoke-virtual {v0}, Landroid/content/res/Resources;->getDisplayMetrics()Landroid/util/DisplayMetrics;
|
||||
|
||||
move-result-object v0
|
||||
|
||||
iget v0, v0, Landroid/util/DisplayMetrics;->density:F
|
||||
|
||||
mul-float/2addr p0, v0
|
||||
|
||||
return p0
|
||||
.end method
|
||||
|
||||
.method public static feedbackModifier(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;
|
||||
.locals 2
|
||||
|
||||
const/high16 v0, 0x3f800000 # 1.0f
|
||||
|
||||
invoke-static {p0, v0}, Landroidx/compose/ui/ZIndexModifierKt;->zIndex(Landroidx/compose/ui/Modifier;F)Landroidx/compose/ui/Modifier;
|
||||
|
||||
move-result-object p0
|
||||
|
||||
sget-object v0, Lradiant/MiniPlayerTrackGestures$OffsetLayer;->INSTANCE:Lradiant/MiniPlayerTrackGestures$OffsetLayer;
|
||||
|
||||
invoke-static {p0, v0}, Landroidx/compose/ui/graphics/GraphicsLayerModifierKt;->graphicsLayer(Landroidx/compose/ui/Modifier;Lyl0/l;)Landroidx/compose/ui/Modifier;
|
||||
|
||||
move-result-object p0
|
||||
|
||||
return-object p0
|
||||
.end method
|
||||
|
||||
.method public static onRenderedItem(Ljava/lang/Object;)V
|
||||
.locals 2
|
||||
|
||||
sget-object v0, Lradiant/MiniPlayerTrackGestures;->d:Ljava/lang/Object;
|
||||
|
||||
if-eqz v0, :store_initial
|
||||
|
||||
invoke-virtual {v0, p0}, Ljava/lang/Object;->equals(Ljava/lang/Object;)Z
|
||||
|
||||
move-result v1
|
||||
|
||||
if-nez v1, :done
|
||||
|
||||
sput-object p0, Lradiant/MiniPlayerTrackGestures;->d:Ljava/lang/Object;
|
||||
|
||||
invoke-static {}, Lradiant/MiniPlayerTrackGestures;->animateReset()V
|
||||
|
||||
return-void
|
||||
|
||||
:store_initial
|
||||
sput-object p0, Lradiant/MiniPlayerTrackGestures;->d:Ljava/lang/Object;
|
||||
|
||||
:done
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method public static consumeTapOpenSuppression()Z
|
||||
.locals 5
|
||||
|
||||
@@ -67,6 +463,80 @@
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method public static setDragOffset(F)V
|
||||
.locals 5
|
||||
|
||||
sget-object v0, Lradiant/MiniPlayerTrackGestures;->c:Landroid/animation/ValueAnimator;
|
||||
|
||||
if-eqz v0, :rubber_band
|
||||
|
||||
invoke-virtual {v0}, Landroid/animation/ValueAnimator;->cancel()V
|
||||
|
||||
const/4 v0, 0x0
|
||||
|
||||
sput-object v0, Lradiant/MiniPlayerTrackGestures;->c:Landroid/animation/ValueAnimator;
|
||||
|
||||
:rubber_band
|
||||
invoke-static {p0}, Ljava/lang/Math;->abs(F)F
|
||||
|
||||
move-result v0
|
||||
|
||||
const/high16 v1, 0x42800000 # 64.0f dp free travel
|
||||
|
||||
invoke-static {v1}, Lradiant/MiniPlayerTrackGestures;->dp(F)F
|
||||
|
||||
move-result v1
|
||||
|
||||
cmpg-float v2, v0, v1
|
||||
|
||||
if-lez v2, :publish
|
||||
|
||||
sub-float/2addr v0, v1
|
||||
|
||||
const/high16 v2, 0x3e800000 # 0.25f resistance after 64dp
|
||||
|
||||
mul-float/2addr v0, v2
|
||||
|
||||
const v2, 0x3eb33333 # 0.35f max extra travel
|
||||
|
||||
mul-float/2addr v2, v1
|
||||
|
||||
invoke-static {v0, v2}, Ljava/lang/Math;->min(FF)F
|
||||
|
||||
move-result v0
|
||||
|
||||
add-float/2addr v0, v1
|
||||
|
||||
const/4 v1, 0x0
|
||||
|
||||
cmpg-float v2, p0, v1
|
||||
|
||||
if-gez v2, :positive
|
||||
|
||||
neg-float p0, v0
|
||||
|
||||
goto :publish
|
||||
|
||||
:positive
|
||||
move p0, v0
|
||||
|
||||
|
||||
:publish
|
||||
invoke-static {p0}, Lradiant/MiniPlayerTrackGestures;->setDragOffsetDirect(F)V
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method public static setDragOffsetDirect(F)V
|
||||
.locals 1
|
||||
|
||||
sget-object v0, Lradiant/MiniPlayerTrackGestures;->b:Landroidx/compose/runtime/MutableFloatState;
|
||||
|
||||
invoke-interface {v0, p0}, Landroidx/compose/runtime/MutableFloatState;->setFloatValue(F)V
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method public static trackModifier(Landroidx/compose/ui/Modifier;Lyl0/l;)Landroidx/compose/ui/Modifier;
|
||||
.locals 1
|
||||
|
||||
|
||||
@@ -11,6 +11,29 @@
|
||||
|
||||
.line 38
|
||||
sget-object v21, Landroidx/compose/ui/Alignment;->Companion:Landroidx/compose/ui/Alignment$Companion;
|
||||
@@ -1884,5 +1888,5 @@
|
||||
.line 56
|
||||
iget-object v6, v0, Lcom/tidal/android/feature/appscaffold/ui/s;->b:Lcom/tidal/android/feature/appscaffold/ui/p;
|
||||
-
|
||||
+ invoke-static {v6}, Lradiant/MiniPlayerTrackGestures;->onRenderedItem(Ljava/lang/Object;)V # reset stale drag offset if track metadata changes mid-gesture
|
||||
.line 57
|
||||
invoke-virtual/range {v16 .. v16}, Lcom/squareup/ui/market/core/theme/MarketStylesheet;->getBorderRadii()Lcom/squareup/ui/market/core/theme/MarketStylesheet$b;
|
||||
@@ -1919,5 +1923,6 @@
|
||||
invoke-static {v5, v4}, Landroidx/compose/foundation/layout/SizeKt;->size-3ABfNKs(Landroidx/compose/ui/Modifier;F)Landroidx/compose/ui/Modifier;
|
||||
-
|
||||
move-result-object v4
|
||||
-
|
||||
+ invoke-static {v4}, Lradiant/MiniPlayerTrackGestures;->feedbackModifier(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; # move the whole cover container with horizontal swipe
|
||||
+ move-result-object v4
|
||||
+
|
||||
.line 63
|
||||
@@ -2032,3 +2038,5 @@
|
||||
move-result-object v4
|
||||
-
|
||||
+ invoke-static {v4}, Lradiant/MiniPlayerTrackGestures;->feedbackModifier(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; # move title/artist with horizontal swipe
|
||||
+ move-result-object v4
|
||||
+
|
||||
.line 72
|
||||
--- a/com/tidal/android/feature/appscaffold/ui/MiniPlayerViewModel.smali
|
||||
+++ b/com/tidal/android/feature/appscaffold/ui/MiniPlayerViewModel.smali
|
||||
@@ -816,10 +816,10 @@
|
||||
|
||||
Reference in New Issue
Block a user