diff --git a/src/main/kotlin/crimera/patches/twitter/misc/customize/sidebar/CustomiseSideBarPatch.kt b/src/main/kotlin/crimera/patches/twitter/misc/customize/sidebar/CustomiseSideBarPatch.kt index 54358f90..4f093ce7 100644 --- a/src/main/kotlin/crimera/patches/twitter/misc/customize/sidebar/CustomiseSideBarPatch.kt +++ b/src/main/kotlin/crimera/patches/twitter/misc/customize/sidebar/CustomiseSideBarPatch.kt @@ -16,13 +16,15 @@ import crimera.patches.twitter.misc.settings.fingerprints.SettingsStatusLoadFing object CustomiseSideBarFingerprint : MethodFingerprint( returnType = "Ljava/lang/Object", - strings = listOf( - "android_global_navigation_top_level_monetization_enabled", - ), + strings = + listOf( + "android_global_navigation_top_level_monetization_enabled", + ), customFingerprint = { it, _ -> it.name == "invoke" - } + }, ) + @Patch( name = "Customize side bar items", dependencies = [SettingsPatch::class], @@ -30,26 +32,29 @@ object CustomiseSideBarFingerprint : MethodFingerprint( ) @Suppress("unused") object CustomiseSideBarPatch : BytecodePatch( - setOf(CustomiseSideBarFingerprint,SettingsStatusLoadFingerprint) -){ + setOf(CustomiseSideBarFingerprint, SettingsStatusLoadFingerprint), +) { override fun execute(context: BytecodeContext) { - val result = CustomiseSideBarFingerprint.result - ?: throw PatchException("CustomiseSideBarFingerprint not found") + val result = + CustomiseSideBarFingerprint.result + ?: throw PatchException("CustomiseSideBarFingerprint not found") val method = result.mutableMethod val instructions = method.getInstructions() - val return_obj = instructions.last { it.opcode == Opcode.RETURN_OBJECT }.location.index + var filledNewArrIndex = instructions.last { it.opcode == Opcode.FILLED_NEW_ARRAY_RANGE }.location.index + val return_obj = instructions.first { it.opcode == Opcode.RETURN_OBJECT && it.location.index > filledNewArrIndex }.location.index val r0 = method.getInstruction(return_obj).registerA - val METHOD = """ + val METHOD = + """ invoke-static {v$r0}, ${SettingsPatch.CUSTOMISE_DESCRIPTOR};->sideBar(Ljava/util/List;)Ljava/util/List; move-result-object v$r0 - """.trimIndent() + """.trimIndent() - method.addInstructionsWithLabels(return_obj,METHOD) + method.addInstructionsWithLabels(return_obj, METHOD) SettingsStatusLoadFingerprint.enableSettings("sideBarCustomisation") } diff --git a/src/main/kotlin/crimera/patches/twitter/misc/settings/SettingsPatch.kt b/src/main/kotlin/crimera/patches/twitter/misc/settings/SettingsPatch.kt index c3073f85..4bbdc653 100644 --- a/src/main/kotlin/crimera/patches/twitter/misc/settings/SettingsPatch.kt +++ b/src/main/kotlin/crimera/patches/twitter/misc/settings/SettingsPatch.kt @@ -21,11 +21,12 @@ import crimera.patches.twitter.misc.integrations.IntegrationsPatch import crimera.patches.twitter.misc.settings.fingerprints.AuthorizeAppActivity import crimera.patches.twitter.misc.settings.fingerprints.SettingsFingerprint import crimera.patches.twitter.misc.settings.fingerprints.UrlInterpreterActivity +import crimera.patches.twitter.premium.redirectBMNavBar.RedirectBMTab @Patch( description = "Adds settings", requiresIntegrations = true, - dependencies = [SettingsResourcePatch::class, IntegrationsPatch::class], + dependencies = [SettingsResourcePatch::class, IntegrationsPatch::class, RedirectBMTab::class], compatiblePackages = [CompatiblePackage("com.twitter.android")], ) object SettingsPatch : BytecodePatch( @@ -78,14 +79,18 @@ object SettingsPatch : BytecodePatch( .first { it.opcode == Opcode.CONST_4 } .location.index - val igetObjLoc = prefCLickedMethod.getInstructions().first { it.opcode == Opcode.IGET_OBJECT }.location.index + val igetObjLoc = + prefCLickedMethod + .getInstructions() + .first { it.opcode == Opcode.IGET_OBJECT } + .location.index val objFieldName = (prefCLickedMethod.getInstruction(igetObjLoc).reference as FieldReference).name prefCLickedMethod.removeInstruction(igetObjLoc) prefCLickedMethod.addInstructionsWithLabels( 0, """ - iget-object p1, p1, Landroidx/preference/Preference;->${objFieldName}:Ljava/lang/String; + iget-object p1, p1, Landroidx/preference/Preference;->$objFieldName:Ljava/lang/String; const-string v1, "pref_mod" invoke-virtual {p1, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z move-result v2 diff --git a/src/main/kotlin/crimera/patches/twitter/premium/customAppIcon/CustomAppIconPatch.kt b/src/main/kotlin/crimera/patches/twitter/premium/customAppIcon/CustomAppIconPatch.kt index 731a5611..3cca3594 100644 --- a/src/main/kotlin/crimera/patches/twitter/premium/customAppIcon/CustomAppIconPatch.kt +++ b/src/main/kotlin/crimera/patches/twitter/premium/customAppIcon/CustomAppIconPatch.kt @@ -19,11 +19,12 @@ object CustomiseAppIconFingerprint : MethodFingerprint( listOf( "current_app_icon_id", ), + returnType = "V", ) @Patch( name = "Enable app icons", - dependencies = [SettingsPatch::class, RedirectBMTab::class], + dependencies = [SettingsPatch::class], compatiblePackages = [CompatiblePackage("com.twitter.android")], use = true, requiresIntegrations = true, diff --git a/src/main/kotlin/crimera/patches/twitter/premium/customAppIcon/RedirectBMTab.kt b/src/main/kotlin/crimera/patches/twitter/premium/redirectBMNavBar/RedirectBMTab.kt similarity index 67% rename from src/main/kotlin/crimera/patches/twitter/premium/customAppIcon/RedirectBMTab.kt rename to src/main/kotlin/crimera/patches/twitter/premium/redirectBMNavBar/RedirectBMTab.kt index 703e35e0..6862a021 100644 --- a/src/main/kotlin/crimera/patches/twitter/premium/customAppIcon/RedirectBMTab.kt +++ b/src/main/kotlin/crimera/patches/twitter/premium/redirectBMNavBar/RedirectBMTab.kt @@ -1,4 +1,4 @@ -package crimera.patches.twitter.premium.customAppIcon +package crimera.patches.twitter.premium.redirectBMNavBar import app.revanced.patcher.data.BytecodeContext import app.revanced.patcher.extensions.InstructionExtensions.addInstructionsWithLabels @@ -10,20 +10,20 @@ import app.revanced.patcher.util.smali.ExternalLabel import com.android.tools.smali.dexlib2.Opcode import crimera.patches.twitter.misc.settings.SettingsPatch.PREF_DESCRIPTOR - -//thanks to @Ouxyl -object TabLayoutFingerprint:MethodFingerprint( - customFingerprint = {it,_-> +// thanks to @Ouxyl +object TabLayoutFingerprint : MethodFingerprint( + customFingerprint = { it, _ -> it.definingClass == "Lcom/google/android/material/tabs/TabLayout;" && it.name == "q" - } + }, ) -object RedirectBMTab:BytecodePatch( - setOf(TabLayoutFingerprint) +object RedirectBMTab : BytecodePatch( + setOf(TabLayoutFingerprint), ) { override fun execute(context: BytecodeContext) { - val result = TabLayoutFingerprint.result - ?:throw PatchException("TabLayoutFingerprint not found") + val result = + TabLayoutFingerprint.result + ?: throw PatchException("TabLayoutFingerprint not found") val method = result.mutableMethod val instructions = method.getInstructions() @@ -32,15 +32,17 @@ object RedirectBMTab:BytecodePatch( val M = "invoke-static {p1}, ${PREF_DESCRIPTOR};->redirect(Lcom/google/android/material/tabs/TabLayout\$g;)Z" - method.addInstructionsWithLabels(0,""" + method.addInstructionsWithLabels( + 0, + """ $M move-result v0 if-eqz v0, :cond_1212 return-void - """.trimIndent(), - ExternalLabel("cond_1212", first_line) + """.trimIndent(), + ExternalLabel("cond_1212", first_line), ) - //end + // end } -} \ No newline at end of file +} diff --git a/src/main/resources/twitter/settings/values/arrays.xml b/src/main/resources/twitter/settings/values/arrays.xml index eb338819..7e985b63 100644 --- a/src/main/resources/twitter/settings/values/arrays.xml +++ b/src/main/resources/twitter/settings/values/arrays.xml @@ -37,20 +37,25 @@ @string/drawer_profile_title @string/subscriptions_drawer_menu_title @string/grok_tab_title + @string/drawer_money_title + @string/x_chat_tab_title @string/drawer_direct_messages_title @string/drawer_communities_title + @string/video_tab_title @string/bookmarks_title + @string/drawer_jobs_title @string/drawer_lists @string/news_top_articles_title @string/drawer_birdwatch_title @string/spaces_grid_tab + @string/video_chat_conference @string/profile_followers @string/monetization_drawer_menu_title + @string/subscriptions_drawer_menu_group_analytics @string/drawer_professional_tools_header_title + @string/drawer_settings_title @string/drawer_media_transparency_title @string/drawer_imprint_title - @string/drawer_settings_title - @string/drawer_jobs_title diff --git a/src/main/resources/twitter/settings/values/strings.xml b/src/main/resources/twitter/settings/values/strings.xml index 1aa5de01..fd636085 100644 --- a/src/main/resources/twitter/settings/values/strings.xml +++ b/src/main/resources/twitter/settings/values/strings.xml @@ -177,4 +177,6 @@ Events Ordered section + Open supported links +