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.Patch
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.SettingsPatch
import app.revanced.util.bytecode.getStringIndex
import app.revanced.util.bytecode.getWideLiteralIndex
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
@Patch(
name = "Hide place button",
description = "Hide r/place button in toolbar.",
dependencies = [SettingsPatch::class],
dependencies =
[
SettingsPatch::class,
SharedResourceIdPatch::class
],
compatiblePackages = [CompatiblePackage("com.reddit.frontpage")]
)
@Suppress("unused")
@ -32,7 +38,7 @@ object PlaceButtonPatch : BytecodePatch(
HomePagerScreenFingerprint.result?.let {
it.mutableMethod.apply {
val targetIndex =
getStringIndex("view.findViewById(Search\u2026nav_search_cta_container)")
getWideLiteralIndex(ToolBarNavSearchCtaContainer) + 3
val targetRegister =
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.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
object HomePagerScreenFingerprint : MethodFingerprint(
returnType = "Landroid/view/View;",
accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL,
parameters = listOf("Landroid/view/LayoutInflater;", "Landroid/view/ViewGroup;"),
strings = listOf("view.findViewById(Search\u2026nav_search_cta_container)"),
customFingerprint = { methodDef, _ ->
methodDef.definingClass.endsWith("/HomePagerScreen;")
&& methodDef.isWideLiteralExists(ToolBarNavSearchCtaContainer)
}
)

View File

@ -9,5 +9,8 @@ import com.android.tools.smali.dexlib2.AccessFlags
object ScreenshotTakenBannerFingerprint : MethodFingerprint(
returnType = "V",
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(
returnType = "Ljava/lang/String;",
parameters = listOf("Ljava/lang/String;", "Ljava/util/Map;"),
strings = listOf(
"uri.getQueryParameters(name)",
"uri.queryParameterNames",
"newUriBuilder.build().toString()"
),
customFingerprint = { methodDef, classDef ->
methodDef.definingClass.startsWith("Lcom/reddit/sharing/")
&& classDef.sourceFile == "UrlUtil.kt"
}
)

View File

@ -5,11 +5,14 @@ import app.revanced.patcher.patch.ResourcePatch
import app.revanced.patcher.patch.annotation.Patch
import app.revanced.patches.shared.patch.mapping.ResourceMappingPatch
import app.revanced.util.enum.ResourceType
import app.revanced.util.enum.ResourceType.ID
import app.revanced.util.enum.ResourceType.STRING
@Patch(dependencies = [ResourceMappingPatch::class])
object SharedResourceIdPatch : ResourcePatch() {
internal var LabelAcknowledgements = -1L
internal var ScreenShotShareBanner = -1L
internal var ToolBarNavSearchCtaContainer = -1L
override fun execute(context: ResourceContext) {
@ -18,7 +21,9 @@ object SharedResourceIdPatch : ResourcePatch() {
.find { it.type == resourceType.value && it.name == resourceName }?.id
?: -1
LabelAcknowledgements = find(STRING, "label_acknowledgements")
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.getInstruction
import app.revanced.patcher.patch.BytecodePatch
import app.revanced.patcher.patch.annotation.Patch
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.OssLicensesMenuActivityOnCreateFingerprint
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
@Patch(dependencies = [SharedResourceIdPatch::class])
object SettingsBytecodePatch : BytecodePatch(
setOf(
AcknowledgementsLabelBuilderFingerprint,
@ -42,7 +46,7 @@ object SettingsBytecodePatch : BytecodePatch(
AcknowledgementsLabelBuilderFingerprint.result?.let {
it.mutableMethod.apply {
val insertIndex =
getStringIndex("resources.getString(R.st\u2026g.label_acknowledgements)")
getWideLiteralIndex(LabelAcknowledgements) + 3
val insertRegister =
getInstruction<OneRegisterInstruction>(insertIndex - 1).registerA

View File

@ -11,7 +11,11 @@ import kotlin.io.path.exists
@Patch(
name = "Settings",
description = "Adds ReVanced settings to Reddit.",
dependencies = [IntegrationsPatch::class, SettingsBytecodePatch::class],
dependencies =
[
IntegrationsPatch::class,
SettingsBytecodePatch::class
],
compatiblePackages = [CompatiblePackage("com.reddit.frontpage")],
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.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
object AcknowledgementsLabelBuilderFingerprint : MethodFingerprint(
returnType = "Z",
accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL,
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)
}
)