Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package crimera.patches.twitter.logging.responseLogging

import app.revanced.patcher.data.BytecodeContext
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
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 crimera.patches.twitter.misc.settings.SettingsPatch
import crimera.patches.twitter.misc.settings.fingerprints.SettingsStatusLoadFingerprint

object InpStreamFingerprint : MethodFingerprint(
returnType = "Ljava/io/InputStream",
customFingerprint = { methodDef, classDef ->
classDef.type.contains("fasterxml/jackson/core/") &&
methodDef.parameters.size == 2
},
)

@Patch(
name = "Log server response",
description = "Log json responses received from server",
dependencies = [SettingsPatch::class],
compatiblePackages = [CompatiblePackage("com.twitter.android")],
requiresIntegrations = true,
)
@Suppress("unused")
object RequestLogging : BytecodePatch(
setOf(SettingsStatusLoadFingerprint, InpStreamFingerprint),
) {
override fun execute(context: BytecodeContext) {
val result = InpStreamFingerprint.result ?: throw PatchException("InpStreamFingerprint is not found")

result.mutableMethod.addInstructions(
0,
"""
invoke-static {p1}, ${SettingsPatch.PATCHES_DESCRIPTOR}/loggers/ResponseLogger;->saveInputStream(Ljava/io/InputStream;)Ljava/io/InputStream;
move-result-object p1
""".trimIndent(),
)

SettingsStatusLoadFingerprint.enableSettings("serverResponseLogging")
SettingsStatusLoadFingerprint.enableSettings("serverResponseLoggingOverwriteFile")
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
package crimera.patches.twitter.timeline.hideCommunityBadge

import app.revanced.patcher.data.BytecodeContext
import app.revanced.patcher.extensions.InstructionExtensions.addInstructionsWithLabels
import app.revanced.patcher.extensions.InstructionExtensions.getInstructions
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.formats.Instruction22c
import crimera.patches.twitter.misc.settings.SettingsPatch
import crimera.patches.twitter.misc.settings.fingerprints.SettingsStatusLoadFingerprint
import crimera.patches.twitter.misc.shareMenu.nativeDownloader.extractDescriptors

object CommModelFingerprint : MethodFingerprint(
strings =
listOf(
"actionResults",
"role",
),
)

@Patch(
name = "Hide community badges",
description = "",
dependencies = [SettingsPatch::class],
compatiblePackages = [CompatiblePackage("com.twitter.android")],
requiresIntegrations = true,
)
@Suppress("unused")
object HideCommunityBadge : BytecodePatch(
setOf(SettingsStatusLoadFingerprint, CommModelFingerprint),
) {
override fun execute(context: BytecodeContext) {
val result = CommModelFingerprint.result ?: throw PatchException("CommModelFingerprint not found")

val method =
result.mutableMethod
val instructions = method.getInstructions()

val iputObj = instructions.last { it.opcode == Opcode.IPUT_OBJECT }
val iputObjIns = iputObj as Instruction22c
val ref = iputObjIns.reference.extractDescriptors()[1]
val reg = iputObjIns.registerA
val index = iputObj.location.index

method.addInstructionsWithLabels(
index,
"""
sget-boolean v0, ${SettingsPatch.PREF_DESCRIPTOR};->HIDE_COMM_BADGE:Z
if-eqz v0, :piko
sget-object v$reg, $ref->NON_MEMBER:$ref
""".trimIndent(),
ExternalLabel("piko", iputObj),
)
SettingsStatusLoadFingerprint.enableSettings("hideCommBadge")
}
}
8 changes: 8 additions & 0 deletions src/main/resources/twitter/settings/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,7 @@
<string name="piko_pref_hide_nudge_button_desc">Hides follow/subscribe/follow back buttons on posts</string>
<string name="piko_pref_hide_social_proof">Hide followed by context</string>
<string name="piko_pref_hide_social_proof_desc">Hides followed by context under profile</string>
<string name="piko_pref_hide_community_badge">Hide community badges</string>

<!-- Customization Settings -->
<string name="piko_title_customisation">Customization</string>
Expand All @@ -139,6 +140,13 @@
<string name="piko_pref_customisation_post_font_size">Post font size</string>
<string name="piko_pref_customisation_search_type_ahead">Search suggestions to hide</string>

<!-- Logging Settings -->
<string name="piko_title_logging">Logging</string>
<string name="piko_pref_server_response_logging">Log server response</string>
<string name="piko_pref_server_response_logging_desc">Log json responses received from the server in 'Download/Piko'</string>
<string name="piko_pref_server_response_logging_file_overwrite">Overwrite response log file</string>
<string name="piko_pref_server_response_logging_file_overwrite_desc">Clear existing response log data on launch</string>

<!-- Backup and Restore -->
<string name="piko_title_backup">Backup and restore</string>
<string name="piko_pref_export">Export %s</string>
Expand Down
Loading