Skip to content

Commit 8abfd14

Browse files
committed
opt: 优化侧边栏模糊逻辑,现在(未开启反色下)调整背景颜色不会再导致游戏侧边栏崩溃
1 parent a7fe2c1 commit 8abfd14

1 file changed

Lines changed: 67 additions & 95 deletions

File tree

  • app/src/main/java/com/sevtinge/hyperceiler/module/hook/securitycenter/sidebar

app/src/main/java/com/sevtinge/hyperceiler/module/hook/securitycenter/BlurSecurity.kt renamed to app/src/main/java/com/sevtinge/hyperceiler/module/hook/securitycenter/sidebar/BlurSecurity.kt

Lines changed: 67 additions & 95 deletions
Original file line numberDiff line numberDiff line change
@@ -16,40 +16,36 @@
1616
1717
* Copyright (C) 2023-2024 HyperCeiler Contributions
1818
*/
19-
package com.sevtinge.hyperceiler.module.hook.securitycenter
20-
21-
import android.content.Context
22-
import android.graphics.Color
23-
import android.graphics.ColorMatrixColorFilter
24-
import android.graphics.RenderEffect
25-
import android.graphics.drawable.LayerDrawable
26-
import android.graphics.drawable.VectorDrawable
27-
import android.os.Build
28-
import android.util.AttributeSet
29-
import android.view.View
30-
import android.view.ViewGroup
31-
import android.widget.ImageView
32-
import android.widget.ListView
33-
import android.widget.TextView
34-
import androidx.annotation.RequiresApi
19+
package com.sevtinge.hyperceiler.module.hook.securitycenter.sidebar
20+
21+
import android.content.*
22+
import android.graphics.*
23+
import android.graphics.drawable.*
24+
import android.os.*
25+
import android.util.*
26+
import android.view.*
27+
import android.widget.*
28+
import androidx.annotation.*
3529
import com.github.kyuubiran.ezxhelper.EzXHelper.safeClassLoader
36-
import com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook
37-
import com.sevtinge.hyperceiler.module.base.BaseHook
30+
import com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createAfterHook
31+
import com.sevtinge.hyperceiler.module.base.*
3832
import com.sevtinge.hyperceiler.module.base.dexkit.DexKit.dexKitBridge
39-
import com.sevtinge.hyperceiler.utils.blur.BlurUtils.createBlurDrawable
40-
import com.sevtinge.hyperceiler.utils.blur.BlurUtils.isBlurDrawable
41-
import com.sevtinge.hyperceiler.utils.color.ColorUtils
42-
import com.sevtinge.hyperceiler.utils.getValueByField
43-
import de.robv.android.xposed.XC_MethodHook
44-
import de.robv.android.xposed.XC_MethodReplacement
45-
import de.robv.android.xposed.XposedBridge
46-
import de.robv.android.xposed.XposedHelpers
33+
import com.sevtinge.hyperceiler.utils.*
34+
import com.sevtinge.hyperceiler.utils.blur.BlurUtils.*
35+
import com.sevtinge.hyperceiler.utils.color.*
36+
import de.robv.android.xposed.*
4737

4838
object BlurSecurity : BaseHook() {
49-
val blurRadius = mPrefsMap.getInt("security_center_blurradius", 60)
50-
val backgroundColor = mPrefsMap.getInt("security_center_color", -1)
51-
val isInvertColor = mPrefsMap.getBoolean("security_center_invert_color")
52-
val shouldInvertColor = !ColorUtils.isDarkColor(backgroundColor)
39+
private val blurRadius by lazy {
40+
mPrefsMap.getInt("security_center_blurradius", 60)
41+
}
42+
private val backgroundColor by lazy {
43+
mPrefsMap.getInt("security_center_color", -1)
44+
}
45+
private val isInvertColor by lazy {
46+
mPrefsMap.getBoolean("security_center_invert_color")
47+
}
48+
private val shouldInvertColor = !ColorUtils.isDarkColor(backgroundColor)
5349

5450
private var appVersionCode = 40000727
5551

@@ -122,8 +118,7 @@ object BlurSecurity : BaseHook() {
122118
override fun afterHookedMethod(param: MethodHookParam) {
123119
val view = param.thisObject as View
124120
view.addOnAttachStateChangeListener(
125-
object :
126-
View.OnAttachStateChangeListener {
121+
object : View.OnAttachStateChangeListener {
127122
override fun onViewAttachedToWindow(view: View) {
128123
val viewPaernt = view.parent as ViewGroup
129124
val gameContentLayout = viewPaernt.parent as ViewGroup
@@ -134,27 +129,19 @@ object BlurSecurity : BaseHook() {
134129
}
135130

136131
gameContentLayout.background =
137-
createBlurDrawable(
138-
gameContentLayout,
139-
blurRadius,
140-
40,
141-
backgroundColor
142-
)
132+
createBlurDrawable(gameContentLayout, blurRadius, 40, backgroundColor)
143133

144-
if (shouldInvertColor) {
145-
if (isInvertColor) invertViewColor(gameContentLayout)
134+
if (shouldInvertColor && isInvertColor) {
135+
invertViewColor(gameContentLayout)
146136

147137
// 设置 RenderEffect 后会导致文字动画出现问题,故去除动画
148-
val performanceTextView = XposedHelpers.callMethod(
149-
param.thisObject,
150-
"getPerformanceTextView"
151-
) as View
138+
val performanceTextView =
139+
XposedHelpers.callMethod(param.thisObject, "getPerformanceTextView") as View
140+
152141
XposedHelpers.findAndHookMethod(
153142
performanceTextView.javaClass,
154143
if (appVersionCode >= 40000749) "e" else "a",
155-
Boolean::class.java,
156-
object :
157-
XC_MethodReplacement() {
144+
Boolean::class.java, object : XC_MethodReplacement() {
158145
override fun replaceHookedMethod(param: MethodHookParam?) {
159146
param?.result = null
160147
}
@@ -192,29 +179,28 @@ object BlurSecurity : BaseHook() {
192179
returnType = "android.view.View"
193180
paramTypes = listOf("android.content.Context", "boolean", "boolean")
194181
}
195-
}.single().getMethodInstance(lpparam.classLoader).createHook {
196-
after { param ->
197-
val mainContent = getValueByField(param.thisObject, "b") as ViewGroup
198-
mainContent.addOnAttachStateChangeListener(object :
199-
View.OnAttachStateChangeListener {
200-
override fun onViewAttachedToWindow(view: View) {
201-
if (view.background != null) {
202-
if (isBlurDrawable(view.background)) return
203-
}
204-
view.background =
205-
createBlurDrawable(view, blurRadius, 40, backgroundColor)
182+
}.single().getMethodInstance(lpparam.classLoader).createAfterHook { param ->
183+
val mainContent = getValueByField(param.thisObject, "b") as ViewGroup
184+
mainContent.addOnAttachStateChangeListener(object :
185+
View.OnAttachStateChangeListener {
186+
@RequiresApi(Build.VERSION_CODES.S)
187+
override fun onViewAttachedToWindow(view: View) {
188+
if (view.background != null) {
189+
if (isBlurDrawable(view.background)) return
190+
}
191+
view.background =
192+
createBlurDrawable(view, blurRadius, 40, backgroundColor)
206193

207-
if (shouldInvertColor && isInvertColor) invertViewColor(mainContent)
208-
}
194+
if (shouldInvertColor && isInvertColor) invertViewColor(mainContent)
195+
}
209196

210-
override fun onViewDetachedFromWindow(view: View) {
211-
view.background = null
212-
}
213-
})
197+
override fun onViewDetachedFromWindow(view: View) {
198+
view.background = null
214199
}
200+
})
215201
}
216202

217-
if (shouldInvertColor) {
203+
if (shouldInvertColor && isInvertColor) {
218204
val detailSettingsLayoutClass = findClassIfExists(
219205
"com.miui.gamebooster.videobox.view.DetailSettingsLayout"
220206
) ?: return
@@ -256,25 +242,20 @@ object BlurSecurity : BaseHook() {
256242
"seekbar_text_speed"
257243
)
258244

259-
if (isInvertColor) {
260-
val gameManagerMethod = dexKitBridge.findMethod {
261-
searchPackages = listOf("com.miui.gamebooster.windowmanager.newbox")
262-
matcher {
263-
usingStrings = listOf("addView error")
264-
}
265-
}.single().getMethodInstance(safeClassLoader)
266-
267-
gameManagerMethod.createHook {
268-
after {
269-
val view = it.args[0] as View
270-
invertViewColor(view, gameBoxWhiteList, gameBoxKeepList)
271-
}
245+
val gameManagerMethod = dexKitBridge.findMethod {
246+
searchPackages = listOf("com.miui.gamebooster.windowmanager.newbox")
247+
matcher {
248+
usingStrings = listOf("addView error")
272249
}
250+
}.single().getMethodInstance(safeClassLoader)
251+
252+
gameManagerMethod.createAfterHook {
253+
val view = it.args[0] as View
254+
invertViewColor(view, gameBoxWhiteList, gameBoxKeepList)
273255
}
274256

275257
val auditionViewClass =
276-
findClassIfExists("com.miui.gamebooster.customview.AuditionView")
277-
?: return
258+
findClassIfExists("com.miui.gamebooster.customview.AuditionView") ?: return
278259

279260
XposedBridge.hookAllMethods(
280261
detailSettingsLayoutClass,
@@ -289,8 +270,7 @@ object BlurSecurity : BaseHook() {
289270
val listView = getValueByField(param.thisObject, "c") as ListView
290271
val listViewAdapterClassName = listView.adapter.javaClass.name
291272
val listViewAdapterInnerClass =
292-
findClassIfExists("$listViewAdapterClassName\$a")
293-
?: return
273+
findClassIfExists("$listViewAdapterClassName\$a") ?: return
294274
XposedBridge.hookAllMethods(
295275
listViewAdapterInnerClass,
296276
"a",
@@ -302,10 +282,7 @@ object BlurSecurity : BaseHook() {
302282
listViewAdapterInnerClass.declaredFields.forEach { field ->
303283
val currentObject = field.get(param.thisObject)
304284
if (currentObject is ImageView) {
305-
if (getId(currentObject) == "img1" || getId(
306-
currentObject
307-
) == "img2"
308-
) {
285+
if (getId(currentObject) == "img1" || getId(currentObject) == "img2") {
309286
currentObject.setRenderEffect(
310287
RenderEffect.createColorFilterEffect(
311288
ColorMatrixColorFilter(
@@ -321,13 +298,7 @@ object BlurSecurity : BaseHook() {
321298
}
322299
}
323300
if (currentObject is View) {
324-
if (isInvertColor) {
325-
invertViewColor(
326-
currentObject,
327-
videoBoxWhiteList,
328-
videoBoxKeepList
329-
)
330-
}
301+
invertViewColor(currentObject, videoBoxWhiteList, videoBoxKeepList)
331302
}
332303
}
333304
}
@@ -406,10 +377,11 @@ object BlurSecurity : BaseHook() {
406377
lastChild.setImageDrawable(newDrawable)
407378
}
408379
}
409-
if (isInvertColor) invertViewColor(view, gameBoxWhiteList, gameBoxKeepList)
380+
invertViewColor(view, gameBoxWhiteList, gameBoxKeepList)
410381
}
411382
})
412-
}
383+
384+
}
413385
}
414386

415387
// 尽量给最外层加 RenderEffect 而不是 最内层

0 commit comments

Comments
 (0)