diff --git a/Manager/app/src/main/assets/patches-manifest.json b/Manager/app/src/main/assets/patches-manifest.json index eb7e76f..401a27a 100644 --- a/Manager/app/src/main/assets/patches-manifest.json +++ b/Manager/app/src/main/assets/patches-manifest.json @@ -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.", diff --git a/patches/extension/radiant/QueueSwipeRemove.smali b/patches/extension/radiant/QueueSwipeRemove.smali new file mode 100644 index 0000000..c117a82 --- /dev/null +++ b/patches/extension/radiant/QueueSwipeRemove.smali @@ -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 diff --git a/patches/manifest.json b/patches/manifest.json index eb7e76f..401a27a 100644 --- a/patches/manifest.json +++ b/patches/manifest.json @@ -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.", diff --git a/patches/swipe-to-queue.patch b/patches/swipe-to-queue.patch index 9ad6554..bf6e8d2 100644 --- a/patches/swipe-to-queue.patch +++ b/patches/swipe-to-queue.patch @@ -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 (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; +