diff --git a/.gitignore b/.gitignore index 02f2d85a..5b8911d1 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,3 @@ /build .gradle -smali +apktool diff --git a/app/src/main/java/org/matrix/chromext/hook/Menu.kt b/app/src/main/java/org/matrix/chromext/hook/Menu.kt index b394f2e0..d17c2628 100644 --- a/app/src/main/java/org/matrix/chromext/hook/Menu.kt +++ b/app/src/main/java/org/matrix/chromext/hook/Menu.kt @@ -39,7 +39,7 @@ object readerMode { val mDistillerUrl = readerModeManager!!.getDeclaredFields().filter { it.type == UserScriptProxy.gURL }.last()!! val activateReaderMode = - // This is purely luck, there are other methods with the same signatures + // There exist other methods with the same signatures findMethod(readerModeManager!!) { getParameterTypes().size == 0 && getReturnType() == Void.TYPE } @@ -97,7 +97,7 @@ object MenuHook : BaseHook() { pageInfoController!!.invokeMethod() { name == "destroy" } } } - (proxy.mRowWrapper.get(it.thisObject) as LinearLayout).addView(erudaRow) + (proxy.mRowWrapper!!.get(it.thisObject) as LinearLayout).addView(erudaRow) } } @@ -226,14 +226,21 @@ object MenuHook : BaseHook() { var findReaderHook: Unhook? = null findReaderHook = - proxy.emptyTabObserver.getDeclaredConstructors()[0].hookAfter { - val subType = it.thisObject::class.java - if (subType.getInterfaces().size == 1 && - subType.getDeclaredFields().find { it.getType() == proxy.propertyModel } != null) { - readerMode.init(subType) - findReaderHook!!.unhook() - } - } + findMethod(proxy.tabImpl) { + getParameterTypes() contentDeepEquals arrayOf(proxy.emptyTabObserver) && + getReturnType() == Void.TYPE + // There exist other methods with the same signatures + } + // public void addObserver(TabObserver observer) + .hookAfter { + val subType = it.args[0]::class.java + if (subType.getInterfaces().size == 1 && + subType.getDeclaredFields().find { it.getType() == proxy.propertyModel } != + null) { + readerMode.init(subType) + findReaderHook!!.unhook() + } + } } // var findSwipeRefreshHandler: Unhook? = null diff --git a/app/src/main/java/org/matrix/chromext/proxy/Menu.kt b/app/src/main/java/org/matrix/chromext/proxy/Menu.kt index 193a7f87..827bffa4 100644 --- a/app/src/main/java/org/matrix/chromext/proxy/Menu.kt +++ b/app/src/main/java/org/matrix/chromext/proxy/Menu.kt @@ -44,7 +44,7 @@ object MenuProxy { .find { it.type.getSuperclass() == FrameLayout::class.java }!! .type } - val mRowWrapper = pageInfoView.getDeclaredFields().find { it.type == LinearLayout::class.java }!! + val mRowWrapper = pageInfoView.getDeclaredFields().find { it.type == LinearLayout::class.java } val pageInfoControllerRef = // A particular WebContentsObserver designed for PageInfoController pageInfoController @@ -59,6 +59,7 @@ object MenuProxy { val emptyTabObserver = Chrome.load("org.chromium.chrome.browser.login.ChromeHttpAuthHandler").getSuperclass() as Class<*> + val tabImpl = Chrome.load("org.chromium.chrome.browser.tab.TabImpl") private val preference = Chrome.load("androidx.preference.Preference") private val mClickListener =