Compare commits

12 Commits

Author SHA1 Message Date
乌堆小透明
1af19eb7ea New translations strings.xml (Spanish)
[ci skip] New translations from Crowdin
2022-03-27 20:44:30 +08:00
乌堆小透明
aa5704864d New translations strings.xml (Turkish)
[ci skip] New translations from Crowdin
2022-03-27 17:29:47 +08:00
乌堆小透明
761998072f New translations strings.xml (Chinese Traditional)
[ci skip] New translations from Crowdin
2022-03-27 17:23:35 +08:00
LittleTurtle2333
fc1800932b Update version to 1.5.5 2022-03-27 17:15:30 +08:00
乌堆小透明
181869687e New Crowdin updates (#111)
* New translations strings.xml (Chinese Traditional)
[ci skip] New translations from Crowdin

* New translations strings.xml (Spanish)
[ci skip] New translations from Crowdin

* New translations strings.xml (Spanish)
[ci skip] New translations from Crowdin

* New translations strings.xml (Romanian)
[ci skip] New translations from Crowdin

* New translations strings.xml (Russian)
[ci skip] New translations from Crowdin

* New translations strings.xml (Vietnamese)
[ci skip] New translations from Crowdin

* New translations strings.xml (Vietnamese)
[ci skip] New translations from Crowdin

* New translations strings.xml (Chinese Simplified)
[ci skip] New translations from Crowdin

* New translations strings.xml (Vietnamese)
[ci skip] New translations from Crowdin

* New translations strings.xml (Vietnamese)
[ci skip] New translations from Crowdin

* New translations strings.xml (Romanian)
[ci skip] New translations from Crowdin

* New translations strings.xml (Romanian)
[ci skip] New translations from Crowdin

* New translations strings.xml (Romanian)
[ci skip] New translations from Crowdin

* New translations strings.xml (Vietnamese)
[ci skip] New translations from Crowdin

* New translations strings.xml (Chinese Simplified)
[ci skip] New translations from Crowdin

* New translations strings.xml (Russian)
[ci skip] New translations from Crowdin

* New translations strings.xml (Chinese Simplified)
[ci skip] New translations from Crowdin

* New translations strings.xml (Russian)
[ci skip] New translations from Crowdin
2022-03-27 17:11:50 +08:00
LittleTurtle2333
5ee5dd71b1 双排时钟支持居中对齐 2022-03-27 16:59:49 +08:00
LittleTurtle2333
b6d8529624 修复一堆格式错误的变量名 2022-03-27 16:41:01 +08:00
YifePlayte
243bc39dd6 新增强制允许所有应用接力 (#113) 2022-03-27 12:50:51 +08:00
LittleTurtle2333
4332ac6ed8 Update README.md 2022-03-27 03:22:23 +08:00
LittleTurtle2333
8309c9a69a 修复最新MIUI内测居中布局通知异常 2022-03-27 03:08:22 +08:00
LittleTurtle2333
62561d4c34 删除冗余代码 2022-03-27 02:13:11 +08:00
QQ little ice
4c13ad4152 Use EasyXposed (#112)
* add EasyXposed

* change hook entry

* [android] use EasyXposed

* [com.miui.mediaeditor] use EasyXposed

* [com.miui.home] use EasyXposed

* [com.miui.powerkeeper] use EasyXposed

* [com.miui.screenshot] use EasyXposed

* [com.miui.securitycenter] use EasyXposed

* [com.android.settings] use EasyXposed

* [com.android.thememanager] use EasyXposed

* [com.android.systemui] use EasyXposed
2022-03-27 02:07:02 +08:00
75 changed files with 906 additions and 672 deletions

View File

@@ -15,8 +15,7 @@
### 模块说明 ### 模块说明
仅支持MIUI13Android12其余版本可能无效,请不要安装使用。 仅支持MIUI13Android12其余版本无法使用。
目前处于开发初期阶段,功能较少,后续将逐步完善。
开发者:[酷安@乌堆小透明](http://www.coolapk.com/u/883441) 开发者:[酷安@乌堆小透明](http://www.coolapk.com/u/883441)

View File

@@ -15,8 +15,7 @@
### Description ### Description
Only MIUI13 (Android12) is supported. The rest of the versions may not be valid, please do not install and use. Only MIUI13 (Android12) is supported. The rest of the versions not be valid.
It is in the early stage of development, with fewer functions, and will be improved gradually.
--- ---

View File

@@ -12,8 +12,8 @@ android {
applicationId = "com.lt2333.simplicitytools" applicationId = "com.lt2333.simplicitytools"
minSdk = 31 minSdk = 31
targetSdk = 32 targetSdk = 32
versionCode = 55 versionCode = 56
versionName = "1.5.4" versionName = "1.5.5"
} }
buildTypes { buildTypes {

View File

@@ -27,6 +27,8 @@
public void *(de.robv.android.xposed.IXposedHookZygoteInit$StartupParam); public void *(de.robv.android.xposed.IXposedHookZygoteInit$StartupParam);
} }
-keep class * extends com.lt2333.simplicitytools.util.xposed.EasyXposedInit
-assumenosideeffects class kotlin.jvm.internal.Intrinsics { -assumenosideeffects class kotlin.jvm.internal.Intrinsics {
public static void check*(...); public static void check*(...);
public static void throw*(...); public static void throw*(...);

View File

@@ -1 +1 @@
com.lt2333.simplicitytools.hook.MainHook com.lt2333.simplicitytools.hook.XposedEntry

View File

@@ -194,7 +194,8 @@ class SettingsActivity : MIUIActivity() {
"killall com.miui.powerkeeper", "killall com.miui.powerkeeper",
"killall com.android.updater", "killall com.android.updater",
"killall com.miui.mediaeditor", "killall com.miui.mediaeditor",
"killall com.miui.screenshot" "killall com.miui.screenshot",
"killall com.milink.service"
) )
ShellUtils.execCommand(command, true) ShellUtils.execCommand(command, true)
dismiss() dismiss()
@@ -516,7 +517,7 @@ class SettingsActivity : MIUIActivity() {
SwitchV("status_bar_time_center") SwitchV("status_bar_time_center")
) )
) )
val layout_compatibility_mode_binding = getDataBinding( val layoutCompatibilityModeBinding = getDataBinding(
SPUtils.getBoolean( SPUtils.getBoolean(
activity, activity,
"layout_compatibility_mode", "layout_compatibility_mode",
@@ -536,7 +537,7 @@ class SettingsActivity : MIUIActivity() {
), ),
SwitchV( SwitchV(
"layout_compatibility_mode", "layout_compatibility_mode",
dataBindingSend = layout_compatibility_mode_binding.bindingSend dataBindingSend = layoutCompatibilityModeBinding.bindingSend
) )
) )
) )
@@ -545,7 +546,7 @@ class SettingsActivity : MIUIActivity() {
add( add(
TextV( TextV(
resId = R.string.left_margin, resId = R.string.left_margin,
dataBindingRecv = layout_compatibility_mode_binding.binding.getRecv(2) dataBindingRecv = layoutCompatibilityModeBinding.binding.getRecv(2)
) )
) )
add( add(
@@ -554,14 +555,14 @@ class SettingsActivity : MIUIActivity() {
0, 0,
300, 300,
0, 0,
dataBindingRecv = layout_compatibility_mode_binding.binding.getRecv(2) dataBindingRecv = layoutCompatibilityModeBinding.binding.getRecv(2)
) )
) )
add( add(
TextV( TextV(
resId = R.string.right_margin, resId = R.string.right_margin,
dataBindingRecv = layout_compatibility_mode_binding.binding.getRecv(2) dataBindingRecv = layoutCompatibilityModeBinding.binding.getRecv(2)
) )
) )
add( add(
@@ -570,7 +571,7 @@ class SettingsActivity : MIUIActivity() {
0, 0,
300, 300,
0, 0,
dataBindingRecv = layout_compatibility_mode_binding.binding.getRecv(2) dataBindingRecv = layoutCompatibilityModeBinding.binding.getRecv(2)
) )
) )
@@ -578,7 +579,7 @@ class SettingsActivity : MIUIActivity() {
add(LineV()) add(LineV())
add(TitleTextV(resId = R.string.status_bar_clock_format)) add(TitleTextV(resId = R.string.status_bar_clock_format))
val custom_clock_binding = getDataBinding( val customClockBinding = getDataBinding(
SPUtils.getBoolean( SPUtils.getBoolean(
activity, activity,
"custom_clock_switch", "custom_clock_switch",
@@ -597,7 +598,7 @@ class SettingsActivity : MIUIActivity() {
TextV(resId = R.string.custom_clock_switch, colorId = R.color.purple_700), TextV(resId = R.string.custom_clock_switch, colorId = R.color.purple_700),
SwitchV( SwitchV(
"custom_clock_switch", "custom_clock_switch",
dataBindingSend = custom_clock_binding.bindingSend dataBindingSend = customClockBinding.bindingSend
) )
) )
) )
@@ -605,87 +606,94 @@ class SettingsActivity : MIUIActivity() {
TextWithSwitchV( TextWithSwitchV(
TextV(resId = R.string.status_bar_time_year), TextV(resId = R.string.status_bar_time_year),
SwitchV("status_bar_time_year"), SwitchV("status_bar_time_year"),
dataBindingRecv = custom_clock_binding.binding.getRecv(2) dataBindingRecv = customClockBinding.binding.getRecv(2)
) )
) )
add( add(
TextWithSwitchV( TextWithSwitchV(
TextV(resId = R.string.status_bar_time_month), TextV(resId = R.string.status_bar_time_month),
SwitchV("status_bar_time_month"), SwitchV("status_bar_time_month"),
dataBindingRecv = custom_clock_binding.binding.getRecv(2) dataBindingRecv = customClockBinding.binding.getRecv(2)
) )
) )
add( add(
TextWithSwitchV( TextWithSwitchV(
TextV(resId = R.string.status_bar_time_day), TextV(resId = R.string.status_bar_time_day),
SwitchV("status_bar_time_day"), SwitchV("status_bar_time_day"),
dataBindingRecv = custom_clock_binding.binding.getRecv(2) dataBindingRecv = customClockBinding.binding.getRecv(2)
) )
) )
add( add(
TextWithSwitchV( TextWithSwitchV(
TextV(resId = R.string.status_bar_time_week), TextV(resId = R.string.status_bar_time_week),
SwitchV("status_bar_time_week"), SwitchV("status_bar_time_week"),
dataBindingRecv = custom_clock_binding.binding.getRecv(2) dataBindingRecv = customClockBinding.binding.getRecv(2)
) )
) )
add( add(
TextWithSwitchV( TextWithSwitchV(
TextV(resId = R.string.status_bar_time_double_hour), TextV(resId = R.string.status_bar_time_double_hour),
SwitchV("status_bar_time_double_hour"), SwitchV("status_bar_time_double_hour"),
dataBindingRecv = custom_clock_binding.binding.getRecv(2) dataBindingRecv = customClockBinding.binding.getRecv(2)
) )
) )
add( add(
TextWithSwitchV( TextWithSwitchV(
TextV(resId = R.string.status_bar_time_period), TextV(resId = R.string.status_bar_time_period),
SwitchV("status_bar_time_period", true), SwitchV("status_bar_time_period", true),
dataBindingRecv = custom_clock_binding.binding.getRecv(2) dataBindingRecv = customClockBinding.binding.getRecv(2)
) )
) )
add( add(
TextWithSwitchV( TextWithSwitchV(
TextV(resId = R.string.status_bar_time_seconds), TextV(resId = R.string.status_bar_time_seconds),
SwitchV("status_bar_time_seconds"), SwitchV("status_bar_time_seconds"),
dataBindingRecv = custom_clock_binding.binding.getRecv(2) dataBindingRecv = customClockBinding.binding.getRecv(2)
) )
) )
add( add(
TextWithSwitchV( TextWithSwitchV(
TextV(resId = R.string.status_bar_time_hide_space), TextV(resId = R.string.status_bar_time_hide_space),
SwitchV("status_bar_time_hide_space"), SwitchV("status_bar_time_hide_space"),
dataBindingRecv = custom_clock_binding.binding.getRecv(2) dataBindingRecv = customClockBinding.binding.getRecv(2)
) )
) )
add( add(
TextWithSwitchV( TextWithSwitchV(
TextV(resId = R.string.status_bar_time_double_line), TextV(resId = R.string.status_bar_time_double_line),
SwitchV("status_bar_time_double_line"), SwitchV("status_bar_time_double_line"),
dataBindingRecv = custom_clock_binding.binding.getRecv(2) dataBindingRecv = customClockBinding.binding.getRecv(2)
)
)
add(
TextWithSwitchV(
TextV(resId = R.string.status_bar_time_double_line_center_align),
SwitchV("status_bar_time_double_line_center_align"),
dataBindingRecv = customClockBinding.binding.getRecv(2)
) )
) )
add( add(
TextV( TextV(
resId = R.string.status_bar_clock_size, resId = R.string.status_bar_clock_size,
dataBindingRecv = custom_clock_binding.binding.getRecv(2) dataBindingRecv = customClockBinding.binding.getRecv(2)
) )
) )
add( add(
SeekBarWithTextV( SeekBarWithTextV(
"status_bar_clock_size", 0, 18, 0, "status_bar_clock_size", 0, 18, 0,
dataBindingRecv = custom_clock_binding.binding.getRecv(2) dataBindingRecv = customClockBinding.binding.getRecv(2)
) )
) )
add( add(
TextV( TextV(
resId = R.string.status_bar_clock_double_line_size, resId = R.string.status_bar_clock_double_line_size,
dataBindingRecv = custom_clock_binding.binding.getRecv(2) dataBindingRecv = customClockBinding.binding.getRecv(2)
) )
) )
add( add(
SeekBarWithTextV( SeekBarWithTextV(
"status_bar_clock_double_line_size", 0, 9, 0, "status_bar_clock_double_line_size", 0, 9, 0,
dataBindingRecv = custom_clock_binding.binding.getRecv(2) dataBindingRecv = customClockBinding.binding.getRecv(2)
) )
) )
@@ -699,7 +707,7 @@ class SettingsActivity : MIUIActivity() {
) )
) )
) )
val big_mobile_type_icon_binding = getDataBinding( val bigMobileTypeIconBinding = getDataBinding(
SPUtils.getBoolean( SPUtils.getBoolean(
activity, activity,
"big_mobile_type_icon", "big_mobile_type_icon",
@@ -718,7 +726,7 @@ class SettingsActivity : MIUIActivity() {
), ),
SwitchV( SwitchV(
"big_mobile_type_icon", "big_mobile_type_icon",
dataBindingSend = big_mobile_type_icon_binding.bindingSend dataBindingSend = bigMobileTypeIconBinding.bindingSend
) )
) )
) )
@@ -728,7 +736,7 @@ class SettingsActivity : MIUIActivity() {
textId = R.string.big_mobile_type_icon_bold textId = R.string.big_mobile_type_icon_bold
), ),
SwitchV("big_mobile_type_icon_bold", true), SwitchV("big_mobile_type_icon_bold", true),
dataBindingRecv = big_mobile_type_icon_binding.binding.getRecv(2) dataBindingRecv = bigMobileTypeIconBinding.binding.getRecv(2)
) )
) )
add( add(
@@ -764,7 +772,7 @@ class SettingsActivity : MIUIActivity() {
} }
show() show()
} }
}), dataBindingRecv = big_mobile_type_icon_binding.binding.getRecv(2) }), dataBindingRecv = bigMobileTypeIconBinding.binding.getRecv(2)
) )
) )
add( add(
@@ -813,7 +821,7 @@ class SettingsActivity : MIUIActivity() {
} }
show() show()
} }
}, dataBindingRecv = big_mobile_type_icon_binding.binding.getRecv(2) }, dataBindingRecv = bigMobileTypeIconBinding.binding.getRecv(2)
) )
) )
add( add(
@@ -862,7 +870,7 @@ class SettingsActivity : MIUIActivity() {
} }
show() show()
} }
}, dataBindingRecv = big_mobile_type_icon_binding.binding.getRecv(2) }, dataBindingRecv = bigMobileTypeIconBinding.binding.getRecv(2)
) )
) )
add( add(
@@ -947,7 +955,7 @@ class SettingsActivity : MIUIActivity() {
) )
) )
val status_bar_dual_row_network_speed_binding = getDataBinding( val statusBarDualRowNetworkSpeedBinding = getDataBinding(
SPUtils.getBoolean( SPUtils.getBoolean(
activity, activity,
"status_bar_dual_row_network_speed", "status_bar_dual_row_network_speed",
@@ -967,7 +975,7 @@ class SettingsActivity : MIUIActivity() {
), ),
SwitchV( SwitchV(
"status_bar_dual_row_network_speed", "status_bar_dual_row_network_speed",
dataBindingSend = status_bar_dual_row_network_speed_binding.bindingSend dataBindingSend = statusBarDualRowNetworkSpeedBinding.bindingSend
) )
) )
) )
@@ -1002,7 +1010,7 @@ class SettingsActivity : MIUIActivity() {
0 0
)].toString() )].toString()
), ),
dataBindingRecv = status_bar_dual_row_network_speed_binding.binding.getRecv(2) dataBindingRecv = statusBarDualRowNetworkSpeedBinding.binding.getRecv(2)
) )
) )
add( add(
@@ -1044,13 +1052,13 @@ class SettingsActivity : MIUIActivity() {
) )
}" }"
), ),
dataBindingRecv = status_bar_dual_row_network_speed_binding.binding.getRecv(2) dataBindingRecv = statusBarDualRowNetworkSpeedBinding.binding.getRecv(2)
) )
) )
add( add(
TextV( TextV(
resId = R.string.status_bar_network_speed_dual_row_size, resId = R.string.status_bar_network_speed_dual_row_size,
dataBindingRecv = status_bar_dual_row_network_speed_binding.binding.getRecv(2) dataBindingRecv = statusBarDualRowNetworkSpeedBinding.binding.getRecv(2)
) )
) )
add( add(
@@ -1059,14 +1067,14 @@ class SettingsActivity : MIUIActivity() {
0, 0,
9, 9,
0, 0,
dataBindingRecv = status_bar_dual_row_network_speed_binding.binding.getRecv(2) dataBindingRecv = statusBarDualRowNetworkSpeedBinding.binding.getRecv(2)
) )
) )
add(LineV()) add(LineV())
add(TitleTextV(resId = R.string.notification_center)) add(TitleTextV(resId = R.string.notification_center))
val show_weather_main_switch_binding = getDataBinding( val showWeatherMainSwitchBinding = getDataBinding(
SPUtils.getBoolean( SPUtils.getBoolean(
activity, activity,
"notification_weather", "notification_weather",
@@ -1085,7 +1093,7 @@ class SettingsActivity : MIUIActivity() {
), ),
SwitchV( SwitchV(
"notification_weather", "notification_weather",
dataBindingSend = show_weather_main_switch_binding.bindingSend dataBindingSend = showWeatherMainSwitchBinding.bindingSend
) )
) )
) )
@@ -1095,14 +1103,14 @@ class SettingsActivity : MIUIActivity() {
textId = R.string.show_city, textId = R.string.show_city,
), ),
SwitchV("notification_weather_city"), SwitchV("notification_weather_city"),
dataBindingRecv = show_weather_main_switch_binding.binding.getRecv(2) dataBindingRecv = showWeatherMainSwitchBinding.binding.getRecv(2)
) )
) )
add(LineV()) add(LineV())
add(TitleTextV(resId = R.string.control_center)) add(TitleTextV(resId = R.string.control_center))
val control_center_weather_binding = getDataBinding( val controlCenterWeatherBinding = getDataBinding(
SPUtils.getBoolean( SPUtils.getBoolean(
activity, activity,
"control_center_weather", "control_center_weather",
@@ -1123,7 +1131,7 @@ class SettingsActivity : MIUIActivity() {
), ),
SwitchV( SwitchV(
"control_center_weather", "control_center_weather",
dataBindingSend = control_center_weather_binding.bindingSend dataBindingSend = controlCenterWeatherBinding.bindingSend
) )
) )
) )
@@ -1133,7 +1141,7 @@ class SettingsActivity : MIUIActivity() {
textId = R.string.show_city, textId = R.string.show_city,
), ),
SwitchV("control_center_weather_city"), SwitchV("control_center_weather_city"),
dataBindingRecv = control_center_weather_binding.binding.getRecv(2) dataBindingRecv = controlCenterWeatherBinding.binding.getRecv(2)
) )
) )
@@ -1185,7 +1193,7 @@ class SettingsActivity : MIUIActivity() {
add(LineV()) add(LineV())
add(TitleTextV(resId = R.string.old_quick_settings_panel)) add(TitleTextV(resId = R.string.old_quick_settings_panel))
val old_qs_custom_switch_binding = getDataBinding( val oldQSCustomSwitchBinding = getDataBinding(
SPUtils.getBoolean( SPUtils.getBoolean(
activity, activity,
"old_qs_custom_switch", "old_qs_custom_switch",
@@ -1205,7 +1213,7 @@ class SettingsActivity : MIUIActivity() {
), ),
SwitchV( SwitchV(
"old_qs_custom_switch", "old_qs_custom_switch",
dataBindingSend = old_qs_custom_switch_binding.bindingSend dataBindingSend = oldQSCustomSwitchBinding.bindingSend
) )
) )
) )
@@ -1213,7 +1221,7 @@ class SettingsActivity : MIUIActivity() {
add( add(
TextV( TextV(
resId = R.string.qs_custom_rows, resId = R.string.qs_custom_rows,
dataBindingRecv = old_qs_custom_switch_binding.binding.getRecv(2) dataBindingRecv = oldQSCustomSwitchBinding.binding.getRecv(2)
) )
) )
add( add(
@@ -1222,7 +1230,7 @@ class SettingsActivity : MIUIActivity() {
1, 1,
6, 6,
3, 3,
dataBindingRecv = old_qs_custom_switch_binding.binding.getRecv(2) dataBindingRecv = oldQSCustomSwitchBinding.binding.getRecv(2)
) )
) )
@@ -1230,7 +1238,7 @@ class SettingsActivity : MIUIActivity() {
add( add(
TextV( TextV(
resId = R.string.qs_custom_rows_horizontal, resId = R.string.qs_custom_rows_horizontal,
dataBindingRecv = old_qs_custom_switch_binding.binding.getRecv(2) dataBindingRecv = oldQSCustomSwitchBinding.binding.getRecv(2)
) )
) )
add( add(
@@ -1239,14 +1247,14 @@ class SettingsActivity : MIUIActivity() {
1, 1,
3, 3,
2, 2,
dataBindingRecv = old_qs_custom_switch_binding.binding.getRecv(2) dataBindingRecv = oldQSCustomSwitchBinding.binding.getRecv(2)
) )
) )
add( add(
TextV( TextV(
resId = R.string.qs_custom_columns, resId = R.string.qs_custom_columns,
dataBindingRecv = old_qs_custom_switch_binding.binding.getRecv(2) dataBindingRecv = oldQSCustomSwitchBinding.binding.getRecv(2)
) )
) )
add( add(
@@ -1255,13 +1263,13 @@ class SettingsActivity : MIUIActivity() {
1, 1,
7, 7,
4, 4,
dataBindingRecv = old_qs_custom_switch_binding.binding.getRecv(2) dataBindingRecv = oldQSCustomSwitchBinding.binding.getRecv(2)
) )
) )
add( add(
TextV( TextV(
resId = R.string.qs_custom_columns_unexpanded, resId = R.string.qs_custom_columns_unexpanded,
dataBindingRecv = old_qs_custom_switch_binding.binding.getRecv(2) dataBindingRecv = oldQSCustomSwitchBinding.binding.getRecv(2)
) )
) )
add( add(
@@ -1270,7 +1278,7 @@ class SettingsActivity : MIUIActivity() {
1, 1,
7, 7,
5, 5,
dataBindingRecv = old_qs_custom_switch_binding.binding.getRecv(2) dataBindingRecv = oldQSCustomSwitchBinding.binding.getRecv(2)
) )
) )
} }
@@ -1420,6 +1428,16 @@ class SettingsActivity : MIUIActivity() {
) )
) )
add(LineV()) add(LineV())
add(TitleTextV(resId = R.string.cast))
add(
TextSummaryWithSwitchV(
TextSummaryV(
textId = R.string.force_support_send_app,
),
SwitchV("force_support_send_app")
)
)
add(LineV())
add(TitleTextV(resId = R.string.remove_ad)) add(TitleTextV(resId = R.string.remove_ad))
add( add(
TextSummaryWithSwitchV( TextSummaryWithSwitchV(

View File

@@ -1,46 +0,0 @@
package com.lt2333.simplicitytools.hook
import com.github.kyuubiran.ezxhelper.init.EzXHelperInit
import com.lt2333.simplicitytools.BuildConfig
import com.lt2333.simplicitytools.hook.app.*
import de.robv.android.xposed.IXposedHookLoadPackage
import de.robv.android.xposed.IXposedHookZygoteInit
import de.robv.android.xposed.XSharedPreferences
import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam
class MainHook : IXposedHookLoadPackage,IXposedHookZygoteInit {
private var prefs = XSharedPreferences(BuildConfig.APPLICATION_ID, "config")
override fun initZygote(startupParam: IXposedHookZygoteInit.StartupParam) {
EzXHelperInit.initZygote(startupParam)
}
override fun handleLoadPackage(lpparam: LoadPackageParam) {
if (prefs.getBoolean("main_switch", true)) {
EzXHelperInit.initHandleLoadPackage(lpparam)
EzXHelperInit.setEzClassLoader(lpparam.classLoader)
when (lpparam.packageName) {
//Android
"android" -> Android().handleLoadPackage(lpparam)
//系统界面
"com.android.systemui" -> SystemUI().handleLoadPackage(lpparam)
//电量与性能
"com.miui.powerkeeper" -> PowerKeeper().handleLoadPackage(lpparam)
//桌面
"com.miui.home" -> MiuiHome().handleLoadPackage(lpparam)
//手机管家
"com.miui.securitycenter" -> SecurityCenter().handleLoadPackage(lpparam)
//相册编辑
"com.miui.mediaeditor" -> MediaEditor().handleLoadPackage(lpparam)
//系统更新
"com.android.updater" -> Updater().handleLoadPackage(lpparam)
//设置
"com.android.settings" -> Settings().handleLoadPackage(lpparam)
//主题壁纸
"com.android.thememanager" -> ThemeManager().handleLoadPackage(lpparam)
//截屏
"com.miui.screenshot" -> ScreenShot().handleLoadPackage(lpparam)
}
}
}
}

View File

@@ -0,0 +1,38 @@
package com.lt2333.simplicitytools.hook
import com.lt2333.simplicitytools.BuildConfig
import com.lt2333.simplicitytools.hook.app.*
import com.lt2333.simplicitytools.util.xposed.EasyXposedInit
import com.lt2333.simplicitytools.util.xposed.base.AppRegister
import de.robv.android.xposed.IXposedHookZygoteInit
import de.robv.android.xposed.XSharedPreferences
import de.robv.android.xposed.callbacks.XC_LoadPackage
class XposedEntry: EasyXposedInit() {
private var prefs = XSharedPreferences(BuildConfig.APPLICATION_ID, "config")
override val registeredApp: List<AppRegister> = listOf(
Android, // Android
SystemUI, // 系统界面
PowerKeeper, // 电量与性能
MiuiHome, // 桌面
SecurityCenter, // 手机管家
MediaEditor, // 相册编辑
Updater, // 系统更新
Settings, // 设置
ThemeManager, // 主题壁纸
ScreenShot, // 截屏
Cast, //投屏
)
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam?) {
if (prefs.getBoolean("main_switch", true)) {
super.handleLoadPackage(lpparam)
}
}
override fun initZygote(startupParam: IXposedHookZygoteInit.StartupParam?) {
super.initZygote(startupParam)
}
}

View File

@@ -5,22 +5,25 @@ import com.lt2333.simplicitytools.hook.app.android.DisableFlagSecure
import com.lt2333.simplicitytools.hook.app.android.MaxWallpaperScale import com.lt2333.simplicitytools.hook.app.android.MaxWallpaperScale
import com.lt2333.simplicitytools.hook.app.android.RemoveSmallWindowRestrictions import com.lt2333.simplicitytools.hook.app.android.RemoveSmallWindowRestrictions
import com.lt2333.simplicitytools.hook.app.android.corepatch.CorePatch import com.lt2333.simplicitytools.hook.app.android.corepatch.CorePatch
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.AppRegister
import de.robv.android.xposed.XposedBridge import de.robv.android.xposed.XposedBridge
import de.robv.android.xposed.callbacks.XC_LoadPackage import de.robv.android.xposed.callbacks.XC_LoadPackage
class Android : IXposedHookLoadPackage { object Android: AppRegister() {
override val packageName: String = "android"
override val processName: List<String> = emptyList()
override val logTag: String = "Simplicitytools"
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) { override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
XposedBridge.log("Simplicitytools: 成功 Hook "+javaClass.simpleName) XposedBridge.log("Simplicitytools: 成功 Hook "+javaClass.simpleName)
//核心破解 //核心破解
CorePatch().handleLoadPackage(lpparam) CorePatch().handleLoadPackage(lpparam)
//允许截图
DisableFlagSecure().handleLoadPackage(lpparam) autoInitHooks(lpparam,
//上层显示 DisableFlagSecure, //允许截图
DeleteOnPostNotification().handleLoadPackage(lpparam) DeleteOnPostNotification, //上层显示
//解除小窗限制 RemoveSmallWindowRestrictions, //解除小窗限制
RemoveSmallWindowRestrictions().handleLoadPackage(lpparam) MaxWallpaperScale, //壁纸缩放比例
//壁纸缩放比例 )
MaxWallpaperScale().handleLoadPackage(lpparam)
} }
} }

View File

@@ -0,0 +1,19 @@
package com.lt2333.simplicitytools.hook.app
import com.lt2333.simplicitytools.hook.app.cast.ForceSupportSendApp
import com.lt2333.simplicitytools.util.xposed.base.AppRegister
import de.robv.android.xposed.XposedBridge
import de.robv.android.xposed.callbacks.XC_LoadPackage
object Cast: AppRegister() {
override val packageName: String = "com.milink.service"
override val processName: List<String> = emptyList()
override val logTag: String = "Simplicitytools"
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
XposedBridge.log("Simplicitytools: 成功 Hook "+javaClass.simpleName)
autoInitHooks(lpparam,
ForceSupportSendApp, //强制允许所有应用接力
)
}
}

View File

@@ -1,14 +1,19 @@
package com.lt2333.simplicitytools.hook.app package com.lt2333.simplicitytools.hook.app
import com.lt2333.simplicitytools.hook.app.mediaeditor.UnlockUnlimitedCropping import com.lt2333.simplicitytools.hook.app.mediaeditor.UnlockUnlimitedCropping
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.AppRegister
import de.robv.android.xposed.XposedBridge import de.robv.android.xposed.XposedBridge
import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam import de.robv.android.xposed.callbacks.XC_LoadPackage
class MediaEditor : IXposedHookLoadPackage { object MediaEditor: AppRegister() {
override fun handleLoadPackage(lpparam: LoadPackageParam) { override val packageName: String = "com.miui.mediaeditor"
override val processName: List<String> = emptyList()
override val logTag: String = "Simplicitytools"
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
XposedBridge.log("Simplicitytools: 成功 Hook "+javaClass.simpleName) XposedBridge.log("Simplicitytools: 成功 Hook "+javaClass.simpleName)
//解锁裁切最小值 autoInitHooks(lpparam,
UnlockUnlimitedCropping().handleLoadPackage(lpparam) UnlockUnlimitedCropping, //解锁裁切最小值
)
} }
} }

View File

@@ -2,16 +2,20 @@ package com.lt2333.simplicitytools.hook.app
import com.lt2333.simplicitytools.hook.app.miuihome.AlwaysDisplayTime import com.lt2333.simplicitytools.hook.app.miuihome.AlwaysDisplayTime
import com.lt2333.simplicitytools.hook.app.miuihome.DoubleTapToSleep import com.lt2333.simplicitytools.hook.app.miuihome.DoubleTapToSleep
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.AppRegister
import de.robv.android.xposed.XposedBridge import de.robv.android.xposed.XposedBridge
import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam import de.robv.android.xposed.callbacks.XC_LoadPackage
class MiuiHome : IXposedHookLoadPackage { object MiuiHome: AppRegister() {
override fun handleLoadPackage(lpparam: LoadPackageParam) { override val packageName: String = "com.miui.home"
override val processName: List<String> = emptyList()
override val logTag: String = "Simplicitytools"
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
XposedBridge.log("Simplicitytools: 成功 Hook "+javaClass.simpleName) XposedBridge.log("Simplicitytools: 成功 Hook "+javaClass.simpleName)
//时钟显示时钟 autoInitHooks(lpparam,
AlwaysDisplayTime().handleLoadPackage(lpparam) AlwaysDisplayTime, //时钟显示时钟
//双击锁屏 DoubleTapToSleep, //双击锁屏
DoubleTapToSleep().handleLoadPackage(lpparam) )
} }
} }

View File

@@ -2,18 +2,20 @@ package com.lt2333.simplicitytools.hook.app
import com.lt2333.simplicitytools.hook.app.powerkeeper.LockMaxFps import com.lt2333.simplicitytools.hook.app.powerkeeper.LockMaxFps
import com.lt2333.simplicitytools.hook.app.powerkeeper.PreventRecoveryOfBatteryOptimizationWhitelist import com.lt2333.simplicitytools.hook.app.powerkeeper.PreventRecoveryOfBatteryOptimizationWhitelist
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.AppRegister
import de.robv.android.xposed.XposedBridge import de.robv.android.xposed.XposedBridge
import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam import de.robv.android.xposed.callbacks.XC_LoadPackage
class PowerKeeper : IXposedHookLoadPackage { object PowerKeeper: AppRegister() {
override val packageName: String = "com.miui.powerkeeper"
override val processName: List<String> = emptyList()
override val logTag: String = "Simplicitytools"
override fun handleLoadPackage(lpparam: LoadPackageParam) { override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
XposedBridge.log("Simplicitytools: 成功 Hook "+javaClass.simpleName) XposedBridge.log("Simplicitytools: 成功 Hook "+javaClass.simpleName)
//锁定最高刷新率 autoInitHooks(lpparam,
LockMaxFps().handleLoadPackage(lpparam) LockMaxFps, //锁定最高刷新率
//防止恢复电池优化白名单 PreventRecoveryOfBatteryOptimizationWhitelist, //防止恢复电池优化白名单
PreventRecoveryOfBatteryOptimizationWhitelist().handleLoadPackage(lpparam) )
} }
} }

View File

@@ -1,15 +1,19 @@
package com.lt2333.simplicitytools.hook.app package com.lt2333.simplicitytools.hook.app
import com.lt2333.simplicitytools.hook.app.screenshot.UnlockUnlimitedCropping import com.lt2333.simplicitytools.hook.app.screenshot.UnlockUnlimitedCropping
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.AppRegister
import de.robv.android.xposed.XposedBridge import de.robv.android.xposed.XposedBridge
import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam import de.robv.android.xposed.callbacks.XC_LoadPackage
class ScreenShot : IXposedHookLoadPackage { object ScreenShot: AppRegister() {
override val packageName: String = "com.miui.screenshot"
override val processName: List<String> = emptyList()
override val logTag: String = "Simplicitytools"
override fun handleLoadPackage(lpparam: LoadPackageParam) { override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
XposedBridge.log("Simplicitytools: 成功 Hook " + javaClass.simpleName) XposedBridge.log("Simplicitytools: 成功 Hook " + javaClass.simpleName)
//锁定最高刷新率 autoInitHooks(lpparam,
UnlockUnlimitedCropping().handleLoadPackage(lpparam) UnlockUnlimitedCropping, //锁定最高刷新率
)
} }
} }

View File

@@ -1,23 +1,23 @@
package com.lt2333.simplicitytools.hook.app package com.lt2333.simplicitytools.hook.app
import com.lt2333.simplicitytools.hook.app.securitycenter.* import com.lt2333.simplicitytools.hook.app.securitycenter.*
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.AppRegister
import de.robv.android.xposed.XposedBridge import de.robv.android.xposed.XposedBridge
import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam import de.robv.android.xposed.callbacks.XC_LoadPackage
class SecurityCenter : IXposedHookLoadPackage { object SecurityCenter: AppRegister() {
override val packageName: String = "com.miui.securitycenter"
override val processName: List<String> = emptyList()
override val logTag: String = "Simplicitytools"
override fun handleLoadPackage(lpparam: LoadPackageParam) { override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
XposedBridge.log("Simplicitytools: 成功 Hook " + javaClass.simpleName) XposedBridge.log("Simplicitytools: 成功 Hook " + javaClass.simpleName)
//跳过 5/10秒等待时间 autoInitHooks(lpparam,
SkipWaitingTime().handleLoadPackage(lpparam) SkipWaitingTime, //跳过 5/10秒等待时间
//锁定 100分 LockOneHundred, //锁定 100分
LockOneHundred().handleLoadPackage(lpparam) RemoveMacroBlacklist, //去除自动连招黑名单
//去除自动连招黑名单 ShowBatteryTemperature, //显示电池温度
RemoveMacroBlacklist().handleLoadPackage(lpparam) RemoveOpenAppConfirmationPopup, //去除打开应用弹窗
//显示电池温度 )
ShowBatteryTemperature().handleLoadPackage(lpparam)
//去除打开应用弹窗
RemoveOpenAppConfirmationPopup().handleLoadPackage(lpparam)
} }
} }

View File

@@ -1,13 +1,19 @@
package com.lt2333.simplicitytools.hook.app package com.lt2333.simplicitytools.hook.app
import com.lt2333.simplicitytools.hook.app.settings.ShowNotificationImportance import com.lt2333.simplicitytools.hook.app.settings.ShowNotificationImportance
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.AppRegister
import de.robv.android.xposed.XposedBridge import de.robv.android.xposed.XposedBridge
import de.robv.android.xposed.callbacks.XC_LoadPackage import de.robv.android.xposed.callbacks.XC_LoadPackage
class Settings: IXposedHookLoadPackage { object Settings: AppRegister() {
override val packageName: String = "com.android.settings"
override val processName: List<String> = emptyList()
override val logTag: String = "Simplicitytools"
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) { override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
XposedBridge.log("Simplicitytools: 成功 Hook "+javaClass.simpleName) XposedBridge.log("Simplicitytools: 成功 Hook "+javaClass.simpleName)
ShowNotificationImportance().handleLoadPackage(lpparam) autoInitHooks(lpparam,
ShowNotificationImportance, //显示通知重要程度
)
} }
} }

View File

@@ -1,67 +1,45 @@
package com.lt2333.simplicitytools.hook.app package com.lt2333.simplicitytools.hook.app
import com.lt2333.simplicitytools.hook.app.systemui.* import com.lt2333.simplicitytools.hook.app.systemui.*
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.AppRegister
import de.robv.android.xposed.XposedBridge import de.robv.android.xposed.XposedBridge
import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam import de.robv.android.xposed.callbacks.XC_LoadPackage
class SystemUI : IXposedHookLoadPackage { object SystemUI: AppRegister() {
override val packageName: String = "com.android.systemui"
override val processName: List<String> = emptyList()
override val logTag: String = "Simplicitytools"
override fun handleLoadPackage(lpparam: LoadPackageParam) { override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
XposedBridge.log("Simplicitytools: 成功 Hook "+javaClass.simpleName) XposedBridge.log("Simplicitytools: 成功 Hook "+javaClass.simpleName)
//隐藏状态栏图标 autoInitHooks(lpparam,
HideStatusBarIcon().handleLoadPackage(lpparam) HideStatusBarIcon, //隐藏状态栏图标
//隐藏电池 HideBatteryIcon, //隐藏电池
HideBatteryIcon().handleLoadPackage(lpparam) HideHDIcon, //隐藏HD图标
//隐藏HD图标 HideSimIcon, //隐藏SIM卡图标
HideHDIcon().handleLoadPackage(lpparam) HideMobileActivityIcon, //隐藏移动箭头图标
//隐藏SIM卡图标 HideMobileTypeIcon, //隐藏移动类型图标
HideSimIcon().handleLoadPackage(lpparam) HideStatusBarNetworkSpeedSecond, //隐藏状态栏网速/s
//隐藏移动箭头图标 HideWifiActivityIcon, //隐藏WIFI活动箭头图标
HideMobileActivityIcon().handleLoadPackage(lpparam) RemoveTheMaximumNumberOfNotificationIcons, //移除通知图标上限
//隐藏移动类型图标 StatusBarNetworkSpeedRefreshSpeed, //状态栏网速秒刷新
HideMobileTypeIcon().handleLoadPackage(lpparam) StatusBarTimeCustomization, //状态栏时钟自定义
//隐藏状态栏网速/s RemoveTheLeftSideOfTheLockScreen, //移除锁屏负一屏功能
HideStatusBarNetworkSpeedSecond().handleLoadPackage(lpparam) RemoveLockScreenCamera, //移除锁屏相机功能
//隐藏WIFI活动箭头图标 NotificationWeather, //通知面板天气
HideWifiActivityIcon().handleLoadPackage(lpparam) OldNotificationWeather,
//移除通知图标上限 ControlCenterWeather, //控制中心天气
RemoveTheMaximumNumberOfNotificationIcons().handleLoadPackage(lpparam) //StatusBarCurrent, //TODO状态栏电流
//状态栏网速秒刷新 StatusBarLayout, //状态栏布局
StatusBarNetworkSpeedRefreshSpeed().handleLoadPackage(lpparam) HideNetworkSpeedSplitter, //隐藏时钟与实时网速之间的分隔符
//状态栏时钟自定义 WaveCharge, //Alpha充电动画
StatusBarTimeCustomization().handleLoadPackage(lpparam) LockScreenCurrent, //锁屏电流
//移除锁屏负一屏功能 LockScreenDoubleTapToSleep, //锁屏下双击锁屏
RemoveTheLeftSideOfTheLockScreen().handleLoadPackage(lpparam) StatusBarDoubleTapToSleep, //双击状态栏锁屏
//移除锁屏相机功能 OldQSCustom, //旧版快速设置自定义
RemoveLockScreenCamera().handleLoadPackage(lpparam) DoubleLineNetworkSpeed, //双排网速
//通知面板天气 StatusBarBigMobileTypeIcon, //大移动类型
NotificationWeather().handleLoadPackage(lpparam) BatteryPercentage, //电量百分比
OldNotificationWeather().handleLoadPackage(lpparam) )
//控制中心天气
ControlCenterWeather().handleLoadPackage(lpparam)
//TODO状态栏电流
//StatusBarCurrent().handleLoadPackage(lpparam)
//状态栏布局
StatusBarLayout().handleLoadPackage(lpparam)
//隐藏时钟与实时网速之间的分隔符
HideNetworkSpeedSplitter().handleLoadPackage(lpparam)
//Alpha充电动画
WaveCharge().handleLoadPackage(lpparam)
//锁屏电流
LockScreenCurrent().handleLoadPackage(lpparam)
//锁屏下双击锁屏
LockScreenDoubleTapToSleep().handleLoadPackage(lpparam)
//双击状态栏锁屏
StatusBarDoubleTapToSleep().handleLoadPackage(lpparam)
//旧版快速设置自定义
OldQSCustom().handleLoadPackage(lpparam)
//双排网速
DoubleLineNetworkSpeed().handleLoadPackage(lpparam)
//大移动类型
StatusBarBigMobileTypeIcon().handleLoadPackage(lpparam)
//电量百分比
BatteryPercentage().handleLoadPackage(lpparam)
} }
} }

View File

@@ -1,14 +1,19 @@
package com.lt2333.simplicitytools.hook.app package com.lt2333.simplicitytools.hook.app
import com.lt2333.simplicitytools.hook.app.thememanager.RemoveAds import com.lt2333.simplicitytools.hook.app.thememanager.RemoveAds
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.AppRegister
import de.robv.android.xposed.XposedBridge import de.robv.android.xposed.XposedBridge
import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam import de.robv.android.xposed.callbacks.XC_LoadPackage
class ThemeManager : IXposedHookLoadPackage { object ThemeManager: AppRegister() {
override fun handleLoadPackage(lpparam: LoadPackageParam) { override val packageName: String = "com.android.thememanager"
override val processName: List<String> = emptyList()
override val logTag: String = "Simplicitytools"
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
XposedBridge.log("Simplicitytools: 成功 Hook "+javaClass.simpleName) XposedBridge.log("Simplicitytools: 成功 Hook "+javaClass.simpleName)
//移除主题壁纸的广告 autoInitHooks(lpparam,
RemoveAds().handleLoadPackage(lpparam) RemoveAds, //移除主题壁纸的广告
)
} }
} }

View File

@@ -2,11 +2,15 @@ package com.lt2333.simplicitytools.hook.app
import com.lt2333.simplicitytools.util.XSPUtils import com.lt2333.simplicitytools.util.XSPUtils
import com.lt2333.simplicitytools.util.hookBeforeMethod import com.lt2333.simplicitytools.util.hookBeforeMethod
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.AppRegister
import de.robv.android.xposed.XposedHelpers import de.robv.android.xposed.XposedHelpers
import de.robv.android.xposed.callbacks.XC_LoadPackage import de.robv.android.xposed.callbacks.XC_LoadPackage
class Updater : IXposedHookLoadPackage { object Updater: AppRegister() {
override val packageName: String = "com.android.updater"
override val processName: List<String> = emptyList()
override val logTag: String = "Simplicitytools"
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) { override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
if (XSPUtils.getBoolean("remove_ota_validate", false)) { if (XSPUtils.getBoolean("remove_ota_validate", false)) {
var letter = 'a' var letter = 'a'

View File

@@ -2,15 +2,16 @@ package com.lt2333.simplicitytools.hook.app.android
import com.lt2333.simplicitytools.util.hasEnable import com.lt2333.simplicitytools.util.hasEnable
import com.lt2333.simplicitytools.util.hookBeforeMethod import com.lt2333.simplicitytools.util.hookBeforeMethod
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.callbacks.XC_LoadPackage
class DeleteOnPostNotification : IXposedHookLoadPackage { object DeleteOnPostNotification : HookRegister() {
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
"com.android.server.wm.AlertWindowNotification".hookBeforeMethod(lpparam.classLoader, "onPostNotification") { override fun init() {
"com.android.server.wm.AlertWindowNotification".hookBeforeMethod(getDefaultClassLoader(), "onPostNotification") {
hasEnable("delete_on_post_notification") { hasEnable("delete_on_post_notification") {
it.result = null it.result = null
} }
} }
} }
} }

View File

@@ -2,15 +2,16 @@ package com.lt2333.simplicitytools.hook.app.android
import com.lt2333.simplicitytools.util.hasEnable import com.lt2333.simplicitytools.util.hasEnable
import com.lt2333.simplicitytools.util.hookBeforeMethod import com.lt2333.simplicitytools.util.hookBeforeMethod
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.callbacks.XC_LoadPackage
class DisableFlagSecure : IXposedHookLoadPackage { object DisableFlagSecure : HookRegister() {
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
"com.android.server.wm.WindowState".hookBeforeMethod(lpparam.classLoader, "isSecureLocked") { override fun init() {
"com.android.server.wm.WindowState".hookBeforeMethod(getDefaultClassLoader(), "isSecureLocked") {
hasEnable("disable_flag_secure") { hasEnable("disable_flag_secure") {
it.result = false it.result = false
} }
} }
} }
} }

View File

@@ -3,15 +3,15 @@ package com.lt2333.simplicitytools.hook.app.android
import com.lt2333.simplicitytools.util.XSPUtils import com.lt2333.simplicitytools.util.XSPUtils
import com.lt2333.simplicitytools.util.hookBeforeMethod import com.lt2333.simplicitytools.util.hookBeforeMethod
import com.lt2333.simplicitytools.util.setFloatField import com.lt2333.simplicitytools.util.setFloatField
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.callbacks.XC_LoadPackage
class MaxWallpaperScale : IXposedHookLoadPackage { object MaxWallpaperScale : HookRegister() {
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
"com.android.server.wm.WallpaperController".hookBeforeMethod(lpparam.classLoader, "zoomOutToScale", Float::class.java) { override fun init() {
"com.android.server.wm.WallpaperController".hookBeforeMethod(getDefaultClassLoader(), "zoomOutToScale", Float::class.java) {
val value = XSPUtils.getFloat("max_wallpaper_scale", 1.1f) val value = XSPUtils.getFloat("max_wallpaper_scale", 1.1f)
it.thisObject.setFloatField("mMaxWallpaperScale", value) it.thisObject.setFloatField("mMaxWallpaperScale", value)
} }
} }
} }

View File

@@ -4,36 +4,35 @@ import android.content.Context
import com.lt2333.simplicitytools.util.hasEnable import com.lt2333.simplicitytools.util.hasEnable
import com.lt2333.simplicitytools.util.hookAfterMethod import com.lt2333.simplicitytools.util.hookAfterMethod
import com.lt2333.simplicitytools.util.hookBeforeMethod import com.lt2333.simplicitytools.util.hookBeforeMethod
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.callbacks.XC_LoadPackage
class RemoveSmallWindowRestrictions : IXposedHookLoadPackage { object RemoveSmallWindowRestrictions : HookRegister() {
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
override fun init() {
// 强制所有活动设为可以调整大小 // 强制所有活动设为可以调整大小
"com.android.server.wm.Task".hookBeforeMethod(lpparam.classLoader, "isResizeable") { "com.android.server.wm.Task".hookBeforeMethod(getDefaultClassLoader(), "isResizeable") {
hasEnable("remove_small_window_restrictions") { hasEnable("remove_small_window_restrictions") {
it.result = true it.result = true
} }
} }
"android.util.MiuiMultiWindowAdapter".hookAfterMethod(lpparam.classLoader, "getFreeformBlackList") { "android.util.MiuiMultiWindowAdapter".hookAfterMethod(getDefaultClassLoader(), "getFreeformBlackList") {
hasEnable("remove_small_window_restrictions") { hasEnable("remove_small_window_restrictions") {
it.result = (it.result as MutableList<*>).apply { clear() } it.result = (it.result as MutableList<*>).apply { clear() }
} }
} }
"android.util.MiuiMultiWindowAdapter".hookAfterMethod(lpparam.classLoader, "getFreeformBlackListFromCloud", Context::class.java) { "android.util.MiuiMultiWindowAdapter".hookAfterMethod(getDefaultClassLoader(), "getFreeformBlackListFromCloud", Context::class.java) {
hasEnable("remove_small_window_restrictions") { hasEnable("remove_small_window_restrictions") {
it.result = (it.result as MutableList<*>).apply { clear() } it.result = (it.result as MutableList<*>).apply { clear() }
} }
} }
"android.util.MiuiMultiWindowUtils".hookAfterMethod(lpparam.classLoader, "supportFreeform") { "android.util.MiuiMultiWindowUtils".hookAfterMethod(getDefaultClassLoader(), "supportFreeform") {
hasEnable("remove_small_window_restrictions") { hasEnable("remove_small_window_restrictions") {
it.result = true it.result = true
} }
} }
} }
} }

View File

@@ -0,0 +1,22 @@
package com.lt2333.simplicitytools.hook.app.cast
import com.github.kyuubiran.ezxhelper.utils.findMethod
import com.github.kyuubiran.ezxhelper.utils.hookMethod
import com.lt2333.simplicitytools.util.hasEnable
import com.lt2333.simplicitytools.util.xposed.base.HookRegister
object ForceSupportSendApp: HookRegister() {
override fun init() {
findMethod("com.xiaomi.mirror.synergy.MiuiSynergySdk") {
name == "isSupportSendApp"
}.hookMethod {
after { param ->
hasEnable("force_support_send_app") {
param.result = true
}
}
}
}
}

View File

@@ -1,17 +1,17 @@
package com.lt2333.simplicitytools.hook.app.mediaeditor package com.lt2333.simplicitytools.hook.app.mediaeditor
import com.lt2333.simplicitytools.util.XSPUtils import com.lt2333.simplicitytools.util.XSPUtils
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.XC_MethodHook import de.robv.android.xposed.XC_MethodHook
import de.robv.android.xposed.XposedHelpers import de.robv.android.xposed.XposedHelpers
import de.robv.android.xposed.callbacks.XC_LoadPackage
class UnlockUnlimitedCropping :IXposedHookLoadPackage { object UnlockUnlimitedCropping : HookRegister() {
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
override fun init() {
//解锁图库裁切最小值 //解锁图库裁切最小值
val classIfExists = XposedHelpers.findClassIfExists( val classIfExists = XposedHelpers.findClassIfExists(
"com.miui.gallery.editor.photo.core.imports.obsoletes.Crop\$ResizeDetector", "com.miui.gallery.editor.photo.core.imports.obsoletes.Crop\$ResizeDetector",
lpparam.classLoader getDefaultClassLoader()
) )
XposedHelpers.findAndHookMethod( XposedHelpers.findAndHookMethod(
classIfExists, classIfExists,
@@ -26,7 +26,7 @@ class UnlockUnlimitedCropping :IXposedHookLoadPackage {
//截图无限裁切 //截图无限裁切
val classIfExists2 = XposedHelpers.findClassIfExists( val classIfExists2 = XposedHelpers.findClassIfExists(
"com.miui.gallery.editor.photo.screen.crop.ScreenCropView\$ResizeDetector", "com.miui.gallery.editor.photo.screen.crop.ScreenCropView\$ResizeDetector",
lpparam.classLoader getDefaultClassLoader()
) )
XposedHelpers.findAndHookMethod( XposedHelpers.findAndHookMethod(
@@ -40,4 +40,5 @@ class UnlockUnlimitedCropping :IXposedHookLoadPackage {
} }
}) })
} }
} }

View File

@@ -1,16 +1,16 @@
package com.lt2333.simplicitytools.hook.app.miuihome package com.lt2333.simplicitytools.hook.app.miuihome
import com.lt2333.simplicitytools.util.XSPUtils import com.lt2333.simplicitytools.util.XSPUtils
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.XC_MethodHook import de.robv.android.xposed.XC_MethodHook
import de.robv.android.xposed.XposedHelpers import de.robv.android.xposed.XposedHelpers
import de.robv.android.xposed.callbacks.XC_LoadPackage
class AlwaysDisplayTime : IXposedHookLoadPackage { object AlwaysDisplayTime : HookRegister() {
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
override fun init() {
val classIfExists = XposedHelpers.findClassIfExists( val classIfExists = XposedHelpers.findClassIfExists(
"com.miui.home.launcher.Workspace", "com.miui.home.launcher.Workspace",
lpparam.classLoader getDefaultClassLoader()
) )
XposedHelpers.findAndHookMethod( XposedHelpers.findAndHookMethod(
classIfExists, classIfExists,
@@ -23,4 +23,5 @@ class AlwaysDisplayTime : IXposedHookLoadPackage {
} }
}) })
} }
} }

View File

@@ -4,15 +4,15 @@ import android.content.Context
import android.content.Intent import android.content.Intent
import android.view.MotionEvent import android.view.MotionEvent
import com.lt2333.simplicitytools.util.* import com.lt2333.simplicitytools.util.*
import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import com.yuk.miuihome.module.DoubleTapController import com.yuk.miuihome.module.DoubleTapController
import de.robv.android.xposed.IXposedHookLoadPackage
import de.robv.android.xposed.XposedHelpers import de.robv.android.xposed.XposedHelpers
import de.robv.android.xposed.callbacks.XC_LoadPackage
class DoubleTapToSleep : IXposedHookLoadPackage { object DoubleTapToSleep : HookRegister() {
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
override fun init() {
hasEnable("double_tap_to_sleep") { hasEnable("double_tap_to_sleep") {
"com.miui.home.launcher.Workspace".findClass(lpparam.classLoader) "com.miui.home.launcher.Workspace".findClass(getDefaultClassLoader())
.hookAfterAllConstructors { .hookAfterAllConstructors {
var mDoubleTapControllerEx = var mDoubleTapControllerEx =
XposedHelpers.getAdditionalInstanceField( XposedHelpers.getAdditionalInstanceField(
@@ -28,7 +28,7 @@ class DoubleTapToSleep : IXposedHookLoadPackage {
) )
} }
"com.miui.home.launcher.Workspace".findClass(lpparam.classLoader).hookBeforeMethod( "com.miui.home.launcher.Workspace".findClass(getDefaultClassLoader()).hookBeforeMethod(
"dispatchTouchEvent", MotionEvent::class.java "dispatchTouchEvent", MotionEvent::class.java
) { ) {
val mDoubleTapControllerEx = XposedHelpers.getAdditionalInstanceField( val mDoubleTapControllerEx = XposedHelpers.getAdditionalInstanceField(
@@ -50,4 +50,5 @@ class DoubleTapToSleep : IXposedHookLoadPackage {
} }
} }
} }
} }

View File

@@ -1,16 +1,16 @@
package com.lt2333.simplicitytools.hook.app.powerkeeper package com.lt2333.simplicitytools.hook.app.powerkeeper
import com.lt2333.simplicitytools.util.XSPUtils import com.lt2333.simplicitytools.util.XSPUtils
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.XC_MethodHook import de.robv.android.xposed.XC_MethodHook
import de.robv.android.xposed.XposedHelpers import de.robv.android.xposed.XposedHelpers
import de.robv.android.xposed.callbacks.XC_LoadPackage
class LockMaxFps : IXposedHookLoadPackage { object LockMaxFps : HookRegister() {
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
override fun init() {
val classIfExists = XposedHelpers.findClassIfExists( val classIfExists = XposedHelpers.findClassIfExists(
"com.miui.powerkeeper.statemachine.DisplayFrameSetting", "com.miui.powerkeeper.statemachine.DisplayFrameSetting",
lpparam.classLoader getDefaultClassLoader()
) )
XposedHelpers.findAndHookMethod( XposedHelpers.findAndHookMethod(
classIfExists, classIfExists,
@@ -25,4 +25,5 @@ class LockMaxFps : IXposedHookLoadPackage {
} }
}) })
} }
} }

View File

@@ -1,16 +1,16 @@
package com.lt2333.simplicitytools.hook.app.powerkeeper package com.lt2333.simplicitytools.hook.app.powerkeeper
import com.lt2333.simplicitytools.util.XSPUtils import com.lt2333.simplicitytools.util.XSPUtils
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.XC_MethodHook import de.robv.android.xposed.XC_MethodHook
import de.robv.android.xposed.XposedHelpers import de.robv.android.xposed.XposedHelpers
import de.robv.android.xposed.callbacks.XC_LoadPackage
class PreventRecoveryOfBatteryOptimizationWhitelist : IXposedHookLoadPackage { object PreventRecoveryOfBatteryOptimizationWhitelist : HookRegister() {
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
override fun init() {
val classIfExists = XposedHelpers.findClassIfExists( val classIfExists = XposedHelpers.findClassIfExists(
"com.miui.powerkeeper.statemachine.ForceDozeController", "com.miui.powerkeeper.statemachine.ForceDozeController",
lpparam.classLoader getDefaultClassLoader()
) )
XposedHelpers.findAndHookMethod( XposedHelpers.findAndHookMethod(
classIfExists, classIfExists,
@@ -28,4 +28,5 @@ class PreventRecoveryOfBatteryOptimizationWhitelist : IXposedHookLoadPackage {
} }
}) })
} }
} }

View File

@@ -1,17 +1,17 @@
package com.lt2333.simplicitytools.hook.app.screenshot package com.lt2333.simplicitytools.hook.app.screenshot
import com.lt2333.simplicitytools.util.XSPUtils import com.lt2333.simplicitytools.util.XSPUtils
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.XC_MethodHook import de.robv.android.xposed.XC_MethodHook
import de.robv.android.xposed.XposedHelpers import de.robv.android.xposed.XposedHelpers
import de.robv.android.xposed.callbacks.XC_LoadPackage
class UnlockUnlimitedCropping :IXposedHookLoadPackage { object UnlockUnlimitedCropping : HookRegister() {
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
override fun init() {
//截图无限裁切 //截图无限裁切
val classIfExists2 = XposedHelpers.findClassIfExists( val classIfExists2 = XposedHelpers.findClassIfExists(
"com.miui.gallery.editor.photo.screen.crop.ScreenCropView\$b", "com.miui.gallery.editor.photo.screen.crop.ScreenCropView\$b",
lpparam.classLoader getDefaultClassLoader()
) )
XposedHelpers.findAndHookMethod( XposedHelpers.findAndHookMethod(
@@ -25,4 +25,5 @@ class UnlockUnlimitedCropping :IXposedHookLoadPackage {
} }
}) })
} }
} }

View File

@@ -4,14 +4,13 @@ import android.view.View
import com.lt2333.simplicitytools.util.XSPUtils import com.lt2333.simplicitytools.util.XSPUtils
import com.lt2333.simplicitytools.util.findClass import com.lt2333.simplicitytools.util.findClass
import com.lt2333.simplicitytools.util.hookBeforeMethod import com.lt2333.simplicitytools.util.hookBeforeMethod
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.callbacks.XC_LoadPackage
class LockOneHundred : IXposedHookLoadPackage { object LockOneHundred : HookRegister() {
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
override fun init() {
//防止点击重新检测 //防止点击重新检测
val mainContentFrameClass = "com.miui.securityscan.ui.main.MainContentFrame".findClass(lpparam.classLoader) val mainContentFrameClass = "com.miui.securityscan.ui.main.MainContentFrame".findClass(getDefaultClassLoader())
mainContentFrameClass.hookBeforeMethod("onClick", View::class.java) { mainContentFrameClass.hookBeforeMethod("onClick", View::class.java) {
if (XSPUtils.getBoolean("lock_one_hundred", false)) { if (XSPUtils.getBoolean("lock_one_hundred", false)) {
it.result = null it.result = null
@@ -19,11 +18,12 @@ class LockOneHundred : IXposedHookLoadPackage {
} }
//锁定100分 //锁定100分
var scoreManagerClass = "com.miui.securityscan.scanner.ScoreManager".findClass(lpparam.classLoader) val scoreManagerClass = "com.miui.securityscan.scanner.ScoreManager".findClass(getDefaultClassLoader())
scoreManagerClass.hookBeforeMethod("B") { scoreManagerClass.hookBeforeMethod("B") {
if (XSPUtils.getBoolean("lock_one_hundred", false)) { if (XSPUtils.getBoolean("lock_one_hundred", false)) {
it.result = 0 it.result = 0
} }
} }
} }
} }

View File

@@ -1,18 +1,18 @@
package com.lt2333.simplicitytools.hook.app.securitycenter package com.lt2333.simplicitytools.hook.app.securitycenter
import com.lt2333.simplicitytools.util.XSPUtils import com.lt2333.simplicitytools.util.XSPUtils
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.XC_MethodHook import de.robv.android.xposed.XC_MethodHook
import de.robv.android.xposed.XposedHelpers import de.robv.android.xposed.XposedHelpers
import de.robv.android.xposed.callbacks.XC_LoadPackage
class RemoveMacroBlacklist : IXposedHookLoadPackage { object RemoveMacroBlacklist : HookRegister() {
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
override fun init() {
if (XSPUtils.getBoolean("remove_macro_blacklist", false)) { if (XSPUtils.getBoolean("remove_macro_blacklist", false)) {
var letter = 'a' var letter = 'a'
for (i in 0..25) { for (i in 0..25) {
val classIfExists = XposedHelpers.findClassIfExists( val classIfExists = XposedHelpers.findClassIfExists(
"com.miui.gamebooster.v.$letter" + "0", lpparam.classLoader "com.miui.gamebooster.v.$letter" + "0", getDefaultClassLoader()
) ?: continue ) ?: continue
if (classIfExists.declaredMethods.size in 6..12 && classIfExists.fields.isEmpty() && classIfExists.declaredFields.size >= 2) { if (classIfExists.declaredMethods.size in 6..12 && classIfExists.fields.isEmpty() && classIfExists.declaredFields.size >= 2) {
XposedHelpers.findAndHookMethod(classIfExists, "c", String::class.java, XposedHelpers.findAndHookMethod(classIfExists, "c", String::class.java,
@@ -27,4 +27,5 @@ class RemoveMacroBlacklist : IXposedHookLoadPackage {
} }
} }
} }
} }

View File

@@ -4,12 +4,14 @@ import android.widget.TextView
import com.lt2333.simplicitytools.util.XSPUtils import com.lt2333.simplicitytools.util.XSPUtils
import com.lt2333.simplicitytools.util.findClass import com.lt2333.simplicitytools.util.findClass
import com.lt2333.simplicitytools.util.hookAfterMethod import com.lt2333.simplicitytools.util.hookAfterMethod
import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.IXposedHookLoadPackage import de.robv.android.xposed.IXposedHookLoadPackage
import de.robv.android.xposed.callbacks.XC_LoadPackage import de.robv.android.xposed.callbacks.XC_LoadPackage
class RemoveOpenAppConfirmationPopup : IXposedHookLoadPackage { object RemoveOpenAppConfirmationPopup : HookRegister() {
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
val textViewClass = "android.widget.TextView".findClass(lpparam.classLoader) override fun init() {
val textViewClass = "android.widget.TextView".findClass(getDefaultClassLoader())
textViewClass.hookAfterMethod( textViewClass.hookAfterMethod(
"setText", "setText",
CharSequence::class.java CharSequence::class.java
@@ -31,4 +33,5 @@ class RemoveOpenAppConfirmationPopup : IXposedHookLoadPackage {
} }
} }
} }
} }

View File

@@ -17,16 +17,22 @@ import com.lt2333.simplicitytools.util.XSPUtils
import com.lt2333.simplicitytools.util.findClass import com.lt2333.simplicitytools.util.findClass
import com.lt2333.simplicitytools.util.hookAfterMethod import com.lt2333.simplicitytools.util.hookAfterMethod
import com.lt2333.simplicitytools.util.hookBeforeMethod import com.lt2333.simplicitytools.util.hookBeforeMethod
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.callbacks.XC_LoadPackage
import java.lang.reflect.Field import java.lang.reflect.Field
class ShowBatteryTemperature: IXposedHookLoadPackage { object ShowBatteryTemperature: HookRegister() {
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) { private fun getBatteryTemperature(context: Context): Int {
return context.registerReceiver(
null as BroadcastReceiver?,
IntentFilter("android.intent.action.BATTERY_CHANGED")
)!!.getIntExtra("temperature", 0) / 10
}
override fun init() {
if (!XSPUtils.getBoolean("battery_life_function", false)) return if (!XSPUtils.getBoolean("battery_life_function", false)) return
val a = "com.miui.powercenter.a\$a".findClass(lpparam.classLoader) val a = "com.miui.powercenter.a\$a".findClass(getDefaultClassLoader())
"com.miui.powercenter.a".hookBeforeMethod(lpparam.classLoader, "b", Context::class.java) { "com.miui.powercenter.a".hookBeforeMethod(getDefaultClassLoader(), "b", Context::class.java) {
it.result = getBatteryTemperature(it.args[0] as Context).toString() it.result = getBatteryTemperature(it.args[0] as Context).toString()
} }
a.hookAfterMethod("run") { a.hookAfterMethod("run") {
@@ -59,10 +65,5 @@ class ShowBatteryTemperature: IXposedHookLoadPackage {
linearLayout.addView(tempView) linearLayout.addView(tempView)
} }
} }
private fun getBatteryTemperature(context: Context): Int {
return context.registerReceiver(
null as BroadcastReceiver?,
IntentFilter("android.intent.action.BATTERY_CHANGED")
)!!.getIntExtra("temperature", 0) / 10
}
} }

View File

@@ -4,13 +4,12 @@ import android.widget.TextView
import com.lt2333.simplicitytools.util.XSPUtils import com.lt2333.simplicitytools.util.XSPUtils
import com.lt2333.simplicitytools.util.findClass import com.lt2333.simplicitytools.util.findClass
import com.lt2333.simplicitytools.util.hookBeforeMethod import com.lt2333.simplicitytools.util.hookBeforeMethod
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.callbacks.XC_LoadPackage
class SkipWaitingTime : IXposedHookLoadPackage { object SkipWaitingTime : HookRegister() {
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
val textViewClass = "android.widget.TextView".findClass(lpparam.classLoader) override fun init() {
val textViewClass = "android.widget.TextView".findClass(getDefaultClassLoader())
textViewClass.hookBeforeMethod( textViewClass.hookBeforeMethod(
"setText", "setText",
CharSequence::class.java, CharSequence::class.java,
@@ -35,4 +34,5 @@ class SkipWaitingTime : IXposedHookLoadPackage {
} }
} }
} }
} }

View File

@@ -2,13 +2,13 @@ package com.lt2333.simplicitytools.hook.app.settings
import android.app.NotificationChannel import android.app.NotificationChannel
import com.lt2333.simplicitytools.util.* import com.lt2333.simplicitytools.util.*
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.XposedHelpers import de.robv.android.xposed.XposedHelpers
import de.robv.android.xposed.callbacks.XC_LoadPackage
class ShowNotificationImportance : IXposedHookLoadPackage { object ShowNotificationImportance : HookRegister() {
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
val channelNotificationSettingsClass = "com.android.settings.notification.ChannelNotificationSettings".findClass(lpparam.classLoader) override fun init() {
val channelNotificationSettingsClass = "com.android.settings.notification.ChannelNotificationSettings".findClass(getDefaultClassLoader())
channelNotificationSettingsClass.hookBeforeMethod("removeDefaultPrefs") { channelNotificationSettingsClass.hookBeforeMethod("removeDefaultPrefs") {
if (!XSPUtils.getBoolean("show_notification_importance", false)) return@hookBeforeMethod if (!XSPUtils.getBoolean("show_notification_importance", false)) return@hookBeforeMethod
val importance = it.thisObject.callMethod("findPreference", "importance") ?: return@hookBeforeMethod val importance = it.thisObject.callMethod("findPreference", "importance") ?: return@hookBeforeMethod
@@ -20,7 +20,7 @@ class ShowNotificationImportance : IXposedHookLoadPackage {
it.result = null it.result = null
} }
val dropDownPreferenceClass = XposedHelpers.findClass("androidx.preference.Preference", lpparam.classLoader) val dropDownPreferenceClass = XposedHelpers.findClass("androidx.preference.Preference", getDefaultClassLoader())
dropDownPreferenceClass.hookAfterMethod("callChangeListener", Any::class.java) { dropDownPreferenceClass.hookAfterMethod("callChangeListener", Any::class.java) {
val channelNotificationSettings = XposedHelpers.getAdditionalInstanceField(it.thisObject, "channelNotificationSettings") ?: return@hookAfterMethod val channelNotificationSettings = XposedHelpers.getAdditionalInstanceField(it.thisObject, "channelNotificationSettings") ?: return@hookAfterMethod
val mChannel = channelNotificationSettings.getObjectField("mChannel") as NotificationChannel val mChannel = channelNotificationSettings.getObjectField("mChannel") as NotificationChannel
@@ -31,4 +31,5 @@ class ShowNotificationImportance : IXposedHookLoadPackage {
mBackend.callMethod("updateChannel", mPkg, mUid, mChannel) mBackend.callMethod("updateChannel", mPkg, mUid, mChannel)
} }
} }
} }

View File

@@ -5,15 +5,15 @@ import android.widget.TextView
import com.lt2333.simplicitytools.util.XSPUtils import com.lt2333.simplicitytools.util.XSPUtils
import com.lt2333.simplicitytools.util.getObjectField import com.lt2333.simplicitytools.util.getObjectField
import com.lt2333.simplicitytools.util.hookAfterMethod import com.lt2333.simplicitytools.util.hookAfterMethod
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.callbacks.XC_LoadPackage
class BatteryPercentage : IXposedHookLoadPackage { object BatteryPercentage: HookRegister() {
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
override fun init() {
val size = XSPUtils.getFloat("battery_percentage_font_size", 0f) val size = XSPUtils.getFloat("battery_percentage_font_size", 0f)
if (size == 0f) return if (size == 0f) return
"com.android.systemui.statusbar.views.MiuiBatteryMeterView".hookAfterMethod( "com.android.systemui.statusbar.views.MiuiBatteryMeterView".hookAfterMethod(
lpparam.classLoader, getDefaultClassLoader(),
"updateResources" "updateResources"
) { ) {
(it.thisObject.getObjectField("mBatteryPercentView") as TextView).setTextSize( (it.thisObject.getObjectField("mBatteryPercentView") as TextView).setTextSize(
@@ -21,4 +21,5 @@ class BatteryPercentage : IXposedHookLoadPackage {
) )
} }
} }
} }

View File

@@ -11,90 +11,18 @@ import androidx.constraintlayout.widget.ConstraintLayout
import cn.fkj233.ui.activity.dp2px import cn.fkj233.ui.activity.dp2px
import com.github.kyuubiran.ezxhelper.utils.loadClass import com.github.kyuubiran.ezxhelper.utils.loadClass
import com.lt2333.simplicitytools.util.* import com.lt2333.simplicitytools.util.*
import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import com.lt2333.simplicitytools.view.WeatherView import com.lt2333.simplicitytools.view.WeatherView
import de.robv.android.xposed.IXposedHookLoadPackage
import de.robv.android.xposed.callbacks.XC_LoadPackage
class ControlCenterWeather : IXposedHookLoadPackage { object ControlCenterWeather: HookRegister() {
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
hasEnable("") {
var mWeatherView: TextView? = null
val isDisplayCity = XSPUtils.getBoolean("", false)
"com.android.systemui.controlcenter.phone.widget.QSControlCenterHeaderView".hookAfterMethod(
lpparam.classLoader,
"onFinishInflate"
) {
val viewGroup = it.thisObject as ViewGroup
val context = viewGroup.context
val layoutParam =
loadClass("androidx.constraintlayout.widget.ConstraintLayout\$LayoutParams")
.getConstructor(Int::class.java, Int::class.java).newInstance(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT
) as ViewGroup.MarginLayoutParams
layoutParam.setObjectField(
"bottomToTop",
context.resources.getIdentifier("date_time", "id", context.packageName)
)
layoutParam.setObjectField(
"startToEnd",
context.resources.getIdentifier("big_time", "id", context.packageName)
)
layoutParam.marginStart = context.resources.getDimensionPixelSize( override fun init() {
context.resources.getIdentifier(
"notification_panel_time_date_space",
"dimen",
context.packageName
)
)
mWeatherView = WeatherView(context, isDisplayCity).apply {
setTextAppearance(
context.resources.getIdentifier(
"TextAppearance.QSControl.Date",
"style",
context.packageName
)
)
layoutParams = layoutParam
}
viewGroup.addView(mWeatherView)
(mWeatherView as WeatherView).setOnClickListener {
try {
val intent = Intent().apply {
flags = Intent.FLAG_ACTIVITY_NEW_TASK
component = ComponentName(
"com.miui.weather2",
"com.miui.weather2.ActivityWeatherMain"
)
}
context.startActivity(intent)
} catch (e: Exception) {
Toast.makeText(context, "启动失败", Toast.LENGTH_LONG).show()
}
}
}
//解决横屏重叠
"com.android.systemui.controlcenter.phone.widget.QSControlCenterHeaderView".hookAfterMethod(
lpparam.classLoader,
"updateLayout"
) {
val mOrientation = it.thisObject.getObjectField("mOrientation") as Int
if (mOrientation == 1) {
mWeatherView!!.visibility = View.VISIBLE
} else {
mWeatherView!!.visibility = View.GONE
}
}
}
hasEnable("control_center_weather") { hasEnable("control_center_weather") {
var mWeatherView: TextView? = null var mWeatherView: TextView? = null
var mConstraintLayout: ConstraintLayout? = null var mConstraintLayout: ConstraintLayout? = null
val isDisplayCity = XSPUtils.getBoolean("control_center_weather_city", false) val isDisplayCity = XSPUtils.getBoolean("control_center_weather_city", false)
"com.android.systemui.controlcenter.phone.widget.QSControlCenterHeaderView".hookAfterMethod( "com.android.systemui.controlcenter.phone.widget.QSControlCenterHeaderView".hookAfterMethod(
lpparam.classLoader, getDefaultClassLoader(),
"onFinishInflate" "onFinishInflate"
) { ) {
val viewGroup = it.thisObject as ViewGroup val viewGroup = it.thisObject as ViewGroup
@@ -257,7 +185,7 @@ class ControlCenterWeather : IXposedHookLoadPackage {
} }
//解决横屏重叠 //解决横屏重叠
"com.android.systemui.controlcenter.phone.widget.QSControlCenterHeaderView".hookAfterMethod( "com.android.systemui.controlcenter.phone.widget.QSControlCenterHeaderView".hookAfterMethod(
lpparam.classLoader, getDefaultClassLoader(),
"updateLayout" "updateLayout"
) { ) {
val viewGroup = it.thisObject as ViewGroup val viewGroup = it.thisObject as ViewGroup
@@ -292,4 +220,5 @@ class ControlCenterWeather : IXposedHookLoadPackage {
} }
} }
} }
} }

View File

@@ -9,11 +9,10 @@ import android.widget.TextView
import com.github.kyuubiran.ezxhelper.init.InitFields import com.github.kyuubiran.ezxhelper.init.InitFields
import com.lt2333.simplicitytools.R import com.lt2333.simplicitytools.R
import com.lt2333.simplicitytools.util.* import com.lt2333.simplicitytools.util.*
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.callbacks.XC_LoadPackage
import java.text.DecimalFormat import java.text.DecimalFormat
class DoubleLineNetworkSpeed : IXposedHookLoadPackage { object DoubleLineNetworkSpeed: HookRegister() {
private var mLastTotalUp: Long = 0 private var mLastTotalUp: Long = 0
private var mLastTotalDown: Long = 0 private var mLastTotalDown: Long = 0
@@ -27,7 +26,7 @@ class DoubleLineNetworkSpeed : IXposedHookLoadPackage {
private val getDualSize = XSPUtils.getInt("status_bar_network_speed_dual_row_size", 0) private val getDualSize = XSPUtils.getInt("status_bar_network_speed_dual_row_size", 0)
private val getDualAlign = XSPUtils.getInt("status_bar_network_speed_dual_row_gravity", 0) private val getDualAlign = XSPUtils.getInt("status_bar_network_speed_dual_row_gravity", 0)
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) { override fun init() {
val none = InitFields.moduleRes.getString(R.string.none) val none = InitFields.moduleRes.getString(R.string.none)
@@ -39,7 +38,7 @@ class DoubleLineNetworkSpeed : IXposedHookLoadPackage {
} }
hasEnable("status_bar_dual_row_network_speed") { hasEnable("status_bar_dual_row_network_speed") {
"com.android.systemui.statusbar.views.NetworkSpeedView".findClass(lpparam.classLoader) "com.android.systemui.statusbar.views.NetworkSpeedView".findClass(getDefaultClassLoader())
.hookAfterConstructor(Context::class.java, AttributeSet::class.java) { .hookAfterConstructor(Context::class.java, AttributeSet::class.java) {
val mView = it.thisObject as TextView val mView = it.thisObject as TextView
mView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 7f) mView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 7f)
@@ -56,24 +55,24 @@ class DoubleLineNetworkSpeed : IXposedHookLoadPackage {
} }
"com.android.systemui.statusbar.policy.NetworkSpeedController".hookBeforeMethod( "com.android.systemui.statusbar.policy.NetworkSpeedController".hookBeforeMethod(
lpparam.classLoader, getDefaultClassLoader(),
"formatSpeed", "formatSpeed",
Context::class.java, Context::class.java,
Long::class.java Long::class.java
) { ) {
if (getDualAlign == 0) { if (getDualAlign == 0) {
it.result = it.result =
"${upIcon} ${getTotalUpSpeed(it.args[0]as Context)}\n${downIcon} ${getTotalDownloadSpeed(it.args[0]as Context)}" "$upIcon ${getTotalUpSpeed(it.args[0]as Context)}\n${downIcon} ${getTotalDownloadSpeed(it.args[0]as Context)}"
} else { } else {
it.result = it.result =
"${getTotalUpSpeed(it.args[0]as Context)} ${upIcon}\n${getTotalDownloadSpeed(it.args[0]as Context)} ${downIcon}" "${getTotalUpSpeed(it.args[0]as Context)} ${upIcon}\n${getTotalDownloadSpeed(it.args[0]as Context)} $downIcon"
} }
} }
} }
} }
//获取总的上行速度 //获取总的上行速度
fun getTotalUpSpeed(context: Context): String { private fun getTotalUpSpeed(context: Context): String {
var totalUpSpeed = 0F var totalUpSpeed = 0F
val currentTotalTxBytes = TrafficStats.getTotalTxBytes() val currentTotalTxBytes = TrafficStats.getTotalTxBytes()
@@ -98,15 +97,15 @@ class DoubleLineNetworkSpeed : IXposedHookLoadPackage {
mLastTotalUp = currentTotalTxBytes mLastTotalUp = currentTotalTxBytes
lastTimeStampTotalUp = nowTimeStampTotalUp lastTimeStampTotalUp = nowTimeStampTotalUp
if (totalUpSpeed >= 100) { return if (totalUpSpeed >= 100) {
return "" + totalUpSpeed.toInt() + unit "" + totalUpSpeed.toInt() + unit
} else { } else {
return "" + totalUpSpeed + unit "" + totalUpSpeed + unit
} }
} }
//获取总的下行速度 //获取总的下行速度
fun getTotalDownloadSpeed(context: Context): String { private fun getTotalDownloadSpeed(context: Context): String {
var totalDownSpeed = 0F var totalDownSpeed = 0F
val currentTotalRxBytes = TrafficStats.getTotalRxBytes() val currentTotalRxBytes = TrafficStats.getTotalRxBytes()
val nowTimeStampTotalDown = System.currentTimeMillis() val nowTimeStampTotalDown = System.currentTimeMillis()
@@ -130,13 +129,12 @@ class DoubleLineNetworkSpeed : IXposedHookLoadPackage {
mLastTotalDown = currentTotalRxBytes mLastTotalDown = currentTotalRxBytes
lastTimeStampTotalDown = nowTimeStampTotalDown lastTimeStampTotalDown = nowTimeStampTotalDown
if (totalDownSpeed >= 100) { return if (totalDownSpeed >= 100) {
return "" + totalDownSpeed.toInt() + unit "" + totalDownSpeed.toInt() + unit
} else { } else {
return "" + totalDownSpeed + unit "" + totalDownSpeed + unit
} }
} }
} }

View File

@@ -7,12 +7,12 @@ import android.widget.TextView
import com.lt2333.simplicitytools.util.getObjectField import com.lt2333.simplicitytools.util.getObjectField
import com.lt2333.simplicitytools.util.hasEnable import com.lt2333.simplicitytools.util.hasEnable
import com.lt2333.simplicitytools.util.hookAfterMethod import com.lt2333.simplicitytools.util.hookAfterMethod
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.callbacks.XC_LoadPackage
class HideBatteryIcon : IXposedHookLoadPackage { object HideBatteryIcon : HookRegister() {
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
"com.android.systemui.statusbar.views.MiuiBatteryMeterView".hookAfterMethod(lpparam.classLoader, "updateResources") { override fun init() {
"com.android.systemui.statusbar.views.MiuiBatteryMeterView".hookAfterMethod(getDefaultClassLoader(), "updateResources") {
//隐藏电池图标 //隐藏电池图标
hasEnable("hide_battery_icon") { hasEnable("hide_battery_icon") {
@@ -32,7 +32,7 @@ class HideBatteryIcon : IXposedHookLoadPackage {
(it.thisObject.getObjectField("mBatteryPercentMarkView") as TextView).textSize = 0F (it.thisObject.getObjectField("mBatteryPercentMarkView") as TextView).textSize = 0F
} }
"com.android.systemui.statusbar.views.MiuiBatteryMeterView".hookAfterMethod(lpparam.classLoader, "updateChargeAndText") { "com.android.systemui.statusbar.views.MiuiBatteryMeterView".hookAfterMethod(getDefaultClassLoader(), "updateChargeAndText") {
//隐藏电池充电图标 //隐藏电池充电图标
hasEnable("hide_battery_charging_icon") { hasEnable("hide_battery_charging_icon") {
(it.thisObject.getObjectField("mBatteryChargingInView") as ImageView).visibility = View.GONE (it.thisObject.getObjectField("mBatteryChargingInView") as ImageView).visibility = View.GONE
@@ -41,4 +41,5 @@ class HideBatteryIcon : IXposedHookLoadPackage {
} }
} }
} }
} }

View File

@@ -5,13 +5,13 @@ import android.widget.ImageView
import com.lt2333.simplicitytools.util.getObjectField import com.lt2333.simplicitytools.util.getObjectField
import com.lt2333.simplicitytools.util.hasEnable import com.lt2333.simplicitytools.util.hasEnable
import com.lt2333.simplicitytools.util.hookAfterMethod import com.lt2333.simplicitytools.util.hookAfterMethod
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.callbacks.XC_LoadPackage
class HideHDIcon :IXposedHookLoadPackage { object HideHDIcon: HookRegister() {
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
override fun init() {
val iconState = "com.android.systemui.statusbar.phone.StatusBarSignalPolicy\$MobileIconState" val iconState = "com.android.systemui.statusbar.phone.StatusBarSignalPolicy\$MobileIconState"
"com.android.systemui.statusbar.StatusBarMobileView".hookAfterMethod(lpparam.classLoader, "initViewState", iconState) { "com.android.systemui.statusbar.StatusBarMobileView".hookAfterMethod(getDefaultClassLoader(), "initViewState", iconState) {
hasEnable("hide_big_hd_icon") { hasEnable("hide_big_hd_icon") {
(it.thisObject.getObjectField("mVolte") as ImageView).visibility = View.GONE (it.thisObject.getObjectField("mVolte") as ImageView).visibility = View.GONE
} }
@@ -23,7 +23,7 @@ class HideHDIcon :IXposedHookLoadPackage {
} }
} }
"com.android.systemui.statusbar.StatusBarMobileView".hookAfterMethod(lpparam.classLoader, "updateState", iconState) { "com.android.systemui.statusbar.StatusBarMobileView".hookAfterMethod(getDefaultClassLoader(), "updateState", iconState) {
hasEnable("hide_big_hd_icon") { hasEnable("hide_big_hd_icon") {
(it.thisObject.getObjectField("mVolte") as ImageView).visibility = View.GONE (it.thisObject.getObjectField("mVolte") as ImageView).visibility = View.GONE
} }
@@ -35,4 +35,5 @@ class HideHDIcon :IXposedHookLoadPackage {
} }
} }
} }
} }

View File

@@ -5,24 +5,25 @@ import android.widget.ImageView
import com.lt2333.simplicitytools.util.getObjectField import com.lt2333.simplicitytools.util.getObjectField
import com.lt2333.simplicitytools.util.hasEnable import com.lt2333.simplicitytools.util.hasEnable
import com.lt2333.simplicitytools.util.hookAfterMethod import com.lt2333.simplicitytools.util.hookAfterMethod
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.callbacks.XC_LoadPackage
class HideMobileActivityIcon : IXposedHookLoadPackage { object HideMobileActivityIcon: HookRegister() {
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
override fun init() {
val iconState = "com.android.systemui.statusbar.phone.StatusBarSignalPolicy\$MobileIconState" val iconState = "com.android.systemui.statusbar.phone.StatusBarSignalPolicy\$MobileIconState"
"com.android.systemui.statusbar.StatusBarMobileView".hookAfterMethod(lpparam.classLoader, "initViewState", iconState) { "com.android.systemui.statusbar.StatusBarMobileView".hookAfterMethod(getDefaultClassLoader(), "initViewState", iconState) {
hasEnable("hide_mobile_activity_icon") { hasEnable("hide_mobile_activity_icon") {
(it.thisObject.getObjectField("mLeftInOut") as ImageView).visibility = View.GONE (it.thisObject.getObjectField("mLeftInOut") as ImageView).visibility = View.GONE
(it.thisObject.getObjectField("mRightInOut") as ImageView).visibility = View.GONE (it.thisObject.getObjectField("mRightInOut") as ImageView).visibility = View.GONE
} }
} }
"com.android.systemui.statusbar.StatusBarMobileView".hookAfterMethod(lpparam.classLoader, "updateState", iconState) { "com.android.systemui.statusbar.StatusBarMobileView".hookAfterMethod(getDefaultClassLoader(), "updateState", iconState) {
hasEnable("hide_mobile_activity_icon") { hasEnable("hide_mobile_activity_icon") {
(it.thisObject.getObjectField("mLeftInOut") as ImageView).visibility = View.GONE (it.thisObject.getObjectField("mLeftInOut") as ImageView).visibility = View.GONE
(it.thisObject.getObjectField("mRightInOut") as ImageView).visibility = View.GONE (it.thisObject.getObjectField("mRightInOut") as ImageView).visibility = View.GONE
} }
} }
} }
} }

View File

@@ -7,17 +7,17 @@ import com.lt2333.simplicitytools.util.XSPUtils
import com.lt2333.simplicitytools.util.getObjectField import com.lt2333.simplicitytools.util.getObjectField
import com.lt2333.simplicitytools.util.hasEnable import com.lt2333.simplicitytools.util.hasEnable
import com.lt2333.simplicitytools.util.hookAfterMethod import com.lt2333.simplicitytools.util.hookAfterMethod
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.XC_MethodHook import de.robv.android.xposed.XC_MethodHook
import de.robv.android.xposed.callbacks.XC_LoadPackage
class HideMobileTypeIcon : IXposedHookLoadPackage { object HideMobileTypeIcon: HookRegister() {
val isBigType=XSPUtils.getBoolean("big_mobile_type_icon", false)
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) { private val isBigType = XSPUtils.getBoolean("big_mobile_type_icon", false)
val iconState =
"com.android.systemui.statusbar.phone.StatusBarSignalPolicy\$MobileIconState" override fun init() {
val iconState = "com.android.systemui.statusbar.phone.StatusBarSignalPolicy\$MobileIconState"
"com.android.systemui.statusbar.StatusBarMobileView".hookAfterMethod( "com.android.systemui.statusbar.StatusBarMobileView".hookAfterMethod(
lpparam.classLoader, getDefaultClassLoader(),
"initViewState", "initViewState",
iconState iconState
) { ) {
@@ -25,7 +25,7 @@ class HideMobileTypeIcon : IXposedHookLoadPackage {
} }
"com.android.systemui.statusbar.StatusBarMobileView".hookAfterMethod( "com.android.systemui.statusbar.StatusBarMobileView".hookAfterMethod(
lpparam.classLoader, getDefaultClassLoader(),
"updateState", "updateState",
iconState iconState
) { ) {
@@ -33,7 +33,7 @@ class HideMobileTypeIcon : IXposedHookLoadPackage {
} }
} }
fun hideMobileTypeIcon(it: XC_MethodHook.MethodHookParam) { private fun hideMobileTypeIcon(it: XC_MethodHook.MethodHookParam) {
hasEnable("hide_mobile_type_icon") { hasEnable("hide_mobile_type_icon") {
if (isBigType) { if (isBigType) {
(it.thisObject.getObjectField("mMobileType") as TextView).visibility = (it.thisObject.getObjectField("mMobileType") as TextView).visibility =

View File

@@ -4,12 +4,12 @@ import android.widget.TextView
import com.lt2333.simplicitytools.util.XSPUtils import com.lt2333.simplicitytools.util.XSPUtils
import com.lt2333.simplicitytools.util.findClass import com.lt2333.simplicitytools.util.findClass
import com.lt2333.simplicitytools.util.hookAfterMethod import com.lt2333.simplicitytools.util.hookAfterMethod
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.callbacks.XC_LoadPackage
class HideNetworkSpeedSplitter : IXposedHookLoadPackage { object HideNetworkSpeedSplitter: HookRegister() {
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
val networkSpeedSplitterClass = "com.android.systemui.statusbar.views.NetworkSpeedSplitter".findClass(lpparam.classLoader) override fun init() {
val networkSpeedSplitterClass = "com.android.systemui.statusbar.views.NetworkSpeedSplitter".findClass(getDefaultClassLoader())
networkSpeedSplitterClass.hookAfterMethod("init") { networkSpeedSplitterClass.hookAfterMethod("init") {
if (XSPUtils.getBoolean("hide_network_speed_splitter", false)) { if (XSPUtils.getBoolean("hide_network_speed_splitter", false)) {
val textView = it.thisObject as TextView val textView = it.thisObject as TextView
@@ -17,4 +17,5 @@ class HideNetworkSpeedSplitter : IXposedHookLoadPackage {
} }
} }
} }
} }

View File

@@ -2,12 +2,12 @@ package com.lt2333.simplicitytools.hook.app.systemui
import com.lt2333.simplicitytools.util.hasEnable import com.lt2333.simplicitytools.util.hasEnable
import com.lt2333.simplicitytools.util.hookBeforeMethod import com.lt2333.simplicitytools.util.hookBeforeMethod
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.callbacks.XC_LoadPackage
class HideSimIcon :IXposedHookLoadPackage { object HideSimIcon: HookRegister() {
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
"com.android.systemui.statusbar.phone.StatusBarSignalPolicy".hookBeforeMethod(lpparam.classLoader, "hasCorrectSubs", MutableList::class.java) { override fun init() {
"com.android.systemui.statusbar.phone.StatusBarSignalPolicy".hookBeforeMethod(getDefaultClassLoader(), "hasCorrectSubs", MutableList::class.java) {
val list = it.args[0] as MutableList<*> val list = it.args[0] as MutableList<*>
val size = list.size val size = list.size
hasEnable("hide_sim_two_icon", extraCondition = { size == 2 }) { hasEnable("hide_sim_two_icon", extraCondition = { size == 2 }) {
@@ -18,4 +18,5 @@ class HideSimIcon :IXposedHookLoadPackage {
} }
} }
} }
} }

View File

@@ -2,27 +2,25 @@ package com.lt2333.simplicitytools.hook.app.systemui
import com.lt2333.simplicitytools.util.hasEnable import com.lt2333.simplicitytools.util.hasEnable
import com.lt2333.simplicitytools.util.hookBeforeMethod import com.lt2333.simplicitytools.util.hookBeforeMethod
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.XC_MethodHook import de.robv.android.xposed.XC_MethodHook
import de.robv.android.xposed.callbacks.XC_LoadPackage
class HideStatusBarIcon : IXposedHookLoadPackage { object HideStatusBarIcon: HookRegister() {
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
override fun init() {
"com.android.systemui.statusbar.phone.StatusBarIconControllerImpl".hookBeforeMethod( "com.android.systemui.statusbar.phone.StatusBarIconControllerImpl".hookBeforeMethod(
lpparam.classLoader, getDefaultClassLoader(),
"setIconVisibility", "setIconVisibility",
String::class.java, String::class.java,
Boolean::class.java Boolean::class.java
) { hideIcon(it) } ) { hideIcon(it) }
"com.android.systemui.statusbar.phone.MiuiDripLeftStatusBarIconControllerImpl".hookBeforeMethod( "com.android.systemui.statusbar.phone.MiuiDripLeftStatusBarIconControllerImpl".hookBeforeMethod(
lpparam.classLoader, getDefaultClassLoader(),
"setIconVisibility", "setIconVisibility",
String::class.java, String::class.java,
Boolean::class.java Boolean::class.java
) { hideIcon(it) } ) { hideIcon(it) }
} }
private fun hideIcon(it: XC_MethodHook.MethodHookParam) { private fun hideIcon(it: XC_MethodHook.MethodHookParam) {

View File

@@ -3,12 +3,12 @@ package com.lt2333.simplicitytools.hook.app.systemui
import com.lt2333.simplicitytools.util.hasEnable import com.lt2333.simplicitytools.util.hasEnable
import com.lt2333.simplicitytools.util.hookBeforeMethod import com.lt2333.simplicitytools.util.hookBeforeMethod
import com.lt2333.simplicitytools.util.isNonNull import com.lt2333.simplicitytools.util.isNonNull
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.callbacks.XC_LoadPackage
class HideStatusBarNetworkSpeedSecond :IXposedHookLoadPackage { object HideStatusBarNetworkSpeedSecond: HookRegister() {
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
"com.android.systemui.statusbar.views.NetworkSpeedView".hookBeforeMethod(lpparam.classLoader, "setNetworkSpeed", String::class.java) { override fun init() {
"com.android.systemui.statusbar.views.NetworkSpeedView".hookBeforeMethod(getDefaultClassLoader(), "setNetworkSpeed", String::class.java) {
hasEnable("hide_status_bar_network_speed_second") { hasEnable("hide_status_bar_network_speed_second") {
it.args[0].isNonNull { s -> it.args[0].isNonNull { s ->
it.args[0] = (s as String) it.args[0] = (s as String)
@@ -19,4 +19,5 @@ class HideStatusBarNetworkSpeedSecond :IXposedHookLoadPackage {
} }
} }
} }
} }

View File

@@ -6,13 +6,13 @@ import android.widget.TextView
import com.lt2333.simplicitytools.util.getObjectField import com.lt2333.simplicitytools.util.getObjectField
import com.lt2333.simplicitytools.util.hasEnable import com.lt2333.simplicitytools.util.hasEnable
import com.lt2333.simplicitytools.util.hookAfterMethod import com.lt2333.simplicitytools.util.hookAfterMethod
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.callbacks.XC_LoadPackage
class HideWifiActivityIcon : IXposedHookLoadPackage { object HideWifiActivityIcon: HookRegister() {
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
override fun init() {
val iconState = "com.android.systemui.statusbar.phone.StatusBarSignalPolicy\$WifiIconState" val iconState = "com.android.systemui.statusbar.phone.StatusBarSignalPolicy\$WifiIconState"
"com.android.systemui.statusbar.StatusBarWifiView".hookAfterMethod(lpparam.classLoader, "initViewState", iconState) { "com.android.systemui.statusbar.StatusBarWifiView".hookAfterMethod(getDefaultClassLoader(), "initViewState", iconState) {
//隐藏WIFI箭头 //隐藏WIFI箭头
hasEnable("hide_wifi_activity_icon") { hasEnable("hide_wifi_activity_icon") {
(it.thisObject.getObjectField("mWifiActivityView") as ImageView).visibility = View.INVISIBLE (it.thisObject.getObjectField("mWifiActivityView") as ImageView).visibility = View.INVISIBLE
@@ -23,7 +23,7 @@ class HideWifiActivityIcon : IXposedHookLoadPackage {
} }
} }
"com.android.systemui.statusbar.StatusBarWifiView".hookAfterMethod(lpparam.classLoader, "updateState", iconState) { "com.android.systemui.statusbar.StatusBarWifiView".hookAfterMethod(getDefaultClassLoader(), "updateState", iconState) {
//隐藏WIFI箭头 //隐藏WIFI箭头
hasEnable("hide_wifi_activity_icon") { hasEnable("hide_wifi_activity_icon") {
(it.thisObject.getObjectField("mWifiActivityView") as ImageView).visibility = View.INVISIBLE (it.thisObject.getObjectField("mWifiActivityView") as ImageView).visibility = View.INVISIBLE
@@ -34,4 +34,5 @@ class HideWifiActivityIcon : IXposedHookLoadPackage {
} }
} }
} }
} }

View File

@@ -8,18 +8,18 @@ import com.lt2333.simplicitytools.R
import com.lt2333.simplicitytools.util.findClass import com.lt2333.simplicitytools.util.findClass
import com.lt2333.simplicitytools.util.hasEnable import com.lt2333.simplicitytools.util.hasEnable
import com.lt2333.simplicitytools.util.hookAfterMethod import com.lt2333.simplicitytools.util.hookAfterMethod
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.XposedHelpers import de.robv.android.xposed.XposedHelpers
import de.robv.android.xposed.callbacks.XC_LoadPackage
import java.io.BufferedReader import java.io.BufferedReader
import java.io.FileReader import java.io.FileReader
import java.lang.reflect.Method import java.lang.reflect.Method
import kotlin.math.roundToInt import kotlin.math.roundToInt
class LockScreenCurrent : IXposedHookLoadPackage { object LockScreenCurrent : HookRegister() {
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
override fun init() {
hasEnable("lock_screen_charging_current") { hasEnable("lock_screen_charging_current") {
"com.android.keyguard.charge.ChargeUtils".findClass(lpparam.classLoader) "com.android.keyguard.charge.ChargeUtils".findClass(getDefaultClassLoader())
.hookAfterMethod( .hookAfterMethod(
"getChargingHintText", "getChargingHintText",
Context::class.java, Context::class.java,
@@ -28,7 +28,7 @@ class LockScreenCurrent : IXposedHookLoadPackage {
) { ) {
it.result = getCurrent() + "\n" + it.result it.result = getCurrent() + "\n" + it.result
} }
"com.android.systemui.statusbar.phone.KeyguardBottomAreaView".findClass(lpparam.classLoader) "com.android.systemui.statusbar.phone.KeyguardBottomAreaView".findClass(getDefaultClassLoader())
.hookAfterMethod( .hookAfterMethod(
"onFinishInflate" "onFinishInflate"
) { ) {
@@ -105,4 +105,5 @@ class LockScreenCurrent : IXposedHookLoadPackage {
} }
return defaultValue return defaultValue
} }
} }

View File

@@ -10,16 +10,16 @@ import android.view.View.OnTouchListener
import com.lt2333.simplicitytools.util.findClass import com.lt2333.simplicitytools.util.findClass
import com.lt2333.simplicitytools.util.hasEnable import com.lt2333.simplicitytools.util.hasEnable
import com.lt2333.simplicitytools.util.hookBeforeMethod import com.lt2333.simplicitytools.util.hookBeforeMethod
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.XposedHelpers import de.robv.android.xposed.XposedHelpers
import de.robv.android.xposed.callbacks.XC_LoadPackage
class LockScreenDoubleTapToSleep : IXposedHookLoadPackage { object LockScreenDoubleTapToSleep: HookRegister() {
@SuppressLint("ClickableViewAccessibility") @SuppressLint("ClickableViewAccessibility")
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) { override fun init() {
hasEnable("lock_screen_double_tap_to_sleep") { hasEnable("lock_screen_double_tap_to_sleep") {
"com.android.systemui.statusbar.phone.NotificationsQuickSettingsContainer".findClass( "com.android.systemui.statusbar.phone.NotificationsQuickSettingsContainer".findClass(
lpparam.classLoader getDefaultClassLoader()
).hookBeforeMethod("onFinishInflate") { ).hookBeforeMethod("onFinishInflate") {
val view = it.thisObject as View val view = it.thisObject as View
XposedHelpers.setAdditionalInstanceField(view, "currentTouchTime", 0L) XposedHelpers.setAdditionalInstanceField(view, "currentTouchTime", 0L)
@@ -68,4 +68,5 @@ class LockScreenDoubleTapToSleep : IXposedHookLoadPackage {
} }
} }
} }
} }

View File

@@ -11,20 +11,18 @@ import androidx.constraintlayout.widget.ConstraintLayout
import cn.fkj233.ui.activity.dp2px import cn.fkj233.ui.activity.dp2px
import com.github.kyuubiran.ezxhelper.utils.loadClass import com.github.kyuubiran.ezxhelper.utils.loadClass
import com.lt2333.simplicitytools.util.* import com.lt2333.simplicitytools.util.*
import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import com.lt2333.simplicitytools.view.WeatherView import com.lt2333.simplicitytools.view.WeatherView
import de.robv.android.xposed.IXposedHookLoadPackage
import de.robv.android.xposed.callbacks.XC_LoadPackage
class NotificationWeather : IXposedHookLoadPackage { object NotificationWeather: HookRegister() {
override fun init() {
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
hasEnable("notification_weather") { hasEnable("notification_weather") {
var mWeatherView: TextView? = null var mWeatherView: TextView? = null
var mConstraintLayout: ConstraintLayout? = null var mConstraintLayout: ConstraintLayout? = null
val isDisplayCity = XSPUtils.getBoolean("notification_weather_city", false) val isDisplayCity = XSPUtils.getBoolean("notification_weather_city", false)
"com.android.systemui.qs.MiuiNotificationHeaderView".hookAfterMethod( "com.android.systemui.qs.MiuiNotificationHeaderView".hookAfterMethod(
lpparam.classLoader, getDefaultClassLoader(),
"onFinishInflate" "onFinishInflate"
) { ) {
val viewGroup = it.thisObject as ViewGroup val viewGroup = it.thisObject as ViewGroup
@@ -187,7 +185,7 @@ class NotificationWeather : IXposedHookLoadPackage {
} }
//解决横屏重叠 //解决横屏重叠
"com.android.systemui.qs.MiuiNotificationHeaderView".hookAfterMethod( "com.android.systemui.qs.MiuiNotificationHeaderView".hookAfterMethod(
lpparam.classLoader, getDefaultClassLoader(),
"updateLayout" "updateLayout"
) { ) {
val viewGroup = it.thisObject as ViewGroup val viewGroup = it.thisObject as ViewGroup
@@ -222,4 +220,5 @@ class NotificationWeather : IXposedHookLoadPackage {
} }
} }
} }
} }

View File

@@ -8,17 +8,17 @@ import android.widget.TextView
import android.widget.Toast import android.widget.Toast
import com.github.kyuubiran.ezxhelper.utils.loadClass import com.github.kyuubiran.ezxhelper.utils.loadClass
import com.lt2333.simplicitytools.util.* import com.lt2333.simplicitytools.util.*
import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import com.lt2333.simplicitytools.view.WeatherView import com.lt2333.simplicitytools.view.WeatherView
import de.robv.android.xposed.IXposedHookLoadPackage
import de.robv.android.xposed.callbacks.XC_LoadPackage
class OldNotificationWeather : IXposedHookLoadPackage { object OldNotificationWeather: HookRegister() {
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
override fun init() {
hasEnable("notification_weather") { hasEnable("notification_weather") {
var mWeatherView: TextView? = null var mWeatherView: TextView? = null
val isDisplayCity = XSPUtils.getBoolean("notification_weather_city", false) val isDisplayCity = XSPUtils.getBoolean("notification_weather_city", false)
"com.android.systemui.qs.MiuiQSHeaderView".hookAfterMethod( "com.android.systemui.qs.MiuiQSHeaderView".hookAfterMethod(
lpparam.classLoader, getDefaultClassLoader(),
"onFinishInflate" "onFinishInflate"
) { ) {
val viewGroup = it.thisObject as ViewGroup val viewGroup = it.thisObject as ViewGroup
@@ -84,7 +84,7 @@ class OldNotificationWeather : IXposedHookLoadPackage {
} }
//解决横屏重叠 //解决横屏重叠
"com.android.systemui.qs.MiuiQSHeaderView".hookAfterMethod( "com.android.systemui.qs.MiuiQSHeaderView".hookAfterMethod(
lpparam.classLoader, getDefaultClassLoader(),
"updateLayout" "updateLayout"
) { ) {
val mOritation = it.thisObject.getObjectField("mOrientation") as Int val mOritation = it.thisObject.getObjectField("mOrientation") as Int
@@ -96,5 +96,6 @@ class OldNotificationWeather : IXposedHookLoadPackage {
} }
} }
} }
} }

View File

@@ -6,12 +6,12 @@ import com.lt2333.simplicitytools.util.XSPUtils
import com.lt2333.simplicitytools.util.hasEnable import com.lt2333.simplicitytools.util.hasEnable
import com.lt2333.simplicitytools.util.hookAfterMethod import com.lt2333.simplicitytools.util.hookAfterMethod
import com.lt2333.simplicitytools.util.hookBeforeMethod import com.lt2333.simplicitytools.util.hookBeforeMethod
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.XposedHelpers import de.robv.android.xposed.XposedHelpers
import de.robv.android.xposed.callbacks.XC_LoadPackage
class OldQSCustom : IXposedHookLoadPackage { object OldQSCustom: HookRegister() {
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
override fun init() {
hasEnable("old_qs_custom_switch") { hasEnable("old_qs_custom_switch") {
val mRows = XSPUtils.getInt("qs_custom_rows", 3) val mRows = XSPUtils.getInt("qs_custom_rows", 3)
val mRowsHorizontal = XSPUtils.getInt("qs_custom_rows_horizontal", 2) val mRowsHorizontal = XSPUtils.getInt("qs_custom_rows_horizontal", 2)
@@ -19,7 +19,7 @@ class OldQSCustom : IXposedHookLoadPackage {
val mColumnsUnexpanded = XSPUtils.getInt("qs_custom_columns_unexpanded", 5) val mColumnsUnexpanded = XSPUtils.getInt("qs_custom_columns_unexpanded", 5)
"com.android.systemui.qs.MiuiQuickQSPanel".hookBeforeMethod( "com.android.systemui.qs.MiuiQuickQSPanel".hookBeforeMethod(
lpparam.classLoader, getDefaultClassLoader(),
"setMaxTiles", Int::class.java "setMaxTiles", Int::class.java
) { ) {
//未展开时的列数 //未展开时的列数
@@ -27,14 +27,14 @@ class OldQSCustom : IXposedHookLoadPackage {
} }
"com.android.systemui.qs.MiuiTileLayout".hookAfterMethod( "com.android.systemui.qs.MiuiTileLayout".hookAfterMethod(
lpparam.classLoader, getDefaultClassLoader(),
"updateColumns" "updateColumns"
) { ) {
//展开时的列数 //展开时的列数
XposedHelpers.setObjectField(it.thisObject, "mColumns", mColumns) XposedHelpers.setObjectField(it.thisObject, "mColumns", mColumns)
} }
"com.android.systemui.qs.MiuiTileLayout".hookAfterMethod( "com.android.systemui.qs.MiuiTileLayout".hookAfterMethod(
lpparam.classLoader, getDefaultClassLoader(),
"updateResources" "updateResources"
) { ) {
//展开时的行数 //展开时的行数
@@ -49,4 +49,5 @@ class OldQSCustom : IXposedHookLoadPackage {
} }
} }
} }
} }

View File

@@ -6,30 +6,30 @@ import com.lt2333.simplicitytools.util.getObjectField
import com.lt2333.simplicitytools.util.hasEnable import com.lt2333.simplicitytools.util.hasEnable
import com.lt2333.simplicitytools.util.hookAfterMethod import com.lt2333.simplicitytools.util.hookAfterMethod
import com.lt2333.simplicitytools.util.hookBeforeMethod import com.lt2333.simplicitytools.util.hookBeforeMethod
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.callbacks.XC_LoadPackage
class RemoveLockScreenCamera : IXposedHookLoadPackage { object RemoveLockScreenCamera: HookRegister() {
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
override fun init() {
//屏蔽右下角组件显示 //屏蔽右下角组件显示
"com.android.systemui.statusbar.phone.KeyguardBottomAreaView".hookAfterMethod(lpparam.classLoader, "onFinishInflate") { "com.android.systemui.statusbar.phone.KeyguardBottomAreaView".hookAfterMethod(getDefaultClassLoader(), "onFinishInflate") {
hasEnable("remove_lock_screen_camera") { hasEnable("remove_lock_screen_camera") {
(it.thisObject.getObjectField("mRightAffordanceViewLayout") as LinearLayout).visibility = View.GONE (it.thisObject.getObjectField("mRightAffordanceViewLayout") as LinearLayout).visibility = View.GONE
} }
} }
//屏蔽滑动撞墙动画 //屏蔽滑动撞墙动画
"com.android.keyguard.KeyguardMoveRightController".hookBeforeMethod(lpparam.classLoader, "onTouchMove", Float::class.java, Float::class.java) { "com.android.keyguard.KeyguardMoveRightController".hookBeforeMethod(getDefaultClassLoader(), "onTouchMove", Float::class.java, Float::class.java) {
hasEnable("remove_lock_screen_camera") { hasEnable("remove_lock_screen_camera") {
it.result = false it.result = false
} }
} }
"com.android.keyguard.KeyguardMoveRightController".hookBeforeMethod(lpparam.classLoader, "reset") { "com.android.keyguard.KeyguardMoveRightController".hookBeforeMethod(getDefaultClassLoader(), "reset") {
hasEnable("remove_lock_screen_camera") { hasEnable("remove_lock_screen_camera") {
it.result = null it.result = null
} }
} }
} }
} }

View File

@@ -2,15 +2,16 @@ package com.lt2333.simplicitytools.hook.app.systemui
import com.lt2333.simplicitytools.util.hasEnable import com.lt2333.simplicitytools.util.hasEnable
import com.lt2333.simplicitytools.util.hookBeforeMethod import com.lt2333.simplicitytools.util.hookBeforeMethod
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.callbacks.XC_LoadPackage
class RemoveTheLeftSideOfTheLockScreen : IXposedHookLoadPackage { object RemoveTheLeftSideOfTheLockScreen: HookRegister() {
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
"com.android.keyguard.negative.MiuiKeyguardMoveLeftViewContainer".hookBeforeMethod(lpparam.classLoader, "inflateLeftView") { override fun init() {
"com.android.keyguard.negative.MiuiKeyguardMoveLeftViewContainer".hookBeforeMethod(getDefaultClassLoader(), "inflateLeftView") {
hasEnable("remove_the_left_side_of_the_lock_screen") { hasEnable("remove_the_left_side_of_the_lock_screen") {
it.result = null it.result = null
} }
} }
} }
} }

View File

@@ -4,13 +4,13 @@ import com.lt2333.simplicitytools.util.callMethod
import com.lt2333.simplicitytools.util.hasEnable import com.lt2333.simplicitytools.util.hasEnable
import com.lt2333.simplicitytools.util.replaceMethod import com.lt2333.simplicitytools.util.replaceMethod
import com.lt2333.simplicitytools.util.setIntField import com.lt2333.simplicitytools.util.setIntField
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.callbacks.XC_LoadPackage
class RemoveTheMaximumNumberOfNotificationIcons : IXposedHookLoadPackage { object RemoveTheMaximumNumberOfNotificationIcons: HookRegister() {
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
override fun init() {
hasEnable("remove_the_maximum_number_of_notification_icons") { hasEnable("remove_the_maximum_number_of_notification_icons") {
"com.android.systemui.statusbar.phone.NotificationIconContainer".replaceMethod(lpparam.classLoader, "miuiShowNotificationIcons", Boolean::class.java) { "com.android.systemui.statusbar.phone.NotificationIconContainer".replaceMethod(getDefaultClassLoader(), "miuiShowNotificationIcons", Boolean::class.java) {
if (it.args[0] as Boolean) { if (it.args[0] as Boolean) {
it.thisObject.setIntField("MAX_DOTS", 30) it.thisObject.setIntField("MAX_DOTS", 30)
it.thisObject.setIntField("MAX_STATIC_ICONS", 30) it.thisObject.setIntField("MAX_STATIC_ICONS", 30)
@@ -24,4 +24,5 @@ class RemoveTheMaximumNumberOfNotificationIcons : IXposedHookLoadPackage {
} }
} }
} }
} }

View File

@@ -13,57 +13,57 @@ import com.lt2333.simplicitytools.util.XSPUtils
import com.lt2333.simplicitytools.util.hasEnable import com.lt2333.simplicitytools.util.hasEnable
import com.lt2333.simplicitytools.util.hookAfterMethod import com.lt2333.simplicitytools.util.hookAfterMethod
import com.lt2333.simplicitytools.util.hookBeforeMethod import com.lt2333.simplicitytools.util.hookBeforeMethod
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.XposedHelpers import de.robv.android.xposed.XposedHelpers
import de.robv.android.xposed.callbacks.XC_LoadPackage
class StatusBarBigMobileTypeIcon : IXposedHookLoadPackage { object StatusBarBigMobileTypeIcon: HookRegister() {
val upAndDownPosition = XSPUtils.getInt("big_mobile_type_icon_up_and_down_position", 0)
val leftAndRightMargin = XSPUtils.getInt("big_mobile_type_icon_left_and_right_margins", 0)
val isBold = XSPUtils.getBoolean("big_mobile_type_icon_bold", true)
val size = XSPUtils.getFloat("big_mobile_type_icon_size", 12.5f)
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) { private val upAndDownPosition = XSPUtils.getInt("big_mobile_type_icon_up_and_down_position", 0)
private val leftAndRightMargin = XSPUtils.getInt("big_mobile_type_icon_left_and_right_margins", 0)
private val isBold = XSPUtils.getBoolean("big_mobile_type_icon_bold", true)
private val size = XSPUtils.getFloat("big_mobile_type_icon_size", 12.5f)
override fun init() {
hasEnable("big_mobile_type_icon") { hasEnable("big_mobile_type_icon") {
"com.android.systemui.statusbar.StatusBarMobileView".hookAfterMethod( "com.android.systemui.statusbar.StatusBarMobileView".hookAfterMethod(
lpparam.classLoader, getDefaultClassLoader(),
"init" "init"
) { ) {
val StatusBarMobileView = it.thisObject as ViewGroup val statusBarMobileView = it.thisObject as ViewGroup
val context: Context = StatusBarMobileView.context val context: Context = statusBarMobileView.context
val res: Resources = context.resources val res: Resources = context.resources
//获取组件 //获取组件
val mobile_container_left_ID: Int = val mobileContainerLeftId: Int =
res.getIdentifier("mobile_container_left", "id", "com.android.systemui") res.getIdentifier("mobile_container_left", "id", "com.android.systemui")
val mobile_container_left = val mobileContainerLeft =
StatusBarMobileView.findViewById<ViewGroup>(mobile_container_left_ID) statusBarMobileView.findViewById<ViewGroup>(mobileContainerLeftId)
val mobile_type_ID: Int = val mobileTypeId: Int =
res.getIdentifier("mobile_type", "id", "com.android.systemui") res.getIdentifier("mobile_type", "id", "com.android.systemui")
val mobile_type = StatusBarMobileView.findViewById<TextView>(mobile_type_ID) val mobileType = statusBarMobileView.findViewById<TextView>(mobileTypeId)
val mobile_left_mobile_inout_ID: Int = res.getIdentifier( val mobileLeftMobileInoutId: Int = res.getIdentifier(
"mobile_left_mobile_inout", "mobile_left_mobile_inout",
"id", "id",
"com.android.systemui" "com.android.systemui"
) )
val mobile_left_mobile_inout = val mobileLeftMobileInout =
StatusBarMobileView.findViewById<ImageView>(mobile_left_mobile_inout_ID) statusBarMobileView.findViewById<ImageView>(mobileLeftMobileInoutId)
//获取插入位置 //获取插入位置
val mobile_container_right_ID: Int = res.getIdentifier( val mobileContainerRightId: Int = res.getIdentifier(
"mobile_container_right", "mobile_container_right",
"id", "id",
"com.android.systemui" "com.android.systemui"
) )
val mobile_container_right = val mobileContainerRight =
StatusBarMobileView.findViewById<ViewGroup>(mobile_container_right_ID) statusBarMobileView.findViewById<ViewGroup>(mobileContainerRightId)
val RightParentLayout = mobile_container_right.parent as ViewGroup val rightParentLayout = mobileContainerRight.parent as ViewGroup
val mobile_container_right_Index = val mobileContainerRightIndex =
RightParentLayout.indexOfChild(mobile_container_right) rightParentLayout.indexOfChild(mobileContainerRight)
//创建新布局 //创建新布局
val newLinearLayoutLP = LinearLayout.LayoutParams( val newLinearLayoutLP = LinearLayout.LayoutParams(
@@ -74,50 +74,50 @@ class StatusBarBigMobileTypeIcon : IXposedHookLoadPackage {
} }
val newLinearlayout = LinearLayout(context).also { val newLinearlayout = LinearLayout(context).also {
it.layoutParams = newLinearLayoutLP it.layoutParams = newLinearLayoutLP
it.id = mobile_container_left_ID it.id = mobileContainerLeftId
it.setPadding(leftAndRightMargin, 0, leftAndRightMargin, 0) it.setPadding(leftAndRightMargin, 0, leftAndRightMargin, 0)
} }
XposedHelpers.setObjectField(it.thisObject, "mMobileLeftContainer", newLinearlayout) XposedHelpers.setObjectField(it.thisObject, "mMobileLeftContainer", newLinearlayout)
RightParentLayout.addView( rightParentLayout.addView(
newLinearlayout, newLinearlayout,
mobile_container_right_Index mobileContainerRightIndex
) )
//将组件插入新的布局 //将组件插入新的布局
(mobile_type.parent as ViewGroup).removeView(mobile_type) (mobileType.parent as ViewGroup).removeView(mobileType)
(mobile_left_mobile_inout.parent as ViewGroup).removeView(mobile_left_mobile_inout) (mobileLeftMobileInout.parent as ViewGroup).removeView(mobileLeftMobileInout)
(mobile_container_left.parent as ViewGroup).removeView(mobile_container_left) (mobileContainerLeft.parent as ViewGroup).removeView(mobileContainerLeft)
newLinearlayout.addView(mobile_type) //类型 newLinearlayout.addView(mobileType) //类型
val mobile_type_lp = LinearLayout.LayoutParams( val mobileTypeLp = LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT LinearLayout.LayoutParams.WRAP_CONTENT
).also { ).also {
it.gravity = Gravity.CENTER_VERTICAL it.gravity = Gravity.CENTER_VERTICAL
it.topMargin = upAndDownPosition it.topMargin = upAndDownPosition
} }
mobile_type.also { mobileType.also {
it.setTextSize(TypedValue.COMPLEX_UNIT_DIP, size) it.setTextSize(TypedValue.COMPLEX_UNIT_DIP, size)
if (isBold) { if (isBold) {
it.typeface = Typeface.DEFAULT_BOLD it.typeface = Typeface.DEFAULT_BOLD
} }
it.layoutParams = mobile_type_lp it.layoutParams = mobileTypeLp
} }
newLinearlayout.addView(mobile_left_mobile_inout) //箭头 newLinearlayout.addView(mobileLeftMobileInout) //箭头
val mobile_left_mobile_inout_lp = LinearLayout.LayoutParams( val mobileLeftMobileInoutLp = LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.MATCH_PARENT LinearLayout.LayoutParams.MATCH_PARENT
) )
mobile_left_mobile_inout.also { mobileLeftMobileInout.also {
it.layoutParams = mobile_left_mobile_inout_lp it.layoutParams = mobileLeftMobileInoutLp
} }
//屏蔽更新布局 //屏蔽更新布局
"com.android.systemui.statusbar.StatusBarMobileView".hookBeforeMethod( "com.android.systemui.statusbar.StatusBarMobileView".hookBeforeMethod(
lpparam.classLoader, getDefaultClassLoader(),
"updateMobileTypeLayout", String::class.java "updateMobileTypeLayout", String::class.java
) { ) {
it.result = null it.result = null
@@ -125,4 +125,5 @@ class StatusBarBigMobileTypeIcon : IXposedHookLoadPackage {
} }
} }
} }
} }

View File

@@ -9,16 +9,16 @@ import android.view.ViewGroup
import com.lt2333.simplicitytools.util.findClass import com.lt2333.simplicitytools.util.findClass
import com.lt2333.simplicitytools.util.hasEnable import com.lt2333.simplicitytools.util.hasEnable
import com.lt2333.simplicitytools.util.hookBeforeMethod import com.lt2333.simplicitytools.util.hookBeforeMethod
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.XposedHelpers import de.robv.android.xposed.XposedHelpers
import de.robv.android.xposed.callbacks.XC_LoadPackage
class StatusBarDoubleTapToSleep : IXposedHookLoadPackage { object StatusBarDoubleTapToSleep: HookRegister() {
@SuppressLint("ClickableViewAccessibility") @SuppressLint("ClickableViewAccessibility")
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) { override fun init() {
hasEnable("status_bar_double_tap_to_sleep") { hasEnable("status_bar_double_tap_to_sleep") {
"com.android.systemui.statusbar.phone.MiuiPhoneStatusBarView".findClass( "com.android.systemui.statusbar.phone.MiuiPhoneStatusBarView".findClass(
lpparam.classLoader getDefaultClassLoader()
).hookBeforeMethod( ).hookBeforeMethod(
"onFinishInflate" "onFinishInflate"
) { ) {
@@ -65,4 +65,5 @@ class StatusBarDoubleTapToSleep : IXposedHookLoadPackage {
} }
} }
} }
} }

View File

@@ -1,5 +1,6 @@
package com.lt2333.simplicitytools.hook.app.systemui package com.lt2333.simplicitytools.hook.app.systemui
import android.annotation.SuppressLint
import android.content.Context import android.content.Context
import android.content.res.Configuration import android.content.res.Configuration
import android.content.res.Resources import android.content.res.Resources
@@ -9,31 +10,32 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.FrameLayout import android.widget.FrameLayout
import android.widget.LinearLayout import android.widget.LinearLayout
import android.widget.TextView
import androidx.constraintlayout.widget.ConstraintLayout import androidx.constraintlayout.widget.ConstraintLayout
import com.lt2333.simplicitytools.util.XSPUtils import com.lt2333.simplicitytools.util.XSPUtils
import com.lt2333.simplicitytools.util.findClass import com.lt2333.simplicitytools.util.findClass
import com.lt2333.simplicitytools.util.getObjectField import com.lt2333.simplicitytools.util.getObjectField
import com.lt2333.simplicitytools.util.hookAfterMethod import com.lt2333.simplicitytools.util.hookAfterMethod
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.callbacks.XC_LoadPackage
class StatusBarLayout : IXposedHookLoadPackage { @SuppressLint("StaticFieldLeak")
object StatusBarLayout: HookRegister() {
private var mLeftLayout: LinearLayout? = null private var mLeftLayout: LinearLayout? = null
private var mRightLayout: LinearLayout? = null private var mRightLayout: LinearLayout? = null
private var mCenterLayout: LinearLayout? = null private var mCenterLayout: LinearLayout? = null
private var status_bar: ViewGroup? = null private var statusBar: ViewGroup? = null
private var status_bar_left = 0 private var statusBarLeft = 0
private var status_bar_top = 0 private var statusBarTop = 0
private var status_bar_right = 0 private var statusBarRight = 0
private var status_bar_bottom = 0 private var statusBarBottom = 0
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) { override fun init() {
if (!XSPUtils.getBoolean("status_bar_time_center", false)) return if (!XSPUtils.getBoolean("status_bar_time_center", false)) return
val collapsedStatusBarFragmentClass = val collapsedStatusBarFragmentClass =
"com.android.systemui.statusbar.phone.CollapsedStatusBarFragment".findClass(lpparam.classLoader) "com.android.systemui.statusbar.phone.CollapsedStatusBarFragment".findClass(getDefaultClassLoader())
collapsedStatusBarFragmentClass.hookAfterMethod( collapsedStatusBarFragmentClass.hookAfterMethod(
"onViewCreated", "onViewCreated",
@@ -44,36 +46,36 @@ class StatusBarLayout : IXposedHookLoadPackage {
param.thisObject.getObjectField("mStatusBar") as ViewGroup param.thisObject.getObjectField("mStatusBar") as ViewGroup
val context: Context = MiuiPhoneStatusBarView.context val context: Context = MiuiPhoneStatusBarView.context
val res: Resources = MiuiPhoneStatusBarView.resources val res: Resources = MiuiPhoneStatusBarView.resources
val status_bar_ID: Int = res.getIdentifier("status_bar", "id", "com.android.systemui") val statusBarId: Int = res.getIdentifier("status_bar", "id", "com.android.systemui")
val status_bar_contents_ID: Int = val statusBarContentsId: Int =
res.getIdentifier("status_bar_contents", "id", "com.android.systemui") res.getIdentifier("status_bar_contents", "id", "com.android.systemui")
val system_icon_area_ID: Int = val systemIconAreaId: Int =
res.getIdentifier("system_icon_area", "id", "com.android.systemui") res.getIdentifier("system_icon_area", "id", "com.android.systemui")
val clock_ID: Int = res.getIdentifier("clock", "id", "com.android.systemui") val clockId: Int = res.getIdentifier("clock", "id", "com.android.systemui")
val phone_status_bar_left_container_ID: Int = val phoneStatusBarLeftContainerId: Int =
res.getIdentifier("phone_status_bar_left_container", "id", "com.android.systemui") res.getIdentifier("phone_status_bar_left_container", "id", "com.android.systemui")
val fullscreen_notification_icon_area_ID: Int = val notificationIconAreaInnerId: Int =
res.getIdentifier("fullscreen_notification_icon_area", "id", "com.android.systemui") res.getIdentifier("notification_icon_area_inner", "id", "com.android.systemui")
status_bar = MiuiPhoneStatusBarView.findViewById(status_bar_ID) statusBar = MiuiPhoneStatusBarView.findViewById(statusBarId)
val status_bar_contents: ViewGroup = val statusBarContents: ViewGroup =
MiuiPhoneStatusBarView.findViewById(status_bar_contents_ID) MiuiPhoneStatusBarView.findViewById(statusBarContentsId)
if (status_bar == null) return@hookAfterMethod if (statusBar == null) return@hookAfterMethod
val Clock: View = MiuiPhoneStatusBarView.findViewById(clock_ID) val clock: TextView = MiuiPhoneStatusBarView.findViewById(clockId)
val phone_status_bar_left_container: ViewGroup = val phoneStatusBarLeftContainer: ViewGroup =
MiuiPhoneStatusBarView.findViewById(phone_status_bar_left_container_ID) MiuiPhoneStatusBarView.findViewById(phoneStatusBarLeftContainerId)
val fullscreen_notification_icon_area: ViewGroup = val notificationIconAreaInner: ViewGroup =
MiuiPhoneStatusBarView.findViewById(fullscreen_notification_icon_area_ID) MiuiPhoneStatusBarView.findViewById(notificationIconAreaInnerId)
val system_icon_area: ViewGroup = val systemIconArea: ViewGroup =
MiuiPhoneStatusBarView.findViewById(system_icon_area_ID) MiuiPhoneStatusBarView.findViewById(systemIconAreaId)
(Clock.parent as ViewGroup).removeView(Clock) (clock.parent as ViewGroup).removeView(clock)
(phone_status_bar_left_container.parent as ViewGroup).removeView( (phoneStatusBarLeftContainer.parent as ViewGroup).removeView(
phone_status_bar_left_container phoneStatusBarLeftContainer
) )
(fullscreen_notification_icon_area.parent as ViewGroup).removeView( (notificationIconAreaInner.parent as ViewGroup).removeView(
fullscreen_notification_icon_area notificationIconAreaInner
) )
(system_icon_area.parent as ViewGroup).removeView(system_icon_area) (systemIconArea.parent as ViewGroup).removeView(systemIconArea)
val mConstraintLayoutLp = ConstraintLayout.LayoutParams( val mConstraintLayoutLp = ConstraintLayout.LayoutParams(
ConstraintLayout.LayoutParams.MATCH_PARENT, ConstraintLayout.LayoutParams.MATCH_PARENT,
@@ -83,14 +85,14 @@ class StatusBarLayout : IXposedHookLoadPackage {
val mConstraintLayout = val mConstraintLayout =
ConstraintLayout(context).also { it.layoutParams = mConstraintLayoutLp } ConstraintLayout(context).also { it.layoutParams = mConstraintLayoutLp }
mConstraintLayout.addView(fullscreen_notification_icon_area) mConstraintLayout.addView(notificationIconAreaInner)
val fullscreen_notification_icon_area_lp = FrameLayout.LayoutParams( val fullscreen_notification_icon_area_lp = LinearLayout.LayoutParams(
ConstraintLayout.LayoutParams.MATCH_PARENT, ConstraintLayout.LayoutParams.MATCH_PARENT,
ConstraintLayout.LayoutParams.MATCH_PARENT ConstraintLayout.LayoutParams.MATCH_PARENT
) )
fullscreen_notification_icon_area.layoutParams = fullscreen_notification_icon_area_lp notificationIconAreaInner.layoutParams = fullscreen_notification_icon_area_lp
//增加一个左对齐布局 //增加一个左对齐布局
mLeftLayout = LinearLayout(context) mLeftLayout = LinearLayout(context)
@@ -112,30 +114,30 @@ class StatusBarLayout : IXposedHookLoadPackage {
LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.MATCH_PARENT, 1.0f) LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.MATCH_PARENT, 1.0f)
mRightLayout!!.layoutParams = RightLp mRightLayout!!.layoutParams = RightLp
mRightLayout!!.gravity = Gravity.END or Gravity.CENTER_VERTICAL mRightLayout!!.gravity = Gravity.END or Gravity.CENTER_VERTICAL
mLeftLayout!!.addView(phone_status_bar_left_container) mLeftLayout!!.addView(phoneStatusBarLeftContainer)
mLeftLayout!!.addView(mConstraintLayout) mLeftLayout!!.addView(mConstraintLayout)
mCenterLayout!!.addView(Clock) mCenterLayout!!.addView(clock)
mRightLayout!!.addView(system_icon_area) mRightLayout!!.addView(systemIconArea)
status_bar_contents.addView(mLeftLayout, 0) statusBarContents.addView(mLeftLayout, 0)
status_bar_contents.addView(mCenterLayout) statusBarContents.addView(mCenterLayout)
status_bar_contents.addView(mRightLayout) statusBarContents.addView(mRightLayout)
status_bar_left = status_bar!!.paddingLeft statusBarLeft = statusBar!!.paddingLeft
status_bar_top = status_bar!!.paddingTop statusBarTop = statusBar!!.paddingTop
status_bar_right = status_bar!!.paddingRight statusBarRight = statusBar!!.paddingRight
status_bar_bottom = status_bar!!.paddingBottom statusBarBottom = statusBar!!.paddingBottom
if (XSPUtils.getBoolean("layout_compatibility_mode", false)) { if (XSPUtils.getBoolean("layout_compatibility_mode", false)) {
val custom_left_margin = XSPUtils.getInt("status_bar_left_margin", 0) val customLeftMargin = XSPUtils.getInt("status_bar_left_margin", 0)
if (custom_left_margin != 0) { if (customLeftMargin != 0) {
status_bar_left = custom_left_margin statusBarLeft = customLeftMargin
} }
val custom_right_margin = XSPUtils.getInt("status_bar_right_margin", 0) val customRightMargin = XSPUtils.getInt("status_bar_right_margin", 0)
if (custom_right_margin != 0) { if (customRightMargin != 0) {
status_bar_right = custom_right_margin statusBarRight = customRightMargin
} }
updateLayout(context) updateLayout(context)
} }
@@ -143,7 +145,7 @@ class StatusBarLayout : IXposedHookLoadPackage {
} }
val phoneStatusBarViewClass = val phoneStatusBarViewClass =
"com.android.systemui.statusbar.phone.PhoneStatusBarView".findClass(lpparam.classLoader) "com.android.systemui.statusbar.phone.PhoneStatusBarView".findClass(getDefaultClassLoader())
phoneStatusBarViewClass.hookAfterMethod("updateLayoutForCutout") { phoneStatusBarViewClass.hookAfterMethod("updateLayoutForCutout") {
if (XSPUtils.getBoolean("layout_compatibility_mode", false)) { if (XSPUtils.getBoolean("layout_compatibility_mode", false)) {
@@ -151,21 +153,32 @@ class StatusBarLayout : IXposedHookLoadPackage {
updateLayout(context) updateLayout(context)
} }
} }
val miuiPhoneStatusBarViewClass =
"com.android.systemui.statusbar.phone.MiuiPhoneStatusBarView".findClass(getDefaultClassLoader())
miuiPhoneStatusBarViewClass.hookAfterMethod("updateNotificationIconAreaInnnerParent") {
val viewGroup = it.thisObject as ViewGroup
val fullscreen_notification_icon_area_lp = FrameLayout.LayoutParams(
ConstraintLayout.LayoutParams.MATCH_PARENT,
ConstraintLayout.LayoutParams.MATCH_PARENT
)
viewGroup.layoutParams = fullscreen_notification_icon_area_lp
}
} }
fun updateLayout(context: Context) { private fun updateLayout(context: Context) {
//判断屏幕方向 //判断屏幕方向
val mConfiguration: Configuration = context.resources.configuration val mConfiguration: Configuration = context.resources.configuration
if (mConfiguration.orientation == Configuration.ORIENTATION_PORTRAIT) { if (mConfiguration.orientation == Configuration.ORIENTATION_PORTRAIT) {
mLeftLayout!!.setPadding(status_bar_left, 0, 0, 0) mLeftLayout!!.setPadding(statusBarLeft, 0, 0, 0)
mRightLayout!!.setPadding(0, 0, status_bar_right, 0) mRightLayout!!.setPadding(0, 0, statusBarRight, 0)
status_bar!!.setPadding(0, status_bar_top, 0, status_bar_bottom) statusBar!!.setPadding(0, statusBarTop, 0, statusBarBottom)
} else { } else {
//横屏状态 //横屏状态
mLeftLayout!!.setPadding(175, 0, 0, 0) mLeftLayout!!.setPadding(175, 0, 0, 0)
mRightLayout!!.setPadding(0, 0, 175, 0) mRightLayout!!.setPadding(0, 0, 175, 0)
status_bar!!.setPadding(0, status_bar_top, 0, status_bar_bottom) statusBar!!.setPadding(0, statusBarTop, 0, statusBarBottom)
} }
} }

View File

@@ -2,15 +2,16 @@ package com.lt2333.simplicitytools.hook.app.systemui
import com.lt2333.simplicitytools.util.hasEnable import com.lt2333.simplicitytools.util.hasEnable
import com.lt2333.simplicitytools.util.hookBeforeMethod import com.lt2333.simplicitytools.util.hookBeforeMethod
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.callbacks.XC_LoadPackage
class StatusBarNetworkSpeedRefreshSpeed :IXposedHookLoadPackage { object StatusBarNetworkSpeedRefreshSpeed: HookRegister() {
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
"com.android.systemui.statusbar.policy.NetworkSpeedController".hookBeforeMethod(lpparam.classLoader, "postUpdateNetworkSpeedDelay", Long::class.java) { override fun init() {
"com.android.systemui.statusbar.policy.NetworkSpeedController".hookBeforeMethod(getDefaultClassLoader(), "postUpdateNetworkSpeedDelay", Long::class.java) {
hasEnable("status_bar_network_speed_refresh_speed") { hasEnable("status_bar_network_speed_refresh_speed") {
it.args[0] = 1000L it.args[0] = 1000L
} }
} }
} }
} }

View File

@@ -2,22 +2,23 @@ package com.lt2333.simplicitytools.hook.app.systemui
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.content.Context import android.content.Context
import android.content.res.Resources
import android.os.Bundle
import android.os.Handler import android.os.Handler
import android.provider.Settings import android.provider.Settings
import android.util.AttributeSet import android.util.AttributeSet
import android.util.TypedValue import android.util.TypedValue
import android.view.Gravity
import android.view.View
import android.view.ViewGroup
import android.widget.TextView import android.widget.TextView
import com.lt2333.simplicitytools.util.XSPUtils import com.lt2333.simplicitytools.util.*
import com.lt2333.simplicitytools.util.findClass import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import com.lt2333.simplicitytools.util.hookAfterConstructor
import com.lt2333.simplicitytools.util.hookAfterMethod
import de.robv.android.xposed.IXposedHookLoadPackage
import de.robv.android.xposed.callbacks.XC_LoadPackage
import java.lang.reflect.Method import java.lang.reflect.Method
import java.text.SimpleDateFormat import java.text.SimpleDateFormat
import java.util.* import java.util.*
class StatusBarTimeCustomization : IXposedHookLoadPackage { object StatusBarTimeCustomization : HookRegister() {
private val isYear = XSPUtils.getBoolean("status_bar_time_year", false) private val isYear = XSPUtils.getBoolean("status_bar_time_year", false)
private val isMonth = XSPUtils.getBoolean("status_bar_time_month", false) private val isMonth = XSPUtils.getBoolean("status_bar_time_month", false)
@@ -30,16 +31,18 @@ class StatusBarTimeCustomization : IXposedHookLoadPackage {
private val isPeriod = XSPUtils.getBoolean("status_bar_time_period", true) private val isPeriod = XSPUtils.getBoolean("status_bar_time_period", true)
private val getClockSize = XSPUtils.getInt("status_bar_clock_size", 0) private val getClockSize = XSPUtils.getInt("status_bar_clock_size", 0)
private val isOpen = XSPUtils.getBoolean("custom_clock_switch", false) private val isOpen = XSPUtils.getBoolean("custom_clock_switch", false)
private val isCenterAlign =
XSPUtils.getBoolean("status_bar_time_double_line_center_align", false)
private val getClockDoubleSize = XSPUtils.getInt("status_bar_clock_double_line_size", 0) private val getClockDoubleSize = XSPUtils.getInt("status_bar_clock_double_line_size", 0)
private var now_time: Date? = null private var nowTime: Date? = null
private var str = "" private var str = ""
@SuppressLint("SetTextI18n") @SuppressLint("SetTextI18n")
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) { override fun init() {
if (isOpen) { if (isOpen) {
var c: Context? = null var c: Context? = null
val miuiClockClass = val miuiClockClass =
"com.android.systemui.statusbar.views.MiuiClock".findClass(lpparam.classLoader) "com.android.systemui.statusbar.views.MiuiClock".findClass(getDefaultClassLoader())
miuiClockClass.hookAfterConstructor( miuiClockClass.hookAfterConstructor(
Context::class.java, Context::class.java,
AttributeSet::class.java, AttributeSet::class.java,
@@ -52,16 +55,16 @@ class StatusBarTimeCustomization : IXposedHookLoadPackage {
textV.isSingleLine = false textV.isSingleLine = false
if (isDoubleLine) { if (isDoubleLine) {
str = "\n" str = "\n"
var clock_double_line_size = 7F var clockDoubleLineSize = 7F
if (getClockDoubleSize != 0) { if (getClockDoubleSize != 0) {
clock_double_line_size = getClockDoubleSize.toFloat() clockDoubleLineSize = getClockDoubleSize.toFloat()
} }
textV.setTextSize(TypedValue.COMPLEX_UNIT_DIP, clock_double_line_size) textV.setTextSize(TypedValue.COMPLEX_UNIT_DIP, clockDoubleLineSize)
textV.setLineSpacing(0F, 0.8F) textV.setLineSpacing(0F, 0.8F)
} else { } else {
if (getClockSize != 0) { if (getClockSize != 0) {
val clock_size = getClockSize.toFloat() val clockSize = getClockSize.toFloat()
textV.setTextSize(TypedValue.COMPLEX_UNIT_DIP, clock_size) textV.setTextSize(TypedValue.COMPLEX_UNIT_DIP, clockSize)
} }
} }
val d: Method = textV.javaClass.getDeclaredMethod("updateTime") val d: Method = textV.javaClass.getDeclaredMethod("updateTime")
@@ -69,6 +72,7 @@ class StatusBarTimeCustomization : IXposedHookLoadPackage {
d.isAccessible = true d.isAccessible = true
d.invoke(textV) d.invoke(textV)
} }
class T : TimerTask() { class T : TimerTask() {
override fun run() { override fun run() {
Handler(textV.context.mainLooper).post(r) Handler(textV.context.mainLooper).post(r)
@@ -87,15 +91,32 @@ class StatusBarTimeCustomization : IXposedHookLoadPackage {
Settings.System.TIME_12_24 Settings.System.TIME_12_24
) )
val is24 = t == "24" val is24 = t == "24"
now_time = Calendar.getInstance().time nowTime = Calendar.getInstance().time
textV.text = getDate(c!!) + str + getTime(c!!, is24) textV.text = getDate(c!!) + str + getTime(c!!, is24)
} }
} catch (e: Exception) { } catch (e: Exception) {
} }
} }
if (isCenterAlign) {
val collapsedStatusBarFragmentClass =
"com.android.systemui.statusbar.phone.CollapsedStatusBarFragment".findClass(
getDefaultClassLoader()
)
collapsedStatusBarFragmentClass.hookAfterMethod(
"onViewCreated",
View::class.java,
Bundle::class.java
) {
val MiuiPhoneStatusBarView: ViewGroup =
it.thisObject.getObjectField("mStatusBar") as ViewGroup
val res: Resources = MiuiPhoneStatusBarView.resources
val clockId: Int = res.getIdentifier("clock", "id", "com.android.systemui")
val clock: TextView = MiuiPhoneStatusBarView.findViewById(clockId)
clock.gravity = Gravity.CENTER_HORIZONTAL
}
}
} }
} }
@SuppressLint("SimpleDateFormat") @SuppressLint("SimpleDateFormat")
private fun getDate(context: Context): String { private fun getDate(context: Context): String {
@@ -134,7 +155,7 @@ class StatusBarTimeCustomization : IXposedHookLoadPackage {
if (!isHideSpace) datePattern = "$datePattern " if (!isHideSpace) datePattern = "$datePattern "
} }
} }
datePattern = SimpleDateFormat(datePattern).format(now_time) datePattern = SimpleDateFormat(datePattern).format(nowTime)
return datePattern return datePattern
} }
@@ -144,7 +165,7 @@ class StatusBarTimeCustomization : IXposedHookLoadPackage {
val isZh = isZh(context) val isZh = isZh(context)
timePattern += if (t) "HH:mm" else "h:mm" timePattern += if (t) "HH:mm" else "h:mm"
if (isSecond) timePattern += ":ss" if (isSecond) timePattern += ":ss"
timePattern = SimpleDateFormat(timePattern).format(now_time) timePattern = SimpleDateFormat(timePattern).format(nowTime)
if (isZh) timePattern = getPeriod(isZh) + timePattern else timePattern += getPeriod(isZh) if (isZh) timePattern = getPeriod(isZh) + timePattern else timePattern += getPeriod(isZh)
timePattern = getDoubleHour() + timePattern timePattern = getDoubleHour() + timePattern
return timePattern return timePattern
@@ -155,7 +176,7 @@ class StatusBarTimeCustomization : IXposedHookLoadPackage {
var period = "" var period = ""
if (isPeriod) { if (isPeriod) {
if (isZh) { if (isZh) {
when (SimpleDateFormat("HH").format(now_time)) { when (SimpleDateFormat("HH").format(nowTime)) {
"00", "01", "02", "03", "04", "05" -> { "00", "01", "02", "03", "04", "05" -> {
period = "凌晨" period = "凌晨"
} }
@@ -176,7 +197,7 @@ class StatusBarTimeCustomization : IXposedHookLoadPackage {
} }
} }
} else { } else {
period = SimpleDateFormat("a").format(now_time) period = SimpleDateFormat("a").format(nowTime)
if (!isHideSpace) { if (!isHideSpace) {
period = " $period" period = " $period"
} }
@@ -190,7 +211,7 @@ class StatusBarTimeCustomization : IXposedHookLoadPackage {
private fun getDoubleHour(): String { private fun getDoubleHour(): String {
var doubleHour = "" var doubleHour = ""
if (isDoubleHour) { if (isDoubleHour) {
when (SimpleDateFormat("HH").format(now_time)) { when (SimpleDateFormat("HH").format(nowTime)) {
"23", "00" -> { "23", "00" -> {
doubleHour = "子时" doubleHour = "子时"
} }

View File

@@ -3,12 +3,12 @@ package com.lt2333.simplicitytools.hook.app.systemui
import com.github.kyuubiran.ezxhelper.utils.findMethod import com.github.kyuubiran.ezxhelper.utils.findMethod
import com.github.kyuubiran.ezxhelper.utils.hookMethod import com.github.kyuubiran.ezxhelper.utils.hookMethod
import com.lt2333.simplicitytools.util.hasEnable import com.lt2333.simplicitytools.util.hasEnable
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.XposedHelpers import de.robv.android.xposed.XposedHelpers
import de.robv.android.xposed.callbacks.XC_LoadPackage
class WaveCharge : IXposedHookLoadPackage { object WaveCharge: HookRegister() {
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam?) {
override fun init() {
hasEnable("enable_wave_charge_animation") { hasEnable("enable_wave_charge_animation") {
findMethod("com.android.keyguard.charge.ChargeUtils") { findMethod("com.android.keyguard.charge.ChargeUtils") {
name == "supportWaveChargeAnimation" name == "supportWaveChargeAnimation"
@@ -41,4 +41,5 @@ class WaveCharge : IXposedHookLoadPackage {
} }
} }
} }
} }

View File

@@ -3,15 +3,16 @@ package com.lt2333.simplicitytools.hook.app.thememanager
import com.lt2333.simplicitytools.util.findClass import com.lt2333.simplicitytools.util.findClass
import com.lt2333.simplicitytools.util.hasEnable import com.lt2333.simplicitytools.util.hasEnable
import com.lt2333.simplicitytools.util.hookBeforeMethod import com.lt2333.simplicitytools.util.hookBeforeMethod
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.callbacks.XC_LoadPackage
class RemoveAds : IXposedHookLoadPackage { object RemoveAds : HookRegister() {
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
"com.android.thememanager.basemodule.ad.model.AdInfoResponse".hookBeforeMethod(lpparam.classLoader, "isAdValid", "com.android.thememanager.basemodule.ad.model.AdInfo".findClass(lpparam.classLoader)) { override fun init() {
"com.android.thememanager.basemodule.ad.model.AdInfoResponse".hookBeforeMethod(getDefaultClassLoader(), "isAdValid", "com.android.thememanager.basemodule.ad.model.AdInfo".findClass(getDefaultClassLoader())) {
hasEnable("remove_thememanager_ads") { hasEnable("remove_thememanager_ads") {
it.result = false it.result = false
} }
} }
} }
} }

View File

@@ -0,0 +1,31 @@
package com.lt2333.simplicitytools.util.xposed
import com.github.kyuubiran.ezxhelper.init.EzXHelperInit
import com.github.kyuubiran.ezxhelper.utils.Log.logexIfThrow
import com.lt2333.simplicitytools.util.xposed.base.AppRegister
import de.robv.android.xposed.IXposedHookLoadPackage
import de.robv.android.xposed.IXposedHookZygoteInit
import de.robv.android.xposed.callbacks.XC_LoadPackage
abstract class EasyXposedInit: IXposedHookLoadPackage, IXposedHookZygoteInit {
private lateinit var packageParam: XC_LoadPackage.LoadPackageParam
abstract val registeredApp: List<AppRegister>
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam?) {
packageParam = lpparam!!
registeredApp.forEach { app ->
if (app.packageName == lpparam.packageName && (lpparam.processName in app.processName || app.processName.isEmpty())) {
EzXHelperInit.initHandleLoadPackage(lpparam)
EzXHelperInit.setLogTag(app.logTag)
EzXHelperInit.setToastTag(app.logTag)
runCatching { app.handleLoadPackage(lpparam) }.logexIfThrow("Failed call handleLoadPackage, package: ${app.packageName}")
}
}
}
override fun initZygote(startupParam: IXposedHookZygoteInit.StartupParam?) {
EzXHelperInit.initZygote(startupParam!!)
}
}

View File

@@ -0,0 +1,30 @@
package com.lt2333.simplicitytools.util.xposed.base
import com.github.kyuubiran.ezxhelper.utils.Log
import com.github.kyuubiran.ezxhelper.utils.Log.logexIfThrow
import de.robv.android.xposed.IXposedHookInitPackageResources
import de.robv.android.xposed.IXposedHookLoadPackage
import de.robv.android.xposed.callbacks.XC_InitPackageResources
import de.robv.android.xposed.callbacks.XC_LoadPackage
abstract class AppRegister: IXposedHookLoadPackage {
abstract val packageName: String
abstract val processName: List<String>
abstract val logTag: String
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {}
protected fun autoInitHooks(lpparam: XC_LoadPackage.LoadPackageParam, vararg hook: HookRegister) {
hook.forEach {
runCatching {
if (it.isInit) return@forEach
it.setLoadPackageParam(lpparam)
it.init()
it.isInit = true
Log.i("Inited hook: ${it.javaClass.simpleName}")
}.logexIfThrow("Failed init hook: ${it.javaClass.simpleName}")
}
}
}

View File

@@ -0,0 +1,25 @@
package com.lt2333.simplicitytools.util.xposed.base
import de.robv.android.xposed.callbacks.XC_LoadPackage
abstract class HookRegister {
private lateinit var lpparam: XC_LoadPackage.LoadPackageParam
var isInit: Boolean = false
abstract fun init()
fun setLoadPackageParam(loadPackageParam: XC_LoadPackage.LoadPackageParam) {
lpparam = loadPackageParam
}
protected fun getLoadPackageParam(): XC_LoadPackage.LoadPackageParam {
if (!this::lpparam.isInitialized) {
throw RuntimeException("lpparam should be initialized")
}
return lpparam
}
protected fun getDefaultClassLoader(): ClassLoader {
return getLoadPackageParam().classLoader
}
}

View File

@@ -178,4 +178,13 @@
<string name="right">Derecha</string> <string name="right">Derecha</string>
<string name="big_mobile_type_icon">Icono grande de red móvil</string> <string name="big_mobile_type_icon">Icono grande de red móvil</string>
<string name="can_notification_slide">Hacer que todas las notificaciones puedan deslizarse hacia una ventana pequeña</string> <string name="can_notification_slide">Hacer que todas las notificaciones puedan deslizarse hacia una ventana pequeña</string>
<string name="battery_percentage_font_size">Tamaño de la fuente del porcentaje de batería</string>
<string name="zero_do_no_change">0: sin cambios</string>
<string name="big_mobile_type_icon_size">Tamaño del icono red móvil grande</string>
<string name="big_mobile_type_icon_bold">Icono red móvil grande en negrita</string>
<string name="big_mobile_type_icon_up_and_down_position">Posición arriba y abajo del icono red móvil grande</string>
<string name="input_error">Error de entrada</string>
<string name="range">Rango: </string>
<string name="big_mobile_type_icon_left_and_right_margins">Margen izquierdo y derecho del icono de red móvil grande</string>
<string name="cast">Transmitir</string>
</resources> </resources>

View File

@@ -178,4 +178,13 @@
<string name="right">Dreapta</string> <string name="right">Dreapta</string>
<string name="big_mobile_type_icon">Pictogramă mare pentru tipul datelor mobile</string> <string name="big_mobile_type_icon">Pictogramă mare pentru tipul datelor mobile</string>
<string name="can_notification_slide">Toate notificările pot fi glisate în fereastra mică</string> <string name="can_notification_slide">Toate notificările pot fi glisate în fereastra mică</string>
<string name="battery_percentage_font_size">Dimensiune font procentaj baterie</string>
<string name="zero_do_no_change">0: nu se modifică</string>
<string name="big_mobile_type_icon_size">Dimensiune pictogramă tip mobil mare</string>
<string name="big_mobile_type_icon_bold">Pictogramă tip mobil mare îngroșată</string>
<string name="big_mobile_type_icon_up_and_down_position">Poziție pictogramă mare tip date mobile sus/jos</string>
<string name="input_error">Eroare de intrare</string>
<string name="range">Interval: </string>
<string name="big_mobile_type_icon_left_and_right_margins">Pictogramă mare tip date mobil, marginile din stânga și din dreapta</string>
<string name="cast">Proiectare</string>
</resources> </resources>

View File

@@ -190,4 +190,7 @@
<string name="input_error">Ошибка ввода</string> <string name="input_error">Ошибка ввода</string>
<string name="range">Диапазон: </string> <string name="range">Диапазон: </string>
<string name="big_mobile_type_icon_left_and_right_margins">Положение типа сети по горизонтали</string> <string name="big_mobile_type_icon_left_and_right_margins">Положение типа сети по горизонтали</string>
<string name="cast">Трансляция</string>
<string name="force_support_send_app">Принудительно открывать все приложения на другом устройстве</string>
<string name="status_bar_time_double_line_center_align">Выравнивание по центру двойной строки</string>
</resources> </resources>

View File

@@ -187,4 +187,7 @@
<string name="input_error">Giriş hatası</string> <string name="input_error">Giriş hatası</string>
<string name="range">Menzil:</string> <string name="range">Menzil:</string>
<string name="big_mobile_type_icon_left_and_right_margins">Büyük mobil tip simgesi sol ve sağ kenar boşlukları</string> <string name="big_mobile_type_icon_left_and_right_margins">Büyük mobil tip simgesi sol ve sağ kenar boşlukları</string>
<string name="cast">Yayınlama</string>
<string name="force_support_send_app">Tüm uygulama desteğini başka bir cihazda açmaya zorla</string>
<string name="status_bar_time_double_line_center_align">Çift sıralı merkez hizalama</string>
</resources> </resources>

View File

@@ -7,9 +7,10 @@
<string name="delete_on_post_notification_summary">Xoá thông báo \"Ứng dụng này đang hiển thị trên ứng dụng khác\"</string> <string name="delete_on_post_notification_summary">Xoá thông báo \"Ứng dụng này đang hiển thị trên ứng dụng khác\"</string>
<string name="other">Khác</string> <string name="other">Khác</string>
<string name="disable_flag_secure">Cho phép chụp màn hình</string> <string name="disable_flag_secure">Cho phép chụp màn hình</string>
<string name="disable_flag_secure_summary">Cho phép ảnh chụp màn hình trong phần mềm không cho phép \nHỗ trợ thêm cài đặt nhanh thả xuống trên Trung tâm điều khiển để bảo mật</string>
<string name="home">Trang chủ</string> <string name="home">Trang chủ</string>
<string name="home_time">Luôn hiển thị đồng hồ màn hình khoá</string> <string name="home_time">Luôn hiển thị đồng hồ màn hình khoá</string>
<string name="reboot_host">Khởi động lại tất cả phạm vi</string> <string name="reboot_host">Khởi động lại ứng dụng liên quan</string>
<string name="reboot">Khởi động lại hệ thống</string> <string name="reboot">Khởi động lại hệ thống</string>
<!--Status bar icons--> <!--Status bar icons-->
<string name="status_bar_icon">Biểu tượng thanh trạng thái</string> <string name="status_bar_icon">Biểu tượng thanh trạng thái</string>
@@ -24,6 +25,10 @@
<string name="hide_alarm_icon">Ẩn biểu tượng Báo thức</string> <string name="hide_alarm_icon">Ẩn biểu tượng Báo thức</string>
<string name="hide_hotspot_icon">Ẩn biểu tượng Điểm phát sóng di động</string> <string name="hide_hotspot_icon">Ẩn biểu tượng Điểm phát sóng di động</string>
<string name="hide_headset_icon">Ẩn biểu tượng tai nghe</string> <string name="hide_headset_icon">Ẩn biểu tượng tai nghe</string>
<string name="hide_bluetooth_battery_icon">Ẩn biểu tượng pin Bluetooth</string>
<string name="hide_big_hd_icon">Ẩn biểu tượng mạng HD lớn</string>
<string name="hide_small_hd_icon">Ẩn biểu tượng mạng HD nhỏ</string>
<string name="hide_hd_no_service_icon">Ẩn biểu tượng không có dịch vụ</string>
<string name="about">Giới thiệu</string> <string name="about">Giới thiệu</string>
<string name="about_module">Về Module</string> <string name="about_module">Về Module</string>
<string name="verison">Phiên bản</string> <string name="verison">Phiên bản</string>
@@ -43,18 +48,22 @@
<string name="menu">Menu</string> <string name="menu">Menu</string>
<string name="Tips">Mẹo</string> <string name="Tips">Mẹo</string>
<string name="skip_waiting_time">Bỏ qua 5/10 giây cảnh báo</string> <string name="skip_waiting_time">Bỏ qua 5/10 giây cảnh báo</string>
<string name="unlock_unlimited_cropping">Bỏ qua danh sách đen hệ thống và phần mềm cấm cửa sổ nhỏ</string>
<string name="hide_slave_wifi_icon">Ẩn biểu tượng WIFI thứ hai</string> <string name="hide_slave_wifi_icon">Ẩn biểu tượng WIFI thứ hai</string>
<string name="HideLauncherIcon">Ẩn biểu tượng Trình khi chạy</string> <string name="HideLauncherIcon">Ẩn biểu tượng ứng dụng này khi màn hình chính</string>
<string name="hide_battery_percentage_icon">Ẩn pin (%)</string> <string name="hide_battery_percentage_icon">Ẩn (%) pin</string>
<string name="hide_battery_icon">Ẩn biểu tượng pin</string> <string name="hide_battery_icon">Ẩn biểu tượng pin</string>
<string name="status_bar_clock_format">Định dạng đồng hồ trên thanh trạng thái</string> <string name="status_bar_clock_format">Định dạng đồng hồ trên thanh trạng thái</string>
<string name="status_bar_time_year">Hiển thị năm</string> <string name="status_bar_time_year">Hiển thị năm</string>
<string name="status_bar_time_month">Hiển thị tháng</string> <string name="status_bar_time_month">Hiển thị tháng</string>
<string name="status_bar_time_day">Hiện thị thứ</string>
<string name="status_bar_time_week">Hiển thị ngày</string> <string name="status_bar_time_week">Hiển thị ngày</string>
<string name="status_bar_time_hide_space">Không có khoảng cách</string>
<string name="allow_screenshots">Cho phép chụp màn hình</string> <string name="allow_screenshots">Cho phép chụp màn hình</string>
<string name="lock_max">Khoá giới hạn hiện tại</string> <string name="lock_max">Khoá giới hạn hiện tại</string>
<string name="custom_clock_switch">Công Tắc Đồng Hồ Tuỳ Chỉnh</string> <string name="status_bar_time_double_hour">Hiển thị giờ con giáp - tiếng trung</string>
<string name="status_bar_time_period">Hiển thị AM/PM</string> <string name="custom_clock_switch">Tuỳ Chỉnh công tắc Đồng hồ</string>
<string name="status_bar_time_period">Hiển thị SA/CH</string>
<string name="status_bar_time_double_line">Hàng kép</string> <string name="status_bar_time_double_line">Hàng kép</string>
<string name="status_bar_clock_size">Kích cỡ đồng hồ (0: không đổi)</string> <string name="status_bar_clock_size">Kích cỡ đồng hồ (0: không đổi)</string>
<string name="status_bar_clock_double_line_size">Kích cỡ hàng kép (0: không đổi)</string> <string name="status_bar_clock_double_line_size">Kích cỡ hàng kép (0: không đổi)</string>
@@ -71,12 +80,15 @@
<string name="failed_after_restart">Nó sẽ được khôi phục sau khi khởi động lại hệ thống</string> <string name="failed_after_restart">Nó sẽ được khôi phục sau khi khởi động lại hệ thống</string>
<string name="battery_optimization">Tối ưu hóa pin</string> <string name="battery_optimization">Tối ưu hóa pin</string>
<string name="battery_optimization_summary">Mở nhanh menu tối ưu hóa pin bị ẩn bởi MIUI</string> <string name="battery_optimization_summary">Mở nhanh menu tối ưu hóa pin bị ẩn bởi MIUI</string>
<string name="remove_small_window_restrictions">Buộc tất cả ứng dụng đều mở cửa sổ nhỏ</string>
<string name="app_coolapk_url">Tới và đánh giá chúng tôi 5 sao</string> <string name="app_coolapk_url">Tới và đánh giá chúng tôi 5 sao</string>
<string name="app_coolapk_url_summary">Điều này có thể giúp chúng tôi dễ được biết tới hơn</string> <string name="app_coolapk_url_summary">Điều này có thể giúp chúng tôi dễ được biết tới hơn</string>
<string name="qq_channel">Tham gia kênh QQ chính thức</string> <string name="qq_channel">Tham gia kênh QQ chính thức</string>
<string name="tg_channel">Tham gia kênh TG chính thức</string> <string name="tg_channel">Tham gia kênh TG chính thức</string>
<string name="tg_channel_summary">Bạn có thể vào nhóm trò chuyện trên kênh</string> <string name="tg_channel_summary">Bạn có thể vào nhóm trò chuyện trên kênh</string>
<string name="discussions">Thảo luận</string> <string name="discussions">Thảo luận</string>
<string name="remove_small_window_restrictions_summary">Bỏ qua danh sách đen hệ thống và phần mềm cấm cửa sổ nhỏ</string>
<string name="remove_the_left_side_of_the_lock_screen">Xóa bảng điều khiển bên màn hình khoá</string>
<string name="remove_lock_screen_camera">Gỡ chức năng camera khỏi màn hình khoá</string> <string name="remove_lock_screen_camera">Gỡ chức năng camera khỏi màn hình khoá</string>
<string name="only_official_default_themes_are_supported">Chỉ hỗ trợ những chủ đề mặc định chính thức</string> <string name="only_official_default_themes_are_supported">Chỉ hỗ trợ những chủ đề mặc định chính thức</string>
<string name="lock_one_hundred">Đặt 100 điểm cho ứng dụng Bảo mật</string> <string name="lock_one_hundred">Đặt 100 điểm cho ứng dụng Bảo mật</string>
@@ -100,37 +112,79 @@
<string name="lock_one_hundred_summary">Đặt 100 điểm cho ứng dụng Bảo mật và chặn nút Tối ưu hóa</string> <string name="lock_one_hundred_summary">Đặt 100 điểm cho ứng dụng Bảo mật và chặn nút Tối ưu hóa</string>
<string name="unlock_unlimited_cropping_summary">Không nhận giới hạn tối thiểu khi cắt ảnh bởi MIUI</string> <string name="unlock_unlimited_cropping_summary">Không nhận giới hạn tối thiểu khi cắt ảnh bởi MIUI</string>
<string name="hide_wifi_activity_icon">Ẩn biểu tượng hoạt động WIFI</string> <string name="hide_wifi_activity_icon">Ẩn biểu tượng hoạt động WIFI</string>
<string name="hide_mobile_activity_icon">Ẩn biểu tượng hoạt động dữ liệu</string>
<string name="hide_mobile_type_icon">Ẩn biểu tượng kiểu dữ liệu mạng</string>
<string name="show_weather_main_switch">Hiện thời tiết - Công tắc chính</string> <string name="show_weather_main_switch">Hiện thời tiết - Công tắc chính</string>
<string name="lock_screen">Màn hình khoá</string> <string name="lock_screen">Màn hình khoá</string>
<string name="notification_center">Trung tâm Thông báo</string> <string name="notification_center">Trung tâm thông báo</string>
<string name="show_city">Hiện thành phố</string> <string name="show_city">Hiện thành phố</string>
<string name="lock_max_fps_summary">Bỏ qua danh sách đen hệ thống và phần mềm cấm cửa sổ nhỏ</string>
<string name="control_center">Trung tâm Điều khiển</string> <string name="control_center">Trung tâm Điều khiển</string>
<string name="control_center_weather_summary">Phiên bản Mi Smart Hub hiện không được hỗ trợ</string>
<string name="not_support">Có vẻ bạn đang dùng LSPosed bản cũ hoặc LSPosed chưa được kích hoạt, vui lòng cập nhật hoặc kích hoạt LSPosed rồi thử lại.</string> <string name="not_support">Có vẻ bạn đang dùng LSPosed bản cũ hoặc LSPosed chưa được kích hoạt, vui lòng cập nhật hoặc kích hoạt LSPosed rồi thử lại.</string>
<string name="matters_needing_attention_context">Nên khởi động lại điện thoại sau lần kích hoạt hoặc cập nhật đầu tiên\nHầu hết các thay đổi yêu cầu khởi động lại ở góc trên cùng bên phải để có hiệu lực</string> <string name="matters_needing_attention_context">Nên khởi động lại điện thoại sau lần kích hoạt hoặc cập nhật đầu tiên\nHầu hết các thay đổi yêu cầu khởi động lại ở góc trên cùng bên phải để có hiệu lực</string>
<string name="are_you_sure_reboot">Bạn chắc chắn muốn khởi động lại?</string> <string name="are_you_sure_reboot">Bạn chắc chắn muốn khởi động lại?</string>
<string name="cancel">Hủy</string> <string name="cancel">Hủy</string>
<string name="are_you_sure_reboot_scope">Bạn có muốn khởi động lại tất cả phạm vi?</string> <string name="are_you_sure_reboot_scope">Bạn có muốn khởi động lại tất cả ứng dụng liên quan?</string>
<string name="hide_battery_charging_icon">Ẩn biểu tượng sạc</string> <string name="hide_battery_charging_icon">Ẩn biểu tượng sạc</string>
<string name="hide_wifi_standard_icon">Ẩn biểu tượng WIFI tiêu chuẩn</string> <string name="hide_wifi_standard_icon">Ẩn biểu tượng WIFI tiêu chuẩn</string>
<string name="status_bar_time_center">Trung tâm thời gian thanh trạng thái</string> <string name="status_bar_time_center">Thời gian hiện thị ở chính gia thanh trạng thái</string>
<string name="status_bar_layout_summary">Nhiều bố cục thanh trạng thái khác đang được phát triển</string>
<string name="status_bar_layout">Bố cục thanh trạng thái</string>
<string name="layout_compatibility_mode">Chế độ tương thích</string> <string name="layout_compatibility_mode">Chế độ tương thích</string>
<string name="left_margin">Lề trái (0: Tự động)</string> <string name="left_margin">Lề trái (0: Tự động)</string>
<string name="right_margin">Lề phải (0: Tự động)</string> <string name="right_margin">Lề phải (0: Tự động)</string>
<string name="layout_compatibility_mode_summary">Làm cho màn hình đục lỗ bên trái và bên phải có thể hiển thị bình thường</string>
<string name="remove_macro_blacklist">Xóa danh sách đen macro trò chơi</string>
<string name="hide_network_speed_splitter">Ẩn bộ chia tốc độ mạng</string>
<string name="updater">Trình cập nhật</string> <string name="updater">Trình cập nhật</string>
<string name="remove_ota_validate">*Gỡ xác thực OTA [LAB]</string> <string name="remove_ota_validate">*Gỡ xác thực OTA [LAB]</string>
<string name="remove_ota_validate_summary">- Chỉ hỗ trợ sử dụng sê-ri VAB, vui lòng không mở sê-ri khác. \n- Không cần đủ điều kiện thử nghiệm nội bộ để sử dụng gói thử nghiệm nội bộ đầy đủ. \n- Những người có quyền thử nghiệm nội bộ sẽ không thể nhận được bản cập nhật thử nghiệm nội bộ và có thể được sử dụng để chặn cập nhật hệ thống. \n- Sau khi nâng cấp loại phiên bản chéo, bạn nên xóa dữ liệu. \n- Không hỗ trợ sử dụng ROM không chính thức.</string>
<string name="settings">Cài đặt</string> <string name="settings">Cài đặt</string>
<string name="show_notification_importance">Hiện thông báo quan trọng</string> <string name="show_notification_importance">Hiện thông báo quan trọng</string>
<string name="show_notification_importance_summary">Hiển thị cài đặt mức độ quan trọng của thông báo bị ẩn trong MIUI 12 và các phiên bản mới hơn</string>
<string name="remove_ad">Gỡ quảng cáo</string> <string name="remove_ad">Gỡ quảng cáo</string>
<string name="remove_thememanager_ads">Gỡ bỏ quảng cáo cho Trình quản lí chủ đề</string> <string name="remove_thememanager_ads">Gỡ bỏ quảng cáo cho Trình quản lí chủ đề</string>
<string name="battery_life_function">Trang pin hiển thị nhiệt độ hiện tại</string>
<string name="enable_wave_charge_animation">Bật hoạt ảnh dạng sóng khi sạc</string> <string name="enable_wave_charge_animation">Bật hoạt ảnh dạng sóng khi sạc</string>
<string name="max_wallpaper_scale">Tỉ lệ hình nền tối đa</string> <string name="max_wallpaper_scale">Tỉ lệ hình nền tối đa</string>
<string name="def">"Mặc định: "</string> <string name="def">"Mặc định: "</string>
<string name="current">Hiện tại:</string> <string name="current">Hiện tại:</string>
<string name="participate_in_translation">Tham gia dịch</string> <string name="participate_in_translation">Tham gia dịch</string>
<string name="participate_in_translation_summary">Giúp chúng tôi dịch ứng dụng sang ngôn ngữ của bạn</string> <string name="participate_in_translation_summary">Giúp chúng tôi dịch ứng dụng sang ngôn ngữ của bạn</string>
<string name="lock_screen_charging_current">Hiển thị thông tin hiện tại trong khi sạc</string>
<string name="current_current">Hiện tại</string>
<string name="remove_open_app_confirmation_popup">xóa cửa sổ bật lên ứng dụng đang mở</string>
<string name="remove_open_app_confirmation_popup_summary">loại bỏ \"Cho phép XXX mở XXX\" Cửa sổ bật lên bắt đầu chuỗi
TIẾP TỤC</string>
<string name="hide_volume_icon">Ẩn biểu tượng Âm lượng</string>
<string name="hide_zen_icon">Ẩn biểu tượng ZEN</string>
<string name="hide_icon">Ẩn biểu tượng</string> <string name="hide_icon">Ẩn biểu tượng</string>
<string name="double_tap_to_sleep">Chạm hai lần để tắt màn hình</string> <string name="double_tap_to_sleep">Chạm hai lần để tắt màn hình</string>
<string name="home_double_tap_to_sleep_summary">Chạm hai lần vào vùng trống để tắt màn hình</string> <string name="home_double_tap_to_sleep_summary">Chạm hai lần vào vùng trống để tắt màn hình</string>
<string name="old_quick_settings_panel">Bảng cài đặt nhanh cũ</string>
<string name="old_qs_custom_switch">Tùy chỉnh các hàng và cột</string>
<string name="qs_custom_columns_unexpanded">Các cột (Không mở rộng)</string>
<string name="qs_custom_rows">Hàng</string> <string name="qs_custom_rows">Hàng</string>
<string name="qs_custom_columns">Cột</string> <string name="qs_custom_columns">Cột</string>
<string name="qs_custom_rows_horizontal">Hàng (ngang)</string>
<string name="status_bar_dual_row_network_speed">Tốc độ mạng hàng kép</string>
<string name="status_bar_dual_row_network_speed_summary">Đi và đến hiển thị tốc độ mạng</string>
<string name="status_bar_network_speed">Tốc độ mạng trên thanh trạng thái</string>
<string name="status_bar_network_speed_dual_row_size">Kích thước hàng kép (0: không thay đổi)</string>
<string name="status_bar_network_speed_dual_row_icon">Biểu tượng hàng kép</string>
<string name="status_bar_network_speed_dual_row_gravity">Căn chỉnh hàng kép</string>
<string name="left">Trái</string>
<string name="right">Phải</string>
<string name="big_mobile_type_icon">Biểu tượng mạng dữ liệu lớn</string>
<string name="can_notification_slide">Làm cho tất cả thông báo có thể được trượt sang cửa sổ nhỏ</string>
<string name="battery_percentage_font_size">Kích thước phông chữ phần trăm pin</string>
<string name="zero_do_no_change">0: không thay đổi</string>
<string name="big_mobile_type_icon_size">Kích thước biểu tượng mạng dữ liệu lớn</string>
<string name="big_mobile_type_icon_bold">Bôi đậm biểu tượng mạng dữ liệu lớn</string>
<string name="big_mobile_type_icon_up_and_down_position">Vị trí mũi tên của biểu tượng mạng dữ liệu di động lớn</string>
<string name="input_error">Nhập lỗi</string>
<string name="range">Phạm vi: </string>
<string name="big_mobile_type_icon_left_and_right_margins">Căn lề biểu tượng mạng dữ liệu lớn</string>
<string name="cast">Truyền</string>
</resources> </resources>

View File

@@ -186,4 +186,7 @@
<string name="input_error">输入错误</string> <string name="input_error">输入错误</string>
<string name="range">范围:</string> <string name="range">范围:</string>
<string name="big_mobile_type_icon_left_and_right_margins">大移动类型图标左右边距</string> <string name="big_mobile_type_icon_left_and_right_margins">大移动类型图标左右边距</string>
<string name="cast">投屏</string>
<string name="force_support_send_app">强制所有应用支持在另一个设备打开</string>
<string name="status_bar_time_double_line_center_align">双排居中对齐</string>
</resources> </resources>

View File

@@ -178,4 +178,15 @@
<string name="right">置右</string> <string name="right">置右</string>
<string name="big_mobile_type_icon">大行動網路圖示</string> <string name="big_mobile_type_icon">大行動網路圖示</string>
<string name="can_notification_slide">強制允許全部通知可使用小窗</string> <string name="can_notification_slide">強制允許全部通知可使用小窗</string>
<string name="battery_percentage_font_size">電量百分比字體大小</string>
<string name="zero_do_no_change">0不修改</string>
<string name="big_mobile_type_icon_size">大行動網路圖示大小</string>
<string name="big_mobile_type_icon_bold">大行動網路圖示加粗</string>
<string name="big_mobile_type_icon_up_and_down_position">大行動網路圖示上下位置</string>
<string name="input_error">輸入錯誤</string>
<string name="range">範圍:</string>
<string name="big_mobile_type_icon_left_and_right_margins">大行動網路圖示左右邊距</string>
<string name="cast">投影</string>
<string name="force_support_send_app">強制所有應用支援在另一個裝置開啟</string>
<string name="status_bar_time_double_line_center_align">雙排居中對齊</string>
</resources> </resources>

View File

@@ -11,5 +11,6 @@
<item>com.android.settings</item> <item>com.android.settings</item>
<item>com.android.thememanager</item> <item>com.android.thememanager</item>
<item>com.miui.screenshot</item> <item>com.miui.screenshot</item>
<item>com.milink.service</item>
</string-array> </string-array>
</resources> </resources>

View File

@@ -190,4 +190,7 @@
<string name="input_error">Input error</string> <string name="input_error">Input error</string>
<string name="range">Range: </string> <string name="range">Range: </string>
<string name="big_mobile_type_icon_left_and_right_margins">Big mobile type icon left and right margins</string> <string name="big_mobile_type_icon_left_and_right_margins">Big mobile type icon left and right margins</string>
<string name="cast">Cast</string>
<string name="force_support_send_app">Force all apps support open on another device</string>
<string name="status_bar_time_double_line_center_align">Dual row center align</string>
</resources> </resources>