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.*
3529import 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.*
3832import 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
4838object 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