Skip to content

Commit 1dff248

Browse files
committed
Spotify: Update premium upsell removal in context menu
1 parent 3e0d54f commit 1dff248

File tree

4 files changed

+37
-6
lines changed

4 files changed

+37
-6
lines changed

app/src/main/java/io/github/chsbuffer/revancedxposed/spotify/layout/hide/createbutton/Fingerprints.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,14 @@ val oldNavigationBarAddItemFingerprint = fingerprint {
1111
strings("Bottom navigation tabs exceeds maximum of 5 tabs")
1212
}
1313

14+
@get:SkipTest
1415
val navigationBarItemSetClass = findClassDirect {
1516
fingerprint {
1617
strings("NavigationBarItemSet(")
1718
}.declaredClass!!
1819
}
1920

21+
@get:SkipTest
2022
val navigationBarItemSetConstructorFingerprint = fingerprint {
2123
accessFlags(AccessFlags.PUBLIC, AccessFlags.CONSTRUCTOR)
2224
// Make sure the method checks whether navigation bar items are null before adding them.

app/src/main/java/io/github/chsbuffer/revancedxposed/spotify/misc/Fingerprints.kt

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
package io.github.chsbuffer.revancedxposed.spotify.misc
22

3-
import io.github.chsbuffer.revancedxposed.FindClassFunc
3+
import io.github.chsbuffer.revancedxposed.AccessFlags
44
import io.github.chsbuffer.revancedxposed.Opcode
5+
import io.github.chsbuffer.revancedxposed.RequireAppVersion
56
import io.github.chsbuffer.revancedxposed.SkipTest
67
import io.github.chsbuffer.revancedxposed.findClassDirect
78
import io.github.chsbuffer.revancedxposed.findFieldDirect
@@ -41,12 +42,33 @@ val contextFromJsonFingerprint = fingerprint {
4142
)
4243
}
4344
}
44-
val contextMenuViewModelClass: FindClassFunc = findClassDirect {
45-
fingerprint {
46-
strings("ContextMenuViewModel(header=")
45+
46+
val contextMenuViewModelClass = findClassDirect {
47+
return@findClassDirect runCatching {
48+
fingerprint {
49+
strings("ContextMenuViewModel(header=")
50+
}
51+
}.getOrElse {
52+
fingerprint {
53+
accessFlags(AccessFlags.CONSTRUCTOR)
54+
strings("ContextMenuViewModel cannot contain items with duplicate itemResId. id=")
55+
parameters("L", "Ljava/util/List;", "Z")
56+
}
4757
}.declaredClass!!
4858
}
4959

60+
val viewModelClazz = findClassDirect {
61+
findMethod {
62+
findFirst = true
63+
matcher { name("getViewModel") }
64+
}.single().returnType!!
65+
}
66+
67+
val isPremiumUpsellField = findFieldDirect {
68+
viewModelClazz().fields.filter { it.typeName == "boolean" }[1]
69+
}
70+
71+
@get:RequireAppVersion("0.0.0.0", "9.0.60.127")
5072
val oldContextMenuViewModelAddItemFingerprint = fingerprint {
5173
classMatcher { className(contextMenuViewModelClass(dexkit).name) }
5274
parameters("L")

app/src/main/java/io/github/chsbuffer/revancedxposed/spotify/misc/UnlockPremiumPatch.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,14 +78,20 @@ fun SpotifyHook.UnlockPremium() {
7878
Logger.printDebug { "Patch for newest versions. $it" }
7979
XposedBridge.hookAllConstructors(
8080
contextMenuViewModelClazz, object : XC_MethodHook() {
81+
val isPremiumUpsell = ::isPremiumUpsellField.field
82+
8183
override fun beforeHookedMethod(param: MethodHookParam) {
8284
val parameterTypes =
8385
(param.method as Constructor<*>).parameterTypes
8486
Logger.printDebug { "ContextMenuViewModel(${parameterTypes.joinToString(",") { it.name }})" }
8587
for (i in 0 until param.args.size) {
8688
if (parameterTypes[i].name != "java.util.List") continue
8789
val original = param.args[i] as? List<*> ?: continue
88-
val filtered = UnlockPremiumPatch.filterContextMenuItems(original)
90+
Logger.printDebug { "List value type: ${original.firstOrNull()?.javaClass}" }
91+
val filtered = original.filter {
92+
it!!.callMethod("getViewModel").let { isPremiumUpsell.get(it) } != true
93+
}
94+
// val filtered = UnlockPremiumPatch.filterContextMenuItems(original)
8995
param.args[i] = filtered
9096
Logger.printDebug { "Filtered ${original.size - filtered.size} context menu items." }
9197
}
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package io.github.chsbuffer.revancedxposed;
22

3+
import java.util.ArrayList;
34
import java.util.Arrays;
45
import java.util.List;
56

@@ -8,7 +9,7 @@ public static List<String> getSharedFingerprints(String app) {
89
return switch (app) {
910
case "youtube", "music" ->
1011
Arrays.asList(io.github.chsbuffer.revancedxposed.shared.misc.debugging.FingerprintsKt.class.getName());
11-
default -> null;
12+
default -> new ArrayList<>();
1213
};
1314
}
1415
}

0 commit comments

Comments
 (0)