diff --git a/extensions/messenger/src/main/java/app/revanced/extension/messenger/metaai/RemoveMetaAIPatch.java b/extensions/messenger/src/main/java/app/revanced/extension/messenger/metaai/RemoveMetaAIPatch.java index 94684f687..92c27eb99 100644 --- a/extensions/messenger/src/main/java/app/revanced/extension/messenger/metaai/RemoveMetaAIPatch.java +++ b/extensions/messenger/src/main/java/app/revanced/extension/messenger/metaai/RemoveMetaAIPatch.java @@ -2,13 +2,15 @@ package app.revanced.extension.messenger.metaai; @SuppressWarnings("unused") public class RemoveMetaAIPatch { - public static boolean overrideConfigBool(long id, boolean value) { - // It seems like all configs starting with 363219 are related to Meta AI. - // A list of specific ones that need disabling would probably be better, - // but these config numbers seem to change slightly with each update. - // These first 6 digits don't though. - if (Long.toString(id).startsWith("363219")) + public static boolean overrideBooleanFlag(long id, boolean value) { + // This catches all flag IDs related to Meta AI. + // The IDs change slightly with every update, + // so to work around this, IDs from different versions were compared + // to find what they have in common, which turned out to be those first bits. + // TODO: Find the specific flags that we care about and patch the code they control instead. + if ((id & 0x7FFFFFC000000000L) == 0x810A8000000000L) { return false; + } return value; } diff --git a/patches/api/patches.api b/patches/api/patches.api index fd9424c7b..ba28dbbfa 100644 --- a/patches/api/patches.api +++ b/patches/api/patches.api @@ -292,6 +292,10 @@ public final class app/revanced/patches/messenger/inputfield/DisableTypingIndica public static final fun getDisableTypingIndicatorPatch ()Lapp/revanced/patcher/patch/BytecodePatch; } +public final class app/revanced/patches/messenger/layout/HideFacebookButtonPatchKt { + public static final fun getHideFacebookButtonPatch ()Lapp/revanced/patcher/patch/BytecodePatch; +} + public final class app/revanced/patches/messenger/metaai/RemoveMetaAIPatchKt { public static final fun getRemoveMetaAIPatch ()Lapp/revanced/patcher/patch/BytecodePatch; } diff --git a/patches/src/main/kotlin/app/revanced/patches/messenger/layout/Fingerprints.kt b/patches/src/main/kotlin/app/revanced/patches/messenger/layout/Fingerprints.kt new file mode 100644 index 000000000..b84a0c7e8 --- /dev/null +++ b/patches/src/main/kotlin/app/revanced/patches/messenger/layout/Fingerprints.kt @@ -0,0 +1,10 @@ +package app.revanced.patches.messenger.layout + +import app.revanced.patcher.fingerprint + +internal val isFacebookButtonEnabledFingerprint = fingerprint { + parameters() + returns("Z") + strings("com.facebook.messaging.inbox.tab.plugins.core.tabtoolbarbutton." + + "facebookbutton.facebooktoolbarbutton.FacebookButtonTabButtonImplementation") +} diff --git a/patches/src/main/kotlin/app/revanced/patches/messenger/layout/HideFacebookButtonPatch.kt b/patches/src/main/kotlin/app/revanced/patches/messenger/layout/HideFacebookButtonPatch.kt new file mode 100644 index 000000000..9e003d871 --- /dev/null +++ b/patches/src/main/kotlin/app/revanced/patches/messenger/layout/HideFacebookButtonPatch.kt @@ -0,0 +1,16 @@ +package app.revanced.patches.messenger.layout + +import app.revanced.patcher.patch.bytecodePatch +import app.revanced.util.returnEarly + +@Suppress("unused") +val hideFacebookButtonPatch = bytecodePatch( + name = "Hide Facebook button", + description = "Hides the Facebook button in the top toolbar." +) { + compatibleWith("com.facebook.orca") + + execute { + isFacebookButtonEnabledFingerprint.method.returnEarly(false) + } +} diff --git a/patches/src/main/kotlin/app/revanced/patches/messenger/metaai/Fingerprints.kt b/patches/src/main/kotlin/app/revanced/patches/messenger/metaai/Fingerprints.kt index 80b94bf1a..3de83f775 100644 --- a/patches/src/main/kotlin/app/revanced/patches/messenger/metaai/Fingerprints.kt +++ b/patches/src/main/kotlin/app/revanced/patches/messenger/metaai/Fingerprints.kt @@ -6,9 +6,8 @@ import app.revanced.patcher.fingerprint internal val getMobileConfigBoolFingerprint = fingerprint { parameters("J") returns("Z") - opcodes(Opcode.RETURN) - custom { method, classDef -> - method.implementation ?: return@custom false // unsure if this is necessary + opcodes(Opcode.RETURN) + custom { _, classDef -> classDef.interfaces.contains("Lcom/facebook/mobileconfig/factory/MobileConfigUnsafeContext;") } -} \ No newline at end of file +} diff --git a/patches/src/main/kotlin/app/revanced/patches/messenger/metaai/RemoveMetaAIPatch.kt b/patches/src/main/kotlin/app/revanced/patches/messenger/metaai/RemoveMetaAIPatch.kt index e669ca2d8..1cc0b6a95 100644 --- a/patches/src/main/kotlin/app/revanced/patches/messenger/metaai/RemoveMetaAIPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/messenger/metaai/RemoveMetaAIPatch.kt @@ -25,10 +25,10 @@ val removeMetaAIPatch = bytecodePatch( addInstructions( returnIndex, """ - invoke-static { p1, p2, v$returnRegister }, $EXTENSION_CLASS_DESCRIPTOR->overrideConfigBool(JZ)Z + invoke-static { p1, p2, v$returnRegister }, $EXTENSION_CLASS_DESCRIPTOR->overrideBooleanFlag(JZ)Z move-result v$returnRegister """ ) } } -} \ No newline at end of file +} diff --git a/patches/src/main/kotlin/app/revanced/patches/messenger/misc/extension/ExtensionPatch.kt b/patches/src/main/kotlin/app/revanced/patches/messenger/misc/extension/ExtensionPatch.kt index 0de5210ee..ed502e772 100644 --- a/patches/src/main/kotlin/app/revanced/patches/messenger/misc/extension/ExtensionPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/messenger/misc/extension/ExtensionPatch.kt @@ -2,4 +2,4 @@ package app.revanced.patches.messenger.misc.extension import app.revanced.patches.shared.misc.extension.sharedExtensionPatch -val sharedExtensionPatch = sharedExtensionPatch("messenger", mainActivityOnCreateHook) \ No newline at end of file +val sharedExtensionPatch = sharedExtensionPatch("messenger", mainActivityOnCreateHook)