Skip to content

Commit

Permalink
Use field finder util
Browse files Browse the repository at this point in the history
  • Loading branch information
JingMatrix committed Jun 18, 2023
1 parent 58b2546 commit e75d842
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 27 deletions.
18 changes: 7 additions & 11 deletions app/src/main/java/org/matrix/chromext/proxy/Intent.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,22 +3,18 @@ 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 {

val chromeTabbedActivity = Chrome.load("org.chromium.chrome.browser.ChromeTabbedActivity")
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
}
29 changes: 13 additions & 16 deletions app/src/main/java/org/matrix/chromext/proxy/Menu.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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 =
Expand All @@ -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) &&
Expand Down

0 comments on commit e75d842

Please sign in to comment.