feat(music/hide-get-premium): patch now also hides the premium membership label in settings

This commit is contained in:
inotia00 2023-09-05 12:07:48 +09:00
parent a1fa3a2594
commit 0473a62749
4 changed files with 49 additions and 3 deletions

View File

@ -18,5 +18,5 @@ object HideGetPremiumFingerprint : MethodFingerprint(
Opcode.MOVE_RESULT_OBJECT, Opcode.MOVE_RESULT_OBJECT,
Opcode.INVOKE_STATIC Opcode.INVOKE_STATIC
), ),
listOf("FEmusic_history") strings = listOf("FEmusic_history")
) )

View File

@ -0,0 +1,11 @@
package app.revanced.patches.music.misc.premium.fingerprints
import app.revanced.patcher.extensions.or
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
import com.android.tools.smali.dexlib2.AccessFlags
object MembershipSettingsFingerprint : MethodFingerprint(
returnType = "Ljava/lang/CharSequence;",
accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL,
parameters = emptyList()
)

View File

@ -0,0 +1,12 @@
package app.revanced.patches.music.misc.premium.fingerprints
import app.revanced.patcher.extensions.or
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
import com.android.tools.smali.dexlib2.AccessFlags
object MembershipSettingsParentFingerprint : MethodFingerprint(
returnType = "L",
accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL,
parameters = emptyList(),
strings = listOf("SPmanage_red")
)

View File

@ -5,13 +5,17 @@ import app.revanced.patcher.annotation.Description
import app.revanced.patcher.annotation.Name import app.revanced.patcher.annotation.Name
import app.revanced.patcher.data.BytecodeContext import app.revanced.patcher.data.BytecodeContext
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint.Companion.resolve
import app.revanced.patcher.patch.BytecodePatch import app.revanced.patcher.patch.BytecodePatch
import app.revanced.patcher.patch.annotations.DependsOn import app.revanced.patcher.patch.annotations.DependsOn
import app.revanced.patcher.patch.annotations.Patch import app.revanced.patcher.patch.annotations.Patch
import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod
import app.revanced.patches.music.misc.premium.fingerprints.AccountMenuFooterFingerprint import app.revanced.patches.music.misc.premium.fingerprints.AccountMenuFooterFingerprint
import app.revanced.patches.music.misc.premium.fingerprints.HideGetPremiumFingerprint import app.revanced.patches.music.misc.premium.fingerprints.HideGetPremiumFingerprint
import app.revanced.patches.music.misc.premium.fingerprints.MembershipSettingsFingerprint
import app.revanced.patches.music.misc.premium.fingerprints.MembershipSettingsParentFingerprint
import app.revanced.patches.music.utils.annotations.MusicCompatibility import app.revanced.patches.music.utils.annotations.MusicCompatibility
import app.revanced.patches.music.utils.resourceid.patch.SharedResourceIdPatch import app.revanced.patches.music.utils.resourceid.patch.SharedResourceIdPatch
import app.revanced.patches.music.utils.resourceid.patch.SharedResourceIdPatch.Companion.PrivacyTosFooter import app.revanced.patches.music.utils.resourceid.patch.SharedResourceIdPatch.Companion.PrivacyTosFooter
@ -24,13 +28,14 @@ import com.android.tools.smali.dexlib2.iface.reference.Reference
@Patch @Patch
@Name("Hide get premium") @Name("Hide get premium")
@Description("Hides \"Get Premium\" label from the account menu.") @Description("Hides \"Get Premium\" label from the account menu or settings.")
@DependsOn([SharedResourceIdPatch::class]) @DependsOn([SharedResourceIdPatch::class])
@MusicCompatibility @MusicCompatibility
class HideGetPremiumPatch : BytecodePatch( class HideGetPremiumPatch : BytecodePatch(
listOf( listOf(
AccountMenuFooterFingerprint, AccountMenuFooterFingerprint,
HideGetPremiumFingerprint HideGetPremiumFingerprint,
MembershipSettingsParentFingerprint
) )
) { ) {
override fun execute(context: BytecodeContext) { override fun execute(context: BytecodeContext) {
@ -80,6 +85,24 @@ class HideGetPremiumPatch : BytecodePatch(
} }
} ?: throw AccountMenuFooterFingerprint.exception } ?: throw AccountMenuFooterFingerprint.exception
MembershipSettingsParentFingerprint.result?.let { parentResult ->
MembershipSettingsFingerprint.also {
it.resolve(
context,
parentResult.classDef
)
}.result?.let {
it.mutableMethod.apply {
addInstructions(
0, """
const/4 v0, 0x0
return-object v0
"""
)
}
} ?: throw MembershipSettingsFingerprint.exception
} ?: throw MembershipSettingsParentFingerprint.exception
} }
private companion object { private companion object {