From 04138a043be5f5b5ac927783e6b65ed2281b6a39 Mon Sep 17 00:00:00 2001 From: JingMatrix Date: Thu, 21 Mar 2024 14:06:27 +0100 Subject: [PATCH] Fix support for Kiwi browser 1. Fix finding field mId of TabImpl 2. Fix finding method createAppMenuPropertiesDelegate 2. Fix finding method prepareMenu However, it seems that Developer Options menu is removed from the browser --- .../main/java/org/matrix/chromext/hook/PageMenu.kt | 8 +++++++- .../main/java/org/matrix/chromext/proxy/UserScript.kt | 11 +++++++++-- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/org/matrix/chromext/hook/PageMenu.kt b/app/src/main/java/org/matrix/chromext/hook/PageMenu.kt index 2b710e9..10d7d76 100644 --- a/app/src/main/java/org/matrix/chromext/hook/PageMenu.kt +++ b/app/src/main/java/org/matrix/chromext/hook/PageMenu.kt @@ -1,6 +1,7 @@ package org.matrix.chromext.hook import android.content.Context +import android.os.Bundle import android.os.Handler import android.util.DisplayMetrics import android.view.Menu @@ -104,6 +105,10 @@ object PageMenuHook : BaseHook() { findMethod(proxy.chromeTabbedActivity) { parameterTypes.size == 0 && returnType.declaredMethods.size >= 6 && + (returnType.declaredMethods.find { + // Bundle getBundleForMenuItem(int itemId); + it.returnType == Bundle::class.java && it.parameterTypes.size == 1 + } != null) && (returnType.declaredFields.size == 0 || returnType.declaredFields.find { it.type == Context::class.java } != null) && (returnType.isInterface() || Modifier.isAbstract(returnType.modifiers)) @@ -150,7 +155,8 @@ object PageMenuHook : BaseHook() { findMethod(appMenuPropertiesDelegateImpl, true) { parameterTypes.size == 2 && parameterTypes.first() == Menu::class.java && - returnType == Void.TYPE + returnType == Void.TYPE && + !Modifier.isStatic(modifiers) } // public void prepareMenu(Menu menu, AppMenuHandler handler) .hookAfter inflate@{ diff --git a/app/src/main/java/org/matrix/chromext/proxy/UserScript.kt b/app/src/main/java/org/matrix/chromext/proxy/UserScript.kt index 50e1bdc..7edc5ba 100644 --- a/app/src/main/java/org/matrix/chromext/proxy/UserScript.kt +++ b/app/src/main/java/org/matrix/chromext/proxy/UserScript.kt @@ -1,6 +1,7 @@ package org.matrix.chromext.proxy import android.net.Uri +import android.view.ContextThemeWrapper import org.matrix.chromext.Chrome import org.matrix.chromext.script.ScriptDbManager import org.matrix.chromext.utils.Log @@ -51,8 +52,14 @@ object UserScriptProxy { val target = find { it.name == "mId" } if (target == null) { val profile = Chrome.load("org.chromium.chrome.browser.profiles.Profile") - val startIndex = indexOfFirst { it.type == gURL } - val endIndex = indexOfFirst { it.type == profile } + val windowAndroid = Chrome.load("org.chromium.ui.base.WindowAndroid") + var startIndex = indexOfFirst { it.type == gURL } + if (startIndex == -1) startIndex = 0 + val endIndex = indexOfFirst { + it.type == profile || + it.type == ContextThemeWrapper::class.java || + it.type == windowAndroid + } slice(startIndex..endIndex).findLast { it.type == Int::class.java }!! } else target }