diff --git a/src/main/kotlin/app/revanced/patches/music/misc/upgradebutton/fingerprints/PivotBarConstructorFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/misc/upgradebutton/fingerprints/PivotBarConstructorFingerprint.kt deleted file mode 100644 index 38f242cde..000000000 --- a/src/main/kotlin/app/revanced/patches/music/misc/upgradebutton/fingerprints/PivotBarConstructorFingerprint.kt +++ /dev/null @@ -1,21 +0,0 @@ -package app.revanced.patches.music.misc.upgradebutton.fingerprints - -import app.revanced.patcher.extensions.or -import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import app.revanced.util.bytecode.isNarrowLiteralExists -import com.android.tools.smali.dexlib2.AccessFlags -import com.android.tools.smali.dexlib2.Opcode - -object PivotBarConstructorFingerprint : MethodFingerprint( - returnType = "V", - accessFlags = AccessFlags.PUBLIC or AccessFlags.CONSTRUCTOR, - opcodes = listOf( - Opcode.IPUT_OBJECT, - Opcode.RETURN_VOID - ), - customFingerprint = { methodDef, _ -> - methodDef.name == "" && methodDef.isNarrowLiteralExists( - 117501096 - ) - } -) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/music/misc/upgradebutton/fingerprints/NotifierShelfFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/navigation/upgrade/fingerprints/NotifierShelfFingerprint.kt similarity index 92% rename from src/main/kotlin/app/revanced/patches/music/misc/upgradebutton/fingerprints/NotifierShelfFingerprint.kt rename to src/main/kotlin/app/revanced/patches/music/navigation/upgrade/fingerprints/NotifierShelfFingerprint.kt index 78045bac4..a6e46b2ee 100644 --- a/src/main/kotlin/app/revanced/patches/music/misc/upgradebutton/fingerprints/NotifierShelfFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/navigation/upgrade/fingerprints/NotifierShelfFingerprint.kt @@ -1,4 +1,4 @@ -package app.revanced.patches.music.misc.upgradebutton.fingerprints +package app.revanced.patches.music.navigation.upgrade.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint diff --git a/src/main/kotlin/app/revanced/patches/music/misc/upgradebutton/patch/UpgradeButtonPatch.kt b/src/main/kotlin/app/revanced/patches/music/navigation/upgrade/patch/UpgradeButtonPatch.kt similarity index 53% rename from src/main/kotlin/app/revanced/patches/music/misc/upgradebutton/patch/UpgradeButtonPatch.kt rename to src/main/kotlin/app/revanced/patches/music/navigation/upgrade/patch/UpgradeButtonPatch.kt index 3274dd75a..0f5b179c9 100644 --- a/src/main/kotlin/app/revanced/patches/music/misc/upgradebutton/patch/UpgradeButtonPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/navigation/upgrade/patch/UpgradeButtonPatch.kt @@ -1,4 +1,4 @@ -package app.revanced.patches.music.misc.upgradebutton.patch +package app.revanced.patches.music.navigation.upgrade.patch import app.revanced.extensions.exception import app.revanced.patcher.annotation.Description @@ -7,18 +7,20 @@ import app.revanced.patcher.data.BytecodeContext import app.revanced.patcher.extensions.InstructionExtensions.addInstruction import app.revanced.patcher.extensions.InstructionExtensions.addInstructionsWithLabels import app.revanced.patcher.extensions.InstructionExtensions.getInstruction -import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction import app.revanced.patcher.patch.BytecodePatch import app.revanced.patcher.patch.annotations.DependsOn import app.revanced.patcher.patch.annotations.Patch -import app.revanced.patches.music.misc.upgradebutton.fingerprints.NotifierShelfFingerprint -import app.revanced.patches.music.misc.upgradebutton.fingerprints.PivotBarConstructorFingerprint +import app.revanced.patcher.util.smali.ExternalLabel +import app.revanced.patches.music.navigation.upgrade.fingerprints.NotifierShelfFingerprint import app.revanced.patches.music.utils.annotations.MusicCompatibility +import app.revanced.patches.music.utils.fingerprints.TabLayoutTextFingerprint import app.revanced.patches.music.utils.integrations.patch.IntegrationsPatch import app.revanced.patches.music.utils.resourceid.patch.SharedResourceIdPatch +import app.revanced.util.integrations.Constants.MUSIC_NAVIGATION +import com.android.tools.smali.dexlib2.Opcode import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction -import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction -import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction +import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction35c +import com.android.tools.smali.dexlib2.iface.reference.MethodReference @Patch @Name("Hide upgrade button") @@ -32,36 +34,36 @@ import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction @MusicCompatibility class UpgradeButtonPatch : BytecodePatch( listOf( - PivotBarConstructorFingerprint, - NotifierShelfFingerprint + NotifierShelfFingerprint, + TabLayoutTextFingerprint ) ) { override fun execute(context: BytecodeContext) { - PivotBarConstructorFingerprint.result?.let { + TabLayoutTextFingerprint.result?.let { it.mutableMethod.apply { - val targetIndex = it.scanResult.patternScanResult!!.startIndex - val targetRegisterA = getInstruction(targetIndex).registerA - val targetRegisterB = getInstruction(targetIndex).registerB + val targetIndex = it.scanResult.patternScanResult!!.startIndex + 3 + val targetRegister = getInstruction(targetIndex).registerA - val replaceReference = - getInstruction(targetIndex).reference.toString() + val insertIndex = implementation!!.instructions.indexOfFirst { instruction -> + instruction.opcode == Opcode.AND_INT_LIT8 + } - 2 - replaceInstruction( - targetIndex, - "invoke-interface {v$targetRegisterA}, Ljava/util/List;->size()I" - ) - addInstructionsWithLabels( - targetIndex + 1, """ - move-result v1 - const/4 v2, 0x3 - if-le v1, v2, :dismiss - invoke-interface {v$targetRegisterA, v2}, Ljava/util/List;->remove(I)Ljava/lang/Object; - :dismiss - iput-object v$targetRegisterA, v$targetRegisterB, $replaceReference - """ - ) + for ((index, instruction) in implementation!!.instructions.withIndex()) { + if (instruction.opcode != Opcode.INVOKE_INTERFACE) continue + + if ((getInstruction(index).reference as MethodReference).name != "hasNext") continue + + addInstructionsWithLabels( + insertIndex, """ + invoke-static {v$targetRegister}, $MUSIC_NAVIGATION->hideUpgradeButton(Ljava/lang/Enum;)Z + move-result v$targetRegister + if-nez v$targetRegister, :hide + """, ExternalLabel("hide", getInstruction(index)) + ) + break + } } - } ?: throw PivotBarConstructorFingerprint.exception + } ?: throw TabLayoutTextFingerprint.exception NotifierShelfFingerprint.result?.let { it.mutableMethod.apply {