Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Subject: [PATCH] feat(Nova Launcher): Add `Unlock Nova Prime` patch
- ---
- Index: src/main/kotlin/app/revanced/patches/nova/prime/UnlockPrimePatch.kt
- IDEA additional info:
- Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
- <+>UTF-8
- ===================================================================
- diff --git a/src/main/kotlin/app/revanced/patches/nova/prime/UnlockPrimePatch.kt b/src/main/kotlin/app/revanced/patches/nova/prime/UnlockPrimePatch.kt
- new file mode 100644
- --- /dev/null (revision f5261a20271a7d48995efd957b4bce777e008a24)
- +++ b/src/main/kotlin/app/revanced/patches/nova/prime/UnlockPrimePatch.kt (revision f5261a20271a7d48995efd957b4bce777e008a24)
- @@ -0,0 +1,35 @@
- +package app.revanced.patches.nova.prime
- +
- +import app.revanced.extensions.exception
- +import app.revanced.patcher.data.BytecodeContext
- +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.annotation.CompatiblePackage
- +import app.revanced.patcher.patch.annotation.Patch
- +import app.revanced.patches.nova.prime.fingerprints.UpdatePrimeStatusFingerprint
- +import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
- +
- +@Patch(
- + name = "Unlock Nova Prime",
- + compatiblePackages = [CompatiblePackage("com.teslacoilsw.launcher")]
- +)
- +@Suppress("unused")
- +object UnlockPrimePatch : BytecodePatch(
- + setOf(UpdatePrimeStatusFingerprint)
- +) {
- + // Any value except 0 unlocks Nova Prime, but 512 is needed for a protection mechanism
- + // otherwise the preferences will be reset if the status on disk changes after a restart.
- + private const val PRIME_STATUS = 512
- +
- + override fun execute(context: BytecodeContext) = UpdatePrimeStatusFingerprint.result?.let {
- + val setStatusIndex = it.scanResult.patternScanResult!!.startIndex
- +
- + it.mutableMethod.apply {
- + val statusRegister = getInstruction<OneRegisterInstruction>(setStatusIndex).registerA
- + replaceInstruction(setStatusIndex, "const/16 v$statusRegister, $PRIME_STATUS")
- + }
- +
- + return@let
- + } ?: throw UpdatePrimeStatusFingerprint.exception
- +}
- Index: src/main/kotlin/app/revanced/patches/nova/prime/fingerprints/UpdatePrimeStatusFingerprint.kt
- IDEA additional info:
- Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
- <+>UTF-8
- ===================================================================
- diff --git a/src/main/kotlin/app/revanced/patches/nova/prime/fingerprints/UpdatePrimeStatusFingerprint.kt b/src/main/kotlin/app/revanced/patches/nova/prime/fingerprints/UpdatePrimeStatusFingerprint.kt
- new file mode 100644
- --- /dev/null (revision f5261a20271a7d48995efd957b4bce777e008a24)
- +++ b/src/main/kotlin/app/revanced/patches/nova/prime/fingerprints/UpdatePrimeStatusFingerprint.kt (revision f5261a20271a7d48995efd957b4bce777e008a24)
- @@ -0,0 +1,9 @@
- +package app.revanced.patches.nova.prime.fingerprints
- +
- +import app.revanced.patcher.fingerprint.MethodFingerprint
- +import com.android.tools.smali.dexlib2.Opcode
- +
- +object UpdatePrimeStatusFingerprint : MethodFingerprint(
- + opcodes = listOf(Opcode.CONST_4), // Modify this to change the prime status.
- + strings = listOf("widget_reset_ids")
- +)
Advertisement
Add Comment
Please, Sign In to add comment