Skip to content

Commit

Permalink
feat(Twitter): Added Customize Navigation Bar items patch
Browse files Browse the repository at this point in the history
  • Loading branch information
Swakshan committed May 13, 2024
1 parent f807dcc commit 9c6f59c
Show file tree
Hide file tree
Showing 3 changed files with 76 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
package crimera.patches.twitter.misc.customize.navbar

import app.revanced.patcher.data.BytecodeContext
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
import app.revanced.patcher.extensions.InstructionExtensions.addInstructionsWithLabels
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
import app.revanced.patcher.extensions.InstructionExtensions.getInstructions
import app.revanced.patcher.extensions.InstructionExtensions.removeInstruction
import app.revanced.patcher.fingerprint.MethodFingerprint
import app.revanced.patcher.patch.BytecodePatch
import app.revanced.patcher.patch.PatchException
import app.revanced.patcher.patch.annotation.CompatiblePackage
import app.revanced.patcher.patch.annotation.Patch
import app.revanced.patcher.util.smali.ExternalLabel
import com.android.tools.smali.dexlib2.Opcode
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
import crimera.patches.twitter.misc.settings.SettingsPatch
import crimera.patches.twitter.misc.settings.fingerprints.SettingsStatusLoadFingerprint

object CustomiseNavBarFingerprint:MethodFingerprint(
returnType = "V",
strings = listOf(
"tabCustomizationPreferences",
"communitiesUtils",
"exploreImmersiveFeatures",
"subscriptionsFeatures",
)
)

@Patch(
name = "Customize Navigation Bar items",
dependencies = [SettingsPatch::class],
compatiblePackages = [CompatiblePackage("com.twitter.android")],
use = false,
requiresIntegrations = true
)
@Suppress("unused")
object CustomiseNavBarPatch:BytecodePatch(
setOf(CustomiseNavBarFingerprint,SettingsStatusLoadFingerprint)
){
override fun execute(context: BytecodeContext) {
val results = CustomiseNavBarFingerprint.result
?:throw PatchException("CustomiseNavBarFingerprint not found")

val method = results.mutableClass.methods.last { it.returnType == "Ljava/util/List;" }
val instructions = method.getInstructions()

val returnObj_loc = instructions.last { it.opcode == Opcode.RETURN_OBJECT }.location.index
val r0 = method.getInstruction<OneRegisterInstruction>(returnObj_loc).registerA

val METHOD = """
invoke-static {v$r0}, ${SettingsPatch.CUSTOMISE_DESCRIPTOR}/NavBar;->navBar(Ljava/util/List;)Ljava/util/List;
move-result-object v$r0
""".trimIndent()

method.addInstructions(returnObj_loc,METHOD)

SettingsStatusLoadFingerprint.enableSettings("navBarCustomisation")
//end
}
}
14 changes: 14 additions & 0 deletions src/main/resources/twitter/settings/values/arrays.xml
Original file line number Diff line number Diff line change
Expand Up @@ -42,4 +42,18 @@
<item>@string/drawer_media_transparency_title</item>
<item>@string/drawer_imprint_title</item>
</string-array>

<string-array name="piko_array_navbar">
<item>@string/tab_home_title</item>
<item>@string/tab_explore_title</item>
<item>@string/spaces_grid_tab</item>
<item>@string/tab_communities</item>
<item>@string/notifications_grid_tab</item>
<item>@string/people_discovery_title</item>
<item>@string/drawer_birdwatch_title</item>
<item>@string/bookmarks_title</item>
<item>@string/drawer_direct_messages_title</item>
<item>@string/grok_tab_title</item>
<item>@string/product_media_label</item>
</string-array>
</resources>
1 change: 1 addition & 0 deletions src/main/resources/twitter/settings/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@
<string name="piko_pref_customisation_timelinetabs_following">Hide \"Following\"</string>
<string name="piko_pref_customisation_timelinetabs_both">Show both</string>
<string name="piko_pref_customisation_sidebartabs">Side bar items to hide</string>
<string name="piko_pref_customisation_navbartabs">Navigation bar items to hide</string>

<string name="piko_title_backup">Backup and restore</string>
<string name="piko_pref_export">Export preferences</string>
Expand Down

0 comments on commit 9c6f59c

Please sign in to comment.