feat(swipe to queue): remove from queue gesture rework

This commit is contained in:
Se7en-dev committed 2026-08-20 22:22:10 +02:00
1 parent 38300573aa
commit 3aabcdff26
4 files changed
+338 -4

No files matched your search

@@ -429,7 +429,8 @@
"swipe-to-queue.patch"
],
"extensionFiles": [
"radiant/SwipeToQueue.smali"
"radiant/SwipeToQueue.smali",
"radiant/QueueSwipeRemove.smali"
],
"title": "Swipe to Queue",
"description": "Swipe on tracks (in library/my tracks only for now) to add them to the play queue.",
@@ -0,0 +1,222 @@
.class public final Lradiant/QueueSwipeRemove;
.super Ljava/lang/Object;
.source "QueueSwipeRemove.smali"
# direct methods
.method public static draw(Lcom/aspiro/wamp/nowplaying/view/playqueue/touchmanagement/ItemTouchHelperCallbackImpl;Landroid/graphics/Canvas;Landroidx/recyclerview/widget/RecyclerView$ViewHolder;FIZ)V
.locals 10
const/4 v0, 0x1
if-ne p4, v0, :done
iget-object v0, p2, Landroidx/recyclerview/widget/RecyclerView$ViewHolder;->itemView:Landroid/view/View;
const/4 v1, 0x0
int-to-float v1, v1
cmpg-float v2, p3, v1
invoke-virtual {v0}, Landroid/view/View;->getTop()I
move-result v3
invoke-virtual {v0}, Landroid/view/View;->getBottom()I
move-result v4
if-gez v2, :right_swipe
# left swipe
invoke-virtual {v0}, Landroid/view/View;->getRight()I
move-result v1
float-to-int v2, p3
add-int/2addr v2, v1
goto :bounds_ready
:right_swipe
cmpl-float v1, p3, v1
if-lez v1, :done
# right swipe
invoke-virtual {v0}, Landroid/view/View;->getLeft()I
move-result v2
float-to-int v1, p3
add-int/2addr v1, v2
:bounds_ready
sub-int v5, v1, v2
if-lez v5, :done
iget-object v6, p0, Lcom/aspiro/wamp/nowplaying/view/playqueue/touchmanagement/ItemTouchHelperCallbackImpl;->c:Landroid/graphics/drawable/ColorDrawable;
invoke-virtual {v6, v2, v3, v1, v4}, Landroid/graphics/drawable/Drawable;->setBounds(IIII)V
invoke-virtual {v0}, Landroid/view/View;->getWidth()I
move-result v7
if-lez v7, :draw_background
# 30% threshold
mul-int/lit8 v8, v7, 0x3
div-int/lit8 v8, v8, 0xa
if-eqz p5, :draw_alpha
if-lt v5, v8, :below_threshold
const/4 v9, 0x1
goto :update_haptic
:below_threshold
const/4 v9, 0x0
:update_haptic
iget-boolean p2, p0, Lcom/aspiro/wamp/nowplaying/view/playqueue/touchmanagement/ItemTouchHelperCallbackImpl;->i:Z
if-eq v9, p2, :draw_alpha
iput-boolean v9, p0, Lcom/aspiro/wamp/nowplaying/view/playqueue/touchmanagement/ItemTouchHelperCallbackImpl;->i:Z
# CLOCK_TICK
const/4 p2, 0x4
invoke-virtual {v0, p2}, Landroid/view/View;->performHapticFeedback(I)Z
:draw_alpha
const/16 v9, 0x40
mul-int/2addr v9, v5
div-int/2addr v9, v8
const/16 v8, 0x40
invoke-static {v9, v8}, Ljava/lang/Math;->min(II)I
move-result v8
add-int/lit16 v8, v8, 0xbf
invoke-virtual {v6, v8}, Landroid/graphics/drawable/Drawable;->setAlpha(I)V
:draw_background
invoke-virtual {v6, p1}, Landroid/graphics/drawable/ColorDrawable;->draw(Landroid/graphics/Canvas;)V
iget-object v6, p0, Lcom/aspiro/wamp/nowplaying/view/playqueue/touchmanagement/ItemTouchHelperCallbackImpl;->h:Landroid/graphics/drawable/Drawable;
if-eqz v6, :done
invoke-virtual {v6}, Landroid/graphics/drawable/Drawable;->getIntrinsicWidth()I
move-result v7
invoke-virtual {v6}, Landroid/graphics/drawable/Drawable;->getIntrinsicHeight()I
move-result v8
if-lez v7, :done
if-lez v8, :done
sub-int v9, v4, v3
sub-int/2addr v9, v8
div-int/lit8 v9, v9, 0x2
const/4 p2, 0x0
int-to-float p2, p2
cmpg-float p2, p3, p2
if-gez p2, :right_icon
sub-int p2, v1, v9
sub-int p4, p2, v7
add-int p2, v5, v7
div-int/lit8 p2, p2, 0x2
sub-int p2, v1, p2
invoke-static {p2, p4}, Ljava/lang/Math;->max(II)I
move-result p2
goto :icon_positioned
:right_icon
add-int p2, v2, v9
sub-int p4, v5, v7
div-int/lit8 p4, p4, 0x2
add-int/2addr p4, v2
invoke-static {p4, p2}, Ljava/lang/Math;->min(II)I
move-result p2
:icon_positioned
add-int p4, p2, v7
invoke-virtual {p1}, Landroid/graphics/Canvas;->save()I
move-result v7
invoke-virtual {p1, v2, v3, v1, v4}, Landroid/graphics/Canvas;->clipRect(IIII)Z
add-int v2, v3, v9
add-int v3, v2, v8
invoke-virtual {v6, p2, v2, p4, v3}, Landroid/graphics/drawable/Drawable;->setBounds(IIII)V
const/16 v8, 0xff
invoke-virtual {v6, v8}, Landroid/graphics/drawable/Drawable;->setAlpha(I)V
invoke-virtual {v6, p1}, Landroid/graphics/drawable/Drawable;->draw(Landroid/graphics/Canvas;)V
invoke-virtual {p1, v7}, Landroid/graphics/Canvas;->restoreToCount(I)V
:done
return-void
.end method
.method public static setRemoveDuration(Landroidx/recyclerview/widget/RecyclerView;)V
.locals 2
invoke-virtual {p0}, Landroidx/recyclerview/widget/RecyclerView;->getItemAnimator()Landroidx/recyclerview/widget/RecyclerView$ItemAnimator;
move-result-object p0
if-eqz p0, :done
# 80ms (faster animation, native is 120ms)
const-wide/16 v0, 0x50
invoke-virtual {p0, v0, v1}, Landroidx/recyclerview/widget/RecyclerView$ItemAnimator;->setRemoveDuration(J)V
:done
return-void
.end method
+2 -1
View File
@@ -429,7 +429,8 @@
"swipe-to-queue.patch"
],
"extensionFiles": [
"radiant/SwipeToQueue.smali"
"radiant/SwipeToQueue.smali",
"radiant/QueueSwipeRemove.smali"
],
"title": "Swipe to Queue",
"description": "Swipe on tracks (in library/my tracks only for now) to add them to the play queue.",
+112 -2
View File
@@ -138,7 +138,7 @@
invoke-virtual {p0}, Lcom/aspiro/wamp/mycollection/subpages/favoritetracks/FavoriteTracksFragment;->N()Lcom/aspiro/wamp/mycollection/subpages/favoritetracks/n;
--- a/h4/a.smali
+++ b/h4/a.smali
@@ -931,3 +931,49 @@
@@ -931,1 +931,46 @@
.end method
+
+.method public final q(Landroidx/fragment/app/FragmentActivity;Lcom/aspiro/wamp/model/Track;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/aspiro/wamp/playqueue/source/model/Source;)Z
@@ -185,6 +185,116 @@
+
+ return v0
+.end method
--- a/com/aspiro/wamp/nowplaying/view/playqueue/touchmanagement/ItemTouchHelperCallbackImpl.smali
+++ b/com/aspiro/wamp/nowplaying/view/playqueue/touchmanagement/ItemTouchHelperCallbackImpl.smali
@@ -31,6 +31,10 @@
.field public g:I
+.field public final h:Landroid/graphics/drawable/Drawable;
+
+.field public i:Z
+
.method public final o(Landroidx/fragment/app/FragmentActivity;Lcom/aspiro/wamp/model/Credit;Lcom/tidal/android/navigation/NavigationInfo;)V
# direct methods
.method public constructor <init>(Landroid/content/Context;Lcom/aspiro/wamp/nowplaying/view/playqueue/touchmanagement/a;Lcom/aspiro/wamp/nowplaying/view/playqueue/l;)V
@@ -55,6 +59,26 @@
.line 10
.line 11
+ # trash icon
+ sget p2, Lcom/aspiro/wamp/R$drawable;->ic_delete:I
+
+ invoke-virtual {p1, p2}, Landroid/content/Context;->getDrawable(I)Landroid/graphics/drawable/Drawable;
+
+ move-result-object p2
+
+ if-eqz p2, :store_remove_icon
+
+ invoke-virtual {p2}, Landroid/graphics/drawable/Drawable;->mutate()Landroid/graphics/drawable/Drawable;
+
+ move-result-object p2
+
+ const/4 p3, -0x1
+
+ invoke-virtual {p2, p3}, Landroid/graphics/drawable/Drawable;->setTint(I)V
+
+ :store_remove_icon
+ iput-object p2, p0, Lcom/aspiro/wamp/nowplaying/view/playqueue/touchmanagement/ItemTouchHelperCallbackImpl;->h:Landroid/graphics/drawable/Drawable;
+
new-instance p2, Landroid/graphics/drawable/ColorDrawable;
.line 12
@@ -377,6 +401,10 @@
.line 5
.line 6
.line 7
+ const/4 v0, 0x0
+
+ iput-boolean v0, p0, Lcom/aspiro/wamp/nowplaying/view/playqueue/touchmanagement/ItemTouchHelperCallbackImpl;->i:Z
+
iget-object v0, p0, Lcom/aspiro/wamp/nowplaying/view/playqueue/touchmanagement/ItemTouchHelperCallbackImpl;->d:Lcom/aspiro/wamp/nowplaying/view/playqueue/touchmanagement/ItemTouchHelperCallbackImpl$ActionType;
.line 8
@@ -844,7 +872,7 @@
.line 32
.line 33
- const/4 v1, 0x4
+ const/16 v1, __RL_SWIPE_TO_QUEUE_DIRECTION__
.line 34
:cond_1
@@ -896,7 +924,23 @@
.end method
+.method public getSwipeEscapeVelocity(F)F
+ .locals 1
+ # Float.MAX_VALUE
+ const v0, 0x7f7fffff
+
+ return v0
+.end method
+
+.method public getSwipeThreshold(Landroidx/recyclerview/widget/RecyclerView$ViewHolder;)F
+ .locals 1
+ # 0.3f
+ const v0, 0x3e99999a
+
+ return v0
+.end method
+
.method public final onChildDraw(Landroid/graphics/Canvas;Landroidx/recyclerview/widget/RecyclerView;Landroidx/recyclerview/widget/RecyclerView$ViewHolder;FFIZ)V
- .locals 2
+ .locals 8
.line 1
invoke-virtual {p1}, Ljava/lang/Object;->getClass()Ljava/lang/Class;
@@ -916,6 +960,16 @@
.line 10
invoke-super/range {p0 .. p7}, Landroidx/recyclerview/widget/ItemTouchHelper$Callback;->onChildDraw(Landroid/graphics/Canvas;Landroidx/recyclerview/widget/RecyclerView;Landroidx/recyclerview/widget/RecyclerView$ViewHolder;FFIZ)V
+ move-object/from16 v0, p0
+ move-object/from16 v1, p1
+ move-object/from16 v2, p3
+ move/from16 v3, p4
+ move/from16 v4, p6
+ move/from16 v5, p7
+ invoke-static/range {v0 .. v5}, Lradiant/QueueSwipeRemove;->draw(Lcom/aspiro/wamp/nowplaying/view/playqueue/touchmanagement/ItemTouchHelperCallbackImpl;Landroid/graphics/Canvas;Landroidx/recyclerview/widget/RecyclerView$ViewHolder;FIZ)V
+
+ goto :cond_0
+
.line 11
.line 12
.line 13
--- a/com/aspiro/wamp/nowplaying/view/playqueue/l.smali
+++ b/com/aspiro/wamp/nowplaying/view/playqueue/l.smali
@@ -983,6 +983,8 @@
.line 121
move-result-object p1
+ invoke-static {p1}, Lradiant/QueueSwipeRemove;->setRemoveDuration(Landroidx/recyclerview/widget/RecyclerView;)V
+
.line 122
new-instance p2, Landroidx/recyclerview/widget/LinearLayoutManager;