mirror of
https://github.com/LittleTurtle2333/SimplicityTools.git
synced 2026-07-15 04:41:18 +08:00
Compare commits
12 Commits
a6e30cfadb
...
1af19eb7ea
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1af19eb7ea | ||
|
|
aa5704864d | ||
|
|
761998072f | ||
|
|
fc1800932b | ||
|
|
181869687e | ||
|
|
5ee5dd71b1 | ||
|
|
b6d8529624 | ||
|
|
243bc39dd6 | ||
|
|
4332ac6ed8 | ||
|
|
8309c9a69a | ||
|
|
62561d4c34 | ||
|
|
4c13ad4152 |
@@ -15,9 +15,8 @@
|
|||||||
|
|
||||||
### 模块说明
|
### 模块说明
|
||||||
|
|
||||||
仅支持MIUI13(Android12)。其余版本可能无效,请不要安装使用。
|
仅支持MIUI13(Android12),其余版本无法使用。
|
||||||
目前处于开发初期阶段,功能较少,后续将逐步完善。
|
|
||||||
|
|
||||||
开发者:[酷安@乌堆小透明](http://www.coolapk.com/u/883441)
|
开发者:[酷安@乌堆小透明](http://www.coolapk.com/u/883441)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|||||||
@@ -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.
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
2
app/proguard-rules.pro
vendored
2
app/proguard-rules.pro
vendored
@@ -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*(...);
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
com.lt2333.simplicitytools.hook.MainHook
|
com.lt2333.simplicitytools.hook.XposedEntry
|
||||||
@@ -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(
|
||||||
|
|||||||
@@ -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)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -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)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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, //强制允许所有应用接力
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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, //解锁裁切最小值
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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)
|
)
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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, //锁定最高刷新率
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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, //显示通知重要程度
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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)
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
|
||||||
@@ -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, //移除主题壁纸的广告
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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'
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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 {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -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 {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -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 {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -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 {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -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 {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -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 {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -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 {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -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 {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,17 +17,23 @@ 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") {
|
||||||
val context = AndroidAppHelper.currentApplication().applicationContext
|
val context = AndroidAppHelper.currentApplication().applicationContext
|
||||||
@@ -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
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@@ -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 {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -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 {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -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 {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -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 {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -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 {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -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 =
|
||||||
|
|||||||
@@ -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 {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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 {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -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 {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -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 {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -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 {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -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 {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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 {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -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 {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -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 {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -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 {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -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,16 +91,33 @@ 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 {
|
||||||
var datePattern = ""
|
var datePattern = ""
|
||||||
@@ -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 = "子时"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -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!!)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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}")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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>
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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 khởi chạy</string>
|
<string name="HideLauncherIcon">Ẩn biểu tượng ứng dụng này khỏi 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 giữa 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>
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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>
|
||||||
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user