mirror of
https://github.com/LittleTurtle2333/SimplicityTools.git
synced 2026-07-14 12:21:18 +08:00
Compare commits
82 Commits
2bc68e9724
...
l10n_main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4225d64ae3 | ||
|
|
a484a3ba04 | ||
|
|
1429bcd392 | ||
|
|
a4eb720b61 | ||
|
|
1e78221408 | ||
|
|
07ecd3adb8 | ||
|
|
86da593cff | ||
|
|
236e545706 | ||
|
|
dc76d99fc6 | ||
|
|
20585c66ea | ||
|
|
8cbf9d2072 | ||
|
|
a5ba41260a | ||
|
|
cbdf331035 | ||
|
|
357c30bc3a | ||
|
|
138c653a82 | ||
|
|
587141ca82 | ||
|
|
73d5e9855f | ||
|
|
0eeff2646b | ||
|
|
2b5f903006 | ||
|
|
8cba53fa3f | ||
|
|
cea867374c | ||
|
|
a5c39da799 | ||
|
|
870a742a0f | ||
|
|
367663df77 | ||
|
|
ea64b57d6a | ||
|
|
4bde2ccfdc | ||
|
|
772b019631 | ||
|
|
168ab492eb | ||
|
|
7b613d76b6 | ||
|
|
3b1651554d | ||
|
|
752fb84d39 | ||
|
|
b3fbfcea86 | ||
|
|
44b671fa9e | ||
|
|
7020324ef7 | ||
|
|
5fc1e9deaa | ||
|
|
2ce513bc97 | ||
|
|
28cf25b08c | ||
|
|
0b0b401d2f | ||
|
|
f31bdab7f9 | ||
|
|
33be4dd4e9 | ||
|
|
5eb4b08079 | ||
|
|
e152a5ba74 | ||
|
|
efc77eb518 | ||
|
|
8cad8e371c | ||
|
|
990ea8ef7e | ||
|
|
4ce55d1fb3 | ||
|
|
1feb754385 | ||
|
|
a107f71986 | ||
|
|
2177850498 | ||
|
|
5e4160aed4 | ||
|
|
99da21e762 | ||
|
|
8fe9d09624 | ||
|
|
de220825a2 | ||
|
|
4ed3e40e99 | ||
|
|
5f5bc6572c | ||
|
|
b3859653ef | ||
|
|
7dcfdcced7 | ||
|
|
f2a4f06301 | ||
|
|
90294a1599 | ||
|
|
2b7e5e0833 | ||
|
|
4a5e83cfda | ||
|
|
b4bc91043e | ||
|
|
d07bd2aaf1 | ||
|
|
8bd401b88f | ||
|
|
2b36ad29d8 | ||
|
|
3e0d94ab81 | ||
|
|
7914d51168 | ||
|
|
d8cf1bdc34 | ||
|
|
2f69115907 | ||
|
|
4295af9cc5 | ||
|
|
179c82d563 | ||
|
|
6d1aa2e824 | ||
|
|
5c12c0aa56 | ||
|
|
e63b9a861d | ||
|
|
5b3ad4dd6a | ||
|
|
b781f59486 | ||
|
|
5a74882005 | ||
|
|
0c71f68362 | ||
|
|
f39d7d601d | ||
|
|
ebb5e1435b | ||
|
|
40c24cbb40 | ||
|
|
2830c8f48a |
40
README.md
40
README.md
@@ -1,9 +1,7 @@
|
|||||||
<div align="center">
|
<div align="center">
|
||||||
<img width="160" src="https://raw.githubusercontent.com/LittleTurtle2333/SimplicityTools/main/doc/ic_launcher.png" alt="logo">
|
<img width="160" src="https://raw.githubusercontent.com/LittleTurtle2333/SimplicityTools/main/doc/ic_launcher.png" alt="logo">
|
||||||
<h1>WooBox For MIUI</h1>
|
<h1>WooBox For MIUI</h1>
|
||||||
<p>
|
<p><b><a href="https://github.com/LittleTurtle2333/SimplicityTools/blob/main/README_EN.md">English</a> 丨 简体中文</b></p>
|
||||||
<b><a href="https://github.com/LittleTurtle2333/SimplicityTools/blob/main/README_EN.md">English</a> 丨 简体中文</b>
|
|
||||||
</p>
|
|
||||||
<a href="https://github.com/Xposed-Modules-Repo/com.lt2333.simplicitytools/releases"><img alt="GitHub all releases" src="https://img.shields.io/github/downloads/Xposed-Modules-Repo/com.lt2333.simplicitytools/total?label=Downloads"></a>
|
<a href="https://github.com/Xposed-Modules-Repo/com.lt2333.simplicitytools/releases"><img alt="GitHub all releases" src="https://img.shields.io/github/downloads/Xposed-Modules-Repo/com.lt2333.simplicitytools/total?label=Downloads"></a>
|
||||||
<a href="https://github.com/LittleTurtle2333/SimplicityTools/stargazers"><img alt="GitHub stars" src="https://img.shields.io/github/stars/LittleTurtle2333/SimplicityTools"></a>
|
<a href="https://github.com/LittleTurtle2333/SimplicityTools/stargazers"><img alt="GitHub stars" src="https://img.shields.io/github/stars/LittleTurtle2333/SimplicityTools"></a>
|
||||||
<a href="https://github.com/LittleTurtle2333/SimplicityTools/issues"><img alt="GitHub issues" src="https://img.shields.io/github/issues/LittleTurtle2333/SimplicityTools"></a>
|
<a href="https://github.com/LittleTurtle2333/SimplicityTools/issues"><img alt="GitHub issues" src="https://img.shields.io/github/issues/LittleTurtle2333/SimplicityTools"></a>
|
||||||
@@ -14,42 +12,54 @@
|
|||||||
---
|
---
|
||||||
|
|
||||||
### 模块说明
|
### 模块说明
|
||||||
|
|
||||||
开发者:[酷安@乌堆小透明](http://www.coolapk.com/u/883441)
|
开发者:[酷安@乌堆小透明](http://www.coolapk.com/u/883441)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### 模块截图
|
### 模块截图
|
||||||

|
|
||||||
|

|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### 下载地址
|
### 下载地址
|
||||||
|
|
||||||
Xposed仓库下载:[点击此处下载最新发行版](https://github.com/Xposed-Modules-Repo/com.lt2333.simplicitytools/releases)
|
Xposed
|
||||||
|
仓库下载:[点击此处下载最新发行版](https://github.com/Xposed-Modules-Repo/com.lt2333.simplicitytools/releases)
|
||||||
|
|
||||||
酷安下载:[点击此处下载最新发行版](https://www.coolapk.com/apk/com.lt2333.simplicitytools)
|
酷安下载:[点击此处下载最新发行版](https://www.coolapk.com/apk/com.lt2333.simplicitytools)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### 改进翻译
|
### 改进翻译
|
||||||
[](https://crowdin.com/project/simplicitytools)[点击此处进入Crowdin](https://crowdin.com/project/simplicitytools)
|
|
||||||
|
[](https://crowdin.com/project/simplicitytools) [点击此处进入Crowdin](https://crowdin.com/project/simplicitytools)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### 第三方开源引用
|
### 第三方开源引用
|
||||||
|
|
||||||
##### GNU General Public License v3.0
|
##### GNU General Public License v3.0
|
||||||
[qqlittleice/MiuiHome](https://github.com/qqlittleice/MiuiHome)
|
|
||||||
[yujincheng08/BiliRoaming](https://github.com/yujincheng08/BiliRoaming)
|
[yujincheng08/BiliRoaming](https://github.com/yujincheng08/BiliRoaming)
|
||||||
[Mikanoshi/CustoMIUIzer](https://code.highspec.ru/Mikanoshi/CustoMIUIzer)
|
[Mikanoshi/CustoMIUIzer](https://code.highspec.ru/Mikanoshi/CustoMIUIzer)
|
||||||
|
[MonwF/customiuizer](https://github.com/MonwF/customiuizer)
|
||||||
|
|
||||||
##### GNU General Public License v2.0
|
##### GNU General Public License v2.0
|
||||||
[LSPosed/CorePatch](https://github.com/LSPosed/CorePatch)
|
|
||||||
|
[LSPosed/CorePatch](https://github.com/LSPosed/CorePatch)
|
||||||
|
|
||||||
##### GNU Lesser General Public License v2.1
|
##### GNU Lesser General Public License v2.1
|
||||||
[577fkj/blockmiui](https://github.com/577fkj/blockmiui)
|
|
||||||
|
[577fkj/blockmiui](https://github.com/577fkj/blockmiui)
|
||||||
|
|
||||||
##### Apache License 2.0
|
##### Apache License 2.0
|
||||||
[KyuubiRan/EzXHelper](https://github.com/KyuubiRan/EzXHelper)
|
|
||||||
|
[KyuubiRan/EzXHelper](https://github.com/KyuubiRan/EzXHelper)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### License
|
### License
|
||||||
|
|
||||||
[GNU General Public License v3.0](https://github.com/LittleTurtle2333/SimplicityTools/blob/main/LICENSE)
|
[GNU General Public License v3.0](https://github.com/LittleTurtle2333/SimplicityTools/blob/main/LICENSE)
|
||||||
|
|||||||
28
README_EN.md
28
README_EN.md
@@ -1,9 +1,7 @@
|
|||||||
<div align="center">
|
<div align="center">
|
||||||
<img width="160" src="https://raw.githubusercontent.com/LittleTurtle2333/SimplicityTools/main/doc/ic_launcher.png" alt="logo">
|
<img width="160" src="https://raw.githubusercontent.com/LittleTurtle2333/SimplicityTools/main/doc/ic_launcher.png" alt="logo">
|
||||||
<h1>WooBox For MIUI</h1>
|
<h1>WooBox For MIUI</h1>
|
||||||
<p>
|
<p><b>English 丨 <a href="https://github.com/LittleTurtle2333/SimplicityTools/blob/main/README.md">简体中文</a></b></p>
|
||||||
<b>English 丨 <a href="https://github.com/LittleTurtle2333/SimplicityTools/blob/main/README.md">简体中文</a></b>
|
|
||||||
</p>
|
|
||||||
<a href="https://github.com/Xposed-Modules-Repo/com.lt2333.simplicitytools/releases"><img alt="GitHub all releases" src="https://img.shields.io/github/downloads/Xposed-Modules-Repo/com.lt2333.simplicitytools/total?label=Downloads"></a>
|
<a href="https://github.com/Xposed-Modules-Repo/com.lt2333.simplicitytools/releases"><img alt="GitHub all releases" src="https://img.shields.io/github/downloads/Xposed-Modules-Repo/com.lt2333.simplicitytools/total?label=Downloads"></a>
|
||||||
<a href="https://github.com/LittleTurtle2333/SimplicityTools/stargazers"><img alt="GitHub stars" src="https://img.shields.io/github/stars/LittleTurtle2333/SimplicityTools"></a>
|
<a href="https://github.com/LittleTurtle2333/SimplicityTools/stargazers"><img alt="GitHub stars" src="https://img.shields.io/github/stars/LittleTurtle2333/SimplicityTools"></a>
|
||||||
<a href="https://github.com/LittleTurtle2333/SimplicityTools/issues"><img alt="GitHub issues" src="https://img.shields.io/github/issues/LittleTurtle2333/SimplicityTools"></a>
|
<a href="https://github.com/LittleTurtle2333/SimplicityTools/issues"><img alt="GitHub issues" src="https://img.shields.io/github/issues/LittleTurtle2333/SimplicityTools"></a>
|
||||||
@@ -14,35 +12,45 @@
|
|||||||
---
|
---
|
||||||
|
|
||||||
### Screenshot
|
### Screenshot
|
||||||

|
|
||||||
|

|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### Download
|
### Download
|
||||||
|
|
||||||
Xposed Repo:[Click here to download the latest release](https://github.com/Xposed-Modules-Repo/com.lt2333.simplicitytools/releases)
|
Xposed Repo:[Click here to download the latest release](https://github.com/Xposed-Modules-Repo/com.lt2333.simplicitytools/releases)
|
||||||
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### Participate in translation
|
### Participate in translation
|
||||||
[](https://crowdin.com/project/simplicitytools)[Click here to Crowdin](https://crowdin.com/project/simplicitytools)
|
|
||||||
|
[](https://crowdin.com/project/simplicitytools) [Click here to Crowdin](https://crowdin.com/project/simplicitytools)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Third party open source references
|
## Third party open source references
|
||||||
|
|
||||||
##### GNU General Public License v3.0
|
##### GNU General Public License v3.0
|
||||||
[qqlittleice/MiuiHome](https://github.com/qqlittleice/MiuiHome)
|
|
||||||
[yujincheng08/BiliRoaming](https://github.com/yujincheng08/BiliRoaming)
|
[yujincheng08/BiliRoaming](https://github.com/yujincheng08/BiliRoaming)
|
||||||
[Mikanoshi/CustoMIUIzer](https://code.highspec.ru/Mikanoshi/CustoMIUIzer)
|
[Mikanoshi/CustoMIUIzer](https://code.highspec.ru/Mikanoshi/CustoMIUIzer)
|
||||||
|
[MonwF/customiuizer](https://github.com/MonwF/customiuizer)
|
||||||
|
|
||||||
##### GNU General Public License v2.0
|
##### GNU General Public License v2.0
|
||||||
[LSPosed/CorePatch](https://github.com/LSPosed/CorePatch)
|
|
||||||
|
[LSPosed/CorePatch](https://github.com/LSPosed/CorePatch)
|
||||||
|
|
||||||
##### GNU Lesser General Public License v2.1
|
##### GNU Lesser General Public License v2.1
|
||||||
|
|
||||||
[577fkj/blockmiui](https://github.com/577fkj/blockmiui)
|
[577fkj/blockmiui](https://github.com/577fkj/blockmiui)
|
||||||
|
|
||||||
##### Apache License 2.0
|
##### Apache License 2.0
|
||||||
|
|
||||||
[KyuubiRan/EzXHelper](https://github.com/KyuubiRan/EzXHelper)
|
[KyuubiRan/EzXHelper](https://github.com/KyuubiRan/EzXHelper)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
[GNU General Public License v3.0](https://github.com/LittleTurtle2333/SimplicityTools/blob/main/LICENSE)
|
[GNU General Public License v3.0](https://github.com/LittleTurtle2333/SimplicityTools/blob/main/LICENSE)
|
||||||
|
|||||||
@@ -11,8 +11,8 @@ android {
|
|||||||
applicationId = "com.lt2333.simplicitytools"
|
applicationId = "com.lt2333.simplicitytools"
|
||||||
minSdk = 31
|
minSdk = 31
|
||||||
targetSdk = 33
|
targetSdk = 33
|
||||||
versionCode = 69
|
versionCode = 74
|
||||||
versionName = "1.6.9"
|
versionName = "1.7.4"
|
||||||
buildConfigField("String", "BUILD_TIME", "\"${System.currentTimeMillis()}\"")
|
buildConfigField("String", "BUILD_TIME", "\"${System.currentTimeMillis()}\"")
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -54,10 +54,9 @@ dependencies {
|
|||||||
implementation("com.github.kyuubiran:EzXHelper:1.0.3")
|
implementation("com.github.kyuubiran:EzXHelper:1.0.3")
|
||||||
//UI
|
//UI
|
||||||
implementation(project(":blockmiui"))
|
implementation(project(":blockmiui"))
|
||||||
implementation("androidx.constraintlayout:constraintlayout:2.1.3")
|
implementation("androidx.constraintlayout:constraintlayout:2.1.4")
|
||||||
//APP Center
|
//APP Center
|
||||||
val appCenterSdkVersion = "4.4.3"
|
val appCenterSdkVersion = "4.4.3"
|
||||||
implementation("com.microsoft.appcenter:appcenter-analytics:${appCenterSdkVersion}")
|
implementation("com.microsoft.appcenter:appcenter-analytics:${appCenterSdkVersion}")
|
||||||
implementation("com.microsoft.appcenter:appcenter-crashes:${appCenterSdkVersion}")
|
implementation("com.microsoft.appcenter:appcenter-crashes:${appCenterSdkVersion}")
|
||||||
implementation("androidx.core:core-splashscreen:1.0.0-rc01")
|
|
||||||
}
|
}
|
||||||
@@ -66,7 +66,7 @@ class AboutPage : BasePage() {
|
|||||||
})
|
})
|
||||||
Line()
|
Line()
|
||||||
TitleText(text = getString(R.string.thank_list))
|
TitleText(text = getString(R.string.thank_list))
|
||||||
TextSummaryArrow(
|
TextSummaryWithArrow(
|
||||||
TextSummaryV(
|
TextSummaryV(
|
||||||
textId = R.string.contributor_list,
|
textId = R.string.contributor_list,
|
||||||
onClickListener = {
|
onClickListener = {
|
||||||
@@ -80,7 +80,7 @@ class AboutPage : BasePage() {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
TextSummaryArrow(
|
TextSummaryWithArrow(
|
||||||
TextSummaryV(
|
TextSummaryV(
|
||||||
textId = R.string.third_party_open_source_statement,
|
textId = R.string.third_party_open_source_statement,
|
||||||
onClickListener = {
|
onClickListener = {
|
||||||
@@ -96,7 +96,7 @@ class AboutPage : BasePage() {
|
|||||||
)
|
)
|
||||||
Line()
|
Line()
|
||||||
TitleText(text = getString(R.string.discussions))
|
TitleText(text = getString(R.string.discussions))
|
||||||
TextSummaryArrow(TextSummaryV(textId = R.string.qq_channel, onClickListener = {
|
TextSummaryWithArrow(TextSummaryV(textId = R.string.qq_channel, onClickListener = {
|
||||||
try {
|
try {
|
||||||
val uri =
|
val uri =
|
||||||
Uri.parse("https://qun.qq.com/qqweb/qunpro/share?_wv=3&_wwv=128&inviteCode=29Mu64&from=246610&biz=ka")
|
Uri.parse("https://qun.qq.com/qqweb/qunpro/share?_wv=3&_wwv=128&inviteCode=29Mu64&from=246610&biz=ka")
|
||||||
@@ -106,7 +106,7 @@ class AboutPage : BasePage() {
|
|||||||
Toast.makeText(activity, "访问失败", Toast.LENGTH_SHORT).show()
|
Toast.makeText(activity, "访问失败", Toast.LENGTH_SHORT).show()
|
||||||
}
|
}
|
||||||
}))
|
}))
|
||||||
TextSummaryArrow(
|
TextSummaryWithArrow(
|
||||||
TextSummaryV(
|
TextSummaryV(
|
||||||
textId = R.string.tg_channel,
|
textId = R.string.tg_channel,
|
||||||
tipsId = R.string.tg_channel_summary,
|
tipsId = R.string.tg_channel_summary,
|
||||||
@@ -127,7 +127,7 @@ class AboutPage : BasePage() {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
TextSummaryArrow(
|
TextSummaryWithArrow(
|
||||||
TextSummaryV(
|
TextSummaryV(
|
||||||
textId = R.string.issues,
|
textId = R.string.issues,
|
||||||
tipsId = R.string.issues_url,
|
tipsId = R.string.issues_url,
|
||||||
@@ -144,7 +144,7 @@ class AboutPage : BasePage() {
|
|||||||
)
|
)
|
||||||
Line()
|
Line()
|
||||||
TitleText(getString(R.string.other))
|
TitleText(getString(R.string.other))
|
||||||
TextSummaryArrow(
|
TextSummaryWithArrow(
|
||||||
TextSummaryV(
|
TextSummaryV(
|
||||||
textId = R.string.app_coolapk_url,
|
textId = R.string.app_coolapk_url,
|
||||||
tipsId = R.string.app_coolapk_url_summary,
|
tipsId = R.string.app_coolapk_url_summary,
|
||||||
@@ -166,7 +166,7 @@ class AboutPage : BasePage() {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
TextSummaryArrow(
|
TextSummaryWithArrow(
|
||||||
TextSummaryV(
|
TextSummaryV(
|
||||||
textId = R.string.opensource,
|
textId = R.string.opensource,
|
||||||
tipsId = R.string.github_url,
|
tipsId = R.string.github_url,
|
||||||
@@ -181,7 +181,7 @@ class AboutPage : BasePage() {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
TextSummaryArrow(
|
TextSummaryWithArrow(
|
||||||
TextSummaryV(
|
TextSummaryV(
|
||||||
textId = R.string.participate_in_translation,
|
textId = R.string.participate_in_translation,
|
||||||
tipsId = R.string.participate_in_translation_summary,
|
tipsId = R.string.participate_in_translation_summary,
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import java.util.*
|
|||||||
class MenuPage : BasePage() {
|
class MenuPage : BasePage() {
|
||||||
|
|
||||||
override fun onCreate() {
|
override fun onCreate() {
|
||||||
TextSummaryArrow(TextSummaryV(textId = R.string.reboot, onClickListener = {
|
TextSummaryWithArrow(TextSummaryV(textId = R.string.reboot, onClickListener = {
|
||||||
MIUIDialog(activity) {
|
MIUIDialog(activity) {
|
||||||
setTitle(R.string.Tips)
|
setTitle(R.string.Tips)
|
||||||
setMessage(R.string.are_you_sure_reboot)
|
setMessage(R.string.are_you_sure_reboot)
|
||||||
@@ -28,7 +28,7 @@ class MenuPage : BasePage() {
|
|||||||
}.show()
|
}.show()
|
||||||
}))
|
}))
|
||||||
|
|
||||||
TextSummaryArrow(TextSummaryV(textId = R.string.reboot_host, onClickListener = {
|
TextSummaryWithArrow(TextSummaryV(textId = R.string.reboot_host, onClickListener = {
|
||||||
MIUIDialog(activity) {
|
MIUIDialog(activity) {
|
||||||
setTitle(R.string.Tips)
|
setTitle(R.string.Tips)
|
||||||
setMessage(R.string.are_you_sure_reboot_scope)
|
setMessage(R.string.are_you_sure_reboot_scope)
|
||||||
@@ -47,6 +47,7 @@ class MenuPage : BasePage() {
|
|||||||
"killall com.miui.screenshot",
|
"killall com.miui.screenshot",
|
||||||
"killall com.milink.service",
|
"killall com.milink.service",
|
||||||
"killall com.xiaomi.misubscreenui",
|
"killall com.xiaomi.misubscreenui",
|
||||||
|
"killall com.miui.packageinstaller"
|
||||||
)
|
)
|
||||||
ShellUtils.execCommand(command, true)
|
ShellUtils.execCommand(command, true)
|
||||||
dismiss()
|
dismiss()
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ class AndroidPageForS : BasePage() {
|
|||||||
tipsId = R.string.remove_small_window_restrictions_summary
|
tipsId = R.string.remove_small_window_restrictions_summary
|
||||||
), SwitchV("remove_small_window_restrictions")
|
), SwitchV("remove_small_window_restrictions")
|
||||||
)
|
)
|
||||||
TextSummaryArrow(
|
TextSummaryWithArrow(
|
||||||
TextSummaryV(
|
TextSummaryV(
|
||||||
textId = R.string.max_wallpaper_scale,
|
textId = R.string.max_wallpaper_scale,
|
||||||
onClickListener = {
|
onClickListener = {
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ class MainPageForS : BasePage() {
|
|||||||
TextSummaryWithSwitch(
|
TextSummaryWithSwitch(
|
||||||
TextSummaryV(
|
TextSummaryV(
|
||||||
textId = R.string.main_switch,
|
textId = R.string.main_switch,
|
||||||
colorId = R.color.purple_700
|
colorId = R.color.blue
|
||||||
), SwitchV("main_switch", true)
|
), SwitchV("main_switch", true)
|
||||||
)
|
)
|
||||||
TextSummaryWithSwitch(
|
TextSummaryWithSwitch(
|
||||||
@@ -35,7 +35,7 @@ class MainPageForS : BasePage() {
|
|||||||
)
|
)
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
TextSummaryArrow(
|
TextSummaryWithArrow(
|
||||||
TextSummaryV(
|
TextSummaryV(
|
||||||
textId = R.string.matters_needing_attention,
|
textId = R.string.matters_needing_attention,
|
||||||
colorId = R.color.red,
|
colorId = R.color.red,
|
||||||
@@ -51,19 +51,19 @@ class MainPageForS : BasePage() {
|
|||||||
)
|
)
|
||||||
Line()
|
Line()
|
||||||
TitleText(textId = R.string.scope)
|
TitleText(textId = R.string.scope)
|
||||||
TextSummaryArrow(
|
TextSummaryWithArrow(
|
||||||
TextSummaryV(
|
TextSummaryV(
|
||||||
textId = R.string.scope_systemui,
|
textId = R.string.scope_systemui,
|
||||||
tipsId = R.string.scope_systemui_summary,
|
tipsId = R.string.scope_systemui_summary,
|
||||||
onClickListener = { showFragment("scope_systemui") })
|
onClickListener = { showFragment("scope_systemui") })
|
||||||
)
|
)
|
||||||
TextSummaryArrow(
|
TextSummaryWithArrow(
|
||||||
TextSummaryV(
|
TextSummaryV(
|
||||||
textId = R.string.scope_android,
|
textId = R.string.scope_android,
|
||||||
tipsId = R.string.scope_android_summary,
|
tipsId = R.string.scope_android_summary,
|
||||||
onClickListener = { showFragment("scope_android") })
|
onClickListener = { showFragment("scope_android") })
|
||||||
)
|
)
|
||||||
TextSummaryArrow(
|
TextSummaryWithArrow(
|
||||||
TextSummaryV(
|
TextSummaryV(
|
||||||
textId = R.string.scope_other,
|
textId = R.string.scope_other,
|
||||||
tipsId = R.string.scope_other_summary,
|
tipsId = R.string.scope_other_summary,
|
||||||
@@ -71,7 +71,7 @@ class MainPageForS : BasePage() {
|
|||||||
)
|
)
|
||||||
Line()
|
Line()
|
||||||
TitleText(textId = R.string.about)
|
TitleText(textId = R.string.about)
|
||||||
TextSummaryArrow(
|
TextSummaryWithArrow(
|
||||||
TextSummaryV(
|
TextSummaryV(
|
||||||
textId = R.string.about_module,
|
textId = R.string.about_module,
|
||||||
tips = getString(R.string.about_module_summary),
|
tips = getString(R.string.about_module_summary),
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ package com.lt2333.simplicitytools.activity.pages.s
|
|||||||
|
|
||||||
import android.content.ComponentName
|
import android.content.ComponentName
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.content.pm.PackageManager
|
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.widget.Switch
|
import android.widget.Switch
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
@@ -11,12 +10,10 @@ import cn.fkj233.ui.activity.annotation.BMPage
|
|||||||
import cn.fkj233.ui.activity.data.BasePage
|
import cn.fkj233.ui.activity.data.BasePage
|
||||||
import cn.fkj233.ui.activity.view.SwitchV
|
import cn.fkj233.ui.activity.view.SwitchV
|
||||||
import cn.fkj233.ui.activity.view.TextSummaryV
|
import cn.fkj233.ui.activity.view.TextSummaryV
|
||||||
import cn.fkj233.ui.dialog.MIUIDialog
|
|
||||||
import com.lt2333.simplicitytools.BuildConfig
|
|
||||||
import com.lt2333.simplicitytools.R
|
import com.lt2333.simplicitytools.R
|
||||||
|
|
||||||
|
|
||||||
@BMPage("scope_other","Other", hideMenu = false)
|
@BMPage("scope_other", "Other", hideMenu = false)
|
||||||
class OtherPageForS : BasePage() {
|
class OtherPageForS : BasePage() {
|
||||||
|
|
||||||
override fun onCreate() {
|
override fun onCreate() {
|
||||||
@@ -33,6 +30,24 @@ class OtherPageForS : BasePage() {
|
|||||||
tipsId = R.string.home_double_tap_to_sleep_summary
|
tipsId = R.string.home_double_tap_to_sleep_summary
|
||||||
), SwitchV("double_tap_to_sleep")
|
), SwitchV("double_tap_to_sleep")
|
||||||
)
|
)
|
||||||
|
TextSummaryWithSwitch(
|
||||||
|
TextSummaryV(
|
||||||
|
textId = R.string.miuihome_recentwiew_wallpaper_darkening, tipsId = R.string.miuihome_recentwiew_wallpaper_darkening_summary
|
||||||
|
), SwitchV("miuihome_recentwiew_wallpaper_darkening", false)
|
||||||
|
)
|
||||||
|
TextSummaryWithSwitch(
|
||||||
|
TextSummaryV(
|
||||||
|
textId = R.string.miuihome_recentview_remove_card_animation, tipsId = R.string.miuihome_recentview_remove_card_animation_summary
|
||||||
|
), SwitchV("miuihome_recentview_remove_card_animation", false)
|
||||||
|
)
|
||||||
|
TextSummaryWithSwitch(
|
||||||
|
TextSummaryV(textId = R.string.miuihome_shortcut_add_small_window, tipsId = R.string.miuihome_shortcut_add_small_window_summary),
|
||||||
|
SwitchV("miuihome_shortcut_add_small_window", false)
|
||||||
|
)
|
||||||
|
TextSummaryWithSwitch(
|
||||||
|
TextSummaryV(textId = R.string.miuihome_scroll_icon_name, tipsId = R.string.miuihome_scroll_icon_name_summary),
|
||||||
|
SwitchV("miuihome_scroll_icon_name", false)
|
||||||
|
)
|
||||||
Line()
|
Line()
|
||||||
TitleText(textId = R.string.scope_powerkeeper)
|
TitleText(textId = R.string.scope_powerkeeper)
|
||||||
TextSummaryWithSwitch(
|
TextSummaryWithSwitch(
|
||||||
@@ -82,7 +97,7 @@ class OtherPageForS : BasePage() {
|
|||||||
SwitchV("make_millet_ignore_active"),
|
SwitchV("make_millet_ignore_active"),
|
||||||
dataBindingRecv = makeMilletMoreAggressiveSwitchBinding.binding.getRecv(2)
|
dataBindingRecv = makeMilletMoreAggressiveSwitchBinding.binding.getRecv(2)
|
||||||
)
|
)
|
||||||
TextSummaryArrow(
|
TextSummaryWithArrow(
|
||||||
TextSummaryV(
|
TextSummaryV(
|
||||||
textId = R.string.battery_optimization,
|
textId = R.string.battery_optimization,
|
||||||
tipsId = R.string.battery_optimization_summary,
|
tipsId = R.string.battery_optimization_summary,
|
||||||
@@ -172,6 +187,12 @@ class OtherPageForS : BasePage() {
|
|||||||
TextSummaryV(textId = R.string.remove_thememanager_ads),
|
TextSummaryV(textId = R.string.remove_thememanager_ads),
|
||||||
SwitchV("remove_thememanager_ads")
|
SwitchV("remove_thememanager_ads")
|
||||||
)
|
)
|
||||||
|
Line()
|
||||||
|
TitleText(textId = R.string.pkg_installer)
|
||||||
|
TextSummaryWithSwitch(
|
||||||
|
TextSummaryV(textId = R.string.pkg_installer_summary),
|
||||||
|
SwitchV("pkg_installer_count_checking")
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -245,10 +245,10 @@ class SystemUIPageForS : BasePage() {
|
|||||||
//预设模式结束
|
//预设模式结束
|
||||||
|
|
||||||
//极客模式起始
|
//极客模式起始
|
||||||
TextSummaryArrow(TextSummaryV(textId = R.string.custom_clock_format_geek) {
|
TextSummaryWithArrow(TextSummaryV(textId = R.string.custom_clock_format_geek) {
|
||||||
MIUIDialog(activity) {
|
MIUIDialog(activity) {
|
||||||
setTitle(R.string.custom_clock_format_geek)
|
setTitle(R.string.custom_clock_format_geek)
|
||||||
setEditText(MIUIActivity.safeSP.getString("custom_clock_format_geek", "HH:mm:ss"), "")
|
setEditText(MIUIActivity.safeSP.getString("custom_clock_format_geek", "HH:mm:ss"), "", isSingleLine = false)
|
||||||
setLButton(textId = R.string.cancel) {
|
setLButton(textId = R.string.cancel) {
|
||||||
dismiss()
|
dismiss()
|
||||||
}
|
}
|
||||||
@@ -287,7 +287,7 @@ class SystemUIPageForS : BasePage() {
|
|||||||
|
|
||||||
Line()
|
Line()
|
||||||
TitleText(textId = R.string.status_bar_icon)
|
TitleText(textId = R.string.status_bar_icon)
|
||||||
TextSummaryArrow(
|
TextSummaryWithArrow(
|
||||||
TextSummaryV(
|
TextSummaryV(
|
||||||
textId = R.string.hide_icon,
|
textId = R.string.hide_icon,
|
||||||
onClickListener = { showFragment("hide_icon") })
|
onClickListener = { showFragment("hide_icon") })
|
||||||
@@ -314,7 +314,7 @@ class SystemUIPageForS : BasePage() {
|
|||||||
dataBindingSend = customMobileTypeTextBinding.bindingSend
|
dataBindingSend = customMobileTypeTextBinding.bindingSend
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
TextSummaryArrow(TextSummaryV(textId = R.string.custom_mobile_type_text) {
|
TextSummaryWithArrow(TextSummaryV(textId = R.string.custom_mobile_type_text) {
|
||||||
MIUIDialog(activity) {
|
MIUIDialog(activity) {
|
||||||
setTitle(R.string.custom_mobile_type_text)
|
setTitle(R.string.custom_mobile_type_text)
|
||||||
setEditText(MIUIActivity.safeSP.getString("custom_mobile_type_text", "5G"), "")
|
setEditText(MIUIActivity.safeSP.getString("custom_mobile_type_text", "5G"), "")
|
||||||
@@ -358,7 +358,7 @@ class SystemUIPageForS : BasePage() {
|
|||||||
SwitchV("big_mobile_type_icon_bold", true),
|
SwitchV("big_mobile_type_icon_bold", true),
|
||||||
dataBindingRecv = bigMobileTypeIconBinding.binding.getRecv(2)
|
dataBindingRecv = bigMobileTypeIconBinding.binding.getRecv(2)
|
||||||
)
|
)
|
||||||
TextSummaryArrow(
|
TextSummaryWithArrow(
|
||||||
TextSummaryV(
|
TextSummaryV(
|
||||||
textId = R.string.big_mobile_type_icon_size,
|
textId = R.string.big_mobile_type_icon_size,
|
||||||
onClickListener = {
|
onClickListener = {
|
||||||
@@ -385,7 +385,7 @@ class SystemUIPageForS : BasePage() {
|
|||||||
}.show()
|
}.show()
|
||||||
}), dataBindingRecv = bigMobileTypeIconBinding.binding.getRecv(2)
|
}), dataBindingRecv = bigMobileTypeIconBinding.binding.getRecv(2)
|
||||||
)
|
)
|
||||||
TextSummaryArrow(TextSummaryV(textId = R.string.big_mobile_type_icon_up_and_down_position) {
|
TextSummaryWithArrow(TextSummaryV(textId = R.string.big_mobile_type_icon_up_and_down_position) {
|
||||||
MIUIDialog(activity) {
|
MIUIDialog(activity) {
|
||||||
setTitle(R.string.big_mobile_type_icon_up_and_down_position)
|
setTitle(R.string.big_mobile_type_icon_up_and_down_position)
|
||||||
setMessage("${activity.getString(R.string.range)} -15~15")
|
setMessage("${activity.getString(R.string.range)} -15~15")
|
||||||
@@ -418,7 +418,7 @@ class SystemUIPageForS : BasePage() {
|
|||||||
}
|
}
|
||||||
}.show()
|
}.show()
|
||||||
}, dataBindingRecv = bigMobileTypeIconBinding.binding.getRecv(2))
|
}, dataBindingRecv = bigMobileTypeIconBinding.binding.getRecv(2))
|
||||||
TextSummaryArrow(TextSummaryV(textId = R.string.big_mobile_type_icon_left_and_right_margins) {
|
TextSummaryWithArrow(TextSummaryV(textId = R.string.big_mobile_type_icon_left_and_right_margins) {
|
||||||
MIUIDialog(activity) {
|
MIUIDialog(activity) {
|
||||||
setTitle(R.string.big_mobile_type_icon_left_and_right_margins)
|
setTitle(R.string.big_mobile_type_icon_left_and_right_margins)
|
||||||
setMessage("${activity.getString(R.string.range)} 0~30")
|
setMessage("${activity.getString(R.string.range)} 0~30")
|
||||||
@@ -455,7 +455,7 @@ class SystemUIPageForS : BasePage() {
|
|||||||
SeekBarWithText("maximum_number_of_notification_icons", 1, 30, 3)
|
SeekBarWithText("maximum_number_of_notification_icons", 1, 30, 3)
|
||||||
Text(textId = R.string.maximum_number_of_notification_dots)
|
Text(textId = R.string.maximum_number_of_notification_dots)
|
||||||
SeekBarWithText("maximum_number_of_notification_dots", 0, 4, 3)
|
SeekBarWithText("maximum_number_of_notification_dots", 0, 4, 3)
|
||||||
TextSummaryArrow(
|
TextSummaryWithArrow(
|
||||||
TextSummaryV(
|
TextSummaryV(
|
||||||
textId = R.string.battery_percentage_font_size,
|
textId = R.string.battery_percentage_font_size,
|
||||||
onClickListener = {
|
onClickListener = {
|
||||||
@@ -599,7 +599,7 @@ class SystemUIPageForS : BasePage() {
|
|||||||
TextSummaryWithSwitch(
|
TextSummaryWithSwitch(
|
||||||
TextSummaryV(
|
TextSummaryV(
|
||||||
textId = R.string.show_weather_main_switch,
|
textId = R.string.show_weather_main_switch,
|
||||||
colorId = R.color.purple_700
|
colorId = R.color.blue
|
||||||
),
|
),
|
||||||
SwitchV(
|
SwitchV(
|
||||||
"notification_weather",
|
"notification_weather",
|
||||||
@@ -636,7 +636,7 @@ class SystemUIPageForS : BasePage() {
|
|||||||
TextSummaryWithSwitch(
|
TextSummaryWithSwitch(
|
||||||
TextSummaryV(
|
TextSummaryV(
|
||||||
textId = R.string.show_weather_main_switch,
|
textId = R.string.show_weather_main_switch,
|
||||||
colorId = R.color.purple_700,
|
colorId = R.color.blue,
|
||||||
tipsId = R.string.control_center_weather_summary
|
tipsId = R.string.control_center_weather_summary
|
||||||
),
|
),
|
||||||
SwitchV(
|
SwitchV(
|
||||||
@@ -703,7 +703,7 @@ class SystemUIPageForS : BasePage() {
|
|||||||
TextSummaryWithSwitch(
|
TextSummaryWithSwitch(
|
||||||
TextSummaryV(
|
TextSummaryV(
|
||||||
textId = R.string.old_qs_custom_switch,
|
textId = R.string.old_qs_custom_switch,
|
||||||
colorId = R.color.purple_700
|
colorId = R.color.blue
|
||||||
),
|
),
|
||||||
SwitchV(
|
SwitchV(
|
||||||
"old_qs_custom_switch",
|
"old_qs_custom_switch",
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ class AndroidPageForT : BasePage() {
|
|||||||
tipsId = R.string.remove_small_window_restrictions_summary
|
tipsId = R.string.remove_small_window_restrictions_summary
|
||||||
), SwitchV("remove_small_window_restrictions")
|
), SwitchV("remove_small_window_restrictions")
|
||||||
)
|
)
|
||||||
TextSummaryArrow(
|
TextSummaryWithArrow(
|
||||||
TextSummaryV(
|
TextSummaryV(
|
||||||
textId = R.string.max_wallpaper_scale,
|
textId = R.string.max_wallpaper_scale,
|
||||||
onClickListener = {
|
onClickListener = {
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ class MainPageForT : BasePage() {
|
|||||||
TextSummaryWithSwitch(
|
TextSummaryWithSwitch(
|
||||||
TextSummaryV(
|
TextSummaryV(
|
||||||
textId = R.string.main_switch,
|
textId = R.string.main_switch,
|
||||||
colorId = R.color.purple_700
|
colorId = R.color.blue
|
||||||
), SwitchV("main_switch", true)
|
), SwitchV("main_switch", true)
|
||||||
)
|
)
|
||||||
TextSummaryWithSwitch(
|
TextSummaryWithSwitch(
|
||||||
@@ -35,7 +35,7 @@ class MainPageForT : BasePage() {
|
|||||||
)
|
)
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
TextSummaryArrow(
|
TextSummaryWithArrow(
|
||||||
TextSummaryV(
|
TextSummaryV(
|
||||||
textId = R.string.matters_needing_attention,
|
textId = R.string.matters_needing_attention,
|
||||||
colorId = R.color.red,
|
colorId = R.color.red,
|
||||||
@@ -51,19 +51,19 @@ class MainPageForT : BasePage() {
|
|||||||
)
|
)
|
||||||
Line()
|
Line()
|
||||||
TitleText(textId = R.string.scope)
|
TitleText(textId = R.string.scope)
|
||||||
TextSummaryArrow(
|
TextSummaryWithArrow(
|
||||||
TextSummaryV(
|
TextSummaryV(
|
||||||
textId = R.string.scope_systemui,
|
textId = R.string.scope_systemui,
|
||||||
tipsId = R.string.scope_systemui_summary,
|
tipsId = R.string.scope_systemui_summary,
|
||||||
onClickListener = { showFragment("scope_systemui") })
|
onClickListener = { showFragment("scope_systemui") })
|
||||||
)
|
)
|
||||||
TextSummaryArrow(
|
TextSummaryWithArrow(
|
||||||
TextSummaryV(
|
TextSummaryV(
|
||||||
textId = R.string.scope_android,
|
textId = R.string.scope_android,
|
||||||
tipsId = R.string.scope_android_summary,
|
tipsId = R.string.scope_android_summary,
|
||||||
onClickListener = { showFragment("scope_android") })
|
onClickListener = { showFragment("scope_android") })
|
||||||
)
|
)
|
||||||
TextSummaryArrow(
|
TextSummaryWithArrow(
|
||||||
TextSummaryV(
|
TextSummaryV(
|
||||||
textId = R.string.scope_other,
|
textId = R.string.scope_other,
|
||||||
tipsId = R.string.scope_other_summary,
|
tipsId = R.string.scope_other_summary,
|
||||||
@@ -71,7 +71,7 @@ class MainPageForT : BasePage() {
|
|||||||
)
|
)
|
||||||
Line()
|
Line()
|
||||||
TitleText(textId = R.string.about)
|
TitleText(textId = R.string.about)
|
||||||
TextSummaryArrow(
|
TextSummaryWithArrow(
|
||||||
TextSummaryV(
|
TextSummaryV(
|
||||||
textId = R.string.about_module,
|
textId = R.string.about_module,
|
||||||
tips = getString(R.string.about_module_summary),
|
tips = getString(R.string.about_module_summary),
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ package com.lt2333.simplicitytools.activity.pages.t
|
|||||||
|
|
||||||
import android.content.ComponentName
|
import android.content.ComponentName
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.content.pm.PackageManager
|
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.widget.Switch
|
import android.widget.Switch
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
@@ -11,12 +10,10 @@ import cn.fkj233.ui.activity.annotation.BMPage
|
|||||||
import cn.fkj233.ui.activity.data.BasePage
|
import cn.fkj233.ui.activity.data.BasePage
|
||||||
import cn.fkj233.ui.activity.view.SwitchV
|
import cn.fkj233.ui.activity.view.SwitchV
|
||||||
import cn.fkj233.ui.activity.view.TextSummaryV
|
import cn.fkj233.ui.activity.view.TextSummaryV
|
||||||
import cn.fkj233.ui.dialog.MIUIDialog
|
|
||||||
import com.lt2333.simplicitytools.BuildConfig
|
|
||||||
import com.lt2333.simplicitytools.R
|
import com.lt2333.simplicitytools.R
|
||||||
|
|
||||||
|
|
||||||
@BMPage("scope_other","Other", hideMenu = false)
|
@BMPage("scope_other", "Other", hideMenu = false)
|
||||||
class OtherPageForT : BasePage() {
|
class OtherPageForT : BasePage() {
|
||||||
|
|
||||||
override fun onCreate() {
|
override fun onCreate() {
|
||||||
@@ -33,6 +30,24 @@ class OtherPageForT : BasePage() {
|
|||||||
tipsId = R.string.home_double_tap_to_sleep_summary
|
tipsId = R.string.home_double_tap_to_sleep_summary
|
||||||
), SwitchV("double_tap_to_sleep")
|
), SwitchV("double_tap_to_sleep")
|
||||||
)
|
)
|
||||||
|
TextSummaryWithSwitch(
|
||||||
|
TextSummaryV(
|
||||||
|
textId = R.string.miuihome_recentwiew_wallpaper_darkening, tipsId = R.string.miuihome_recentwiew_wallpaper_darkening_summary
|
||||||
|
), SwitchV("miuihome_recentwiew_wallpaper_darkening", false)
|
||||||
|
)
|
||||||
|
TextSummaryWithSwitch(
|
||||||
|
TextSummaryV(
|
||||||
|
textId = R.string.miuihome_recentview_remove_card_animation, tipsId = R.string.miuihome_recentview_remove_card_animation_summary
|
||||||
|
), SwitchV("miuihome_recentview_remove_card_animation", false)
|
||||||
|
)
|
||||||
|
TextSummaryWithSwitch(
|
||||||
|
TextSummaryV(textId = R.string.miuihome_shortcut_add_small_window, tipsId = R.string.miuihome_shortcut_add_small_window_summary),
|
||||||
|
SwitchV("miuihome_shortcut_add_small_window", false)
|
||||||
|
)
|
||||||
|
TextSummaryWithSwitch(
|
||||||
|
TextSummaryV(textId = R.string.miuihome_scroll_icon_name, tipsId = R.string.miuihome_scroll_icon_name_summary),
|
||||||
|
SwitchV("miuihome_scroll_icon_name", false)
|
||||||
|
)
|
||||||
Line()
|
Line()
|
||||||
TitleText(textId = R.string.scope_powerkeeper)
|
TitleText(textId = R.string.scope_powerkeeper)
|
||||||
TextSummaryWithSwitch(
|
TextSummaryWithSwitch(
|
||||||
@@ -82,7 +97,7 @@ class OtherPageForT : BasePage() {
|
|||||||
SwitchV("make_millet_ignore_active"),
|
SwitchV("make_millet_ignore_active"),
|
||||||
dataBindingRecv = makeMilletMoreAggressiveSwitchBinding.binding.getRecv(2)
|
dataBindingRecv = makeMilletMoreAggressiveSwitchBinding.binding.getRecv(2)
|
||||||
)
|
)
|
||||||
TextSummaryArrow(
|
TextSummaryWithArrow(
|
||||||
TextSummaryV(
|
TextSummaryV(
|
||||||
textId = R.string.battery_optimization,
|
textId = R.string.battery_optimization,
|
||||||
tipsId = R.string.battery_optimization_summary,
|
tipsId = R.string.battery_optimization_summary,
|
||||||
@@ -172,6 +187,12 @@ class OtherPageForT : BasePage() {
|
|||||||
TextSummaryV(textId = R.string.remove_thememanager_ads),
|
TextSummaryV(textId = R.string.remove_thememanager_ads),
|
||||||
SwitchV("remove_thememanager_ads")
|
SwitchV("remove_thememanager_ads")
|
||||||
)
|
)
|
||||||
|
Line()
|
||||||
|
TitleText(textId = R.string.pkg_installer)
|
||||||
|
TextSummaryWithSwitch(
|
||||||
|
TextSummaryV(textId = R.string.pkg_installer_summary),
|
||||||
|
SwitchV("pkg_installer_count_checking")
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
package com.lt2333.simplicitytools.activity.pages.t
|
package com.lt2333.simplicitytools.activity.pages.t
|
||||||
|
|
||||||
|
import android.content.Intent
|
||||||
|
import android.net.Uri
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.widget.Switch
|
import android.widget.Switch
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
@@ -11,18 +13,16 @@ import cn.fkj233.ui.activity.view.SwitchV
|
|||||||
import cn.fkj233.ui.activity.view.TextSummaryV
|
import cn.fkj233.ui.activity.view.TextSummaryV
|
||||||
import cn.fkj233.ui.activity.view.TextV
|
import cn.fkj233.ui.activity.view.TextV
|
||||||
import cn.fkj233.ui.dialog.MIUIDialog
|
import cn.fkj233.ui.dialog.MIUIDialog
|
||||||
|
import cn.fkj233.ui.dialog.NewDialog
|
||||||
import com.lt2333.simplicitytools.R
|
import com.lt2333.simplicitytools.R
|
||||||
import java.util.HashMap
|
|
||||||
|
|
||||||
|
|
||||||
@BMPage("scope_systemui","System UI", hideMenu = false)
|
@BMPage("scope_systemui", "System UI", hideMenu = false) class SystemUIPageForT : BasePage() {
|
||||||
class SystemUIPageForT : BasePage() {
|
|
||||||
|
|
||||||
override fun onCreate() {
|
override fun onCreate() {
|
||||||
TitleText(textId = R.string.statusbar)
|
TitleText(textId = R.string.statusbar)
|
||||||
TextSummaryWithSwitch(
|
TextSummaryWithSwitch(
|
||||||
TextSummaryV(textId = R.string.double_tap_to_sleep),
|
TextSummaryV(textId = R.string.double_tap_to_sleep), SwitchV("status_bar_double_tap_to_sleep")
|
||||||
SwitchV("status_bar_double_tap_to_sleep")
|
|
||||||
)
|
)
|
||||||
Line()
|
Line()
|
||||||
TitleText(textId = R.string.status_bar_layout)
|
TitleText(textId = R.string.status_bar_layout)
|
||||||
@@ -32,33 +32,29 @@ class SystemUIPageForT : BasePage() {
|
|||||||
it[2] = getString(R.string.clock_right)
|
it[2] = getString(R.string.clock_right)
|
||||||
it[3] = getString(R.string.clock_center_and_icon_left)
|
it[3] = getString(R.string.clock_center_and_icon_left)
|
||||||
}
|
}
|
||||||
TextWithSpinner(
|
TextWithSpinner(TextV(textId = R.string.status_bar_layout_mode), SpinnerV(
|
||||||
TextV(textId = R.string.status_bar_layout_mode),
|
statusBarLayoutMode[MIUIActivity.safeSP.getInt(
|
||||||
SpinnerV(
|
"status_bar_layout_mode", 0
|
||||||
statusBarLayoutMode[MIUIActivity.safeSP.getInt(
|
)].toString()
|
||||||
"status_bar_layout_mode",
|
) {
|
||||||
0
|
add(statusBarLayoutMode[0].toString()) {
|
||||||
)].toString()
|
MIUIActivity.safeSP.putAny("status_bar_layout_mode", 0)
|
||||||
) {
|
}
|
||||||
add(statusBarLayoutMode[0].toString()) {
|
add(statusBarLayoutMode[1].toString()) {
|
||||||
MIUIActivity.safeSP.putAny("status_bar_layout_mode", 0)
|
MIUIActivity.safeSP.putAny("status_bar_layout_mode", 1)
|
||||||
}
|
}
|
||||||
add(statusBarLayoutMode[1].toString()) {
|
add(statusBarLayoutMode[2].toString()) {
|
||||||
MIUIActivity.safeSP.putAny("status_bar_layout_mode", 1)
|
MIUIActivity.safeSP.putAny("status_bar_layout_mode", 2)
|
||||||
}
|
}
|
||||||
add(statusBarLayoutMode[2].toString()) {
|
add(statusBarLayoutMode[3].toString()) {
|
||||||
MIUIActivity.safeSP.putAny("status_bar_layout_mode", 2)
|
MIUIActivity.safeSP.putAny("status_bar_layout_mode", 3)
|
||||||
}
|
}
|
||||||
add(statusBarLayoutMode[3].toString()) {
|
})
|
||||||
MIUIActivity.safeSP.putAny("status_bar_layout_mode", 3)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
val layoutCompatibilityModeBinding = GetDataBinding({
|
val layoutCompatibilityBinding = GetDataBinding({
|
||||||
MIUIActivity.safeSP.getInt(
|
MIUIActivity.safeSP.getBoolean(
|
||||||
"screen_hole_location",
|
"layout_compatibility_mode", false
|
||||||
0
|
)
|
||||||
) == 2
|
|
||||||
}) { view, flags, data ->
|
}) { view, flags, data ->
|
||||||
when (flags) {
|
when (flags) {
|
||||||
1 -> (view as Switch).isEnabled = data as Boolean
|
1 -> (view as Switch).isEnabled = data as Boolean
|
||||||
@@ -66,57 +62,23 @@ class SystemUIPageForT : BasePage() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val screenHoleLocation: HashMap<Int, String> = hashMapOf<Int, String>().also {
|
TextSummaryWithSwitch(
|
||||||
it[0] = getString(R.string.off)
|
|
||||||
it[1] = getString(R.string.center)
|
|
||||||
it[2] = getString(R.string.left_or_right)
|
|
||||||
}
|
|
||||||
TextSummaryWithSpinner(
|
|
||||||
TextSummaryV(
|
TextSummaryV(
|
||||||
textId = R.string.layout_compatibility_mode,
|
textId = R.string.layout_compatibility_mode, tipsId = R.string.layout_compatibility_mode_summary
|
||||||
tipsId = R.string.screen_hole_location
|
), SwitchV("layout_compatibility_mode", dataBindingSend = layoutCompatibilityBinding.bindingSend)
|
||||||
),
|
)
|
||||||
SpinnerV(
|
|
||||||
screenHoleLocation[MIUIActivity.safeSP.getInt(
|
|
||||||
"screen_hole_location",
|
|
||||||
0
|
|
||||||
)].toString()
|
|
||||||
) {
|
|
||||||
add(screenHoleLocation[0].toString()) {
|
|
||||||
MIUIActivity.safeSP.putAny("screen_hole_location", 0)
|
|
||||||
layoutCompatibilityModeBinding.binding.Send().send(false)
|
|
||||||
}
|
|
||||||
add(screenHoleLocation[1].toString()) {
|
|
||||||
MIUIActivity.safeSP.putAny("screen_hole_location", 1)
|
|
||||||
layoutCompatibilityModeBinding.binding.Send().send(false)
|
|
||||||
}
|
|
||||||
add(screenHoleLocation[2].toString()) {
|
|
||||||
MIUIActivity.safeSP.putAny("screen_hole_location", 2)
|
|
||||||
layoutCompatibilityModeBinding.binding.Send().send(true)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
Text(
|
Text(
|
||||||
textId = R.string.left_margin,
|
textId = R.string.left_margin, dataBindingRecv = layoutCompatibilityBinding.binding.getRecv(2)
|
||||||
dataBindingRecv = layoutCompatibilityModeBinding.binding.getRecv(2)
|
|
||||||
)
|
)
|
||||||
SeekBarWithText(
|
SeekBarWithText(
|
||||||
"status_bar_left_margin",
|
"status_bar_left_margin", 0, 300, 0, dataBindingRecv = layoutCompatibilityBinding.binding.getRecv(2)
|
||||||
0,
|
|
||||||
300,
|
|
||||||
0,
|
|
||||||
dataBindingRecv = layoutCompatibilityModeBinding.binding.getRecv(2)
|
|
||||||
)
|
)
|
||||||
Text(
|
Text(
|
||||||
textId = R.string.right_margin,
|
textId = R.string.right_margin, dataBindingRecv = layoutCompatibilityBinding.binding.getRecv(2)
|
||||||
dataBindingRecv = layoutCompatibilityModeBinding.binding.getRecv(2)
|
|
||||||
)
|
)
|
||||||
SeekBarWithText(
|
SeekBarWithText(
|
||||||
"status_bar_right_margin",
|
"status_bar_right_margin", 0, 300, 0, dataBindingRecv = layoutCompatibilityBinding.binding.getRecv(2)
|
||||||
0,
|
|
||||||
300,
|
|
||||||
0,
|
|
||||||
dataBindingRecv = layoutCompatibilityModeBinding.binding.getRecv(2)
|
|
||||||
)
|
)
|
||||||
Line()
|
Line()
|
||||||
TitleText(textId = R.string.status_bar_clock_format)
|
TitleText(textId = R.string.status_bar_clock_format)
|
||||||
@@ -124,8 +86,7 @@ class SystemUIPageForT : BasePage() {
|
|||||||
|
|
||||||
val customClockPresetBinding = GetDataBinding({
|
val customClockPresetBinding = GetDataBinding({
|
||||||
MIUIActivity.safeSP.getInt(
|
MIUIActivity.safeSP.getInt(
|
||||||
"custom_clock_mode",
|
"custom_clock_mode", 0
|
||||||
0
|
|
||||||
) == 1
|
) == 1
|
||||||
}) { view, flags, data ->
|
}) { view, flags, data ->
|
||||||
when (flags) {
|
when (flags) {
|
||||||
@@ -134,40 +95,41 @@ class SystemUIPageForT : BasePage() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val customClockGeekBinding =
|
val customClockGeekBinding = GetDataBinding({ MIUIActivity.safeSP.getInt("custom_clock_mode", 0) == 2 }
|
||||||
GetDataBinding({ MIUIActivity.safeSP.getInt("custom_clock_mode", 0) == 2 }
|
|
||||||
|
|
||||||
) { view, flags, data ->
|
) { view, flags, data ->
|
||||||
when (flags) {
|
when (flags) {
|
||||||
1 -> (view as Switch).isEnabled = data as Boolean
|
1 -> (view as Switch).isEnabled = data as Boolean
|
||||||
2 -> view.visibility = if (data as Boolean) View.VISIBLE else View.GONE
|
2 -> view.visibility = if (data as Boolean) View.VISIBLE else View.GONE
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
val customClockMode: HashMap<Int, String> = hashMapOf<Int, String>().also {
|
val customClockMode: HashMap<Int, String> = hashMapOf<Int, String>().also {
|
||||||
it[0] = getString(R.string.off)
|
it[0] = getString(R.string.off)
|
||||||
it[1] = getString(R.string.preset)
|
it[1] = getString(R.string.preset)
|
||||||
it[2] = getString(R.string.geek)
|
it[2] = getString(R.string.geek)
|
||||||
}
|
}
|
||||||
TextWithSpinner(
|
TextWithSpinner(TextV(textId = R.string.custom_clock_mode), SpinnerV(
|
||||||
TextV(textId = R.string.custom_clock_mode),
|
customClockMode[MIUIActivity.safeSP.getInt(
|
||||||
SpinnerV(customClockMode[MIUIActivity.safeSP.getInt("custom_clock_mode", 0)].toString()) {
|
"custom_clock_mode", 0
|
||||||
add(customClockMode[0].toString()) {
|
)].toString()
|
||||||
MIUIActivity.safeSP.putAny("custom_clock_mode", 0)
|
) {
|
||||||
customClockPresetBinding.binding.Send().send(false)
|
add(customClockMode[0].toString()) {
|
||||||
customClockGeekBinding.binding.Send().send(false)
|
MIUIActivity.safeSP.putAny("custom_clock_mode", 0)
|
||||||
}
|
customClockPresetBinding.binding.Send().send(false)
|
||||||
add(customClockMode[1].toString()) {
|
customClockGeekBinding.binding.Send().send(false)
|
||||||
MIUIActivity.safeSP.putAny("custom_clock_mode", 1)
|
}
|
||||||
customClockPresetBinding.binding.Send().send(true)
|
add(customClockMode[1].toString()) {
|
||||||
customClockGeekBinding.binding.Send().send(false)
|
MIUIActivity.safeSP.putAny("custom_clock_mode", 1)
|
||||||
}
|
customClockPresetBinding.binding.Send().send(true)
|
||||||
add(customClockMode[2].toString()) {
|
customClockGeekBinding.binding.Send().send(false)
|
||||||
MIUIActivity.safeSP.putAny("custom_clock_mode", 2)
|
}
|
||||||
customClockPresetBinding.binding.Send().send(false)
|
add(customClockMode[2].toString()) {
|
||||||
customClockGeekBinding.binding.Send().send(true)
|
MIUIActivity.safeSP.putAny("custom_clock_mode", 2)
|
||||||
}
|
customClockPresetBinding.binding.Send().send(false)
|
||||||
})
|
customClockGeekBinding.binding.Send().send(true)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
//预设模式起始
|
//预设模式起始
|
||||||
TextWithSwitch(
|
TextWithSwitch(
|
||||||
@@ -221,48 +183,53 @@ class SystemUIPageForT : BasePage() {
|
|||||||
dataBindingRecv = customClockPresetBinding.binding.getRecv(2)
|
dataBindingRecv = customClockPresetBinding.binding.getRecv(2)
|
||||||
)
|
)
|
||||||
Text(
|
Text(
|
||||||
textId = R.string.status_bar_clock_size,
|
textId = R.string.status_bar_clock_size, dataBindingRecv = customClockPresetBinding.binding.getRecv(2)
|
||||||
dataBindingRecv = customClockPresetBinding.binding.getRecv(2)
|
|
||||||
)
|
)
|
||||||
SeekBarWithText(
|
SeekBarWithText(
|
||||||
"status_bar_clock_size",
|
"status_bar_clock_size", 0, 18, 0, dataBindingRecv = customClockPresetBinding.binding.getRecv(2)
|
||||||
0,
|
|
||||||
18,
|
|
||||||
0,
|
|
||||||
dataBindingRecv = customClockPresetBinding.binding.getRecv(2)
|
|
||||||
)
|
)
|
||||||
Text(
|
Text(
|
||||||
textId = R.string.status_bar_clock_double_line_size,
|
textId = R.string.status_bar_clock_double_line_size,
|
||||||
dataBindingRecv = customClockPresetBinding.binding.getRecv(2)
|
dataBindingRecv = customClockPresetBinding.binding.getRecv(2)
|
||||||
)
|
)
|
||||||
SeekBarWithText(
|
SeekBarWithText(
|
||||||
"status_bar_clock_double_line_size",
|
"status_bar_clock_double_line_size", 0, 9, 0, dataBindingRecv = customClockPresetBinding.binding.getRecv(2)
|
||||||
0,
|
|
||||||
9,
|
|
||||||
0,
|
|
||||||
dataBindingRecv = customClockPresetBinding.binding.getRecv(2)
|
|
||||||
)
|
)
|
||||||
//预设模式结束
|
//预设模式结束
|
||||||
|
|
||||||
//极客模式起始
|
//极客模式起始
|
||||||
TextSummaryArrow(TextSummaryV(textId = R.string.custom_clock_format_geek) {
|
TextSummaryWithArrow(TextSummaryV(textId = R.string.custom_clock_format_geek) {
|
||||||
MIUIDialog(activity) {
|
NewDialog(activity) {
|
||||||
setTitle(R.string.custom_clock_format_geek)
|
setTitle(R.string.custom_clock_format_geek)
|
||||||
setEditText(MIUIActivity.safeSP.getString("custom_clock_format_geek", "HH:mm:ss"), "")
|
setEditText(
|
||||||
setLButton(textId = R.string.cancel) {
|
MIUIActivity.safeSP.getString("custom_clock_format_geek", "HH:mm:ss"), "", isSingleLine = false
|
||||||
dismiss()
|
)
|
||||||
|
Button(getString(R.string.click_to_view_use_cases)) {
|
||||||
|
val locale = context.resources.configuration.locale
|
||||||
|
val language = locale.language
|
||||||
|
if (language.endsWith("zh")) {
|
||||||
|
val uri = Uri.parse("https://zhuti.designer.xiaomi.com/docs/grammar/#%E6%97%B6%E9%97%B4%E6%97%A5%E6%9C%9F")
|
||||||
|
val intent = Intent(Intent.ACTION_VIEW, uri)
|
||||||
|
activity.startActivity(intent)
|
||||||
|
} else {
|
||||||
|
val uri = Uri.parse("https://docs.google.com/spreadsheets/d/1ghkT2iFbxB3bT4TKCiKAfmEdGt6kTVKFU3dm4Nz1or8/edit?usp=sharing")
|
||||||
|
val intent = Intent(Intent.ACTION_VIEW, uri)
|
||||||
|
activity.startActivity(intent)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
setRButton(textId = R.string.Done) {
|
Button(getString(R.string.Done)) {
|
||||||
if (getEditText().isNotEmpty()) {
|
if (getEditText().isNotEmpty()) {
|
||||||
try {
|
try {
|
||||||
MIUIActivity.safeSP.putAny("custom_clock_format_geek", getEditText())
|
MIUIActivity.safeSP.putAny("custom_clock_format_geek", getEditText())
|
||||||
dismiss()
|
dismiss()
|
||||||
return@setRButton
|
return@Button
|
||||||
} catch (_: Throwable) {
|
} catch (_: Throwable) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Toast.makeText(activity, R.string.input_error, Toast.LENGTH_SHORT)
|
Toast.makeText(activity, R.string.input_error, Toast.LENGTH_SHORT).show()
|
||||||
.show()
|
}
|
||||||
|
Button(getString(R.string.cancel), cancelStyle = true) {
|
||||||
|
dismiss()
|
||||||
}
|
}
|
||||||
}.show()
|
}.show()
|
||||||
}, dataBindingRecv = customClockGeekBinding.binding.getRecv(2))
|
}, dataBindingRecv = customClockGeekBinding.binding.getRecv(2))
|
||||||
@@ -272,34 +239,25 @@ class SystemUIPageForT : BasePage() {
|
|||||||
dataBindingRecv = customClockGeekBinding.binding.getRecv(2)
|
dataBindingRecv = customClockGeekBinding.binding.getRecv(2)
|
||||||
)
|
)
|
||||||
Text(
|
Text(
|
||||||
textId = R.string.status_bar_clock_size,
|
textId = R.string.status_bar_clock_size, dataBindingRecv = customClockGeekBinding.binding.getRecv(2)
|
||||||
dataBindingRecv = customClockGeekBinding.binding.getRecv(2)
|
|
||||||
)
|
)
|
||||||
SeekBarWithText(
|
SeekBarWithText(
|
||||||
"status_bar_clock_size_geek",
|
"status_bar_clock_size_geek", 0, 18, 0, dataBindingRecv = customClockGeekBinding.binding.getRecv(2)
|
||||||
0,
|
|
||||||
18,
|
|
||||||
0,
|
|
||||||
dataBindingRecv = customClockGeekBinding.binding.getRecv(2)
|
|
||||||
)
|
)
|
||||||
//极客模式结束
|
//极客模式结束
|
||||||
|
|
||||||
|
|
||||||
Line()
|
Line()
|
||||||
TitleText(textId = R.string.status_bar_icon)
|
TitleText(textId = R.string.status_bar_icon)
|
||||||
TextSummaryArrow(
|
TextSummaryWithArrow(
|
||||||
TextSummaryV(
|
TextSummaryV(textId = R.string.hide_icon, onClickListener = { showFragment("hide_icon") })
|
||||||
textId = R.string.hide_icon,
|
|
||||||
onClickListener = { showFragment("hide_icon") })
|
|
||||||
)
|
)
|
||||||
TextWithSwitch(
|
TextWithSwitch(
|
||||||
TextV(textId = R.string.show_wifi_standard),
|
TextV(textId = R.string.show_wifi_standard), SwitchV("show_wifi_standard")
|
||||||
SwitchV("show_wifi_standard")
|
|
||||||
)
|
)
|
||||||
val customMobileTypeTextBinding = GetDataBinding({
|
val customMobileTypeTextBinding = GetDataBinding({
|
||||||
MIUIActivity.safeSP.getBoolean(
|
MIUIActivity.safeSP.getBoolean(
|
||||||
"custom_mobile_type_text_switch",
|
"custom_mobile_type_text_switch", false
|
||||||
false
|
|
||||||
)
|
)
|
||||||
}) { view, flags, data ->
|
}) { view, flags, data ->
|
||||||
when (flags) {
|
when (flags) {
|
||||||
@@ -308,13 +266,11 @@ class SystemUIPageForT : BasePage() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
TextSummaryWithSwitch(
|
TextSummaryWithSwitch(
|
||||||
TextSummaryV(textId = R.string.custom_mobile_type_text_switch),
|
TextSummaryV(textId = R.string.custom_mobile_type_text_switch), SwitchV(
|
||||||
SwitchV(
|
"custom_mobile_type_text_switch", dataBindingSend = customMobileTypeTextBinding.bindingSend
|
||||||
"custom_mobile_type_text_switch",
|
|
||||||
dataBindingSend = customMobileTypeTextBinding.bindingSend
|
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
TextSummaryArrow(TextSummaryV(textId = R.string.custom_mobile_type_text) {
|
TextSummaryWithArrow(TextSummaryV(textId = R.string.custom_mobile_type_text) {
|
||||||
MIUIDialog(activity) {
|
MIUIDialog(activity) {
|
||||||
setTitle(R.string.custom_mobile_type_text)
|
setTitle(R.string.custom_mobile_type_text)
|
||||||
setEditText(MIUIActivity.safeSP.getString("custom_mobile_type_text", "5G"), "")
|
setEditText(MIUIActivity.safeSP.getString("custom_mobile_type_text", "5G"), "")
|
||||||
@@ -330,15 +286,13 @@ class SystemUIPageForT : BasePage() {
|
|||||||
} catch (_: Throwable) {
|
} catch (_: Throwable) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Toast.makeText(activity, R.string.input_error, Toast.LENGTH_SHORT)
|
Toast.makeText(activity, R.string.input_error, Toast.LENGTH_SHORT).show()
|
||||||
.show()
|
|
||||||
}
|
}
|
||||||
}.show()
|
}.show()
|
||||||
}, dataBindingRecv = customMobileTypeTextBinding.binding.getRecv(2))
|
}, dataBindingRecv = customMobileTypeTextBinding.binding.getRecv(2))
|
||||||
val bigMobileTypeIconBinding = GetDataBinding({
|
val bigMobileTypeIconBinding = GetDataBinding({
|
||||||
MIUIActivity.safeSP.getBoolean(
|
MIUIActivity.safeSP.getBoolean(
|
||||||
"big_mobile_type_icon",
|
"big_mobile_type_icon", false
|
||||||
false
|
|
||||||
)
|
)
|
||||||
}) { view, flags, data ->
|
}) { view, flags, data ->
|
||||||
when (flags) {
|
when (flags) {
|
||||||
@@ -347,51 +301,67 @@ class SystemUIPageForT : BasePage() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
TextSummaryWithSwitch(
|
TextSummaryWithSwitch(
|
||||||
TextSummaryV(textId = R.string.big_mobile_type_icon),
|
TextSummaryV(textId = R.string.big_mobile_type_icon), SwitchV(
|
||||||
SwitchV(
|
"big_mobile_type_icon", dataBindingSend = bigMobileTypeIconBinding.bindingSend
|
||||||
"big_mobile_type_icon",
|
|
||||||
dataBindingSend = bigMobileTypeIconBinding.bindingSend
|
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
val bigMobileTypeLocation: HashMap<Int, String> = hashMapOf<Int, String>().also {
|
||||||
|
it[0] = getString(R.string.left)
|
||||||
|
it[1] = getString(R.string.right)
|
||||||
|
}
|
||||||
|
TextWithSpinner(
|
||||||
|
TextV(textId = R.string.big_mobile_type_location), SpinnerV(
|
||||||
|
bigMobileTypeLocation[MIUIActivity.safeSP.getInt(
|
||||||
|
"big_mobile_type_location", 1
|
||||||
|
)].toString()
|
||||||
|
) {
|
||||||
|
add(bigMobileTypeLocation[0].toString()) {
|
||||||
|
MIUIActivity.safeSP.putAny("big_mobile_type_location", 0)
|
||||||
|
}
|
||||||
|
add(bigMobileTypeLocation[1].toString()) {
|
||||||
|
MIUIActivity.safeSP.putAny("big_mobile_type_location", 1)
|
||||||
|
}
|
||||||
|
}, dataBindingRecv = bigMobileTypeIconBinding.binding.getRecv(2)
|
||||||
|
)
|
||||||
|
TextSummaryWithSwitch(
|
||||||
|
TextSummaryV(textId = R.string.big_mobile_type_only_show_network_card),
|
||||||
|
SwitchV("big_mobile_type_only_show_network_card", false),
|
||||||
|
dataBindingRecv = bigMobileTypeIconBinding.binding.getRecv(2)
|
||||||
|
)
|
||||||
TextSummaryWithSwitch(
|
TextSummaryWithSwitch(
|
||||||
TextSummaryV(textId = R.string.big_mobile_type_icon_bold),
|
TextSummaryV(textId = R.string.big_mobile_type_icon_bold),
|
||||||
SwitchV("big_mobile_type_icon_bold", true),
|
SwitchV("big_mobile_type_icon_bold", true),
|
||||||
dataBindingRecv = bigMobileTypeIconBinding.binding.getRecv(2)
|
dataBindingRecv = bigMobileTypeIconBinding.binding.getRecv(2)
|
||||||
)
|
)
|
||||||
TextSummaryArrow(
|
TextSummaryWithArrow(
|
||||||
TextSummaryV(
|
TextSummaryV(textId = R.string.big_mobile_type_icon_size, onClickListener = {
|
||||||
textId = R.string.big_mobile_type_icon_size,
|
MIUIDialog(activity) {
|
||||||
onClickListener = {
|
setTitle(R.string.big_mobile_type_icon_size)
|
||||||
MIUIDialog(activity) {
|
setEditText(
|
||||||
setTitle(R.string.big_mobile_type_icon_size)
|
"", "${activity.getString(R.string.def)}12.5, ${activity.getString(R.string.current)}${
|
||||||
setEditText(
|
MIUIActivity.safeSP.getFloat("big_mobile_type_icon_size", 12.5f)
|
||||||
"",
|
}"
|
||||||
"${activity.getString(R.string.def)}12.5, ${activity.getString(R.string.current)}${
|
)
|
||||||
MIUIActivity.safeSP.getFloat("big_mobile_type_icon_size", 12.5f)
|
setLButton(textId = R.string.cancel) {
|
||||||
}"
|
dismiss()
|
||||||
)
|
}
|
||||||
setLButton(textId = R.string.cancel) {
|
setRButton(textId = R.string.Done) {
|
||||||
dismiss()
|
if (getEditText() != "") {
|
||||||
|
MIUIActivity.safeSP.putAny(
|
||||||
|
"big_mobile_type_icon_size", getEditText().toFloat()
|
||||||
|
)
|
||||||
}
|
}
|
||||||
setRButton(textId = R.string.Done) {
|
dismiss()
|
||||||
if (getEditText() != "") {
|
}
|
||||||
MIUIActivity.safeSP.putAny(
|
}.show()
|
||||||
"big_mobile_type_icon_size",
|
}), dataBindingRecv = bigMobileTypeIconBinding.binding.getRecv(2)
|
||||||
getEditText().toFloat()
|
|
||||||
)
|
|
||||||
}
|
|
||||||
dismiss()
|
|
||||||
}
|
|
||||||
}.show()
|
|
||||||
}), dataBindingRecv = bigMobileTypeIconBinding.binding.getRecv(2)
|
|
||||||
)
|
)
|
||||||
TextSummaryArrow(TextSummaryV(textId = R.string.big_mobile_type_icon_up_and_down_position) {
|
TextSummaryWithArrow(TextSummaryV(textId = R.string.big_mobile_type_icon_up_and_down_position) {
|
||||||
MIUIDialog(activity) {
|
MIUIDialog(activity) {
|
||||||
setTitle(R.string.big_mobile_type_icon_up_and_down_position)
|
setTitle(R.string.big_mobile_type_icon_up_and_down_position)
|
||||||
setMessage("${activity.getString(R.string.range)} -15~15")
|
setMessage("${activity.getString(R.string.range)} -15~15")
|
||||||
setEditText(
|
setEditText(
|
||||||
"",
|
"", "${activity.getString(R.string.def)}0, ${activity.getString(R.string.current)}${
|
||||||
"${activity.getString(R.string.def)}0, ${activity.getString(R.string.current)}${
|
|
||||||
MIUIActivity.safeSP.getInt("big_mobile_type_icon_up_and_down_position", 0)
|
MIUIActivity.safeSP.getInt("big_mobile_type_icon_up_and_down_position", 0)
|
||||||
}"
|
}"
|
||||||
)
|
)
|
||||||
@@ -404,8 +374,7 @@ class SystemUIPageForT : BasePage() {
|
|||||||
val value = getEditText().toInt()
|
val value = getEditText().toInt()
|
||||||
if (value in (-15..15)) {
|
if (value in (-15..15)) {
|
||||||
MIUIActivity.safeSP.putAny(
|
MIUIActivity.safeSP.putAny(
|
||||||
"big_mobile_type_icon_up_and_down_position",
|
"big_mobile_type_icon_up_and_down_position", value
|
||||||
value
|
|
||||||
)
|
)
|
||||||
dismiss()
|
dismiss()
|
||||||
return@setRButton
|
return@setRButton
|
||||||
@@ -413,18 +382,16 @@ class SystemUIPageForT : BasePage() {
|
|||||||
} catch (_: Throwable) {
|
} catch (_: Throwable) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Toast.makeText(activity, R.string.input_error, Toast.LENGTH_SHORT)
|
Toast.makeText(activity, R.string.input_error, Toast.LENGTH_SHORT).show()
|
||||||
.show()
|
|
||||||
}
|
}
|
||||||
}.show()
|
}.show()
|
||||||
}, dataBindingRecv = bigMobileTypeIconBinding.binding.getRecv(2))
|
}, dataBindingRecv = bigMobileTypeIconBinding.binding.getRecv(2))
|
||||||
TextSummaryArrow(TextSummaryV(textId = R.string.big_mobile_type_icon_left_and_right_margins) {
|
TextSummaryWithArrow(TextSummaryV(textId = R.string.big_mobile_type_icon_left_and_right_margins) {
|
||||||
MIUIDialog(activity) {
|
MIUIDialog(activity) {
|
||||||
setTitle(R.string.big_mobile_type_icon_left_and_right_margins)
|
setTitle(R.string.big_mobile_type_icon_left_and_right_margins)
|
||||||
setMessage("${activity.getString(R.string.range)} 0~30")
|
setMessage("${activity.getString(R.string.range)} 0~30")
|
||||||
setEditText(
|
setEditText(
|
||||||
"",
|
"", "${activity.getString(R.string.def)}0, ${activity.getString(R.string.current)}${
|
||||||
"${activity.getString(R.string.def)}0, ${activity.getString(R.string.current)}${
|
|
||||||
MIUIActivity.safeSP.getInt("big_mobile_type_icon_left_and_right_margins", 0)
|
MIUIActivity.safeSP.getInt("big_mobile_type_icon_left_and_right_margins", 0)
|
||||||
}"
|
}"
|
||||||
)
|
)
|
||||||
@@ -437,8 +404,7 @@ class SystemUIPageForT : BasePage() {
|
|||||||
val value = getEditText().toInt()
|
val value = getEditText().toInt()
|
||||||
if (value in (0..30)) {
|
if (value in (0..30)) {
|
||||||
MIUIActivity.safeSP.putAny(
|
MIUIActivity.safeSP.putAny(
|
||||||
"big_mobile_type_icon_left_and_right_margins",
|
"big_mobile_type_icon_left_and_right_margins", value
|
||||||
value
|
|
||||||
)
|
)
|
||||||
dismiss()
|
dismiss()
|
||||||
return@setRButton
|
return@setRButton
|
||||||
@@ -446,8 +412,7 @@ class SystemUIPageForT : BasePage() {
|
|||||||
} catch (_: Throwable) {
|
} catch (_: Throwable) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Toast.makeText(activity, R.string.input_error, Toast.LENGTH_SHORT)
|
Toast.makeText(activity, R.string.input_error, Toast.LENGTH_SHORT).show()
|
||||||
.show()
|
|
||||||
}
|
}
|
||||||
}.show()
|
}.show()
|
||||||
}, dataBindingRecv = bigMobileTypeIconBinding.binding.getRecv(2))
|
}, dataBindingRecv = bigMobileTypeIconBinding.binding.getRecv(2))
|
||||||
@@ -455,37 +420,33 @@ class SystemUIPageForT : BasePage() {
|
|||||||
SeekBarWithText("maximum_number_of_notification_icons", 1, 30, 3)
|
SeekBarWithText("maximum_number_of_notification_icons", 1, 30, 3)
|
||||||
Text(textId = R.string.maximum_number_of_notification_dots)
|
Text(textId = R.string.maximum_number_of_notification_dots)
|
||||||
SeekBarWithText("maximum_number_of_notification_dots", 0, 4, 3)
|
SeekBarWithText("maximum_number_of_notification_dots", 0, 4, 3)
|
||||||
TextSummaryArrow(
|
TextSummaryWithArrow(
|
||||||
TextSummaryV(
|
TextSummaryV(textId = R.string.battery_percentage_font_size, onClickListener = {
|
||||||
textId = R.string.battery_percentage_font_size,
|
MIUIDialog(activity) {
|
||||||
onClickListener = {
|
setTitle(R.string.battery_percentage_font_size)
|
||||||
MIUIDialog(activity) {
|
setMessage(R.string.zero_do_no_change)
|
||||||
setTitle(R.string.battery_percentage_font_size)
|
setEditText(
|
||||||
setMessage(R.string.zero_do_no_change)
|
"", "${activity.getString(R.string.current)}${
|
||||||
setEditText(
|
MIUIActivity.safeSP.getFloat("battery_percentage_font_size", 0f)
|
||||||
"", "${activity.getString(R.string.current)}${
|
}"
|
||||||
MIUIActivity.safeSP.getFloat("battery_percentage_font_size", 0f)
|
)
|
||||||
}"
|
setLButton(textId = R.string.cancel) {
|
||||||
)
|
dismiss()
|
||||||
setLButton(textId = R.string.cancel) {
|
}
|
||||||
dismiss()
|
setRButton(textId = R.string.Done) {
|
||||||
|
if (getEditText() != "") {
|
||||||
|
MIUIActivity.safeSP.putAny(
|
||||||
|
"battery_percentage_font_size", getEditText().toFloat()
|
||||||
|
)
|
||||||
}
|
}
|
||||||
setRButton(textId = R.string.Done) {
|
dismiss()
|
||||||
if (getEditText() != "") {
|
}
|
||||||
MIUIActivity.safeSP.putAny(
|
}.show()
|
||||||
"battery_percentage_font_size",
|
})
|
||||||
getEditText().toFloat()
|
|
||||||
)
|
|
||||||
}
|
|
||||||
dismiss()
|
|
||||||
}
|
|
||||||
}.show()
|
|
||||||
})
|
|
||||||
)
|
)
|
||||||
TextSummaryWithSwitch(
|
TextSummaryWithSwitch(
|
||||||
TextSummaryV(
|
TextSummaryV(
|
||||||
textId = R.string.hide_battery_percentage_icon,
|
textId = R.string.hide_battery_percentage_icon, tipsId = R.string.hide_battery_percentage_icon_summary
|
||||||
tipsId = R.string.hide_battery_percentage_icon_summary
|
|
||||||
), SwitchV("hide_battery_percentage_icon")
|
), SwitchV("hide_battery_percentage_icon")
|
||||||
)
|
)
|
||||||
Line()
|
Line()
|
||||||
@@ -503,13 +464,11 @@ class SystemUIPageForT : BasePage() {
|
|||||||
), SwitchV("hide_status_bar_network_speed_second")
|
), SwitchV("hide_status_bar_network_speed_second")
|
||||||
)
|
)
|
||||||
TextWithSwitch(
|
TextWithSwitch(
|
||||||
TextV(textId = R.string.hide_network_speed_splitter),
|
TextV(textId = R.string.hide_network_speed_splitter), SwitchV("hide_network_speed_splitter")
|
||||||
SwitchV("hide_network_speed_splitter")
|
|
||||||
)
|
)
|
||||||
val statusBarDualRowNetworkSpeedBinding = GetDataBinding({
|
val statusBarDualRowNetworkSpeedBinding = GetDataBinding({
|
||||||
MIUIActivity.safeSP.getBoolean(
|
MIUIActivity.safeSP.getBoolean(
|
||||||
"status_bar_dual_row_network_speed",
|
"status_bar_dual_row_network_speed", false
|
||||||
false
|
|
||||||
)
|
)
|
||||||
}) { view, flags, data ->
|
}) { view, flags, data ->
|
||||||
when (flags) {
|
when (flags) {
|
||||||
@@ -521,21 +480,17 @@ class SystemUIPageForT : BasePage() {
|
|||||||
TextSummaryV(
|
TextSummaryV(
|
||||||
textId = R.string.status_bar_dual_row_network_speed,
|
textId = R.string.status_bar_dual_row_network_speed,
|
||||||
tipsId = R.string.status_bar_dual_row_network_speed_summary
|
tipsId = R.string.status_bar_dual_row_network_speed_summary
|
||||||
),
|
), SwitchV(
|
||||||
SwitchV(
|
"status_bar_dual_row_network_speed", dataBindingSend = statusBarDualRowNetworkSpeedBinding.bindingSend
|
||||||
"status_bar_dual_row_network_speed",
|
|
||||||
dataBindingSend = statusBarDualRowNetworkSpeedBinding.bindingSend
|
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
val align: HashMap<Int, String> = hashMapOf()
|
val align: HashMap<Int, String> = hashMapOf()
|
||||||
align[0] = getString(R.string.left)
|
align[0] = getString(R.string.left)
|
||||||
align[1] = getString(R.string.right)
|
align[1] = getString(R.string.right)
|
||||||
TextWithSpinner(
|
TextWithSpinner(
|
||||||
TextV(textId = R.string.status_bar_network_speed_dual_row_gravity),
|
TextV(textId = R.string.status_bar_network_speed_dual_row_gravity), SpinnerV(
|
||||||
SpinnerV(
|
|
||||||
align[MIUIActivity.safeSP.getInt(
|
align[MIUIActivity.safeSP.getInt(
|
||||||
"status_bar_network_speed_dual_row_gravity",
|
"status_bar_network_speed_dual_row_gravity", 0
|
||||||
0
|
|
||||||
)].toString()
|
)].toString()
|
||||||
) {
|
) {
|
||||||
add(align[0].toString()) {
|
add(align[0].toString()) {
|
||||||
@@ -545,33 +500,28 @@ class SystemUIPageForT : BasePage() {
|
|||||||
MIUIActivity.safeSP.putAny("status_bar_network_speed_dual_row_gravity", 1)
|
MIUIActivity.safeSP.putAny("status_bar_network_speed_dual_row_gravity", 1)
|
||||||
|
|
||||||
}
|
}
|
||||||
},
|
}, dataBindingRecv = statusBarDualRowNetworkSpeedBinding.binding.getRecv(2)
|
||||||
dataBindingRecv = statusBarDualRowNetworkSpeedBinding.binding.getRecv(2)
|
|
||||||
)
|
)
|
||||||
TextWithSpinner(
|
TextWithSpinner(TextV(textId = R.string.status_bar_network_speed_dual_row_icon), SpinnerV(
|
||||||
TextV(textId = R.string.status_bar_network_speed_dual_row_icon),
|
MIUIActivity.safeSP.getString(
|
||||||
SpinnerV(
|
"status_bar_network_speed_dual_row_icon", getString(R.string.none)
|
||||||
MIUIActivity.safeSP.getString(
|
)
|
||||||
"status_bar_network_speed_dual_row_icon",
|
) {
|
||||||
getString(R.string.none)
|
add(getString(R.string.none)) {
|
||||||
|
MIUIActivity.safeSP.putAny(
|
||||||
|
"status_bar_network_speed_dual_row_icon", getString(R.string.none)
|
||||||
)
|
)
|
||||||
) {
|
}
|
||||||
add(getString(R.string.none)) {
|
add("▲▼") {
|
||||||
MIUIActivity.safeSP.putAny(
|
MIUIActivity.safeSP.putAny("status_bar_network_speed_dual_row_icon", "▲▼")
|
||||||
"status_bar_network_speed_dual_row_icon",
|
}
|
||||||
getString(R.string.none)
|
add("△▽") {
|
||||||
)
|
MIUIActivity.safeSP.putAny("status_bar_network_speed_dual_row_icon", "△▽")
|
||||||
}
|
}
|
||||||
add("▲▼") {
|
add("↑↓") {
|
||||||
MIUIActivity.safeSP.putAny("status_bar_network_speed_dual_row_icon", "▲▼")
|
MIUIActivity.safeSP.putAny("status_bar_network_speed_dual_row_icon", "↑↓")
|
||||||
}
|
}
|
||||||
add("△▽") {
|
})
|
||||||
MIUIActivity.safeSP.putAny("status_bar_network_speed_dual_row_icon", "△▽")
|
|
||||||
}
|
|
||||||
add("↑↓") {
|
|
||||||
MIUIActivity.safeSP.putAny("status_bar_network_speed_dual_row_icon", "↑↓")
|
|
||||||
}
|
|
||||||
})
|
|
||||||
Text(
|
Text(
|
||||||
textId = R.string.status_bar_network_speed_dual_row_size,
|
textId = R.string.status_bar_network_speed_dual_row_size,
|
||||||
dataBindingRecv = statusBarDualRowNetworkSpeedBinding.binding.getRecv(2)
|
dataBindingRecv = statusBarDualRowNetworkSpeedBinding.binding.getRecv(2)
|
||||||
@@ -587,8 +537,7 @@ class SystemUIPageForT : BasePage() {
|
|||||||
TitleText(textId = R.string.notification_center)
|
TitleText(textId = R.string.notification_center)
|
||||||
val showWeatherMainSwitchBinding = GetDataBinding({
|
val showWeatherMainSwitchBinding = GetDataBinding({
|
||||||
MIUIActivity.safeSP.getBoolean(
|
MIUIActivity.safeSP.getBoolean(
|
||||||
"notification_weather",
|
"notification_weather", false
|
||||||
false
|
|
||||||
)
|
)
|
||||||
}) { view, flags, data ->
|
}) { view, flags, data ->
|
||||||
when (flags) {
|
when (flags) {
|
||||||
@@ -598,20 +547,15 @@ class SystemUIPageForT : BasePage() {
|
|||||||
}
|
}
|
||||||
TextSummaryWithSwitch(
|
TextSummaryWithSwitch(
|
||||||
TextSummaryV(
|
TextSummaryV(
|
||||||
textId = R.string.show_weather_main_switch,
|
textId = R.string.show_weather_main_switch, colorId = R.color.blue
|
||||||
colorId = R.color.purple_700
|
), SwitchV(
|
||||||
),
|
"notification_weather", dataBindingSend = showWeatherMainSwitchBinding.bindingSend
|
||||||
SwitchV(
|
|
||||||
"notification_weather",
|
|
||||||
dataBindingSend = showWeatherMainSwitchBinding.bindingSend
|
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
TextSummaryWithSwitch(
|
TextSummaryWithSwitch(
|
||||||
TextSummaryV(
|
TextSummaryV(
|
||||||
textId = R.string.show_city,
|
textId = R.string.show_city,
|
||||||
),
|
), SwitchV("notification_weather_city"), dataBindingRecv = showWeatherMainSwitchBinding.binding.getRecv(2)
|
||||||
SwitchV("notification_weather_city"),
|
|
||||||
dataBindingRecv = showWeatherMainSwitchBinding.binding.getRecv(2)
|
|
||||||
)
|
)
|
||||||
TextSummaryWithSwitch(
|
TextSummaryWithSwitch(
|
||||||
TextSummaryV(
|
TextSummaryV(
|
||||||
@@ -624,8 +568,7 @@ class SystemUIPageForT : BasePage() {
|
|||||||
TitleText(textId = R.string.control_center)
|
TitleText(textId = R.string.control_center)
|
||||||
val controlCenterWeatherBinding = GetDataBinding({
|
val controlCenterWeatherBinding = GetDataBinding({
|
||||||
MIUIActivity.safeSP.getBoolean(
|
MIUIActivity.safeSP.getBoolean(
|
||||||
"control_center_weather",
|
"control_center_weather", false
|
||||||
false
|
|
||||||
)
|
)
|
||||||
}) { view, flags, data ->
|
}) { view, flags, data ->
|
||||||
when (flags) {
|
when (flags) {
|
||||||
@@ -636,20 +579,16 @@ class SystemUIPageForT : BasePage() {
|
|||||||
TextSummaryWithSwitch(
|
TextSummaryWithSwitch(
|
||||||
TextSummaryV(
|
TextSummaryV(
|
||||||
textId = R.string.show_weather_main_switch,
|
textId = R.string.show_weather_main_switch,
|
||||||
colorId = R.color.purple_700,
|
colorId = R.color.blue,
|
||||||
tipsId = R.string.control_center_weather_summary
|
tipsId = R.string.control_center_weather_summary
|
||||||
),
|
), SwitchV(
|
||||||
SwitchV(
|
"control_center_weather", dataBindingSend = controlCenterWeatherBinding.bindingSend
|
||||||
"control_center_weather",
|
|
||||||
dataBindingSend = controlCenterWeatherBinding.bindingSend
|
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
TextSummaryWithSwitch(
|
TextSummaryWithSwitch(
|
||||||
TextSummaryV(
|
TextSummaryV(
|
||||||
textId = R.string.show_city,
|
textId = R.string.show_city,
|
||||||
),
|
), SwitchV("control_center_weather_city"), dataBindingRecv = controlCenterWeatherBinding.binding.getRecv(2)
|
||||||
SwitchV("control_center_weather_city"),
|
|
||||||
dataBindingRecv = controlCenterWeatherBinding.binding.getRecv(2)
|
|
||||||
)
|
)
|
||||||
Line()
|
Line()
|
||||||
TitleText(textId = R.string.lock_screen)
|
TitleText(textId = R.string.lock_screen)
|
||||||
@@ -672,8 +611,7 @@ class SystemUIPageForT : BasePage() {
|
|||||||
), SwitchV("remove_lock_screen_camera")
|
), SwitchV("remove_lock_screen_camera")
|
||||||
)
|
)
|
||||||
TextSummaryWithSwitch(
|
TextSummaryWithSwitch(
|
||||||
TextSummaryV(textId = R.string.enable_wave_charge_animation),
|
TextSummaryV(textId = R.string.enable_wave_charge_animation), SwitchV("enable_wave_charge_animation")
|
||||||
SwitchV("enable_wave_charge_animation")
|
|
||||||
)
|
)
|
||||||
TextSummaryWithSwitch(
|
TextSummaryWithSwitch(
|
||||||
TextSummaryV(
|
TextSummaryV(
|
||||||
@@ -683,16 +621,14 @@ class SystemUIPageForT : BasePage() {
|
|||||||
)
|
)
|
||||||
TextSummaryWithSwitch(
|
TextSummaryWithSwitch(
|
||||||
TextSummaryV(
|
TextSummaryV(
|
||||||
textId = R.string.double_tap_to_sleep,
|
textId = R.string.double_tap_to_sleep, tipsId = R.string.home_double_tap_to_sleep_summary
|
||||||
tipsId = R.string.home_double_tap_to_sleep_summary
|
|
||||||
), SwitchV("lock_screen_double_tap_to_sleep")
|
), SwitchV("lock_screen_double_tap_to_sleep")
|
||||||
)
|
)
|
||||||
Line()
|
Line()
|
||||||
TitleText(textId = R.string.old_quick_settings_panel)
|
TitleText(textId = R.string.old_quick_settings_panel)
|
||||||
val oldQSCustomSwitchBinding = GetDataBinding({
|
val oldQSCustomSwitchBinding = GetDataBinding({
|
||||||
MIUIActivity.safeSP.getBoolean(
|
MIUIActivity.safeSP.getBoolean(
|
||||||
"old_qs_custom_switch",
|
"old_qs_custom_switch", false
|
||||||
false
|
|
||||||
)
|
)
|
||||||
}) { view, flags, data ->
|
}) { view, flags, data ->
|
||||||
when (flags) {
|
when (flags) {
|
||||||
@@ -702,57 +638,35 @@ class SystemUIPageForT : BasePage() {
|
|||||||
}
|
}
|
||||||
TextSummaryWithSwitch(
|
TextSummaryWithSwitch(
|
||||||
TextSummaryV(
|
TextSummaryV(
|
||||||
textId = R.string.old_qs_custom_switch,
|
textId = R.string.old_qs_custom_switch, colorId = R.color.blue
|
||||||
colorId = R.color.purple_700
|
), SwitchV(
|
||||||
),
|
"old_qs_custom_switch", dataBindingSend = oldQSCustomSwitchBinding.bindingSend
|
||||||
SwitchV(
|
|
||||||
"old_qs_custom_switch",
|
|
||||||
dataBindingSend = oldQSCustomSwitchBinding.bindingSend
|
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
Text(
|
Text(
|
||||||
textId = R.string.qs_custom_rows,
|
textId = R.string.qs_custom_rows, dataBindingRecv = oldQSCustomSwitchBinding.binding.getRecv(2)
|
||||||
dataBindingRecv = oldQSCustomSwitchBinding.binding.getRecv(2)
|
|
||||||
)
|
)
|
||||||
SeekBarWithText(
|
SeekBarWithText(
|
||||||
"qs_custom_rows",
|
"qs_custom_rows", 1, 6, 3, dataBindingRecv = oldQSCustomSwitchBinding.binding.getRecv(2)
|
||||||
1,
|
|
||||||
6,
|
|
||||||
3,
|
|
||||||
dataBindingRecv = oldQSCustomSwitchBinding.binding.getRecv(2)
|
|
||||||
)
|
)
|
||||||
Text(
|
Text(
|
||||||
textId = R.string.qs_custom_rows_horizontal,
|
textId = R.string.qs_custom_rows_horizontal, dataBindingRecv = oldQSCustomSwitchBinding.binding.getRecv(2)
|
||||||
dataBindingRecv = oldQSCustomSwitchBinding.binding.getRecv(2)
|
|
||||||
)
|
)
|
||||||
SeekBarWithText(
|
SeekBarWithText(
|
||||||
"qs_custom_rows_horizontal",
|
"qs_custom_rows_horizontal", 1, 3, 2, dataBindingRecv = oldQSCustomSwitchBinding.binding.getRecv(2)
|
||||||
1,
|
|
||||||
3,
|
|
||||||
2,
|
|
||||||
dataBindingRecv = oldQSCustomSwitchBinding.binding.getRecv(2)
|
|
||||||
)
|
)
|
||||||
Text(
|
Text(
|
||||||
textId = R.string.qs_custom_columns,
|
textId = R.string.qs_custom_columns, dataBindingRecv = oldQSCustomSwitchBinding.binding.getRecv(2)
|
||||||
dataBindingRecv = oldQSCustomSwitchBinding.binding.getRecv(2)
|
|
||||||
)
|
)
|
||||||
SeekBarWithText(
|
SeekBarWithText(
|
||||||
"qs_custom_columns",
|
"qs_custom_columns", 1, 7, 4, dataBindingRecv = oldQSCustomSwitchBinding.binding.getRecv(2)
|
||||||
1,
|
|
||||||
7,
|
|
||||||
4,
|
|
||||||
dataBindingRecv = oldQSCustomSwitchBinding.binding.getRecv(2)
|
|
||||||
)
|
)
|
||||||
Text(
|
Text(
|
||||||
textId = R.string.qs_custom_columns_unexpanded,
|
textId = R.string.qs_custom_columns_unexpanded,
|
||||||
dataBindingRecv = oldQSCustomSwitchBinding.binding.getRecv(2)
|
dataBindingRecv = oldQSCustomSwitchBinding.binding.getRecv(2)
|
||||||
)
|
)
|
||||||
SeekBarWithText(
|
SeekBarWithText(
|
||||||
"qs_custom_columns_unexpanded",
|
"qs_custom_columns_unexpanded", 1, 7, 5, dataBindingRecv = oldQSCustomSwitchBinding.binding.getRecv(2)
|
||||||
1,
|
|
||||||
7,
|
|
||||||
5,
|
|
||||||
dataBindingRecv = oldQSCustomSwitchBinding.binding.getRecv(2)
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ package com.lt2333.simplicitytools.hooks
|
|||||||
|
|
||||||
import com.lt2333.simplicitytools.BuildConfig
|
import com.lt2333.simplicitytools.BuildConfig
|
||||||
import com.lt2333.simplicitytools.hooks.apps.*
|
import com.lt2333.simplicitytools.hooks.apps.*
|
||||||
import com.lt2333.simplicitytools.hooks.rules.all.CorePatchMainHook
|
import com.lt2333.simplicitytools.hooks.rules.all.corepatch.CorePatchMainHook
|
||||||
import com.lt2333.simplicitytools.utils.xposed.EasyXposedInit
|
import com.lt2333.simplicitytools.utils.xposed.EasyXposedInit
|
||||||
import com.lt2333.simplicitytools.utils.xposed.base.AppRegister
|
import com.lt2333.simplicitytools.utils.xposed.base.AppRegister
|
||||||
import de.robv.android.xposed.IXposedHookZygoteInit
|
import de.robv.android.xposed.IXposedHookZygoteInit
|
||||||
@@ -25,6 +25,7 @@ class MainHook : EasyXposedInit() {
|
|||||||
ScreenShot, // 截屏
|
ScreenShot, // 截屏
|
||||||
Cast, //投屏
|
Cast, //投屏
|
||||||
RearDisplay, //背屏
|
RearDisplay, //背屏
|
||||||
|
PackageInstaller, // 应用包管理组件
|
||||||
)
|
)
|
||||||
|
|
||||||
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam?) {
|
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam?) {
|
||||||
|
|||||||
@@ -1,9 +1,15 @@
|
|||||||
package com.lt2333.simplicitytools.hooks.apps
|
package com.lt2333.simplicitytools.hooks.apps
|
||||||
|
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import com.lt2333.simplicitytools.hooks.rules.all.CorePatchMainHook
|
import com.lt2333.simplicitytools.hooks.rules.all.android.AllowUntrustedTouchesForAll
|
||||||
import com.lt2333.simplicitytools.hooks.rules.s.android.*
|
import com.lt2333.simplicitytools.hooks.rules.all.android.DeleteOnPostNotificationForAll
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.all.android.DisableFlagSecureForAll
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.all.corepatch.CorePatchMainHook
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.s.android.MaxWallpaperScaleForS
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.s.android.RemoveSmallWindowRestrictionsForS
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.s.android.SystemPropertiesHookForS
|
||||||
import com.lt2333.simplicitytools.hooks.rules.t.android.MaxWallpaperScaleForT
|
import com.lt2333.simplicitytools.hooks.rules.t.android.MaxWallpaperScaleForT
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.t.android.SystemPropertiesHookForT
|
||||||
import com.lt2333.simplicitytools.utils.xposed.base.AppRegister
|
import com.lt2333.simplicitytools.utils.xposed.base.AppRegister
|
||||||
import de.robv.android.xposed.callbacks.XC_LoadPackage
|
import de.robv.android.xposed.callbacks.XC_LoadPackage
|
||||||
|
|
||||||
@@ -17,23 +23,24 @@ object Android : AppRegister() {
|
|||||||
Build.VERSION_CODES.TIRAMISU -> {
|
Build.VERSION_CODES.TIRAMISU -> {
|
||||||
autoInitHooks(
|
autoInitHooks(
|
||||||
lpparam,
|
lpparam,
|
||||||
DisableFlagSecureForS, //允许截图
|
DisableFlagSecureForAll, //允许截图
|
||||||
DeleteOnPostNotificationForS, //上层显示
|
DeleteOnPostNotificationForAll, //上层显示
|
||||||
RemoveSmallWindowRestrictionsForS, //解除小窗限制
|
RemoveSmallWindowRestrictionsForS, //解除小窗限制
|
||||||
MaxWallpaperScaleForT, //壁纸缩放比例
|
MaxWallpaperScaleForT, //壁纸缩放比例
|
||||||
SystemPropertiesHookForS, //SystemPropertiesHook
|
SystemPropertiesHookForT, //SystemPropertiesHook
|
||||||
AllowUntrustedTouchesForS, //允许不受信任的触摸
|
AllowUntrustedTouchesForAll, //允许不受信任的触摸
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
Build.VERSION_CODES.S -> {
|
Build.VERSION_CODES.S -> {
|
||||||
autoInitHooks(
|
autoInitHooks(
|
||||||
lpparam,
|
lpparam,
|
||||||
DisableFlagSecureForS, //允许截图
|
DisableFlagSecureForAll, //允许截图
|
||||||
DeleteOnPostNotificationForS, //上层显示
|
DeleteOnPostNotificationForAll, //上层显示
|
||||||
RemoveSmallWindowRestrictionsForS, //解除小窗限制
|
RemoveSmallWindowRestrictionsForS, //解除小窗限制
|
||||||
MaxWallpaperScaleForS, //壁纸缩放比例
|
MaxWallpaperScaleForS, //壁纸缩放比例
|
||||||
SystemPropertiesHookForS, //SystemPropertiesHook
|
SystemPropertiesHookForS, //SystemPropertiesHook
|
||||||
AllowUntrustedTouchesForS, //允许不受信任的触摸
|
AllowUntrustedTouchesForAll, //允许不受信任的触摸
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,23 +1,26 @@
|
|||||||
package com.lt2333.simplicitytools.hooks.apps
|
package com.lt2333.simplicitytools.hooks.apps
|
||||||
|
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import com.lt2333.simplicitytools.hooks.rules.s.cast.ForceSupportSendAppForS
|
import com.lt2333.simplicitytools.hooks.rules.all.cast.ForceSupportSendAppForAll
|
||||||
import com.lt2333.simplicitytools.utils.xposed.base.AppRegister
|
import com.lt2333.simplicitytools.utils.xposed.base.AppRegister
|
||||||
import de.robv.android.xposed.callbacks.XC_LoadPackage
|
import de.robv.android.xposed.callbacks.XC_LoadPackage
|
||||||
|
|
||||||
object Cast: AppRegister() {
|
object Cast : AppRegister() {
|
||||||
override val packageName: String = "com.milink.service"
|
override val packageName: String = "com.milink.service"
|
||||||
|
|
||||||
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
|
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
|
||||||
when (Build.VERSION.SDK_INT) {
|
when (Build.VERSION.SDK_INT) {
|
||||||
Build.VERSION_CODES.TIRAMISU -> {
|
Build.VERSION_CODES.TIRAMISU -> {
|
||||||
autoInitHooks(lpparam,
|
autoInitHooks(
|
||||||
ForceSupportSendAppForS, //强制允许所有应用接力
|
lpparam,
|
||||||
|
ForceSupportSendAppForAll, //强制允许所有应用接力
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
Build.VERSION_CODES.S -> {
|
Build.VERSION_CODES.S -> {
|
||||||
autoInitHooks(lpparam,
|
autoInitHooks(
|
||||||
ForceSupportSendAppForS, //强制允许所有应用接力
|
lpparam,
|
||||||
|
ForceSupportSendAppForAll, //强制允许所有应用接力
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ object MediaEditor : AppRegister() {
|
|||||||
UnlockUnlimitedCroppingForT, //解锁裁切最小值
|
UnlockUnlimitedCroppingForT, //解锁裁切最小值
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
Build.VERSION_CODES.S -> {
|
Build.VERSION_CODES.S -> {
|
||||||
autoInitHooks(
|
autoInitHooks(
|
||||||
lpparam,
|
lpparam,
|
||||||
|
|||||||
@@ -1,8 +1,13 @@
|
|||||||
package com.lt2333.simplicitytools.hooks.apps
|
package com.lt2333.simplicitytools.hooks.apps
|
||||||
|
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import com.lt2333.simplicitytools.hooks.rules.s.miuihome.AlwaysDisplayTimeForS
|
import com.lt2333.simplicitytools.hooks.rules.all.miuihome.AlwaysShowStatusBarClockForAll
|
||||||
import com.lt2333.simplicitytools.hooks.rules.s.miuihome.DoubleTapToSleepForS
|
import com.lt2333.simplicitytools.hooks.rules.all.miuihome.DisableRecentViewWallpaperDarkeningForAll
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.all.miuihome.DoubleTapToSleepForAll
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.all.miuihome.ModifyRecentViewRemoveCardAnimForAll
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.all.miuihome.RemoveSmallWindowRestrictionForMiuiHomeForAll
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.all.miuihome.ScrollIconNameForAll
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.all.miuihome.ShortcutAddSmallWindowForAll
|
||||||
import com.lt2333.simplicitytools.utils.xposed.base.AppRegister
|
import com.lt2333.simplicitytools.utils.xposed.base.AppRegister
|
||||||
import de.robv.android.xposed.callbacks.XC_LoadPackage
|
import de.robv.android.xposed.callbacks.XC_LoadPackage
|
||||||
|
|
||||||
@@ -14,15 +19,26 @@ object MiuiHome : AppRegister() {
|
|||||||
Build.VERSION_CODES.TIRAMISU -> {
|
Build.VERSION_CODES.TIRAMISU -> {
|
||||||
autoInitHooks(
|
autoInitHooks(
|
||||||
lpparam,
|
lpparam,
|
||||||
AlwaysDisplayTimeForS, //时钟显示时钟
|
AlwaysShowStatusBarClockForAll, //时钟显示时钟
|
||||||
DoubleTapToSleepForS, //双击锁屏
|
DoubleTapToSleepForAll, //双击锁屏
|
||||||
|
DisableRecentViewWallpaperDarkeningForAll, //取消后台壁纸压暗效果
|
||||||
|
ModifyRecentViewRemoveCardAnimForAll, //横向排布后台划卡动画
|
||||||
|
ScrollIconNameForAll, //滚动显示应用标题
|
||||||
|
RemoveSmallWindowRestrictionForMiuiHomeForAll, //取消小窗限制
|
||||||
|
ShortcutAddSmallWindowForAll, //快捷菜单添加小窗
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
Build.VERSION_CODES.S -> {
|
Build.VERSION_CODES.S -> {
|
||||||
autoInitHooks(
|
autoInitHooks(
|
||||||
lpparam,
|
lpparam,
|
||||||
AlwaysDisplayTimeForS, //时钟显示时钟
|
AlwaysShowStatusBarClockForAll, //时钟显示时钟
|
||||||
DoubleTapToSleepForS, //双击锁屏
|
DoubleTapToSleepForAll, //双击锁屏
|
||||||
|
DisableRecentViewWallpaperDarkeningForAll, //取消后台壁纸压暗效果
|
||||||
|
ModifyRecentViewRemoveCardAnimForAll, //横向排布后台划卡动画
|
||||||
|
ScrollIconNameForAll, //滚动显示应用标题
|
||||||
|
RemoveSmallWindowRestrictionForMiuiHomeForAll, //取消小窗限制
|
||||||
|
ShortcutAddSmallWindowForAll, //快捷菜单添加小窗
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,24 @@
|
|||||||
|
package com.lt2333.simplicitytools.hooks.apps
|
||||||
|
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.findMethod
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.hookBefore
|
||||||
|
import com.lt2333.simplicitytools.utils.hasEnable
|
||||||
|
import com.lt2333.simplicitytools.utils.xposed.base.AppRegister
|
||||||
|
import de.robv.android.xposed.XposedBridge
|
||||||
|
import de.robv.android.xposed.callbacks.XC_LoadPackage
|
||||||
|
|
||||||
|
object PackageInstaller : AppRegister() {
|
||||||
|
|
||||||
|
override val packageName: String = "com.miui.packageinstaller"
|
||||||
|
|
||||||
|
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
|
||||||
|
hasEnable("pkg_installer_count_checking") {
|
||||||
|
findMethod("com.miui.packageInstaller.model.RiskControlRules") {
|
||||||
|
name == "getCurrentLevel"
|
||||||
|
}.hookBefore { param ->
|
||||||
|
XposedBridge.log("Hooked getCurrentLevel, param result = ${param.result}")
|
||||||
|
param.result = 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,29 +1,32 @@
|
|||||||
package com.lt2333.simplicitytools.hooks.apps
|
package com.lt2333.simplicitytools.hooks.apps
|
||||||
|
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.all.powerkeeper.LockMaxFpsForAll
|
||||||
import com.lt2333.simplicitytools.hooks.rules.s.powerkeeper.DoNotClearAppForS
|
import com.lt2333.simplicitytools.hooks.rules.s.powerkeeper.DoNotClearAppForS
|
||||||
import com.lt2333.simplicitytools.hooks.rules.s.powerkeeper.LockMaxFpsForS
|
|
||||||
import com.lt2333.simplicitytools.hooks.rules.s.powerkeeper.MakeMilletMoreAggressiveForS
|
import com.lt2333.simplicitytools.hooks.rules.s.powerkeeper.MakeMilletMoreAggressiveForS
|
||||||
import com.lt2333.simplicitytools.hooks.rules.s.powerkeeper.PreventRecoveryOfBatteryOptimizationWhitelistForS
|
import com.lt2333.simplicitytools.hooks.rules.s.powerkeeper.PreventRecoveryOfBatteryOptimizationWhitelistForS
|
||||||
import com.lt2333.simplicitytools.utils.xposed.base.AppRegister
|
import com.lt2333.simplicitytools.utils.xposed.base.AppRegister
|
||||||
import de.robv.android.xposed.callbacks.XC_LoadPackage
|
import de.robv.android.xposed.callbacks.XC_LoadPackage
|
||||||
|
|
||||||
object PowerKeeper: AppRegister() {
|
object PowerKeeper : AppRegister() {
|
||||||
override val packageName: String = "com.miui.powerkeeper"
|
override val packageName: String = "com.miui.powerkeeper"
|
||||||
|
|
||||||
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
|
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
|
||||||
when (Build.VERSION.SDK_INT) {
|
when (Build.VERSION.SDK_INT) {
|
||||||
Build.VERSION_CODES.TIRAMISU -> {
|
Build.VERSION_CODES.TIRAMISU -> {
|
||||||
autoInitHooks(lpparam,
|
autoInitHooks(
|
||||||
LockMaxFpsForS, //锁定最高刷新率
|
lpparam,
|
||||||
|
LockMaxFpsForAll, //锁定最高刷新率
|
||||||
PreventRecoveryOfBatteryOptimizationWhitelistForS, //防止恢复电池优化白名单
|
PreventRecoveryOfBatteryOptimizationWhitelistForS, //防止恢复电池优化白名单
|
||||||
DoNotClearAppForS,//阻止杀后台
|
DoNotClearAppForS,//阻止杀后台
|
||||||
MakeMilletMoreAggressiveForS,//使 Millet 更激进
|
MakeMilletMoreAggressiveForS,//使 Millet 更激进
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
Build.VERSION_CODES.S -> {
|
Build.VERSION_CODES.S -> {
|
||||||
autoInitHooks(lpparam,
|
autoInitHooks(
|
||||||
LockMaxFpsForS, //锁定最高刷新率
|
lpparam,
|
||||||
|
LockMaxFpsForAll, //锁定最高刷新率
|
||||||
PreventRecoveryOfBatteryOptimizationWhitelistForS, //防止恢复电池优化白名单
|
PreventRecoveryOfBatteryOptimizationWhitelistForS, //防止恢复电池优化白名单
|
||||||
DoNotClearAppForS,//阻止杀后台
|
DoNotClearAppForS,//阻止杀后台
|
||||||
MakeMilletMoreAggressiveForS,//使 Millet 更激进
|
MakeMilletMoreAggressiveForS,//使 Millet 更激进
|
||||||
|
|||||||
@@ -1,23 +1,26 @@
|
|||||||
package com.lt2333.simplicitytools.hooks.apps
|
package com.lt2333.simplicitytools.hooks.apps
|
||||||
|
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import com.lt2333.simplicitytools.hooks.rules.s.reardisplay.RearDisplayWeatherForS
|
import com.lt2333.simplicitytools.hooks.rules.all.reardisplay.RearDisplayWeatherForAll
|
||||||
import com.lt2333.simplicitytools.utils.xposed.base.AppRegister
|
import com.lt2333.simplicitytools.utils.xposed.base.AppRegister
|
||||||
import de.robv.android.xposed.callbacks.XC_LoadPackage
|
import de.robv.android.xposed.callbacks.XC_LoadPackage
|
||||||
|
|
||||||
object RearDisplay: AppRegister() {
|
object RearDisplay : AppRegister() {
|
||||||
override val packageName: String = "com.xiaomi.misubscreenui"
|
override val packageName: String = "com.xiaomi.misubscreenui"
|
||||||
|
|
||||||
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
|
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
|
||||||
when (Build.VERSION.SDK_INT) {
|
when (Build.VERSION.SDK_INT) {
|
||||||
Build.VERSION_CODES.TIRAMISU -> {
|
Build.VERSION_CODES.TIRAMISU -> {
|
||||||
autoInitHooks(lpparam,
|
autoInitHooks(
|
||||||
RearDisplayWeatherForS, //背屏显示天气
|
lpparam,
|
||||||
|
RearDisplayWeatherForAll, //背屏显示天气
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
Build.VERSION_CODES.S -> {
|
Build.VERSION_CODES.S -> {
|
||||||
autoInitHooks(lpparam,
|
autoInitHooks(
|
||||||
RearDisplayWeatherForS, //背屏显示天气
|
lpparam,
|
||||||
|
RearDisplayWeatherForAll, //背屏显示天气
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,18 +6,21 @@ import com.lt2333.simplicitytools.hooks.rules.t.mediaeditor.UnlockUnlimitedCropp
|
|||||||
import com.lt2333.simplicitytools.utils.xposed.base.AppRegister
|
import com.lt2333.simplicitytools.utils.xposed.base.AppRegister
|
||||||
import de.robv.android.xposed.callbacks.XC_LoadPackage
|
import de.robv.android.xposed.callbacks.XC_LoadPackage
|
||||||
|
|
||||||
object ScreenShot: AppRegister() {
|
object ScreenShot : AppRegister() {
|
||||||
override val packageName: String = "com.miui.screenshot"
|
override val packageName: String = "com.miui.screenshot"
|
||||||
|
|
||||||
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
|
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
|
||||||
when (Build.VERSION.SDK_INT) {
|
when (Build.VERSION.SDK_INT) {
|
||||||
Build.VERSION_CODES.TIRAMISU -> {
|
Build.VERSION_CODES.TIRAMISU -> {
|
||||||
autoInitHooks(lpparam,
|
autoInitHooks(
|
||||||
|
lpparam,
|
||||||
UnlockUnlimitedCroppingForT, //解锁裁切限制
|
UnlockUnlimitedCroppingForT, //解锁裁切限制
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
Build.VERSION_CODES.S -> {
|
Build.VERSION_CODES.S -> {
|
||||||
autoInitHooks(lpparam,
|
autoInitHooks(
|
||||||
|
lpparam,
|
||||||
UnlockUnlimitedCroppingForS, //解锁裁切限制
|
UnlockUnlimitedCroppingForS, //解锁裁切限制
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,32 +1,39 @@
|
|||||||
package com.lt2333.simplicitytools.hooks.apps
|
package com.lt2333.simplicitytools.hooks.apps
|
||||||
|
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import com.lt2333.simplicitytools.hooks.rules.s.securitycenter.*
|
import com.lt2333.simplicitytools.hooks.rules.all.securitycenter.LockOneHundredForAll
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.all.securitycenter.RemoveMacroBlacklistForAll
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.all.securitycenter.RemoveOpenAppConfirmationPopupForAll
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.all.securitycenter.SkipWaitingTimeForAll
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.s.securitycenter.ShowBatteryTemperatureForS
|
||||||
import com.lt2333.simplicitytools.hooks.rules.t.securitycenter.ShowBatteryTemperatureForT
|
import com.lt2333.simplicitytools.hooks.rules.t.securitycenter.ShowBatteryTemperatureForT
|
||||||
import com.lt2333.simplicitytools.utils.xposed.base.AppRegister
|
import com.lt2333.simplicitytools.utils.xposed.base.AppRegister
|
||||||
import de.robv.android.xposed.callbacks.XC_LoadPackage
|
import de.robv.android.xposed.callbacks.XC_LoadPackage
|
||||||
|
|
||||||
object SecurityCenter: AppRegister() {
|
object SecurityCenter : AppRegister() {
|
||||||
override val packageName: String = "com.miui.securitycenter"
|
override val packageName: String = "com.miui.securitycenter"
|
||||||
|
|
||||||
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
|
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
|
||||||
when (Build.VERSION.SDK_INT) {
|
when (Build.VERSION.SDK_INT) {
|
||||||
Build.VERSION_CODES.TIRAMISU -> {
|
Build.VERSION_CODES.TIRAMISU -> {
|
||||||
autoInitHooks(lpparam,
|
autoInitHooks(
|
||||||
SkipWaitingTimeForS, //跳过 5/10秒等待时间
|
lpparam,
|
||||||
LockOneHundredForS, //锁定 100分
|
SkipWaitingTimeForAll, //跳过 5/10秒等待时间
|
||||||
RemoveMacroBlacklistForS, //去除自动连招黑名单
|
LockOneHundredForAll, //锁定 100分
|
||||||
|
RemoveMacroBlacklistForAll, //去除自动连招黑名单
|
||||||
ShowBatteryTemperatureForT, //显示电池温度
|
ShowBatteryTemperatureForT, //显示电池温度
|
||||||
RemoveOpenAppConfirmationPopupForS, //去除打开应用弹窗
|
RemoveOpenAppConfirmationPopupForAll, //去除打开应用弹窗
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
Build.VERSION_CODES.S -> {
|
Build.VERSION_CODES.S -> {
|
||||||
autoInitHooks(lpparam,
|
autoInitHooks(
|
||||||
SkipWaitingTimeForS, //跳过 5/10秒等待时间
|
lpparam,
|
||||||
LockOneHundredForS, //锁定 100分
|
SkipWaitingTimeForAll, //跳过 5/10秒等待时间
|
||||||
RemoveMacroBlacklistForS, //去除自动连招黑名单
|
LockOneHundredForAll, //锁定 100分
|
||||||
|
RemoveMacroBlacklistForAll, //去除自动连招黑名单
|
||||||
ShowBatteryTemperatureForS, //显示电池温度
|
ShowBatteryTemperatureForS, //显示电池温度
|
||||||
RemoveOpenAppConfirmationPopupForS, //去除打开应用弹窗
|
RemoveOpenAppConfirmationPopupForAll, //去除打开应用弹窗
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,23 +1,26 @@
|
|||||||
package com.lt2333.simplicitytools.hooks.apps
|
package com.lt2333.simplicitytools.hooks.apps
|
||||||
|
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import com.lt2333.simplicitytools.hooks.rules.s.settings.ShowNotificationImportanceForS
|
import com.lt2333.simplicitytools.hooks.rules.all.settings.ShowNotificationImportanceForAll
|
||||||
import com.lt2333.simplicitytools.utils.xposed.base.AppRegister
|
import com.lt2333.simplicitytools.utils.xposed.base.AppRegister
|
||||||
import de.robv.android.xposed.callbacks.XC_LoadPackage
|
import de.robv.android.xposed.callbacks.XC_LoadPackage
|
||||||
|
|
||||||
object Settings: AppRegister() {
|
object Settings : AppRegister() {
|
||||||
override val packageName: String = "com.android.settings"
|
override val packageName: String = "com.android.settings"
|
||||||
|
|
||||||
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
|
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
|
||||||
when (Build.VERSION.SDK_INT) {
|
when (Build.VERSION.SDK_INT) {
|
||||||
Build.VERSION_CODES.TIRAMISU -> {
|
Build.VERSION_CODES.TIRAMISU -> {
|
||||||
autoInitHooks(lpparam,
|
autoInitHooks(
|
||||||
ShowNotificationImportanceForS, //显示通知重要程度
|
lpparam,
|
||||||
|
ShowNotificationImportanceForAll, //显示通知重要程度
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
Build.VERSION_CODES.S -> {
|
Build.VERSION_CODES.S -> {
|
||||||
autoInitHooks(lpparam,
|
autoInitHooks(
|
||||||
ShowNotificationImportanceForS, //显示通知重要程度
|
lpparam,
|
||||||
|
ShowNotificationImportanceForAll, //显示通知重要程度
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,54 +1,116 @@
|
|||||||
package com.lt2333.simplicitytools.hooks.apps
|
package com.lt2333.simplicitytools.hooks.apps
|
||||||
|
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import com.lt2333.simplicitytools.hooks.rules.s.systemui.*
|
import com.lt2333.simplicitytools.hooks.rules.s.systemui.BatteryPercentageForS
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.s.systemui.CanNotificationSlideForS
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.s.systemui.ControlCenterWeatherForS
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.s.systemui.CustomMobileTypeTextForS
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.s.systemui.DoubleLineNetworkSpeedForS
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.s.systemui.HideBatteryIconForS
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.s.systemui.HideHDIconForS
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.s.systemui.HideMobileActivityIconForS
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.s.systemui.HideMobileTypeIconForS
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.s.systemui.HideNetworkSpeedSplitterForS
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.s.systemui.HideSimIconForS
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.s.systemui.HideStatusBarIconForS
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.s.systemui.HideStatusBarNetworkSpeedSecondForS
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.s.systemui.HideWifiActivityIconForS
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.s.systemui.LockScreenClockDisplaySecondsForS
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.s.systemui.LockScreenCurrentForS
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.s.systemui.LockScreenDoubleTapToSleepForS
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.s.systemui.MaximumNumberOfNotificationIconsForS
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.s.systemui.NewNotificationWeatherForS
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.s.systemui.NotificationWeatherForS
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.s.systemui.OldNotificationWeatherForS
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.s.systemui.OldQSCustomForS
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.s.systemui.RemoveLockScreenCameraForS
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.s.systemui.RemoveTheLeftSideOfTheLockScreenForS
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.s.systemui.ShowWifiStandardForS
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.s.systemui.StatusBarBigMobileTypeIconForS
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.s.systemui.StatusBarDoubleTapToSleepForS
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.s.systemui.StatusBarLayoutForS
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.s.systemui.StatusBarNetworkSpeedRefreshSpeedForS
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.s.systemui.StatusBarTimeCustomizationForS
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.s.systemui.WaveChargeForS
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.t.systemui.BatteryPercentageForT
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.t.systemui.CanNotificationSlideForT
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.t.systemui.ControlCenterWeatherForT
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.t.systemui.CustomMobileTypeTextForT
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.t.systemui.DoubleLineNetworkSpeedForT
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.t.systemui.HideBatteryIconForT
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.t.systemui.HideHDIconForT
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.t.systemui.HideMobileActivityIconForT
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.t.systemui.HideMobileTypeIconForT
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.t.systemui.HideNetworkSpeedSplitterForT
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.t.systemui.HideSimIconForT
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.t.systemui.HideStatusBarIconForT
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.t.systemui.HideStatusBarNetworkSpeedSecondForT
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.t.systemui.HideWifiActivityIconForT
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.t.systemui.LockScreenClockDisplaySecondsForT
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.t.systemui.LockScreenCurrentForT
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.t.systemui.LockScreenDoubleTapToSleepForT
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.t.systemui.MaximumNumberOfNotificationIconsForT
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.t.systemui.NewNotificationWeatherForT
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.t.systemui.NotificationWeatherForT
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.t.systemui.OldNotificationWeatherForT
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.t.systemui.OldQSCustomForT
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.t.systemui.RemoveLockScreenCameraForT
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.t.systemui.RemoveTheLeftSideOfTheLockScreenForT
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.t.systemui.ShowWifiStandardForT
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.t.systemui.StatusBarBigMobileTypeIconForT
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.t.systemui.StatusBarDoubleTapToSleepForT
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.t.systemui.StatusBarLayoutForT
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.t.systemui.StatusBarNetworkSpeedRefreshSpeedForT
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.t.systemui.StatusBarTimeCustomizationForT
|
||||||
|
import com.lt2333.simplicitytools.hooks.rules.t.systemui.WaveChargeForT
|
||||||
import com.lt2333.simplicitytools.utils.xposed.base.AppRegister
|
import com.lt2333.simplicitytools.utils.xposed.base.AppRegister
|
||||||
import de.robv.android.xposed.callbacks.XC_LoadPackage
|
import de.robv.android.xposed.callbacks.XC_LoadPackage
|
||||||
|
|
||||||
object SystemUI: AppRegister() {
|
object SystemUI : AppRegister() {
|
||||||
override val packageName: String = "com.android.systemui"
|
override val packageName: String = "com.android.systemui"
|
||||||
|
|
||||||
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
|
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
|
||||||
when (Build.VERSION.SDK_INT) {
|
when (Build.VERSION.SDK_INT) {
|
||||||
Build.VERSION_CODES.TIRAMISU -> {
|
Build.VERSION_CODES.TIRAMISU -> {
|
||||||
autoInitHooks(lpparam,
|
autoInitHooks(
|
||||||
HideStatusBarIconForS, //隐藏状态栏图标
|
lpparam,
|
||||||
HideBatteryIconForS, //隐藏电池
|
HideStatusBarIconForT, //隐藏状态栏图标
|
||||||
HideHDIconForS, //隐藏HD图标
|
HideBatteryIconForT, //隐藏电池
|
||||||
HideSimIconForS, //隐藏SIM卡图标
|
HideHDIconForT, //隐藏HD图标
|
||||||
HideMobileActivityIconForS, //隐藏移动箭头图标
|
HideSimIconForT, //隐藏SIM卡图标
|
||||||
HideMobileTypeIconForS, //隐藏移动类型图标
|
HideMobileActivityIconForT, //隐藏移动箭头图标
|
||||||
HideStatusBarNetworkSpeedSecondForS, //隐藏状态栏网速/s
|
HideMobileTypeIconForT, //隐藏移动类型图标
|
||||||
HideWifiActivityIconForS, //隐藏WIFI活动箭头图标
|
HideStatusBarNetworkSpeedSecondForT, //隐藏状态栏网速/s
|
||||||
MaximumNumberOfNotificationIconsForS, //通知图标上限
|
HideWifiActivityIconForT, //隐藏WIFI活动箭头图标
|
||||||
StatusBarNetworkSpeedRefreshSpeedForS, //状态栏网速秒刷新
|
MaximumNumberOfNotificationIconsForT, //通知图标上限
|
||||||
StatusBarTimeCustomizationForS, //状态栏时钟自定义
|
StatusBarNetworkSpeedRefreshSpeedForT, //状态栏网速秒刷新
|
||||||
RemoveTheLeftSideOfTheLockScreenForS, //移除锁屏负一屏功能
|
StatusBarTimeCustomizationForT, //状态栏时钟自定义
|
||||||
RemoveLockScreenCameraForS, //移除锁屏相机功能
|
RemoveTheLeftSideOfTheLockScreenForT, //移除锁屏负一屏功能
|
||||||
NotificationWeatherForS, //通知面板天气
|
RemoveLockScreenCameraForT, //移除锁屏相机功能
|
||||||
NewNotificationWeatherForS, // 新控制中心天气
|
NotificationWeatherForT, //通知面板天气
|
||||||
OldNotificationWeatherForS,
|
NewNotificationWeatherForT, // 新控制中心天气
|
||||||
ControlCenterWeatherForS, //控制中心天气
|
OldNotificationWeatherForT,
|
||||||
//StatusBarCurrent, //TODO:状态栏电流
|
ControlCenterWeatherForT, //控制中心天气
|
||||||
StatusBarLayoutForS, //状态栏布局
|
StatusBarLayoutForT, //状态栏布局
|
||||||
HideNetworkSpeedSplitterForS, //隐藏时钟与实时网速之间的分隔符
|
HideNetworkSpeedSplitterForT, //隐藏时钟与实时网速之间的分隔符
|
||||||
WaveChargeForS, //Alpha充电动画
|
WaveChargeForT, //Alpha充电动画
|
||||||
LockScreenCurrentForS, //锁屏电流
|
LockScreenCurrentForT, //锁屏电流
|
||||||
LockScreenDoubleTapToSleepForS, //锁屏下双击锁屏
|
LockScreenDoubleTapToSleepForT, //锁屏下双击锁屏
|
||||||
StatusBarDoubleTapToSleepForS, //双击状态栏锁屏
|
StatusBarDoubleTapToSleepForT, //双击状态栏锁屏
|
||||||
OldQSCustomForS, //旧版快速设置自定义
|
OldQSCustomForT, //旧版快速设置自定义
|
||||||
DoubleLineNetworkSpeedForS, //双排网速
|
DoubleLineNetworkSpeedForT, //双排网速
|
||||||
StatusBarBigMobileTypeIconForS, //大移动类型
|
StatusBarBigMobileTypeIconForT, //大移动类型
|
||||||
BatteryPercentageForS, //电量百分比
|
BatteryPercentageForT, //电量百分比
|
||||||
CustomMobileTypeTextForS, //自定义移动类型文本
|
CustomMobileTypeTextForT, //自定义移动类型文本
|
||||||
CanNotificationSlideForS, //允许下滑通知打开小窗
|
CanNotificationSlideForT, //允许下滑通知打开小窗
|
||||||
LockScreenClockDisplaySecondsForS, // 锁屏时钟显示秒
|
LockScreenClockDisplaySecondsForT, // 锁屏时钟显示秒
|
||||||
ShowWifiStandardForS, // 显示 WIFI 角标
|
ShowWifiStandardForT, // 显示 WIFI 角标
|
||||||
NoPasswordHookForS, // 显示 WIFI 角标
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
Build.VERSION_CODES.S -> {
|
Build.VERSION_CODES.S -> {
|
||||||
autoInitHooks(lpparam,
|
autoInitHooks(
|
||||||
|
lpparam,
|
||||||
HideStatusBarIconForS, //隐藏状态栏图标
|
HideStatusBarIconForS, //隐藏状态栏图标
|
||||||
HideBatteryIconForS, //隐藏电池
|
HideBatteryIconForS, //隐藏电池
|
||||||
HideHDIconForS, //隐藏HD图标
|
HideHDIconForS, //隐藏HD图标
|
||||||
@@ -66,7 +128,6 @@ object SystemUI: AppRegister() {
|
|||||||
NewNotificationWeatherForS, // 新控制中心天气
|
NewNotificationWeatherForS, // 新控制中心天气
|
||||||
OldNotificationWeatherForS,
|
OldNotificationWeatherForS,
|
||||||
ControlCenterWeatherForS, //控制中心天气
|
ControlCenterWeatherForS, //控制中心天气
|
||||||
//StatusBarCurrent, //TODO:状态栏电流
|
|
||||||
StatusBarLayoutForS, //状态栏布局
|
StatusBarLayoutForS, //状态栏布局
|
||||||
HideNetworkSpeedSplitterForS, //隐藏时钟与实时网速之间的分隔符
|
HideNetworkSpeedSplitterForS, //隐藏时钟与实时网速之间的分隔符
|
||||||
WaveChargeForS, //Alpha充电动画
|
WaveChargeForS, //Alpha充电动画
|
||||||
@@ -81,7 +142,6 @@ object SystemUI: AppRegister() {
|
|||||||
CanNotificationSlideForS, //允许下滑通知打开小窗
|
CanNotificationSlideForS, //允许下滑通知打开小窗
|
||||||
LockScreenClockDisplaySecondsForS, // 锁屏时钟显示秒
|
LockScreenClockDisplaySecondsForS, // 锁屏时钟显示秒
|
||||||
ShowWifiStandardForS, // 显示 WIFI 角标
|
ShowWifiStandardForS, // 显示 WIFI 角标
|
||||||
NoPasswordHookForS, // 显示 WIFI 角标
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,23 +1,26 @@
|
|||||||
package com.lt2333.simplicitytools.hooks.apps
|
package com.lt2333.simplicitytools.hooks.apps
|
||||||
|
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import com.lt2333.simplicitytools.hooks.rules.s.thememanager.RemoveAdsForS
|
import com.lt2333.simplicitytools.hooks.rules.all.thememanager.RemoveAdsForAll
|
||||||
import com.lt2333.simplicitytools.utils.xposed.base.AppRegister
|
import com.lt2333.simplicitytools.utils.xposed.base.AppRegister
|
||||||
import de.robv.android.xposed.callbacks.XC_LoadPackage
|
import de.robv.android.xposed.callbacks.XC_LoadPackage
|
||||||
|
|
||||||
object ThemeManager: AppRegister() {
|
object ThemeManager : AppRegister() {
|
||||||
override val packageName: String = "com.android.thememanager"
|
override val packageName: String = "com.android.thememanager"
|
||||||
|
|
||||||
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
|
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
|
||||||
when (Build.VERSION.SDK_INT) {
|
when (Build.VERSION.SDK_INT) {
|
||||||
Build.VERSION_CODES.TIRAMISU -> {
|
Build.VERSION_CODES.TIRAMISU -> {
|
||||||
autoInitHooks(lpparam,
|
autoInitHooks(
|
||||||
RemoveAdsForS, //移除主题壁纸的广告
|
lpparam,
|
||||||
|
RemoveAdsForAll, //移除主题壁纸的广告
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
Build.VERSION_CODES.S -> {
|
Build.VERSION_CODES.S -> {
|
||||||
autoInitHooks(lpparam,
|
autoInitHooks(
|
||||||
RemoveAdsForS, //移除主题壁纸的广告
|
lpparam,
|
||||||
|
RemoveAdsForAll, //移除主题壁纸的广告
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,12 +1,13 @@
|
|||||||
package com.lt2333.simplicitytools.hooks.apps
|
package com.lt2333.simplicitytools.hooks.apps
|
||||||
|
|
||||||
import com.github.kyuubiran.ezxhelper.utils.findMethod
|
import com.github.kyuubiran.ezxhelper.utils.findMethod
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.hookBefore
|
||||||
import com.github.kyuubiran.ezxhelper.utils.hookReturnConstant
|
import com.github.kyuubiran.ezxhelper.utils.hookReturnConstant
|
||||||
import com.github.kyuubiran.ezxhelper.utils.loadClassOrNull
|
import com.github.kyuubiran.ezxhelper.utils.loadClassOrNull
|
||||||
import com.github.kyuubiran.ezxhelper.utils.hookBefore
|
|
||||||
import com.lt2333.simplicitytools.utils.hasEnable
|
import com.lt2333.simplicitytools.utils.hasEnable
|
||||||
import com.lt2333.simplicitytools.utils.xposed.base.AppRegister
|
import com.lt2333.simplicitytools.utils.xposed.base.AppRegister
|
||||||
import de.robv.android.xposed.callbacks.XC_LoadPackage
|
import de.robv.android.xposed.callbacks.XC_LoadPackage
|
||||||
|
|
||||||
object Updater : AppRegister() {
|
object Updater : AppRegister() {
|
||||||
override val packageName: String = "com.android.updater"
|
override val packageName: String = "com.android.updater"
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +0,0 @@
|
|||||||
package com.lt2333.simplicitytools.hooks.rules.all;
|
|
||||||
|
|
||||||
public class CorePatchForSv2 extends CorePatchForS{
|
|
||||||
}
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.lt2333.simplicitytools.hooks.rules.s.android
|
package com.lt2333.simplicitytools.hooks.rules.all.android
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import com.github.kyuubiran.ezxhelper.utils.findMethod
|
import com.github.kyuubiran.ezxhelper.utils.findMethod
|
||||||
@@ -6,7 +6,7 @@ import com.github.kyuubiran.ezxhelper.utils.hookReturnConstant
|
|||||||
import com.lt2333.simplicitytools.utils.hasEnable
|
import com.lt2333.simplicitytools.utils.hasEnable
|
||||||
import com.lt2333.simplicitytools.utils.xposed.base.HookRegister
|
import com.lt2333.simplicitytools.utils.xposed.base.HookRegister
|
||||||
|
|
||||||
object AllowUntrustedTouchesForS : HookRegister() {
|
object AllowUntrustedTouchesForAll : HookRegister() {
|
||||||
override fun init() = hasEnable("allow_untrusted_touches") {
|
override fun init() = hasEnable("allow_untrusted_touches") {
|
||||||
findMethod("android.hardware.input.InputManager") {
|
findMethod("android.hardware.input.InputManager") {
|
||||||
name == "getBlockUntrustedTouchesMode" && parameterTypes[0] == Context::class.java
|
name == "getBlockUntrustedTouchesMode" && parameterTypes[0] == Context::class.java
|
||||||
@@ -1,11 +1,11 @@
|
|||||||
package com.lt2333.simplicitytools.hooks.rules.s.android
|
package com.lt2333.simplicitytools.hooks.rules.all.android
|
||||||
|
|
||||||
import com.github.kyuubiran.ezxhelper.utils.findMethod
|
import com.github.kyuubiran.ezxhelper.utils.findMethod
|
||||||
import com.github.kyuubiran.ezxhelper.utils.hookBefore
|
import com.github.kyuubiran.ezxhelper.utils.hookBefore
|
||||||
import com.lt2333.simplicitytools.utils.hasEnable
|
import com.lt2333.simplicitytools.utils.hasEnable
|
||||||
import com.lt2333.simplicitytools.utils.xposed.base.HookRegister
|
import com.lt2333.simplicitytools.utils.xposed.base.HookRegister
|
||||||
|
|
||||||
object DeleteOnPostNotificationForS : HookRegister() {
|
object DeleteOnPostNotificationForAll : HookRegister() {
|
||||||
override fun init() {
|
override fun init() {
|
||||||
findMethod("com.android.server.wm.AlertWindowNotification") {
|
findMethod("com.android.server.wm.AlertWindowNotification") {
|
||||||
name == "onPostNotification"
|
name == "onPostNotification"
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
package com.lt2333.simplicitytools.hooks.rules.all.android
|
||||||
|
|
||||||
|
import android.os.Build
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.findMethod
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.hookAllConstructorBefore
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.hookBefore
|
||||||
|
import com.lt2333.simplicitytools.utils.hasEnable
|
||||||
|
import com.lt2333.simplicitytools.utils.xposed.base.HookRegister
|
||||||
|
|
||||||
|
object DisableFlagSecureForAll : HookRegister() {
|
||||||
|
override fun init() {
|
||||||
|
findMethod("com.android.server.wm.WindowState") {
|
||||||
|
name == "isSecureLocked"
|
||||||
|
}.hookBefore {
|
||||||
|
hasEnable("disable_flag_secure") {
|
||||||
|
it.result = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Build.VERSION.SDK_INT == Build.VERSION_CODES.TIRAMISU) {
|
||||||
|
findMethod("com.android.server.wm.WindowSurfaceController") {
|
||||||
|
name == "setSecure"
|
||||||
|
}.hookBefore {
|
||||||
|
it.args[0] = false
|
||||||
|
}
|
||||||
|
hookAllConstructorBefore("com.android.server.wm.WindowSurfaceController") {
|
||||||
|
var flags = it.args[2] as Int
|
||||||
|
val secureFlag = 128
|
||||||
|
flags = flags and secureFlag.inv()
|
||||||
|
it.args[2] = flags
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,11 +1,11 @@
|
|||||||
package com.lt2333.simplicitytools.hooks.rules.s.cast
|
package com.lt2333.simplicitytools.hooks.rules.all.cast
|
||||||
|
|
||||||
import com.github.kyuubiran.ezxhelper.utils.findMethod
|
import com.github.kyuubiran.ezxhelper.utils.findMethod
|
||||||
import com.github.kyuubiran.ezxhelper.utils.hookAfter
|
import com.github.kyuubiran.ezxhelper.utils.hookAfter
|
||||||
import com.lt2333.simplicitytools.utils.hasEnable
|
import com.lt2333.simplicitytools.utils.hasEnable
|
||||||
import com.lt2333.simplicitytools.utils.xposed.base.HookRegister
|
import com.lt2333.simplicitytools.utils.xposed.base.HookRegister
|
||||||
|
|
||||||
object ForceSupportSendAppForS : HookRegister() {
|
object ForceSupportSendAppForAll : HookRegister() {
|
||||||
|
|
||||||
override fun init() = hasEnable("force_support_send_app") {
|
override fun init() = hasEnable("force_support_send_app") {
|
||||||
findMethod("com.xiaomi.mirror.synergy.MiuiSynergySdk") {
|
findMethod("com.xiaomi.mirror.synergy.MiuiSynergySdk") {
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.lt2333.simplicitytools.hooks.rules.all;
|
package com.lt2333.simplicitytools.hooks.rules.all.corepatch;
|
||||||
|
|
||||||
|
|
||||||
import android.content.pm.ApplicationInfo;
|
import android.content.pm.ApplicationInfo;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.lt2333.simplicitytools.hooks.rules.all;
|
package com.lt2333.simplicitytools.hooks.rules.all.corepatch;
|
||||||
|
|
||||||
|
|
||||||
import android.app.AndroidAppHelper;
|
import android.app.AndroidAppHelper;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.lt2333.simplicitytools.hooks.rules.all;
|
package com.lt2333.simplicitytools.hooks.rules.all.corepatch;
|
||||||
|
|
||||||
import java.lang.reflect.InvocationTargetException;
|
import java.lang.reflect.InvocationTargetException;
|
||||||
|
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
package com.lt2333.simplicitytools.hooks.rules.all.corepatch;
|
||||||
|
|
||||||
|
public class CorePatchForSv2 extends CorePatchForS{
|
||||||
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.lt2333.simplicitytools.hooks.rules.all;
|
package com.lt2333.simplicitytools.hooks.rules.all.corepatch;
|
||||||
|
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.lt2333.simplicitytools.hooks.rules.all;
|
package com.lt2333.simplicitytools.hooks.rules.all.corepatch;
|
||||||
|
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.lt2333.simplicitytools.hooks.rules.all;
|
package com.lt2333.simplicitytools.hooks.rules.all.corepatch;
|
||||||
|
|
||||||
import de.robv.android.xposed.XC_MethodHook;
|
import de.robv.android.xposed.XC_MethodHook;
|
||||||
import de.robv.android.xposed.XSharedPreferences;
|
import de.robv.android.xposed.XSharedPreferences;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.lt2333.simplicitytools.hooks.rules.all;
|
package com.lt2333.simplicitytools.hooks.rules.all.corepatch;
|
||||||
|
|
||||||
import com.lt2333.simplicitytools.BuildConfig;
|
import com.lt2333.simplicitytools.BuildConfig;
|
||||||
|
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
package com.lt2333.simplicitytools.hooks.rules.all.miuihome
|
||||||
|
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.findMethod
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.hookBefore
|
||||||
|
import com.lt2333.simplicitytools.utils.hasEnable
|
||||||
|
import com.lt2333.simplicitytools.utils.xposed.base.HookRegister
|
||||||
|
|
||||||
|
object AlwaysShowStatusBarClockForAll : HookRegister() {
|
||||||
|
override fun init() {
|
||||||
|
try {
|
||||||
|
findMethod("com.miui.home.launcher.Workspace") {
|
||||||
|
name == "isScreenHasClockGadget"
|
||||||
|
}
|
||||||
|
} catch (e: Exception) {
|
||||||
|
findMethod("com.miui.home.launcher.Workspace") {
|
||||||
|
name == "isScreenHasClockWidget"
|
||||||
|
}
|
||||||
|
} catch (e: Exception) {
|
||||||
|
findMethod("com.miui.home.launcher.Workspace") {
|
||||||
|
name == "isClockWidget"
|
||||||
|
}
|
||||||
|
}.hookBefore {
|
||||||
|
hasEnable("home_time") {
|
||||||
|
it.result = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
package com.lt2333.simplicitytools.hooks.rules.all.miuihome
|
||||||
|
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.findMethod
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.hookBefore
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.putObject
|
||||||
|
import com.lt2333.simplicitytools.utils.hasEnable
|
||||||
|
import com.lt2333.simplicitytools.utils.xposed.base.HookRegister
|
||||||
|
|
||||||
|
object DisableRecentViewWallpaperDarkeningForAll : HookRegister() {
|
||||||
|
override fun init() = hasEnable("miuihome_recentwiew_wallpaper_darkening") {
|
||||||
|
findMethod("com.miui.home.recents.DimLayer") {
|
||||||
|
name == "dim" && parameterCount == 3
|
||||||
|
}.hookBefore {
|
||||||
|
it.args[0] = 0.0f
|
||||||
|
it.thisObject.putObject("mCurrentAlpha", 0.0f)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.lt2333.simplicitytools.hooks.rules.s.miuihome
|
package com.lt2333.simplicitytools.hooks.rules.all.miuihome
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.os.SystemClock
|
import android.os.SystemClock
|
||||||
@@ -6,7 +6,7 @@ import android.view.MotionEvent
|
|||||||
import android.view.ViewConfiguration
|
import android.view.ViewConfiguration
|
||||||
import kotlin.math.abs
|
import kotlin.math.abs
|
||||||
|
|
||||||
class DoubleTapControllerForS internal constructor(mContext: Context) {
|
class DoubleTapControllerForAll internal constructor(mContext: Context) {
|
||||||
|
|
||||||
private val maxDuration: Long = 500
|
private val maxDuration: Long = 500
|
||||||
private var mActionDownRawX: Float = 0f
|
private var mActionDownRawX: Float = 0f
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.lt2333.simplicitytools.hooks.rules.s.miuihome
|
package com.lt2333.simplicitytools.hooks.rules.all.miuihome
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
@@ -8,14 +8,14 @@ import com.lt2333.simplicitytools.utils.hasEnable
|
|||||||
import com.lt2333.simplicitytools.utils.xposed.base.HookRegister
|
import com.lt2333.simplicitytools.utils.xposed.base.HookRegister
|
||||||
import de.robv.android.xposed.XposedHelpers
|
import de.robv.android.xposed.XposedHelpers
|
||||||
|
|
||||||
object DoubleTapToSleepForS : HookRegister() {
|
object DoubleTapToSleepForAll : HookRegister() {
|
||||||
|
|
||||||
override fun init() = hasEnable("double_tap_to_sleep") {
|
override fun init() = hasEnable("double_tap_to_sleep") {
|
||||||
hookAllConstructorAfter("com.miui.home.launcher.Workspace") {
|
hookAllConstructorAfter("com.miui.home.launcher.Workspace") {
|
||||||
var mDoubleTapControllerEx =
|
var mDoubleTapControllerEx =
|
||||||
XposedHelpers.getAdditionalInstanceField(it.thisObject, "mDoubleTapControllerEx")
|
XposedHelpers.getAdditionalInstanceField(it.thisObject, "mDoubleTapControllerEx")
|
||||||
if (mDoubleTapControllerEx != null) return@hookAllConstructorAfter
|
if (mDoubleTapControllerEx != null) return@hookAllConstructorAfter
|
||||||
mDoubleTapControllerEx = DoubleTapControllerForS((it.args[0] as Context))
|
mDoubleTapControllerEx = DoubleTapControllerForAll((it.args[0] as Context))
|
||||||
XposedHelpers.setAdditionalInstanceField(
|
XposedHelpers.setAdditionalInstanceField(
|
||||||
it.thisObject,
|
it.thisObject,
|
||||||
"mDoubleTapControllerEx",
|
"mDoubleTapControllerEx",
|
||||||
@@ -28,7 +28,7 @@ object DoubleTapToSleepForS : HookRegister() {
|
|||||||
val mDoubleTapControllerEx = XposedHelpers.getAdditionalInstanceField(
|
val mDoubleTapControllerEx = XposedHelpers.getAdditionalInstanceField(
|
||||||
it.thisObject,
|
it.thisObject,
|
||||||
"mDoubleTapControllerEx"
|
"mDoubleTapControllerEx"
|
||||||
) as DoubleTapControllerForS
|
) as DoubleTapControllerForAll
|
||||||
if (!mDoubleTapControllerEx.isDoubleTapEvent(it.args[0] as MotionEvent)) return@hookBefore
|
if (!mDoubleTapControllerEx.isDoubleTapEvent(it.args[0] as MotionEvent)) return@hookBefore
|
||||||
val mCurrentScreenIndex = it.thisObject.getObject("mCurrentScreenIndex") as Int
|
val mCurrentScreenIndex = it.thisObject.getObject("mCurrentScreenIndex") as Int
|
||||||
val cellLayout = it.thisObject.invokeMethodAuto("getCellLayout", mCurrentScreenIndex)
|
val cellLayout = it.thisObject.invokeMethodAuto("getCellLayout", mCurrentScreenIndex)
|
||||||
@@ -0,0 +1,46 @@
|
|||||||
|
package com.lt2333.simplicitytools.hooks.rules.all.miuihome
|
||||||
|
|
||||||
|
import android.animation.ObjectAnimator
|
||||||
|
import android.animation.TimeInterpolator
|
||||||
|
import android.view.MotionEvent
|
||||||
|
import android.view.View
|
||||||
|
import com.lt2333.simplicitytools.utils.*
|
||||||
|
import com.lt2333.simplicitytools.utils.xposed.base.HookRegister
|
||||||
|
import de.robv.android.xposed.XposedHelpers
|
||||||
|
|
||||||
|
|
||||||
|
object ModifyRecentViewRemoveCardAnimForAll : HookRegister() {
|
||||||
|
override fun init() = hasEnable("miuihome_recentview_remove_card_animation") {
|
||||||
|
"com.miui.home.recents.views.SwipeHelperForRecents".hookAfterMethod("onTouchEvent", MotionEvent::class.java) {
|
||||||
|
val mCurrView = it.thisObject.getObjectField("mCurrView") as View?
|
||||||
|
if (mCurrView != null) {
|
||||||
|
mCurrView.alpha = 1f
|
||||||
|
mCurrView.scaleX = 1f
|
||||||
|
mCurrView.scaleY = 1f
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
"com.miui.home.recents.TaskStackViewLayoutStyleHorizontal".replaceMethod("createScaleDismissAnimation", View::class.java, Float::class.java) {
|
||||||
|
val view = it.args[0] as View
|
||||||
|
val getScreenHeight = "com.miui.home.launcher.DeviceConfig".findClass().callStaticMethod("getScreenHeight") as Int
|
||||||
|
val ofFloat = ObjectAnimator.ofFloat(view, View.TRANSLATION_Y, view.translationY, -getScreenHeight * 1.1484375f)
|
||||||
|
val physicBasedInterpolator = XposedHelpers.newInstance("com.miui.home.launcher.anim.PhysicBasedInterpolator".findClass(), 0.9f, 0.78f)
|
||||||
|
ofFloat.interpolator = physicBasedInterpolator as TimeInterpolator
|
||||||
|
ofFloat.duration = 400
|
||||||
|
return@replaceMethod ofFloat
|
||||||
|
}
|
||||||
|
|
||||||
|
"com.miui.home.recents.views.VerticalSwipe".hookAfterMethod("calculate", Float::class.java) {
|
||||||
|
val f = it.args[0] as Float
|
||||||
|
val asScreenHeightWhenDismiss = "com.miui.home.recents.views.VerticalSwipe".findClass().callStaticMethod("getAsScreenHeightWhenDismiss") as Int
|
||||||
|
val f2 = f / asScreenHeightWhenDismiss
|
||||||
|
val mTaskViewHeight = it.thisObject.getObjectField("mTaskViewHeight") as Float
|
||||||
|
val mCurScale = it.thisObject.getObjectField("mCurScale") as Float
|
||||||
|
val f3: Float = mTaskViewHeight * mCurScale
|
||||||
|
val i = if (f2 > 0.0f) 1 else if (f2 == 0.0f) 0 else -1
|
||||||
|
val afterFrictionValue: Float = it.thisObject.callMethod("afterFrictionValue", f, asScreenHeightWhenDismiss) as Float
|
||||||
|
if (i < 0) it.thisObject.setObjectField("mCurTransY", (mTaskViewHeight / 2.0f + afterFrictionValue * 2) - (f3 / 2.0f))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
package com.lt2333.simplicitytools.hooks.rules.all.miuihome
|
||||||
|
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.findAllMethods
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.hookBefore
|
||||||
|
import com.lt2333.simplicitytools.utils.hasEnable
|
||||||
|
import com.lt2333.simplicitytools.utils.xposed.base.HookRegister
|
||||||
|
|
||||||
|
object RemoveSmallWindowRestrictionForMiuiHomeForAll : HookRegister() {
|
||||||
|
override fun init() {
|
||||||
|
|
||||||
|
findAllMethods("com.miui.home.launcher.RecentsAndFSGestureUtils") {
|
||||||
|
name == "canTaskEnterSmallWindow"
|
||||||
|
}.hookBefore {
|
||||||
|
hasEnable("android_remove_small_window_restriction") {
|
||||||
|
it.result = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
findAllMethods("com.miui.home.launcher.RecentsAndFSGestureUtils") {
|
||||||
|
name == "canTaskEnterMiniSmallWindow"
|
||||||
|
}.hookBefore {
|
||||||
|
hasEnable("android_remove_small_window_restriction") {
|
||||||
|
it.result = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,85 @@
|
|||||||
|
package com.lt2333.simplicitytools.hooks.rules.all.miuihome
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint
|
||||||
|
import android.content.Context
|
||||||
|
import android.text.TextUtils
|
||||||
|
import android.view.View
|
||||||
|
import android.view.ViewGroup
|
||||||
|
import android.widget.TextView
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.Log
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.args
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.findMethod
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.getObject
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.hookAfter
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.invokeMethod
|
||||||
|
import com.lt2333.simplicitytools.utils.*
|
||||||
|
import com.lt2333.simplicitytools.utils.xposed.base.HookRegister
|
||||||
|
|
||||||
|
object ScrollIconNameForAll : HookRegister() {
|
||||||
|
@SuppressLint("DiscouragedApi")
|
||||||
|
override fun init() = hasEnable("miuihome_scroll_icon_name") {
|
||||||
|
val launcherClass = "com.miui.home.launcher.Launcher".findClass()
|
||||||
|
val shortcutInfoClass = "com.miui.home.launcher.ShortcutInfo".findClass()
|
||||||
|
|
||||||
|
try {
|
||||||
|
"com.miui.home.launcher.ItemIcon".hookAfterMethod(
|
||||||
|
"onFinishInflate"
|
||||||
|
) {
|
||||||
|
val mTitle = it.thisObject.getObjectField("mTitle") as TextView
|
||||||
|
mTitleScrolling(mTitle)
|
||||||
|
}
|
||||||
|
"com.miui.home.launcher.maml.MaMlWidgetView".hookAfterMethod(
|
||||||
|
"onFinishInflate"
|
||||||
|
) {
|
||||||
|
val mTitle = it.thisObject.getObjectField("mTitleTextView") as TextView
|
||||||
|
mTitleScrolling(mTitle)
|
||||||
|
}
|
||||||
|
"com.miui.home.launcher.LauncherMtzGadgetView".hookAfterMethod(
|
||||||
|
"onFinishInflate"
|
||||||
|
) {
|
||||||
|
val mTitle = it.thisObject.getObjectField("mTitleTextView") as TextView
|
||||||
|
mTitleScrolling(mTitle)
|
||||||
|
}
|
||||||
|
"com.miui.home.launcher.LauncherWidgetView".hookAfterMethod(
|
||||||
|
"onFinishInflate"
|
||||||
|
) {
|
||||||
|
val mTitle = it.thisObject.getObjectField("mTitleTextView") as TextView
|
||||||
|
mTitleScrolling(mTitle)
|
||||||
|
}
|
||||||
|
"com.miui.home.launcher.ShortcutIcon".hookAfterMethod(
|
||||||
|
"fromXml", Int::class.javaPrimitiveType, launcherClass, ViewGroup::class.java, shortcutInfoClass
|
||||||
|
) {
|
||||||
|
val buddyIconView = it.args[3].callMethod("getBuddyIconView", it.args[2]) as View
|
||||||
|
val mTitle = buddyIconView.getObjectField("mTitle") as TextView
|
||||||
|
mTitleScrolling(mTitle)
|
||||||
|
}
|
||||||
|
"com.miui.home.launcher.ShortcutIcon".hookAfterMethod(
|
||||||
|
"createShortcutIcon", Int::class.javaPrimitiveType, launcherClass, ViewGroup::class.java
|
||||||
|
) {
|
||||||
|
val buddyIcon = it.result as View
|
||||||
|
val mTitle = buddyIcon.getObjectField("mTitle") as TextView
|
||||||
|
mTitleScrolling(mTitle)
|
||||||
|
}
|
||||||
|
"com.miui.home.launcher.common.Utilities".hookAfterMethod(
|
||||||
|
"adaptTitleStyleToWallpaper", Context::class.java, TextView::class.java, Int::class.javaPrimitiveType, Int::class.javaPrimitiveType
|
||||||
|
) {
|
||||||
|
val mTitle = it.args[1] as TextView
|
||||||
|
if (mTitle.id == mTitle.resources.getIdentifier("icon_title", "id", "com.miui.home")) {
|
||||||
|
mTitleScrolling(mTitle)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (e: Throwable) {
|
||||||
|
Log.ex(e)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun mTitleScrolling(mTitle: TextView) {
|
||||||
|
mTitle.ellipsize = TextUtils.TruncateAt.MARQUEE
|
||||||
|
mTitle.isHorizontalFadingEdgeEnabled = true
|
||||||
|
mTitle.setSingleLine()
|
||||||
|
mTitle.marqueeRepeatLimit = -1
|
||||||
|
mTitle.isSelected = true
|
||||||
|
mTitle.setHorizontallyScrolling(true)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,89 @@
|
|||||||
|
package com.lt2333.simplicitytools.hooks.rules.all.miuihome
|
||||||
|
|
||||||
|
import android.app.AndroidAppHelper
|
||||||
|
import android.content.ComponentName
|
||||||
|
import android.content.Intent
|
||||||
|
import android.content.res.Configuration
|
||||||
|
import android.os.Bundle
|
||||||
|
import android.view.View
|
||||||
|
import com.github.kyuubiran.ezxhelper.init.InitFields.moduleRes
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.args
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.findAllMethods
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.findMethod
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.getStaticObject
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.hookAfter
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.hookBefore
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.invokeMethod
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.invokeStaticMethod
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.loadClass
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.putStaticObject
|
||||||
|
import com.lt2333.simplicitytools.R
|
||||||
|
import com.lt2333.simplicitytools.utils.*
|
||||||
|
import com.lt2333.simplicitytools.utils.xposed.base.HookRegister
|
||||||
|
import de.robv.android.xposed.XposedHelpers
|
||||||
|
|
||||||
|
object ShortcutAddSmallWindowForAll : HookRegister() {
|
||||||
|
override fun init() = hasEnable("miuihome_shortcut_add_small_window") {
|
||||||
|
val mViewDarkModeHelper = ("com.miui.home.launcher.util.ViewDarkModeHelper").findClass()
|
||||||
|
val mSystemShortcutMenu = ("com.miui.home.launcher.shortcuts.SystemShortcutMenu").findClass()
|
||||||
|
val mSystemShortcutMenuItem = ("com.miui.home.launcher.shortcuts.SystemShortcutMenuItem").findClass()
|
||||||
|
val mAppShortcutMenu = ("com.miui.home.launcher.shortcuts.AppShortcutMenu").findClass()
|
||||||
|
val mShortcutMenuItem = ("com.miui.home.launcher.shortcuts.ShortcutMenuItem").findClass()
|
||||||
|
val mAppDetailsShortcutMenuItem = ("com.miui.home.launcher.shortcuts.SystemShortcutMenuItem\$AppDetailsShortcutMenuItem").findClass()
|
||||||
|
val mActivityUtilsCompat = ("com.miui.launcher.utils.ActivityUtilsCompat").findClass()
|
||||||
|
|
||||||
|
mViewDarkModeHelper.hookAfterAllMethods("onConfigurationChanged") {
|
||||||
|
mSystemShortcutMenuItem.callStaticMethod("createAllSystemShortcutMenuItems")
|
||||||
|
}
|
||||||
|
|
||||||
|
mShortcutMenuItem.hookAfterAllMethods("getShortTitle") {
|
||||||
|
if (it.result == "应用信息") {
|
||||||
|
it.result = "信息"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mAppDetailsShortcutMenuItem.hookBeforeMethod("lambda\$getOnClickListener$0", mAppDetailsShortcutMenuItem, View::class.java) {
|
||||||
|
val obj = it.args[0]
|
||||||
|
val view: View = it.args[1] as View
|
||||||
|
val mShortTitle = obj.callMethod("getShortTitle") as CharSequence
|
||||||
|
if (mShortTitle == moduleRes.getString(R.string.miuihome_shortcut_add_small_window_title)) {
|
||||||
|
it.result = null
|
||||||
|
val intent = Intent()
|
||||||
|
val mComponentName = obj.callMethod("getComponentName") as ComponentName
|
||||||
|
intent.action = "android.intent.action.MAIN"
|
||||||
|
intent.addCategory("android.intent.category.LAUNCHER")
|
||||||
|
intent.component = mComponentName
|
||||||
|
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||||
|
val callStaticMethod = mActivityUtilsCompat.callStaticMethod("makeFreeformActivityOptions", view.context, mComponentName.packageName)
|
||||||
|
if (callStaticMethod != null) {
|
||||||
|
view.context.startActivity(intent, callStaticMethod.callMethod("toBundle") as Bundle)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mSystemShortcutMenu.hookAfterAllMethods("getMaxShortcutItemCount") {
|
||||||
|
it.result = 5
|
||||||
|
}
|
||||||
|
|
||||||
|
mAppShortcutMenu.hookAfterAllMethods("getMaxShortcutItemCount") {
|
||||||
|
it.result = 5
|
||||||
|
}
|
||||||
|
|
||||||
|
mSystemShortcutMenuItem.hookAfterAllMethods("createAllSystemShortcutMenuItems") {
|
||||||
|
val isDarkMode =
|
||||||
|
AndroidAppHelper.currentApplication().applicationContext.resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK == Configuration.UI_MODE_NIGHT_YES
|
||||||
|
val mAllSystemShortcutMenuItems = mSystemShortcutMenuItem.getStaticObjectField("sAllSystemShortcutMenuItems") as Collection<Any>
|
||||||
|
val mSmallWindowInstance = XposedHelpers.newInstance(mAppDetailsShortcutMenuItem)
|
||||||
|
mSmallWindowInstance.callMethod("setShortTitle", moduleRes.getString(R.string.miuihome_shortcut_add_small_window_title))
|
||||||
|
mSmallWindowInstance.callMethod(
|
||||||
|
"setIconDrawable",
|
||||||
|
if (isDarkMode) moduleRes.getDrawable(R.drawable.ic_small_window_dark) else moduleRes.getDrawable(R.drawable.ic_small_window_light)
|
||||||
|
)
|
||||||
|
val sAllSystemShortcutMenuItems = ArrayList<Any>()
|
||||||
|
sAllSystemShortcutMenuItems.add(mSmallWindowInstance)
|
||||||
|
sAllSystemShortcutMenuItems.addAll(mAllSystemShortcutMenuItems)
|
||||||
|
mSystemShortcutMenuItem.setStaticObjectField("sAllSystemShortcutMenuItems", sAllSystemShortcutMenuItems)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,11 +1,11 @@
|
|||||||
package com.lt2333.simplicitytools.hooks.rules.s.powerkeeper
|
package com.lt2333.simplicitytools.hooks.rules.all.powerkeeper
|
||||||
|
|
||||||
import com.github.kyuubiran.ezxhelper.utils.findMethod
|
import com.github.kyuubiran.ezxhelper.utils.findMethod
|
||||||
import com.github.kyuubiran.ezxhelper.utils.hookBefore
|
import com.github.kyuubiran.ezxhelper.utils.hookBefore
|
||||||
import com.lt2333.simplicitytools.utils.hasEnable
|
import com.lt2333.simplicitytools.utils.hasEnable
|
||||||
import com.lt2333.simplicitytools.utils.xposed.base.HookRegister
|
import com.lt2333.simplicitytools.utils.xposed.base.HookRegister
|
||||||
|
|
||||||
object LockMaxFpsForS : HookRegister() {
|
object LockMaxFpsForAll: HookRegister() {
|
||||||
|
|
||||||
override fun init() {
|
override fun init() {
|
||||||
findMethod("com.miui.powerkeeper.statemachine.DisplayFrameSetting") {
|
findMethod("com.miui.powerkeeper.statemachine.DisplayFrameSetting") {
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.lt2333.simplicitytools.hooks.rules.s.reardisplay
|
package com.lt2333.simplicitytools.hooks.rules.all.reardisplay
|
||||||
|
|
||||||
import android.graphics.Typeface
|
import android.graphics.Typeface
|
||||||
import android.util.TypedValue
|
import android.util.TypedValue
|
||||||
@@ -15,7 +15,7 @@ import com.lt2333.simplicitytools.utils.hasEnable
|
|||||||
import com.lt2333.simplicitytools.utils.xposed.base.HookRegister
|
import com.lt2333.simplicitytools.utils.xposed.base.HookRegister
|
||||||
import com.lt2333.simplicitytools.views.WeatherView
|
import com.lt2333.simplicitytools.views.WeatherView
|
||||||
|
|
||||||
object RearDisplayWeatherForS : HookRegister() {
|
object RearDisplayWeatherForAll : HookRegister() {
|
||||||
|
|
||||||
override fun init() = hasEnable("rear_show_weather") {
|
override fun init() = hasEnable("rear_show_weather") {
|
||||||
findMethod("com.xiaomi.misubscreenui.light.aod.view.VerticalClockView") {
|
findMethod("com.xiaomi.misubscreenui.light.aod.view.VerticalClockView") {
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.lt2333.simplicitytools.hooks.rules.s.securitycenter
|
package com.lt2333.simplicitytools.hooks.rules.all.securitycenter
|
||||||
|
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import com.github.kyuubiran.ezxhelper.utils.findMethod
|
import com.github.kyuubiran.ezxhelper.utils.findMethod
|
||||||
@@ -6,7 +6,7 @@ import com.github.kyuubiran.ezxhelper.utils.hookBefore
|
|||||||
import com.lt2333.simplicitytools.utils.hasEnable
|
import com.lt2333.simplicitytools.utils.hasEnable
|
||||||
import com.lt2333.simplicitytools.utils.xposed.base.HookRegister
|
import com.lt2333.simplicitytools.utils.xposed.base.HookRegister
|
||||||
|
|
||||||
object LockOneHundredForS : HookRegister() {
|
object LockOneHundredForAll : HookRegister() {
|
||||||
|
|
||||||
override fun init() {
|
override fun init() {
|
||||||
//防止点击重新检测
|
//防止点击重新检测
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
package com.lt2333.simplicitytools.hooks.rules.all.securitycenter
|
||||||
|
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.*
|
||||||
|
import com.lt2333.simplicitytools.utils.XSPUtils
|
||||||
|
import com.lt2333.simplicitytools.utils.xposed.base.HookRegister
|
||||||
|
import de.robv.android.xposed.XC_MethodHook
|
||||||
|
import de.robv.android.xposed.XposedBridge
|
||||||
|
import de.robv.android.xposed.XposedHelpers
|
||||||
|
|
||||||
|
object RemoveMacroBlacklistForAll : HookRegister() {
|
||||||
|
|
||||||
|
override fun init() {
|
||||||
|
if (XSPUtils.getBoolean("remove_macro_blacklist", false)) {
|
||||||
|
var letter = 'a'
|
||||||
|
for (i in 0..25) {
|
||||||
|
val classIfExists = XposedHelpers.findClassIfExists(
|
||||||
|
"com.miui.gamebooster.utils.$letter" + "0", getDefaultClassLoader()
|
||||||
|
) ?: continue
|
||||||
|
if (classIfExists.declaredMethods.size in 10..15 && classIfExists.fields.isEmpty() && classIfExists.declaredFields.size >= 2) {
|
||||||
|
XposedBridge.log("Woobox: RemoveMacroBlacklist in ${classIfExists.name}")
|
||||||
|
findMethod(classIfExists){
|
||||||
|
name=="c" && returnType==Boolean::class.java && isStatic &¶meterCount==1
|
||||||
|
}.hookBefore {
|
||||||
|
XposedBridge.log("Woobox: c")
|
||||||
|
it.result = false
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
letter++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.lt2333.simplicitytools.hooks.rules.s.securitycenter
|
package com.lt2333.simplicitytools.hooks.rules.all.securitycenter
|
||||||
|
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
import com.github.kyuubiran.ezxhelper.utils.findMethod
|
import com.github.kyuubiran.ezxhelper.utils.findMethod
|
||||||
@@ -6,7 +6,7 @@ import com.github.kyuubiran.ezxhelper.utils.hookAfter
|
|||||||
import com.lt2333.simplicitytools.utils.hasEnable
|
import com.lt2333.simplicitytools.utils.hasEnable
|
||||||
import com.lt2333.simplicitytools.utils.xposed.base.HookRegister
|
import com.lt2333.simplicitytools.utils.xposed.base.HookRegister
|
||||||
|
|
||||||
object RemoveOpenAppConfirmationPopupForS : HookRegister() {
|
object RemoveOpenAppConfirmationPopupForAll : HookRegister() {
|
||||||
|
|
||||||
override fun init() {
|
override fun init() {
|
||||||
findMethod("android.widget.TextView") {
|
findMethod("android.widget.TextView") {
|
||||||
@@ -1,11 +1,11 @@
|
|||||||
package com.lt2333.simplicitytools.hooks.rules.s.securitycenter
|
package com.lt2333.simplicitytools.hooks.rules.all.securitycenter
|
||||||
|
|
||||||
import com.github.kyuubiran.ezxhelper.utils.findMethod
|
import com.github.kyuubiran.ezxhelper.utils.findMethod
|
||||||
import com.github.kyuubiran.ezxhelper.utils.hookBefore
|
import com.github.kyuubiran.ezxhelper.utils.hookBefore
|
||||||
import com.lt2333.simplicitytools.utils.hasEnable
|
import com.lt2333.simplicitytools.utils.hasEnable
|
||||||
import com.lt2333.simplicitytools.utils.xposed.base.HookRegister
|
import com.lt2333.simplicitytools.utils.xposed.base.HookRegister
|
||||||
|
|
||||||
object SkipWaitingTimeForS : HookRegister() {
|
object SkipWaitingTimeForAll : HookRegister() {
|
||||||
|
|
||||||
override fun init() {
|
override fun init() {
|
||||||
findMethod("android.widget.TextView") {
|
findMethod("android.widget.TextView") {
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.lt2333.simplicitytools.hooks.rules.s.settings
|
package com.lt2333.simplicitytools.hooks.rules.all.settings
|
||||||
|
|
||||||
import android.app.NotificationChannel
|
import android.app.NotificationChannel
|
||||||
import com.github.kyuubiran.ezxhelper.utils.*
|
import com.github.kyuubiran.ezxhelper.utils.*
|
||||||
@@ -6,7 +6,7 @@ import com.lt2333.simplicitytools.utils.XSPUtils
|
|||||||
import com.lt2333.simplicitytools.utils.xposed.base.HookRegister
|
import com.lt2333.simplicitytools.utils.xposed.base.HookRegister
|
||||||
import de.robv.android.xposed.XposedHelpers
|
import de.robv.android.xposed.XposedHelpers
|
||||||
|
|
||||||
object ShowNotificationImportanceForS : HookRegister() {
|
object ShowNotificationImportanceForAll : HookRegister() {
|
||||||
|
|
||||||
override fun init() {
|
override fun init() {
|
||||||
findMethod("com.android.settings.notification.ChannelNotificationSettings") {
|
findMethod("com.android.settings.notification.ChannelNotificationSettings") {
|
||||||
@@ -1,11 +1,11 @@
|
|||||||
package com.lt2333.simplicitytools.hooks.rules.s.thememanager
|
package com.lt2333.simplicitytools.hooks.rules.all.thememanager
|
||||||
|
|
||||||
import com.github.kyuubiran.ezxhelper.utils.findMethod
|
import com.github.kyuubiran.ezxhelper.utils.findMethod
|
||||||
import com.github.kyuubiran.ezxhelper.utils.hookBefore
|
import com.github.kyuubiran.ezxhelper.utils.hookBefore
|
||||||
import com.lt2333.simplicitytools.utils.hasEnable
|
import com.lt2333.simplicitytools.utils.hasEnable
|
||||||
import com.lt2333.simplicitytools.utils.xposed.base.HookRegister
|
import com.lt2333.simplicitytools.utils.xposed.base.HookRegister
|
||||||
|
|
||||||
object RemoveAdsForS : HookRegister() {
|
object RemoveAdsForAll : HookRegister() {
|
||||||
|
|
||||||
override fun init() {
|
override fun init() {
|
||||||
findMethod("com.android.thememanager.basemodule.ad.model.AdInfoResponse") {
|
findMethod("com.android.thememanager.basemodule.ad.model.AdInfoResponse") {
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
package com.lt2333.simplicitytools.hooks.rules.s.android
|
|
||||||
|
|
||||||
import com.github.kyuubiran.ezxhelper.utils.findMethod
|
|
||||||
import com.github.kyuubiran.ezxhelper.utils.hookBefore
|
|
||||||
import com.lt2333.simplicitytools.utils.hasEnable
|
|
||||||
import com.lt2333.simplicitytools.utils.xposed.base.HookRegister
|
|
||||||
|
|
||||||
object DisableFlagSecureForS : HookRegister() {
|
|
||||||
override fun init() {
|
|
||||||
findMethod("com.android.server.wm.WindowState") {
|
|
||||||
name == "isSecureLocked"
|
|
||||||
}.hookBefore {
|
|
||||||
hasEnable("disable_flag_secure") {
|
|
||||||
it.result = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
package com.lt2333.simplicitytools.hooks.rules.s.miuihome
|
|
||||||
|
|
||||||
import com.github.kyuubiran.ezxhelper.utils.findMethod
|
|
||||||
import com.github.kyuubiran.ezxhelper.utils.hookBefore
|
|
||||||
import com.lt2333.simplicitytools.utils.hasEnable
|
|
||||||
import com.lt2333.simplicitytools.utils.xposed.base.HookRegister
|
|
||||||
|
|
||||||
object AlwaysDisplayTimeForS : HookRegister() {
|
|
||||||
|
|
||||||
override fun init() {
|
|
||||||
findMethod("com.miui.home.launcher.Workspace") {
|
|
||||||
name == "isScreenHasClockGadget" && parameterCount == 1
|
|
||||||
}.hookBefore {
|
|
||||||
hasEnable("home_time") {
|
|
||||||
it.result = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
package com.lt2333.simplicitytools.hooks.rules.s.securitycenter
|
|
||||||
|
|
||||||
import com.lt2333.simplicitytools.utils.XSPUtils
|
|
||||||
import com.lt2333.simplicitytools.utils.xposed.base.HookRegister
|
|
||||||
import de.robv.android.xposed.XC_MethodHook
|
|
||||||
import de.robv.android.xposed.XposedHelpers
|
|
||||||
|
|
||||||
object RemoveMacroBlacklistForS : HookRegister() {
|
|
||||||
|
|
||||||
override fun init() {
|
|
||||||
if (XSPUtils.getBoolean("remove_macro_blacklist", false)) {
|
|
||||||
var letter = 'a'
|
|
||||||
for (i in 0..25) {
|
|
||||||
val classIfExists = XposedHelpers.findClassIfExists(
|
|
||||||
"com.miui.gamebooster.v.$letter" + "0", getDefaultClassLoader()
|
|
||||||
) ?: continue
|
|
||||||
if (classIfExists.declaredMethods.size in 6..12 && classIfExists.fields.isEmpty() && classIfExists.declaredFields.size >= 2) {
|
|
||||||
XposedHelpers.findAndHookMethod(classIfExists, "c", String::class.java,
|
|
||||||
object : XC_MethodHook() {
|
|
||||||
override fun beforeHookedMethod(param: MethodHookParam?) {
|
|
||||||
param?.result = false
|
|
||||||
}
|
|
||||||
})
|
|
||||||
return
|
|
||||||
}
|
|
||||||
letter++
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -27,7 +27,6 @@ object NewNotificationWeatherForS : HookRegister() {
|
|||||||
val time = it.args[0]?.toString()
|
val time = it.args[0]?.toString()
|
||||||
val view = it.thisObject as TextView
|
val view = it.thisObject as TextView
|
||||||
if (view.id == clockId && time != null && this::weather.isInitialized) {
|
if (view.id == clockId && time != null && this::weather.isInitialized) {
|
||||||
// TODO("调高天气位置")
|
|
||||||
// val layout = view.layoutParams as ViewGroup.MarginLayoutParams
|
// val layout = view.layoutParams as ViewGroup.MarginLayoutParams
|
||||||
// val y = view.height / 2
|
// val y = view.height / 2
|
||||||
// layout.topMargin = -y
|
// layout.topMargin = -y
|
||||||
|
|||||||
@@ -1,21 +0,0 @@
|
|||||||
package com.lt2333.simplicitytools.hooks.rules.s.systemui
|
|
||||||
|
|
||||||
import com.github.kyuubiran.ezxhelper.utils.findMethod
|
|
||||||
import com.github.kyuubiran.ezxhelper.utils.hookBefore
|
|
||||||
import com.lt2333.simplicitytools.utils.hasEnable
|
|
||||||
import com.lt2333.simplicitytools.utils.xposed.base.HookRegister
|
|
||||||
|
|
||||||
object NoPasswordHookForS : HookRegister() {
|
|
||||||
|
|
||||||
override fun init() {
|
|
||||||
hasEnable("no_need_to_enter_password_when_power_on") {
|
|
||||||
findMethod("com.android.internal.widget.LockPatternUtils\$StrongAuthTracker") { name == "isBiometricAllowedForUser" }.hookBefore {
|
|
||||||
it.result = true
|
|
||||||
}
|
|
||||||
findMethod("com.android.internal.widget.LockPatternUtils") { name == "isBiometricAllowedForUser" }.hookBefore {
|
|
||||||
it.result = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
package com.lt2333.simplicitytools.hooks.rules.t.android
|
||||||
|
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.findMethod
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.hookBefore
|
||||||
|
import com.lt2333.simplicitytools.utils.XSPUtils
|
||||||
|
import com.lt2333.simplicitytools.utils.xposed.base.HookRegister
|
||||||
|
|
||||||
|
object SystemPropertiesHookForT : HookRegister() {
|
||||||
|
override fun init() {
|
||||||
|
val mediaStepsSwitch = XSPUtils.getBoolean("media_volume_steps_switch", false)
|
||||||
|
val mediaSteps = XSPUtils.getInt("media_volume_steps", 15)
|
||||||
|
|
||||||
|
findMethod("android.os.SystemProperties") {
|
||||||
|
name == "getInt" && returnType == Int::class.java
|
||||||
|
}.hookBefore {
|
||||||
|
when (it.args[0] as String) {
|
||||||
|
"ro.config.media_vol_steps" -> if (mediaStepsSwitch) it.result = mediaSteps
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
package com.lt2333.simplicitytools.hooks.rules.t.systemui
|
||||||
|
|
||||||
|
import android.util.TypedValue
|
||||||
|
import android.widget.TextView
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.findMethod
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.getObjectAs
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.hookAfter
|
||||||
|
import com.lt2333.simplicitytools.utils.XSPUtils
|
||||||
|
import com.lt2333.simplicitytools.utils.xposed.base.HookRegister
|
||||||
|
|
||||||
|
object BatteryPercentageForT : HookRegister() {
|
||||||
|
|
||||||
|
override fun init() {
|
||||||
|
val size = XSPUtils.getFloat("battery_percentage_font_size", 0f)
|
||||||
|
if (size == 0f) return
|
||||||
|
findMethod("com.android.systemui.statusbar.views.MiuiBatteryMeterView") {
|
||||||
|
name == "updateResources"
|
||||||
|
}.hookAfter {
|
||||||
|
(it.thisObject.getObjectAs<TextView>("mBatteryPercentView")).setTextSize(
|
||||||
|
TypedValue.COMPLEX_UNIT_DIP, size
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
package com.lt2333.simplicitytools.hooks.rules.t.systemui
|
||||||
|
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.findMethod
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.hookAfter
|
||||||
|
import com.lt2333.simplicitytools.utils.hasEnable
|
||||||
|
import com.lt2333.simplicitytools.utils.xposed.base.HookRegister
|
||||||
|
|
||||||
|
object CanNotificationSlideForT: HookRegister() {
|
||||||
|
|
||||||
|
override fun init() {
|
||||||
|
findMethod("com.android.systemui.statusbar.notification.NotificationSettingsManager") {
|
||||||
|
name == "canSlide"
|
||||||
|
}.hookAfter {
|
||||||
|
hasEnable("can_notification_slide") {
|
||||||
|
it.result = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,200 @@
|
|||||||
|
package com.lt2333.simplicitytools.hooks.rules.t.systemui
|
||||||
|
|
||||||
|
import android.content.ComponentName
|
||||||
|
import android.content.Intent
|
||||||
|
import android.view.View
|
||||||
|
import android.view.ViewGroup
|
||||||
|
import android.widget.LinearLayout
|
||||||
|
import android.widget.TextView
|
||||||
|
import android.widget.Toast
|
||||||
|
import androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
import cn.fkj233.ui.activity.dp2px
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.*
|
||||||
|
import com.lt2333.simplicitytools.utils.SystemProperties
|
||||||
|
import com.lt2333.simplicitytools.utils.XSPUtils
|
||||||
|
import com.lt2333.simplicitytools.utils.hasEnable
|
||||||
|
import com.lt2333.simplicitytools.utils.xposed.base.HookRegister
|
||||||
|
import com.lt2333.simplicitytools.views.WeatherView
|
||||||
|
|
||||||
|
object ControlCenterWeatherForT : HookRegister() {
|
||||||
|
|
||||||
|
override fun init() = hasEnable("control_center_weather") {
|
||||||
|
var mWeatherView: TextView? = null
|
||||||
|
var mConstraintLayout: ConstraintLayout? = null
|
||||||
|
val isDisplayCity = XSPUtils.getBoolean("control_center_weather_city", false)
|
||||||
|
findMethod("com.android.systemui.controlcenter.phone.widget.QSControlCenterHeaderView") {
|
||||||
|
name == "onFinishInflate"
|
||||||
|
}.hookAfter { param ->
|
||||||
|
val viewGroup = param.thisObject as ViewGroup
|
||||||
|
val context = viewGroup.context
|
||||||
|
|
||||||
|
// MIUI编译时间大于 2022-03-12 00:00:00 且为内测版
|
||||||
|
if (SystemProperties[context, "ro.build.date.utc"]!!.toInt() >= 1647014400 &&
|
||||||
|
!SystemProperties[context, "ro.build.version.incremental"]!!.endsWith("XM")
|
||||||
|
) {
|
||||||
|
//获取原组件
|
||||||
|
val bigTimeId =
|
||||||
|
context.resources.getIdentifier("big_time", "id", context.packageName)
|
||||||
|
val big_time: TextView = viewGroup.findViewById(bigTimeId)
|
||||||
|
|
||||||
|
val dateTimeId =
|
||||||
|
context.resources.getIdentifier("date_time", "id", context.packageName)
|
||||||
|
val dateTime: TextView = viewGroup.findViewById(dateTimeId)
|
||||||
|
|
||||||
|
//创建新布局
|
||||||
|
val mConstraintLayoutLp = LinearLayout.LayoutParams(
|
||||||
|
LinearLayout.LayoutParams.MATCH_PARENT,
|
||||||
|
LinearLayout.LayoutParams.WRAP_CONTENT
|
||||||
|
).also {
|
||||||
|
it.topMargin = context.resources.getDimensionPixelSize(
|
||||||
|
context.resources.getIdentifier(
|
||||||
|
"qs_control_header_tiles_margin_top",
|
||||||
|
"dimen",
|
||||||
|
context.packageName
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
mConstraintLayout =
|
||||||
|
ConstraintLayout(context).also { it.layoutParams = mConstraintLayoutLp }
|
||||||
|
|
||||||
|
(big_time.parent as ViewGroup).addView(mConstraintLayout, 0)
|
||||||
|
|
||||||
|
//从原布局中删除组件
|
||||||
|
(big_time.parent as ViewGroup).removeView(big_time)
|
||||||
|
(dateTime.parent as ViewGroup).removeView(dateTime)
|
||||||
|
|
||||||
|
//添加组件至新布局
|
||||||
|
mConstraintLayout!!.addView(big_time)
|
||||||
|
mConstraintLayout!!.addView(dateTime)
|
||||||
|
|
||||||
|
//组件属性
|
||||||
|
val dateTimeLp = ConstraintLayout.LayoutParams(
|
||||||
|
ConstraintLayout.LayoutParams.WRAP_CONTENT,
|
||||||
|
ConstraintLayout.LayoutParams.WRAP_CONTENT
|
||||||
|
).also {
|
||||||
|
it.startToEnd = bigTimeId
|
||||||
|
it.bottomToBottom = 0
|
||||||
|
it.marginStart = context.resources.getDimensionPixelSize(
|
||||||
|
context.resources.getIdentifier(
|
||||||
|
"notification_panel_time_date_space",
|
||||||
|
"dimen",
|
||||||
|
context.packageName
|
||||||
|
)
|
||||||
|
)
|
||||||
|
it.bottomMargin = dp2px(context, 5f)
|
||||||
|
}
|
||||||
|
dateTime.layoutParams = dateTimeLp
|
||||||
|
|
||||||
|
|
||||||
|
//创建天气组件
|
||||||
|
mWeatherView = WeatherView(context, isDisplayCity).apply {
|
||||||
|
setTextAppearance(
|
||||||
|
context.resources.getIdentifier(
|
||||||
|
"TextAppearance.QSControl.Date",
|
||||||
|
"style",
|
||||||
|
context.packageName
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
}
|
||||||
|
mConstraintLayout!!.addView(mWeatherView)
|
||||||
|
|
||||||
|
val mweatherviewLp = ConstraintLayout.LayoutParams(
|
||||||
|
ConstraintLayout.LayoutParams.WRAP_CONTENT,
|
||||||
|
ConstraintLayout.LayoutParams.WRAP_CONTENT
|
||||||
|
).also {
|
||||||
|
it.startToEnd = bigTimeId
|
||||||
|
it.bottomToTop = dateTimeId
|
||||||
|
it.marginStart = context.resources.getDimensionPixelSize(
|
||||||
|
context.resources.getIdentifier(
|
||||||
|
"notification_panel_time_date_space",
|
||||||
|
"dimen",
|
||||||
|
context.packageName
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
(mWeatherView as WeatherView).layoutParams = mweatherviewLp
|
||||||
|
|
||||||
|
} else {
|
||||||
|
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.putObject(
|
||||||
|
"bottomToTop",
|
||||||
|
context.resources.getIdentifier("date_time", "id", context.packageName)
|
||||||
|
)
|
||||||
|
layoutParam.putObject(
|
||||||
|
"startToEnd",
|
||||||
|
context.resources.getIdentifier("big_time", "id", context.packageName)
|
||||||
|
)
|
||||||
|
layoutParam.marginStart = context.resources.getDimensionPixelSize(
|
||||||
|
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()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//解决横屏重叠
|
||||||
|
findMethod("com.android.systemui.controlcenter.phone.widget.QSControlCenterHeaderView") {
|
||||||
|
name == "updateLayout"
|
||||||
|
}.hookAfter {
|
||||||
|
val viewGroup = it.thisObject as ViewGroup
|
||||||
|
val context = viewGroup.context
|
||||||
|
val mOrientation = viewGroup.getObject("mOrientation") as Int
|
||||||
|
// MIUI编译时间大于 2022-03-12 00:00:00 且为内测版
|
||||||
|
if (SystemProperties[context, "ro.build.date.utc"]!!.toInt() >= 1647014400 && !SystemProperties[context, "ro.build.version.incremental"]!!.endsWith(
|
||||||
|
"DEV"
|
||||||
|
) && !SystemProperties[context, "ro.build.version.incremental"]!!.endsWith("XM")
|
||||||
|
) {
|
||||||
|
if (mOrientation == 1) {
|
||||||
|
mConstraintLayout!!.visibility = View.VISIBLE
|
||||||
|
} else {
|
||||||
|
mConstraintLayout!!.visibility = View.GONE
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (mOrientation == 1) {
|
||||||
|
mWeatherView!!.visibility = View.VISIBLE
|
||||||
|
} else {
|
||||||
|
mWeatherView!!.visibility = View.GONE
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
package com.lt2333.simplicitytools.hooks.rules.t.systemui
|
||||||
|
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.findMethod
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.hookAfter
|
||||||
|
import com.lt2333.simplicitytools.utils.XSPUtils
|
||||||
|
import com.lt2333.simplicitytools.utils.hasEnable
|
||||||
|
import com.lt2333.simplicitytools.utils.xposed.base.HookRegister
|
||||||
|
|
||||||
|
object CustomMobileTypeTextForT : HookRegister() {
|
||||||
|
|
||||||
|
override fun init() = hasEnable("custom_mobile_type_text_switch") {
|
||||||
|
findMethod("com.android.systemui.statusbar.connectivity.MobileSignalController") {
|
||||||
|
name == "getMobileTypeName" && parameterTypes[0] == Int::class.java
|
||||||
|
}.hookAfter {
|
||||||
|
it.result = XSPUtils.getString("custom_mobile_type_text", "5G")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,134 @@
|
|||||||
|
package com.lt2333.simplicitytools.hooks.rules.t.systemui
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import android.net.TrafficStats
|
||||||
|
import android.util.TypedValue
|
||||||
|
import android.view.Gravity
|
||||||
|
import android.widget.TextView
|
||||||
|
import com.github.kyuubiran.ezxhelper.init.InitFields
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.findConstructor
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.findMethod
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.hookAfter
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.hookBefore
|
||||||
|
import com.lt2333.simplicitytools.R
|
||||||
|
import com.lt2333.simplicitytools.utils.XSPUtils
|
||||||
|
import com.lt2333.simplicitytools.utils.hasEnable
|
||||||
|
import com.lt2333.simplicitytools.utils.xposed.base.HookRegister
|
||||||
|
import java.text.DecimalFormat
|
||||||
|
|
||||||
|
object DoubleLineNetworkSpeedForT : HookRegister() {
|
||||||
|
|
||||||
|
private var mLastTotalUp: Long = 0
|
||||||
|
private var mLastTotalDown: Long = 0
|
||||||
|
|
||||||
|
private var lastTimeStampTotalUp: Long = 0
|
||||||
|
private var lastTimeStampTotalDown: Long = 0
|
||||||
|
|
||||||
|
private var upIcon = ""
|
||||||
|
private var downIcon = ""
|
||||||
|
|
||||||
|
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)
|
||||||
|
|
||||||
|
override fun init() = hasEnable("status_bar_dual_row_network_speed") {
|
||||||
|
|
||||||
|
val none = InitFields.moduleRes.getString(R.string.none)
|
||||||
|
|
||||||
|
if (XSPUtils.getString("status_bar_network_speed_dual_row_icon", none) != none) {
|
||||||
|
upIcon = XSPUtils.getString("status_bar_network_speed_dual_row_icon", none)?.firstOrNull().toString()
|
||||||
|
downIcon = XSPUtils.getString("status_bar_network_speed_dual_row_icon", none)?.lastOrNull().toString()
|
||||||
|
}
|
||||||
|
|
||||||
|
findConstructor("com.android.systemui.statusbar.views.NetworkSpeedView") {
|
||||||
|
parameterCount == 2
|
||||||
|
}.hookAfter {
|
||||||
|
val mView = it.thisObject as TextView
|
||||||
|
mView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 7f)
|
||||||
|
if (getDualSize != 0) {
|
||||||
|
mView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, getDualSize.toFloat())
|
||||||
|
}
|
||||||
|
mView.isSingleLine = false
|
||||||
|
mView.setLineSpacing(0F, 0.8F)
|
||||||
|
if (getDualAlign == 0) {
|
||||||
|
mView.gravity = Gravity.START or Gravity.CENTER_VERTICAL
|
||||||
|
} else {
|
||||||
|
mView.gravity = Gravity.END or Gravity.CENTER_VERTICAL
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
findMethod("com.android.systemui.statusbar.policy.NetworkSpeedController") {
|
||||||
|
name == "formatSpeed" && parameterCount == 2
|
||||||
|
}.hookBefore {
|
||||||
|
if (getDualAlign == 0) {
|
||||||
|
it.result = "$upIcon ${getTotalUpSpeed(it.args[0] as Context)}\n$downIcon ${
|
||||||
|
getTotalDownloadSpeed(it.args[0] as Context)
|
||||||
|
}"
|
||||||
|
} else {
|
||||||
|
it.result = "${getTotalUpSpeed(it.args[0] as Context)} $upIcon\n${
|
||||||
|
getTotalDownloadSpeed(it.args[0] as Context)
|
||||||
|
} $downIcon"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//获取总的上行速度
|
||||||
|
private fun getTotalUpSpeed(context: Context): String {
|
||||||
|
val totalUpSpeed: Float
|
||||||
|
|
||||||
|
val currentTotalTxBytes = TrafficStats.getTotalTxBytes()
|
||||||
|
val nowTimeStampTotalUp = System.currentTimeMillis()
|
||||||
|
|
||||||
|
//计算上传速度
|
||||||
|
val bytes = (currentTotalTxBytes - mLastTotalUp) * 1000 / (nowTimeStampTotalUp - lastTimeStampTotalUp).toFloat()
|
||||||
|
val unit: String
|
||||||
|
|
||||||
|
if (bytes >= 1048576) {
|
||||||
|
totalUpSpeed = DecimalFormat("0.0").format(bytes / 1048576).toFloat()
|
||||||
|
unit = context.resources.getString(context.resources.getIdentifier("megabyte_per_second", "string", context.packageName))
|
||||||
|
} else {
|
||||||
|
totalUpSpeed = DecimalFormat("0.0").format(bytes / 1024).toFloat()
|
||||||
|
unit = context.resources.getString(context.resources.getIdentifier("kilobyte_per_second", "string", context.packageName))
|
||||||
|
}
|
||||||
|
|
||||||
|
//保存当前的流量总和和上次的时间戳
|
||||||
|
mLastTotalUp = currentTotalTxBytes
|
||||||
|
lastTimeStampTotalUp = nowTimeStampTotalUp
|
||||||
|
|
||||||
|
return if (totalUpSpeed >= 100) {
|
||||||
|
"${totalUpSpeed.toInt()}$unit"
|
||||||
|
} else {
|
||||||
|
"${totalUpSpeed}$unit"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//获取总的下行速度
|
||||||
|
private fun getTotalDownloadSpeed(context: Context): String {
|
||||||
|
val totalDownSpeed: Float
|
||||||
|
val currentTotalRxBytes = TrafficStats.getTotalRxBytes()
|
||||||
|
val nowTimeStampTotalDown = System.currentTimeMillis()
|
||||||
|
|
||||||
|
//计算下行速度
|
||||||
|
val bytes = (currentTotalRxBytes - mLastTotalDown) * 1000 / (nowTimeStampTotalDown - lastTimeStampTotalDown).toFloat()
|
||||||
|
|
||||||
|
val unit: String
|
||||||
|
|
||||||
|
if (bytes >= 1048576) {
|
||||||
|
totalDownSpeed = DecimalFormat("0.0").format(bytes / 1048576).toFloat()
|
||||||
|
unit = context.resources.getString(context.resources.getIdentifier("megabyte_per_second", "string", context.packageName))
|
||||||
|
} else {
|
||||||
|
totalDownSpeed = DecimalFormat("0.0").format(bytes / 1024).toFloat()
|
||||||
|
unit = context.resources.getString(context.resources.getIdentifier("kilobyte_per_second", "string", context.packageName))
|
||||||
|
}
|
||||||
|
//保存当前的流量总和和上次的时间戳
|
||||||
|
mLastTotalDown = currentTotalRxBytes
|
||||||
|
lastTimeStampTotalDown = nowTimeStampTotalDown
|
||||||
|
|
||||||
|
return if (totalDownSpeed >= 100) {
|
||||||
|
"${totalDownSpeed.toInt()}$unit"
|
||||||
|
} else {
|
||||||
|
"${totalDownSpeed}$unit"
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,51 @@
|
|||||||
|
package com.lt2333.simplicitytools.hooks.rules.t.systemui
|
||||||
|
|
||||||
|
import android.view.View
|
||||||
|
import android.widget.FrameLayout
|
||||||
|
import android.widget.ImageView
|
||||||
|
import android.widget.TextView
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.findMethod
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.getObject
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.getObjectAs
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.hookAfter
|
||||||
|
import com.lt2333.simplicitytools.utils.hasEnable
|
||||||
|
import com.lt2333.simplicitytools.utils.xposed.base.HookRegister
|
||||||
|
|
||||||
|
object HideBatteryIconForT : HookRegister() {
|
||||||
|
|
||||||
|
override fun init() {
|
||||||
|
findMethod("com.android.systemui.statusbar.views.MiuiBatteryMeterView") {
|
||||||
|
name == "updateResources"
|
||||||
|
}.hookAfter {
|
||||||
|
//隐藏电池图标
|
||||||
|
hasEnable("hide_battery_icon") {
|
||||||
|
(it.thisObject.getObjectAs<ImageView>("mBatteryIconView")).visibility = View.GONE
|
||||||
|
if (it.thisObject.getObject("mBatteryStyle") == 1) {
|
||||||
|
(it.thisObject.getObjectAs<FrameLayout>("mBatteryDigitalView")).visibility =
|
||||||
|
View.GONE
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//隐藏电池内的百分比
|
||||||
|
hasEnable("hide_battery_percentage_icon") {
|
||||||
|
(it.thisObject.getObjectAs<TextView>("mBatteryPercentMarkView")).textSize = 0F
|
||||||
|
}
|
||||||
|
//隐藏电池百分号
|
||||||
|
hasEnable("hide_battery_percentage_icon") {
|
||||||
|
(it.thisObject.getObjectAs<TextView>("mBatteryPercentMarkView")).textSize = 0F
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
findMethod("com.android.systemui.statusbar.views.MiuiBatteryMeterView") {
|
||||||
|
name == "updateChargeAndText"
|
||||||
|
}.hookAfter {
|
||||||
|
//隐藏电池充电图标
|
||||||
|
hasEnable("hide_battery_charging_icon") {
|
||||||
|
(it.thisObject.getObjectAs<ImageView>("mBatteryChargingInView")).visibility =
|
||||||
|
View.GONE
|
||||||
|
(it.thisObject.getObjectAs<ImageView>("mBatteryChargingView")).visibility =
|
||||||
|
View.GONE
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
package com.lt2333.simplicitytools.hooks.rules.t.systemui
|
||||||
|
|
||||||
|
import android.view.View
|
||||||
|
import android.widget.ImageView
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.*
|
||||||
|
import com.lt2333.simplicitytools.utils.hasEnable
|
||||||
|
import com.lt2333.simplicitytools.utils.xposed.base.HookRegister
|
||||||
|
import de.robv.android.xposed.XC_MethodHook
|
||||||
|
|
||||||
|
object HideHDIconForT : HookRegister() {
|
||||||
|
|
||||||
|
override fun init() {
|
||||||
|
|
||||||
|
|
||||||
|
findMethod("com.android.systemui.statusbar.StatusBarMobileView") {
|
||||||
|
name == "initViewState" && parameterCount == 1
|
||||||
|
}.hookAfter {
|
||||||
|
hide(it)
|
||||||
|
}
|
||||||
|
|
||||||
|
findMethod("com.android.systemui.statusbar.StatusBarMobileView") {
|
||||||
|
name == "updateState" && parameterCount == 1
|
||||||
|
}.hookAfter {
|
||||||
|
hide(it)
|
||||||
|
}
|
||||||
|
hasEnable("hide_new_hd_icon") {
|
||||||
|
findMethod("com.android.systemui.statusbar.policy.HDController") { name == "update" }.hookBefore {
|
||||||
|
it.result = null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun hide(it: XC_MethodHook.MethodHookParam) {
|
||||||
|
hasEnable("hide_big_hd_icon") {
|
||||||
|
(it.thisObject.getObjectAs<ImageView>("mVolte")).visibility = View.GONE
|
||||||
|
}
|
||||||
|
hasEnable("hide_small_hd_icon") {
|
||||||
|
(it.thisObject.getObjectAs<ImageView>("mSmallHd")).visibility = View.GONE
|
||||||
|
}
|
||||||
|
hasEnable("hide_hd_no_service_icon") {
|
||||||
|
(it.thisObject.getObjectAs<ImageView>("mVolteNoService")).visibility = View.GONE
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
package com.lt2333.simplicitytools.hooks.rules.t.systemui
|
||||||
|
|
||||||
|
import android.view.View
|
||||||
|
import android.widget.ImageView
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.findMethod
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.getObjectAs
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.hookAfter
|
||||||
|
import com.lt2333.simplicitytools.utils.hasEnable
|
||||||
|
import com.lt2333.simplicitytools.utils.xposed.base.HookRegister
|
||||||
|
import de.robv.android.xposed.XC_MethodHook
|
||||||
|
|
||||||
|
object HideMobileActivityIconForT : HookRegister() {
|
||||||
|
|
||||||
|
override fun init() {
|
||||||
|
findMethod("com.android.systemui.statusbar.StatusBarMobileView") {
|
||||||
|
name == "initViewState" && parameterCount == 1
|
||||||
|
}.hookAfter {
|
||||||
|
hide(it)
|
||||||
|
}
|
||||||
|
|
||||||
|
findMethod("com.android.systemui.statusbar.StatusBarMobileView") {
|
||||||
|
name == "updateState" && parameterCount == 1
|
||||||
|
}.hookAfter {
|
||||||
|
hide(it)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun hide(it: XC_MethodHook.MethodHookParam) {
|
||||||
|
hasEnable("hide_mobile_activity_icon") {
|
||||||
|
(it.thisObject.getObjectAs<ImageView>("mLeftInOut")).visibility = View.GONE
|
||||||
|
(it.thisObject.getObjectAs<ImageView>("mRightInOut")).visibility = View.GONE
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,52 @@
|
|||||||
|
package com.lt2333.simplicitytools.hooks.rules.t.systemui
|
||||||
|
|
||||||
|
import android.view.View
|
||||||
|
import android.widget.ImageView
|
||||||
|
import android.widget.TextView
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.findMethod
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.getObjectAs
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.hookAfter
|
||||||
|
import com.lt2333.simplicitytools.utils.XSPUtils
|
||||||
|
import com.lt2333.simplicitytools.utils.hasEnable
|
||||||
|
import com.lt2333.simplicitytools.utils.xposed.base.HookRegister
|
||||||
|
import de.robv.android.xposed.XC_MethodHook
|
||||||
|
|
||||||
|
object HideMobileTypeIconForT : HookRegister() {
|
||||||
|
|
||||||
|
private val isBigType = XSPUtils.getBoolean("big_mobile_type_icon", false)
|
||||||
|
|
||||||
|
override fun init() {
|
||||||
|
findMethod("com.android.systemui.statusbar.StatusBarMobileView") {
|
||||||
|
name == "initViewState" && parameterCount == 1
|
||||||
|
}.hookAfter {
|
||||||
|
hideMobileTypeIcon(it)
|
||||||
|
}
|
||||||
|
|
||||||
|
findMethod("com.android.systemui.statusbar.StatusBarMobileView") {
|
||||||
|
name == "updateState" && parameterCount == 1
|
||||||
|
}.hookAfter {
|
||||||
|
hideMobileTypeIcon(it)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun hideMobileTypeIcon(it: XC_MethodHook.MethodHookParam) {
|
||||||
|
hasEnable("hide_mobile_type_icon") {
|
||||||
|
if (isBigType) {
|
||||||
|
(it.thisObject.getObjectAs<ImageView>("mMobileType")).visibility =
|
||||||
|
View.GONE
|
||||||
|
(it.thisObject.getObjectAs<ImageView>("mMobileTypeImage")).visibility =
|
||||||
|
View.GONE
|
||||||
|
(it.thisObject.getObjectAs<TextView>("mMobileTypeSingle")).visibility =
|
||||||
|
View.GONE
|
||||||
|
} else {
|
||||||
|
(it.thisObject.getObjectAs<ImageView>("mMobileType")).visibility =
|
||||||
|
View.INVISIBLE
|
||||||
|
(it.thisObject.getObjectAs<ImageView>("mMobileTypeImage")).visibility =
|
||||||
|
View.INVISIBLE
|
||||||
|
(it.thisObject.getObjectAs<TextView>("mMobileTypeSingle")).visibility =
|
||||||
|
View.INVISIBLE
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
package com.lt2333.simplicitytools.hooks.rules.t.systemui
|
||||||
|
|
||||||
|
import android.widget.TextView
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.findMethod
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.hookAfter
|
||||||
|
import com.lt2333.simplicitytools.utils.hasEnable
|
||||||
|
import com.lt2333.simplicitytools.utils.xposed.base.HookRegister
|
||||||
|
|
||||||
|
object HideNetworkSpeedSplitterForT : HookRegister() {
|
||||||
|
|
||||||
|
override fun init() {
|
||||||
|
findMethod("com.android.systemui.statusbar.views.NetworkSpeedSplitter") {
|
||||||
|
name == "init"
|
||||||
|
}.hookAfter {
|
||||||
|
hasEnable("hide_network_speed_splitter") {
|
||||||
|
val textView = it.thisObject as TextView
|
||||||
|
textView.text = " "
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
package com.lt2333.simplicitytools.hooks.rules.t.systemui
|
||||||
|
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.findMethod
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.hookBefore
|
||||||
|
import com.lt2333.simplicitytools.utils.hasEnable
|
||||||
|
import com.lt2333.simplicitytools.utils.xposed.base.HookRegister
|
||||||
|
|
||||||
|
object HideSimIconForT : HookRegister() {
|
||||||
|
|
||||||
|
override fun init() {
|
||||||
|
findMethod("com.android.systemui.statusbar.phone.StatusBarSignalPolicy") {
|
||||||
|
name == "hasCorrectSubs" && parameterTypes[0] == MutableList::class.java
|
||||||
|
}.hookBefore {
|
||||||
|
val list = it.args[0] as MutableList<*>
|
||||||
|
val size = list.size
|
||||||
|
hasEnable("hide_sim_two_icon", extraCondition = { size == 2 }) {
|
||||||
|
list.removeAt(1)
|
||||||
|
}
|
||||||
|
hasEnable("hide_sim_one_icon", extraCondition = { size >= 1 }) {
|
||||||
|
list.removeAt(0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,87 @@
|
|||||||
|
package com.lt2333.simplicitytools.hooks.rules.t.systemui
|
||||||
|
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.findMethod
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.hookBefore
|
||||||
|
import com.lt2333.simplicitytools.utils.hasEnable
|
||||||
|
import com.lt2333.simplicitytools.utils.xposed.base.HookRegister
|
||||||
|
import de.robv.android.xposed.XC_MethodHook
|
||||||
|
|
||||||
|
object HideStatusBarIconForT : HookRegister() {
|
||||||
|
|
||||||
|
override fun init() {
|
||||||
|
findMethod("com.android.systemui.statusbar.phone.StatusBarIconControllerImpl") {
|
||||||
|
name == "setIconVisibility" && parameterCount == 2
|
||||||
|
}.hookBefore {
|
||||||
|
hideIcon(it)
|
||||||
|
}
|
||||||
|
|
||||||
|
findMethod("com.android.systemui.statusbar.phone.MiuiDripLeftStatusBarIconControllerImpl") {
|
||||||
|
name == "setIconVisibility" && parameterCount == 2
|
||||||
|
}.hookBefore {
|
||||||
|
hideIcon(it)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun hideIcon(it: XC_MethodHook.MethodHookParam) {
|
||||||
|
//Log.d("图标名字", "handleLoadPackage: " + it.args[0])
|
||||||
|
when (it.args[0] as String) {
|
||||||
|
//隐藏蓝牙
|
||||||
|
"bluetooth" -> hasEnable("hide_bluetooth_icon") {
|
||||||
|
it.args[1] = false
|
||||||
|
}
|
||||||
|
//隐藏蓝牙电量
|
||||||
|
"bluetooth_handsfree_battery" -> hasEnable("hide_bluetooth_battery_icon") {
|
||||||
|
it.args[1] = false
|
||||||
|
}
|
||||||
|
//隐藏勿扰
|
||||||
|
"zen" -> hasEnable("hide_zen_icon") {
|
||||||
|
it.args[1] = false
|
||||||
|
}
|
||||||
|
//隐藏声音
|
||||||
|
"volume" -> hasEnable("hide_volume_icon") {
|
||||||
|
it.args[1] = false
|
||||||
|
}
|
||||||
|
//隐藏WIFI
|
||||||
|
"wifi" -> hasEnable("hide_wifi_icon") {
|
||||||
|
it.args[1] = false
|
||||||
|
}
|
||||||
|
//隐藏WIFI辅助
|
||||||
|
"slave_wifi" -> hasEnable("hide_slave_wifi_icon") {
|
||||||
|
it.args[1] = false
|
||||||
|
}
|
||||||
|
//隐藏飞行模式
|
||||||
|
"airplane" -> hasEnable("hide_airplane_icon") {
|
||||||
|
it.args[1] = false
|
||||||
|
}
|
||||||
|
//隐藏闹钟
|
||||||
|
"alarm_clock" -> hasEnable("hide_alarm_icon") {
|
||||||
|
it.args[1] = false
|
||||||
|
}
|
||||||
|
//隐藏定位
|
||||||
|
"location" -> hasEnable("hide_gps_icon") {
|
||||||
|
it.args[1] = false
|
||||||
|
}
|
||||||
|
//隐藏热点
|
||||||
|
"hotspot" -> hasEnable("hide_hotspot_icon") {
|
||||||
|
it.args[1] = false
|
||||||
|
}
|
||||||
|
//隐藏耳机
|
||||||
|
"headset" -> hasEnable("hide_headset_icon") {
|
||||||
|
it.args[1] = false
|
||||||
|
}
|
||||||
|
//隐藏VPN
|
||||||
|
"vpn" -> hasEnable("hide_vpn_icon") {
|
||||||
|
it.args[1] = false
|
||||||
|
}
|
||||||
|
//隐藏无SIM卡
|
||||||
|
"no_sim" -> hasEnable("hide_no_sim_icon") {
|
||||||
|
it.args[1] = false
|
||||||
|
}
|
||||||
|
//隐藏NFC图标
|
||||||
|
"nfc" -> hasEnable("hide_nfc_icon") {
|
||||||
|
it.args[1] = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
package com.lt2333.simplicitytools.hooks.rules.t.systemui
|
||||||
|
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.findMethod
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.hookBefore
|
||||||
|
import com.lt2333.simplicitytools.utils.hasEnable
|
||||||
|
import com.lt2333.simplicitytools.utils.xposed.base.HookRegister
|
||||||
|
|
||||||
|
object HideStatusBarNetworkSpeedSecondForT : HookRegister() {
|
||||||
|
|
||||||
|
override fun init() {
|
||||||
|
findMethod("com.android.systemui.statusbar.views.NetworkSpeedView") {
|
||||||
|
name == "setNetworkSpeed" && parameterCount == 1
|
||||||
|
}.hookBefore {
|
||||||
|
hasEnable("hide_status_bar_network_speed_second") {
|
||||||
|
if (it.args[0] != null) {
|
||||||
|
val mText = (it.args[0] as String)
|
||||||
|
.replace("/", "")
|
||||||
|
.replace("s", "")
|
||||||
|
.replace("\'", "")
|
||||||
|
.replace("วิ", "")
|
||||||
|
it.args[0] = mText
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
package com.lt2333.simplicitytools.hooks.rules.t.systemui
|
||||||
|
|
||||||
|
import android.view.View
|
||||||
|
import android.widget.ImageView
|
||||||
|
import android.widget.TextView
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.findMethod
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.getObjectAs
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.hookAfter
|
||||||
|
import com.lt2333.simplicitytools.utils.hasEnable
|
||||||
|
import com.lt2333.simplicitytools.utils.xposed.base.HookRegister
|
||||||
|
import de.robv.android.xposed.XC_MethodHook
|
||||||
|
|
||||||
|
object HideWifiActivityIconForT : HookRegister() {
|
||||||
|
|
||||||
|
override fun init() {
|
||||||
|
findMethod("com.android.systemui.statusbar.StatusBarWifiView") {
|
||||||
|
name == "initViewState" && parameterCount == 1
|
||||||
|
}.hookAfter {
|
||||||
|
hide(it)
|
||||||
|
}
|
||||||
|
|
||||||
|
findMethod("com.android.systemui.statusbar.StatusBarWifiView") {
|
||||||
|
name == "updateState" && parameterCount == 1
|
||||||
|
}.hookAfter {
|
||||||
|
hide(it)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun hide(it: XC_MethodHook.MethodHookParam) {
|
||||||
|
//隐藏WIFI箭头
|
||||||
|
hasEnable("hide_wifi_activity_icon") {
|
||||||
|
(it.thisObject.getObjectAs<ImageView>("mWifiActivityView")).visibility =
|
||||||
|
View.INVISIBLE
|
||||||
|
}
|
||||||
|
//隐藏WIFI标准图标
|
||||||
|
hasEnable("hide_wifi_standard_icon") {
|
||||||
|
(it.thisObject.getObjectAs<TextView>("mWifiStandardView")).visibility =
|
||||||
|
View.INVISIBLE
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,87 @@
|
|||||||
|
package com.lt2333.simplicitytools.hooks.rules.t.systemui
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint
|
||||||
|
import android.content.Context
|
||||||
|
import android.os.Handler
|
||||||
|
import android.provider.Settings
|
||||||
|
import android.util.Log
|
||||||
|
import android.widget.LinearLayout
|
||||||
|
import android.widget.TextView
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.*
|
||||||
|
import com.lt2333.simplicitytools.utils.hasEnable
|
||||||
|
import com.lt2333.simplicitytools.utils.xposed.base.HookRegister
|
||||||
|
import de.robv.android.xposed.XC_MethodHook
|
||||||
|
import java.lang.reflect.Method
|
||||||
|
import java.text.SimpleDateFormat
|
||||||
|
import java.util.*
|
||||||
|
|
||||||
|
object LockScreenClockDisplaySecondsForT : HookRegister() {
|
||||||
|
|
||||||
|
private var nowTime: Date = Calendar.getInstance().time
|
||||||
|
|
||||||
|
override fun init() = hasEnable("lock_screen_clock_display_seconds") {
|
||||||
|
findConstructor("com.miui.clock.MiuiBaseClock") {
|
||||||
|
paramCount == 2
|
||||||
|
}.hookAfter {
|
||||||
|
try {
|
||||||
|
val viewGroup = it.thisObject as LinearLayout
|
||||||
|
val d: Method = viewGroup.javaClass.getDeclaredMethod("updateTime")
|
||||||
|
val r = Runnable {
|
||||||
|
d.isAccessible = true
|
||||||
|
d.invoke(viewGroup)
|
||||||
|
}
|
||||||
|
|
||||||
|
class T : TimerTask() {
|
||||||
|
override fun run() {
|
||||||
|
Handler(viewGroup.context.mainLooper).post(r)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Timer().scheduleAtFixedRate(T(), 1000 - System.currentTimeMillis() % 1000, 1000)
|
||||||
|
} catch (_: Exception) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
findMethod("com.miui.clock.MiuiLeftTopClock") {
|
||||||
|
name == "updateTime"
|
||||||
|
}.hookAfter { updateTime(it, false) }
|
||||||
|
|
||||||
|
findMethod("com.miui.clock.MiuiCenterHorizontalClock") {
|
||||||
|
name == "updateTime"
|
||||||
|
}.hookAfter { updateTime(it, false) }
|
||||||
|
|
||||||
|
findMethod("com.miui.clock.MiuiLeftTopLargeClock") {
|
||||||
|
name == "updateTime"
|
||||||
|
}.hookAfter { updateTime(it, false) }
|
||||||
|
|
||||||
|
findMethod("com.miui.clock.MiuiVerticalClock") {
|
||||||
|
name == "updateTime"
|
||||||
|
}.hookAfter { updateTime(it, true) }
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun updateTime(it: XC_MethodHook.MethodHookParam, isVertical: Boolean) {
|
||||||
|
val textV = it.thisObject.getObjectAs<TextView>("mTimeText")
|
||||||
|
val c: Context = textV.context
|
||||||
|
|
||||||
|
Log.d("lock_screen_clock_display_seconds", "updateTime: ${it.thisObject.javaClass.simpleName}")
|
||||||
|
val is24 = Settings.System.getString(c.contentResolver, Settings.System.TIME_12_24) == "24"
|
||||||
|
|
||||||
|
nowTime = Calendar.getInstance().time
|
||||||
|
|
||||||
|
textV.text = getTime(is24, isVertical)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@SuppressLint("SimpleDateFormat")
|
||||||
|
private fun getTime(is24: Boolean, isVertical: Boolean): String {
|
||||||
|
var timePattern = ""
|
||||||
|
timePattern += if (isVertical) { //垂直
|
||||||
|
if (is24) "HH\nmm\nss" else "hh\nmm\nss"
|
||||||
|
} else { //水平
|
||||||
|
if (is24) "HH:mm:ss" else "h:mm:ss"
|
||||||
|
}
|
||||||
|
timePattern = SimpleDateFormat(timePattern).format(nowTime)
|
||||||
|
return timePattern
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,82 @@
|
|||||||
|
package com.lt2333.simplicitytools.hooks.rules.t.systemui
|
||||||
|
|
||||||
|
|
||||||
|
import android.app.AndroidAppHelper
|
||||||
|
import android.content.Context
|
||||||
|
import android.os.BatteryManager
|
||||||
|
import android.widget.TextView
|
||||||
|
import com.github.kyuubiran.ezxhelper.init.InitFields
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.findMethod
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.getObject
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.hookAfter
|
||||||
|
import com.lt2333.simplicitytools.R
|
||||||
|
import com.lt2333.simplicitytools.utils.hasEnable
|
||||||
|
import com.lt2333.simplicitytools.utils.xposed.base.HookRegister
|
||||||
|
import java.io.BufferedReader
|
||||||
|
import java.io.FileReader
|
||||||
|
import kotlin.math.abs
|
||||||
|
|
||||||
|
object LockScreenCurrentForT : HookRegister() {
|
||||||
|
|
||||||
|
override fun init() = hasEnable("lock_screen_charging_current") {
|
||||||
|
findMethod("com.android.keyguard.charge.ChargeUtils") {
|
||||||
|
name == "getChargingHintText" && parameterCount == 3
|
||||||
|
}.hookAfter {
|
||||||
|
it.result = "${getCurrent()}\n${it.result}"
|
||||||
|
}
|
||||||
|
|
||||||
|
findMethod("com.android.systemui.statusbar.phone.KeyguardBottomAreaView") {
|
||||||
|
name == "onFinishInflate"
|
||||||
|
}.hookAfter {
|
||||||
|
(it.thisObject.getObject("mIndicationText") as TextView).isSingleLine = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
private fun getCurrent(): String {
|
||||||
|
val batteryManager = AndroidAppHelper.currentApplication().getSystemService(Context.BATTERY_SERVICE) as BatteryManager
|
||||||
|
val current = abs(batteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CURRENT_NOW) / 1000)
|
||||||
|
return "${InitFields.moduleRes.getString(R.string.current_current)} ${current}mA"
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取平均电流值
|
||||||
|
* 获取 filePath 文件 totalCount 次数的平均值,每次采样间隔 intervalMs 时间
|
||||||
|
*/
|
||||||
|
private fun getMeanCurrentVal(filePath: String, totalCount: Int, intervalMs: Int): Float {
|
||||||
|
var meanVal = 0.0f
|
||||||
|
if (totalCount <= 0) {
|
||||||
|
return 0.0f
|
||||||
|
}
|
||||||
|
for (i in 0 until totalCount) {
|
||||||
|
try {
|
||||||
|
val f: Float = readFile(filePath, 0).toFloat()
|
||||||
|
meanVal += f / totalCount
|
||||||
|
} catch (e: Exception) {
|
||||||
|
e.printStackTrace()
|
||||||
|
}
|
||||||
|
if (intervalMs <= 0) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
Thread.sleep(intervalMs.toLong())
|
||||||
|
} catch (e: Exception) {
|
||||||
|
e.printStackTrace()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return meanVal
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun readFile(path: String, defaultValue: Int): Int {
|
||||||
|
try {
|
||||||
|
val bufferedReader = BufferedReader(FileReader(path))
|
||||||
|
val i: Int = bufferedReader.readLine().toInt(10)
|
||||||
|
bufferedReader.close()
|
||||||
|
return i
|
||||||
|
} catch (_: java.lang.Exception) {
|
||||||
|
}
|
||||||
|
return defaultValue
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,70 @@
|
|||||||
|
package com.lt2333.simplicitytools.hooks.rules.t.systemui
|
||||||
|
|
||||||
|
import android.app.KeyguardManager
|
||||||
|
import android.content.Context
|
||||||
|
import android.os.SystemClock
|
||||||
|
import android.view.MotionEvent
|
||||||
|
import android.view.View
|
||||||
|
import android.view.View.OnTouchListener
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.findMethod
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.hookBefore
|
||||||
|
import com.lt2333.simplicitytools.utils.hasEnable
|
||||||
|
import com.lt2333.simplicitytools.utils.xposed.base.HookRegister
|
||||||
|
import de.robv.android.xposed.XposedHelpers
|
||||||
|
import kotlin.math.abs
|
||||||
|
|
||||||
|
object LockScreenDoubleTapToSleepForT : HookRegister() {
|
||||||
|
|
||||||
|
override fun init() = hasEnable("lock_screen_double_tap_to_sleep") {
|
||||||
|
findMethod("com.android.systemui.statusbar.phone.NotificationsQuickSettingsContainer") {
|
||||||
|
name == "onFinishInflate"
|
||||||
|
}.hookBefore {
|
||||||
|
val view = it.thisObject as View
|
||||||
|
XposedHelpers.setAdditionalInstanceField(view, "currentTouchTime", 0L)
|
||||||
|
XposedHelpers.setAdditionalInstanceField(view, "currentTouchX", 0f)
|
||||||
|
XposedHelpers.setAdditionalInstanceField(view, "currentTouchY", 0f)
|
||||||
|
view.setOnTouchListener(OnTouchListener { v, event ->
|
||||||
|
if (event.action != MotionEvent.ACTION_DOWN) return@OnTouchListener false
|
||||||
|
var currentTouchTime =
|
||||||
|
XposedHelpers.getAdditionalInstanceField(view, "currentTouchTime") as Long
|
||||||
|
var currentTouchX =
|
||||||
|
XposedHelpers.getAdditionalInstanceField(view, "currentTouchX") as Float
|
||||||
|
var currentTouchY =
|
||||||
|
XposedHelpers.getAdditionalInstanceField(view, "currentTouchY") as Float
|
||||||
|
val lastTouchTime = currentTouchTime
|
||||||
|
val lastTouchX = currentTouchX
|
||||||
|
val lastTouchY = currentTouchY
|
||||||
|
currentTouchTime = System.currentTimeMillis()
|
||||||
|
currentTouchX = event.x
|
||||||
|
currentTouchY = event.y
|
||||||
|
if (currentTouchTime - lastTouchTime < 250L && abs(currentTouchX - lastTouchX) < 100f && abs(
|
||||||
|
currentTouchY - lastTouchY
|
||||||
|
) < 100f
|
||||||
|
) {
|
||||||
|
val keyguardMgr =
|
||||||
|
v.context.getSystemService(Context.KEYGUARD_SERVICE) as KeyguardManager
|
||||||
|
if (keyguardMgr.isKeyguardLocked) {
|
||||||
|
XposedHelpers.callMethod(
|
||||||
|
v.context.getSystemService(Context.POWER_SERVICE),
|
||||||
|
"goToSleep",
|
||||||
|
SystemClock.uptimeMillis()
|
||||||
|
)
|
||||||
|
}
|
||||||
|
currentTouchTime = 0L
|
||||||
|
currentTouchX = 0f
|
||||||
|
currentTouchY = 0f
|
||||||
|
}
|
||||||
|
XposedHelpers.setAdditionalInstanceField(
|
||||||
|
view,
|
||||||
|
"currentTouchTime",
|
||||||
|
currentTouchTime
|
||||||
|
)
|
||||||
|
XposedHelpers.setAdditionalInstanceField(view, "currentTouchX", currentTouchX)
|
||||||
|
XposedHelpers.setAdditionalInstanceField(view, "currentTouchY", currentTouchY)
|
||||||
|
v.performClick()
|
||||||
|
false
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
package com.lt2333.simplicitytools.hooks.rules.t.systemui
|
||||||
|
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.findMethod
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.hookReplace
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.invokeMethod
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.putObject
|
||||||
|
import com.lt2333.simplicitytools.utils.XSPUtils
|
||||||
|
import com.lt2333.simplicitytools.utils.xposed.base.HookRegister
|
||||||
|
|
||||||
|
object MaximumNumberOfNotificationIconsForT : HookRegister() {
|
||||||
|
|
||||||
|
override fun init() {
|
||||||
|
val icons = XSPUtils.getInt("maximum_number_of_notification_icons", 3)
|
||||||
|
val dots = XSPUtils.getInt("maximum_number_of_notification_dots", 3)
|
||||||
|
findMethod("com.android.systemui.statusbar.phone.NotificationIconContainer") {
|
||||||
|
name == "miuiShowNotificationIcons" && parameterCount == 1
|
||||||
|
}.hookReplace {
|
||||||
|
if (it.args[0] as Boolean) {
|
||||||
|
it.thisObject.putObject("MAX_DOTS", dots)
|
||||||
|
it.thisObject.putObject("MAX_STATIC_ICONS", icons)
|
||||||
|
it.thisObject.putObject("MAX_VISIBLE_ICONS_ON_LOCK", icons)
|
||||||
|
} else {
|
||||||
|
it.thisObject.putObject("MAX_DOTS", 0)
|
||||||
|
it.thisObject.putObject("MAX_STATIC_ICONS", 0)
|
||||||
|
it.thisObject.putObject("MAX_VISIBLE_ICONS_ON_LOCK", 0)
|
||||||
|
}
|
||||||
|
it.thisObject.invokeMethod("updateState")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,53 @@
|
|||||||
|
package com.lt2333.simplicitytools.hooks.rules.t.systemui
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint
|
||||||
|
import android.content.pm.ApplicationInfo
|
||||||
|
import android.widget.TextView
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.*
|
||||||
|
import com.lt2333.simplicitytools.utils.XSPUtils
|
||||||
|
import com.lt2333.simplicitytools.utils.hasEnable
|
||||||
|
import com.lt2333.simplicitytools.utils.xposed.base.HookRegister
|
||||||
|
import com.lt2333.simplicitytools.views.WeatherData
|
||||||
|
|
||||||
|
|
||||||
|
@SuppressLint("StaticFieldLeak")
|
||||||
|
object NewNotificationWeatherForT : HookRegister() {
|
||||||
|
// TODO: Android13控制中心天气不可用
|
||||||
|
lateinit var weather: WeatherData
|
||||||
|
var clockId: Int = -2
|
||||||
|
|
||||||
|
@SuppressLint("DiscouragedApi", "ClickableViewAccessibility")
|
||||||
|
override fun init() = hasEnable("control_center_weather") {
|
||||||
|
val isDisplayCity = XSPUtils.getBoolean("notification_weather_city", false)
|
||||||
|
findMethod("com.android.systemui.controlcenter.phone.widget.ControlCenterDateView", findSuper = true) { name == "onDetachedFromWindow" }.hookBefore {
|
||||||
|
if ((it.thisObject as TextView).id == clockId && this::weather.isInitialized) {
|
||||||
|
weather.onDetachedFromWindow()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
findMethod("com.android.systemui.controlcenter.phone.widget.ControlCenterDateView", findSuper = true) { name == "setText" }.hookBefore {
|
||||||
|
val time = it.args[0]?.toString()
|
||||||
|
val view = it.thisObject as TextView
|
||||||
|
if (view.id == clockId && time != null && this::weather.isInitialized) {
|
||||||
|
// val layout = view.layoutParams as ViewGroup.MarginLayoutParams
|
||||||
|
// val y = view.height / 2
|
||||||
|
// layout.topMargin = -y
|
||||||
|
it.args[0] = "${weather.weatherData}$time"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
findMethod("com.android.systemui.shared.plugins.PluginManagerImpl") { name == "getClassLoader" }.hookAfter { getClassLoader ->
|
||||||
|
val appInfo = getClassLoader.args[0] as ApplicationInfo
|
||||||
|
val classLoader = getClassLoader.result as ClassLoader
|
||||||
|
if (appInfo.packageName == "miui.systemui.plugin") {
|
||||||
|
findMethod("miui.systemui.controlcenter.windowview.MainPanelHeaderController", classLoader = classLoader) { name == "addClockViews" }.hookAfter {
|
||||||
|
val dateView = it.thisObject.getObjectAs<TextView>("dateView")
|
||||||
|
clockId = dateView.id
|
||||||
|
weather = WeatherData(dateView.context, isDisplayCity)
|
||||||
|
weather.callBacks = {
|
||||||
|
dateView.invokeMethod("updateTime")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,201 @@
|
|||||||
|
package com.lt2333.simplicitytools.hooks.rules.t.systemui
|
||||||
|
|
||||||
|
import android.content.ComponentName
|
||||||
|
import android.content.Intent
|
||||||
|
import android.view.View
|
||||||
|
import android.view.ViewGroup
|
||||||
|
import android.widget.LinearLayout
|
||||||
|
import android.widget.TextView
|
||||||
|
import android.widget.Toast
|
||||||
|
import androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
import cn.fkj233.ui.activity.dp2px
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.*
|
||||||
|
import com.lt2333.simplicitytools.utils.SystemProperties
|
||||||
|
import com.lt2333.simplicitytools.utils.XSPUtils
|
||||||
|
import com.lt2333.simplicitytools.utils.hasEnable
|
||||||
|
import com.lt2333.simplicitytools.utils.xposed.base.HookRegister
|
||||||
|
import com.lt2333.simplicitytools.views.WeatherView
|
||||||
|
|
||||||
|
object NotificationWeatherForT : HookRegister() {
|
||||||
|
|
||||||
|
override fun init() = hasEnable("notification_weather") {
|
||||||
|
var mWeatherView: TextView? = null
|
||||||
|
var mConstraintLayout: ConstraintLayout? = null
|
||||||
|
val isDisplayCity = XSPUtils.getBoolean("notification_weather_city", false)
|
||||||
|
findMethod("com.android.systemui.qs.MiuiNotificationHeaderView") {
|
||||||
|
name == "onFinishInflate"
|
||||||
|
}.hookAfter { param ->
|
||||||
|
val viewGroup = param.thisObject as ViewGroup
|
||||||
|
val context = viewGroup.context
|
||||||
|
|
||||||
|
// MIUI编译时间大于 2022-03-12 00:00:00 且为内测版
|
||||||
|
if (SystemProperties[context, "ro.build.date.utc"].toInt() >= 1647014400 &&
|
||||||
|
!SystemProperties[context, "ro.build.version.incremental"].endsWith("XM")
|
||||||
|
) {
|
||||||
|
//获取原组件
|
||||||
|
val bigTimeId =
|
||||||
|
context.resources.getIdentifier("big_time", "id", context.packageName)
|
||||||
|
val bigTime: TextView = viewGroup.findViewById(bigTimeId)
|
||||||
|
|
||||||
|
val dateTimeId =
|
||||||
|
context.resources.getIdentifier("date_time", "id", context.packageName)
|
||||||
|
val dateTime: TextView = viewGroup.findViewById(dateTimeId)
|
||||||
|
|
||||||
|
//创建新布局
|
||||||
|
val mConstraintLayoutLp = LinearLayout.LayoutParams(
|
||||||
|
LinearLayout.LayoutParams.MATCH_PARENT,
|
||||||
|
LinearLayout.LayoutParams.WRAP_CONTENT
|
||||||
|
).also {
|
||||||
|
it.topMargin = context.resources.getDimensionPixelSize(
|
||||||
|
context.resources.getIdentifier(
|
||||||
|
"qs_control_header_tiles_margin_top",
|
||||||
|
"dimen",
|
||||||
|
context.packageName
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
mConstraintLayout =
|
||||||
|
ConstraintLayout(context).also { it.layoutParams = mConstraintLayoutLp }
|
||||||
|
|
||||||
|
(bigTime.parent as ViewGroup).addView(mConstraintLayout, 0)
|
||||||
|
|
||||||
|
|
||||||
|
//从原布局中删除组件
|
||||||
|
(bigTime.parent as ViewGroup).removeView(bigTime)
|
||||||
|
(dateTime.parent as ViewGroup).removeView(dateTime)
|
||||||
|
|
||||||
|
|
||||||
|
//添加组件至新布局
|
||||||
|
mConstraintLayout!!.addView(bigTime)
|
||||||
|
mConstraintLayout!!.addView(dateTime)
|
||||||
|
|
||||||
|
//组件属性
|
||||||
|
|
||||||
|
val dateTimeLp = ConstraintLayout.LayoutParams(
|
||||||
|
ConstraintLayout.LayoutParams.WRAP_CONTENT,
|
||||||
|
ConstraintLayout.LayoutParams.WRAP_CONTENT
|
||||||
|
).also {
|
||||||
|
it.startToEnd = bigTimeId
|
||||||
|
it.bottomToBottom = 0
|
||||||
|
it.marginStart = context.resources.getDimensionPixelSize(
|
||||||
|
context.resources.getIdentifier(
|
||||||
|
"notification_panel_time_date_space",
|
||||||
|
"dimen",
|
||||||
|
context.packageName
|
||||||
|
)
|
||||||
|
)
|
||||||
|
it.bottomMargin = dp2px(context, 5f)
|
||||||
|
}
|
||||||
|
dateTime.layoutParams = dateTimeLp
|
||||||
|
|
||||||
|
|
||||||
|
//创建天气组件
|
||||||
|
mWeatherView = WeatherView(context, isDisplayCity).apply {
|
||||||
|
setTextAppearance(
|
||||||
|
context.resources.getIdentifier(
|
||||||
|
"TextAppearance.QSControl.Date",
|
||||||
|
"style",
|
||||||
|
context.packageName
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
}
|
||||||
|
mConstraintLayout!!.addView(mWeatherView)
|
||||||
|
|
||||||
|
val mweatherviewLp = ConstraintLayout.LayoutParams(
|
||||||
|
ConstraintLayout.LayoutParams.WRAP_CONTENT,
|
||||||
|
ConstraintLayout.LayoutParams.WRAP_CONTENT
|
||||||
|
).also {
|
||||||
|
it.startToEnd = bigTimeId
|
||||||
|
it.bottomToTop = dateTimeId
|
||||||
|
it.marginStart = context.resources.getDimensionPixelSize(
|
||||||
|
context.resources.getIdentifier(
|
||||||
|
"notification_panel_time_date_space",
|
||||||
|
"dimen",
|
||||||
|
context.packageName
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
(mWeatherView as WeatherView).layoutParams = mweatherviewLp
|
||||||
|
|
||||||
|
} else {
|
||||||
|
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.putObject(
|
||||||
|
"bottomToTop",
|
||||||
|
context.resources.getIdentifier("date_time", "id", context.packageName)
|
||||||
|
)
|
||||||
|
layoutParam.putObject(
|
||||||
|
"startToEnd",
|
||||||
|
context.resources.getIdentifier("big_time", "id", context.packageName)
|
||||||
|
)
|
||||||
|
layoutParam.marginStart = context.resources.getDimensionPixelSize(
|
||||||
|
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()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
findMethod("com.android.systemui.qs.MiuiNotificationHeaderView") {
|
||||||
|
name == "updateLayout"
|
||||||
|
}.hookAfter {
|
||||||
|
val viewGroup = it.thisObject as ViewGroup
|
||||||
|
val context = viewGroup.context
|
||||||
|
val mOrientation = viewGroup.getObject("mOrientation") as Int
|
||||||
|
// MIUI编译时间大于 2022-03-12 00:00:00 且为内测版
|
||||||
|
if (SystemProperties[context, "ro.build.date.utc"]!!.toInt() >= 1647014400 && !SystemProperties[context, "ro.build.version.incremental"]!!.endsWith(
|
||||||
|
"DEV"
|
||||||
|
) && !SystemProperties[context, "ro.build.version.incremental"]!!.endsWith("XM")
|
||||||
|
) {
|
||||||
|
if (mOrientation == 1) {
|
||||||
|
mConstraintLayout!!.visibility = View.VISIBLE
|
||||||
|
} else {
|
||||||
|
mConstraintLayout!!.visibility = View.GONE
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (mOrientation == 1) {
|
||||||
|
mWeatherView!!.visibility = View.VISIBLE
|
||||||
|
} else {
|
||||||
|
mWeatherView!!.visibility = View.GONE
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,98 @@
|
|||||||
|
package com.lt2333.simplicitytools.hooks.rules.t.systemui
|
||||||
|
|
||||||
|
import android.content.ComponentName
|
||||||
|
import android.content.Intent
|
||||||
|
import android.view.View
|
||||||
|
import android.view.ViewGroup
|
||||||
|
import android.widget.TextView
|
||||||
|
import android.widget.Toast
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.*
|
||||||
|
import com.lt2333.simplicitytools.utils.XSPUtils
|
||||||
|
import com.lt2333.simplicitytools.utils.hasEnable
|
||||||
|
import com.lt2333.simplicitytools.utils.xposed.base.HookRegister
|
||||||
|
import com.lt2333.simplicitytools.views.WeatherView
|
||||||
|
|
||||||
|
object OldNotificationWeatherForT : HookRegister() {
|
||||||
|
|
||||||
|
override fun init() = hasEnable("notification_weather") {
|
||||||
|
var mWeatherView: TextView? = null
|
||||||
|
val isDisplayCity = XSPUtils.getBoolean("notification_weather_city", false)
|
||||||
|
findMethod("com.android.systemui.qs.MiuiQSHeaderView") {
|
||||||
|
name == "onFinishInflate"
|
||||||
|
}.hookAfter {
|
||||||
|
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.putObject(
|
||||||
|
"endToStart",
|
||||||
|
context.resources.getIdentifier(
|
||||||
|
"notification_shade_shortcut",
|
||||||
|
"id",
|
||||||
|
context.packageName
|
||||||
|
)
|
||||||
|
)
|
||||||
|
layoutParam.putObject(
|
||||||
|
"topToTop",
|
||||||
|
context.resources.getIdentifier(
|
||||||
|
"notification_shade_shortcut",
|
||||||
|
"id",
|
||||||
|
context.packageName
|
||||||
|
)
|
||||||
|
)
|
||||||
|
layoutParam.putObject(
|
||||||
|
"bottomToBottom",
|
||||||
|
context.resources.getIdentifier(
|
||||||
|
"notification_shade_shortcut",
|
||||||
|
"id",
|
||||||
|
context.packageName
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
mWeatherView = WeatherView(context, isDisplayCity).apply {
|
||||||
|
setTextAppearance(
|
||||||
|
context.resources.getIdentifier(
|
||||||
|
"TextAppearance.StatusBar.Expanded.Clock.QuickSettingDate",
|
||||||
|
"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()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//解决横屏重叠
|
||||||
|
findMethod("com.android.systemui.qs.MiuiQSHeaderView") {
|
||||||
|
name == "updateLayout"
|
||||||
|
}.hookAfter {
|
||||||
|
val mOritation = it.thisObject.getObject("mOrientation") as Int
|
||||||
|
if (mOritation == 1) {
|
||||||
|
mWeatherView!!.visibility = View.VISIBLE
|
||||||
|
} else {
|
||||||
|
mWeatherView!!.visibility = View.GONE
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
package com.lt2333.simplicitytools.hooks.rules.t.systemui
|
||||||
|
|
||||||
|
import android.content.res.Configuration
|
||||||
|
import android.view.ViewGroup
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.findMethod
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.hookAfter
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.hookBefore
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.putObject
|
||||||
|
import com.lt2333.simplicitytools.utils.XSPUtils
|
||||||
|
import com.lt2333.simplicitytools.utils.hasEnable
|
||||||
|
import com.lt2333.simplicitytools.utils.xposed.base.HookRegister
|
||||||
|
|
||||||
|
object OldQSCustomForT : HookRegister() {
|
||||||
|
|
||||||
|
override fun init() = hasEnable("old_qs_custom_switch") {
|
||||||
|
val mRows = XSPUtils.getInt("qs_custom_rows", 3)
|
||||||
|
val mRowsHorizontal = XSPUtils.getInt("qs_custom_rows_horizontal", 2)
|
||||||
|
val mColumns = XSPUtils.getInt("qs_custom_columns", 4)
|
||||||
|
val mColumnsUnexpanded = XSPUtils.getInt("qs_custom_columns_unexpanded", 5)
|
||||||
|
|
||||||
|
findMethod("com.android.systemui.qs.MiuiQuickQSPanel") {
|
||||||
|
name == "setMaxTiles" && parameterCount == 1
|
||||||
|
}.hookBefore {
|
||||||
|
//未展开时的列数
|
||||||
|
it.args[0] = mColumnsUnexpanded
|
||||||
|
}
|
||||||
|
|
||||||
|
findMethod("com.android.systemui.qs.MiuiTileLayout") {
|
||||||
|
name == "updateColumns"
|
||||||
|
}.hookAfter {
|
||||||
|
//展开时的列数
|
||||||
|
it.thisObject.putObject("mColumns", mColumns)
|
||||||
|
}
|
||||||
|
|
||||||
|
findMethod("com.android.systemui.qs.MiuiTileLayout") {
|
||||||
|
name == "updateResources"
|
||||||
|
}.hookAfter {
|
||||||
|
//展开时的行数
|
||||||
|
val viewGroup = it.thisObject as ViewGroup
|
||||||
|
val mConfiguration: Configuration = viewGroup.context.resources.configuration
|
||||||
|
if (mConfiguration.orientation == Configuration.ORIENTATION_PORTRAIT) {
|
||||||
|
viewGroup.putObject("mMaxAllowedRows", mRows)
|
||||||
|
} else {
|
||||||
|
viewGroup.putObject("mMaxAllowedRows", mRowsHorizontal)
|
||||||
|
}
|
||||||
|
viewGroup.requestLayout()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
package com.lt2333.simplicitytools.hooks.rules.t.systemui
|
||||||
|
|
||||||
|
import android.view.View
|
||||||
|
import android.widget.LinearLayout
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.findMethod
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.getObject
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.hookAfter
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.hookBefore
|
||||||
|
import com.lt2333.simplicitytools.utils.hasEnable
|
||||||
|
import com.lt2333.simplicitytools.utils.xposed.base.HookRegister
|
||||||
|
|
||||||
|
object RemoveLockScreenCameraForT : HookRegister() {
|
||||||
|
|
||||||
|
override fun init() {
|
||||||
|
//屏蔽右下角组件显示
|
||||||
|
findMethod("com.android.systemui.statusbar.phone.KeyguardBottomAreaView") {
|
||||||
|
name == "onFinishInflate"
|
||||||
|
}.hookAfter {
|
||||||
|
hasEnable("remove_lock_screen_camera") {
|
||||||
|
(it.thisObject.getObject("mRightAffordanceViewLayout") as LinearLayout).visibility =
|
||||||
|
View.GONE
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//屏蔽滑动撞墙动画
|
||||||
|
findMethod("com.android.keyguard.KeyguardMoveRightController") {
|
||||||
|
name == "onTouchMove" && parameterCount == 2
|
||||||
|
}.hookBefore {
|
||||||
|
hasEnable("remove_lock_screen_camera") {
|
||||||
|
it.result = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
findMethod("com.android.keyguard.KeyguardMoveRightController") {
|
||||||
|
name == "reset"
|
||||||
|
}.hookBefore {
|
||||||
|
hasEnable("remove_lock_screen_camera") {
|
||||||
|
it.result = null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
package com.lt2333.simplicitytools.hooks.rules.t.systemui
|
||||||
|
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.findMethod
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.hookBefore
|
||||||
|
import com.lt2333.simplicitytools.utils.hasEnable
|
||||||
|
import com.lt2333.simplicitytools.utils.xposed.base.HookRegister
|
||||||
|
|
||||||
|
object RemoveTheLeftSideOfTheLockScreenForT : HookRegister() {
|
||||||
|
|
||||||
|
override fun init() {
|
||||||
|
findMethod("com.android.keyguard.negative.MiuiKeyguardMoveLeftViewContainer") {
|
||||||
|
name == "inflateLeftView"
|
||||||
|
}.hookBefore {
|
||||||
|
hasEnable("remove_the_left_side_of_the_lock_screen") {
|
||||||
|
it.result = null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
package com.lt2333.simplicitytools.hooks.rules.t.systemui
|
||||||
|
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.findMethod
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.getObjectAs
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.hookBefore
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.putObject
|
||||||
|
import com.lt2333.simplicitytools.utils.hasEnable
|
||||||
|
import com.lt2333.simplicitytools.utils.xposed.base.HookRegister
|
||||||
|
|
||||||
|
object ShowWifiStandardForT : HookRegister() {
|
||||||
|
|
||||||
|
override fun init() {
|
||||||
|
findMethod("com.android.systemui.statusbar.StatusBarWifiView") {
|
||||||
|
name == "initViewState" && parameterCount == 1
|
||||||
|
}.hookBefore {
|
||||||
|
hasEnable("show_wifi_standard") {
|
||||||
|
findMethod("com.android.systemui.statusbar.phone.StatusBarSignalPolicy\$WifiIconState") {
|
||||||
|
name == "copyTo" && parameterCount == 1
|
||||||
|
}.hookBefore {
|
||||||
|
val wifiStandard = it.thisObject.getObjectAs<Int>("wifiStandard")
|
||||||
|
it.thisObject.putObject("showWifiStandard", wifiStandard != 0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
findMethod("com.android.systemui.statusbar.StatusBarWifiView") {
|
||||||
|
name == "updateState" && parameterCount == 1
|
||||||
|
}.hookBefore {
|
||||||
|
hasEnable("show_wifi_standard") {
|
||||||
|
findMethod("com.android.systemui.statusbar.phone.StatusBarSignalPolicy\$WifiIconState") {
|
||||||
|
name == "copyTo" && parameterCount == 1
|
||||||
|
}.hookBefore {
|
||||||
|
val wifiStandard = it.thisObject.getObjectAs<Int>("wifiStandard")
|
||||||
|
it.thisObject.putObject("showWifiStandard", wifiStandard != 0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,89 @@
|
|||||||
|
package com.lt2333.simplicitytools.hooks.rules.t.systemui
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import android.content.res.Resources
|
||||||
|
import android.graphics.Typeface
|
||||||
|
import android.view.View
|
||||||
|
import android.view.ViewGroup
|
||||||
|
import android.widget.TextView
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.*
|
||||||
|
import com.lt2333.simplicitytools.utils.XSPUtils
|
||||||
|
import com.lt2333.simplicitytools.utils.hasEnable
|
||||||
|
import com.lt2333.simplicitytools.utils.xposed.base.HookRegister
|
||||||
|
|
||||||
|
|
||||||
|
object StatusBarBigMobileTypeIconForT : HookRegister() {
|
||||||
|
|
||||||
|
private val getLocation = XSPUtils.getInt("big_mobile_type_location", 1)
|
||||||
|
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)
|
||||||
|
private val isOnlyShowNetwork = XSPUtils.getBoolean("big_mobile_type_only_show_network_card", false)
|
||||||
|
|
||||||
|
override fun init() = hasEnable("big_mobile_type_icon") {
|
||||||
|
//使网络类型单独显示
|
||||||
|
findMethod("com.android.systemui.statusbar.StatusBarMobileView") {
|
||||||
|
name == "applyMobileState"
|
||||||
|
}.hookBefore {
|
||||||
|
val mobileIconState = it.args[0]
|
||||||
|
mobileIconState.putObject("showMobileDataTypeSingle", true)
|
||||||
|
}
|
||||||
|
|
||||||
|
findMethod("com.android.systemui.statusbar.StatusBarMobileView") {
|
||||||
|
name == "initViewState"
|
||||||
|
}.hookAfter {
|
||||||
|
val mobileIconState = it.args[0]
|
||||||
|
val statusBarMobileView = it.thisObject as ViewGroup
|
||||||
|
val context: Context = statusBarMobileView.context
|
||||||
|
val res: Resources = context.resources
|
||||||
|
|
||||||
|
//获取组件
|
||||||
|
val mobileContainerLeftId: Int = res.getIdentifier("mobile_container_left", "id", "com.android.systemui")
|
||||||
|
val mobileContainerLeft = statusBarMobileView.findViewById<ViewGroup>(mobileContainerLeftId)
|
||||||
|
|
||||||
|
val mobileGroupId: Int = res.getIdentifier("mobile_group", "id", "com.android.systemui")
|
||||||
|
val mobileGroup = statusBarMobileView.findViewById<ViewGroup>(mobileGroupId)
|
||||||
|
|
||||||
|
val mobileTypeSingleId: Int = res.getIdentifier("mobile_type_single", "id", "com.android.systemui")
|
||||||
|
val mobileTypeSingle = statusBarMobileView.findViewById<TextView>(mobileTypeSingleId)
|
||||||
|
|
||||||
|
//更改顺序
|
||||||
|
if (getLocation == 1) {
|
||||||
|
mobileGroup.removeView(mobileTypeSingle)
|
||||||
|
mobileGroup.addView(mobileTypeSingle)
|
||||||
|
mobileGroup.removeView(mobileContainerLeft)
|
||||||
|
mobileGroup.addView(mobileContainerLeft)
|
||||||
|
}
|
||||||
|
|
||||||
|
//更改样式
|
||||||
|
mobileTypeSingle.textSize = size
|
||||||
|
if (isBold) {
|
||||||
|
mobileTypeSingle.typeface = Typeface.DEFAULT_BOLD
|
||||||
|
}
|
||||||
|
mobileTypeSingle.setPadding(
|
||||||
|
leftAndRightMargin, upAndDownPosition, leftAndRightMargin, 0
|
||||||
|
)
|
||||||
|
|
||||||
|
it.thisObject.invokeMethodAuto("updateState",mobileIconState)
|
||||||
|
}
|
||||||
|
//显示非上网卡的大图标
|
||||||
|
if (!isOnlyShowNetwork) {
|
||||||
|
findMethod("com.android.systemui.statusbar.StatusBarMobileView") {
|
||||||
|
name == "updateState"
|
||||||
|
}.hookAfter {
|
||||||
|
val mobileIconState = it.args[0]
|
||||||
|
val statusBarMobileView = it.thisObject as ViewGroup
|
||||||
|
val context: Context = statusBarMobileView.context
|
||||||
|
val res: Resources = context.resources
|
||||||
|
|
||||||
|
val mobileTypeSingleId: Int = res.getIdentifier("mobile_type_single", "id", "com.android.systemui")
|
||||||
|
val mobileTypeSingle = statusBarMobileView.findViewById<TextView>(mobileTypeSingleId)
|
||||||
|
|
||||||
|
if (!mobileIconState.getObjectAs<Boolean>("dataConnected") && !mobileIconState.getObjectAs<Boolean>("wifiAvailable")) {
|
||||||
|
mobileTypeSingle.visibility = View.VISIBLE
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,65 @@
|
|||||||
|
package com.lt2333.simplicitytools.hooks.rules.t.systemui
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import android.os.SystemClock
|
||||||
|
import android.view.MotionEvent
|
||||||
|
import android.view.View.OnTouchListener
|
||||||
|
import android.view.ViewGroup
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.findMethod
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.hookBefore
|
||||||
|
import com.lt2333.simplicitytools.utils.hasEnable
|
||||||
|
import com.lt2333.simplicitytools.utils.xposed.base.HookRegister
|
||||||
|
import de.robv.android.xposed.XposedHelpers
|
||||||
|
import kotlin.math.abs
|
||||||
|
|
||||||
|
object StatusBarDoubleTapToSleepForT : HookRegister() {
|
||||||
|
|
||||||
|
override fun init() = hasEnable("status_bar_double_tap_to_sleep") {
|
||||||
|
findMethod("com.android.systemui.statusbar.phone.MiuiPhoneStatusBarView") {
|
||||||
|
name == "onFinishInflate"
|
||||||
|
}.hookBefore {
|
||||||
|
val view = it.thisObject as ViewGroup
|
||||||
|
XposedHelpers.setAdditionalInstanceField(view, "currentTouchTime", 0L)
|
||||||
|
XposedHelpers.setAdditionalInstanceField(view, "currentTouchX", 0f)
|
||||||
|
XposedHelpers.setAdditionalInstanceField(view, "currentTouchY", 0f)
|
||||||
|
view.setOnTouchListener(OnTouchListener { v, event ->
|
||||||
|
if (event.action != MotionEvent.ACTION_DOWN) return@OnTouchListener false
|
||||||
|
var currentTouchTime =
|
||||||
|
XposedHelpers.getAdditionalInstanceField(view, "currentTouchTime") as Long
|
||||||
|
var currentTouchX =
|
||||||
|
XposedHelpers.getAdditionalInstanceField(view, "currentTouchX") as Float
|
||||||
|
var currentTouchY =
|
||||||
|
XposedHelpers.getAdditionalInstanceField(view, "currentTouchY") as Float
|
||||||
|
val lastTouchTime = currentTouchTime
|
||||||
|
val lastTouchX = currentTouchX
|
||||||
|
val lastTouchY = currentTouchY
|
||||||
|
currentTouchTime = System.currentTimeMillis()
|
||||||
|
currentTouchX = event.x
|
||||||
|
currentTouchY = event.y
|
||||||
|
if (currentTouchTime - lastTouchTime < 250L && abs(currentTouchX - lastTouchX) < 100f && abs(
|
||||||
|
currentTouchY - lastTouchY
|
||||||
|
) < 100f
|
||||||
|
) {
|
||||||
|
XposedHelpers.callMethod(
|
||||||
|
v.context.getSystemService(Context.POWER_SERVICE),
|
||||||
|
"goToSleep",
|
||||||
|
SystemClock.uptimeMillis()
|
||||||
|
)
|
||||||
|
currentTouchTime = 0L
|
||||||
|
currentTouchX = 0f
|
||||||
|
currentTouchY = 0f
|
||||||
|
}
|
||||||
|
XposedHelpers.setAdditionalInstanceField(
|
||||||
|
view,
|
||||||
|
"currentTouchTime",
|
||||||
|
currentTouchTime
|
||||||
|
)
|
||||||
|
XposedHelpers.setAdditionalInstanceField(view, "currentTouchX", currentTouchX)
|
||||||
|
XposedHelpers.setAdditionalInstanceField(view, "currentTouchY", currentTouchY)
|
||||||
|
v.performClick()
|
||||||
|
false
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,391 @@
|
|||||||
|
package com.lt2333.simplicitytools.hooks.rules.t.systemui
|
||||||
|
|
||||||
|
import android.app.KeyguardManager
|
||||||
|
import android.content.Context
|
||||||
|
import android.content.res.Configuration
|
||||||
|
import android.content.res.Resources
|
||||||
|
import android.view.Gravity
|
||||||
|
import android.view.View
|
||||||
|
import android.view.ViewGroup
|
||||||
|
import android.widget.LinearLayout
|
||||||
|
import android.widget.TextView
|
||||||
|
import androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
import cn.fkj233.ui.activity.dp2px
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.*
|
||||||
|
import com.lt2333.simplicitytools.utils.XSPUtils
|
||||||
|
import com.lt2333.simplicitytools.utils.hasEnable
|
||||||
|
import com.lt2333.simplicitytools.utils.xposed.base.HookRegister
|
||||||
|
|
||||||
|
|
||||||
|
object StatusBarLayoutForT : HookRegister() {
|
||||||
|
|
||||||
|
private val getMode = XSPUtils.getInt("status_bar_layout_mode", 0)
|
||||||
|
private val isCompatibilityMode = XSPUtils.getBoolean("layout_compatibility_mode", false)
|
||||||
|
|
||||||
|
private var statusBarLeft = 0
|
||||||
|
private var statusBarTop = 0
|
||||||
|
private var statusBarRight = 0
|
||||||
|
private var statusBarBottom = 0
|
||||||
|
|
||||||
|
override fun init() {
|
||||||
|
|
||||||
|
// TODO: Android13状态栏布局不可用
|
||||||
|
|
||||||
|
var mLeftLayout: LinearLayout? = null
|
||||||
|
var mRightLayout: LinearLayout? = null
|
||||||
|
var mCenterLayout: LinearLayout?
|
||||||
|
var statusBar: ViewGroup? = null
|
||||||
|
|
||||||
|
fun updateLayout(context: Context) {
|
||||||
|
//判断屏幕方向
|
||||||
|
val mConfiguration: Configuration = context.resources.configuration
|
||||||
|
if (mConfiguration.orientation == Configuration.ORIENTATION_PORTRAIT) {
|
||||||
|
mLeftLayout!!.setPadding(statusBarLeft, 0, 0, 0)
|
||||||
|
mRightLayout!!.setPadding(0, 0, statusBarRight, 0)
|
||||||
|
statusBar!!.setPadding(0, statusBarTop, 0, statusBarBottom)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//判断是否开启挖孔兼容模式
|
||||||
|
if (isCompatibilityMode) {
|
||||||
|
findMethod("com.android.systemui.ScreenDecorations") {
|
||||||
|
name == "boundsFromDirection" && parameterCount == 3 && isStatic
|
||||||
|
}.hookBefore {
|
||||||
|
it.args[1] = 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
when (getMode) {
|
||||||
|
//默认
|
||||||
|
0 -> return
|
||||||
|
//时钟居中
|
||||||
|
1 -> {
|
||||||
|
findMethod("com.android.systemui.statusbar.phone.fragment.CollapsedStatusBarFragment") {
|
||||||
|
name == "onViewCreated" && parameterCount == 2
|
||||||
|
}.hookAfter { param ->
|
||||||
|
val miuiPhoneStatusBarView = param.thisObject.getObjectAs<ViewGroup>("mStatusBar")
|
||||||
|
val context: Context = miuiPhoneStatusBarView.context
|
||||||
|
val res: Resources = miuiPhoneStatusBarView.resources
|
||||||
|
val statusBarId: Int = res.getIdentifier("status_bar", "id", "com.android.systemui")
|
||||||
|
val statusBarContentsId: Int = res.getIdentifier(
|
||||||
|
"status_bar_contents", "id", "com.android.systemui"
|
||||||
|
)
|
||||||
|
val systemIconAreaId: Int = res.getIdentifier("system_icon_area", "id", "com.android.systemui")
|
||||||
|
val clockId: Int = res.getIdentifier("clock", "id", "com.android.systemui")
|
||||||
|
val phoneStatusBarLeftContainerId: Int = res.getIdentifier(
|
||||||
|
"phone_status_bar_left_container", "id", "com.android.systemui"
|
||||||
|
)
|
||||||
|
val notificationIconAreaInnerId: Int = res.getIdentifier(
|
||||||
|
"notification_icon_area_inner", "id", "com.android.systemui"
|
||||||
|
)
|
||||||
|
statusBar = miuiPhoneStatusBarView.findViewById(statusBarId)
|
||||||
|
val statusBarContents: ViewGroup = miuiPhoneStatusBarView.findViewById(statusBarContentsId)
|
||||||
|
if (statusBar == null) return@hookAfter
|
||||||
|
val clock: TextView = miuiPhoneStatusBarView.findViewById(clockId)
|
||||||
|
val phoneStatusBarLeftContainer: ViewGroup = miuiPhoneStatusBarView.findViewById(
|
||||||
|
phoneStatusBarLeftContainerId
|
||||||
|
)
|
||||||
|
val notificationIconAreaInner: ViewGroup = miuiPhoneStatusBarView.findViewById(
|
||||||
|
notificationIconAreaInnerId
|
||||||
|
)
|
||||||
|
val systemIconArea: ViewGroup = miuiPhoneStatusBarView.findViewById(systemIconAreaId)
|
||||||
|
|
||||||
|
(clock.parent as ViewGroup).removeView(clock)
|
||||||
|
(phoneStatusBarLeftContainer.parent as ViewGroup).removeView(
|
||||||
|
phoneStatusBarLeftContainer
|
||||||
|
)
|
||||||
|
(notificationIconAreaInner.parent as ViewGroup).removeView(
|
||||||
|
notificationIconAreaInner
|
||||||
|
)
|
||||||
|
(systemIconArea.parent as ViewGroup).removeView(systemIconArea)
|
||||||
|
|
||||||
|
val mConstraintLayout = ConstraintLayout(context).also {
|
||||||
|
it.layoutParams = ConstraintLayout.LayoutParams(
|
||||||
|
ConstraintLayout.LayoutParams.MATCH_PARENT, ConstraintLayout.LayoutParams.MATCH_PARENT
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
mConstraintLayout.addView(notificationIconAreaInner)
|
||||||
|
|
||||||
|
val fullscreenNotificationIconAreaLp = LinearLayout.LayoutParams(
|
||||||
|
ConstraintLayout.LayoutParams.MATCH_PARENT, ConstraintLayout.LayoutParams.MATCH_PARENT
|
||||||
|
)
|
||||||
|
|
||||||
|
notificationIconAreaInner.layoutParams = fullscreenNotificationIconAreaLp
|
||||||
|
|
||||||
|
//增加一个左对齐布局
|
||||||
|
mLeftLayout = LinearLayout(context)
|
||||||
|
val leftLp: LinearLayout.LayoutParams = LinearLayout.LayoutParams(
|
||||||
|
0, LinearLayout.LayoutParams.MATCH_PARENT, 1.0f
|
||||||
|
)
|
||||||
|
mLeftLayout!!.layoutParams = leftLp
|
||||||
|
mLeftLayout!!.gravity = Gravity.START or Gravity.CENTER_VERTICAL
|
||||||
|
|
||||||
|
//增加一个居中布局
|
||||||
|
mCenterLayout = LinearLayout(context)
|
||||||
|
val centerLp: LinearLayout.LayoutParams = LinearLayout.LayoutParams(
|
||||||
|
LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.MATCH_PARENT
|
||||||
|
)
|
||||||
|
mCenterLayout!!.layoutParams = centerLp
|
||||||
|
mCenterLayout!!.gravity = Gravity.CENTER or Gravity.CENTER_VERTICAL
|
||||||
|
mRightLayout = LinearLayout(context)
|
||||||
|
val rightLp: LinearLayout.LayoutParams = LinearLayout.LayoutParams(
|
||||||
|
0, LinearLayout.LayoutParams.MATCH_PARENT, 1.0f
|
||||||
|
)
|
||||||
|
mRightLayout!!.layoutParams = rightLp
|
||||||
|
mRightLayout!!.gravity = Gravity.END or Gravity.CENTER_VERTICAL
|
||||||
|
mLeftLayout!!.addView(phoneStatusBarLeftContainer)
|
||||||
|
mLeftLayout!!.addView(mConstraintLayout)
|
||||||
|
|
||||||
|
mCenterLayout!!.addView(clock)
|
||||||
|
mRightLayout!!.addView(systemIconArea)
|
||||||
|
statusBarContents.addView(mLeftLayout, 0)
|
||||||
|
statusBarContents.addView(mCenterLayout)
|
||||||
|
statusBarContents.addView(mRightLayout)
|
||||||
|
|
||||||
|
statusBarLeft = statusBar!!.paddingLeft
|
||||||
|
statusBarTop = statusBar!!.paddingTop
|
||||||
|
statusBarRight = statusBar!!.paddingRight
|
||||||
|
statusBarBottom = statusBar!!.paddingBottom
|
||||||
|
|
||||||
|
|
||||||
|
if (isCompatibilityMode) {
|
||||||
|
val customLeftMargin = XSPUtils.getInt("status_bar_left_margin", 0)
|
||||||
|
if (customLeftMargin != 0) {
|
||||||
|
statusBarLeft = customLeftMargin
|
||||||
|
}
|
||||||
|
|
||||||
|
val customRightMargin = XSPUtils.getInt("status_bar_right_margin", 0)
|
||||||
|
if (customRightMargin != 0) {
|
||||||
|
statusBarRight = customRightMargin
|
||||||
|
}
|
||||||
|
updateLayout(context)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
findMethod("com.android.systemui.statusbar.phone.PhoneStatusBarView") {
|
||||||
|
name == "updateLayoutForCutout"
|
||||||
|
}.hookAfter {
|
||||||
|
hasEnable("layout_compatibility_mode") {
|
||||||
|
val context = (it.thisObject as ViewGroup).context
|
||||||
|
updateLayout(context)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//时钟居右
|
||||||
|
2 -> {
|
||||||
|
findMethod("com.android.systemui.statusbar.phone.fragment.CollapsedStatusBarFragment") {
|
||||||
|
name == "onViewCreated" && parameterCount == 2
|
||||||
|
}.hookAfter { param ->
|
||||||
|
val miuiPhoneStatusBarView = param.thisObject.getObjectAs<ViewGroup>("mStatusBar")
|
||||||
|
val context: Context = miuiPhoneStatusBarView.context
|
||||||
|
val res: Resources = miuiPhoneStatusBarView.resources
|
||||||
|
|
||||||
|
//组件ID
|
||||||
|
val statusBarId: Int = res.getIdentifier("status_bar", "id", "com.android.systemui")
|
||||||
|
val clockId: Int = res.getIdentifier("clock", "id", "com.android.systemui")
|
||||||
|
val batteryId: Int = res.getIdentifier("battery", "id", "com.android.systemui")
|
||||||
|
|
||||||
|
//查找组件
|
||||||
|
statusBar = miuiPhoneStatusBarView.findViewById(statusBarId)
|
||||||
|
if (statusBar == null) return@hookAfter
|
||||||
|
val clock: TextView = miuiPhoneStatusBarView.findViewById(clockId)
|
||||||
|
val battery: ViewGroup = miuiPhoneStatusBarView.findViewById(batteryId)
|
||||||
|
|
||||||
|
//新建布局
|
||||||
|
val rightLp = LinearLayout.LayoutParams(
|
||||||
|
LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.MATCH_PARENT
|
||||||
|
).also {
|
||||||
|
it.marginStart = dp2px(context, 5f)
|
||||||
|
}
|
||||||
|
mRightLayout = LinearLayout(context).also {
|
||||||
|
it.layoutParams = rightLp
|
||||||
|
}
|
||||||
|
|
||||||
|
//添加布局与组件
|
||||||
|
battery.addView(mRightLayout)
|
||||||
|
(clock.parent as ViewGroup).removeView(clock)
|
||||||
|
mRightLayout!!.addView(clock)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//时钟居中+图标居左
|
||||||
|
3 -> {
|
||||||
|
findMethod("com.android.systemui.statusbar.phone.fragment.CollapsedStatusBarFragment") {
|
||||||
|
name == "onViewCreated" && parameterCount == 2
|
||||||
|
}.hookAfter { param ->
|
||||||
|
val miuiPhoneStatusBarView = param.thisObject.getObjectAs<ViewGroup>("mStatusBar")
|
||||||
|
val context: Context = miuiPhoneStatusBarView.context
|
||||||
|
val res: Resources = miuiPhoneStatusBarView.resources
|
||||||
|
val statusBarId: Int = res.getIdentifier("status_bar", "id", "com.android.systemui")
|
||||||
|
val statusBarContentsId: Int = res.getIdentifier(
|
||||||
|
"status_bar_contents", "id", "com.android.systemui"
|
||||||
|
)
|
||||||
|
val systemIconAreaId: Int = res.getIdentifier("system_icon_area", "id", "com.android.systemui")
|
||||||
|
val clockId: Int = res.getIdentifier("clock", "id", "com.android.systemui")
|
||||||
|
val phoneStatusBarLeftContainerId: Int = res.getIdentifier(
|
||||||
|
"phone_status_bar_left_container", "id", "com.android.systemui"
|
||||||
|
)
|
||||||
|
val fullscreenNotificationIconAreaId: Int = res.getIdentifier(
|
||||||
|
"fullscreen_notification_icon_area", "id", "com.android.systemui"
|
||||||
|
)
|
||||||
|
val statusIconsId: Int = res.getIdentifier(
|
||||||
|
"statusIcons", "id", "com.android.systemui"
|
||||||
|
)
|
||||||
|
val systemIconsId: Int = res.getIdentifier(
|
||||||
|
"system_icons", "id", "com.android.systemui"
|
||||||
|
)
|
||||||
|
val batteryId: Int = res.getIdentifier(
|
||||||
|
"battery", "id", "com.android.systemui"
|
||||||
|
)
|
||||||
|
|
||||||
|
statusBar = miuiPhoneStatusBarView.findViewById(statusBarId)
|
||||||
|
val statusBarContents: ViewGroup = miuiPhoneStatusBarView.findViewById(statusBarContentsId)
|
||||||
|
if (statusBar == null) return@hookAfter
|
||||||
|
val clock: TextView = miuiPhoneStatusBarView.findViewById(clockId)
|
||||||
|
val phoneStatusBarLeftContainer: ViewGroup = miuiPhoneStatusBarView.findViewById(
|
||||||
|
phoneStatusBarLeftContainerId
|
||||||
|
)
|
||||||
|
val fullscreenNotificationIconArea: ViewGroup = miuiPhoneStatusBarView.findViewById(
|
||||||
|
fullscreenNotificationIconAreaId
|
||||||
|
)
|
||||||
|
val systemIconArea: ViewGroup = miuiPhoneStatusBarView.findViewById(systemIconAreaId)
|
||||||
|
val statusIcons: ViewGroup = miuiPhoneStatusBarView.findViewById(statusIconsId)
|
||||||
|
val systemIcons: ViewGroup = miuiPhoneStatusBarView.findViewById(systemIconsId)
|
||||||
|
val battery: ViewGroup = miuiPhoneStatusBarView.findViewById(batteryId)
|
||||||
|
|
||||||
|
(clock.parent as ViewGroup).removeView(clock)
|
||||||
|
(phoneStatusBarLeftContainer.parent as ViewGroup).removeView(
|
||||||
|
phoneStatusBarLeftContainer
|
||||||
|
)
|
||||||
|
(systemIconArea.parent as ViewGroup).removeView(systemIconArea)
|
||||||
|
(statusIcons.parent as ViewGroup).removeView(statusIcons)
|
||||||
|
(systemIcons.parent as ViewGroup).removeView(systemIcons)
|
||||||
|
(battery.parent as ViewGroup).removeView(battery)
|
||||||
|
(fullscreenNotificationIconArea.parent as ViewGroup).removeView(
|
||||||
|
fullscreenNotificationIconArea
|
||||||
|
)
|
||||||
|
|
||||||
|
val mConstraintLayout = ConstraintLayout(context).also {
|
||||||
|
it.layoutParams = ConstraintLayout.LayoutParams(
|
||||||
|
ConstraintLayout.LayoutParams.MATCH_PARENT, ConstraintLayout.LayoutParams.MATCH_PARENT
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
mConstraintLayout.addView(fullscreenNotificationIconArea)
|
||||||
|
mConstraintLayout.addView(battery)
|
||||||
|
|
||||||
|
|
||||||
|
battery.layoutParams = ConstraintLayout.LayoutParams(
|
||||||
|
ConstraintLayout.LayoutParams.WRAP_CONTENT, ConstraintLayout.LayoutParams.MATCH_PARENT
|
||||||
|
).also {
|
||||||
|
it.endToEnd = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
fullscreenNotificationIconArea.layoutParams = ConstraintLayout.LayoutParams(
|
||||||
|
0, ConstraintLayout.LayoutParams.MATCH_PARENT
|
||||||
|
).also {
|
||||||
|
it.startToEnd = batteryId
|
||||||
|
it.endToEnd = 0
|
||||||
|
}
|
||||||
|
fullscreenNotificationIconArea.layoutDirection = View.LAYOUT_DIRECTION_RTL
|
||||||
|
|
||||||
|
|
||||||
|
//增加一个左对齐布局
|
||||||
|
mLeftLayout = LinearLayout(context)
|
||||||
|
val leftLp: LinearLayout.LayoutParams = LinearLayout.LayoutParams(
|
||||||
|
0, LinearLayout.LayoutParams.MATCH_PARENT, 1.0f
|
||||||
|
)
|
||||||
|
mLeftLayout!!.layoutParams = leftLp
|
||||||
|
mLeftLayout!!.gravity = Gravity.START or Gravity.CENTER_VERTICAL
|
||||||
|
|
||||||
|
//增加一个居中布局
|
||||||
|
mCenterLayout = LinearLayout(context)
|
||||||
|
val centerLp: LinearLayout.LayoutParams = LinearLayout.LayoutParams(
|
||||||
|
LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.MATCH_PARENT
|
||||||
|
)
|
||||||
|
mCenterLayout!!.layoutParams = centerLp
|
||||||
|
mCenterLayout!!.gravity = Gravity.CENTER or Gravity.CENTER_VERTICAL
|
||||||
|
|
||||||
|
//增加一个右布局
|
||||||
|
mRightLayout = LinearLayout(context)
|
||||||
|
val rightLp: LinearLayout.LayoutParams = LinearLayout.LayoutParams(
|
||||||
|
0, LinearLayout.LayoutParams.MATCH_PARENT, 1.0f
|
||||||
|
)
|
||||||
|
mRightLayout!!.layoutParams = rightLp
|
||||||
|
mRightLayout!!.gravity = Gravity.END or Gravity.CENTER_VERTICAL
|
||||||
|
|
||||||
|
|
||||||
|
mLeftLayout!!.addView(phoneStatusBarLeftContainer)
|
||||||
|
mLeftLayout!!.addView(statusIcons)
|
||||||
|
statusIcons.layoutDirection = View.LAYOUT_DIRECTION_RTL
|
||||||
|
|
||||||
|
mCenterLayout!!.addView(clock)
|
||||||
|
|
||||||
|
mRightLayout!!.addView(mConstraintLayout)
|
||||||
|
fullscreenNotificationIconArea.layoutDirection = View.LAYOUT_DIRECTION_RTL
|
||||||
|
|
||||||
|
|
||||||
|
statusBarContents.addView(mLeftLayout, 0)
|
||||||
|
statusBarContents.addView(mCenterLayout)
|
||||||
|
statusBarContents.addView(mRightLayout)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
statusBarLeft = statusBar!!.paddingLeft
|
||||||
|
statusBarTop = statusBar!!.paddingTop
|
||||||
|
statusBarRight = statusBar!!.paddingRight
|
||||||
|
statusBarBottom = statusBar!!.paddingBottom
|
||||||
|
|
||||||
|
|
||||||
|
if (isCompatibilityMode) {
|
||||||
|
val customLeftMargin = XSPUtils.getInt("status_bar_left_margin", 0)
|
||||||
|
if (customLeftMargin != 0) {
|
||||||
|
statusBarLeft = customLeftMargin
|
||||||
|
}
|
||||||
|
|
||||||
|
val customRightMargin = XSPUtils.getInt("status_bar_right_margin", 0)
|
||||||
|
if (customRightMargin != 0) {
|
||||||
|
statusBarRight = customRightMargin
|
||||||
|
}
|
||||||
|
updateLayout(context)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//兼容模式
|
||||||
|
findMethod("com.android.systemui.statusbar.phone.PhoneStatusBarView") {
|
||||||
|
name == "updateLayoutForCutout"
|
||||||
|
}.hookAfter {
|
||||||
|
if (isCompatibilityMode) {
|
||||||
|
val context = (it.thisObject as ViewGroup).context
|
||||||
|
updateLayout(context)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//解决重叠
|
||||||
|
findMethod("com.android.systemui.statusbar.phone.MiuiCollapsedStatusBarFragment") {
|
||||||
|
name == "showClock" && parameterTypes[0] == Boolean::class.java
|
||||||
|
}.hookAfter {
|
||||||
|
val miuiPhoneStatusBarView = it.thisObject.getObjectAs<ViewGroup>("mStatusBar")
|
||||||
|
val res = miuiPhoneStatusBarView.resources
|
||||||
|
val statusBarId = res.getIdentifier("status_bar", "id", "com.android.systemui")
|
||||||
|
val statusBar1 = miuiPhoneStatusBarView.findViewById<ViewGroup>(statusBarId)
|
||||||
|
//非锁屏下整个状态栏布局
|
||||||
|
val keyguardMgr = statusBar1.context.getSystemService(Context.KEYGUARD_SERVICE) as KeyguardManager
|
||||||
|
if (keyguardMgr.isKeyguardLocked) {
|
||||||
|
statusBar1!!.visibility = View.GONE
|
||||||
|
} else {
|
||||||
|
statusBar1!!.visibility = View.VISIBLE
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//TODO: 修改图标的顺序
|
||||||
|
/*findConstructor("com.android.systemui.statusbar.phone.StatusBarIconList") {
|
||||||
|
parameterCount == 1
|
||||||
|
}.hookBefore {
|
||||||
|
|
||||||
|
}*/
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
package com.lt2333.simplicitytools.hooks.rules.t.systemui
|
||||||
|
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.findMethod
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.hookBefore
|
||||||
|
import com.lt2333.simplicitytools.utils.hasEnable
|
||||||
|
import com.lt2333.simplicitytools.utils.xposed.base.HookRegister
|
||||||
|
|
||||||
|
object StatusBarNetworkSpeedRefreshSpeedForT : HookRegister() {
|
||||||
|
|
||||||
|
override fun init() {
|
||||||
|
findMethod("com.android.systemui.statusbar.policy.NetworkSpeedController") {
|
||||||
|
name == "postUpdateNetworkSpeedDelay" && parameterTypes[0] == Long::class.java
|
||||||
|
}.hookBefore {
|
||||||
|
hasEnable("status_bar_network_speed_refresh_speed") {
|
||||||
|
it.args[0] = 1000L
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,340 @@
|
|||||||
|
package com.lt2333.simplicitytools.hooks.rules.t.systemui
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint
|
||||||
|
import android.content.Context
|
||||||
|
import android.os.Handler
|
||||||
|
import android.provider.Settings
|
||||||
|
import android.util.TypedValue
|
||||||
|
import android.view.Gravity
|
||||||
|
import android.widget.TextView
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.*
|
||||||
|
import com.lt2333.simplicitytools.utils.XSPUtils
|
||||||
|
import com.lt2333.simplicitytools.utils.xposed.base.HookRegister
|
||||||
|
import java.lang.reflect.Method
|
||||||
|
import java.text.SimpleDateFormat
|
||||||
|
import java.util.*
|
||||||
|
|
||||||
|
|
||||||
|
object StatusBarTimeCustomizationForT : HookRegister() {
|
||||||
|
|
||||||
|
private val getMode = XSPUtils.getInt("custom_clock_mode", 0)
|
||||||
|
private val getClockSize = XSPUtils.getInt("status_bar_clock_size", 0)
|
||||||
|
private val getClockDoubleSize = XSPUtils.getInt("status_bar_clock_double_line_size", 0)
|
||||||
|
private val isYear = XSPUtils.getBoolean("status_bar_time_year", false)
|
||||||
|
private val isMonth = XSPUtils.getBoolean("status_bar_time_month", false)
|
||||||
|
private val isDay = XSPUtils.getBoolean("status_bar_time_day", false)
|
||||||
|
private val isWeek = XSPUtils.getBoolean("status_bar_time_week", false)
|
||||||
|
private val isHideSpace = XSPUtils.getBoolean("status_bar_time_hide_space", false)
|
||||||
|
private val isDoubleLine = XSPUtils.getBoolean("status_bar_time_double_line", false)
|
||||||
|
private val isSecond = XSPUtils.getBoolean("status_bar_time_seconds", false)
|
||||||
|
private val isDoubleHour = XSPUtils.getBoolean("status_bar_time_double_hour", false)
|
||||||
|
private val isPeriod = XSPUtils.getBoolean("status_bar_time_period", true)
|
||||||
|
private val isCenterAlign = XSPUtils.getBoolean("status_bar_time_double_line_center_align", false)
|
||||||
|
|
||||||
|
//极客模式
|
||||||
|
private val getGeekClockSize = XSPUtils.getInt("status_bar_clock_size_geek", 0)
|
||||||
|
private val getGeekFormat = XSPUtils.getString("custom_clock_format_geek", "HH:mm:ss")
|
||||||
|
private val isGeekCenterAlign = XSPUtils.getBoolean("status_bar_time_center_align_geek", false)
|
||||||
|
|
||||||
|
private lateinit var nowTime: Date
|
||||||
|
private var str = ""
|
||||||
|
|
||||||
|
@SuppressLint("SetTextI18n")
|
||||||
|
override fun init() {
|
||||||
|
when (getMode) {
|
||||||
|
//预设模式
|
||||||
|
1 -> {
|
||||||
|
var c: Context? = null
|
||||||
|
|
||||||
|
findConstructor("com.android.systemui.statusbar.views.MiuiClock") {
|
||||||
|
paramCount == 3
|
||||||
|
}.hookAfter {
|
||||||
|
try {
|
||||||
|
c = it.args[0] as Context
|
||||||
|
val textV = it.thisObject as TextView
|
||||||
|
if (textV.resources.getResourceEntryName(textV.id) != "clock") return@hookAfter
|
||||||
|
textV.isSingleLine = false
|
||||||
|
if (isDoubleLine) {
|
||||||
|
str = "\n"
|
||||||
|
var clockDoubleLineSize = 7F
|
||||||
|
if (getClockDoubleSize != 0) {
|
||||||
|
clockDoubleLineSize = getClockDoubleSize.toFloat()
|
||||||
|
}
|
||||||
|
textV.setTextSize(TypedValue.COMPLEX_UNIT_DIP, clockDoubleLineSize)
|
||||||
|
textV.setLineSpacing(0F, 0.8F)
|
||||||
|
} else {
|
||||||
|
if (getClockSize != 0) {
|
||||||
|
val clockSize = getClockSize.toFloat()
|
||||||
|
textV.setTextSize(TypedValue.COMPLEX_UNIT_DIP, clockSize)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
val d: Method = textV.javaClass.getDeclaredMethod("updateTime")
|
||||||
|
val r = Runnable {
|
||||||
|
d.isAccessible = true
|
||||||
|
d.invoke(textV)
|
||||||
|
}
|
||||||
|
|
||||||
|
class T : TimerTask() {
|
||||||
|
override fun run() {
|
||||||
|
Handler(textV.context.mainLooper).post(r)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Timer().scheduleAtFixedRate(
|
||||||
|
T(), 1000 - System.currentTimeMillis() % 1000, 1000
|
||||||
|
)
|
||||||
|
} catch (_: Exception) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
findMethod("com.android.systemui.statusbar.views.MiuiClock") {
|
||||||
|
name == "updateTime"
|
||||||
|
}.hookAfter {
|
||||||
|
try {
|
||||||
|
val textV = it.thisObject as TextView
|
||||||
|
if (textV.resources.getResourceEntryName(textV.id) == "clock") {
|
||||||
|
val t = Settings.System.getString(
|
||||||
|
c!!.contentResolver, Settings.System.TIME_12_24
|
||||||
|
)
|
||||||
|
val is24 = t == "24"
|
||||||
|
nowTime = Calendar.getInstance().time
|
||||||
|
textV.text = getDate(c!!) + str + getTime(c!!, is24)
|
||||||
|
}
|
||||||
|
} catch (_: Exception) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isCenterAlign) {
|
||||||
|
findConstructor("com.android.systemui.statusbar.views.MiuiClock") {
|
||||||
|
paramCount == 3
|
||||||
|
}.hookAfter {
|
||||||
|
try {
|
||||||
|
val textV = it.thisObject as TextView
|
||||||
|
if (textV.resources.getResourceEntryName(textV.id) == "clock") {
|
||||||
|
c = it.args[0] as Context
|
||||||
|
val textV = it.thisObject as TextView
|
||||||
|
textV.gravity = Gravity.CENTER
|
||||||
|
}
|
||||||
|
} catch (_: Exception) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//极客模式
|
||||||
|
2 -> {
|
||||||
|
var c: Context? = null
|
||||||
|
|
||||||
|
findConstructor("com.android.systemui.statusbar.views.MiuiClock") {
|
||||||
|
paramCount == 3
|
||||||
|
}.hookAfter {
|
||||||
|
try {
|
||||||
|
c = it.args[0] as Context
|
||||||
|
val textV = it.thisObject as TextView
|
||||||
|
if (textV.resources.getResourceEntryName(textV.id) != "clock") return@hookAfter
|
||||||
|
textV.isSingleLine = false
|
||||||
|
textV.setLineSpacing(0F, 0.8F)
|
||||||
|
if (getGeekClockSize != 0) {
|
||||||
|
val clockSize = getGeekClockSize.toFloat()
|
||||||
|
textV.setTextSize(TypedValue.COMPLEX_UNIT_DIP, clockSize)
|
||||||
|
}
|
||||||
|
|
||||||
|
val d: Method = textV.javaClass.getDeclaredMethod("updateTime")
|
||||||
|
val r = Runnable {
|
||||||
|
d.isAccessible = true
|
||||||
|
d.invoke(textV)
|
||||||
|
}
|
||||||
|
|
||||||
|
class T : TimerTask() {
|
||||||
|
override fun run() {
|
||||||
|
Handler(textV.context.mainLooper).post(r)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Timer().scheduleAtFixedRate(
|
||||||
|
T(), 1000 - System.currentTimeMillis() % 1000, 1000
|
||||||
|
)
|
||||||
|
} catch (_: Exception) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
findMethod("com.android.systemui.statusbar.views.MiuiClock") {
|
||||||
|
name == "updateTime"
|
||||||
|
}.hookBefore {
|
||||||
|
try {
|
||||||
|
val textV = it.thisObject as TextView
|
||||||
|
if (textV.resources.getResourceEntryName(textV.id) == "clock") {
|
||||||
|
val mMiuiStatusBarClockController = textV.getObject("mMiuiStatusBarClockController")
|
||||||
|
val mCalendar = mMiuiStatusBarClockController.invokeMethodAuto("getCalendar")
|
||||||
|
mCalendar?.invokeMethodAuto(
|
||||||
|
"setTimeInMillis", System.currentTimeMillis()
|
||||||
|
)
|
||||||
|
val textSb = StringBuilder()
|
||||||
|
val formatSb = StringBuilder(getGeekFormat.toString())
|
||||||
|
mCalendar?.invokeMethodAuto("format", c, textSb, formatSb)
|
||||||
|
textV.text = textSb.toString()
|
||||||
|
it.result = null
|
||||||
|
}
|
||||||
|
} catch (_: Exception) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isGeekCenterAlign) {
|
||||||
|
findConstructor("com.android.systemui.statusbar.views.MiuiClock") {
|
||||||
|
paramCount == 3
|
||||||
|
}.hookAfter {
|
||||||
|
try {
|
||||||
|
val textV = it.thisObject as TextView
|
||||||
|
if (textV.resources.getResourceEntryName(textV.id) == "clock") {
|
||||||
|
c = it.args[0] as Context
|
||||||
|
val textV = it.thisObject as TextView
|
||||||
|
textV.gravity = Gravity.CENTER
|
||||||
|
}
|
||||||
|
} catch (_: Exception) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressLint("SimpleDateFormat")
|
||||||
|
private fun getDate(context: Context): String {
|
||||||
|
var datePattern = ""
|
||||||
|
val isZh = isZh(context)
|
||||||
|
|
||||||
|
if (isYear) {
|
||||||
|
if (isZh) {
|
||||||
|
datePattern += "YY年"
|
||||||
|
} else {
|
||||||
|
datePattern += "YY"
|
||||||
|
if (isMonth || isDay) datePattern += "/"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (isMonth) {
|
||||||
|
if (isZh) {
|
||||||
|
datePattern += "M月"
|
||||||
|
} else {
|
||||||
|
datePattern += "M"
|
||||||
|
if (isDay) datePattern += "/"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (isDay) {
|
||||||
|
datePattern += if (isZh) {
|
||||||
|
"d日"
|
||||||
|
} else {
|
||||||
|
"d"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (isWeek) {
|
||||||
|
if (!isHideSpace) datePattern = "$datePattern "
|
||||||
|
datePattern += "E"
|
||||||
|
if (!isDoubleLine) {
|
||||||
|
if (!isHideSpace) datePattern = "$datePattern "
|
||||||
|
}
|
||||||
|
}
|
||||||
|
datePattern = SimpleDateFormat(datePattern).format(nowTime)
|
||||||
|
return datePattern
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressLint("SimpleDateFormat")
|
||||||
|
private fun getTime(context: Context, t: Boolean): String {
|
||||||
|
var timePattern = ""
|
||||||
|
val isZh = isZh(context)
|
||||||
|
timePattern += if (t) "HH:mm" else "h:mm"
|
||||||
|
if (isSecond) timePattern += ":ss"
|
||||||
|
timePattern = SimpleDateFormat(timePattern).format(nowTime)
|
||||||
|
if (isZh) timePattern = getPeriod(isZh) + timePattern else timePattern += getPeriod(isZh)
|
||||||
|
timePattern = getDoubleHour() + timePattern
|
||||||
|
return timePattern
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressLint("SimpleDateFormat")
|
||||||
|
private fun getPeriod(isZh: Boolean): String {
|
||||||
|
var period = ""
|
||||||
|
if (isPeriod) {
|
||||||
|
if (isZh) {
|
||||||
|
when (SimpleDateFormat("HH").format(nowTime)) {
|
||||||
|
"00", "01", "02", "03", "04", "05" -> {
|
||||||
|
period = "凌晨"
|
||||||
|
}
|
||||||
|
"06", "07", "08", "09", "10", "11" -> {
|
||||||
|
period = "上午"
|
||||||
|
}
|
||||||
|
"12" -> {
|
||||||
|
period = "中午"
|
||||||
|
}
|
||||||
|
"13", "14", "15", "16", "17" -> {
|
||||||
|
period = "下午"
|
||||||
|
}
|
||||||
|
"18" -> {
|
||||||
|
period = "傍晚"
|
||||||
|
}
|
||||||
|
"19", "20", "21", "22", "23" -> {
|
||||||
|
period = "晚上"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
period = SimpleDateFormat("a").format(nowTime)
|
||||||
|
if (!isHideSpace) {
|
||||||
|
period = " $period"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
return period
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressLint("SimpleDateFormat")
|
||||||
|
private fun getDoubleHour(): String {
|
||||||
|
var doubleHour = ""
|
||||||
|
if (isDoubleHour) {
|
||||||
|
when (SimpleDateFormat("HH").format(nowTime)) {
|
||||||
|
"23", "00" -> {
|
||||||
|
doubleHour = "子时"
|
||||||
|
}
|
||||||
|
"01", "02" -> {
|
||||||
|
doubleHour = "丑时"
|
||||||
|
}
|
||||||
|
"03", "04" -> {
|
||||||
|
doubleHour = "寅时"
|
||||||
|
}
|
||||||
|
"05", "06" -> {
|
||||||
|
doubleHour = "卯时"
|
||||||
|
}
|
||||||
|
"07", "08" -> {
|
||||||
|
doubleHour = "辰时"
|
||||||
|
}
|
||||||
|
"09", "10" -> {
|
||||||
|
doubleHour = "巳时"
|
||||||
|
}
|
||||||
|
"11", "12" -> {
|
||||||
|
doubleHour = "午时"
|
||||||
|
}
|
||||||
|
"13", "14" -> {
|
||||||
|
doubleHour = "未时"
|
||||||
|
}
|
||||||
|
"15", "16" -> {
|
||||||
|
doubleHour = "申时"
|
||||||
|
}
|
||||||
|
"17", "18" -> {
|
||||||
|
doubleHour = "酉时"
|
||||||
|
}
|
||||||
|
"19", "20" -> {
|
||||||
|
doubleHour = "戌时"
|
||||||
|
}
|
||||||
|
"21", "22" -> {
|
||||||
|
doubleHour = "亥时"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!isHideSpace) {
|
||||||
|
doubleHour += " "
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return doubleHour
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun isZh(context: Context): Boolean {
|
||||||
|
val locale = context.resources.configuration.locale
|
||||||
|
val language = locale.language
|
||||||
|
return language.endsWith("zh")
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
package com.lt2333.simplicitytools.hooks.rules.t.systemui
|
||||||
|
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.findMethod
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.hookAfter
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.putObject
|
||||||
|
import com.lt2333.simplicitytools.utils.hasEnable
|
||||||
|
import com.lt2333.simplicitytools.utils.xposed.base.HookRegister
|
||||||
|
|
||||||
|
object WaveChargeForT: HookRegister() {
|
||||||
|
|
||||||
|
override fun init() {
|
||||||
|
hasEnable("enable_wave_charge_animation") {
|
||||||
|
findMethod("com.android.keyguard.charge.ChargeUtils") {
|
||||||
|
name == "supportWaveChargeAnimation"
|
||||||
|
}.hookAfter {
|
||||||
|
val ex = Throwable()
|
||||||
|
val stackElement = ex.stackTrace
|
||||||
|
var mResult = false
|
||||||
|
val classTrue = setOf(
|
||||||
|
"com.android.keyguard.charge.ChargeUtils",
|
||||||
|
"com.android.keyguard.charge.container.MiuiChargeContainerView"
|
||||||
|
)
|
||||||
|
for (i in stackElement.indices) {
|
||||||
|
when (stackElement[i].className) {
|
||||||
|
in classTrue -> {
|
||||||
|
mResult = true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
it.result = mResult
|
||||||
|
}
|
||||||
|
findMethod("com.android.keyguard.charge.wave.WaveView") {
|
||||||
|
name == "updateWaveHeight"
|
||||||
|
}.hookAfter {
|
||||||
|
it.thisObject.putObject("mWaveXOffset", 0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,439 @@
|
|||||||
|
@file:Suppress("unused")
|
||||||
|
|
||||||
|
package com.lt2333.simplicitytools.utils
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint
|
||||||
|
import android.content.res.XResources
|
||||||
|
import com.github.kyuubiran.ezxhelper.init.InitFields.ezXClassLoader
|
||||||
|
import com.github.kyuubiran.ezxhelper.utils.Log
|
||||||
|
import dalvik.system.BaseDexClassLoader
|
||||||
|
import de.robv.android.xposed.XC_MethodHook
|
||||||
|
import de.robv.android.xposed.XC_MethodHook.MethodHookParam
|
||||||
|
import de.robv.android.xposed.XC_MethodReplacement
|
||||||
|
import de.robv.android.xposed.XposedBridge.*
|
||||||
|
import de.robv.android.xposed.XposedHelpers.*
|
||||||
|
import de.robv.android.xposed.callbacks.XC_LayoutInflated
|
||||||
|
import java.lang.reflect.Field
|
||||||
|
import java.lang.reflect.Member
|
||||||
|
import java.lang.reflect.Modifier
|
||||||
|
import java.util.Enumeration
|
||||||
|
|
||||||
|
typealias MethodHookParam = MethodHookParam
|
||||||
|
typealias Replacer = (MethodHookParam) -> Any?
|
||||||
|
typealias Hooker = (MethodHookParam) -> Unit
|
||||||
|
|
||||||
|
fun Class<*>.hookMethod(method: String?, vararg args: Any?) = try {
|
||||||
|
findAndHookMethod(this, method, *args)
|
||||||
|
} catch (e: NoSuchMethodError) {
|
||||||
|
Log.e(e)
|
||||||
|
null
|
||||||
|
} catch (e: ClassNotFoundError) {
|
||||||
|
Log.e(e)
|
||||||
|
null
|
||||||
|
} catch (e: ClassNotFoundException) {
|
||||||
|
Log.e(e)
|
||||||
|
null
|
||||||
|
}
|
||||||
|
|
||||||
|
fun Member.hookMethod(callback: XC_MethodHook) = try {
|
||||||
|
hookMethod(this, callback)
|
||||||
|
} catch (e: Throwable) {
|
||||||
|
Log.e(e)
|
||||||
|
null
|
||||||
|
}
|
||||||
|
|
||||||
|
inline fun MethodHookParam.callHooker(crossinline hooker: Hooker) = try {
|
||||||
|
hooker(this)
|
||||||
|
} catch (e: Throwable) {
|
||||||
|
Log.e("Error occurred calling hooker on ${this.method}")
|
||||||
|
Log.e(e)
|
||||||
|
}
|
||||||
|
|
||||||
|
inline fun MethodHookParam.callReplacer(crossinline replacer: Replacer) = try {
|
||||||
|
replacer(this)
|
||||||
|
} catch (e: Throwable) {
|
||||||
|
Log.e("Error occurred calling replacer on ${this.method}")
|
||||||
|
Log.e(e)
|
||||||
|
null
|
||||||
|
}
|
||||||
|
|
||||||
|
inline fun Member.replaceMethod(crossinline replacer: Replacer) = hookMethod(object : XC_MethodReplacement() {
|
||||||
|
override fun replaceHookedMethod(param: MethodHookParam) = param.callReplacer(replacer)
|
||||||
|
})
|
||||||
|
|
||||||
|
inline fun Member.hookAfterMethod(crossinline hooker: Hooker) = hookMethod(object : XC_MethodHook() {
|
||||||
|
override fun afterHookedMethod(param: MethodHookParam) = param.callHooker(hooker)
|
||||||
|
})
|
||||||
|
|
||||||
|
inline fun Member.hookBeforeMethod(crossinline hooker: (MethodHookParam) -> Unit) = hookMethod(object : XC_MethodHook() {
|
||||||
|
override fun beforeHookedMethod(param: MethodHookParam) = param.callHooker(hooker)
|
||||||
|
})
|
||||||
|
|
||||||
|
inline fun Class<*>.hookBeforeMethod(
|
||||||
|
method: String?, vararg args: Any?, crossinline hooker: Hooker
|
||||||
|
) = hookMethod(method, *args, object : XC_MethodHook() {
|
||||||
|
override fun beforeHookedMethod(param: MethodHookParam) = param.callHooker(hooker)
|
||||||
|
})
|
||||||
|
|
||||||
|
inline fun Class<*>.hookAfterMethod(
|
||||||
|
method: String?, vararg args: Any?, crossinline hooker: Hooker
|
||||||
|
) = hookMethod(method, *args, object : XC_MethodHook() {
|
||||||
|
override fun afterHookedMethod(param: MethodHookParam) = param.callHooker(hooker)
|
||||||
|
})
|
||||||
|
|
||||||
|
inline fun Class<*>.replaceMethod(
|
||||||
|
method: String?, vararg args: Any?, crossinline replacer: Replacer
|
||||||
|
) = hookMethod(method, *args, object : XC_MethodReplacement() {
|
||||||
|
override fun replaceHookedMethod(param: MethodHookParam) = param.callReplacer(replacer)
|
||||||
|
})
|
||||||
|
|
||||||
|
fun Class<*>.hookAllMethods(methodName: String?, hooker: XC_MethodHook): Set<XC_MethodHook.Unhook> = try {
|
||||||
|
hookAllMethods(this, methodName, hooker)
|
||||||
|
} catch (e: NoSuchMethodError) {
|
||||||
|
Log.e(e)
|
||||||
|
emptySet()
|
||||||
|
} catch (e: ClassNotFoundError) {
|
||||||
|
Log.e(e)
|
||||||
|
emptySet()
|
||||||
|
} catch (e: ClassNotFoundException) {
|
||||||
|
Log.e(e)
|
||||||
|
emptySet()
|
||||||
|
}
|
||||||
|
|
||||||
|
inline fun Class<*>.hookBeforeAllMethods(methodName: String?, crossinline hooker: Hooker) = hookAllMethods(methodName, object : XC_MethodHook() {
|
||||||
|
override fun beforeHookedMethod(param: MethodHookParam) = param.callHooker(hooker)
|
||||||
|
})
|
||||||
|
|
||||||
|
inline fun Class<*>.hookAfterAllMethods(methodName: String?, crossinline hooker: Hooker) = hookAllMethods(methodName, object : XC_MethodHook() {
|
||||||
|
override fun afterHookedMethod(param: MethodHookParam) = param.callHooker(hooker)
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
|
inline fun Class<*>.replaceAllMethods(methodName: String?, crossinline replacer: Replacer) =
|
||||||
|
hookAllMethods(methodName, object : XC_MethodReplacement() {
|
||||||
|
override fun replaceHookedMethod(param: MethodHookParam) = param.callReplacer(replacer)
|
||||||
|
})
|
||||||
|
|
||||||
|
fun Class<*>.hookConstructor(vararg args: Any?) = try {
|
||||||
|
findAndHookConstructor(this, *args)
|
||||||
|
} catch (e: NoSuchMethodError) {
|
||||||
|
Log.e(e)
|
||||||
|
null
|
||||||
|
} catch (e: ClassNotFoundError) {
|
||||||
|
Log.e(e)
|
||||||
|
null
|
||||||
|
} catch (e: ClassNotFoundException) {
|
||||||
|
Log.e(e)
|
||||||
|
null
|
||||||
|
}
|
||||||
|
|
||||||
|
inline fun Class<*>.hookBeforeConstructor(vararg args: Any?, crossinline hooker: Hooker) = hookConstructor(*args, object : XC_MethodHook() {
|
||||||
|
override fun beforeHookedMethod(param: MethodHookParam) = param.callHooker(hooker)
|
||||||
|
})
|
||||||
|
|
||||||
|
inline fun Class<*>.hookAfterConstructor(vararg args: Any?, crossinline hooker: Hooker) = hookConstructor(*args, object : XC_MethodHook() {
|
||||||
|
override fun afterHookedMethod(param: MethodHookParam) = param.callHooker(hooker)
|
||||||
|
})
|
||||||
|
|
||||||
|
inline fun Class<*>.replaceConstructor(vararg args: Any?, crossinline hooker: Hooker) = hookConstructor(*args, object : XC_MethodReplacement() {
|
||||||
|
override fun replaceHookedMethod(param: MethodHookParam) = param.callHooker(hooker)
|
||||||
|
})
|
||||||
|
|
||||||
|
fun Class<*>.hookAllConstructors(hooker: XC_MethodHook): Set<XC_MethodHook.Unhook> = try {
|
||||||
|
hookAllConstructors(this, hooker)
|
||||||
|
} catch (e: NoSuchMethodError) {
|
||||||
|
Log.e(e)
|
||||||
|
emptySet()
|
||||||
|
} catch (e: ClassNotFoundError) {
|
||||||
|
Log.e(e)
|
||||||
|
emptySet()
|
||||||
|
} catch (e: ClassNotFoundException) {
|
||||||
|
Log.e(e)
|
||||||
|
emptySet()
|
||||||
|
}
|
||||||
|
|
||||||
|
inline fun Class<*>.hookAfterAllConstructors(crossinline hooker: Hooker) = hookAllConstructors(object : XC_MethodHook() {
|
||||||
|
override fun afterHookedMethod(param: MethodHookParam) = param.callHooker(hooker)
|
||||||
|
})
|
||||||
|
|
||||||
|
inline fun Class<*>.hookBeforeAllConstructors(crossinline hooker: Hooker) = hookAllConstructors(object : XC_MethodHook() {
|
||||||
|
override fun beforeHookedMethod(param: MethodHookParam) = param.callHooker(hooker)
|
||||||
|
})
|
||||||
|
|
||||||
|
inline fun Class<*>.replaceAllConstructors(crossinline hooker: Hooker) = hookAllConstructors(object : XC_MethodReplacement() {
|
||||||
|
override fun replaceHookedMethod(param: MethodHookParam) = param.callHooker(hooker)
|
||||||
|
})
|
||||||
|
|
||||||
|
fun String.hookMethod(
|
||||||
|
method: String?, vararg args: Any?
|
||||||
|
) = try {
|
||||||
|
findClass().hookMethod(method, *args)
|
||||||
|
} catch (e: ClassNotFoundError) {
|
||||||
|
Log.e(e)
|
||||||
|
null
|
||||||
|
} catch (e: ClassNotFoundException) {
|
||||||
|
Log.e(e)
|
||||||
|
null
|
||||||
|
}
|
||||||
|
|
||||||
|
inline fun String.hookBeforeMethod(
|
||||||
|
method: String?, vararg args: Any?, crossinline hooker: Hooker
|
||||||
|
) = try {
|
||||||
|
findClass().hookBeforeMethod(method, *args, hooker = hooker)
|
||||||
|
} catch (e: ClassNotFoundError) {
|
||||||
|
Log.e(e)
|
||||||
|
null
|
||||||
|
} catch (e: ClassNotFoundException) {
|
||||||
|
Log.e(e)
|
||||||
|
null
|
||||||
|
}
|
||||||
|
|
||||||
|
inline fun String.hookAfterMethod(
|
||||||
|
method: String?, vararg args: Any?, crossinline hooker: Hooker
|
||||||
|
) = try {
|
||||||
|
findClass().hookAfterMethod(method, *args, hooker = hooker)
|
||||||
|
} catch (e: ClassNotFoundError) {
|
||||||
|
Log.e(e)
|
||||||
|
null
|
||||||
|
} catch (e: ClassNotFoundException) {
|
||||||
|
Log.e(e)
|
||||||
|
null
|
||||||
|
}
|
||||||
|
|
||||||
|
inline fun String.replaceMethod(
|
||||||
|
method: String?, vararg args: Any?, crossinline replacer: Replacer
|
||||||
|
) = try {
|
||||||
|
findClass().replaceMethod(method, *args, replacer = replacer)
|
||||||
|
} catch (e: ClassNotFoundError) {
|
||||||
|
Log.e(e)
|
||||||
|
null
|
||||||
|
} catch (e: ClassNotFoundException) {
|
||||||
|
Log.e(e)
|
||||||
|
null
|
||||||
|
}
|
||||||
|
|
||||||
|
fun MethodHookParam.invokeOriginalMethod(): Any? = invokeOriginalMethod(method, thisObject, args)
|
||||||
|
|
||||||
|
inline fun <T, R> T.runCatchingOrNull(func: T.() -> R?) = try {
|
||||||
|
func()
|
||||||
|
} catch (e: Throwable) {
|
||||||
|
null
|
||||||
|
}
|
||||||
|
|
||||||
|
fun Any.getObjectField(field: String?): Any? = getObjectField(this, field)
|
||||||
|
|
||||||
|
fun Any.getObjectFieldOrNull(field: String?): Any? = runCatchingOrNull {
|
||||||
|
getObjectField(this, field)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Suppress("UNCHECKED_CAST")
|
||||||
|
fun <T> Any.getObjectFieldAs(field: String?) = getObjectField(this, field) as T
|
||||||
|
|
||||||
|
@Suppress("UNCHECKED_CAST")
|
||||||
|
fun <T> Any.getObjectFieldOrNullAs(field: String?) = runCatchingOrNull {
|
||||||
|
getObjectField(this, field) as T
|
||||||
|
}
|
||||||
|
|
||||||
|
fun Any.getIntField(field: String?) = getIntField(this, field)
|
||||||
|
|
||||||
|
fun Any.getIntFieldOrNull(field: String?) = runCatchingOrNull {
|
||||||
|
getIntField(this, field)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun Any.getLongField(field: String?) = getLongField(this, field)
|
||||||
|
|
||||||
|
fun Any.getLongFieldOrNull(field: String?) = runCatchingOrNull {
|
||||||
|
getLongField(this, field)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun Any.getBooleanField(field: String?) = getBooleanField(this, field)
|
||||||
|
|
||||||
|
fun Any.getBooleanFieldOrNull(field: String?) = runCatchingOrNull {
|
||||||
|
getBooleanField(this, field)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun Any.callMethod(methodName: String?, vararg args: Any?): Any? = callMethod(this, methodName, *args)
|
||||||
|
|
||||||
|
fun Any.callMethodOrNull(methodName: String?, vararg args: Any?): Any? = runCatchingOrNull {
|
||||||
|
callMethod(this, methodName, *args)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun Class<*>.callStaticMethod(methodName: String?, vararg args: Any?): Any? = callStaticMethod(this, methodName, *args)
|
||||||
|
|
||||||
|
fun Class<*>.callStaticMethodOrNull(methodName: String?, vararg args: Any?): Any? = runCatchingOrNull {
|
||||||
|
callStaticMethod(this, methodName, *args)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Suppress("UNCHECKED_CAST")
|
||||||
|
fun <T> Class<*>.callStaticMethodAs(methodName: String?, vararg args: Any?) = callStaticMethod(this, methodName, *args) as T
|
||||||
|
|
||||||
|
@Suppress("UNCHECKED_CAST")
|
||||||
|
fun <T> Class<*>.callStaticMethodOrNullAs(methodName: String?, vararg args: Any?) = runCatchingOrNull {
|
||||||
|
callStaticMethod(this, methodName, *args) as T
|
||||||
|
}
|
||||||
|
|
||||||
|
@Suppress("UNCHECKED_CAST")
|
||||||
|
fun <T> Class<*>.getStaticObjectFieldAs(field: String?) = getStaticObjectField(this, field) as T
|
||||||
|
|
||||||
|
@Suppress("UNCHECKED_CAST")
|
||||||
|
fun <T> Class<*>.getStaticObjectFieldOrNullAs(field: String?) = runCatchingOrNull {
|
||||||
|
getStaticObjectField(this, field) as T
|
||||||
|
}
|
||||||
|
|
||||||
|
fun Class<*>.getStaticObjectField(field: String?): Any? = getStaticObjectField(this, field)
|
||||||
|
|
||||||
|
fun Class<*>.getStaticObjectFieldOrNull(field: String?): Any? = runCatchingOrNull {
|
||||||
|
getStaticObjectField(this, field)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun Class<*>.setStaticObjectField(field: String?, obj: Any?) = apply {
|
||||||
|
setStaticObjectField(this, field, obj)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun Class<*>.setStaticObjectFieldIfExist(field: String?, obj: Any?) = apply {
|
||||||
|
try {
|
||||||
|
setStaticObjectField(this, field, obj)
|
||||||
|
} catch (ignored: Throwable) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
inline fun <reified T> Class<*>.findFieldByExactType(): Field? = findFirstFieldByExactType(this, T::class.java)
|
||||||
|
|
||||||
|
fun Class<*>.findFieldByExactType(type: Class<*>): Field? = findFirstFieldByExactType(this, type)
|
||||||
|
|
||||||
|
@Suppress("UNCHECKED_CAST")
|
||||||
|
fun <T> Any.callMethodAs(methodName: String?, vararg args: Any?) = callMethod(this, methodName, *args) as T
|
||||||
|
|
||||||
|
@Suppress("UNCHECKED_CAST")
|
||||||
|
fun <T> Any.callMethodOrNullAs(methodName: String?, vararg args: Any?) = runCatchingOrNull {
|
||||||
|
callMethod(this, methodName, *args) as T
|
||||||
|
}
|
||||||
|
|
||||||
|
fun Any.callMethod(methodName: String?, parameterTypes: Array<Class<*>>, vararg args: Any?): Any? =
|
||||||
|
callMethod(this, methodName, parameterTypes, *args)
|
||||||
|
|
||||||
|
fun Any.callMethodOrNull(
|
||||||
|
methodName: String?, parameterTypes: Array<Class<*>>, vararg args: Any?
|
||||||
|
): Any? = runCatchingOrNull {
|
||||||
|
callMethod(this, methodName, parameterTypes, *args)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun Class<*>.callStaticMethod(
|
||||||
|
methodName: String?, parameterTypes: Array<Class<*>>, vararg args: Any?
|
||||||
|
): Any? = callStaticMethod(this, methodName, parameterTypes, *args)
|
||||||
|
|
||||||
|
fun Class<*>.callStaticMethodOrNull(
|
||||||
|
methodName: String?, parameterTypes: Array<Class<*>>, vararg args: Any?
|
||||||
|
): Any? = runCatchingOrNull {
|
||||||
|
callStaticMethod(this, methodName, parameterTypes, *args)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun String.findClass(): Class<*> = findClass(this, ezXClassLoader)
|
||||||
|
|
||||||
|
fun String.findClassOrNull(): Class<*>? = findClassIfExists(this, ezXClassLoader)
|
||||||
|
|
||||||
|
fun Class<*>.new(vararg args: Any?): Any = newInstance(this, *args)
|
||||||
|
|
||||||
|
fun Class<*>.new(parameterTypes: Array<Class<*>>, vararg args: Any?): Any = newInstance(this, parameterTypes, *args)
|
||||||
|
|
||||||
|
fun Class<*>.findField(field: String?): Field = findField(this, field)
|
||||||
|
|
||||||
|
fun Class<*>.findFieldOrNull(field: String?): Field? = findFieldIfExists(this, field)
|
||||||
|
|
||||||
|
fun <T> T.setIntField(field: String?, value: Int) = apply {
|
||||||
|
setIntField(this, field, value)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun <T> T.setLongField(field: String?, value: Long) = apply {
|
||||||
|
setLongField(this, field, value)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun <T> T.setFloatField(field: String?, value: Float) = apply {
|
||||||
|
setFloatField(this, field, value)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun <T> T.setBooleanField(field: String?, value: Boolean) = apply {
|
||||||
|
setBooleanField(this, field, value)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun <T> T.setObjectField(field: String?, value: Any?) = apply {
|
||||||
|
setObjectField(this, field, value)
|
||||||
|
}
|
||||||
|
|
||||||
|
inline fun XResources.hookLayout(
|
||||||
|
id: Int, crossinline hooker: (XC_LayoutInflated.LayoutInflatedParam) -> Unit
|
||||||
|
) {
|
||||||
|
try {
|
||||||
|
hookLayout(id, object : XC_LayoutInflated() {
|
||||||
|
override fun handleLayoutInflated(liparam: LayoutInflatedParam) {
|
||||||
|
try {
|
||||||
|
hooker(liparam)
|
||||||
|
} catch (e: Throwable) {
|
||||||
|
Log.e(e)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
} catch (e: Throwable) {
|
||||||
|
Log.e(e)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressLint("DiscouragedApi")
|
||||||
|
inline fun XResources.hookLayout(
|
||||||
|
pkg: String, type: String, name: String, crossinline hooker: (XC_LayoutInflated.LayoutInflatedParam) -> Unit
|
||||||
|
) {
|
||||||
|
try {
|
||||||
|
val id = getIdentifier(name, type, pkg)
|
||||||
|
hookLayout(id, hooker)
|
||||||
|
} catch (e: Throwable) {
|
||||||
|
Log.e(e)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun Class<*>.findFirstFieldByExactType(type: Class<*>): Field = findFirstFieldByExactType(this, type)
|
||||||
|
|
||||||
|
fun Class<*>.findFirstFieldByExactTypeOrNull(type: Class<*>?): Field? = runCatchingOrNull {
|
||||||
|
findFirstFieldByExactType(this, type)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun Any.getFirstFieldByExactType(type: Class<*>): Any? = javaClass.findFirstFieldByExactType(type).get(this)
|
||||||
|
|
||||||
|
@Suppress("UNCHECKED_CAST")
|
||||||
|
fun <T> Any.getFirstFieldByExactTypeAs(type: Class<*>) = javaClass.findFirstFieldByExactType(type).get(this) as? T
|
||||||
|
|
||||||
|
inline fun <reified T : Any> Any.getFirstFieldByExactType() = javaClass.findFirstFieldByExactType(T::class.java).get(this) as? T
|
||||||
|
|
||||||
|
fun Any.getFirstFieldByExactTypeOrNull(type: Class<*>?): Any? = runCatchingOrNull {
|
||||||
|
javaClass.findFirstFieldByExactTypeOrNull(type)?.get(this)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Suppress("UNCHECKED_CAST")
|
||||||
|
fun <T> Any.getFirstFieldByExactTypeOrNullAs(type: Class<*>?) = getFirstFieldByExactTypeOrNull(type) as? T
|
||||||
|
|
||||||
|
inline fun <reified T> Any.getFirstFieldByExactTypeOrNull() = getFirstFieldByExactTypeOrNull(T::class.java) as? T
|
||||||
|
|
||||||
|
inline fun ClassLoader.findDexClassLoader(crossinline delegator: (BaseDexClassLoader) -> BaseDexClassLoader = { x -> x }): BaseDexClassLoader? {
|
||||||
|
var classLoader = this
|
||||||
|
while (classLoader !is BaseDexClassLoader) {
|
||||||
|
if (classLoader.parent != null) classLoader = classLoader.parent
|
||||||
|
else return null
|
||||||
|
}
|
||||||
|
return delegator(classLoader)
|
||||||
|
}
|
||||||
|
|
||||||
|
inline fun ClassLoader.allClassesList(crossinline delegator: (BaseDexClassLoader) -> BaseDexClassLoader = { x -> x }): List<String> {
|
||||||
|
return findDexClassLoader(delegator)?.getObjectField("pathList")?.getObjectFieldAs<Array<Any>>("dexElements")?.flatMap {
|
||||||
|
it.getObjectField("dexFile")?.callMethodAs<Enumeration<String>>("entries")?.toList().orEmpty()
|
||||||
|
}.orEmpty()
|
||||||
|
}
|
||||||
|
|
||||||
|
val Member.isStatic: Boolean
|
||||||
|
inline get() = Modifier.isStatic(modifiers)
|
||||||
|
val Member.isFinal: Boolean
|
||||||
|
inline get() = Modifier.isFinal(modifiers)
|
||||||
|
val Member.isPublic: Boolean
|
||||||
|
inline get() = Modifier.isPublic(modifiers)
|
||||||
|
val Member.isNotStatic: Boolean
|
||||||
|
inline get() = !isStatic
|
||||||
|
val Class<*>.isAbstract: Boolean
|
||||||
|
inline get() = !isPrimitive && Modifier.isAbstract(modifiers)
|
||||||
13
app/src/main/res/drawable/ic_small_window_dark.xml
Normal file
13
app/src/main/res/drawable/ic_small_window_dark.xml
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="63dp"
|
||||||
|
android:height="63dp"
|
||||||
|
android:autoMirrored="true"
|
||||||
|
android:viewportWidth="63"
|
||||||
|
android:viewportHeight="63">
|
||||||
|
<path
|
||||||
|
android:fillColor="#BCBDBE"
|
||||||
|
android:pathData="m17.85,15.85v17.3c0,0.83 0.67,1.5 1.5,1.5h13.3c0.83,0 1.5,-0.67 1.5,-1.5L34.15,15.85c0,-0.83 -0.68,-1.5 -1.5,-1.5h-13.3c-0.82,0 -1.5,0.67 -1.5,1.5ZM29.16,30.25h-6.32c-0.32,0 -0.59,-0.27 -0.59,-0.61v-10.27c0,-0.34 0.26,-0.61 0.59,-0.61h6.32c0.32,0 0.59,0.27 0.59,0.61v10.27c0,0.34 -0.26,0.61 -0.59,0.61Z" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#BCBDBE"
|
||||||
|
android:pathData="m48.5,6.5L14.2,6.5c-2.32,0 -4.2,1.88 -4.2,4.2v41.3c0,2.49 2.01,4.5 4.5,4.5h34c2.49,0 4.5,-2.01 4.5,-4.5L53,11c0,-2.49 -2.01,-4.5 -4.5,-4.5ZM46.65,51.15h-30.3c-0.55,0 -1,-0.45 -1,-1L15.35,12.85c0,-0.55 0.45,-1 1,-1h30.3c0.55,0 1,0.45 1,1v37.3c0,0.55 -0.45,1 -1,1Z" />
|
||||||
|
</vector>
|
||||||
13
app/src/main/res/drawable/ic_small_window_light.xml
Normal file
13
app/src/main/res/drawable/ic_small_window_light.xml
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="63dp"
|
||||||
|
android:height="63dp"
|
||||||
|
android:autoMirrored="true"
|
||||||
|
android:viewportWidth="63"
|
||||||
|
android:viewportHeight="63">
|
||||||
|
<path
|
||||||
|
android:fillColor="#4D4D4D"
|
||||||
|
android:pathData="m17.85,15.85v17.3c0,0.83 0.67,1.5 1.5,1.5h13.3c0.83,0 1.5,-0.67 1.5,-1.5L34.15,15.85c0,-0.83 -0.68,-1.5 -1.5,-1.5h-13.3c-0.82,0 -1.5,0.67 -1.5,1.5ZM29.16,30.25h-6.32c-0.32,0 -0.59,-0.27 -0.59,-0.61v-10.27c0,-0.34 0.26,-0.61 0.59,-0.61h6.32c0.32,0 0.59,0.27 0.59,0.61v10.27c0,0.34 -0.26,0.61 -0.59,0.61Z" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#4D4D4D"
|
||||||
|
android:pathData="m48.5,6.5L14.2,6.5c-2.32,0 -4.2,1.88 -4.2,4.2v41.3c0,2.49 2.01,4.5 4.5,4.5h34c2.49,0 4.5,-2.01 4.5,-4.5L53,11c0,-2.49 -2.01,-4.5 -4.5,-4.5ZM46.65,51.15h-30.3c-0.55,0 -1,-0.45 -1,-1L15.35,12.85c0,-0.55 0.45,-1 1,-1h30.3c0.55,0 1,0.45 1,1v37.3c0,0.55 -0.45,1 -1,1Z" />
|
||||||
|
</vector>
|
||||||
@@ -38,7 +38,6 @@
|
|||||||
<string name="github_url">Vítejte více vývojářů, aby se podíleli na vývoji</string>
|
<string name="github_url">Vítejte více vývojářů, aby se podíleli na vývoji</string>
|
||||||
<string name="issues">Zpětná vazba/návrh</string>
|
<string name="issues">Zpětná vazba/návrh</string>
|
||||||
<string name="issues_url">Kliknutím zobrazíte problémy GitHub</string>
|
<string name="issues_url">Kliknutím zobrazíte problémy GitHub</string>
|
||||||
<string name="xposeddescription">Nástroj pro přizpůsobení MIUI13(Android 12)</string>
|
|
||||||
<string name="statusbar">Stavová lišta</string>
|
<string name="statusbar">Stavová lišta</string>
|
||||||
<string name="status_bar_time_seconds">Zobrazit vteřiny</string>
|
<string name="status_bar_time_seconds">Zobrazit vteřiny</string>
|
||||||
<string name="status_bar_network_speed_refresh_speed">Obnovení rychlosti sítě v sekundách</string>
|
<string name="status_bar_network_speed_refresh_speed">Obnovení rychlosti sítě v sekundách</string>
|
||||||
@@ -46,7 +45,6 @@
|
|||||||
<string name="main_switch">Hlavní přepínač modulu</string>
|
<string name="main_switch">Hlavní přepínač modulu</string>
|
||||||
<string name="hide_gps_icon">Skrýt ikonu GPS</string>
|
<string name="hide_gps_icon">Skrýt ikonu GPS</string>
|
||||||
<string name="hide_status_bar_network_speed_second">Skrýt jednotky rychlosti sítě (/s)</string>
|
<string name="hide_status_bar_network_speed_second">Skrýt jednotky rychlosti sítě (/s)</string>
|
||||||
<string name="menu">Menu</string>
|
|
||||||
<string name="Tips">Tipy</string>
|
<string name="Tips">Tipy</string>
|
||||||
<string name="skip_waiting_time">Přeskočit upozornění na 5/10 vteřin</string>
|
<string name="skip_waiting_time">Přeskočit upozornění na 5/10 vteřin</string>
|
||||||
<string name="unlock_unlimited_cropping">Odstranit omezení oříznutí obrázků/snímků obrazovky</string>
|
<string name="unlock_unlimited_cropping">Odstranit omezení oříznutí obrázků/snímků obrazovky</string>
|
||||||
@@ -69,7 +67,6 @@
|
|||||||
<string name="status_bar_clock_size">Velikost hodin (0: neměnit)</string>
|
<string name="status_bar_clock_size">Velikost hodin (0: neměnit)</string>
|
||||||
<string name="status_bar_clock_double_line_size">Velikost dvojitého řádku (0: neměnit)</string>
|
<string name="status_bar_clock_double_line_size">Velikost dvojitého řádku (0: neměnit)</string>
|
||||||
<string name="matters_needing_attention">Funkce nefunguje? </string>
|
<string name="matters_needing_attention">Funkce nefunguje? </string>
|
||||||
<string name="Done">OK</string>
|
|
||||||
<string name="about_module_summary">Zobrazit informace o modulu</string>
|
<string name="about_module_summary">Zobrazit informace o modulu</string>
|
||||||
<string name="contributor_list">Seznam přispěvatelů Open source repozitáře</string>
|
<string name="contributor_list">Seznam přispěvatelů Open source repozitáře</string>
|
||||||
<string name="developer">Vývojář</string>
|
<string name="developer">Vývojář</string>
|
||||||
@@ -95,7 +92,6 @@
|
|||||||
<string name="lock_one_hundred">Nastavit 100 bodů v bezpečnostní aplikaci</string>
|
<string name="lock_one_hundred">Nastavit 100 bodů v bezpečnostní aplikaci</string>
|
||||||
<string name="scope">Rozsah</string>
|
<string name="scope">Rozsah</string>
|
||||||
<string name="scope_android">Systémový framework</string>
|
<string name="scope_android">Systémový framework</string>
|
||||||
<string name="scope_systemui">SystemUI</string>
|
|
||||||
<string name="scope_miuihome">Domovská obrazovka</string>
|
<string name="scope_miuihome">Domovská obrazovka</string>
|
||||||
<string name="scope_other">Ostatní</string>
|
<string name="scope_other">Ostatní</string>
|
||||||
<string name="status_bar_network_speed_refresh_speed_summary">Změnit frekvenci obnovení složky rychlosti sítě ve stavové liště na 1 s</string>
|
<string name="status_bar_network_speed_refresh_speed_summary">Změnit frekvenci obnovení složky rychlosti sítě ve stavové liště na 1 s</string>
|
||||||
@@ -135,11 +131,8 @@
|
|||||||
<string name="layout_compatibility_mode">Režim kompatibility</string>
|
<string name="layout_compatibility_mode">Režim kompatibility</string>
|
||||||
<string name="left_margin">Levý okraj (0: Auto)</string>
|
<string name="left_margin">Levý okraj (0: Auto)</string>
|
||||||
<string name="right_margin">Pravý okraj (0: Auto)</string>
|
<string name="right_margin">Pravý okraj (0: Auto)</string>
|
||||||
<string name="layout_compatibility_mode_summary">Umožnit zobrazení levého a pravého otvoru</string>
|
|
||||||
<string name="remove_macro_blacklist">Odstranit makro-černou listinu</string>
|
<string name="remove_macro_blacklist">Odstranit makro-černou listinu</string>
|
||||||
<string name="hide_network_speed_splitter">Skrýt rozdělovač rychlosti sítě</string>
|
<string name="hide_network_speed_splitter">Skrýt rozdělovač rychlosti sítě</string>
|
||||||
<string name="updater">Updater</string>
|
|
||||||
<string name="remove_ota_validate">*Remove OTA validate [LAB]</string>
|
|
||||||
<string name="remove_ota_validate_summary">- Podpořte pouze použití VAB série, prosím neotevírejte jiné série.\n- Nemusí být potřeba interní testovací kvalifikace, aby bylo možné nainstalovat celý interní testovací balíček.\n- Ti, kdo mají interní testovací oprávnění, nebudou moci přijímat aktualizace interních testů a mohou být použity k blokování aktualizací systému.\n- Po aktualizaci křížových verzí je doporučeno vymazat data.\n- Neoficiální ROM použití není podporováno.</string>
|
<string name="remove_ota_validate_summary">- Podpořte pouze použití VAB série, prosím neotevírejte jiné série.\n- Nemusí být potřeba interní testovací kvalifikace, aby bylo možné nainstalovat celý interní testovací balíček.\n- Ti, kdo mají interní testovací oprávnění, nebudou moci přijímat aktualizace interních testů a mohou být použity k blokování aktualizací systému.\n- Po aktualizaci křížových verzí je doporučeno vymazat data.\n- Neoficiální ROM použití není podporováno.</string>
|
||||||
<string name="settings">Nastavení</string>
|
<string name="settings">Nastavení</string>
|
||||||
<string name="show_notification_importance">Zobrazit důležitost oznámení</string>
|
<string name="show_notification_importance">Zobrazit důležitost oznámení</string>
|
||||||
@@ -188,7 +181,6 @@
|
|||||||
<string name="input_error">Chyba vstupu</string>
|
<string name="input_error">Chyba vstupu</string>
|
||||||
<string name="range">Rozsah: </string>
|
<string name="range">Rozsah: </string>
|
||||||
<string name="big_mobile_type_icon_left_and_right_margins">Velká ikona mobilního typu doleva a doprava</string>
|
<string name="big_mobile_type_icon_left_and_right_margins">Velká ikona mobilního typu doleva a doprava</string>
|
||||||
<string name="cast">Cast</string>
|
|
||||||
<string name="force_support_send_app">Vynutit otevření všech aplikací na jiném zařízení</string>
|
<string name="force_support_send_app">Vynutit otevření všech aplikací na jiném zařízení</string>
|
||||||
<string name="status_bar_time_double_line_center_align">Zarovnání uprostřed dvojité řádky</string>
|
<string name="status_bar_time_double_line_center_align">Zarovnání uprostřed dvojité řádky</string>
|
||||||
<string name="default1">Výchozí</string>
|
<string name="default1">Výchozí</string>
|
||||||
|
|||||||
@@ -29,6 +29,7 @@
|
|||||||
<string name="hide_nfc_icon">Ocultar icono de NFC</string>
|
<string name="hide_nfc_icon">Ocultar icono de NFC</string>
|
||||||
<string name="hide_big_hd_icon">Ocultar icono grande HD</string>
|
<string name="hide_big_hd_icon">Ocultar icono grande HD</string>
|
||||||
<string name="hide_small_hd_icon">Ocultar icono pequeño HD</string>
|
<string name="hide_small_hd_icon">Ocultar icono pequeño HD</string>
|
||||||
|
<string name="hide_new_hd_icon">Ocultar nuevo icono HD</string>
|
||||||
<string name="hide_hd_no_service_icon">Ocultar icono sin servicio HD</string>
|
<string name="hide_hd_no_service_icon">Ocultar icono sin servicio HD</string>
|
||||||
<string name="about">Acerca de</string>
|
<string name="about">Acerca de</string>
|
||||||
<string name="about_module">Acerca del Módulo</string>
|
<string name="about_module">Acerca del Módulo</string>
|
||||||
@@ -38,7 +39,7 @@
|
|||||||
<string name="github_url">Más desarrolladores están invitados a participar en el proyecto</string>
|
<string name="github_url">Más desarrolladores están invitados a participar en el proyecto</string>
|
||||||
<string name="issues">Comentarios/Sugerencias</string>
|
<string name="issues">Comentarios/Sugerencias</string>
|
||||||
<string name="issues_url">Clic para ver errores en GitHub</string>
|
<string name="issues_url">Clic para ver errores en GitHub</string>
|
||||||
<string name="xposeddescription">Herramienta de personalización para MIUI13 (Android 12)</string>
|
<string name="xposeddescription">Herramienta de personalización para MIUI13+(Android 12+)</string>
|
||||||
<string name="statusbar">Barra de estado</string>
|
<string name="statusbar">Barra de estado</string>
|
||||||
<string name="status_bar_time_seconds">Mostrar segundos</string>
|
<string name="status_bar_time_seconds">Mostrar segundos</string>
|
||||||
<string name="status_bar_network_speed_refresh_speed">La velocidad de red se actualiza en segundos</string>
|
<string name="status_bar_network_speed_refresh_speed">La velocidad de red se actualiza en segundos</string>
|
||||||
@@ -69,7 +70,7 @@
|
|||||||
<string name="status_bar_clock_size">Tamaño del reloj (0: no cambiar)</string>
|
<string name="status_bar_clock_size">Tamaño del reloj (0: no cambiar)</string>
|
||||||
<string name="status_bar_clock_double_line_size">Tamaño de la fila dual (0: no cambiar)</string>
|
<string name="status_bar_clock_double_line_size">Tamaño de la fila dual (0: no cambiar)</string>
|
||||||
<string name="matters_needing_attention">¿Alguna característica no funciona? </string>
|
<string name="matters_needing_attention">¿Alguna característica no funciona? </string>
|
||||||
<string name="Done">OK</string>
|
<string name="Done">Ok</string>
|
||||||
<string name="about_module_summary">Ver información relacionada con el módulo</string>
|
<string name="about_module_summary">Ver información relacionada con el módulo</string>
|
||||||
<string name="contributor_list">Lista de colaboradores del repositorio de código abierto</string>
|
<string name="contributor_list">Lista de colaboradores del repositorio de código abierto</string>
|
||||||
<string name="developer">Desarrollador</string>
|
<string name="developer">Desarrollador</string>
|
||||||
@@ -135,7 +136,7 @@
|
|||||||
<string name="layout_compatibility_mode">Modo de compatibilidad</string>
|
<string name="layout_compatibility_mode">Modo de compatibilidad</string>
|
||||||
<string name="left_margin">Margen izquierdo (0: Auto)</string>
|
<string name="left_margin">Margen izquierdo (0: Auto)</string>
|
||||||
<string name="right_margin">Margen derecho (0: Auto)</string>
|
<string name="right_margin">Margen derecho (0: Auto)</string>
|
||||||
<string name="layout_compatibility_mode_summary">Hace que los agujeros izquierdo y derecho de la pantalla se puedan mostrar normalmente</string>
|
<string name="layout_compatibility_mode_summary">Forzar el diseño a pantalla completa (compatible con cualquier forma de pantalla)</string>
|
||||||
<string name="remove_macro_blacklist">Remueve la lista negra de game macro</string>
|
<string name="remove_macro_blacklist">Remueve la lista negra de game macro</string>
|
||||||
<string name="hide_network_speed_splitter">Remover el divisor de la velocidad de red</string>
|
<string name="hide_network_speed_splitter">Remover el divisor de la velocidad de red</string>
|
||||||
<string name="updater">Actualizador</string>
|
<string name="updater">Actualizador</string>
|
||||||
@@ -224,4 +225,27 @@
|
|||||||
<string name="off">Apagado</string>
|
<string name="off">Apagado</string>
|
||||||
<string name="center">Centro</string>
|
<string name="center">Centro</string>
|
||||||
<string name="left_or_right">Izquierda o Derecha</string>
|
<string name="left_or_right">Izquierda o Derecha</string>
|
||||||
|
<string name="preset">Preajuste</string>
|
||||||
|
<string name="geek">Geek</string>
|
||||||
|
<string name="do_not_clear_app">Evitar cerrar apps en segundo plano</string>
|
||||||
|
<string name="do_not_clear_app_summary">Puede incrementar el consumo de batería, recomendado con \"Hacer el Millet más agresivo\", NO recomendado para usar con tombstones</string>
|
||||||
|
<string name="make_millet_more_aggressive">Hacer el Millet más agresivo</string>
|
||||||
|
<string name="make_millet_more_aggressive_summary">Permitr a Millet congelar apps mientras las apps en segundo plano tengan notificaciones, servicios y procesos ejecutándose.\nApps que no se deseen congelar se pueden configurar como Sin restricciones en Ahorro de batería.\nPor favor desinstala módulos relacionados con tombstone y NoANR antes de activar esta opción.</string>
|
||||||
|
<string name="make_millet_ignore_active">Permitir a Millet congelar apps activas</string>
|
||||||
|
<string name="make_millet_ignore_active_summary">Muy agresivo y puede afectar el comportamiento de la aplicación</string>
|
||||||
|
<string name="pkg_installer">Instalador de Paquetes</string>
|
||||||
|
<string name="pkg_installer_summary">Desactivar la comprobación del conteo de la instalación</string>
|
||||||
|
<string name="big_mobile_type_only_show_network_card">Tipo de móvil grande solo muestra tarjeta de red</string>
|
||||||
|
<string name="big_mobile_type_location">Ubicación del tipo de red móvil grande</string>
|
||||||
|
<string name="miuihome_recentview_remove_card_animation">Modificar la animación de marcado de tarjetas</string>
|
||||||
|
<string name="miuihome_recentview_remove_card_animation_summary">Modificar el efecto de animación al remover ventana de tareas recientes</string>
|
||||||
|
<string name="miuihome_recentwiew_wallpaper_darkening">Deshabilitar atenuación de fondo de pantalla</string>
|
||||||
|
<string name="miuihome_recentwiew_wallpaper_darkening_summary">Esto deshabilitará el efecto en el que el fondo de pantalla se ilumina gradualmente cuando se abre y se cierra una tarea reciente</string>
|
||||||
|
<string name="miuihome_scroll_icon_name">Desplazar el nombre de la app</string>
|
||||||
|
<string name="miuihome_scroll_icon_name_summary">Si el nombre de la aplicación es demasiado largo se mostrará con desplazamiento y sin ningúna línea nueva</string>
|
||||||
|
<string name="miuihome_shortcut_add_small_window">Añadir ventana al menú de accesos directos</string>
|
||||||
|
<string name="miuihome_shortcut_add_small_window_summary">Mantener presionando el icono del escritorio para añadir a una ventana de acceso rápido</string>
|
||||||
|
<string name="miuihome_shortcut_add_small_window_title">Ventana pequeña </string>
|
||||||
|
<string name="click_to_view_use_cases">Clic para ver casos de uso</string>
|
||||||
|
<string name="disable_bluetooth_temporarily_off" comment="This function is used to completely close Bluetooth">Deshabilitar Bluetooth temporalmente apagado</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<resources>
|
||||||
<string name="lock_max_fps">Verrouiller le taux de rafraîchissement actuel</string>
|
<string name="lock_max_fps">Verrouiller le taux de rafraîchissement actuel</string>
|
||||||
<string name="ui">Interface</string>
|
|
||||||
<string name="delete_on_post_notification">Supprimer l\'affichage sur la notification</string>
|
<string name="delete_on_post_notification">Supprimer l\'affichage sur la notification</string>
|
||||||
<string name="delete_on_post_notification_summary">Supprimer la notification \"Cette application s\'affiche au-dessus des autres applications\"</string>
|
<string name="delete_on_post_notification_summary">Supprimer la notification \"Cette application s\'affiche au-dessus des autres applications\"</string>
|
||||||
<string name="other">Autre</string>
|
<string name="other">Autre</string>
|
||||||
@@ -30,13 +29,11 @@
|
|||||||
<string name="hide_hd_no_service_icon">Masquer l\'icône HD Non Service</string>
|
<string name="hide_hd_no_service_icon">Masquer l\'icône HD Non Service</string>
|
||||||
<string name="about">À propos</string>
|
<string name="about">À propos</string>
|
||||||
<string name="about_module">À propos du Module</string>
|
<string name="about_module">À propos du Module</string>
|
||||||
<string name="verison">Version</string>
|
|
||||||
<string name="dev_coolapk">Développeur en Coolapk</string>
|
<string name="dev_coolapk">Développeur en Coolapk</string>
|
||||||
<string name="opensource">Référentiel Open Source</string>
|
<string name="opensource">Référentiel Open Source</string>
|
||||||
<string name="github_url">Bienvenue à d\'autres développeurs pour participer au développement</string>
|
<string name="github_url">Bienvenue à d\'autres développeurs pour participer au développement</string>
|
||||||
<string name="issues">Feed-back/Proposition</string>
|
<string name="issues">Feed-back/Proposition</string>
|
||||||
<string name="issues_url">Cliquez pour voir GitHub</string>
|
<string name="issues_url">Cliquez pour voir GitHub</string>
|
||||||
<string name="xposeddescription">Outil de personnalisation pour MIUI13(Android 12)</string>
|
|
||||||
<string name="statusbar">Barre d\'État</string>
|
<string name="statusbar">Barre d\'État</string>
|
||||||
<string name="status_bar_time_seconds">Affichage des secondes</string>
|
<string name="status_bar_time_seconds">Affichage des secondes</string>
|
||||||
<string name="status_bar_network_speed_refresh_speed">Rafraichissement de la vitesse du réseau en secondes</string>
|
<string name="status_bar_network_speed_refresh_speed">Rafraichissement de la vitesse du réseau en secondes</string>
|
||||||
@@ -44,7 +41,6 @@
|
|||||||
<string name="main_switch">Interrupteur Généra</string>
|
<string name="main_switch">Interrupteur Généra</string>
|
||||||
<string name="hide_gps_icon">Masquer l\'icône GPS</string>
|
<string name="hide_gps_icon">Masquer l\'icône GPS</string>
|
||||||
<string name="hide_status_bar_network_speed_second">Masquer les unités de vitesse réseau (/s)</string>
|
<string name="hide_status_bar_network_speed_second">Masquer les unités de vitesse réseau (/s)</string>
|
||||||
<string name="menu">Menu</string>
|
|
||||||
<string name="Tips">Conseils</string>
|
<string name="Tips">Conseils</string>
|
||||||
<string name="unlock_unlimited_cropping">Supprimer la restriction lors du recadrage des photos/captures d\'écran</string>
|
<string name="unlock_unlimited_cropping">Supprimer la restriction lors du recadrage des photos/captures d\'écran</string>
|
||||||
<string name="hide_slave_wifi_icon">Masquer l\'icône secondaire WIFI</string>
|
<string name="hide_slave_wifi_icon">Masquer l\'icône secondaire WIFI</string>
|
||||||
@@ -84,7 +80,6 @@
|
|||||||
<string name="qq_channel">Joignez la chaîne officielle en QQ</string>
|
<string name="qq_channel">Joignez la chaîne officielle en QQ</string>
|
||||||
<string name="tg_channel">Joignez la chaîne officielle en Télégramme</string>
|
<string name="tg_channel">Joignez la chaîne officielle en Télégramme</string>
|
||||||
<string name="tg_channel_summary">Vous pouvez entrer dans le groupe de discussion sur la page de la chaîne</string>
|
<string name="tg_channel_summary">Vous pouvez entrer dans le groupe de discussion sur la page de la chaîne</string>
|
||||||
<string name="discussions">Discussions</string>
|
|
||||||
<string name="remove_small_window_restrictions_summary">Ignorer la liste noire du système et l\'interdiction du logiciel des petites fenêtres</string>
|
<string name="remove_small_window_restrictions_summary">Ignorer la liste noire du système et l\'interdiction du logiciel des petites fenêtres</string>
|
||||||
<string name="remove_the_left_side_of_the_lock_screen">Supprimer le panneau latéral de l\'écran de verrouillage</string>
|
<string name="remove_the_left_side_of_the_lock_screen">Supprimer le panneau latéral de l\'écran de verrouillage</string>
|
||||||
<string name="remove_lock_screen_camera">Supprimer le caméra de l\'écran de verrouillage</string>
|
<string name="remove_lock_screen_camera">Supprimer le caméra de l\'écran de verrouillage</string>
|
||||||
@@ -92,7 +87,6 @@
|
|||||||
<string name="lock_one_hundred">Définir 100 points dans la Centre Security</string>
|
<string name="lock_one_hundred">Définir 100 points dans la Centre Security</string>
|
||||||
<string name="scope">Aapplication activée</string>
|
<string name="scope">Aapplication activée</string>
|
||||||
<string name="scope_android">Cadre du Système</string>
|
<string name="scope_android">Cadre du Système</string>
|
||||||
<string name="scope_systemui">SystemUI</string>
|
|
||||||
<string name="scope_miuihome">Homepage</string>
|
<string name="scope_miuihome">Homepage</string>
|
||||||
<string name="scope_other">Autres</string>
|
<string name="scope_other">Autres</string>
|
||||||
<string name="status_bar_network_speed_refresh_speed_summary">Changer la fréquence d\'actualisation du composant de vitesse réseau de la barre d\'état à 1s</string>
|
<string name="status_bar_network_speed_refresh_speed_summary">Changer la fréquence d\'actualisation du composant de vitesse réseau de la barre d\'état à 1s</string>
|
||||||
@@ -132,7 +126,6 @@
|
|||||||
<string name="layout_compatibility_mode">Mode Compatibilité</string>
|
<string name="layout_compatibility_mode">Mode Compatibilité</string>
|
||||||
<string name="left_margin">Marge gauche (0: Auto)</string>
|
<string name="left_margin">Marge gauche (0: Auto)</string>
|
||||||
<string name="right_margin">Marge droite (0: Auto)</string>
|
<string name="right_margin">Marge droite (0: Auto)</string>
|
||||||
<string name="layout_compatibility_mode_summary">L\'écran de trou peut s\'afficher normalement</string>
|
|
||||||
<string name="remove_macro_blacklist">Supprimer la liste noire des macros du jeu</string>
|
<string name="remove_macro_blacklist">Supprimer la liste noire des macros du jeu</string>
|
||||||
<string name="hide_network_speed_splitter">Masquer le écart de vitesse du réseau</string>
|
<string name="hide_network_speed_splitter">Masquer le écart de vitesse du réseau</string>
|
||||||
<string name="updater">Mise à jour</string>
|
<string name="updater">Mise à jour</string>
|
||||||
|
|||||||
@@ -37,7 +37,6 @@
|
|||||||
<string name="github_url">Szeretnénk, hogy több fejlesztő vegyen részt a fejlesztésben</string>
|
<string name="github_url">Szeretnénk, hogy több fejlesztő vegyen részt a fejlesztésben</string>
|
||||||
<string name="issues">Visszajelzés/javaslat</string>
|
<string name="issues">Visszajelzés/javaslat</string>
|
||||||
<string name="issues_url">Kattintson a GitHub problémák megtekintéséhez</string>
|
<string name="issues_url">Kattintson a GitHub problémák megtekintéséhez</string>
|
||||||
<string name="xposeddescription">Testreszabási eszköz a MIUI13(Android 12) számára</string>
|
|
||||||
<string name="statusbar">Állapotsor</string>
|
<string name="statusbar">Állapotsor</string>
|
||||||
<string name="status_bar_time_seconds">Másodpercek kijelzése</string>
|
<string name="status_bar_time_seconds">Másodpercek kijelzése</string>
|
||||||
<string name="status_bar_network_speed_refresh_speed">Hálózati sebesség frissítése másodpercekben</string>
|
<string name="status_bar_network_speed_refresh_speed">Hálózati sebesség frissítése másodpercekben</string>
|
||||||
@@ -68,7 +67,6 @@
|
|||||||
<string name="status_bar_clock_size">Óraméret (0: nem változtatható)</string>
|
<string name="status_bar_clock_size">Óraméret (0: nem változtatható)</string>
|
||||||
<string name="status_bar_clock_double_line_size">Kettős sorméret (0: nem változtatható)</string>
|
<string name="status_bar_clock_double_line_size">Kettős sorméret (0: nem változtatható)</string>
|
||||||
<string name="matters_needing_attention">A funkció nem működik? </string>
|
<string name="matters_needing_attention">A funkció nem működik? </string>
|
||||||
<string name="Done">OK</string>
|
|
||||||
<string name="about_module_summary">Modulhoz kapcsolódó információk megtekintése</string>
|
<string name="about_module_summary">Modulhoz kapcsolódó információk megtekintése</string>
|
||||||
<string name="contributor_list">Nyílt forráskódú adattár közreműködőinek listája</string>
|
<string name="contributor_list">Nyílt forráskódú adattár közreműködőinek listája</string>
|
||||||
<string name="developer">Fejlesztő</string>
|
<string name="developer">Fejlesztő</string>
|
||||||
@@ -134,7 +132,6 @@
|
|||||||
<string name="layout_compatibility_mode">Kompatibilitási mód</string>
|
<string name="layout_compatibility_mode">Kompatibilitási mód</string>
|
||||||
<string name="left_margin">Bal margó (0: Automatikus)</string>
|
<string name="left_margin">Bal margó (0: Automatikus)</string>
|
||||||
<string name="right_margin">Jobb margó (0: Automatikus)</string>
|
<string name="right_margin">Jobb margó (0: Automatikus)</string>
|
||||||
<string name="layout_compatibility_mode_summary">A bal és jobb oldali lyuk képernyő normálisan jeleníthető meg</string>
|
|
||||||
<string name="remove_macro_blacklist">Játék makró feketelista eltávolítása</string>
|
<string name="remove_macro_blacklist">Játék makró feketelista eltávolítása</string>
|
||||||
<string name="hide_network_speed_splitter">Hálózati sebességosztó elrejtése</string>
|
<string name="hide_network_speed_splitter">Hálózati sebességosztó elrejtése</string>
|
||||||
<string name="updater">Frissítés</string>
|
<string name="updater">Frissítés</string>
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user