fix(Reddit): some patches are broken in version 2023.41.0

This commit is contained in:
inotia00 2023-10-17 13:32:03 +09:00
parent a1e4b065d4
commit 7645aa9a07
8 changed files with 42 additions and 14 deletions

View File

@ -8,15 +8,21 @@ import app.revanced.patcher.patch.BytecodePatch
import app.revanced.patcher.patch.annotation.CompatiblePackage import app.revanced.patcher.patch.annotation.CompatiblePackage
import app.revanced.patcher.patch.annotation.Patch import app.revanced.patcher.patch.annotation.Patch
import app.revanced.patches.reddit.layout.place.fingerprints.HomePagerScreenFingerprint import app.revanced.patches.reddit.layout.place.fingerprints.HomePagerScreenFingerprint
import app.revanced.patches.reddit.utils.resourceid.SharedResourceIdPatch
import app.revanced.patches.reddit.utils.resourceid.SharedResourceIdPatch.ToolBarNavSearchCtaContainer
import app.revanced.patches.reddit.utils.settings.SettingsBytecodePatch.updateSettingsStatus import app.revanced.patches.reddit.utils.settings.SettingsBytecodePatch.updateSettingsStatus
import app.revanced.patches.reddit.utils.settings.SettingsPatch import app.revanced.patches.reddit.utils.settings.SettingsPatch
import app.revanced.util.bytecode.getStringIndex import app.revanced.util.bytecode.getWideLiteralIndex
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
@Patch( @Patch(
name = "Hide place button", name = "Hide place button",
description = "Hide r/place button in toolbar.", description = "Hide r/place button in toolbar.",
dependencies = [SettingsPatch::class], dependencies =
[
SettingsPatch::class,
SharedResourceIdPatch::class
],
compatiblePackages = [CompatiblePackage("com.reddit.frontpage")] compatiblePackages = [CompatiblePackage("com.reddit.frontpage")]
) )
@Suppress("unused") @Suppress("unused")
@ -32,7 +38,7 @@ object PlaceButtonPatch : BytecodePatch(
HomePagerScreenFingerprint.result?.let { HomePagerScreenFingerprint.result?.let {
it.mutableMethod.apply { it.mutableMethod.apply {
val targetIndex = val targetIndex =
getStringIndex("view.findViewById(Search\u2026nav_search_cta_container)") getWideLiteralIndex(ToolBarNavSearchCtaContainer) + 3
val targetRegister = val targetRegister =
getInstruction<OneRegisterInstruction>(targetIndex - 1).registerA getInstruction<OneRegisterInstruction>(targetIndex - 1).registerA

View File

@ -2,14 +2,16 @@ package app.revanced.patches.reddit.layout.place.fingerprints
import app.revanced.patcher.extensions.or import app.revanced.patcher.extensions.or
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
import app.revanced.patches.reddit.utils.resourceid.SharedResourceIdPatch.ToolBarNavSearchCtaContainer
import app.revanced.util.bytecode.isWideLiteralExists
import com.android.tools.smali.dexlib2.AccessFlags import com.android.tools.smali.dexlib2.AccessFlags
object HomePagerScreenFingerprint : MethodFingerprint( object HomePagerScreenFingerprint : MethodFingerprint(
returnType = "Landroid/view/View;", returnType = "Landroid/view/View;",
accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL,
parameters = listOf("Landroid/view/LayoutInflater;", "Landroid/view/ViewGroup;"), parameters = listOf("Landroid/view/LayoutInflater;", "Landroid/view/ViewGroup;"),
strings = listOf("view.findViewById(Search\u2026nav_search_cta_container)"),
customFingerprint = { methodDef, _ -> customFingerprint = { methodDef, _ ->
methodDef.definingClass.endsWith("/HomePagerScreen;") methodDef.definingClass.endsWith("/HomePagerScreen;")
&& methodDef.isWideLiteralExists(ToolBarNavSearchCtaContainer)
} }
) )

View File

@ -9,5 +9,8 @@ import com.android.tools.smali.dexlib2.AccessFlags
object ScreenshotTakenBannerFingerprint : MethodFingerprint( object ScreenshotTakenBannerFingerprint : MethodFingerprint(
returnType = "V", returnType = "V",
accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL,
customFingerprint = { methodDef, classDef -> methodDef.isWideLiteralExists(ScreenShotShareBanner) && classDef.sourceFile == "ScreenshotTakenBanner.kt" } customFingerprint = { methodDef, classDef ->
methodDef.isWideLiteralExists(ScreenShotShareBanner)
&& classDef.sourceFile == "ScreenshotTakenBanner.kt"
}
) )

View File

@ -5,9 +5,8 @@ import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
object ShareLinkFormatterFingerprint : MethodFingerprint( object ShareLinkFormatterFingerprint : MethodFingerprint(
returnType = "Ljava/lang/String;", returnType = "Ljava/lang/String;",
parameters = listOf("Ljava/lang/String;", "Ljava/util/Map;"), parameters = listOf("Ljava/lang/String;", "Ljava/util/Map;"),
strings = listOf( customFingerprint = { methodDef, classDef ->
"uri.getQueryParameters(name)", methodDef.definingClass.startsWith("Lcom/reddit/sharing/")
"uri.queryParameterNames", && classDef.sourceFile == "UrlUtil.kt"
"newUriBuilder.build().toString()" }
),
) )

View File

@ -5,11 +5,14 @@ import app.revanced.patcher.patch.ResourcePatch
import app.revanced.patcher.patch.annotation.Patch import app.revanced.patcher.patch.annotation.Patch
import app.revanced.patches.shared.patch.mapping.ResourceMappingPatch import app.revanced.patches.shared.patch.mapping.ResourceMappingPatch
import app.revanced.util.enum.ResourceType import app.revanced.util.enum.ResourceType
import app.revanced.util.enum.ResourceType.ID
import app.revanced.util.enum.ResourceType.STRING import app.revanced.util.enum.ResourceType.STRING
@Patch(dependencies = [ResourceMappingPatch::class]) @Patch(dependencies = [ResourceMappingPatch::class])
object SharedResourceIdPatch : ResourcePatch() { object SharedResourceIdPatch : ResourcePatch() {
internal var LabelAcknowledgements = -1L
internal var ScreenShotShareBanner = -1L internal var ScreenShotShareBanner = -1L
internal var ToolBarNavSearchCtaContainer = -1L
override fun execute(context: ResourceContext) { override fun execute(context: ResourceContext) {
@ -18,7 +21,9 @@ object SharedResourceIdPatch : ResourcePatch() {
.find { it.type == resourceType.value && it.name == resourceName }?.id .find { it.type == resourceType.value && it.name == resourceName }?.id
?: -1 ?: -1
LabelAcknowledgements = find(STRING, "label_acknowledgements")
ScreenShotShareBanner = find(STRING, "screenshot_share_banner_title") ScreenShotShareBanner = find(STRING, "screenshot_share_banner_title")
ToolBarNavSearchCtaContainer = find(ID, "toolbar_nav_search_cta_container")
} }
} }

View File

@ -6,13 +6,17 @@ import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
import app.revanced.patcher.patch.BytecodePatch import app.revanced.patcher.patch.BytecodePatch
import app.revanced.patcher.patch.annotation.Patch
import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod
import app.revanced.patches.reddit.utils.resourceid.SharedResourceIdPatch
import app.revanced.patches.reddit.utils.resourceid.SharedResourceIdPatch.LabelAcknowledgements
import app.revanced.patches.reddit.utils.settings.fingerprints.AcknowledgementsLabelBuilderFingerprint import app.revanced.patches.reddit.utils.settings.fingerprints.AcknowledgementsLabelBuilderFingerprint
import app.revanced.patches.reddit.utils.settings.fingerprints.OssLicensesMenuActivityOnCreateFingerprint import app.revanced.patches.reddit.utils.settings.fingerprints.OssLicensesMenuActivityOnCreateFingerprint
import app.revanced.patches.reddit.utils.settings.fingerprints.SettingsStatusLoadFingerprint import app.revanced.patches.reddit.utils.settings.fingerprints.SettingsStatusLoadFingerprint
import app.revanced.util.bytecode.getStringIndex import app.revanced.util.bytecode.getWideLiteralIndex
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
@Patch(dependencies = [SharedResourceIdPatch::class])
object SettingsBytecodePatch : BytecodePatch( object SettingsBytecodePatch : BytecodePatch(
setOf( setOf(
AcknowledgementsLabelBuilderFingerprint, AcknowledgementsLabelBuilderFingerprint,
@ -42,7 +46,7 @@ object SettingsBytecodePatch : BytecodePatch(
AcknowledgementsLabelBuilderFingerprint.result?.let { AcknowledgementsLabelBuilderFingerprint.result?.let {
it.mutableMethod.apply { it.mutableMethod.apply {
val insertIndex = val insertIndex =
getStringIndex("resources.getString(R.st\u2026g.label_acknowledgements)") getWideLiteralIndex(LabelAcknowledgements) + 3
val insertRegister = val insertRegister =
getInstruction<OneRegisterInstruction>(insertIndex - 1).registerA getInstruction<OneRegisterInstruction>(insertIndex - 1).registerA

View File

@ -11,7 +11,11 @@ import kotlin.io.path.exists
@Patch( @Patch(
name = "Settings", name = "Settings",
description = "Adds ReVanced settings to Reddit.", description = "Adds ReVanced settings to Reddit.",
dependencies = [IntegrationsPatch::class, SettingsBytecodePatch::class], dependencies =
[
IntegrationsPatch::class,
SettingsBytecodePatch::class
],
compatiblePackages = [CompatiblePackage("com.reddit.frontpage")], compatiblePackages = [CompatiblePackage("com.reddit.frontpage")],
requiresIntegrations = true, requiresIntegrations = true,
) )

View File

@ -2,11 +2,16 @@ package app.revanced.patches.reddit.utils.settings.fingerprints
import app.revanced.patcher.extensions.or import app.revanced.patcher.extensions.or
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
import app.revanced.patches.reddit.utils.resourceid.SharedResourceIdPatch.LabelAcknowledgements
import app.revanced.util.bytecode.isWideLiteralExists
import com.android.tools.smali.dexlib2.AccessFlags import com.android.tools.smali.dexlib2.AccessFlags
object AcknowledgementsLabelBuilderFingerprint : MethodFingerprint( object AcknowledgementsLabelBuilderFingerprint : MethodFingerprint(
returnType = "Z", returnType = "Z",
accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL,
parameters = listOf("Landroidx/preference/Preference;"), parameters = listOf("Landroidx/preference/Preference;"),
strings = listOf("resources.getString(R.st\u2026g.label_acknowledgements)") customFingerprint = { methodDef, _ ->
methodDef.definingClass.startsWith("Lcom/reddit/screen/settings/preferences/")
&& methodDef.isWideLiteralExists(LabelAcknowledgements)
}
) )