From 4dbbfba3a15b727fb445ad1e3c76b6ac1f66b611 Mon Sep 17 00:00:00 2001 From: Se7en-dev Date: Thu, 20 Aug 2026 22:03:01 +0200 Subject: [PATCH] feat(swipe to queue): support homepage lists, updates, track suggestions, and artist track credits --- .../app/src/main/assets/patches-manifest.json | 12 +- .../swipe/ArtistTrackCreditsQueue.smali | 161 +++++ .../swipe/ArtistTrackCreditsQueueAction.smali | 95 +++ .../swipe/ArtistTrackCreditsQueueEvent.smali | 34 + .../swipe/CompactGridMediaQueueAction.smali | 263 ++++++++ .../radiant/swipe/ComposeSwipeState.smali | 4 +- .../radiant/swipe/DynamicMediaQueue.smali | 634 ++++++++++++++++++ .../swipe/DynamicMediaQueueEvent.smali | 39 ++ .../radiant/swipe/FeedResolver.smali | 605 +++++++++++++++++ .../swipe/PublicPlaylistQueueAction.smali | 111 +++ .../radiant/swipe/SuggestionsResolver.smali | 431 ++++++++++++ .../swipe/VerticalMediaQueueAction.smali | 310 +++++++++ patches/manifest.json | 12 +- patches/swipe-to-queue-compose.patch | 231 ++++++- patches/swipe-to-queue.patch | 31 + 15 files changed, 2967 insertions(+), 6 deletions(-) create mode 100644 patches/extension/radiant/swipe/ArtistTrackCreditsQueue.smali create mode 100644 patches/extension/radiant/swipe/ArtistTrackCreditsQueueAction.smali create mode 100644 patches/extension/radiant/swipe/ArtistTrackCreditsQueueEvent.smali create mode 100644 patches/extension/radiant/swipe/CompactGridMediaQueueAction.smali create mode 100644 patches/extension/radiant/swipe/DynamicMediaQueue.smali create mode 100644 patches/extension/radiant/swipe/DynamicMediaQueueEvent.smali create mode 100644 patches/extension/radiant/swipe/FeedResolver.smali create mode 100644 patches/extension/radiant/swipe/PublicPlaylistQueueAction.smali create mode 100644 patches/extension/radiant/swipe/SuggestionsResolver.smali create mode 100644 patches/extension/radiant/swipe/VerticalMediaQueueAction.smali diff --git a/Manager/app/src/main/assets/patches-manifest.json b/Manager/app/src/main/assets/patches-manifest.json index 748ae88..0ac26a2 100644 --- a/Manager/app/src/main/assets/patches-manifest.json +++ b/Manager/app/src/main/assets/patches-manifest.json @@ -458,7 +458,17 @@ "radiant/swipe/ViewAllTrackQueue.smali", "radiant/swipe/ComposeSearchQueueEvent.smali", "radiant/swipe/ComposeSearchQueueAction.smali", - "radiant/swipe/ComposeSearchQueue.smali" + "radiant/swipe/ComposeSearchQueue.smali", + "radiant/swipe/FeedResolver.smali", + "radiant/swipe/ArtistTrackCreditsQueueEvent.smali", + "radiant/swipe/ArtistTrackCreditsQueueAction.smali", + "radiant/swipe/ArtistTrackCreditsQueue.smali", + "radiant/swipe/DynamicMediaQueueEvent.smali", + "radiant/swipe/CompactGridMediaQueueAction.smali", + "radiant/swipe/VerticalMediaQueueAction.smali", + "radiant/swipe/PublicPlaylistQueueAction.smali", + "radiant/swipe/DynamicMediaQueue.smali", + "radiant/swipe/SuggestionsResolver.smali" ], "title": "Swipe to Queue", "description": "Swipe on tracks/albums/playlists to add them to the play queue", diff --git a/patches/extension/radiant/swipe/ArtistTrackCreditsQueue.smali b/patches/extension/radiant/swipe/ArtistTrackCreditsQueue.smali new file mode 100644 index 0000000..044963a --- /dev/null +++ b/patches/extension/radiant/swipe/ArtistTrackCreditsQueue.smali @@ -0,0 +1,161 @@ +.class public final Lradiant/swipe/ArtistTrackCreditsQueue; +.super Ljava/lang/Object; +.source "ArtistTrackCreditsQueue.smali" + + +# direct methods +.method public static handle(Lcom/tidal/android/dynamicpages/ui/modules/artisttrackcredits/ArtistTrackCreditsModuleManager;Lradiant/swipe/ArtistTrackCreditsQueueEvent;)V + .locals 11 + + if-eqz p0, :done + + if-eqz p1, :done + + iget-object v0, p1, Lradiant/swipe/ArtistTrackCreditsQueueEvent;->pageId:Ljava/lang/String; + + if-eqz v0, :done + + invoke-virtual {v0}, Ljava/lang/String;->length()I + + move-result v1 + + if-lez v1, :done + + iget-object v1, p1, Lradiant/swipe/ArtistTrackCreditsQueueEvent;->moduleUuid:Ljava/lang/String; + + if-eqz v1, :done + + invoke-virtual {v1}, Ljava/lang/String;->length()I + + move-result v2 + + if-lez v2, :done + + iget-wide v2, p1, Lradiant/swipe/ArtistTrackCreditsQueueEvent;->trackId:J + + const-wide/16 v4, 0x0 + + cmp-long v4, v2, v4 + + if-lez v4, :done + + invoke-virtual {p0, v1}, Li60/c;->c(Ljava/lang/String;)Lc60/h; + + move-result-object v4 + + instance-of v5, v4, Lc60/d; + + if-eqz v5, :done + + check-cast v4, Lc60/d; + + iget-object v5, v4, Lc60/d;->b:Ljava/lang/String; + + invoke-virtual {v1, v5}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z + + move-result v1 + + if-eqz v1, :done + + iget-object v1, v4, Lc60/d;->f:Ljava/util/ArrayList; + + if-eqz v1, :done + + invoke-virtual {v1}, Ljava/util/ArrayList;->iterator()Ljava/util/Iterator; + + move-result-object v1 + + :find_track + invoke-interface {v1}, Ljava/util/Iterator;->hasNext()Z + + move-result v5 + + if-eqz v5, :done + + invoke-interface {v1}, Ljava/util/Iterator;->next()Ljava/lang/Object; + + move-result-object v5 + + instance-of v6, v5, Lc60/r$b; + + if-eqz v6, :find_track + + check-cast v5, Lc60/r$b; + + iget-object v5, v5, Lc60/r$b;->a:Lh40/n; + + instance-of v6, v5, Lh40/p; + + if-eqz v6, :find_track + + check-cast v5, Lh40/p; + + iget-wide v6, v5, Lh40/p;->a:J + + cmp-long v6, v6, v2 + + if-nez v6, :find_track + + iget-object v1, p0, Lcom/tidal/android/dynamicpages/ui/modules/artisttrackcredits/ArtistTrackCreditsModuleManager;->b:Lcom/tidal/android/dynamicpages/ui/b; + + instance-of v2, v1, Lcom/tidal/android/dynamicpages/ui/c; + + if-eqz v2, :done + + check-cast v1, Lcom/tidal/android/dynamicpages/ui/c; + + iget-object v6, v1, Lcom/tidal/android/dynamicpages/ui/c;->b:Lcom/tidal/android/navigation/NavigationInfo; + + if-eqz v6, :done + + iget-object v1, p1, Lradiant/swipe/ArtistTrackCreditsQueueEvent;->context:Landroid/content/Context; + + if-eqz v1, :done + + invoke-static {v5}, Lie0/i;->a(Lh40/p;)Lcom/aspiro/wamp/model/Track; + + move-result-object v7 + + if-eqz v7, :done + + iget-object v2, v4, Lc60/d;->a:Ljava/lang/String; + + if-eqz v2, :done + + new-instance v8, Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata; + + iget v3, v4, Lc60/d;->e:I + + invoke-static {v3}, Ljava/lang/String;->valueOf(I)Ljava/lang/String; + + move-result-object v3 + + invoke-direct {v8, v0, v2, v3}, Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;->(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V + + iget-wide v2, p1, Lradiant/swipe/ArtistTrackCreditsQueueEvent;->trackId:J + + invoke-static {v2, v3}, Ljava/lang/String;->valueOf(J)Ljava/lang/String; + + move-result-object v2 + + iget-object v3, v4, Lc60/d;->c:Ljava/lang/String; + + iget-object v10, v4, Lc60/d;->g:Ljava/lang/String; + + invoke-static {v10}, Lcom/aspiro/wamp/playqueue/source/model/ItemSource$NavigationType$a;->a(Ljava/lang/String;)Lcom/aspiro/wamp/playqueue/source/model/ItemSource$NavigationType; + + move-result-object v4 + + invoke-static {v2, v3, v6, v4}, Lcom/aspiro/wamp/playqueue/source/model/b;->j(Ljava/lang/String;Ljava/lang/String;Lcom/tidal/android/navigation/NavigationInfo;Lcom/aspiro/wamp/playqueue/source/model/ItemSource$NavigationType;)Lcom/aspiro/wamp/playqueue/source/model/ItemSource; + + move-result-object v9 + + if-eqz v9, :done + + invoke-virtual {v9, v7}, Lcom/aspiro/wamp/playqueue/source/model/Source;->addSourceItem(Lcom/aspiro/wamp/model/MediaItem;)V + + invoke-static {v1, v7, v8, v9}, Lradiant/swipe/QueueExecutor;->track(Landroid/content/Context;Lcom/aspiro/wamp/model/Track;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/aspiro/wamp/playqueue/source/model/Source;)Z + + :done + return-void +.end method diff --git a/patches/extension/radiant/swipe/ArtistTrackCreditsQueueAction.smali b/patches/extension/radiant/swipe/ArtistTrackCreditsQueueAction.smali new file mode 100644 index 0000000..2d51fef --- /dev/null +++ b/patches/extension/radiant/swipe/ArtistTrackCreditsQueueAction.smali @@ -0,0 +1,95 @@ +.class public final Lradiant/swipe/ArtistTrackCreditsQueueAction; +.super Ljava/lang/Object; +.source "ArtistTrackCreditsQueueAction.smali" + +# interfaces +.implements Lradiant/swipe/ComposeSwipeAction; + + +# instance fields +.field private final callback:Lam0/l; + +.field private context:Landroid/content/Context; + +.field private final moduleUuid:Ljava/lang/String; + +.field private final pageId:Ljava/lang/String; + +.field private final trackId:J + + +# direct methods +.method public constructor (Lam0/l;Ljava/lang/String;Ljava/lang/String;Lm40/e$e;)V + .locals 2 + + invoke-direct {p0}, Ljava/lang/Object;->()V + + iput-object p1, p0, Lradiant/swipe/ArtistTrackCreditsQueueAction;->callback:Lam0/l; + + iput-object p2, p0, Lradiant/swipe/ArtistTrackCreditsQueueAction;->pageId:Ljava/lang/String; + + iput-object p3, p0, Lradiant/swipe/ArtistTrackCreditsQueueAction;->moduleUuid:Ljava/lang/String; + + iget-wide v0, p4, Lm40/e$e;->a:J + + iput-wide v0, p0, Lradiant/swipe/ArtistTrackCreditsQueueAction;->trackId:J + + return-void +.end method + + +# virtual methods +.method public invoke()Ljava/lang/Object; + .locals 7 + + iget-wide v1, p0, Lradiant/swipe/ArtistTrackCreditsQueueAction;->trackId:J + + invoke-static {}, Lradiant/swipe/QueueExecutor;->hasActiveQueue()Z + + move-result v0 + + if-nez v0, :active_queue + + new-instance v0, Lcom/tidal/android/dynamicpages/ui/modules/artisttrackcredits/b$a; + + iget-object v3, p0, Lradiant/swipe/ArtistTrackCreditsQueueAction;->pageId:Ljava/lang/String; + + iget-object v4, p0, Lradiant/swipe/ArtistTrackCreditsQueueAction;->moduleUuid:Ljava/lang/String; + + invoke-direct {v0, v1, v2, v3, v4}, Lcom/tidal/android/dynamicpages/ui/modules/artisttrackcredits/b$a;->(JLjava/lang/String;Ljava/lang/String;)V + + goto :emit + + :active_queue + new-instance v0, Lradiant/swipe/ArtistTrackCreditsQueueEvent; + + iget-object v1, p0, Lradiant/swipe/ArtistTrackCreditsQueueAction;->context:Landroid/content/Context; + + if-eqz v1, :done + + iget-object v2, p0, Lradiant/swipe/ArtistTrackCreditsQueueAction;->pageId:Ljava/lang/String; + + iget-object v3, p0, Lradiant/swipe/ArtistTrackCreditsQueueAction;->moduleUuid:Ljava/lang/String; + + iget-wide v4, p0, Lradiant/swipe/ArtistTrackCreditsQueueAction;->trackId:J + + invoke-direct/range {v0 .. v5}, Lradiant/swipe/ArtistTrackCreditsQueueEvent;->(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;J)V + + :emit + iget-object v6, p0, Lradiant/swipe/ArtistTrackCreditsQueueAction;->callback:Lam0/l; + + invoke-interface {v6, v0}, Lam0/l;->invoke(Ljava/lang/Object;)Ljava/lang/Object; + + :done + sget-object v0, Lkotlin/u;->a:Lkotlin/u; + + return-object v0 +.end method + +.method public setContext(Landroid/content/Context;)V + .locals 0 + + iput-object p1, p0, Lradiant/swipe/ArtistTrackCreditsQueueAction;->context:Landroid/content/Context; + + return-void +.end method diff --git a/patches/extension/radiant/swipe/ArtistTrackCreditsQueueEvent.smali b/patches/extension/radiant/swipe/ArtistTrackCreditsQueueEvent.smali new file mode 100644 index 0000000..4c3c696 --- /dev/null +++ b/patches/extension/radiant/swipe/ArtistTrackCreditsQueueEvent.smali @@ -0,0 +1,34 @@ +.class public final Lradiant/swipe/ArtistTrackCreditsQueueEvent; +.super Ljava/lang/Object; +.source "ArtistTrackCreditsQueueEvent.smali" + +# interfaces +.implements Lcom/tidal/android/dynamicpages/ui/modules/artisttrackcredits/b; + + +# instance fields +.field public final context:Landroid/content/Context; + +.field public final moduleUuid:Ljava/lang/String; + +.field public final pageId:Ljava/lang/String; + +.field public final trackId:J + + +# direct methods +.method public constructor (Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;J)V + .locals 0 + + invoke-direct {p0}, Ljava/lang/Object;->()V + + iput-object p1, p0, Lradiant/swipe/ArtistTrackCreditsQueueEvent;->context:Landroid/content/Context; + + iput-object p2, p0, Lradiant/swipe/ArtistTrackCreditsQueueEvent;->pageId:Ljava/lang/String; + + iput-object p3, p0, Lradiant/swipe/ArtistTrackCreditsQueueEvent;->moduleUuid:Ljava/lang/String; + + iput-wide p4, p0, Lradiant/swipe/ArtistTrackCreditsQueueEvent;->trackId:J + + return-void +.end method diff --git a/patches/extension/radiant/swipe/CompactGridMediaQueueAction.smali b/patches/extension/radiant/swipe/CompactGridMediaQueueAction.smali new file mode 100644 index 0000000..30575e3 --- /dev/null +++ b/patches/extension/radiant/swipe/CompactGridMediaQueueAction.smali @@ -0,0 +1,263 @@ +.class public final Lradiant/swipe/CompactGridMediaQueueAction; +.super Ljava/lang/Object; +.source "CompactGridMediaQueueAction.smali" + +# interfaces +.implements Lradiant/swipe/ComposeSwipeAction; + + +# instance fields +.field private final callback:Lam0/l; + +.field private context:Landroid/content/Context; + +.field private final itemId:Ljava/lang/String; + +.field private final mediaType:I + +.field private final moduleUuid:Ljava/lang/String; + +.field private final pageId:Ljava/lang/String; + + +# direct methods +.method public constructor (Lam0/l;Ljava/lang/String;Ljava/lang/String;Lm40/e;)V + .locals 3 + + invoke-direct {p0}, Ljava/lang/Object;->()V + + iput-object p1, p0, Lradiant/swipe/CompactGridMediaQueueAction;->callback:Lam0/l; + + iput-object p2, p0, Lradiant/swipe/CompactGridMediaQueueAction;->pageId:Ljava/lang/String; + + iput-object p3, p0, Lradiant/swipe/CompactGridMediaQueueAction;->moduleUuid:Ljava/lang/String; + + instance-of v0, p4, Lm40/e$a; + + if-eqz v0, :mix + + check-cast p4, Lm40/e$a; + + iget-wide v0, p4, Lm40/e$a;->a:J + + invoke-static {v0, v1}, Ljava/lang/String;->valueOf(J)Ljava/lang/String; + + move-result-object v0 + + const/4 v1, 0x1 + + goto :store + + :mix + instance-of v0, p4, Lm40/e$c; + + if-eqz v0, :playlist + + check-cast p4, Lm40/e$c; + + iget-object v0, p4, Lm40/e$c;->a:Ljava/lang/String; + + const/4 v1, 0x2 + + goto :store + + :playlist + instance-of v0, p4, Lm40/e$d; + + if-eqz v0, :track + + check-cast p4, Lm40/e$d; + + iget-object v0, p4, Lm40/e$d;->a:Ljava/lang/String; + + const/4 v1, 0x3 + + goto :store + + :track + instance-of v0, p4, Lm40/e$e; + + if-eqz v0, :unsupported + + check-cast p4, Lm40/e$e; + + iget-wide v0, p4, Lm40/e$e;->a:J + + invoke-static {v0, v1}, Ljava/lang/String;->valueOf(J)Ljava/lang/String; + + move-result-object v0 + + const/4 v1, 0x4 + + goto :store + + :unsupported + const/4 v0, 0x0 + + const/4 v1, 0x0 + + :store + iput-object v0, p0, Lradiant/swipe/CompactGridMediaQueueAction;->itemId:Ljava/lang/String; + + iput v1, p0, Lradiant/swipe/CompactGridMediaQueueAction;->mediaType:I + + return-void +.end method + +.method public static isEligible(Lm40/e;)Z + .locals 1 + + instance-of v0, p0, Lm40/e$a; + + if-eqz v0, :mix + + check-cast p0, Lm40/e$a; + + iget-boolean p0, p0, Lm40/e$a;->e:Z + + return p0 + + :mix + instance-of v0, p0, Lm40/e$c; + + if-eqz v0, :playlist + + check-cast p0, Lm40/e$c; + + iget-boolean p0, p0, Lm40/e$c;->h:Z + + return p0 + + :playlist + instance-of v0, p0, Lm40/e$d; + + if-eqz v0, :track + + check-cast p0, Lm40/e$d; + + iget-boolean p0, p0, Lm40/e$d;->g:Z + + return p0 + + :track + instance-of v0, p0, Lm40/e$e; + + if-eqz v0, :invalid + + check-cast p0, Lm40/e$e; + + iget-boolean p0, p0, Lm40/e$e;->j:Z + + return p0 + + :invalid + const/4 p0, 0x0 + + return p0 +.end method + + +# virtual methods +.method public invoke()Ljava/lang/Object; + .locals 7 + + iget-object v6, p0, Lradiant/swipe/CompactGridMediaQueueAction;->callback:Lam0/l; + + if-eqz v6, :done + + iget-object v4, p0, Lradiant/swipe/CompactGridMediaQueueAction;->itemId:Ljava/lang/String; + + if-eqz v4, :done + + iget v5, p0, Lradiant/swipe/CompactGridMediaQueueAction;->mediaType:I + + if-eqz v5, :done + + const/4 v1, 0x4 + + if-ne v5, v1, :queue_event + + invoke-static {}, Lradiant/swipe/QueueExecutor;->hasActiveQueue()Z + + move-result v1 + + if-nez v1, :queue_event + + move-object v1, v4 + + goto :emit + + :queue_event + iget-object v1, p0, Lradiant/swipe/CompactGridMediaQueueAction;->context:Landroid/content/Context; + + if-eqz v1, :done + + new-instance v0, Lradiant/swipe/DynamicMediaQueueEvent; + + iget-object v2, p0, Lradiant/swipe/CompactGridMediaQueueAction;->pageId:Ljava/lang/String; + + iget-object v3, p0, Lradiant/swipe/CompactGridMediaQueueAction;->moduleUuid:Ljava/lang/String; + + invoke-direct/range {v0 .. v5}, Lradiant/swipe/DynamicMediaQueueEvent;->(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V + + move-object v1, v0 + + :emit + invoke-interface {v6, v1}, Lam0/l;->invoke(Ljava/lang/Object;)Ljava/lang/Object; + + :done + sget-object v0, Lkotlin/u;->a:Lkotlin/u; + + return-object v0 +.end method + +.method public setContext(Landroid/content/Context;)V + .locals 0 + + iput-object p1, p0, Lradiant/swipe/CompactGridMediaQueueAction;->context:Landroid/content/Context; + + return-void +.end method + +.method public stableKey()Ljava/lang/String; + .locals 3 + + iget-object v0, p0, Lradiant/swipe/CompactGridMediaQueueAction;->itemId:Ljava/lang/String; + + if-eqz v0, :invalid + + new-instance v1, Ljava/lang/StringBuilder; + + const-string v2, "cgc:" + + invoke-direct {v1, v2}, Ljava/lang/StringBuilder;->(Ljava/lang/String;)V + + iget-object v2, p0, Lradiant/swipe/CompactGridMediaQueueAction;->moduleUuid:Ljava/lang/String; + + invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; + + const/16 v2, 0x3a + + invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(C)Ljava/lang/StringBuilder; + + iget v2, p0, Lradiant/swipe/CompactGridMediaQueueAction;->mediaType:I + + invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder; + + const/16 v2, 0x3a + + invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(C)Ljava/lang/StringBuilder; + + invoke-virtual {v1, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; + + invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; + + move-result-object v0 + + return-object v0 + + :invalid + const/4 v0, 0x0 + + return-object v0 +.end method diff --git a/patches/extension/radiant/swipe/ComposeSwipeState.smali b/patches/extension/radiant/swipe/ComposeSwipeState.smali index 9e91c76..05bbae9 100644 --- a/patches/extension/radiant/swipe/ComposeSwipeState.smali +++ b/patches/extension/radiant/swipe/ComposeSwipeState.smali @@ -448,11 +448,11 @@ cmpg-float v5, v2, v4 - if-gez v5, :axis_ready + if-ltz v5, :axis_ready cmpg-float v5, v3, v4 - if-ltz v5, :done + if-gez v5, :done :axis_ready cmpg-float v5, v2, v3 diff --git a/patches/extension/radiant/swipe/DynamicMediaQueue.smali b/patches/extension/radiant/swipe/DynamicMediaQueue.smali new file mode 100644 index 0000000..e0e1ca5 --- /dev/null +++ b/patches/extension/radiant/swipe/DynamicMediaQueue.smali @@ -0,0 +1,634 @@ +.class public final Lradiant/swipe/DynamicMediaQueue; +.super Ljava/lang/Object; +.source "DynamicMediaQueue.smali" + + +# direct methods +.method public static handleCompact(Lcom/tidal/android/dynamicpages/ui/modules/compactgridcard/a;Lradiant/swipe/DynamicMediaQueueEvent;)V + .locals 13 + + if-eqz p0, :done + + if-eqz p1, :done + + iget-object v0, p1, Lradiant/swipe/DynamicMediaQueueEvent;->pageId:Ljava/lang/String; + + iget-object v1, p1, Lradiant/swipe/DynamicMediaQueueEvent;->moduleUuid:Ljava/lang/String; + + iget-object v2, p1, Lradiant/swipe/DynamicMediaQueueEvent;->itemId:Ljava/lang/String; + + iget v3, p1, Lradiant/swipe/DynamicMediaQueueEvent;->mediaType:I + + if-eqz v0, :done + + if-eqz v1, :done + + if-eqz v2, :done + + const/4 v4, 0x1 + + if-lt v3, v4, :done + + const/4 v4, 0x4 + + if-gt v3, v4, :done + + invoke-virtual {p0, v1}, Li60/c;->c(Ljava/lang/String;)Lc60/h; + + move-result-object v4 + + instance-of v5, v4, Lc60/f; + + if-eqz v5, :done + + check-cast v4, Lc60/f; + + iget-object v5, v4, Lc60/f;->b:Ljava/lang/String; + + invoke-virtual {v1, v5}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z + + move-result v1 + + if-eqz v1, :done + + iget-object v1, v4, Lc60/f;->g:Ljava/util/ArrayList; + + invoke-virtual {v1}, Ljava/util/ArrayList;->iterator()Ljava/util/Iterator; + + move-result-object v1 + + :find_media + invoke-interface {v1}, Ljava/util/Iterator;->hasNext()Z + + move-result v5 + + if-eqz v5, :done + + invoke-interface {v1}, Ljava/util/Iterator;->next()Ljava/lang/Object; + + move-result-object v6 + + instance-of v5, v6, Lc60/r; + + if-eqz v5, :find_media + + check-cast v6, Lc60/r; + + invoke-static {v6}, Lc60/s;->a(Lc60/r;)Ljava/lang/String; + + move-result-object v5 + + invoke-virtual {v2, v5}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z + + move-result v5 + + if-eqz v5, :find_media + + instance-of v5, v6, Lc60/r$b; + + if-eqz v5, :done + + check-cast v6, Lc60/r$b; + + iget-object v7, v6, Lc60/r$b;->a:Lh40/n; + + const/4 v5, 0x1 + + if-ne v3, v5, :check_mix + + instance-of v5, v7, Lh40/a; + + if-eqz v5, :done + + goto :dependencies + + :check_mix + const/4 v5, 0x2 + + if-ne v3, v5, :check_playlist + + instance-of v5, v7, Lh40/i; + + if-eqz v5, :done + + goto :dependencies + + :check_playlist + const/4 v5, 0x3 + + if-ne v3, v5, :check_track + + instance-of v5, v7, Lh40/j; + + if-eqz v5, :done + + goto :dependencies + + :check_track + instance-of v5, v7, Lh40/p; + + if-eqz v5, :done + + :dependencies + iget-object v8, p0, Lcom/tidal/android/dynamicpages/ui/modules/compactgridcard/a;->b:Lcom/tidal/android/dynamicpages/ui/b; + + instance-of v5, v8, Lcom/tidal/android/dynamicpages/ui/c; + + if-eqz v5, :done + + check-cast v8, Lcom/tidal/android/dynamicpages/ui/c; + + iget-object v5, p1, Lradiant/swipe/DynamicMediaQueueEvent;->context:Landroid/content/Context; + + if-eqz v5, :done + + iget-object v9, v8, Lcom/tidal/android/dynamicpages/ui/c;->b:Lcom/tidal/android/navigation/NavigationInfo; + + new-instance v10, Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata; + + iget-object v11, v4, Lc60/f;->a:Ljava/lang/String; + + iget v12, v4, Lc60/f;->d:I + + invoke-static {v12}, Ljava/lang/String;->valueOf(I)Ljava/lang/String; + + move-result-object v12 + + invoke-direct {v10, v0, v11, v12}, Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;->(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V + + const/4 v0, 0x1 + + if-ne v3, v0, :mix + + check-cast v7, Lh40/a; + + invoke-static {v7}, Lie0/a;->a(Lh40/a;)Lcom/aspiro/wamp/model/Album; + + move-result-object v12 + + invoke-static {v8}, Lradiant/swipe/DynamicMediaQueue;->menu(Lcom/tidal/android/dynamicpages/ui/c;)Lh4/a; + + move-result-object v6 + + if-eqz v6, :done + + invoke-static {v5, v12, v10, v9, v6}, Lradiant/swipe/QueueExecutor;->album(Landroid/content/Context;Lcom/aspiro/wamp/model/Album;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;Lh4/a;)Lio/reactivex/disposables/Disposable; + + goto :done + + :mix + const/4 v0, 0x2 + + if-ne v3, v0, :playlist + + check-cast v7, Lh40/i; + + invoke-static {v7}, Lie0/g;->b(Lh40/i;)Lcom/aspiro/wamp/mix/model/Mix; + + move-result-object v12 + + invoke-static {v8}, Lradiant/swipe/DynamicMediaQueue;->menu(Lcom/tidal/android/dynamicpages/ui/c;)Lh4/a; + + move-result-object v6 + + if-eqz v6, :done + + invoke-static {v5, v12, v10, v9, v6}, Lradiant/swipe/QueueExecutor;->mix(Landroid/content/Context;Lcom/aspiro/wamp/mix/model/Mix;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;Lh4/a;)Lio/reactivex/disposables/Disposable; + + goto :done + + :playlist + const/4 v0, 0x3 + + if-ne v3, v0, :track + + check-cast v7, Lh40/j; + + invoke-static {v7}, Lie0/h;->a(Lh40/j;)Lcom/aspiro/wamp/model/Playlist; + + move-result-object v12 + + invoke-static {v5, v12, v10, v9}, Lradiant/swipe/QueueExecutor;->playlist(Landroid/content/Context;Lcom/aspiro/wamp/model/Playlist;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;)V + + goto :done + + :track + check-cast v7, Lh40/p; + + invoke-static {v7}, Lie0/i;->a(Lh40/p;)Lcom/aspiro/wamp/model/Track; + + move-result-object v12 + + const/4 v6, 0x0 + + if-eqz v9, :navigation_ready + + invoke-static {v9}, Lcom/tidal/android/navigation/a;->b(Lcom/tidal/android/navigation/NavigationInfo;)Lcom/tidal/android/navigation/NavigationInfo$Node; + + move-result-object v6 + + :navigation_ready + iget-object v0, v4, Lc60/f;->e:Ljava/lang/String; + + invoke-static {v2, v0, v6}, Lcom/aspiro/wamp/playqueue/source/model/b;->o(Ljava/lang/String;Ljava/lang/String;Lcom/tidal/android/navigation/NavigationInfo;)Lcom/aspiro/wamp/playqueue/source/model/ItemSource; + + move-result-object v11 + + invoke-virtual {v11, v12}, Lcom/aspiro/wamp/playqueue/source/model/Source;->addSourceItem(Lcom/aspiro/wamp/model/MediaItem;)V + + invoke-static {v5, v12, v10, v11}, Lradiant/swipe/QueueExecutor;->track(Landroid/content/Context;Lcom/aspiro/wamp/model/Track;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/aspiro/wamp/playqueue/source/model/Source;)Z + + :done + return-void +.end method + +.method public static handlePublicPlaylist(Lcom/tidal/android/dynamicpages/ui/modules/publicplaylistlist/PublicPlaylistListModuleManager;Lradiant/swipe/DynamicMediaQueueEvent;)V + .locals 11 + + if-eqz p0, :done + + if-eqz p1, :done + + iget v0, p1, Lradiant/swipe/DynamicMediaQueueEvent;->mediaType:I + + const/4 v1, 0x3 + + if-ne v0, v1, :done + + iget-object v0, p1, Lradiant/swipe/DynamicMediaQueueEvent;->pageId:Ljava/lang/String; + + iget-object v1, p1, Lradiant/swipe/DynamicMediaQueueEvent;->moduleUuid:Ljava/lang/String; + + iget-object v2, p1, Lradiant/swipe/DynamicMediaQueueEvent;->itemId:Ljava/lang/String; + + if-eqz v0, :done + + if-eqz v1, :done + + if-eqz v2, :done + + invoke-virtual {p0, v1}, Li60/c;->c(Ljava/lang/String;)Lc60/h; + + move-result-object v3 + + instance-of v4, v3, Lc60/v; + + if-eqz v4, :done + + check-cast v3, Lc60/v; + + iget-object v4, v3, Lc60/v;->b:Ljava/lang/String; + + invoke-virtual {v1, v4}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z + + move-result v1 + + if-eqz v1, :done + + iget-object v1, v3, Lc60/v;->f:Ljava/util/ArrayList; + + invoke-virtual {v1}, Ljava/util/ArrayList;->iterator()Ljava/util/Iterator; + + move-result-object v1 + + :find_playlist + invoke-interface {v1}, Ljava/util/Iterator;->hasNext()Z + + move-result v4 + + if-eqz v4, :done + + invoke-interface {v1}, Ljava/util/Iterator;->next()Ljava/lang/Object; + + move-result-object v4 + + instance-of v5, v4, Lc60/r; + + if-eqz v5, :find_playlist + + check-cast v4, Lc60/r; + + invoke-static {v4}, Lc60/s;->a(Lc60/r;)Ljava/lang/String; + + move-result-object v5 + + invoke-virtual {v2, v5}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z + + move-result v5 + + if-eqz v5, :find_playlist + + instance-of v5, v4, Lc60/r$b; + + if-eqz v5, :done + + check-cast v4, Lc60/r$b; + + iget-object v4, v4, Lc60/r$b;->a:Lh40/n; + + instance-of v5, v4, Lh40/j; + + if-eqz v5, :done + + check-cast v4, Lh40/j; + + iget-object v5, p0, Lcom/tidal/android/dynamicpages/ui/modules/publicplaylistlist/PublicPlaylistListModuleManager;->f:Lcom/tidal/android/dynamicpages/ui/b; + + instance-of v6, v5, Lcom/tidal/android/dynamicpages/ui/c; + + if-eqz v6, :done + + check-cast v5, Lcom/tidal/android/dynamicpages/ui/c; + + iget-object v6, p1, Lradiant/swipe/DynamicMediaQueueEvent;->context:Landroid/content/Context; + + if-eqz v6, :done + + iget-object v7, v5, Lcom/tidal/android/dynamicpages/ui/c;->b:Lcom/tidal/android/navigation/NavigationInfo; + + new-instance v8, Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata; + + iget-object v9, v3, Lc60/v;->a:Ljava/lang/String; + + iget v10, v3, Lc60/v;->e:I + + invoke-static {v10}, Ljava/lang/String;->valueOf(I)Ljava/lang/String; + + move-result-object v10 + + invoke-direct {v8, v0, v9, v10}, Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;->(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V + + invoke-static {v4}, Lie0/h;->a(Lh40/j;)Lcom/aspiro/wamp/model/Playlist; + + move-result-object v4 + + invoke-static {v6, v4, v8, v7}, Lradiant/swipe/QueueExecutor;->playlist(Landroid/content/Context;Lcom/aspiro/wamp/model/Playlist;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;)V + + :done + return-void +.end method + +.method public static handleVertical(Lcom/tidal/android/dynamicpages/ui/modules/verticallistcard/VerticalListCardModuleManager;Lradiant/swipe/DynamicMediaQueueEvent;)V + .locals 13 + + if-eqz p0, :done + + if-eqz p1, :done + + iget-object v0, p1, Lradiant/swipe/DynamicMediaQueueEvent;->pageId:Ljava/lang/String; + + iget-object v1, p1, Lradiant/swipe/DynamicMediaQueueEvent;->moduleUuid:Ljava/lang/String; + + iget-object v2, p1, Lradiant/swipe/DynamicMediaQueueEvent;->itemId:Ljava/lang/String; + + iget v3, p1, Lradiant/swipe/DynamicMediaQueueEvent;->mediaType:I + + if-eqz v0, :done + + if-eqz v1, :done + + if-eqz v2, :done + + const/4 v4, 0x1 + + if-lt v3, v4, :done + + const/4 v4, 0x4 + + if-gt v3, v4, :done + + invoke-virtual {p0, v1}, Li60/c;->c(Ljava/lang/String;)Lc60/h; + + move-result-object v4 + + instance-of v5, v4, Lc60/c0; + + if-eqz v5, :done + + check-cast v4, Lc60/c0; + + iget-object v5, v4, Lc60/c0;->b:Ljava/lang/String; + + invoke-virtual {v1, v5}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z + + move-result v1 + + if-eqz v1, :done + + iget-object v1, v4, Lc60/c0;->g:Ljava/util/ArrayList; + + invoke-virtual {v1}, Ljava/util/ArrayList;->iterator()Ljava/util/Iterator; + + move-result-object v1 + + :find_media + invoke-interface {v1}, Ljava/util/Iterator;->hasNext()Z + + move-result v5 + + if-eqz v5, :done + + invoke-interface {v1}, Ljava/util/Iterator;->next()Ljava/lang/Object; + + move-result-object v6 + + instance-of v5, v6, Lc60/r; + + if-eqz v5, :find_media + + check-cast v6, Lc60/r; + + invoke-static {v6}, Lc60/s;->a(Lc60/r;)Ljava/lang/String; + + move-result-object v5 + + invoke-virtual {v2, v5}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z + + move-result v5 + + if-eqz v5, :find_media + + instance-of v5, v6, Lc60/r$b; + + if-eqz v5, :done + + check-cast v6, Lc60/r$b; + + iget-object v7, v6, Lc60/r$b;->a:Lh40/n; + + const/4 v5, 0x1 + + if-ne v3, v5, :check_mix + + instance-of v5, v7, Lh40/a; + + if-eqz v5, :done + + goto :dependencies + + :check_mix + const/4 v5, 0x2 + + if-ne v3, v5, :check_playlist + + instance-of v5, v7, Lh40/i; + + if-eqz v5, :done + + goto :dependencies + + :check_playlist + const/4 v5, 0x3 + + if-ne v3, v5, :check_track + + instance-of v5, v7, Lh40/j; + + if-eqz v5, :done + + goto :dependencies + + :check_track + instance-of v5, v7, Lh40/p; + + if-eqz v5, :done + + :dependencies + iget-object v8, p0, Lcom/tidal/android/dynamicpages/ui/modules/verticallistcard/VerticalListCardModuleManager;->e:Lcom/tidal/android/dynamicpages/ui/b; + + instance-of v5, v8, Lcom/tidal/android/dynamicpages/ui/c; + + if-eqz v5, :done + + check-cast v8, Lcom/tidal/android/dynamicpages/ui/c; + + iget-object v5, p1, Lradiant/swipe/DynamicMediaQueueEvent;->context:Landroid/content/Context; + + if-eqz v5, :done + + iget-object v9, v8, Lcom/tidal/android/dynamicpages/ui/c;->b:Lcom/tidal/android/navigation/NavigationInfo; + + new-instance v10, Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata; + + iget-object v11, v4, Lc60/c0;->a:Ljava/lang/String; + + iget v12, v4, Lc60/c0;->f:I + + invoke-static {v12}, Ljava/lang/String;->valueOf(I)Ljava/lang/String; + + move-result-object v12 + + invoke-direct {v10, v0, v11, v12}, Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;->(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V + + const/4 v0, 0x1 + + if-ne v3, v0, :mix + + check-cast v7, Lh40/a; + + invoke-static {v7}, Lie0/a;->a(Lh40/a;)Lcom/aspiro/wamp/model/Album; + + move-result-object v12 + + invoke-static {v8}, Lradiant/swipe/DynamicMediaQueue;->menu(Lcom/tidal/android/dynamicpages/ui/c;)Lh4/a; + + move-result-object v6 + + if-eqz v6, :done + + invoke-static {v5, v12, v10, v9, v6}, Lradiant/swipe/QueueExecutor;->album(Landroid/content/Context;Lcom/aspiro/wamp/model/Album;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;Lh4/a;)Lio/reactivex/disposables/Disposable; + + goto :done + + :mix + const/4 v0, 0x2 + + if-ne v3, v0, :playlist + + check-cast v7, Lh40/i; + + invoke-static {v7}, Lie0/g;->b(Lh40/i;)Lcom/aspiro/wamp/mix/model/Mix; + + move-result-object v12 + + invoke-static {v8}, Lradiant/swipe/DynamicMediaQueue;->menu(Lcom/tidal/android/dynamicpages/ui/c;)Lh4/a; + + move-result-object v6 + + if-eqz v6, :done + + invoke-static {v5, v12, v10, v9, v6}, Lradiant/swipe/QueueExecutor;->mix(Landroid/content/Context;Lcom/aspiro/wamp/mix/model/Mix;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;Lh4/a;)Lio/reactivex/disposables/Disposable; + + goto :done + + :playlist + const/4 v0, 0x3 + + if-ne v3, v0, :track + + check-cast v7, Lh40/j; + + invoke-static {v7}, Lie0/h;->a(Lh40/j;)Lcom/aspiro/wamp/model/Playlist; + + move-result-object v12 + + invoke-static {v5, v12, v10, v9}, Lradiant/swipe/QueueExecutor;->playlist(Landroid/content/Context;Lcom/aspiro/wamp/model/Playlist;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;)V + + goto :done + + :track + check-cast v7, Lh40/p; + + invoke-static {v7}, Lie0/i;->a(Lh40/p;)Lcom/aspiro/wamp/model/Track; + + move-result-object v12 + + const/4 v6, 0x0 + + if-eqz v9, :navigation_ready + + invoke-static {v9}, Lcom/tidal/android/navigation/a;->b(Lcom/tidal/android/navigation/NavigationInfo;)Lcom/tidal/android/navigation/NavigationInfo$Node; + + move-result-object v6 + + :navigation_ready + iget-object v0, v4, Lc60/c0;->c:Ljava/lang/String; + + invoke-static {v2, v0, v6}, Lcom/aspiro/wamp/playqueue/source/model/b;->o(Ljava/lang/String;Ljava/lang/String;Lcom/tidal/android/navigation/NavigationInfo;)Lcom/aspiro/wamp/playqueue/source/model/ItemSource; + + move-result-object v11 + + invoke-virtual {v11, v12}, Lcom/aspiro/wamp/playqueue/source/model/Source;->addSourceItem(Lcom/aspiro/wamp/model/MediaItem;)V + + invoke-static {v5, v12, v10, v11}, Lradiant/swipe/QueueExecutor;->track(Landroid/content/Context;Lcom/aspiro/wamp/model/Track;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/aspiro/wamp/playqueue/source/model/Source;)Z + + :done + return-void +.end method + +.method private static menu(Lcom/tidal/android/dynamicpages/ui/c;)Lh4/a; + .locals 2 + + iget-object v0, p0, Lcom/tidal/android/dynamicpages/ui/c;->a:Lcom/aspiro/wamp/core/k; + + instance-of v1, v0, Lh9/p1; + + if-eqz v1, :invalid + + check-cast v0, Lh9/p1; + + iget-object v0, v0, Lh9/p1;->b:Lx40/a; + + instance-of v1, v0, Lh4/a; + + if-eqz v1, :invalid + + check-cast v0, Lh4/a; + + return-object v0 + + :invalid + const/4 v0, 0x0 + + return-object v0 +.end method diff --git a/patches/extension/radiant/swipe/DynamicMediaQueueEvent.smali b/patches/extension/radiant/swipe/DynamicMediaQueueEvent.smali new file mode 100644 index 0000000..a8d662f --- /dev/null +++ b/patches/extension/radiant/swipe/DynamicMediaQueueEvent.smali @@ -0,0 +1,39 @@ +.class public final Lradiant/swipe/DynamicMediaQueueEvent; +.super Ljava/lang/Object; +.source "DynamicMediaQueueEvent.smali" + +# interfaces +.implements Lcom/tidal/android/dynamicpages/ui/modules/verticallistcard/b; +.implements Lcom/tidal/android/dynamicpages/ui/modules/publicplaylistlist/b; + + +# instance fields +.field public final context:Landroid/content/Context; + +.field public final itemId:Ljava/lang/String; + +.field public final mediaType:I + +.field public final moduleUuid:Ljava/lang/String; + +.field public final pageId:Ljava/lang/String; + + +# direct methods +.method public constructor (Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V + .locals 0 + + invoke-direct {p0}, Ljava/lang/Object;->()V + + iput-object p1, p0, Lradiant/swipe/DynamicMediaQueueEvent;->context:Landroid/content/Context; + + iput-object p2, p0, Lradiant/swipe/DynamicMediaQueueEvent;->pageId:Ljava/lang/String; + + iput-object p3, p0, Lradiant/swipe/DynamicMediaQueueEvent;->moduleUuid:Ljava/lang/String; + + iput-object p4, p0, Lradiant/swipe/DynamicMediaQueueEvent;->itemId:Ljava/lang/String; + + iput p5, p0, Lradiant/swipe/DynamicMediaQueueEvent;->mediaType:I + + return-void +.end method diff --git a/patches/extension/radiant/swipe/FeedResolver.smali b/patches/extension/radiant/swipe/FeedResolver.smali new file mode 100644 index 0000000..74569f5 --- /dev/null +++ b/patches/extension/radiant/swipe/FeedResolver.smali @@ -0,0 +1,605 @@ +.class public final Lradiant/swipe/FeedResolver; +.super Ljava/lang/Object; +.source "FeedResolver.smali" + +# interfaces +.implements Lradiant/swipe/QueueRowResolver; + + +# instance fields +.field private final fragment:Ljava/lang/ref/WeakReference; + +.field private final recycler:Ljava/lang/ref/WeakReference; + + +# direct methods +.method private constructor (Lcom/tidal/android/feature/feed/ui/FeedView;Landroidx/recyclerview/widget/RecyclerView;)V + .locals 1 + + invoke-direct {p0}, Ljava/lang/Object;->()V + + new-instance v0, Ljava/lang/ref/WeakReference; + + invoke-direct {v0, p1}, Ljava/lang/ref/WeakReference;->(Ljava/lang/Object;)V + + iput-object v0, p0, Lradiant/swipe/FeedResolver;->fragment:Ljava/lang/ref/WeakReference; + + new-instance v0, Ljava/lang/ref/WeakReference; + + invoke-direct {v0, p2}, Ljava/lang/ref/WeakReference;->(Ljava/lang/Object;)V + + iput-object v0, p0, Lradiant/swipe/FeedResolver;->recycler:Ljava/lang/ref/WeakReference; + + return-void +.end method + +.method private availabilityInteractor()Lcom/aspiro/wamp/model/AvailabilityInteractor; + .locals 2 + + iget-object v0, p0, Lradiant/swipe/FeedResolver;->fragment:Ljava/lang/ref/WeakReference; + + invoke-virtual {v0}, Ljava/lang/ref/Reference;->get()Ljava/lang/Object; + + move-result-object v0 + + check-cast v0, Lcom/tidal/android/feature/feed/ui/FeedView; + + if-eqz v0, :invalid + + iget-object v0, v0, Lcom/tidal/android/feature/feed/ui/FeedView;->d:Lv70/b; + + instance-of v1, v0, Lcom/tidal/android/feature/feed/ui/c; + + if-eqz v1, :invalid + + check-cast v0, Lcom/tidal/android/feature/feed/ui/c; + + iget-object v0, v0, Lcom/tidal/android/feature/feed/ui/c;->c:Lz70/a; + + if-eqz v0, :invalid + + iget-object v0, v0, Lz70/a;->c:Lcom/aspiro/wamp/model/AvailabilityInteractor; + + return-object v0 + + :invalid + const/4 v0, 0x0 + + return-object v0 +.end method + +.method private current(Lradiant/swipe/QueueRequest;)Ljava/lang/Object; + .locals 10 + + if-eqz p1, :invalid + + iget-object v8, p1, Lradiant/swipe/QueueRequest;->media:Ljava/lang/Object; + + iget-object v0, p0, Lradiant/swipe/FeedResolver;->fragment:Ljava/lang/ref/WeakReference; + + invoke-virtual {v0}, Ljava/lang/ref/Reference;->get()Ljava/lang/Object; + + move-result-object v0 + + check-cast v0, Lcom/tidal/android/feature/feed/ui/FeedView; + + if-eqz v0, :invalid + + iget-object v1, p0, Lradiant/swipe/FeedResolver;->recycler:Ljava/lang/ref/WeakReference; + + invoke-virtual {v1}, Ljava/lang/ref/Reference;->get()Ljava/lang/Object; + + move-result-object v1 + + check-cast v1, Landroidx/recyclerview/widget/RecyclerView; + + if-eqz v1, :invalid + + invoke-virtual {v1}, Landroidx/recyclerview/widget/RecyclerView;->getAdapter()Landroidx/recyclerview/widget/RecyclerView$Adapter; + + move-result-object v2 + + instance-of v3, v2, La50/b; + + if-eqz v3, :invalid + + check-cast v2, La50/b; + + iget-object v2, v2, La50/b;->b:Ljava/util/ArrayList; + + iget v3, p1, Lradiant/swipe/QueueRequest;->position:I + + if-gez v3, :check_size + + goto :invalid + + :check_size + invoke-virtual {v2}, Ljava/util/ArrayList;->size()I + + move-result v4 + + if-lt v3, v4, :read_item + + goto :invalid + + :read_item + invoke-virtual {v2, v3}, Ljava/util/ArrayList;->get(I)Ljava/lang/Object; + + move-result-object v2 + + invoke-direct {p0}, Lradiant/swipe/FeedResolver;->availabilityInteractor()Lcom/aspiro/wamp/model/AvailabilityInteractor; + + move-result-object v4 + + if-eqz v4, :invalid + + instance-of v3, v2, Lb80/a; + + if-eqz v3, :mix + + instance-of v3, v8, Lcom/aspiro/wamp/model/Album; + + if-eqz v3, :invalid + + check-cast v2, Lb80/a; + + iget-boolean v3, v2, Lb80/a;->c:Z + + if-eqz v3, :invalid + + check-cast v8, Lcom/aspiro/wamp/model/Album; + + iget-object v5, v2, Lb80/a;->a:Lcom/aspiro/wamp/model/Album; + + invoke-virtual {v8}, Lcom/aspiro/wamp/model/Album;->getId()I + + move-result v6 + + invoke-virtual {v5}, Lcom/aspiro/wamp/model/Album;->getId()I + + move-result v7 + + if-ne v6, v7, :invalid + + iget v6, p1, Lradiant/swipe/QueueRequest;->id:I + + if-ne v7, v6, :invalid + + invoke-interface {v4, v5}, Lcom/aspiro/wamp/model/AvailabilityInteractor;->getAvailability(Lcom/aspiro/wamp/model/Album;)Lcom/aspiro/wamp/model/Availability$Album; + + move-result-object v4 + + invoke-virtual {v4}, Lcom/aspiro/wamp/model/Availability$Album;->isAvailable()Z + + move-result v4 + + if-eqz v4, :invalid + + return-object v2 + + :mix + instance-of v3, v2, Lb80/c; + + if-eqz v3, :playlist + + instance-of v3, v8, Lcom/aspiro/wamp/mix/model/Mix; + + if-eqz v3, :invalid + + check-cast v2, Lb80/c; + + check-cast v8, Lcom/aspiro/wamp/mix/model/Mix; + + iget-object v5, v2, Lb80/c;->a:Lcom/aspiro/wamp/mix/model/Mix; + + invoke-virtual {v8}, Lcom/aspiro/wamp/mix/model/Mix;->getId()Ljava/lang/String; + + move-result-object v6 + + invoke-virtual {v5}, Lcom/aspiro/wamp/mix/model/Mix;->getId()Ljava/lang/String; + + move-result-object v7 + + invoke-virtual {v6, v7}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z + + move-result v6 + + if-eqz v6, :invalid + + invoke-virtual {v7}, Ljava/lang/String;->hashCode()I + + move-result v6 + + iget v8, p1, Lradiant/swipe/QueueRequest;->id:I + + if-ne v6, v8, :invalid + + invoke-interface {v4, v7}, Lcom/aspiro/wamp/model/AvailabilityInteractor;->getMixAvailability(Ljava/lang/String;)Lcom/aspiro/wamp/model/Availability$Mix; + + move-result-object v4 + + invoke-virtual {v4}, Lcom/aspiro/wamp/model/Availability$Mix;->isAvailable()Z + + move-result v4 + + if-eqz v4, :invalid + + return-object v2 + + :playlist + instance-of v3, v2, Lb80/d; + + if-eqz v3, :invalid + + instance-of v3, v8, Lcom/aspiro/wamp/model/Playlist; + + if-eqz v3, :invalid + + check-cast v2, Lb80/d; + + check-cast v8, Lcom/aspiro/wamp/model/Playlist; + + iget-object v5, v2, Lb80/d;->a:Lcom/aspiro/wamp/model/Playlist; + + invoke-virtual {v8}, Lcom/aspiro/wamp/model/Playlist;->getUuid()Ljava/lang/String; + + move-result-object v6 + + invoke-virtual {v5}, Lcom/aspiro/wamp/model/Playlist;->getUuid()Ljava/lang/String; + + move-result-object v7 + + invoke-virtual {v6, v7}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z + + move-result v6 + + if-eqz v6, :invalid + + invoke-virtual {v7}, Ljava/lang/String;->hashCode()I + + move-result v6 + + iget v8, p1, Lradiant/swipe/QueueRequest;->id:I + + if-ne v6, v8, :invalid + + invoke-virtual {v5}, Lcom/aspiro/wamp/model/Playlist;->getNumberOfItems()I + + move-result v6 + + if-lez v6, :invalid + + const-string v6, "NOT_READY" + + invoke-virtual {v5}, Lcom/aspiro/wamp/model/Playlist;->getStatus()Ljava/lang/String; + + move-result-object v8 + + invoke-virtual {v6, v8}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z + + move-result v6 + + if-nez v6, :invalid + + invoke-static {v7}, Ljava/util/UUID;->fromString(Ljava/lang/String;)Ljava/util/UUID; + + move-result-object v6 + + invoke-interface {v4, v6}, Lcom/aspiro/wamp/model/AvailabilityInteractor;->getPlaylistAvailability(Ljava/util/UUID;)Lcom/aspiro/wamp/model/Availability$Playlist; + + move-result-object v4 + + invoke-virtual {v4}, Lcom/aspiro/wamp/model/Availability$Playlist;->isAvailable()Z + + move-result v4 + + if-eqz v4, :invalid + + return-object v2 + + :invalid + const/4 v0, 0x0 + + return-object v0 +.end method + +.method public static install(Lcom/tidal/android/feature/feed/ui/FeedView;Landroidx/recyclerview/widget/RecyclerView;)V + .locals 1 + + if-eqz p0, :done + + if-eqz p1, :done + + new-instance v0, Lradiant/swipe/FeedResolver; + + invoke-direct {v0, p0, p1}, Lradiant/swipe/FeedResolver;->(Lcom/tidal/android/feature/feed/ui/FeedView;Landroidx/recyclerview/widget/RecyclerView;)V + + invoke-static {p1, v0}, Lradiant/SwipeToQueue;->install(Landroidx/recyclerview/widget/RecyclerView;Lradiant/swipe/QueueRowResolver;)V + + :done + return-void +.end method + + +# virtual methods +.method public execute(Lradiant/swipe/QueueRequest;)V + .locals 9 + + invoke-direct {p0, p1}, Lradiant/swipe/FeedResolver;->current(Lradiant/swipe/QueueRequest;)Ljava/lang/Object; + + move-result-object v0 + + if-eqz v0, :done + + iget-object v1, p0, Lradiant/swipe/FeedResolver;->fragment:Ljava/lang/ref/WeakReference; + + invoke-virtual {v1}, Ljava/lang/ref/Reference;->get()Ljava/lang/Object; + + move-result-object v1 + + check-cast v1, Lcom/tidal/android/feature/feed/ui/FeedView; + + if-eqz v1, :done + + invoke-virtual {v1}, Landroidx/fragment/app/Fragment;->getContext()Landroid/content/Context; + + move-result-object v3 + + if-eqz v3, :done + + iget-object v2, v1, Lcom/tidal/android/feature/feed/ui/FeedView;->c:La80/c; + + if-eqz v2, :done + + instance-of v4, v0, Lb80/a; + + if-eqz v4, :mix + + check-cast v0, Lb80/a; + + iget-object v7, v0, Lb80/a;->a:Lcom/aspiro/wamp/model/Album; + + iget v8, v0, Lb80/a;->g:I + + const/4 v4, 0x1 + + goto :metadata + + :mix + instance-of v4, v0, Lb80/c; + + if-eqz v4, :playlist + + check-cast v0, Lb80/c; + + iget-object v7, v0, Lb80/c;->a:Lcom/aspiro/wamp/mix/model/Mix; + + iget v8, v0, Lb80/c;->c:I + + const/4 v4, 0x2 + + goto :metadata + + :playlist + check-cast v0, Lb80/d; + + iget-object v7, v0, Lb80/d;->a:Lcom/aspiro/wamp/model/Playlist; + + iget v8, v0, Lb80/d;->c:I + + const/4 v4, 0x3 + + :metadata + invoke-static {v8}, Lcom/tidal/android/feature/feed/ui/viewstates/UpdatedIntervals$a;->a(I)Ljava/lang/String; + + move-result-object v8 + + iget-object v0, v2, La80/c;->a:Ljava/lang/String; + + new-instance p1, Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata; + + invoke-direct {p1, v0, v8}, Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;->(Ljava/lang/String;Ljava/lang/String;)V + + iget-object v5, v2, La80/c;->e:Lcom/tidal/android/navigation/NavigationInfo; + + const/4 v0, 0x3 + + if-ne v4, v0, :collection + + check-cast v7, Lcom/aspiro/wamp/model/Playlist; + + invoke-static {v3, v7, p1, v5}, Lradiant/swipe/QueueExecutor;->playlist(Landroid/content/Context;Lcom/aspiro/wamp/model/Playlist;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;)V + + goto :done + + :collection + iget-object v6, v2, La80/c;->b:Lx40/a; + + instance-of v0, v6, Lh4/a; + + if-eqz v0, :done + + check-cast v6, Lh4/a; + + const/4 v0, 0x1 + + if-ne v4, v0, :queue_mix + + check-cast v7, Lcom/aspiro/wamp/model/Album; + + invoke-static {v3, v7, p1, v5, v6}, Lradiant/swipe/QueueExecutor;->album(Landroid/content/Context;Lcom/aspiro/wamp/model/Album;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;Lh4/a;)Lio/reactivex/disposables/Disposable; + + move-result-object v7 + + goto :retain + + :queue_mix + check-cast v7, Lcom/aspiro/wamp/mix/model/Mix; + + invoke-static {v3, v7, p1, v5, v6}, Lradiant/swipe/QueueExecutor;->mix(Landroid/content/Context;Lcom/aspiro/wamp/mix/model/Mix;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;Lh4/a;)Lio/reactivex/disposables/Disposable; + + move-result-object v7 + + :retain + if-eqz v7, :done + + iget-object v0, v1, Lcom/tidal/android/feature/feed/ui/FeedView;->f:Lio/reactivex/disposables/CompositeDisposable; + + invoke-virtual {v0, v7}, Lio/reactivex/disposables/CompositeDisposable;->add(Lio/reactivex/disposables/Disposable;)Z + + :done + return-void +.end method + +.method public resolve(Landroidx/recyclerview/widget/RecyclerView;Landroidx/recyclerview/widget/RecyclerView$ViewHolder;)Lradiant/swipe/QueueRequest; + .locals 7 + + iget-object v0, p0, Lradiant/swipe/FeedResolver;->recycler:Ljava/lang/ref/WeakReference; + + invoke-virtual {v0}, Ljava/lang/ref/Reference;->get()Ljava/lang/Object; + + move-result-object v0 + + if-ne v0, p1, :invalid + + instance-of v0, p2, Lw70/c$a; + + if-eqz v0, :mix_holder + + const/4 v5, 0x1 + + goto :has_holder + + :mix_holder + + instance-of v0, p2, Lw70/h$a; + + if-eqz v0, :playlist_holder + + const/4 v5, 0x2 + + goto :has_holder + + :playlist_holder + + instance-of v0, p2, Lw70/k$a; + + if-eqz v0, :invalid + + const/4 v5, 0x3 + + :has_holder + invoke-virtual {p2}, Landroidx/recyclerview/widget/RecyclerView$ViewHolder;->getBindingAdapterPosition()I + + move-result p2 + + if-gez p2, :has_position + + goto :invalid + + :has_position + invoke-virtual {p1}, Landroidx/recyclerview/widget/RecyclerView;->getAdapter()Landroidx/recyclerview/widget/RecyclerView$Adapter; + + move-result-object p1 + + instance-of v0, p1, La50/b; + + if-eqz v0, :invalid + + check-cast p1, La50/b; + + iget-object p1, p1, La50/b;->b:Ljava/util/ArrayList; + + invoke-virtual {p1}, Ljava/util/ArrayList;->size()I + + move-result v0 + + if-lt p2, v0, :read_item + + goto :invalid + + :read_item + invoke-virtual {p1, p2}, Ljava/util/ArrayList;->get(I)Ljava/lang/Object; + + move-result-object p1 + + instance-of v0, p1, Lb80/a; + + if-eqz v0, :mix + + const/4 v0, 0x1 + + if-ne v5, v0, :invalid + + check-cast p1, Lb80/a; + + iget-object v1, p1, Lb80/a;->a:Lcom/aspiro/wamp/model/Album; + + invoke-virtual {v1}, Lcom/aspiro/wamp/model/Album;->getId()I + + move-result v2 + + goto :request + + :mix + instance-of v0, p1, Lb80/c; + + if-eqz v0, :playlist + + const/4 v0, 0x2 + + if-ne v5, v0, :invalid + + check-cast p1, Lb80/c; + + iget-object v1, p1, Lb80/c;->a:Lcom/aspiro/wamp/mix/model/Mix; + + invoke-virtual {v1}, Lcom/aspiro/wamp/mix/model/Mix;->getId()Ljava/lang/String; + + move-result-object v2 + + invoke-virtual {v2}, Ljava/lang/String;->hashCode()I + + move-result v2 + + goto :request + + :playlist + instance-of v0, p1, Lb80/d; + + if-eqz v0, :invalid + + const/4 v0, 0x3 + + if-ne v5, v0, :invalid + + check-cast p1, Lb80/d; + + iget-object v1, p1, Lb80/d;->a:Lcom/aspiro/wamp/model/Playlist; + + invoke-virtual {v1}, Lcom/aspiro/wamp/model/Playlist;->getUuid()Ljava/lang/String; + + move-result-object v2 + + invoke-virtual {v2}, Ljava/lang/String;->hashCode()I + + move-result v2 + + :request + new-instance v3, Lradiant/swipe/QueueRequest; + + invoke-direct {v3, p2, v1, v2}, Lradiant/swipe/QueueRequest;->(ILjava/lang/Object;I)V + + invoke-direct {p0, v3}, Lradiant/swipe/FeedResolver;->current(Lradiant/swipe/QueueRequest;)Ljava/lang/Object; + + move-result-object v4 + + if-eqz v4, :invalid + + return-object v3 + + :invalid + const/4 p1, 0x0 + + return-object p1 +.end method diff --git a/patches/extension/radiant/swipe/PublicPlaylistQueueAction.smali b/patches/extension/radiant/swipe/PublicPlaylistQueueAction.smali new file mode 100644 index 0000000..ce5764f --- /dev/null +++ b/patches/extension/radiant/swipe/PublicPlaylistQueueAction.smali @@ -0,0 +1,111 @@ +.class public final Lradiant/swipe/PublicPlaylistQueueAction; +.super Ljava/lang/Object; +.source "PublicPlaylistQueueAction.smali" + +# interfaces +.implements Lradiant/swipe/ComposeSwipeAction; + + +# instance fields +.field private final callback:Lam0/l; + +.field private context:Landroid/content/Context; + +.field private final itemId:Ljava/lang/String; + +.field private final moduleUuid:Ljava/lang/String; + +.field private final pageId:Ljava/lang/String; + + +# direct methods +.method public constructor (Lam0/l;Ljava/lang/String;Ljava/lang/String;Lm40/e$d;)V + .locals 0 + + invoke-direct {p0}, Ljava/lang/Object;->()V + + iput-object p1, p0, Lradiant/swipe/PublicPlaylistQueueAction;->callback:Lam0/l; + + iput-object p2, p0, Lradiant/swipe/PublicPlaylistQueueAction;->pageId:Ljava/lang/String; + + iput-object p3, p0, Lradiant/swipe/PublicPlaylistQueueAction;->moduleUuid:Ljava/lang/String; + + iget-object p1, p4, Lm40/e$d;->a:Ljava/lang/String; + + iput-object p1, p0, Lradiant/swipe/PublicPlaylistQueueAction;->itemId:Ljava/lang/String; + + return-void +.end method + + +# virtual methods +.method public invoke()Ljava/lang/Object; + .locals 6 + + iget-object v0, p0, Lradiant/swipe/PublicPlaylistQueueAction;->callback:Lam0/l; + + if-eqz v0, :done + + iget-object v1, p0, Lradiant/swipe/PublicPlaylistQueueAction;->context:Landroid/content/Context; + + if-eqz v1, :done + + iget-object v4, p0, Lradiant/swipe/PublicPlaylistQueueAction;->itemId:Ljava/lang/String; + + if-eqz v4, :done + + new-instance v0, Lradiant/swipe/DynamicMediaQueueEvent; + + iget-object v2, p0, Lradiant/swipe/PublicPlaylistQueueAction;->pageId:Ljava/lang/String; + + iget-object v3, p0, Lradiant/swipe/PublicPlaylistQueueAction;->moduleUuid:Ljava/lang/String; + + const/4 v5, 0x3 + + invoke-direct/range {v0 .. v5}, Lradiant/swipe/DynamicMediaQueueEvent;->(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V + + iget-object v1, p0, Lradiant/swipe/PublicPlaylistQueueAction;->callback:Lam0/l; + + invoke-interface {v1, v0}, Lam0/l;->invoke(Ljava/lang/Object;)Ljava/lang/Object; + + :done + sget-object v0, Lkotlin/u;->a:Lkotlin/u; + + return-object v0 +.end method + +.method public setContext(Landroid/content/Context;)V + .locals 0 + + iput-object p1, p0, Lradiant/swipe/PublicPlaylistQueueAction;->context:Landroid/content/Context; + + return-void +.end method + +.method public stableKey()Ljava/lang/String; + .locals 3 + + new-instance v0, Ljava/lang/StringBuilder; + + const-string v1, "ppl:" + + invoke-direct {v0, v1}, Ljava/lang/StringBuilder;->(Ljava/lang/String;)V + + iget-object v1, p0, Lradiant/swipe/PublicPlaylistQueueAction;->moduleUuid:Ljava/lang/String; + + invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; + + const/16 v1, 0x3a + + invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(C)Ljava/lang/StringBuilder; + + iget-object v1, p0, Lradiant/swipe/PublicPlaylistQueueAction;->itemId:Ljava/lang/String; + + invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; + + invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; + + move-result-object v0 + + return-object v0 +.end method diff --git a/patches/extension/radiant/swipe/SuggestionsResolver.smali b/patches/extension/radiant/swipe/SuggestionsResolver.smali new file mode 100644 index 0000000..5c214e3 --- /dev/null +++ b/patches/extension/radiant/swipe/SuggestionsResolver.smali @@ -0,0 +1,431 @@ +.class public final Lradiant/swipe/SuggestionsResolver; +.super Ljava/lang/Object; +.source "SuggestionsResolver.smali" + +# interfaces +.implements Lradiant/swipe/QueueRowResolver; + + +# instance fields +.field private final host:Ljava/lang/ref/WeakReference; + +.field private final recycler:Ljava/lang/ref/WeakReference; + + +# direct methods +.method private constructor (Landroidx/fragment/app/Fragment;Landroidx/recyclerview/widget/RecyclerView;)V + .locals 1 + + invoke-direct {p0}, Ljava/lang/Object;->()V + + new-instance v0, Ljava/lang/ref/WeakReference; + + invoke-direct {v0, p1}, Ljava/lang/ref/WeakReference;->(Ljava/lang/Object;)V + + iput-object v0, p0, Lradiant/swipe/SuggestionsResolver;->host:Ljava/lang/ref/WeakReference; + + new-instance v0, Ljava/lang/ref/WeakReference; + + invoke-direct {v0, p2}, Ljava/lang/ref/WeakReference;->(Ljava/lang/Object;)V + + iput-object v0, p0, Lradiant/swipe/SuggestionsResolver;->recycler:Ljava/lang/ref/WeakReference; + + return-void +.end method + +.method private current(Lradiant/swipe/QueueRequest;)Lcom/aspiro/wamp/model/SuggestedMediaItem$SuggestedTrack; + .locals 8 + + if-eqz p1, :invalid + + iget-object v0, p1, Lradiant/swipe/QueueRequest;->media:Ljava/lang/Object; + + instance-of v1, v0, Lcom/aspiro/wamp/model/SuggestedMediaItem$SuggestedTrack; + + if-eqz v1, :invalid + + check-cast v0, Lcom/aspiro/wamp/model/SuggestedMediaItem$SuggestedTrack; + + iget-object v1, p0, Lradiant/swipe/SuggestionsResolver;->host:Ljava/lang/ref/WeakReference; + + invoke-virtual {v1}, Ljava/lang/ref/Reference;->get()Ljava/lang/Object; + + move-result-object v1 + + instance-of v2, v1, Landroidx/fragment/app/Fragment; + + if-eqz v2, :invalid + + check-cast v1, Landroidx/fragment/app/Fragment; + + invoke-virtual {v1}, Landroidx/fragment/app/Fragment;->getView()Landroid/view/View; + + move-result-object v2 + + if-eqz v2, :invalid + + iget-object v2, p0, Lradiant/swipe/SuggestionsResolver;->recycler:Ljava/lang/ref/WeakReference; + + invoke-virtual {v2}, Ljava/lang/ref/Reference;->get()Ljava/lang/Object; + + move-result-object v2 + + check-cast v2, Landroidx/recyclerview/widget/RecyclerView; + + if-eqz v2, :invalid + + invoke-virtual {v2}, Landroidx/recyclerview/widget/RecyclerView;->getAdapter()Landroidx/recyclerview/widget/RecyclerView$Adapter; + + move-result-object v2 + + instance-of v3, v2, La50/b; + + if-eqz v3, :invalid + + check-cast v2, La50/b; + + iget-object v2, v2, La50/b;->b:Ljava/util/ArrayList; + + iget v3, p1, Lradiant/swipe/QueueRequest;->position:I + + if-gez v3, :adapter_bounds + + goto :invalid + + :adapter_bounds + invoke-virtual {v2}, Ljava/util/ArrayList;->size()I + + move-result v4 + + if-lt v3, v4, :adapter_item + + goto :invalid + + :adapter_item + invoke-virtual {v2, v3}, Ljava/util/ArrayList;->get(I)Ljava/lang/Object; + + move-result-object v2 + + instance-of v4, v2, Lcom/aspiro/wamp/model/SuggestedMediaItem$SuggestedTrack; + + if-eqz v4, :invalid + + check-cast v2, Lcom/aspiro/wamp/model/SuggestedMediaItem$SuggestedTrack; + + invoke-virtual {v0}, Lcom/aspiro/wamp/model/SuggestedMediaItem$SuggestedTrack;->getMediaItem()Lcom/aspiro/wamp/model/Track; + + move-result-object v4 + + invoke-virtual {v2}, Lcom/aspiro/wamp/model/SuggestedMediaItem$SuggestedTrack;->getMediaItem()Lcom/aspiro/wamp/model/Track; + + move-result-object v5 + + invoke-virtual {v4}, Lcom/aspiro/wamp/model/MediaItem;->getId()I + + move-result v4 + + invoke-virtual {v5}, Lcom/aspiro/wamp/model/MediaItem;->getId()I + + move-result v6 + + if-ne v4, v6, :invalid + + iget v7, p1, Lradiant/swipe/QueueRequest;->id:I + + if-ne v6, v7, :invalid + + invoke-virtual {v2}, Lcom/aspiro/wamp/model/SuggestedMediaItem$SuggestedTrack;->getAvailability()Lcom/aspiro/wamp/model/Availability; + + move-result-object v4 + + invoke-interface {v4}, Lcom/aspiro/wamp/model/Availability;->isAvailable()Z + + move-result v4 + + if-eqz v4, :invalid + + invoke-direct {p0}, Lradiant/swipe/SuggestionsResolver;->availability()Lcom/aspiro/wamp/model/AvailabilityInteractor; + + move-result-object v4 + + if-eqz v4, :invalid + + invoke-interface {v4, v5}, Lcom/aspiro/wamp/model/AvailabilityInteractor;->getAvailability(Lcom/aspiro/wamp/model/MediaItem;)Lcom/aspiro/wamp/model/Availability$MediaItem; + + move-result-object v4 + + invoke-virtual {v4}, Lcom/aspiro/wamp/model/Availability$MediaItem;->isAvailable()Z + + move-result v4 + + if-eqz v4, :invalid + + invoke-direct {p0}, Lradiant/swipe/SuggestionsResolver;->viewModel()Lcom/aspiro/wamp/nowplaying/view/suggestions/l; + + move-result-object v1 + + instance-of v4, v1, Lcom/aspiro/wamp/nowplaying/view/suggestions/a1; + + if-eqz v4, :invalid + + check-cast v1, Lcom/aspiro/wamp/nowplaying/view/suggestions/a1; + + iget-object v1, v1, Lcom/aspiro/wamp/nowplaying/view/suggestions/a1;->o:Ljava/lang/Object; + + instance-of v4, v1, Ljava/util/List; + + if-eqz v4, :invalid + + check-cast v1, Ljava/util/List; + + invoke-interface {v1}, Ljava/util/List;->size()I + + move-result v4 + + if-lt v3, v4, :viewmodel_item + + goto :invalid + + :viewmodel_item + invoke-interface {v1, v3}, Ljava/util/List;->get(I)Ljava/lang/Object; + + move-result-object v1 + + instance-of v3, v1, Lcom/aspiro/wamp/model/Track; + + if-eqz v3, :invalid + + check-cast v1, Lcom/aspiro/wamp/model/Track; + + invoke-virtual {v1}, Lcom/aspiro/wamp/model/MediaItem;->getId()I + + move-result v1 + + if-ne v6, v1, :invalid + + return-object v2 + + :invalid + const/4 v0, 0x0 + + return-object v0 +.end method + +.method private availability()Lcom/aspiro/wamp/model/AvailabilityInteractor; + .locals 2 + + iget-object v0, p0, Lradiant/swipe/SuggestionsResolver;->host:Ljava/lang/ref/WeakReference; + + invoke-virtual {v0}, Ljava/lang/ref/Reference;->get()Ljava/lang/Object; + + move-result-object v0 + + instance-of v1, v0, Lcom/aspiro/wamp/nowplaying/view/suggestions/h; + + if-eqz v1, :dialog + + check-cast v0, Lcom/aspiro/wamp/nowplaying/view/suggestions/h; + + iget-object v0, v0, Lcom/aspiro/wamp/nowplaying/view/suggestions/h;->d:Lcom/aspiro/wamp/model/AvailabilityInteractor; + + return-object v0 + + :dialog + instance-of v1, v0, Lcom/aspiro/wamp/nowplaying/view/suggestions/o0; + + if-eqz v1, :invalid + + check-cast v0, Lcom/aspiro/wamp/nowplaying/view/suggestions/o0; + + iget-object v0, v0, Lcom/aspiro/wamp/nowplaying/view/suggestions/o0;->d:Lcom/aspiro/wamp/model/AvailabilityInteractor; + + return-object v0 + + :invalid + const/4 v0, 0x0 + + return-object v0 +.end method + +.method public static install(Landroidx/fragment/app/Fragment;Landroidx/recyclerview/widget/RecyclerView;)V + .locals 1 + + if-eqz p0, :done + + if-eqz p1, :done + + new-instance v0, Lradiant/swipe/SuggestionsResolver; + + invoke-direct {v0, p0, p1}, Lradiant/swipe/SuggestionsResolver;->(Landroidx/fragment/app/Fragment;Landroidx/recyclerview/widget/RecyclerView;)V + + invoke-static {p1, v0}, Lradiant/SwipeToQueue;->install(Landroidx/recyclerview/widget/RecyclerView;Lradiant/swipe/QueueRowResolver;)V + + :done + return-void +.end method + +.method private viewModel()Lcom/aspiro/wamp/nowplaying/view/suggestions/l; + .locals 2 + + iget-object v0, p0, Lradiant/swipe/SuggestionsResolver;->host:Ljava/lang/ref/WeakReference; + + invoke-virtual {v0}, Ljava/lang/ref/Reference;->get()Ljava/lang/Object; + + move-result-object v0 + + instance-of v1, v0, Lcom/aspiro/wamp/nowplaying/view/suggestions/h; + + if-eqz v1, :dialog + + check-cast v0, Lcom/aspiro/wamp/nowplaying/view/suggestions/h; + + iget-object v0, v0, Lcom/aspiro/wamp/nowplaying/view/suggestions/h;->c:Lcom/aspiro/wamp/nowplaying/view/suggestions/l; + + return-object v0 + + :dialog + instance-of v1, v0, Lcom/aspiro/wamp/nowplaying/view/suggestions/o0; + + if-eqz v1, :invalid + + check-cast v0, Lcom/aspiro/wamp/nowplaying/view/suggestions/o0; + + iget-object v0, v0, Lcom/aspiro/wamp/nowplaying/view/suggestions/o0;->c:Lcom/aspiro/wamp/nowplaying/view/suggestions/l; + + return-object v0 + + :invalid + const/4 v0, 0x0 + + return-object v0 +.end method + + +# virtual methods +.method public execute(Lradiant/swipe/QueueRequest;)V + .locals 4 + + invoke-direct {p0, p1}, Lradiant/swipe/SuggestionsResolver;->current(Lradiant/swipe/QueueRequest;)Lcom/aspiro/wamp/model/SuggestedMediaItem$SuggestedTrack; + + move-result-object v0 + + if-eqz v0, :done + + iget-object v0, p0, Lradiant/swipe/SuggestionsResolver;->host:Ljava/lang/ref/WeakReference; + + invoke-virtual {v0}, Ljava/lang/ref/Reference;->get()Ljava/lang/Object; + + move-result-object v0 + + invoke-direct {p0}, Lradiant/swipe/SuggestionsResolver;->viewModel()Lcom/aspiro/wamp/nowplaying/view/suggestions/l; + + move-result-object v1 + + if-eqz v1, :done + + iget p1, p1, Lradiant/swipe/QueueRequest;->position:I + + invoke-static {}, Lradiant/swipe/QueueExecutor;->hasActiveQueue()Z + + move-result v2 + + if-eqz v2, :empty_queue + + new-instance v2, Lcom/aspiro/wamp/nowplaying/view/suggestions/i$a; + + invoke-direct {v2, p1}, Lcom/aspiro/wamp/nowplaying/view/suggestions/i$a;->(I)V + + goto :emit + + :empty_queue + new-instance v2, Lcom/aspiro/wamp/nowplaying/view/suggestions/i$e; + + invoke-direct {v2, p1}, Lcom/aspiro/wamp/nowplaying/view/suggestions/i$e;->(I)V + + :emit + invoke-interface {v1, v2}, Lcom/aspiro/wamp/nowplaying/view/suggestions/j;->a(Lcom/aspiro/wamp/nowplaying/view/suggestions/i;)V + + :done + return-void +.end method + +.method public resolve(Landroidx/recyclerview/widget/RecyclerView;Landroidx/recyclerview/widget/RecyclerView$ViewHolder;)Lradiant/swipe/QueueRequest; + .locals 5 + + iget-object v0, p0, Lradiant/swipe/SuggestionsResolver;->recycler:Ljava/lang/ref/WeakReference; + + invoke-virtual {v0}, Ljava/lang/ref/Reference;->get()Ljava/lang/Object; + + move-result-object v0 + + if-ne v0, p1, :invalid + + instance-of v0, p2, Lcom/aspiro/wamp/nowplaying/view/suggestions/y$a; + + if-eqz v0, :invalid + + invoke-virtual {p2}, Landroidx/recyclerview/widget/RecyclerView$ViewHolder;->getBindingAdapterPosition()I + + move-result p2 + + if-gez p2, :has_position + + goto :invalid + + :has_position + invoke-virtual {p1}, Landroidx/recyclerview/widget/RecyclerView;->getAdapter()Landroidx/recyclerview/widget/RecyclerView$Adapter; + + move-result-object p1 + + instance-of v0, p1, La50/b; + + if-eqz v0, :invalid + + check-cast p1, La50/b; + + iget-object p1, p1, La50/b;->b:Ljava/util/ArrayList; + + invoke-virtual {p1}, Ljava/util/ArrayList;->size()I + + move-result v0 + + if-lt p2, v0, :read_item + + goto :invalid + + :read_item + invoke-virtual {p1, p2}, Ljava/util/ArrayList;->get(I)Ljava/lang/Object; + + move-result-object p1 + + instance-of v0, p1, Lcom/aspiro/wamp/model/SuggestedMediaItem$SuggestedTrack; + + if-eqz v0, :invalid + + check-cast p1, Lcom/aspiro/wamp/model/SuggestedMediaItem$SuggestedTrack; + + invoke-virtual {p1}, Lcom/aspiro/wamp/model/SuggestedMediaItem$SuggestedTrack;->getMediaItem()Lcom/aspiro/wamp/model/Track; + + move-result-object v0 + + invoke-virtual {v0}, Lcom/aspiro/wamp/model/MediaItem;->getId()I + + move-result v1 + + new-instance v2, Lradiant/swipe/QueueRequest; + + invoke-direct {v2, p2, p1, v1}, Lradiant/swipe/QueueRequest;->(ILjava/lang/Object;I)V + + invoke-direct {p0, v2}, Lradiant/swipe/SuggestionsResolver;->current(Lradiant/swipe/QueueRequest;)Lcom/aspiro/wamp/model/SuggestedMediaItem$SuggestedTrack; + + move-result-object v3 + + if-eqz v3, :invalid + + return-object v2 + + :invalid + const/4 p1, 0x0 + + return-object p1 +.end method diff --git a/patches/extension/radiant/swipe/VerticalMediaQueueAction.smali b/patches/extension/radiant/swipe/VerticalMediaQueueAction.smali new file mode 100644 index 0000000..8ebf84f --- /dev/null +++ b/patches/extension/radiant/swipe/VerticalMediaQueueAction.smali @@ -0,0 +1,310 @@ +.class public final Lradiant/swipe/VerticalMediaQueueAction; +.super Ljava/lang/Object; +.source "VerticalMediaQueueAction.smali" + +# interfaces +.implements Lradiant/swipe/ComposeSwipeAction; + + +# static fields +.field public static final TYPE_ALBUM:I = 0x1 + +.field public static final TYPE_MIX:I = 0x2 + +.field public static final TYPE_PLAYLIST:I = 0x3 + +.field public static final TYPE_TRACK:I = 0x4 + + +# instance fields +.field private final callback:Lam0/l; + +.field private context:Landroid/content/Context; + +.field private final itemId:Ljava/lang/String; + +.field private final mediaType:I + +.field private final moduleUuid:Ljava/lang/String; + +.field private final pageId:Ljava/lang/String; + + +# direct methods +.method public constructor (Lam0/l;Ljava/lang/String;Ljava/lang/String;Lm40/e;)V + .locals 3 + + invoke-direct {p0}, Ljava/lang/Object;->()V + + iput-object p1, p0, Lradiant/swipe/VerticalMediaQueueAction;->callback:Lam0/l; + + iput-object p2, p0, Lradiant/swipe/VerticalMediaQueueAction;->pageId:Ljava/lang/String; + + iput-object p3, p0, Lradiant/swipe/VerticalMediaQueueAction;->moduleUuid:Ljava/lang/String; + + instance-of v0, p4, Lm40/e$a; + + if-eqz v0, :mix + + check-cast p4, Lm40/e$a; + + iget-wide v0, p4, Lm40/e$a;->a:J + + invoke-static {v0, v1}, Ljava/lang/String;->valueOf(J)Ljava/lang/String; + + move-result-object v0 + + const/4 v1, 0x1 + + goto :store + + :mix + instance-of v0, p4, Lm40/e$c; + + if-eqz v0, :playlist + + check-cast p4, Lm40/e$c; + + iget-object v0, p4, Lm40/e$c;->a:Ljava/lang/String; + + const/4 v1, 0x2 + + goto :store + + :playlist + instance-of v0, p4, Lm40/e$d; + + if-eqz v0, :track + + check-cast p4, Lm40/e$d; + + iget-object v0, p4, Lm40/e$d;->a:Ljava/lang/String; + + const/4 v1, 0x3 + + goto :store + + :track + instance-of v0, p4, Lm40/e$e; + + if-eqz v0, :unsupported + + check-cast p4, Lm40/e$e; + + iget-wide v0, p4, Lm40/e$e;->a:J + + invoke-static {v0, v1}, Ljava/lang/String;->valueOf(J)Ljava/lang/String; + + move-result-object v0 + + const/4 v1, 0x4 + + goto :store + + :unsupported + const/4 v0, 0x0 + + const/4 v1, 0x0 + + :store + iput-object v0, p0, Lradiant/swipe/VerticalMediaQueueAction;->itemId:Ljava/lang/String; + + iput v1, p0, Lradiant/swipe/VerticalMediaQueueAction;->mediaType:I + + return-void +.end method + +.method public static isEligible(Lm40/e;)Z + .locals 1 + + instance-of v0, p0, Lm40/e$a; + + if-eqz v0, :mix + + check-cast p0, Lm40/e$a; + + iget-boolean p0, p0, Lm40/e$a;->e:Z + + return p0 + + :mix + instance-of v0, p0, Lm40/e$c; + + if-eqz v0, :playlist + + check-cast p0, Lm40/e$c; + + iget-boolean p0, p0, Lm40/e$c;->h:Z + + return p0 + + :playlist + instance-of v0, p0, Lm40/e$d; + + if-eqz v0, :track + + check-cast p0, Lm40/e$d; + + iget-boolean p0, p0, Lm40/e$d;->g:Z + + return p0 + + :track + instance-of v0, p0, Lm40/e$e; + + if-eqz v0, :invalid + + check-cast p0, Lm40/e$e; + + iget-boolean p0, p0, Lm40/e$e;->j:Z + + return p0 + + :invalid + const/4 p0, 0x0 + + return p0 +.end method + +.method public static isSupported(Lm40/e;)Z + .locals 1 + + instance-of v0, p0, Lm40/e$a; + + if-nez v0, :supported + + instance-of v0, p0, Lm40/e$c; + + if-nez v0, :supported + + instance-of v0, p0, Lm40/e$d; + + if-nez v0, :supported + + instance-of v0, p0, Lm40/e$e; + + if-eqz v0, :invalid + + :supported + const/4 p0, 0x1 + + return p0 + + :invalid + const/4 p0, 0x0 + + return p0 +.end method + + +# virtual methods +.method public invoke()Ljava/lang/Object; + .locals 7 + + iget-object v6, p0, Lradiant/swipe/VerticalMediaQueueAction;->callback:Lam0/l; + + if-eqz v6, :done + + iget-object v4, p0, Lradiant/swipe/VerticalMediaQueueAction;->itemId:Ljava/lang/String; + + if-eqz v4, :done + + iget v5, p0, Lradiant/swipe/VerticalMediaQueueAction;->mediaType:I + + if-eqz v5, :done + + const/4 v1, 0x4 + + if-ne v5, v1, :queue_event + + invoke-static {}, Lradiant/swipe/QueueExecutor;->hasActiveQueue()Z + + move-result v1 + + if-nez v1, :queue_event + + new-instance v1, Lcom/tidal/android/dynamicpages/ui/modules/verticallistcard/b$a; + + iget-object v2, p0, Lradiant/swipe/VerticalMediaQueueAction;->pageId:Ljava/lang/String; + + iget-object v3, p0, Lradiant/swipe/VerticalMediaQueueAction;->moduleUuid:Ljava/lang/String; + + invoke-direct {v1, v2, v3, v4}, Lcom/tidal/android/dynamicpages/ui/modules/verticallistcard/b$a;->(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V + + goto :emit + + :queue_event + + iget-object v1, p0, Lradiant/swipe/VerticalMediaQueueAction;->context:Landroid/content/Context; + + if-eqz v1, :done + + new-instance v0, Lradiant/swipe/DynamicMediaQueueEvent; + + iget-object v2, p0, Lradiant/swipe/VerticalMediaQueueAction;->pageId:Ljava/lang/String; + + iget-object v3, p0, Lradiant/swipe/VerticalMediaQueueAction;->moduleUuid:Ljava/lang/String; + + invoke-direct/range {v0 .. v5}, Lradiant/swipe/DynamicMediaQueueEvent;->(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V + + move-object v1, v0 + + :emit + invoke-interface {v6, v1}, Lam0/l;->invoke(Ljava/lang/Object;)Ljava/lang/Object; + + :done + sget-object v0, Lkotlin/u;->a:Lkotlin/u; + + return-object v0 +.end method + +.method public setContext(Landroid/content/Context;)V + .locals 0 + + iput-object p1, p0, Lradiant/swipe/VerticalMediaQueueAction;->context:Landroid/content/Context; + + return-void +.end method + +.method public stableKey()Ljava/lang/String; + .locals 3 + + iget-object v0, p0, Lradiant/swipe/VerticalMediaQueueAction;->itemId:Ljava/lang/String; + + if-eqz v0, :invalid + + new-instance v1, Ljava/lang/StringBuilder; + + const-string v2, "vlc:" + + invoke-direct {v1, v2}, Ljava/lang/StringBuilder;->(Ljava/lang/String;)V + + iget-object v2, p0, Lradiant/swipe/VerticalMediaQueueAction;->moduleUuid:Ljava/lang/String; + + invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; + + const/16 v2, 0x3a + + invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(C)Ljava/lang/StringBuilder; + + iget v2, p0, Lradiant/swipe/VerticalMediaQueueAction;->mediaType:I + + invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder; + + const/16 v2, 0x3a + + invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(C)Ljava/lang/StringBuilder; + + invoke-virtual {v1, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; + + invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; + + move-result-object v0 + + return-object v0 + + :invalid + const/4 v0, 0x0 + + return-object v0 +.end method diff --git a/patches/manifest.json b/patches/manifest.json index 748ae88..0ac26a2 100644 --- a/patches/manifest.json +++ b/patches/manifest.json @@ -458,7 +458,17 @@ "radiant/swipe/ViewAllTrackQueue.smali", "radiant/swipe/ComposeSearchQueueEvent.smali", "radiant/swipe/ComposeSearchQueueAction.smali", - "radiant/swipe/ComposeSearchQueue.smali" + "radiant/swipe/ComposeSearchQueue.smali", + "radiant/swipe/FeedResolver.smali", + "radiant/swipe/ArtistTrackCreditsQueueEvent.smali", + "radiant/swipe/ArtistTrackCreditsQueueAction.smali", + "radiant/swipe/ArtistTrackCreditsQueue.smali", + "radiant/swipe/DynamicMediaQueueEvent.smali", + "radiant/swipe/CompactGridMediaQueueAction.smali", + "radiant/swipe/VerticalMediaQueueAction.smali", + "radiant/swipe/PublicPlaylistQueueAction.smali", + "radiant/swipe/DynamicMediaQueue.smali", + "radiant/swipe/SuggestionsResolver.smali" ], "title": "Swipe to Queue", "description": "Swipe on tracks/albums/playlists to add them to the play queue", diff --git a/patches/swipe-to-queue-compose.patch b/patches/swipe-to-queue-compose.patch index 09d0570..15e21d6 100644 --- a/patches/swipe-to-queue-compose.patch +++ b/patches/swipe-to-queue-compose.patch @@ -54,6 +54,84 @@ invoke-static {}, Landroidx/navigation/f0;->a()V .line 249 +--- a/com/tidal/android/dynamicpages/ui/composables/compactgridcard/CompactGridCardModuleRowKt.smali ++++ b/com/tidal/android/dynamicpages/ui/composables/compactgridcard/CompactGridCardModuleRowKt.smali +@@ -872,1 +872,26 @@ ++ invoke-static {v10}, Lradiant/swipe/CompactGridMediaQueueAction;->isEligible(Lm40/e;)Z ++ ++ move-result v11 ++ ++ if-eqz v11, :rl_compact_grid_swipe_done ++ ++ new-instance v11, Lradiant/swipe/CompactGridMediaQueueAction; ++ ++ move-object/from16 v12, p0 ++ ++ move-object/from16 v14, p1 ++ ++ invoke-direct {v11, v4, v12, v14, v10}, Lradiant/swipe/CompactGridMediaQueueAction;->(Lam0/l;Ljava/lang/String;Ljava/lang/String;Lm40/e;)V ++ ++ invoke-virtual {v11}, Lradiant/swipe/CompactGridMediaQueueAction;->stableKey()Ljava/lang/String; ++ ++ move-result-object v12 ++ ++ const/4 v14, 0x1 ++ ++ invoke-static {v9, v12, v11, v14, v13}, Lradiant/swipe/ComposeSwipeState;->attach(Landroidx/compose/ui/Modifier;Ljava/lang/Object;Lradiant/swipe/ComposeSwipeAction;ZLandroidx/compose/runtime/Composer;)Landroidx/compose/ui/Modifier; ++ ++ move-result-object v9 ++ ++ :rl_compact_grid_swipe_done + const v11, 0xe000 +--- a/com/tidal/android/dynamicpages/ui/composables/compactgridcard/d.smali ++++ b/com/tidal/android/dynamicpages/ui/composables/compactgridcard/d.smali +@@ -38,1 +38,22 @@ ++ instance-of v0, p1, Lradiant/swipe/DynamicMediaQueueEvent; ++ ++ if-eqz v0, :rl_compact_grid_native_click ++ ++ iget-object v0, p0, Lcom/tidal/android/dynamicpages/ui/composables/compactgridcard/d;->b:Lcom/tidal/android/dynamicpages/ui/modules/compactgridcard/c; ++ ++ iget-object v1, v0, Lcom/tidal/android/dynamicpages/ui/modules/compactgridcard/c;->f:Lam0/q; ++ ++ iget-object v2, p0, Lcom/tidal/android/dynamicpages/ui/composables/compactgridcard/d;->c:Ljava/lang/String; ++ ++ iget-object v3, v0, Lcom/tidal/android/dynamicpages/ui/modules/compactgridcard/c;->a:Ljava/lang/String; ++ ++ const/4 v4, 0x0 ++ ++ invoke-interface {v1, v2, v3, p1, v4}, Lam0/q;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; ++ ++ sget-object p1, Lkotlin/u;->a:Lkotlin/u; ++ ++ return-object p1 ++ ++ :rl_compact_grid_native_click + .line 1 +--- a/com/tidal/android/dynamicpages/ui/modules/compactgridcard/CompactGridCardModuleManager$createModuleViewState$2$2.smali ++++ b/com/tidal/android/dynamicpages/ui/modules/compactgridcard/CompactGridCardModuleManager$createModuleViewState$2$2.smali +@@ -72,1 +72,1 @@ +- .locals 0 ++ .locals 1 +@@ -74,1 +74,18 @@ ++ instance-of v0, p3, Lradiant/swipe/DynamicMediaQueueEvent; ++ ++ if-eqz v0, :rl_compact_grid_native_event ++ ++ iget-object v0, p0, Lkotlin/jvm/internal/AdaptedFunctionReference;->receiver:Ljava/lang/Object; ++ ++ check-cast v0, Lcom/tidal/android/dynamicpages/ui/modules/compactgridcard/a; ++ ++ check-cast p3, Lradiant/swipe/DynamicMediaQueueEvent; ++ ++ invoke-static {v0, p3}, Lradiant/swipe/DynamicMediaQueue;->handleCompact(Lcom/tidal/android/dynamicpages/ui/modules/compactgridcard/a;Lradiant/swipe/DynamicMediaQueueEvent;)V ++ ++ sget-object p1, Lkotlin/u;->a:Lkotlin/u; ++ ++ return-object p1 ++ ++ :rl_compact_grid_native_event + .line 1 --- a/com/tidal/android/feature/search/ui/SearchScreenViewModel.smali +++ b/com/tidal/android/feature/search/ui/SearchScreenViewModel.smali @@ -926,6 +926,17 @@ @@ -233,7 +311,7 @@ move-object/from16 v25, v9 --- a/com/tidal/android/feature/viewall/ui/ViewAllScreenViewModel.smali +++ b/com/tidal/android/feature/viewall/ui/ViewAllScreenViewModel.smali -@@ -1718,6 +1718,17 @@ +@@ -1717,5 +1717,16 @@ } .end annotation @@ -250,4 +328,153 @@ + :rl_viewall_regular_event .line 1 instance-of v0, p1, Lcom/tidal/android/feature/viewall/ui/e$a; - +--- a/com/tidal/android/dynamicpages/ui/composables/artisttrackcredits/h.smali ++++ b/com/tidal/android/dynamicpages/ui/composables/artisttrackcredits/h.smali +@@ -929,1 +929,5 @@ + check-cast v34, Lam0/a; ++ invoke-static/range {v34 .. v34}, Lradiant/swipe/ComposeTapGuard;->wrap(Lam0/a;)Lam0/a; ++ ++ move-result-object v34 ++ +@@ -970,1 +974,17 @@ + move-result-object v0 ++ iget-wide v14, v3, Lm40/e$e;->a:J ++ ++ invoke-static {v14, v15}, Ljava/lang/Long;->valueOf(J)Ljava/lang/Long; ++ ++ move-result-object v14 ++ ++ new-instance v15, Lradiant/swipe/ArtistTrackCreditsQueueAction; ++ ++ invoke-direct {v15, v4, v1, v2, v3}, Lradiant/swipe/ArtistTrackCreditsQueueAction;->(Lam0/l;Ljava/lang/String;Ljava/lang/String;Lm40/e$e;)V ++ ++ iget-boolean v5, v3, Lm40/e$e;->j:Z ++ ++ invoke-static {v0, v14, v15, v5, v11}, Lradiant/swipe/ComposeSwipeState;->attach(Landroidx/compose/ui/Modifier;Ljava/lang/Object;Lradiant/swipe/ComposeSwipeAction;ZLandroidx/compose/runtime/Composer;)Landroidx/compose/ui/Modifier; ++ ++ move-result-object v0 ++ +--- a/com/tidal/android/dynamicpages/ui/modules/artisttrackcredits/ArtistTrackCreditsModuleManager$createModuleViewState$3.smali ++++ b/com/tidal/android/dynamicpages/ui/modules/artisttrackcredits/ArtistTrackCreditsModuleManager$createModuleViewState$3.smali +@@ -603,1 +603,12 @@ + :cond_c ++ instance-of p2, p1, Lradiant/swipe/ArtistTrackCreditsQueueEvent; ++ ++ if-eqz p2, :rl_artist_credits_queue_unhandled ++ ++ check-cast p1, Lradiant/swipe/ArtistTrackCreditsQueueEvent; ++ ++ invoke-static {v0, p1}, Lradiant/swipe/ArtistTrackCreditsQueue;->handle(Lcom/tidal/android/dynamicpages/ui/modules/artisttrackcredits/ArtistTrackCreditsModuleManager;Lradiant/swipe/ArtistTrackCreditsQueueEvent;)V ++ ++ goto :goto_4 ++ ++ :rl_artist_credits_queue_unhandled +--- a/com/tidal/android/dynamicpages/ui/composables/verticallistcard/VerticalListCardKt.smali ++++ b/com/tidal/android/dynamicpages/ui/composables/verticallistcard/VerticalListCardKt.smali +@@ -3648,1 +3648,24 @@ + move-result-object v0 ++ invoke-static {v10}, Lradiant/swipe/VerticalMediaQueueAction;->isSupported(Lm40/e;)Z ++ ++ move-result v7 ++ ++ if-eqz v7, :rl_vertical_swipe_done ++ ++ new-instance v7, Lradiant/swipe/VerticalMediaQueueAction; ++ ++ invoke-direct {v7, v4, v1, v2, v10}, Lradiant/swipe/VerticalMediaQueueAction;->(Lam0/l;Ljava/lang/String;Ljava/lang/String;Lm40/e;)V ++ ++ invoke-virtual {v7}, Lradiant/swipe/VerticalMediaQueueAction;->stableKey()Ljava/lang/String; ++ ++ move-result-object v9 ++ ++ invoke-static {v10}, Lradiant/swipe/VerticalMediaQueueAction;->isEligible(Lm40/e;)Z ++ ++ move-result v12 ++ ++ invoke-static {v0, v9, v7, v12, v3}, Lradiant/swipe/ComposeSwipeState;->attach(Landroidx/compose/ui/Modifier;Ljava/lang/Object;Lradiant/swipe/ComposeSwipeAction;ZLandroidx/compose/runtime/Composer;)Landroidx/compose/ui/Modifier; ++ ++ move-result-object v0 ++ ++ :rl_vertical_swipe_done +--- a/j40/e4.smali ++++ b/j40/e4.smali +@@ -310,1 +310,24 @@ + check-cast v11, Lam0/a; ++ instance-of v8, v6, Lcom/tidal/android/dynamicpages/ui/composables/verticallistcard/m; ++ ++ if-eqz v8, :rl_vertical_tap_guard_done ++ ++ instance-of v8, v5, Lm40/e; ++ ++ if-eqz v8, :rl_vertical_tap_guard_done ++ ++ move-object v8, v5 ++ ++ check-cast v8, Lm40/e; ++ ++ invoke-static {v8}, Lradiant/swipe/VerticalMediaQueueAction;->isSupported(Lm40/e;)Z ++ ++ move-result v8 ++ ++ if-eqz v8, :rl_vertical_tap_guard_done ++ ++ invoke-static {v11}, Lradiant/swipe/ComposeTapGuard;->wrap(Lam0/a;)Lam0/a; ++ ++ move-result-object v11 ++ ++ :rl_vertical_tap_guard_done +--- a/com/tidal/android/dynamicpages/ui/composables/publicplaylistlist/i.smali ++++ b/com/tidal/android/dynamicpages/ui/composables/publicplaylistlist/i.smali +@@ -2120,1 +2120,5 @@ + check-cast v34, Lam0/a; ++ invoke-static/range {v34 .. v34}, Lradiant/swipe/ComposeTapGuard;->wrap(Lam0/a;)Lam0/a; ++ ++ move-result-object v34 ++ +@@ -2161,1 +2165,15 @@ + move-result-object v0 ++ new-instance v5, Lradiant/swipe/PublicPlaylistQueueAction; ++ ++ invoke-direct {v5, v4, v1, v2, v3}, Lradiant/swipe/PublicPlaylistQueueAction;->(Lam0/l;Ljava/lang/String;Ljava/lang/String;Lm40/e$d;)V ++ ++ invoke-virtual {v5}, Lradiant/swipe/PublicPlaylistQueueAction;->stableKey()Ljava/lang/String; ++ ++ move-result-object v7 ++ ++ iget-boolean v9, v3, Lm40/e$d;->g:Z ++ ++ invoke-static {v0, v7, v5, v9, v11}, Lradiant/swipe/ComposeSwipeState;->attach(Landroidx/compose/ui/Modifier;Ljava/lang/Object;Lradiant/swipe/ComposeSwipeAction;ZLandroidx/compose/runtime/Composer;)Landroidx/compose/ui/Modifier; ++ ++ move-result-object v0 ++ +--- a/com/tidal/android/dynamicpages/ui/modules/verticallistcard/VerticalListCardModuleManager$createModuleViewState$3.smali ++++ b/com/tidal/android/dynamicpages/ui/modules/verticallistcard/VerticalListCardModuleManager$createModuleViewState$3.smali +@@ -830,1 +830,12 @@ + :cond_15 ++ instance-of v2, v0, Lradiant/swipe/DynamicMediaQueueEvent; ++ ++ if-eqz v2, :rl_vertical_queue_continue ++ ++ check-cast v0, Lradiant/swipe/DynamicMediaQueueEvent; ++ ++ invoke-static {v3, v0}, Lradiant/swipe/DynamicMediaQueue;->handleVertical(Lcom/tidal/android/dynamicpages/ui/modules/verticallistcard/VerticalListCardModuleManager;Lradiant/swipe/DynamicMediaQueueEvent;)V ++ ++ goto :goto_2 ++ ++ :rl_vertical_queue_continue +--- a/com/tidal/android/dynamicpages/ui/modules/publicplaylistlist/PublicPlaylistListModuleManager$createModuleViewState$3.smali ++++ b/com/tidal/android/dynamicpages/ui/modules/publicplaylistlist/PublicPlaylistListModuleManager$createModuleViewState$3.smali +@@ -487,2 +487,13 @@ + :cond_c ++ instance-of v1, p1, Lradiant/swipe/DynamicMediaQueueEvent; ++ ++ if-eqz v1, :rl_public_queue_continue ++ ++ check-cast p1, Lradiant/swipe/DynamicMediaQueueEvent; ++ ++ invoke-static {p2, p1}, Lradiant/swipe/DynamicMediaQueue;->handlePublicPlaylist(Lcom/tidal/android/dynamicpages/ui/modules/publicplaylistlist/PublicPlaylistListModuleManager;Lradiant/swipe/DynamicMediaQueueEvent;)V ++ ++ goto :goto_1 ++ ++ :rl_public_queue_continue + invoke-static {}, Landroidx/navigation/f0;->a()V diff --git a/patches/swipe-to-queue.patch b/patches/swipe-to-queue.patch index cab3cac..fe4e1e6 100644 --- a/patches/swipe-to-queue.patch +++ b/patches/swipe-to-queue.patch @@ -443,3 +443,34 @@ .line 72 .line 73 .line 74 +--- a/com/tidal/android/feature/feed/ui/FeedView.smali ++++ b/com/tidal/android/feature/feed/ui/FeedView.smali +@@ -306,8 +306,10 @@ + .line 36 + .line 37 + .line 38 + invoke-static {p2, p1}, Lcom/tidal/android/feature/appscaffold/ui/recyclerview/b;->a(Landroidx/lifecycle/LifecycleOwner;Landroidx/recyclerview/widget/RecyclerView;)Lcom/tidal/android/feature/appscaffold/ui/recyclerview/a; + ++ invoke-static {p0, p1}, Lradiant/swipe/FeedResolver;->install(Lcom/tidal/android/feature/feed/ui/FeedView;Landroidx/recyclerview/widget/RecyclerView;)V ++ + .line 39 + .line 40 + .line 41 +--- a/com/aspiro/wamp/nowplaying/view/suggestions/o0.smali ++++ b/com/aspiro/wamp/nowplaying/view/suggestions/o0.smali +@@ -876,8 +876,10 @@ + .line 96 + invoke-virtual {v0, p2}, Landroidx/recyclerview/widget/RecyclerView;->setAdapter(Landroidx/recyclerview/widget/RecyclerView$Adapter;)V + ++ invoke-static {p0, v0}, Lradiant/swipe/SuggestionsResolver;->install(Landroidx/fragment/app/Fragment;Landroidx/recyclerview/widget/RecyclerView;)V ++ + .line 97 + .line 98 + .line 99 + invoke-virtual {p0}, Lcom/aspiro/wamp/nowplaying/view/suggestions/o0;->M()Lcom/aspiro/wamp/nowplaying/view/suggestions/l; +--- a/com/aspiro/wamp/nowplaying/view/suggestions/h.smali ++++ b/com/aspiro/wamp/nowplaying/view/suggestions/h.smali +@@ -674,1 +674,3 @@ + invoke-virtual {v3, p2}, Landroidx/recyclerview/widget/RecyclerView;->setAdapter(Landroidx/recyclerview/widget/RecyclerView$Adapter;)V ++ invoke-static {p0, v3}, Lradiant/swipe/SuggestionsResolver;->install(Landroidx/fragment/app/Fragment;Landroidx/recyclerview/widget/RecyclerView;)V ++