Guest User

feat(Nova Launcher): Add `Unlock Nova Prime` patch

a guest
Nov 24th, 2023
1,448
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Diff 3.30 KB | Source Code | 0 0
  1. Subject: [PATCH] feat(Nova Launcher): Add `Unlock Nova Prime` patch
  2. ---
  3. Index: src/main/kotlin/app/revanced/patches/nova/prime/UnlockPrimePatch.kt
  4. IDEA additional info:
  5. Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
  6. <+>UTF-8
  7. ===================================================================
  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
  9. new file mode 100644
  10. --- /dev/null   (revision f5261a20271a7d48995efd957b4bce777e008a24)
  11. +++ b/src/main/kotlin/app/revanced/patches/nova/prime/UnlockPrimePatch.kt   (revision f5261a20271a7d48995efd957b4bce777e008a24)
  12. @@ -0,0 +1,35 @@
  13. +package app.revanced.patches.nova.prime
  14. +
  15. +import app.revanced.extensions.exception
  16. +import app.revanced.patcher.data.BytecodeContext
  17. +import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
  18. +import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction
  19. +import app.revanced.patcher.patch.BytecodePatch
  20. +import app.revanced.patcher.patch.annotation.CompatiblePackage
  21. +import app.revanced.patcher.patch.annotation.Patch
  22. +import app.revanced.patches.nova.prime.fingerprints.UpdatePrimeStatusFingerprint
  23. +import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
  24. +
  25. +@Patch(
  26. +    name = "Unlock Nova Prime",
  27. +    compatiblePackages = [CompatiblePackage("com.teslacoilsw.launcher")]
  28. +)
  29. +@Suppress("unused")
  30. +object UnlockPrimePatch : BytecodePatch(
  31. +    setOf(UpdatePrimeStatusFingerprint)
  32. +) {
  33. +    // Any value except 0 unlocks Nova Prime, but 512 is needed for a protection mechanism
  34. +    // otherwise the preferences will be reset if the status on disk changes after a restart.
  35. +    private const val PRIME_STATUS = 512
  36. +
  37. +    override fun execute(context: BytecodeContext) = UpdatePrimeStatusFingerprint.result?.let {
  38. +        val setStatusIndex = it.scanResult.patternScanResult!!.startIndex
  39. +
  40. +        it.mutableMethod.apply {
  41. +            val statusRegister = getInstruction<OneRegisterInstruction>(setStatusIndex).registerA
  42. +            replaceInstruction(setStatusIndex, "const/16 v$statusRegister, $PRIME_STATUS")
  43. +        }
  44. +
  45. +        return@let
  46. +    } ?: throw UpdatePrimeStatusFingerprint.exception
  47. +}
  48. Index: src/main/kotlin/app/revanced/patches/nova/prime/fingerprints/UpdatePrimeStatusFingerprint.kt
  49. IDEA additional info:
  50. Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
  51. <+>UTF-8
  52. ===================================================================
  53. 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
  54. new file mode 100644
  55. --- /dev/null   (revision f5261a20271a7d48995efd957b4bce777e008a24)
  56. +++ b/src/main/kotlin/app/revanced/patches/nova/prime/fingerprints/UpdatePrimeStatusFingerprint.kt  (revision f5261a20271a7d48995efd957b4bce777e008a24)
  57. @@ -0,0 +1,9 @@
  58. +package app.revanced.patches.nova.prime.fingerprints
  59. +
  60. +import app.revanced.patcher.fingerprint.MethodFingerprint
  61. +import com.android.tools.smali.dexlib2.Opcode
  62. +
  63. +object UpdatePrimeStatusFingerprint : MethodFingerprint(
  64. +    opcodes = listOf(Opcode.CONST_4), // Modify this to change the prime status.
  65. +    strings = listOf("widget_reset_ids")
  66. +)
  67.  
Advertisement
Add Comment
Please, Sign In to add comment