Skip to content

Commit

Permalink
re-fix: DualRowSignalHookV
Browse files Browse the repository at this point in the history
  • Loading branch information
lingqiqi5211 committed Dec 8, 2024
1 parent 39f6e40 commit dd1b276
Showing 1 changed file with 66 additions and 68 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -260,92 +260,95 @@ class DualRowSignalHookV : BaseHook() {

private fun setDualSignalIcon() {
val setImageCallback = IMethodHookCallback { param ->
val isSetMethod = "access\$setImageResWithTintLight" == param.method.name
if (isSetMethod) {
val icon = param.args[0] as ImageView
val icon = param.args[0] as ImageView

if (icon.id == getIdByName("mobile_signal")) {
val signalGroup = icon.parent as FrameLayout
if (icon.id == getIdByName("mobile_signal")) {
val signalGroup = icon.parent as FrameLayout

val subId = XposedHelpers.getAdditionalInstanceField(icon, "subId")
val isSetMethod = "access\$setImageResWithTintLight" == param.method.name
val subId = XposedHelpers.getAdditionalInstanceField(icon, "subId")

if (mobileInfo.subId != ID_SUB_NO_DATA_SIM) {
val isUseTint: Boolean
val isLight: Boolean
if (mobileInfo.subId != ID_SUB_NO_DATA_SIM) {
val isUseTint: Boolean
val isLight: Boolean

if (isSetMethod) {
val pair = param.args[2]
isUseTint = pair.callMethodAs("getFirst")
isLight = pair.callMethodAs("getSecond")
} else {
isUseTint = (param.args[1] as Boolean)
isLight = (param.args[2] as Boolean)
}

if (subId == null || subId != mobileInfo.subId) {
param.result = null
return@IMethodHookCallback
}
if (subId == null || subId != mobileInfo.subId) {
param.result = null
return@IMethodHookCallback
}

val (mobileSignalIconId, mobileRoamIconId) = getDualSignalIconPairResId(
isUseTint, isLight
)
if (mobileSignalIconId != null && mobileRoamIconId != null) {
icon.post {
icon.setImageResource(mobileSignalIconId)
signalGroup.findViewWithTag<ImageView?>("mobile_signal2")?.let {
it.setImageResource(mobileRoamIconId)
it.imageTintList = icon.imageTintList
}
val (mobileSignalIconId, mobileRoamIconId) = getDualSignalIconPairResId(
isUseTint, isLight
)
if (mobileSignalIconId != null && mobileRoamIconId != null) {
icon.post {
icon.setImageResource(mobileSignalIconId)
signalGroup.findViewWithTag<ImageView?>("mobile_signal2")?.let {
it.setImageResource(mobileRoamIconId)
it.imageTintList = icon.imageTintList
}
}
}

param.result = null
} else if (icon.tag == "mobile_signal2") {
param.result = null
} else {
// 指示器等
}
} else {
for (icon in param.thisObject.getObjectField("\$tintViewList") as List<*>) {
if (icon is ImageView) {

if (icon.id == getIdByName("mobile_signal")) {
param.result = null
} else if (icon.tag == "mobile_signal2") {
param.result = null
} else {
// 指示器等
}
}

val signalGroup = icon.parent as FrameLayout
val setImageCallbackNew = IMethodHookCallback { param ->
for (icon in param.thisObject.getObjectField("\$tintViewList") as List<*>) {
if (icon is ImageView) {
if (icon.id == getIdByName("mobile_signal")) {

val subId = XposedHelpers.getAdditionalInstanceField(icon, "subId")
val triple = param.thisObject.getObjectField("L\$0")
val signalGroup = icon.parent as FrameLayout

if (mobileInfo.subId != ID_SUB_NO_DATA_SIM) {
val subId = XposedHelpers.getAdditionalInstanceField(icon, "subId")
val triple = param.thisObject.getObjectField("L\$0")

val isUseTint: Boolean = triple!!.callMethodAs("getFirst")
val isLight: Boolean = triple!!.callMethodAs("getSecond")
if (mobileInfo.subId != ID_SUB_NO_DATA_SIM) {
val isUseTint: Boolean = triple!!.callMethodAs("getFirst")
val isLight: Boolean = triple.callMethodAs("getSecond")

if (subId == null || subId != mobileInfo.subId) {
param.result = null
return@IMethodHookCallback
}
if (subId == null || subId != mobileInfo.subId) {
param.result = null
return@IMethodHookCallback
}

val (mobileSignalIconId, mobileRoamIconId) = getDualSignalIconPairResId(
isUseTint, isLight
)
if (mobileSignalIconId != null && mobileRoamIconId != null) {
icon.post {
icon.setImageResource(mobileSignalIconId)
signalGroup.findViewWithTag<ImageView?>("mobile_signal2")?.let {
it.setImageResource(mobileRoamIconId)
it.imageTintList = icon.imageTintList
}
val (mobileSignalIconId, mobileRoamIconId) = getDualSignalIconPairResId(
isUseTint, isLight
)
if (mobileSignalIconId != null && mobileRoamIconId != null) {
icon.post {
icon.setImageResource(mobileSignalIconId)
signalGroup.findViewWithTag<ImageView?>("mobile_signal2")?.let {
it.setImageResource(mobileRoamIconId)
it.imageTintList = icon.imageTintList
}
}
}

param.result = null
} else if (icon.tag == "mobile_signal2") {
param.result = null
} else {
// 指示器等
}
}

param.result = null
} else if (icon.tag == "mobile_signal2") {
param.result = null
} else {
// 指示器等
}
}

}
}

Expand All @@ -357,17 +360,12 @@ class DualRowSignalHookV : BaseHook() {
before(setImageCallback)
}
} catch (_: Exception) {
/*findAndHookMethod("com.android.systemui.statusbar.pipeline.mobile.ui.binder.MiuiMobileIconBinder\$bind\$1\$1\$5\$1", "invokeSuspend", Object::class.java, object : MethodHook(){
override fun after(param: MethodHookParam?) {
setDualSignalIcon()
}
})*/

loadClass("com.android.systemui.statusbar.pipeline.mobile.ui.binder.MiuiMobileIconBinder\$bind\$1\$1\$5\$1").methodFinder()
// 感觉不是很好,等有缘人改一下,先这样
loadClass("com.android.systemui.statusbar.pipeline.mobile.ui.binder.MiuiMobileIconBinder\$bind\$1\$1\$5\$1").methodFinder()
.filterByName("invokeSuspend")
.single()
.createHook {
after(setImageCallback)
after(setImageCallbackNew)
}
}

Expand Down

0 comments on commit dd1b276

Please sign in to comment.