Skip to content

Commit

Permalink
fix: Opening mod settings with root installation results in crash
Browse files Browse the repository at this point in the history
  • Loading branch information
crimera authored Apr 21, 2024
2 parents a6444be + 9b06ba1 commit 8161644
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 32 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import app.revanced.patches.shared.misc.integrations.fingerprint.IntegrationsUti
import com.android.tools.smali.dexlib2.Opcode
import com.android.tools.smali.dexlib2.builder.instruction.BuilderInstruction11x
import crimera.patches.twitter.misc.integrations.IntegrationsPatch
import crimera.patches.twitter.misc.settings.fingerprints.AuthorizeAppActivity
import crimera.patches.twitter.misc.settings.fingerprints.SettingsFingerprint

@Patch(
Expand All @@ -24,18 +25,22 @@ import crimera.patches.twitter.misc.settings.fingerprints.SettingsFingerprint
compatiblePackages = [CompatiblePackage("com.twitter.android")],
)
object SettingsPatch : BytecodePatch(
setOf(SettingsFingerprint,IntegrationsUtilsFingerprint)
setOf(SettingsFingerprint, AuthorizeAppActivity, IntegrationsUtilsFingerprint)
) {
private const val INTEGRATIONS_PACKAGE = "Lapp/revanced/integrations/twitter"
private const val UTILS_DESCRIPTOR = "$INTEGRATIONS_PACKAGE/Utils"
private const val ACTIVITY_HOOK_CLASS = "Lapp/revanced/integrations/twitter/settings/ActivityHook;"
private const val ADD_PREF_DESCRIPTOR =
"$UTILS_DESCRIPTOR;->addPref([Ljava/lang/String;Ljava/lang/String;)[Ljava/lang/String;"

const val PREF_DESCRIPTOR = "$INTEGRATIONS_PACKAGE/Pref"
const val PATCHES_DESCRIPTOR = "$INTEGRATIONS_PACKAGE/patches"
const val CUSTOMISE_DESCRIPTOR = "$PATCHES_DESCRIPTOR/customise"
private const val ADD_PREF_DESCRIPTOR = "$UTILS_DESCRIPTOR;->addPref([Ljava/lang/String;Ljava/lang/String;)[Ljava/lang/String;"
const val SSTS_DESCRIPTOR = "invoke-static {}, $INTEGRATIONS_PACKAGE/settings/SettingsStatus;"
const val FSTS_DESCRIPTOR = "invoke-static {}, $INTEGRATIONS_PACKAGE/patches/FeatureSwitchPatch;"

private const val START_ACTIVITY_DESCRIPTOR =
"invoke-static {}, $UTILS_DESCRIPTOR;->startSettingsActivity()V"
"invoke-static {}, $ACTIVITY_HOOK_CLASS->startSettingsActivity()V"

override fun execute(context: BytecodeContext) {
val result = SettingsFingerprint.result
Expand Down Expand Up @@ -73,11 +78,22 @@ object SettingsPatch : BytecodePatch(
ExternalLabel("cont", prefCLickedMethod.getInstruction(constIndex))
)

AuthorizeAppActivity.result?.apply {
mutableMethod.addInstructionsWithLabels(
1, """
invoke-static {p0}, $ACTIVITY_HOOK_CLASS->create(Landroid/app/Activity;)Z
move-result v0
if-nez v0, :no_piko_settings_init
""".trimIndent(),
ExternalLabel(
"no_piko_settings_init",
mutableMethod.getInstructions().first { it.opcode == Opcode.RETURN_VOID })
)
} ?: throw PatchException("ProxySettingsActivityFingerprint not found")

IntegrationsUtilsFingerprint.result!!.mutableMethod.addInstruction(
0,
"${SSTS_DESCRIPTOR}->load()V"
)

//end
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -30,31 +30,6 @@ object SettingsResourcePatch: ResourcePatch() {
parent.appendChild(prefMod)
}

context.xmlEditor["AndroidManifest.xml"].use {
val applicationNode = it.file.getElementsByTagName("application").item(0)

val modActivity = it.file.createElement("activity").apply {
setAttribute("android:label", "@strings/piko_title_settings")
setAttribute("android:name", "app.revanced.integrations.twitter.settings.SettingsActivity")
setAttribute("android:excludeFromRecents", "true")
}
applicationNode.appendChild(modActivity)

val bkActivity = it.file.createElement("activity").apply {
setAttribute("android:label", "@strings/piko_pref_export")
setAttribute("android:name", "app.revanced.integrations.twitter.settings.BackupPrefActivity")
setAttribute("android:excludeFromRecents", "true")
}
applicationNode.appendChild(bkActivity)

val resActivity = it.file.createElement("activity").apply {
setAttribute("android:label", "@strings/piko_pref_import")
setAttribute("android:name", "app.revanced.integrations.twitter.settings.RestorePrefActivity")
setAttribute("android:excludeFromRecents", "true")
}
applicationNode.appendChild(resActivity)
}

//credits @inotia00
context.copyXmlNode("twitter/settings", "values/strings.xml", "resources")
context.copyXmlNode("twitter/settings", "values/arrays.xml", "resources")
Expand Down Expand Up @@ -84,7 +59,5 @@ object SettingsResourcePatch: ResourcePatch() {
context.copyResources("twitter/settings", ResourceGroup(it, "strings.xml"))
}
}

//end
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package crimera.patches.twitter.misc.settings.fingerprints

import app.revanced.patcher.fingerprint.MethodFingerprint

object AuthorizeAppActivity: MethodFingerprint(
customFingerprint = { method, _ ->
method.definingClass == "Lcom/twitter/android/AuthorizeAppActivity;" &&
method.name == "onCreate"
}
)

0 comments on commit 8161644

Please sign in to comment.