diff --git a/app/src/main/java/org/matrix/chromext/proxy/Intent.kt b/app/src/main/java/org/matrix/chromext/proxy/Intent.kt index 2eeab920..99e1b0d1 100644 --- a/app/src/main/java/org/matrix/chromext/proxy/Intent.kt +++ b/app/src/main/java/org/matrix/chromext/proxy/Intent.kt @@ -3,6 +3,8 @@ package org.matrix.chromext.proxy import android.util.Pair import java.lang.reflect.Modifier import org.matrix.chromext.Chrome +import org.matrix.chromext.utils.findField +import org.matrix.chromext.utils.findFieldOrNull object IntentProxy { @@ -10,15 +12,9 @@ object IntentProxy { val intentHandler = // Grep 'Ignoring internal Chrome URL from untrustworthy source.' to get the class // org/chromium/chrome/browser/IntentHandler.java - Chrome.load("org.chromium.chrome.browser.app.ChromeActivity") - .getDeclaredFields() - .find { - Modifier.isFinal(it.getModifiers()) && - (it.getType().getDeclaredFields().find { it.getType() == Pair::class.java } != - null || - it.getType().getSuperclass().getDeclaredFields().find { - it.getType() == Pair::class.java - } != null) - }!! - .getType() + findField(Chrome.load("org.chromium.chrome.browser.app.ChromeActivity")) { + Modifier.isFinal(getModifiers()) && + findFieldOrNull(type, true) { type == Pair::class.java } != null + } + .type } 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 827bffa4..a3351caa 100644 --- a/app/src/main/java/org/matrix/chromext/proxy/Menu.kt +++ b/app/src/main/java/org/matrix/chromext/proxy/Menu.kt @@ -11,6 +11,8 @@ import kotlin.text.Regex import org.matrix.chromext.Chrome import org.matrix.chromext.utils.Download import org.matrix.chromext.utils.Log +import org.matrix.chromext.utils.findField +import org.matrix.chromext.utils.findFieldOrNull import org.matrix.chromext.utils.findMethod import org.matrix.chromext.utils.hookBefore @@ -39,21 +41,16 @@ object MenuProxy { if (Chrome.isEdge) { Chrome.load("org.chromium.components.page_info.PageInfoView") } else { - pageInfoController - .getDeclaredFields() - .find { it.type.getSuperclass() == FrameLayout::class.java }!! - .type + findField(pageInfoController) { type.getSuperclass() == FrameLayout::class.java }.type } - val mRowWrapper = pageInfoView.getDeclaredFields().find { it.type == LinearLayout::class.java } + val mRowWrapper = findFieldOrNull(pageInfoView) { type == LinearLayout::class.java } val pageInfoControllerRef = // A particular WebContentsObserver designed for PageInfoController - pageInfoController - .getDeclaredFields() - .find { - it.type.getDeclaredFields().size == 1 && - (it.type.getDeclaredFields()[0].type == pageInfoController || - it.type.getDeclaredFields()[0].type == WeakReference::class.java) - }!! + findField(pageInfoController) { + type.getDeclaredFields().size == 1 && + (type.getDeclaredFields()[0].type == pageInfoController || + type.getDeclaredFields()[0].type == WeakReference::class.java) + } .type val emptyTabObserver = @@ -63,10 +60,10 @@ object MenuProxy { private val preference = Chrome.load("androidx.preference.Preference") private val mClickListener = - preference.getDeclaredFields().find { - it.getType() == OnClickListener::class.java || - it.getType().getInterfaces().contains(OnClickListener::class.java) - }!! + findField(preference) { + type == OnClickListener::class.java || + type.getInterfaces().contains(OnClickListener::class.java) + } private val setSummary = findMethod(preference) { getParameterTypes() contentDeepEquals arrayOf(CharSequence::class.java) &&