mirror of
https://github.com/fankes/TSBattery.git
synced 2025-09-07 03:06:06 +08:00
Fix WeChat SettingsUI's top right TSBattery icon lost problem when version >= 8.0.28
This commit is contained in:
@@ -22,8 +22,10 @@
|
|||||||
package com.fankes.tsbattery.hook.entity
|
package com.fankes.tsbattery.hook.entity
|
||||||
|
|
||||||
import android.app.Activity
|
import android.app.Activity
|
||||||
|
import android.content.Context
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.view.Gravity
|
import android.view.Gravity
|
||||||
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import android.widget.ImageView
|
import android.widget.ImageView
|
||||||
import android.widget.LinearLayout
|
import android.widget.LinearLayout
|
||||||
@@ -35,16 +37,16 @@ import com.fankes.tsbattery.hook.factory.hookSystemWakeLock
|
|||||||
import com.fankes.tsbattery.hook.factory.jumpToModuleSettings
|
import com.fankes.tsbattery.hook.factory.jumpToModuleSettings
|
||||||
import com.fankes.tsbattery.hook.factory.startModuleSettings
|
import com.fankes.tsbattery.hook.factory.startModuleSettings
|
||||||
import com.fankes.tsbattery.utils.factory.absoluteStatusBarHeight
|
import com.fankes.tsbattery.utils.factory.absoluteStatusBarHeight
|
||||||
import com.fankes.tsbattery.utils.factory.dp
|
|
||||||
import com.fankes.tsbattery.utils.factory.appVersionCode
|
import com.fankes.tsbattery.utils.factory.appVersionCode
|
||||||
import com.fankes.tsbattery.utils.factory.appVersionName
|
import com.fankes.tsbattery.utils.factory.appVersionName
|
||||||
|
import com.fankes.tsbattery.utils.factory.dp
|
||||||
import com.highcapable.yukihookapi.hook.entity.YukiBaseHooker
|
import com.highcapable.yukihookapi.hook.entity.YukiBaseHooker
|
||||||
import com.highcapable.yukihookapi.hook.factory.current
|
import com.highcapable.yukihookapi.hook.factory.current
|
||||||
import com.highcapable.yukihookapi.hook.factory.injectModuleAppResources
|
import com.highcapable.yukihookapi.hook.factory.injectModuleAppResources
|
||||||
import com.highcapable.yukihookapi.hook.factory.processName
|
import com.highcapable.yukihookapi.hook.factory.processName
|
||||||
import com.highcapable.yukihookapi.hook.factory.registerModuleAppActivities
|
import com.highcapable.yukihookapi.hook.factory.registerModuleAppActivities
|
||||||
import com.highcapable.yukihookapi.hook.log.loggerI
|
import com.highcapable.yukihookapi.hook.log.loggerI
|
||||||
import com.highcapable.yukihookapi.hook.type.android.BundleClass
|
import com.highcapable.yukihookapi.hook.type.android.ViewClass
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Hook 微信
|
* Hook 微信
|
||||||
@@ -65,6 +67,30 @@ object WeChatHooker : YukiBaseHooker() {
|
|||||||
/** 微信存在的类 - 未测试每个版本是否都存在 */
|
/** 微信存在的类 - 未测试每个版本是否都存在 */
|
||||||
private const val SettingsUIClass = "${PackageName.WECHAT}.plugin.setting.ui.setting.SettingsUI"
|
private const val SettingsUIClass = "${PackageName.WECHAT}.plugin.setting.ui.setting.SettingsUI"
|
||||||
|
|
||||||
|
/** TSBattery 图标 TAG 名称 */
|
||||||
|
private const val TSBARRERY_ICON_TAG = "tsbattery_icon"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建 TSBattery 图标
|
||||||
|
* @param context 当前实例
|
||||||
|
* @return [LinearLayout]
|
||||||
|
*/
|
||||||
|
private fun createPreferenceIcon(context: Context) = LinearLayout(context).apply {
|
||||||
|
tag = TSBARRERY_ICON_TAG
|
||||||
|
gravity = Gravity.END or Gravity.BOTTOM
|
||||||
|
layoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)
|
||||||
|
addView(ImageView(context).apply {
|
||||||
|
layoutParams = ViewGroup.MarginLayoutParams(20.dp(context), 20.dp(context)).apply {
|
||||||
|
topMargin = context.absoluteStatusBarHeight + 15.dp(context)
|
||||||
|
rightMargin = 20.dp(context)
|
||||||
|
}
|
||||||
|
setColorFilter(ResourcesCompat.getColor(resources, R.color.colorTextGray, null))
|
||||||
|
setImageResource(R.drawable.ic_icon)
|
||||||
|
if (Build.VERSION.SDK_INT >= 26) tooltipText = "TSBattery 设置"
|
||||||
|
setOnClickListener { context.startModuleSettings() }
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
override fun onHook() {
|
override fun onHook() {
|
||||||
onAppLifecycle {
|
onAppLifecycle {
|
||||||
onCreate {
|
onCreate {
|
||||||
@@ -97,32 +123,26 @@ object WeChatHooker : YukiBaseHooker() {
|
|||||||
SettingsUIClass.hook {
|
SettingsUIClass.hook {
|
||||||
injectMember {
|
injectMember {
|
||||||
method {
|
method {
|
||||||
name = "onCreate"
|
name = "onResume"
|
||||||
param(BundleClass)
|
emptyParam()
|
||||||
}
|
}
|
||||||
afterHook {
|
afterHook {
|
||||||
method {
|
method {
|
||||||
name = "get_fragment"
|
name = "get_fragment"
|
||||||
emptyParam()
|
emptyParam()
|
||||||
superClass(isOnlySuperClass = true)
|
superClass(isOnlySuperClass = true)
|
||||||
}.get(instance).call()?.current()
|
}.get(instance).call()?.current()?.method {
|
||||||
?.field { name = "mController" }
|
name = "getView"
|
||||||
?.current()?.method { name = "getContentView" }
|
emptyParam()
|
||||||
?.invoke<ViewGroup>()?.addView(LinearLayout(instance()).apply {
|
returnType = ViewClass
|
||||||
context.injectModuleAppResources()
|
superClass(isOnlySuperClass = true)
|
||||||
gravity = Gravity.END or Gravity.BOTTOM
|
}?.invoke<ViewGroup?>()?.also {
|
||||||
layoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)
|
it.context?.injectModuleAppResources()
|
||||||
addView(ImageView(context).apply {
|
runCatching { it.getChildAt(0) as? ViewGroup? }.getOrNull()?.also { rootView ->
|
||||||
layoutParams = ViewGroup.MarginLayoutParams(20.dp(context), 20.dp(context)).apply {
|
if (rootView.findViewWithTag<View>(TSBARRERY_ICON_TAG) == null)
|
||||||
topMargin = context.absoluteStatusBarHeight + 15.dp(context)
|
rootView.addView(createPreferenceIcon(it.context))
|
||||||
rightMargin = 20.dp(context)
|
}
|
||||||
}
|
}
|
||||||
setColorFilter(ResourcesCompat.getColor(resources, R.color.colorTextGray, null))
|
|
||||||
setImageResource(R.drawable.ic_icon)
|
|
||||||
if (Build.VERSION.SDK_INT >= 26) tooltipText = "TSBattery 设置"
|
|
||||||
setOnClickListener { context.startModuleSettings() }
|
|
||||||
})
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user