21 Commits

Author SHA1 Message Date
乌堆小透明
519ded1f75 Revert "合并拉取请求 #233"
This reverts commit 317340bf6f.
2023-03-05 21:06:59 +08:00
Howie
317340bf6f 合并拉取请求 #233
* 修改 隐藏 SIM 卡 的方法

* 修改 隐藏 SIM 卡 的方法
2023-02-27 16:36:06 +08:00
LittleTurtle2333
bc26ba512c 更新版本号至1.7.5 2023-02-20 21:37:28 +08:00
乌堆小透明
cd28e662a1 New Crowdin updates (#226)
* New translations strings.xml (Chinese Traditional)
[ci skip] New translations from Crowdin

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

* New translations strings.xml (Portuguese, Brazilian)
[ci skip] New translations from Crowdin

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

* New translations strings.xml (Chinese Traditional, Hong Kong)
[ci skip] New translations from Crowdin

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

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

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

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

* New translations strings.xml (Portuguese, Brazilian)
[ci skip] New translations from Crowdin

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

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

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

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

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

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

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

* New translations strings.xml (Portuguese, Brazilian)
[ci skip] New translations from Crowdin

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

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

* New translations strings.xml (Portuguese, Brazilian)
[ci skip] New translations from Crowdin
2023-02-20 21:32:58 +08:00
LittleTurtle2333
f67d387020 新增A13禁用临时蓝牙关闭 2023-02-20 21:27:04 +08:00
乌堆小透明
f2354022aa [skip ci] rename android.yml 2023-02-20 20:17:08 +08:00
LittleTurtle2333
d7a1af8846 A12自定义时钟极客模式支持更多内容(未测试) 2023-02-20 20:15:04 +08:00
LittleTurtle2333
8a1c8a85c3 [skip ci] Update README.md 2023-02-19 23:22:59 +08:00
LittleTurtle2333
12848808d3 修复A12状态栏布局兼容模式的一些BUG 2023-02-19 23:03:29 +08:00
LittleTurtle2333
7f23f07209 修复状态栏布局兼容模式的一些BUG 2023-02-19 17:11:25 +08:00
乌堆小透明
54b31ea478 Update dev.yml 2023-02-19 16:25:40 +08:00
乌堆小透明
44e6995da1 Create dev.yml 2023-02-19 16:19:12 +08:00
LittleTurtle2333
12e76869dd 优化开启时间居中后的细节 2023-02-18 23:56:04 +08:00
LittleTurtle2333
97212d74d3 更新Xposed description 2023-02-18 22:31:26 +08:00
LittleTurtle2333
e152a5ba74 更新BlockMIUI 2023-02-18 21:54:56 +08:00
LittleTurtle2333
efc77eb518 更新版本号至1.7.4 2023-02-18 21:53:21 +08:00
乌堆小透明
8cad8e371c 合并拉取请求 #225
* New translations strings.xml (Spanish)

* New translations strings.xml (Portuguese)

* New translations strings.xml (Vietnamese)

* New translations strings.xml (Portuguese, Brazilian)

* New translations strings.xml (Japanese)

* New translations strings.xml (Chinese Traditional)

* New translations strings.xml (Chinese Traditional)

* New translations strings.xml (Chinese Traditional)

* New translations strings.xml (Chinese Traditional)
2023-02-18 21:52:39 +08:00
LittleTurtle2333
990ea8ef7e 新增修改划卡动画&桌面快捷小窗 2023-02-18 21:50:10 +08:00
LittleTurtle2333
4ce55d1fb3 移除无用dependencies 2023-02-18 21:48:42 +08:00
LittleTurtle2333
1feb754385 添加KotlinXposedHelper 2023-02-18 21:48:19 +08:00
LittleTurtle2333
a107f71986 修改状态栏图标顺序(未实现) 2023-02-18 19:00:57 +08:00
35 changed files with 1172 additions and 568 deletions

50
.github/workflows/dev.yml vendored Normal file
View File

@@ -0,0 +1,50 @@
name: Dev
on:
push:
branches: [ "main" ]
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: set up JDK 11
uses: actions/setup-java@v3
with:
java-version: '11'
distribution: 'temurin'
cache: gradle
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Clone UI
run: |
cd blockmiui
git submodule init
git submodule update
- name: Build with Gradle
run: |
bash ./gradlew assembleDebug
- name: Sign Debug APK
if: success()
id: sign_debug
uses: r0adkll/sign-android-release@v1.0.4
with:
releaseDirectory: ./app/build/outputs/apk/debug
signingKeyBase64: ${{ secrets.SIGNING_KEY }}
alias: ${{ secrets.KEY_STORE_ALIAS }}
keyStorePassword: ${{ secrets.KEY_STORE_PASSWORD }}
keyPassword: ${{ secrets.KEY_STORE_PASSWORD }}
- name: Upload Debug APK
uses: actions/upload-artifact@v2
with:
name: WooBox_Debug
path: ${{ steps.sign_debug.outputs.signedReleaseFile }}

View File

@@ -1,4 +1,4 @@
name: Android CI name: PR Check
on: on:
pull_request: pull_request:

View File

@@ -15,6 +15,8 @@
开发者:[酷安@乌堆小透明](http://www.coolapk.com/u/883441) 开发者:[酷安@乌堆小透明](http://www.coolapk.com/u/883441)
当前仅基于`Android13`进行开发,`Android12`几乎不再维护。也有基于`Android13`开发,但是能在`Android12`使用的情况,请广大社区使用`Android12`的开发者自行测试和修复后提交`Pull Request`
--- ---
### 模块截图 ### 模块截图

View File

@@ -11,6 +11,12 @@
--- ---
### Module Description
Currently only developed based on `Android13`, `Android12` is almost no longer maintained. There are also cases where the development is based on `Android13`, but it can be used in `Android12`. Developers in the community who use `Android12` are requested to submit `Pull Request` after testing and repairing by themselves.
---
### Screenshot ### Screenshot
![Screenshot](https://raw.githubusercontent.com/LittleTurtle2333/SimplicityTools/main/doc/en.jpg) ![Screenshot](https://raw.githubusercontent.com/LittleTurtle2333/SimplicityTools/main/doc/en.jpg)

View File

@@ -11,8 +11,8 @@ android {
applicationId = "com.lt2333.simplicitytools" applicationId = "com.lt2333.simplicitytools"
minSdk = 31 minSdk = 31
targetSdk = 33 targetSdk = 33
versionCode = 73 versionCode = 75
versionName = "1.7.3" versionName = "1.7.5"
buildConfigField("String", "BUILD_TIME", "\"${System.currentTimeMillis()}\"") buildConfigField("String", "BUILD_TIME", "\"${System.currentTimeMillis()}\"")
} }
@@ -59,5 +59,4 @@ dependencies {
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")
} }

View File

@@ -1,5 +1,7 @@
package com.lt2333.simplicitytools.activity.pages.s package com.lt2333.simplicitytools.activity.pages.s
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,8 +13,8 @@ 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)
@@ -54,11 +56,10 @@ class SystemUIPageForS : BasePage() {
} }
}) })
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 +67,23 @@ class SystemUIPageForS : 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)
@@ -246,23 +213,37 @@ class SystemUIPageForS : BasePage() {
//极客模式起始 //极客模式起始
TextSummaryWithArrow(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"), "", isSingleLine = false) 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))

View File

@@ -35,8 +35,7 @@ class OtherPageForT : BasePage() {
textId = R.string.miuihome_recentwiew_wallpaper_darkening, tipsId = R.string.miuihome_recentwiew_wallpaper_darkening_summary textId = R.string.miuihome_recentwiew_wallpaper_darkening, tipsId = R.string.miuihome_recentwiew_wallpaper_darkening_summary
), SwitchV("miuihome_recentwiew_wallpaper_darkening", false) ), SwitchV("miuihome_recentwiew_wallpaper_darkening", false)
) )
//TODO未开发完成 TextSummaryWithSwitch(
/*TextSummaryWithSwitch(
TextSummaryV( TextSummaryV(
textId = R.string.miuihome_recentview_remove_card_animation, tipsId = R.string.miuihome_recentview_remove_card_animation_summary textId = R.string.miuihome_recentview_remove_card_animation, tipsId = R.string.miuihome_recentview_remove_card_animation_summary
), SwitchV("miuihome_recentview_remove_card_animation", false) ), SwitchV("miuihome_recentview_remove_card_animation", false)
@@ -44,7 +43,7 @@ class OtherPageForT : BasePage() {
TextSummaryWithSwitch( TextSummaryWithSwitch(
TextSummaryV(textId = R.string.miuihome_shortcut_add_small_window, tipsId = R.string.miuihome_shortcut_add_small_window_summary), 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) SwitchV("miuihome_shortcut_add_small_window", false)
)*/ )
TextSummaryWithSwitch( TextSummaryWithSwitch(
TextSummaryV(textId = R.string.miuihome_scroll_icon_name, tipsId = R.string.miuihome_scroll_icon_name_summary), TextSummaryV(textId = R.string.miuihome_scroll_icon_name, tipsId = R.string.miuihome_scroll_icon_name_summary),
SwitchV("miuihome_scroll_icon_name", false) SwitchV("miuihome_scroll_icon_name", false)

View File

@@ -566,6 +566,13 @@ import com.lt2333.simplicitytools.R
) )
Line() Line()
TitleText(textId = R.string.control_center) TitleText(textId = R.string.control_center)
TextSummaryWithSwitch(
TextSummaryV(
textId = R.string.disable_bluetooth_temporarily_off
), SwitchV(
"disable_bluetooth_temporarily_off"
)
)
val controlCenterWeatherBinding = GetDataBinding({ val controlCenterWeatherBinding = GetDataBinding({
MIUIActivity.safeSP.getBoolean( MIUIActivity.safeSP.getBoolean(
"control_center_weather", false "control_center_weather", false

View File

@@ -32,37 +32,7 @@ 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.StatusBarNetworkSpeedRefreshSpeedForS
import com.lt2333.simplicitytools.hooks.rules.s.systemui.StatusBarTimeCustomizationForS import com.lt2333.simplicitytools.hooks.rules.s.systemui.StatusBarTimeCustomizationForS
import com.lt2333.simplicitytools.hooks.rules.s.systemui.WaveChargeForS 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.*
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
@@ -105,6 +75,7 @@ object SystemUI : AppRegister() {
CanNotificationSlideForT, //允许下滑通知打开小窗 CanNotificationSlideForT, //允许下滑通知打开小窗
LockScreenClockDisplaySecondsForT, // 锁屏时钟显示秒 LockScreenClockDisplaySecondsForT, // 锁屏时钟显示秒
ShowWifiStandardForT, // 显示 WIFI 角标 ShowWifiStandardForT, // 显示 WIFI 角标
DisableBluetoothTemporarilyOffForT, //禁用临时蓝牙关闭
) )
} }

View File

@@ -1,53 +1,45 @@
package com.lt2333.simplicitytools.hooks.rules.all.miuihome package com.lt2333.simplicitytools.hooks.rules.all.miuihome
import android.animation.ObjectAnimator import android.animation.ObjectAnimator
import android.animation.TimeInterpolator
import android.view.MotionEvent
import android.view.View import android.view.View
import com.github.kyuubiran.ezxhelper.utils.args import com.lt2333.simplicitytools.utils.*
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.hookReplace
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.putObject
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
object ModifyRecentViewRemoveCardAnimForAll : HookRegister() { object ModifyRecentViewRemoveCardAnimForAll : HookRegister() {
override fun init() = hasEnable("miuihome_recentview_remove_card_animation") { override fun init() = hasEnable("miuihome_recentview_remove_card_animation") {
findMethod("com.miui.home.recents.views.SwipeHelperForRecents") { "com.miui.home.recents.views.SwipeHelperForRecents".hookAfterMethod("onTouchEvent", MotionEvent::class.java) {
name == "onTouchEvent" && parameterCount == 1 val mCurrView = it.thisObject.getObjectField("mCurrView") as View?
}.hookAfter {
val mCurrView = it.thisObject.getObject("mCurrView") as View?
if (mCurrView != null) { if (mCurrView != null) {
mCurrView.alpha = 1f mCurrView.alpha = 1f
mCurrView.scaleX = 1f mCurrView.scaleX = 1f
mCurrView.scaleY = 1f mCurrView.scaleY = 1f
} }
} }
findMethod("com.miui.home.recents.TaskStackViewLayoutStyleHorizontal") {
name == "createScaleDismissAnimation" && parameterCount == 2 "com.miui.home.recents.TaskStackViewLayoutStyleHorizontal".replaceMethod("createScaleDismissAnimation", View::class.java, Float::class.java) {
}.hookReplace {
val view = it.args[0] as View val view = it.args[0] as View
val getScreenHeight = loadClass("com.miui.home.launcher.DeviceConfig").invokeStaticMethod("getScreenHeight") as Int 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 ofFloat = ObjectAnimator.ofFloat(view, View.TRANSLATION_Y, view.translationY, -getScreenHeight * 1.1484375f)
ofFloat.duration = 200 val physicBasedInterpolator = XposedHelpers.newInstance("com.miui.home.launcher.anim.PhysicBasedInterpolator".findClass(), 0.9f, 0.78f)
return@hookReplace ofFloat ofFloat.interpolator = physicBasedInterpolator as TimeInterpolator
ofFloat.duration = 400
return@replaceMethod ofFloat
} }
findMethod("com.miui.home.recents.views.VerticalSwipe") {
name == "calculate" && parameterCount == 1 "com.miui.home.recents.views.VerticalSwipe".hookAfterMethod("calculate", Float::class.java) {
}.hookAfter {
val f = it.args[0] as Float val f = it.args[0] as Float
val asScreenHeightWhenDismiss = loadClass("com.miui.home.recents.views.VerticalSwipe").invokeStaticMethod("getAsScreenHeightWhenDismiss") as Int val asScreenHeightWhenDismiss = "com.miui.home.recents.views.VerticalSwipe".findClass().callStaticMethod("getAsScreenHeightWhenDismiss") as Int
val f2 = f / asScreenHeightWhenDismiss val f2 = f / asScreenHeightWhenDismiss
val mTaskViewHeight = it.thisObject.getObject("mTaskViewHeight") as Float val mTaskViewHeight = it.thisObject.getObjectField("mTaskViewHeight") as Float
val mCurScale = it.thisObject.getObject("mCurScale") as Float val mCurScale = it.thisObject.getObjectField("mCurScale") as Float
val f3: Float = mTaskViewHeight * mCurScale val f3: Float = mTaskViewHeight * mCurScale
val i = if (f2 > 0.0f) 1 else if (f2 == 0.0f) 0 else -1 val i = if (f2 > 0.0f) 1 else if (f2 == 0.0f) 0 else -1
val afterFrictionValue: Float = it.thisObject.invokeMethod("afterFrictionValue", args(f, asScreenHeightWhenDismiss)) as Float val afterFrictionValue: Float = it.thisObject.callMethod("afterFrictionValue", f, asScreenHeightWhenDismiss) as Float
if (i < 0) it.thisObject.putObject("mCurTransY", (mTaskViewHeight / 2.0f + afterFrictionValue * 2) - (f3 / 2.0f)) if (i < 0) it.thisObject.setObjectField("mCurTransY", (mTaskViewHeight / 2.0f + afterFrictionValue * 2) - (f3 / 2.0f))
} }
} }

View File

@@ -1,8 +1,10 @@
package com.lt2333.simplicitytools.hooks.rules.all.miuihome package com.lt2333.simplicitytools.hooks.rules.all.miuihome
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.content.Context
import android.text.TextUtils import android.text.TextUtils
import android.view.View import android.view.View
import android.view.ViewGroup
import android.widget.TextView import android.widget.TextView
import com.github.kyuubiran.ezxhelper.utils.Log import com.github.kyuubiran.ezxhelper.utils.Log
import com.github.kyuubiran.ezxhelper.utils.args import com.github.kyuubiran.ezxhelper.utils.args
@@ -10,54 +12,57 @@ import com.github.kyuubiran.ezxhelper.utils.findMethod
import com.github.kyuubiran.ezxhelper.utils.getObject import com.github.kyuubiran.ezxhelper.utils.getObject
import com.github.kyuubiran.ezxhelper.utils.hookAfter import com.github.kyuubiran.ezxhelper.utils.hookAfter
import com.github.kyuubiran.ezxhelper.utils.invokeMethod import com.github.kyuubiran.ezxhelper.utils.invokeMethod
import com.lt2333.simplicitytools.utils.hasEnable import com.lt2333.simplicitytools.utils.*
import com.lt2333.simplicitytools.utils.xposed.base.HookRegister import com.lt2333.simplicitytools.utils.xposed.base.HookRegister
object ScrollIconNameForAll : HookRegister() { object ScrollIconNameForAll : HookRegister() {
@SuppressLint("DiscouragedApi") @SuppressLint("DiscouragedApi")
override fun init() = hasEnable("miuihome_scroll_icon_name") { 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 { try {
findMethod("com.miui.home.launcher.ItemIcon") { "com.miui.home.launcher.ItemIcon".hookAfterMethod(
name == "onFinishInflate" "onFinishInflate"
}.hookAfter { ) {
val mTitle = it.thisObject.getObject("mTitle") as TextView val mTitle = it.thisObject.getObjectField("mTitle") as TextView
mTitleScrolling(mTitle) mTitleScrolling(mTitle)
} }
findMethod("com.miui.home.launcher.maml.MaMlWidgetView") { "com.miui.home.launcher.maml.MaMlWidgetView".hookAfterMethod(
name == "onFinishInflate" "onFinishInflate"
}.hookAfter { ) {
val mTitle = it.thisObject.getObject("mTitle") as TextView val mTitle = it.thisObject.getObjectField("mTitleTextView") as TextView
mTitleScrolling(mTitle) mTitleScrolling(mTitle)
} }
findMethod("com.miui.home.launcher.LauncherMtzGadgetView") { "com.miui.home.launcher.LauncherMtzGadgetView".hookAfterMethod(
name == "onFinishInflate" "onFinishInflate"
}.hookAfter { ) {
val mTitle = it.thisObject.getObject("mTitle") as TextView val mTitle = it.thisObject.getObjectField("mTitleTextView") as TextView
mTitleScrolling(mTitle) mTitleScrolling(mTitle)
} }
findMethod("com.miui.home.launcher.LauncherWidgetView") { "com.miui.home.launcher.LauncherWidgetView".hookAfterMethod(
name == "onFinishInflate" "onFinishInflate"
}.hookAfter { ) {
val mTitle = it.thisObject.getObject("mTitle") as TextView val mTitle = it.thisObject.getObjectField("mTitleTextView") as TextView
mTitleScrolling(mTitle) mTitleScrolling(mTitle)
} }
findMethod("com.miui.home.launcher.ShortcutIcon") { "com.miui.home.launcher.ShortcutIcon".hookAfterMethod(
name == "fromXml" && parameterCount == 4 "fromXml", Int::class.javaPrimitiveType, launcherClass, ViewGroup::class.java, shortcutInfoClass
}.hookAfter { ) {
val buddyIconView = it.args[3].invokeMethod("getBuddyIconView", args(it.args[2])) as View val buddyIconView = it.args[3].callMethod("getBuddyIconView", it.args[2]) as View
val mTitle = buddyIconView.getObject("mTitle") as TextView val mTitle = buddyIconView.getObjectField("mTitle") as TextView
mTitleScrolling(mTitle) mTitleScrolling(mTitle)
} }
findMethod("com.miui.home.launcher.ShortcutIcon") { "com.miui.home.launcher.ShortcutIcon".hookAfterMethod(
name == "createShortcutIcon" && parameterCount == 3 "createShortcutIcon", Int::class.javaPrimitiveType, launcherClass, ViewGroup::class.java
}.hookAfter { ) {
val buddyIcon = it.result as View val buddyIcon = it.result as View
val mTitle = buddyIcon.getObject("mTitle") as TextView val mTitle = buddyIcon.getObjectField("mTitle") as TextView
mTitleScrolling(mTitle) mTitleScrolling(mTitle)
} }
findMethod("com.miui.home.launcher.common.Utilities") { "com.miui.home.launcher.common.Utilities".hookAfterMethod(
name == "adaptTitleStyleToWallpaper" && parameterCount == 4 "adaptTitleStyleToWallpaper", Context::class.java, TextView::class.java, Int::class.javaPrimitiveType, Int::class.javaPrimitiveType
}.hookAfter { ) {
val mTitle = it.args[1] as TextView val mTitle = it.args[1] as TextView
if (mTitle.id == mTitle.resources.getIdentifier("icon_title", "id", "com.miui.home")) { if (mTitle.id == mTitle.resources.getIdentifier("icon_title", "id", "com.miui.home")) {
mTitleScrolling(mTitle) mTitleScrolling(mTitle)

View File

@@ -18,77 +18,71 @@ import com.github.kyuubiran.ezxhelper.utils.invokeStaticMethod
import com.github.kyuubiran.ezxhelper.utils.loadClass import com.github.kyuubiran.ezxhelper.utils.loadClass
import com.github.kyuubiran.ezxhelper.utils.putStaticObject import com.github.kyuubiran.ezxhelper.utils.putStaticObject
import com.lt2333.simplicitytools.R import com.lt2333.simplicitytools.R
import com.lt2333.simplicitytools.utils.hasEnable import com.lt2333.simplicitytools.utils.*
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 ShortcutAddSmallWindowForAll : HookRegister() { object ShortcutAddSmallWindowForAll : HookRegister() {
override fun init() = hasEnable("miuihome_shortcut_add_small_window") { override fun init() = hasEnable("miuihome_shortcut_add_small_window") {
val mViewDarkModeHelper = loadClass("com.miui.home.launcher.util.ViewDarkModeHelper") val mViewDarkModeHelper = ("com.miui.home.launcher.util.ViewDarkModeHelper").findClass()
val mSystemShortcutMenu = loadClass("com.miui.home.launcher.shortcuts.SystemShortcutMenu") val mSystemShortcutMenu = ("com.miui.home.launcher.shortcuts.SystemShortcutMenu").findClass()
val mSystemShortcutMenuItem = loadClass("com.miui.home.launcher.shortcuts.SystemShortcutMenuItem") val mSystemShortcutMenuItem = ("com.miui.home.launcher.shortcuts.SystemShortcutMenuItem").findClass()
val mAppShortcutMenu = loadClass("com.miui.home.launcher.shortcuts.AppShortcutMenu") val mAppShortcutMenu = ("com.miui.home.launcher.shortcuts.AppShortcutMenu").findClass()
val mShortcutMenuItem = loadClass("com.miui.home.launcher.shortcuts.ShortcutMenuItem") val mShortcutMenuItem = ("com.miui.home.launcher.shortcuts.ShortcutMenuItem").findClass()
val mAppDetailsShortcutMenuItem = loadClass("com.miui.home.launcher.shortcuts.SystemShortcutMenuItem\$AppDetailsShortcutMenuItem") val mAppDetailsShortcutMenuItem = ("com.miui.home.launcher.shortcuts.SystemShortcutMenuItem\$AppDetailsShortcutMenuItem").findClass()
val mActivityUtilsCompat = loadClass("com.miui.launcher.utils.ActivityUtilsCompat") val mActivityUtilsCompat = ("com.miui.launcher.utils.ActivityUtilsCompat").findClass()
findAllMethods(mViewDarkModeHelper) {
name == "onConfigurationChanged" mViewDarkModeHelper.hookAfterAllMethods("onConfigurationChanged") {
}.hookAfter { mSystemShortcutMenuItem.callStaticMethod("createAllSystemShortcutMenuItems")
mSystemShortcutMenuItem.invokeStaticMethod("createAllSystemShortcutMenuItems")
} }
findAllMethods(mShortcutMenuItem) {
name == "getShortTitle" mShortcutMenuItem.hookAfterAllMethods("getShortTitle") {
}.hookAfter {
if (it.result == "应用信息") { if (it.result == "应用信息") {
it.result = "信息" it.result = "信息"
} }
} }
findMethod(mAppDetailsShortcutMenuItem) {
name == "lambda\$getOnClickListener$0" && parameterCount == 2 mAppDetailsShortcutMenuItem.hookBeforeMethod("lambda\$getOnClickListener$0", mAppDetailsShortcutMenuItem, View::class.java) {
}.hookBefore {
val obj = it.args[0] val obj = it.args[0]
val view: View = it.args[1] as View val view: View = it.args[1] as View
val mShortTitle = obj.invokeMethod("getShortTitle") as CharSequence val mShortTitle = obj.callMethod("getShortTitle") as CharSequence
if (mShortTitle == moduleRes.getString(R.string.miuihome_shortcut_add_small_window_title)) { if (mShortTitle == moduleRes.getString(R.string.miuihome_shortcut_add_small_window_title)) {
it.result = null it.result = null
val intent = Intent() val intent = Intent()
val mComponentName = obj.invokeMethod("getComponentName") as ComponentName val mComponentName = obj.callMethod("getComponentName") as ComponentName
intent.action = "android.intent.action.MAIN" intent.action = "android.intent.action.MAIN"
intent.addCategory("android.intent.category.LAUNCHER") intent.addCategory("android.intent.category.LAUNCHER")
intent.component = mComponentName intent.component = mComponentName
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
val callStaticMethod = mActivityUtilsCompat.invokeStaticMethod("makeFreeformActivityOptions", args(view.context, mComponentName.packageName)) val callStaticMethod = mActivityUtilsCompat.callStaticMethod("makeFreeformActivityOptions", view.context, mComponentName.packageName)
if (callStaticMethod != null) { if (callStaticMethod != null) {
view.context.startActivity(intent, callStaticMethod.invokeMethod("toBundle") as Bundle) view.context.startActivity(intent, callStaticMethod.callMethod("toBundle") as Bundle)
} }
} }
} }
findAllMethods(mSystemShortcutMenu) {
name == "getMaxShortcutItemCount" mSystemShortcutMenu.hookAfterAllMethods("getMaxShortcutItemCount") {
}.hookAfter {
it.result = 5 it.result = 5
} }
findAllMethods(mAppShortcutMenu) {
name == "getMaxShortcutItemCount" mAppShortcutMenu.hookAfterAllMethods("getMaxShortcutItemCount") {
}.hookAfter {
it.result = 5 it.result = 5
} }
findAllMethods(mSystemShortcutMenuItem) {
name == "createAllSystemShortcutMenuItems" mSystemShortcutMenuItem.hookAfterAllMethods("createAllSystemShortcutMenuItems") {
}.hookAfter {
val isDarkMode = val isDarkMode =
AndroidAppHelper.currentApplication().applicationContext.resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK == Configuration.UI_MODE_NIGHT_YES AndroidAppHelper.currentApplication().applicationContext.resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK == Configuration.UI_MODE_NIGHT_YES
val mAllSystemShortcutMenuItems = mSystemShortcutMenuItem.getStaticObject("sAllSystemShortcutMenuItems") as Collection<Any> val mAllSystemShortcutMenuItems = mSystemShortcutMenuItem.getStaticObjectField("sAllSystemShortcutMenuItems") as Collection<Any>
val mSmallWindowInstance = XposedHelpers.newInstance(mAppDetailsShortcutMenuItem) val mSmallWindowInstance = XposedHelpers.newInstance(mAppDetailsShortcutMenuItem)
mSmallWindowInstance.invokeMethod("setShortTitle", args(moduleRes.getString(R.string.miuihome_shortcut_add_small_window_title))) mSmallWindowInstance.callMethod("setShortTitle", moduleRes.getString(R.string.miuihome_shortcut_add_small_window_title))
mSmallWindowInstance.invokeMethod( mSmallWindowInstance.callMethod(
"setIconDrawable", "setIconDrawable",
args(if (isDarkMode) moduleRes.getDrawable(R.drawable.ic_small_window_dark) else moduleRes.getDrawable(R.drawable.ic_small_window_light)) if (isDarkMode) moduleRes.getDrawable(R.drawable.ic_small_window_dark) else moduleRes.getDrawable(R.drawable.ic_small_window_light)
) )
val sAllSystemShortcutMenuItems = ArrayList<Any>() val sAllSystemShortcutMenuItems = ArrayList<Any>()
sAllSystemShortcutMenuItems.add(mSmallWindowInstance) sAllSystemShortcutMenuItems.add(mSmallWindowInstance)
sAllSystemShortcutMenuItems.addAll(mAllSystemShortcutMenuItems) sAllSystemShortcutMenuItems.addAll(mAllSystemShortcutMenuItems)
mSystemShortcutMenuItem.putStaticObject("sAllSystemShortcutMenuItems", sAllSystemShortcutMenuItems) mSystemShortcutMenuItem.setStaticObjectField("sAllSystemShortcutMenuItems", sAllSystemShortcutMenuItems)
} }
} }

View File

@@ -1,5 +1,6 @@
package com.lt2333.simplicitytools.hooks.rules.s.systemui package com.lt2333.simplicitytools.hooks.rules.s.systemui
import android.app.KeyguardManager import android.app.KeyguardManager
import android.content.Context import android.content.Context
import android.content.res.Configuration import android.content.res.Configuration
@@ -16,10 +17,11 @@ import com.lt2333.simplicitytools.utils.XSPUtils
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 StatusBarLayoutForS : HookRegister() { object StatusBarLayoutForS : HookRegister() {
private val getMode = XSPUtils.getInt("status_bar_layout_mode", 0) private val getMode = XSPUtils.getInt("status_bar_layout_mode", 0)
private val getHoleLocation = XSPUtils.getInt("screen_hole_location", 0) private val isCompatibilityMode = XSPUtils.getBoolean("layout_compatibility_mode", false)
private var statusBarLeft = 0 private var statusBarLeft = 0
private var statusBarTop = 0 private var statusBarTop = 0
@@ -32,23 +34,31 @@ object StatusBarLayoutForS : HookRegister() {
var mCenterLayout: LinearLayout? var mCenterLayout: LinearLayout?
var statusBar: ViewGroup? = null var statusBar: ViewGroup? = null
fun updateLayout(context: Context) { //判断屏幕状态更新布局 mode: 1正常布局 2居中布局
//判断屏幕方向 fun updateLayout(context: Context,mode: Int) {
when(mode){
1->{
val mConfiguration: Configuration = context.resources.configuration val mConfiguration: Configuration = context.resources.configuration
if (mConfiguration.orientation == Configuration.ORIENTATION_PORTRAIT) { if (mConfiguration.orientation == Configuration.ORIENTATION_PORTRAIT) { //横屏
statusBar!!.setPadding(statusBarLeft, statusBarTop, statusBarRight, statusBarBottom)
}
}
2->{
val mConfiguration: Configuration = context.resources.configuration
if (mConfiguration.orientation == Configuration.ORIENTATION_PORTRAIT) { //横屏
mLeftLayout!!.setPadding(statusBarLeft, 0, 0, 0) mLeftLayout!!.setPadding(statusBarLeft, 0, 0, 0)
mRightLayout!!.setPadding(0, 0, statusBarRight, 0) mRightLayout!!.setPadding(0, 0, statusBarRight, 0)
statusBar!!.setPadding(0, statusBarTop, 0, statusBarBottom) statusBar!!.setPadding(0, statusBarTop, 0, statusBarBottom)
} else { }else{ //竖屏
//横屏状态 mLeftLayout!!.setPadding(0, 0, 0, 0)
mLeftLayout!!.setPadding(175, 0, 0, 0) mRightLayout!!.setPadding(0, 0, 0, 0)
mRightLayout!!.setPadding(0, 0, 175, 0) }
statusBar!!.setPadding(0, statusBarTop, 0, statusBarBottom) }
} }
} }
//判断是否开启居中挖孔兼容模式 //判断是否开启挖孔兼容模式
if (getHoleLocation == 1) { if (isCompatibilityMode) {
findMethod("com.android.systemui.ScreenDecorations\$DisplayCutoutView") { findMethod("com.android.systemui.ScreenDecorations\$DisplayCutoutView") {
name == "boundsFromDirection" && parameterCount == 3 && isStatic name == "boundsFromDirection" && parameterCount == 3 && isStatic
}.hookBefore { }.hookBefore {
@@ -56,48 +66,83 @@ object StatusBarLayoutForS : HookRegister() {
} }
} }
//修改对应布局
when (getMode) { when (getMode) {
//默认 //默认
0 -> return 0 -> {
findMethod("com.android.systemui.statusbar.phone.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")
statusBar = miuiPhoneStatusBarView.findViewById(statusBarId)
if (statusBar == null) return@hookAfter
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,1)
}
}
//兼容模式
findMethod("com.android.systemui.statusbar.phone.PhoneStatusBarView") {
name == "updateLayoutForCutout"
}.hookAfter {
if (isCompatibilityMode) {
val context = (it.thisObject as ViewGroup).context
updateLayout(context,1)
}
}
}
//时钟居中 //时钟居中
1 -> { 1 -> {
findMethod("com.android.systemui.statusbar.phone.CollapsedStatusBarFragment") { findMethod("com.android.systemui.statusbar.phone.CollapsedStatusBarFragment") {
name == "onViewCreated" && parameterCount == 2 name == "onViewCreated" && parameterCount == 2
}.hookAfter { param -> }.hookAfter { param ->
val miuiPhoneStatusBarView = val miuiPhoneStatusBarView = param.thisObject.getObjectAs<ViewGroup>("mStatusBar")
param.thisObject.getObjectAs<ViewGroup>("mStatusBar")
val context: Context = miuiPhoneStatusBarView.context val context: Context = miuiPhoneStatusBarView.context
val res: Resources = miuiPhoneStatusBarView.resources val res: Resources = miuiPhoneStatusBarView.resources
val statusBarId: Int = val statusBarId: Int = res.getIdentifier("status_bar", "id", "com.android.systemui")
res.getIdentifier("status_bar", "id", "com.android.systemui") val statusBarContentsId: Int = res.getIdentifier(
val statusBarContentsId: Int = "status_bar_contents", "id", "com.android.systemui"
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 = val systemIconAreaId: Int = res.getIdentifier("system_icon_area", "id", "com.android.systemui")
res.getIdentifier( val clockId: Int = res.getIdentifier("clock", "id", "com.android.systemui")
"notification_icon_area_inner", val phoneStatusBarLeftContainerId: Int = res.getIdentifier(
"id", "phone_status_bar_left_container", "id", "com.android.systemui"
"com.android.systemui" )
val notificationIconAreaInnerId: Int = res.getIdentifier(
"notification_icon_area_inner", "id", "com.android.systemui"
) )
statusBar = miuiPhoneStatusBarView.findViewById(statusBarId) statusBar = miuiPhoneStatusBarView.findViewById(statusBarId)
val statusBarContents: ViewGroup = val statusBarContents: ViewGroup = miuiPhoneStatusBarView.findViewById(statusBarContentsId)
miuiPhoneStatusBarView.findViewById(statusBarContentsId)
if (statusBar == null) return@hookAfter if (statusBar == null) return@hookAfter
val clock: TextView = miuiPhoneStatusBarView.findViewById(clockId) val clock: TextView = miuiPhoneStatusBarView.findViewById(clockId)
val phoneStatusBarLeftContainer: ViewGroup = val phoneStatusBarLeftContainer: ViewGroup = miuiPhoneStatusBarView.findViewById(
miuiPhoneStatusBarView.findViewById(phoneStatusBarLeftContainerId) phoneStatusBarLeftContainerId
val notificationIconAreaInner: ViewGroup = )
miuiPhoneStatusBarView.findViewById(notificationIconAreaInnerId) val notificationIconAreaInner: ViewGroup = miuiPhoneStatusBarView.findViewById(
val systemIconArea: ViewGroup = notificationIconAreaInnerId
miuiPhoneStatusBarView.findViewById(systemIconAreaId) )
val systemIconArea: ViewGroup = miuiPhoneStatusBarView.findViewById(systemIconAreaId)
(clock.parent as ViewGroup).removeView(clock) (clock.parent as ViewGroup).removeView(clock)
(phoneStatusBarLeftContainer.parent as ViewGroup).removeView( (phoneStatusBarLeftContainer.parent as ViewGroup).removeView(
@@ -108,41 +153,39 @@ object StatusBarLayoutForS : HookRegister() {
) )
(systemIconArea.parent as ViewGroup).removeView(systemIconArea) (systemIconArea.parent as ViewGroup).removeView(systemIconArea)
val mConstraintLayout = val mConstraintLayout = ConstraintLayout(context).also {
ConstraintLayout(context).also {
it.layoutParams = ConstraintLayout.LayoutParams( it.layoutParams = ConstraintLayout.LayoutParams(
ConstraintLayout.LayoutParams.MATCH_PARENT, ConstraintLayout.LayoutParams.MATCH_PARENT, ConstraintLayout.LayoutParams.MATCH_PARENT
ConstraintLayout.LayoutParams.MATCH_PARENT
) )
} }
mConstraintLayout.addView(notificationIconAreaInner) mConstraintLayout.addView(notificationIconAreaInner)
val fullscreenNotificationIconAreaLp = LinearLayout.LayoutParams( val fullscreenNotificationIconAreaLp = LinearLayout.LayoutParams(
ConstraintLayout.LayoutParams.MATCH_PARENT, ConstraintLayout.LayoutParams.MATCH_PARENT, ConstraintLayout.LayoutParams.MATCH_PARENT
ConstraintLayout.LayoutParams.MATCH_PARENT
) )
notificationIconAreaInner.layoutParams = fullscreenNotificationIconAreaLp notificationIconAreaInner.layoutParams = fullscreenNotificationIconAreaLp
//增加一个左对齐布局 //增加一个左对齐布局
mLeftLayout = LinearLayout(context) mLeftLayout = LinearLayout(context)
val leftLp: LinearLayout.LayoutParams = val leftLp: LinearLayout.LayoutParams = LinearLayout.LayoutParams(
LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.MATCH_PARENT, 1.0f) 0, LinearLayout.LayoutParams.MATCH_PARENT, 1.0f
)
mLeftLayout!!.layoutParams = leftLp mLeftLayout!!.layoutParams = leftLp
mLeftLayout!!.gravity = Gravity.START or Gravity.CENTER_VERTICAL mLeftLayout!!.gravity = Gravity.START or Gravity.CENTER_VERTICAL
//增加一个居中布局 //增加一个居中布局
mCenterLayout = LinearLayout(context) mCenterLayout = LinearLayout(context)
val centerLp: LinearLayout.LayoutParams = LinearLayout.LayoutParams( val centerLp: LinearLayout.LayoutParams = LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.MATCH_PARENT
LinearLayout.LayoutParams.MATCH_PARENT
) )
mCenterLayout!!.layoutParams = centerLp mCenterLayout!!.layoutParams = centerLp
mCenterLayout!!.gravity = Gravity.CENTER or Gravity.CENTER_VERTICAL mCenterLayout!!.gravity = Gravity.CENTER or Gravity.CENTER_VERTICAL
mRightLayout = LinearLayout(context) mRightLayout = LinearLayout(context)
val rightLp: LinearLayout.LayoutParams = val rightLp: LinearLayout.LayoutParams = LinearLayout.LayoutParams(
LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.MATCH_PARENT, 1.0f) 0, LinearLayout.LayoutParams.MATCH_PARENT, 1.0f
)
mRightLayout!!.layoutParams = rightLp mRightLayout!!.layoutParams = rightLp
mRightLayout!!.gravity = Gravity.END or Gravity.CENTER_VERTICAL mRightLayout!!.gravity = Gravity.END or Gravity.CENTER_VERTICAL
mLeftLayout!!.addView(phoneStatusBarLeftContainer) mLeftLayout!!.addView(phoneStatusBarLeftContainer)
@@ -160,7 +203,7 @@ object StatusBarLayoutForS : HookRegister() {
statusBarBottom = statusBar!!.paddingBottom statusBarBottom = statusBar!!.paddingBottom
if (getHoleLocation == 2) { if (isCompatibilityMode) {
val customLeftMargin = XSPUtils.getInt("status_bar_left_margin", 0) val customLeftMargin = XSPUtils.getInt("status_bar_left_margin", 0)
if (customLeftMargin != 0) { if (customLeftMargin != 0) {
statusBarLeft = customLeftMargin statusBarLeft = customLeftMargin
@@ -170,7 +213,7 @@ object StatusBarLayoutForS : HookRegister() {
if (customRightMargin != 0) { if (customRightMargin != 0) {
statusBarRight = customRightMargin statusBarRight = customRightMargin
} }
updateLayout(context) updateLayout(context,2)
} }
} }
@@ -179,7 +222,7 @@ object StatusBarLayoutForS : HookRegister() {
}.hookAfter { }.hookAfter {
hasEnable("layout_compatibility_mode") { hasEnable("layout_compatibility_mode") {
val context = (it.thisObject as ViewGroup).context val context = (it.thisObject as ViewGroup).context
updateLayout(context) updateLayout(context,2)
} }
} }
} }
@@ -188,14 +231,12 @@ object StatusBarLayoutForS : HookRegister() {
findMethod("com.android.systemui.statusbar.phone.CollapsedStatusBarFragment") { findMethod("com.android.systemui.statusbar.phone.CollapsedStatusBarFragment") {
name == "onViewCreated" && parameterCount == 2 name == "onViewCreated" && parameterCount == 2
}.hookAfter { param -> }.hookAfter { param ->
val miuiPhoneStatusBarView = val miuiPhoneStatusBarView = param.thisObject.getObjectAs<ViewGroup>("mStatusBar")
param.thisObject.getObjectAs<ViewGroup>("mStatusBar")
val context: Context = miuiPhoneStatusBarView.context val context: Context = miuiPhoneStatusBarView.context
val res: Resources = miuiPhoneStatusBarView.resources val res: Resources = miuiPhoneStatusBarView.resources
//组件ID //组件ID
val statusBarId: Int = val statusBarId: Int = res.getIdentifier("status_bar", "id", "com.android.systemui")
res.getIdentifier("status_bar", "id", "com.android.systemui")
val clockId: Int = res.getIdentifier("clock", "id", "com.android.systemui") val clockId: Int = res.getIdentifier("clock", "id", "com.android.systemui")
val batteryId: Int = res.getIdentifier("battery", "id", "com.android.systemui") val batteryId: Int = res.getIdentifier("battery", "id", "com.android.systemui")
@@ -207,8 +248,7 @@ object StatusBarLayoutForS : HookRegister() {
//新建布局 //新建布局
val rightLp = LinearLayout.LayoutParams( val rightLp = LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.MATCH_PARENT
LinearLayout.LayoutParams.MATCH_PARENT
).also { ).also {
it.marginStart = dp2px(context, 5f) it.marginStart = dp2px(context, 5f)
} }
@@ -220,6 +260,36 @@ object StatusBarLayoutForS : HookRegister() {
battery.addView(mRightLayout) battery.addView(mRightLayout)
(clock.parent as ViewGroup).removeView(clock) (clock.parent as ViewGroup).removeView(clock)
mRightLayout!!.addView(clock) mRightLayout!!.addView(clock)
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,1)
}
}
//兼容模式
findMethod("com.android.systemui.statusbar.phone.PhoneStatusBarView") {
name == "updateLayoutForCutout"
}.hookAfter {
if (isCompatibilityMode) {
val context = (it.thisObject as ViewGroup).context
updateLayout(context,1)
}
} }
} }
//时钟居中+图标居左 //时钟居中+图标居左
@@ -227,65 +297,45 @@ object StatusBarLayoutForS : HookRegister() {
findMethod("com.android.systemui.statusbar.phone.CollapsedStatusBarFragment") { findMethod("com.android.systemui.statusbar.phone.CollapsedStatusBarFragment") {
name == "onViewCreated" && parameterCount == 2 name == "onViewCreated" && parameterCount == 2
}.hookAfter { param -> }.hookAfter { param ->
val miuiPhoneStatusBarView = val miuiPhoneStatusBarView = param.thisObject.getObjectAs<ViewGroup>("mStatusBar")
param.thisObject.getObjectAs<ViewGroup>("mStatusBar")
val context: Context = miuiPhoneStatusBarView.context val context: Context = miuiPhoneStatusBarView.context
val res: Resources = miuiPhoneStatusBarView.resources val res: Resources = miuiPhoneStatusBarView.resources
val statusBarId: Int = val statusBarId: Int = res.getIdentifier("status_bar", "id", "com.android.systemui")
res.getIdentifier("status_bar", "id", "com.android.systemui") val statusBarContentsId: Int = res.getIdentifier(
val statusBarContentsId: Int = "status_bar_contents", "id", "com.android.systemui"
res.getIdentifier("status_bar_contents", "id", "com.android.systemui") )
val systemIconAreaId: Int = val systemIconAreaId: Int = res.getIdentifier("system_icon_area", "id", "com.android.systemui")
res.getIdentifier("system_icon_area", "id", "com.android.systemui")
val clockId: Int = res.getIdentifier("clock", "id", "com.android.systemui") val clockId: Int = res.getIdentifier("clock", "id", "com.android.systemui")
val phoneStatusBarLeftContainerId: Int = val phoneStatusBarLeftContainerId: Int = res.getIdentifier(
res.getIdentifier( "phone_status_bar_left_container", "id", "com.android.systemui"
"phone_status_bar_left_container",
"id",
"com.android.systemui"
) )
val fullscreenNotificationIconAreaId: Int = val fullscreenNotificationIconAreaId: Int = res.getIdentifier(
res.getIdentifier( "fullscreen_notification_icon_area", "id", "com.android.systemui"
"fullscreen_notification_icon_area",
"id",
"com.android.systemui"
) )
val statusIconsId: Int = val statusIconsId: Int = res.getIdentifier(
res.getIdentifier( "statusIcons", "id", "com.android.systemui"
"statusIcons",
"id",
"com.android.systemui"
) )
val systemIconsId: Int = val systemIconsId: Int = res.getIdentifier(
res.getIdentifier( "system_icons", "id", "com.android.systemui"
"system_icons",
"id",
"com.android.systemui"
) )
val batteryId: Int = val batteryId: Int = res.getIdentifier(
res.getIdentifier( "battery", "id", "com.android.systemui"
"battery",
"id",
"com.android.systemui"
) )
statusBar = miuiPhoneStatusBarView.findViewById(statusBarId) statusBar = miuiPhoneStatusBarView.findViewById(statusBarId)
val statusBarContents: ViewGroup = val statusBarContents: ViewGroup = miuiPhoneStatusBarView.findViewById(statusBarContentsId)
miuiPhoneStatusBarView.findViewById(statusBarContentsId)
if (statusBar == null) return@hookAfter if (statusBar == null) return@hookAfter
val clock: TextView = miuiPhoneStatusBarView.findViewById(clockId) val clock: TextView = miuiPhoneStatusBarView.findViewById(clockId)
val phoneStatusBarLeftContainer: ViewGroup = val phoneStatusBarLeftContainer: ViewGroup = miuiPhoneStatusBarView.findViewById(
miuiPhoneStatusBarView.findViewById(phoneStatusBarLeftContainerId) phoneStatusBarLeftContainerId
val fullscreenNotificationIconArea: ViewGroup = )
miuiPhoneStatusBarView.findViewById(fullscreenNotificationIconAreaId) val fullscreenNotificationIconArea: ViewGroup = miuiPhoneStatusBarView.findViewById(
val systemIconArea: ViewGroup = fullscreenNotificationIconAreaId
miuiPhoneStatusBarView.findViewById(systemIconAreaId) )
val statusIcons: ViewGroup = val systemIconArea: ViewGroup = miuiPhoneStatusBarView.findViewById(systemIconAreaId)
miuiPhoneStatusBarView.findViewById(statusIconsId) val statusIcons: ViewGroup = miuiPhoneStatusBarView.findViewById(statusIconsId)
val systemIcons: ViewGroup = val systemIcons: ViewGroup = miuiPhoneStatusBarView.findViewById(systemIconsId)
miuiPhoneStatusBarView.findViewById(systemIconsId) val battery: ViewGroup = miuiPhoneStatusBarView.findViewById(batteryId)
val battery: ViewGroup =
miuiPhoneStatusBarView.findViewById(batteryId)
(clock.parent as ViewGroup).removeView(clock) (clock.parent as ViewGroup).removeView(clock)
(phoneStatusBarLeftContainer.parent as ViewGroup).removeView( (phoneStatusBarLeftContainer.parent as ViewGroup).removeView(
@@ -299,11 +349,9 @@ object StatusBarLayoutForS : HookRegister() {
fullscreenNotificationIconArea fullscreenNotificationIconArea
) )
val mConstraintLayout = val mConstraintLayout = ConstraintLayout(context).also {
ConstraintLayout(context).also {
it.layoutParams = ConstraintLayout.LayoutParams( it.layoutParams = ConstraintLayout.LayoutParams(
ConstraintLayout.LayoutParams.MATCH_PARENT, ConstraintLayout.LayoutParams.MATCH_PARENT, ConstraintLayout.LayoutParams.MATCH_PARENT
ConstraintLayout.LayoutParams.MATCH_PARENT
) )
} }
@@ -312,16 +360,14 @@ object StatusBarLayoutForS : HookRegister() {
battery.layoutParams = ConstraintLayout.LayoutParams( battery.layoutParams = ConstraintLayout.LayoutParams(
ConstraintLayout.LayoutParams.WRAP_CONTENT, ConstraintLayout.LayoutParams.WRAP_CONTENT, ConstraintLayout.LayoutParams.MATCH_PARENT
ConstraintLayout.LayoutParams.MATCH_PARENT
).also { ).also {
it.endToEnd = 0 it.endToEnd = 0
} }
fullscreenNotificationIconArea.layoutParams = ConstraintLayout.LayoutParams( fullscreenNotificationIconArea.layoutParams = ConstraintLayout.LayoutParams(
0, 0, ConstraintLayout.LayoutParams.MATCH_PARENT
ConstraintLayout.LayoutParams.MATCH_PARENT
).also { ).also {
it.startToEnd = batteryId it.startToEnd = batteryId
it.endToEnd = 0 it.endToEnd = 0
@@ -331,24 +377,25 @@ object StatusBarLayoutForS : HookRegister() {
//增加一个左对齐布局 //增加一个左对齐布局
mLeftLayout = LinearLayout(context) mLeftLayout = LinearLayout(context)
val leftLp: LinearLayout.LayoutParams = val leftLp: LinearLayout.LayoutParams = LinearLayout.LayoutParams(
LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.MATCH_PARENT, 1.0f) 0, LinearLayout.LayoutParams.MATCH_PARENT, 1.0f
)
mLeftLayout!!.layoutParams = leftLp mLeftLayout!!.layoutParams = leftLp
mLeftLayout!!.gravity = Gravity.START or Gravity.CENTER_VERTICAL mLeftLayout!!.gravity = Gravity.START or Gravity.CENTER_VERTICAL
//增加一个居中布局 //增加一个居中布局
mCenterLayout = LinearLayout(context) mCenterLayout = LinearLayout(context)
val centerLp: LinearLayout.LayoutParams = LinearLayout.LayoutParams( val centerLp: LinearLayout.LayoutParams = LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.MATCH_PARENT
LinearLayout.LayoutParams.MATCH_PARENT
) )
mCenterLayout!!.layoutParams = centerLp mCenterLayout!!.layoutParams = centerLp
mCenterLayout!!.gravity = Gravity.CENTER or Gravity.CENTER_VERTICAL mCenterLayout!!.gravity = Gravity.CENTER or Gravity.CENTER_VERTICAL
//增加一个右布局 //增加一个右布局
mRightLayout = LinearLayout(context) mRightLayout = LinearLayout(context)
val rightLp: LinearLayout.LayoutParams = val rightLp: LinearLayout.LayoutParams = LinearLayout.LayoutParams(
LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.MATCH_PARENT, 1.0f) 0, LinearLayout.LayoutParams.MATCH_PARENT, 1.0f
)
mRightLayout!!.layoutParams = rightLp mRightLayout!!.layoutParams = rightLp
mRightLayout!!.gravity = Gravity.END or Gravity.CENTER_VERTICAL mRightLayout!!.gravity = Gravity.END or Gravity.CENTER_VERTICAL
@@ -375,7 +422,7 @@ object StatusBarLayoutForS : HookRegister() {
statusBarBottom = statusBar!!.paddingBottom statusBarBottom = statusBar!!.paddingBottom
if (getHoleLocation == 2) { if (isCompatibilityMode) {
val customLeftMargin = XSPUtils.getInt("status_bar_left_margin", 0) val customLeftMargin = XSPUtils.getInt("status_bar_left_margin", 0)
if (customLeftMargin != 0) { if (customLeftMargin != 0) {
statusBarLeft = customLeftMargin statusBarLeft = customLeftMargin
@@ -385,16 +432,16 @@ object StatusBarLayoutForS : HookRegister() {
if (customRightMargin != 0) { if (customRightMargin != 0) {
statusBarRight = customRightMargin statusBarRight = customRightMargin
} }
updateLayout(context) updateLayout(context,2)
} }
} }
//兼容模式 //兼容模式
findMethod("com.android.systemui.statusbar.phone.PhoneStatusBarView") { findMethod("com.android.systemui.statusbar.phone.PhoneStatusBarView") {
name == "updateLayoutForCutout" name == "updateLayoutForCutout"
}.hookAfter { }.hookAfter {
if (getHoleLocation == 2) { if (isCompatibilityMode) {
val context = (it.thisObject as ViewGroup).context val context = (it.thisObject as ViewGroup).context
updateLayout(context) updateLayout(context,2)
} }
} }
@@ -404,12 +451,10 @@ object StatusBarLayoutForS : HookRegister() {
}.hookAfter { }.hookAfter {
val miuiPhoneStatusBarView = it.thisObject.getObjectAs<ViewGroup>("mStatusBar") val miuiPhoneStatusBarView = it.thisObject.getObjectAs<ViewGroup>("mStatusBar")
val res = miuiPhoneStatusBarView.resources val res = miuiPhoneStatusBarView.resources
val statusBarId = val statusBarId = res.getIdentifier("status_bar", "id", "com.android.systemui")
res.getIdentifier("status_bar", "id", "com.android.systemui")
val statusBar1 = miuiPhoneStatusBarView.findViewById<ViewGroup>(statusBarId) val statusBar1 = miuiPhoneStatusBarView.findViewById<ViewGroup>(statusBarId)
//非锁屏下整个状态栏布局 //非锁屏下整个状态栏布局
val keyguardMgr = val keyguardMgr = statusBar1.context.getSystemService(Context.KEYGUARD_SERVICE) as KeyguardManager
statusBar1.context.getSystemService(Context.KEYGUARD_SERVICE) as KeyguardManager
if (keyguardMgr.isKeyguardLocked) { if (keyguardMgr.isKeyguardLocked) {
statusBar1!!.visibility = View.GONE statusBar1!!.visibility = View.GONE
} else { } else {

View File

@@ -2,12 +2,10 @@ package com.lt2333.simplicitytools.hooks.rules.s.systemui
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.content.Context import android.content.Context
import android.content.res.Resources
import android.os.Handler import android.os.Handler
import android.provider.Settings import android.provider.Settings
import android.util.TypedValue import android.util.TypedValue
import android.view.Gravity import android.view.Gravity
import android.view.ViewGroup
import android.widget.TextView import android.widget.TextView
import com.github.kyuubiran.ezxhelper.utils.* import com.github.kyuubiran.ezxhelper.utils.*
import com.lt2333.simplicitytools.utils.XSPUtils import com.lt2333.simplicitytools.utils.XSPUtils
@@ -16,6 +14,7 @@ import java.lang.reflect.Method
import java.text.SimpleDateFormat import java.text.SimpleDateFormat
import java.util.* import java.util.*
object StatusBarTimeCustomizationForS : HookRegister() { object StatusBarTimeCustomizationForS : HookRegister() {
private val getMode = XSPUtils.getInt("custom_clock_mode", 0) private val getMode = XSPUtils.getInt("custom_clock_mode", 0)
@@ -30,14 +29,12 @@ object StatusBarTimeCustomizationForS : HookRegister() {
private val isSecond = XSPUtils.getBoolean("status_bar_time_seconds", false) private val isSecond = XSPUtils.getBoolean("status_bar_time_seconds", false)
private val isDoubleHour = XSPUtils.getBoolean("status_bar_time_double_hour", false) private val isDoubleHour = XSPUtils.getBoolean("status_bar_time_double_hour", false)
private val isPeriod = XSPUtils.getBoolean("status_bar_time_period", true) private val isPeriod = XSPUtils.getBoolean("status_bar_time_period", true)
private val isCenterAlign = private val isCenterAlign = XSPUtils.getBoolean("status_bar_time_double_line_center_align", false)
XSPUtils.getBoolean("status_bar_time_double_line_center_align", false)
//极客模式 //极客模式
private val getGeekClockSize = XSPUtils.getInt("status_bar_clock_size_geek", 0) 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 getGeekFormat = XSPUtils.getString("custom_clock_format_geek", "HH:mm:ss")
private val isGeekCenterAlign = private val isGeekCenterAlign = XSPUtils.getBoolean("status_bar_time_center_align_geek", false)
XSPUtils.getBoolean("status_bar_time_center_align_geek", false)
private lateinit var nowTime: Date private lateinit var nowTime: Date
private var str = "" private var str = ""
@@ -83,9 +80,7 @@ object StatusBarTimeCustomizationForS : HookRegister() {
} }
} }
Timer().scheduleAtFixedRate( Timer().scheduleAtFixedRate(
T(), T(), 1000 - System.currentTimeMillis() % 1000, 1000
1000 - System.currentTimeMillis() % 1000,
1000
) )
} catch (_: Exception) { } catch (_: Exception) {
} }
@@ -98,8 +93,7 @@ object StatusBarTimeCustomizationForS : HookRegister() {
val textV = it.thisObject as TextView val textV = it.thisObject as TextView
if (textV.resources.getResourceEntryName(textV.id) == "clock") { if (textV.resources.getResourceEntryName(textV.id) == "clock") {
val t = Settings.System.getString( val t = Settings.System.getString(
c!!.contentResolver, c!!.contentResolver, Settings.System.TIME_12_24
Settings.System.TIME_12_24
) )
val is24 = t == "24" val is24 = t == "24"
nowTime = Calendar.getInstance().time nowTime = Calendar.getInstance().time
@@ -110,15 +104,18 @@ object StatusBarTimeCustomizationForS : HookRegister() {
} }
if (isCenterAlign) { if (isCenterAlign) {
findMethod("com.android.systemui.statusbar.phone.CollapsedStatusBarFragment") { findConstructor("com.android.systemui.statusbar.views.MiuiClock") {
name == "onViewCreated" && parameterCount == 2 paramCount == 3
}.hookAfter { }.hookAfter {
val miuiPhoneStatusBarView = try {
it.thisObject.getObject("mStatusBar") as ViewGroup val textV = it.thisObject as TextView
val res: Resources = miuiPhoneStatusBarView.resources if (textV.resources.getResourceEntryName(textV.id) == "clock") {
val clockId: Int = res.getIdentifier("clock", "id", "com.android.systemui") c = it.args[0] as Context
val clock: TextView = miuiPhoneStatusBarView.findViewById(clockId) val textV = it.thisObject as TextView
clock.gravity = Gravity.CENTER textV.gravity = Gravity.CENTER
}
} catch (_: Exception) {
}
} }
} }
} }
@@ -152,9 +149,7 @@ object StatusBarTimeCustomizationForS : HookRegister() {
} }
} }
Timer().scheduleAtFixedRate( Timer().scheduleAtFixedRate(
T(), T(), 1000 - System.currentTimeMillis() % 1000, 1000
1000 - System.currentTimeMillis() % 1000,
1000
) )
} catch (_: Exception) { } catch (_: Exception) {
} }
@@ -162,27 +157,38 @@ object StatusBarTimeCustomizationForS : HookRegister() {
findMethod("com.android.systemui.statusbar.views.MiuiClock") { findMethod("com.android.systemui.statusbar.views.MiuiClock") {
name == "updateTime" name == "updateTime"
}.hookAfter { }.hookBefore {
try { try {
val textV = it.thisObject as TextView val textV = it.thisObject as TextView
if (textV.resources.getResourceEntryName(textV.id) == "clock") { if (textV.resources.getResourceEntryName(textV.id) == "clock") {
nowTime = Calendar.getInstance().time val mMiuiStatusBarClockController = textV.getObject("mMiuiStatusBarClockController")
textV.text = SimpleDateFormat(getGeekFormat).format(nowTime) 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) { } catch (_: Exception) {
} }
} }
if (isGeekCenterAlign) { if (isGeekCenterAlign) {
findMethod("com.android.systemui.statusbar.phone.CollapsedStatusBarFragment") { findConstructor("com.android.systemui.statusbar.views.MiuiClock") {
name == "onViewCreated" && parameterCount == 2 paramCount == 3
}.hookAfter { }.hookAfter {
val miuiPhoneStatusBarView = try {
it.thisObject.getObject("mStatusBar") as ViewGroup val textV = it.thisObject as TextView
val res: Resources = miuiPhoneStatusBarView.resources if (textV.resources.getResourceEntryName(textV.id) == "clock") {
val clockId: Int = res.getIdentifier("clock", "id", "com.android.systemui") c = it.args[0] as Context
val clock: TextView = miuiPhoneStatusBarView.findViewById(clockId) val textV = it.thisObject as TextView
clock.gravity = Gravity.CENTER textV.gravity = Gravity.CENTER
}
} catch (_: Exception) {
}
} }
} }
} }
@@ -197,7 +203,6 @@ object StatusBarTimeCustomizationForS : HookRegister() {
if (isYear) { if (isYear) {
if (isZh) { if (isZh) {
datePattern += "YY年" datePattern += "YY年"
// if (!isHideSpace) datePattern = "$datePattern "
} else { } else {
datePattern += "YY" datePattern += "YY"
if (isMonth || isDay) datePattern += "/" if (isMonth || isDay) datePattern += "/"
@@ -206,7 +211,6 @@ object StatusBarTimeCustomizationForS : HookRegister() {
if (isMonth) { if (isMonth) {
if (isZh) { if (isZh) {
datePattern += "M月" datePattern += "M月"
// if (!isHideSpace) datePattern = "$datePattern "
} else { } else {
datePattern += "M" datePattern += "M"
if (isDay) datePattern += "/" if (isDay) datePattern += "/"

View File

@@ -0,0 +1,16 @@
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 DisableBluetoothTemporarilyOffForT: HookRegister() {
override fun init()= hasEnable("disable_bluetooth_temporarily_off") {
findMethod("com.android.settingslib.bluetooth.LocalBluetoothAdapter"){
name == "isSupportBluetoothRestrict" && parameterCount==1
}.hookBefore {
it.result = false
}
}
}

View File

@@ -16,6 +16,7 @@ import com.lt2333.simplicitytools.utils.XSPUtils
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 StatusBarLayoutForT : HookRegister() { object StatusBarLayoutForT : HookRegister() {
private val getMode = XSPUtils.getInt("status_bar_layout_mode", 0) private val getMode = XSPUtils.getInt("status_bar_layout_mode", 0)
@@ -27,21 +28,31 @@ object StatusBarLayoutForT : HookRegister() {
private var statusBarBottom = 0 private var statusBarBottom = 0
override fun init() { override fun init() {
// TODO: Android13状态栏布局不可用
var mLeftLayout: LinearLayout? = null var mLeftLayout: LinearLayout? = null
var mRightLayout: LinearLayout? = null var mRightLayout: LinearLayout? = null
var mCenterLayout: LinearLayout? var mCenterLayout: LinearLayout?
var statusBar: ViewGroup? = null var statusBar: ViewGroup? = null
fun updateLayout(context: Context) { //判断屏幕状态更新布局 mode: 1正常布局 2居中布局
//判断屏幕方向 fun updateLayout(context: Context,mode: Int) {
when(mode){
1->{
val mConfiguration: Configuration = context.resources.configuration val mConfiguration: Configuration = context.resources.configuration
if (mConfiguration.orientation == Configuration.ORIENTATION_PORTRAIT) { if (mConfiguration.orientation == Configuration.ORIENTATION_PORTRAIT) { //横屏
statusBar!!.setPadding(statusBarLeft, statusBarTop, statusBarRight, statusBarBottom)
}
}
2->{
val mConfiguration: Configuration = context.resources.configuration
if (mConfiguration.orientation == Configuration.ORIENTATION_PORTRAIT) { //横屏
mLeftLayout!!.setPadding(statusBarLeft, 0, 0, 0) mLeftLayout!!.setPadding(statusBarLeft, 0, 0, 0)
mRightLayout!!.setPadding(0, 0, statusBarRight, 0) mRightLayout!!.setPadding(0, 0, statusBarRight, 0)
statusBar!!.setPadding(0, statusBarTop, 0, statusBarBottom) statusBar!!.setPadding(0, statusBarTop, 0, statusBarBottom)
}else{ //竖屏
mLeftLayout!!.setPadding(0, 0, 0, 0)
mRightLayout!!.setPadding(0, 0, 0, 0)
}
}
} }
} }
@@ -54,9 +65,52 @@ object StatusBarLayoutForT : HookRegister() {
} }
} }
//修改对应布局
when (getMode) { when (getMode) {
//默认 //默认
0 -> return 0 -> {
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")
statusBar = miuiPhoneStatusBarView.findViewById(statusBarId)
if (statusBar == null) return@hookAfter
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,1)
}
}
//兼容模式
findMethod("com.android.systemui.statusbar.phone.PhoneStatusBarView") {
name == "updateLayoutForCutout"
}.hookAfter {
if (isCompatibilityMode) {
val context = (it.thisObject as ViewGroup).context
updateLayout(context,1)
}
}
}
//时钟居中 //时钟居中
1 -> { 1 -> {
findMethod("com.android.systemui.statusbar.phone.fragment.CollapsedStatusBarFragment") { findMethod("com.android.systemui.statusbar.phone.fragment.CollapsedStatusBarFragment") {
@@ -67,9 +121,7 @@ object StatusBarLayoutForT : HookRegister() {
val res: Resources = miuiPhoneStatusBarView.resources val res: Resources = miuiPhoneStatusBarView.resources
val statusBarId: Int = res.getIdentifier("status_bar", "id", "com.android.systemui") val statusBarId: Int = res.getIdentifier("status_bar", "id", "com.android.systemui")
val statusBarContentsId: Int = res.getIdentifier( val statusBarContentsId: Int = res.getIdentifier(
"status_bar_contents", "status_bar_contents", "id", "com.android.systemui"
"id",
"com.android.systemui"
) )
val systemIconAreaId: Int = res.getIdentifier("system_icon_area", "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 clockId: Int = res.getIdentifier("clock", "id", "com.android.systemui")
@@ -117,9 +169,7 @@ object StatusBarLayoutForT : HookRegister() {
//增加一个左对齐布局 //增加一个左对齐布局
mLeftLayout = LinearLayout(context) mLeftLayout = LinearLayout(context)
val leftLp: LinearLayout.LayoutParams = LinearLayout.LayoutParams( val leftLp: LinearLayout.LayoutParams = LinearLayout.LayoutParams(
0, 0, LinearLayout.LayoutParams.MATCH_PARENT, 1.0f
LinearLayout.LayoutParams.MATCH_PARENT,
1.0f
) )
mLeftLayout!!.layoutParams = leftLp mLeftLayout!!.layoutParams = leftLp
mLeftLayout!!.gravity = Gravity.START or Gravity.CENTER_VERTICAL mLeftLayout!!.gravity = Gravity.START or Gravity.CENTER_VERTICAL
@@ -133,9 +183,7 @@ object StatusBarLayoutForT : HookRegister() {
mCenterLayout!!.gravity = Gravity.CENTER or Gravity.CENTER_VERTICAL mCenterLayout!!.gravity = Gravity.CENTER or Gravity.CENTER_VERTICAL
mRightLayout = LinearLayout(context) mRightLayout = LinearLayout(context)
val rightLp: LinearLayout.LayoutParams = LinearLayout.LayoutParams( val rightLp: LinearLayout.LayoutParams = LinearLayout.LayoutParams(
0, 0, LinearLayout.LayoutParams.MATCH_PARENT, 1.0f
LinearLayout.LayoutParams.MATCH_PARENT,
1.0f
) )
mRightLayout!!.layoutParams = rightLp mRightLayout!!.layoutParams = rightLp
mRightLayout!!.gravity = Gravity.END or Gravity.CENTER_VERTICAL mRightLayout!!.gravity = Gravity.END or Gravity.CENTER_VERTICAL
@@ -164,7 +212,7 @@ object StatusBarLayoutForT : HookRegister() {
if (customRightMargin != 0) { if (customRightMargin != 0) {
statusBarRight = customRightMargin statusBarRight = customRightMargin
} }
updateLayout(context) updateLayout(context,2)
} }
} }
@@ -173,7 +221,7 @@ object StatusBarLayoutForT : HookRegister() {
}.hookAfter { }.hookAfter {
hasEnable("layout_compatibility_mode") { hasEnable("layout_compatibility_mode") {
val context = (it.thisObject as ViewGroup).context val context = (it.thisObject as ViewGroup).context
updateLayout(context) updateLayout(context,2)
} }
} }
} }
@@ -211,6 +259,36 @@ object StatusBarLayoutForT : HookRegister() {
battery.addView(mRightLayout) battery.addView(mRightLayout)
(clock.parent as ViewGroup).removeView(clock) (clock.parent as ViewGroup).removeView(clock)
mRightLayout!!.addView(clock) mRightLayout!!.addView(clock)
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,1)
}
}
//兼容模式
findMethod("com.android.systemui.statusbar.phone.PhoneStatusBarView") {
name == "updateLayoutForCutout"
}.hookAfter {
if (isCompatibilityMode) {
val context = (it.thisObject as ViewGroup).context
updateLayout(context,1)
}
} }
} }
//时钟居中+图标居左 //时钟居中+图标居左
@@ -223,9 +301,7 @@ object StatusBarLayoutForT : HookRegister() {
val res: Resources = miuiPhoneStatusBarView.resources val res: Resources = miuiPhoneStatusBarView.resources
val statusBarId: Int = res.getIdentifier("status_bar", "id", "com.android.systemui") val statusBarId: Int = res.getIdentifier("status_bar", "id", "com.android.systemui")
val statusBarContentsId: Int = res.getIdentifier( val statusBarContentsId: Int = res.getIdentifier(
"status_bar_contents", "status_bar_contents", "id", "com.android.systemui"
"id",
"com.android.systemui"
) )
val systemIconAreaId: Int = res.getIdentifier("system_icon_area", "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 clockId: Int = res.getIdentifier("clock", "id", "com.android.systemui")
@@ -301,9 +377,7 @@ object StatusBarLayoutForT : HookRegister() {
//增加一个左对齐布局 //增加一个左对齐布局
mLeftLayout = LinearLayout(context) mLeftLayout = LinearLayout(context)
val leftLp: LinearLayout.LayoutParams = LinearLayout.LayoutParams( val leftLp: LinearLayout.LayoutParams = LinearLayout.LayoutParams(
0, 0, LinearLayout.LayoutParams.MATCH_PARENT, 1.0f
LinearLayout.LayoutParams.MATCH_PARENT,
1.0f
) )
mLeftLayout!!.layoutParams = leftLp mLeftLayout!!.layoutParams = leftLp
mLeftLayout!!.gravity = Gravity.START or Gravity.CENTER_VERTICAL mLeftLayout!!.gravity = Gravity.START or Gravity.CENTER_VERTICAL
@@ -319,9 +393,7 @@ object StatusBarLayoutForT : HookRegister() {
//增加一个右布局 //增加一个右布局
mRightLayout = LinearLayout(context) mRightLayout = LinearLayout(context)
val rightLp: LinearLayout.LayoutParams = LinearLayout.LayoutParams( val rightLp: LinearLayout.LayoutParams = LinearLayout.LayoutParams(
0, 0, LinearLayout.LayoutParams.MATCH_PARENT, 1.0f
LinearLayout.LayoutParams.MATCH_PARENT,
1.0f
) )
mRightLayout!!.layoutParams = rightLp mRightLayout!!.layoutParams = rightLp
mRightLayout!!.gravity = Gravity.END or Gravity.CENTER_VERTICAL mRightLayout!!.gravity = Gravity.END or Gravity.CENTER_VERTICAL
@@ -359,7 +431,7 @@ object StatusBarLayoutForT : HookRegister() {
if (customRightMargin != 0) { if (customRightMargin != 0) {
statusBarRight = customRightMargin statusBarRight = customRightMargin
} }
updateLayout(context) updateLayout(context,2)
} }
} }
//兼容模式 //兼容模式
@@ -368,7 +440,7 @@ object StatusBarLayoutForT : HookRegister() {
}.hookAfter { }.hookAfter {
if (isCompatibilityMode) { if (isCompatibilityMode) {
val context = (it.thisObject as ViewGroup).context val context = (it.thisObject as ViewGroup).context
updateLayout(context) updateLayout(context,2)
} }
} }
@@ -388,6 +460,14 @@ object StatusBarLayoutForT : HookRegister() {
statusBar1!!.visibility = View.VISIBLE statusBar1!!.visibility = View.VISIBLE
} }
} }
//TODO: 修改图标的顺序
/*findConstructor("com.android.systemui.statusbar.phone.StatusBarIconList") {
parameterCount == 1
}.hookBefore {
}*/
} }
} }
} }

View File

@@ -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)

View File

@@ -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>

View File

@@ -39,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>
@@ -136,6 +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">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>
@@ -239,4 +240,11 @@
<string name="miuihome_recentview_remove_card_animation">Modificar la animación de marcado de tarjetas</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_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">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>
</resources> </resources>

View File

@@ -34,7 +34,6 @@
<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>

View File

@@ -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>

View File

@@ -35,7 +35,6 @@
<string name="github_url">Selamat datang lebih banyak developer untuk berpartisipasi dalam pengembangan</string> <string name="github_url">Selamat datang lebih banyak developer untuk berpartisipasi dalam pengembangan</string>
<string name="issues">Umpan Balik/Usulan</string> <string name="issues">Umpan Balik/Usulan</string>
<string name="issues_url">Klik untuk melihat Masalah GitHub</string> <string name="issues_url">Klik untuk melihat Masalah GitHub</string>
<string name="xposeddescription">Alat perubahan untuk MIUI13 (Android 12)</string>
<string name="status_bar_time_seconds">Tampilkan detik</string> <string name="status_bar_time_seconds">Tampilkan detik</string>
<string name="status_bar_network_speed_refresh_speed">Perubahan kecepatan jaringan dalam detik</string> <string name="status_bar_network_speed_refresh_speed">Perubahan kecepatan jaringan dalam detik</string>
<string name="remove_the_maximum_number_of_notification_icons">Hapus jumlah maksimum ikon notifikasi</string> <string name="remove_the_maximum_number_of_notification_icons">Hapus jumlah maksimum ikon notifikasi</string>

View File

@@ -39,7 +39,7 @@
<string name="github_url">開発に参加できる開発者を歓迎します</string> <string name="github_url">開発に参加できる開発者を歓迎します</string>
<string name="issues">ご意見・ご提案</string> <string name="issues">ご意見・ご提案</string>
<string name="issues_url">クリックして GitHub Issues を表示する</string> <string name="issues_url">クリックして GitHub Issues を表示する</string>
<string name="xposeddescription">MIUI13 (Android 12) カスタマイズツール</string> <string name="xposeddescription">MIUI13 (Android 12) 以降向けカスタマイズツール</string>
<string name="statusbar">ステータスバー</string> <string name="statusbar">ステータスバー</string>
<string name="status_bar_time_seconds">秒を表示する</string> <string name="status_bar_time_seconds">秒を表示する</string>
<string name="status_bar_network_speed_refresh_speed">ネットワーク速度を秒単位で更新</string> <string name="status_bar_network_speed_refresh_speed">ネットワーク速度を秒単位で更新</string>
@@ -136,6 +136,7 @@
<string name="layout_compatibility_mode">互換モード</string> <string name="layout_compatibility_mode">互換モード</string>
<string name="left_margin">左マージン0自動</string> <string name="left_margin">左マージン0自動</string>
<string name="right_margin">右マージン0自動</string> <string name="right_margin">右マージン0自動</string>
<string name="layout_compatibility_mode_summary">全画面レイアウトを強制(すべての特殊な形状の画面に対応)</string>
<string name="remove_macro_blacklist">ゲームのマクロブラックリストを削除</string> <string name="remove_macro_blacklist">ゲームのマクロブラックリストを削除</string>
<string name="hide_network_speed_splitter">ネットワーク速度分割器を非表示</string> <string name="hide_network_speed_splitter">ネットワーク速度分割器を非表示</string>
<string name="updater">更新</string> <string name="updater">更新</string>

View File

@@ -38,7 +38,6 @@
<string name="github_url">개발에 참여하는 더 많은 개발자를 환영합니다</string> <string name="github_url">개발에 참여하는 더 많은 개발자를 환영합니다</string>
<string name="issues">피드백 및 제안</string> <string name="issues">피드백 및 제안</string>
<string name="issues_url">클릭해 GitHub 이슈 보기</string> <string name="issues_url">클릭해 GitHub 이슈 보기</string>
<string name="xposeddescription">MIUI 13(Android 12) 용 커스텀 도구</string>
<string name="statusbar">상태 바</string> <string name="statusbar">상태 바</string>
<string name="status_bar_time_seconds">화면 표시 시간</string> <string name="status_bar_time_seconds">화면 표시 시간</string>
<string name="status_bar_network_speed_refresh_speed">몇 초에 네트워크 속도 새로 고침</string> <string name="status_bar_network_speed_refresh_speed">몇 초에 네트워크 속도 새로 고침</string>

View File

@@ -35,7 +35,6 @@
<string name="github_url">Welkom meer ontwikkelaars om deel te nemen in de ontwikkeling</string> <string name="github_url">Welkom meer ontwikkelaars om deel te nemen in de ontwikkeling</string>
<string name="issues">Feedback/Voorstel</string> <string name="issues">Feedback/Voorstel</string>
<string name="issues_url">Klik om GitHub Problemen te bekijken</string> <string name="issues_url">Klik om GitHub Problemen te bekijken</string>
<string name="xposeddescription">Aanpassingsgereedschap voor MIUI13(Android 12)</string>
<string name="statusbar">Statusbalk</string> <string name="statusbar">Statusbalk</string>
<string name="status_bar_time_seconds">Seconden weergeven</string> <string name="status_bar_time_seconds">Seconden weergeven</string>
<string name="status_bar_network_speed_refresh_speed">Netwerksnelheid vernieuwen in seconden</string> <string name="status_bar_network_speed_refresh_speed">Netwerksnelheid vernieuwen in seconden</string>

View File

@@ -39,7 +39,7 @@
<string name="github_url">Zachęcam do rozwijania projektu innych deweloperów</string> <string name="github_url">Zachęcam do rozwijania projektu innych deweloperów</string>
<string name="issues">Opinie/propozycje</string> <string name="issues">Opinie/propozycje</string>
<string name="issues_url">Kliknij, aby wyświetlić zgłoszenia na GitHubie</string> <string name="issues_url">Kliknij, aby wyświetlić zgłoszenia na GitHubie</string>
<string name="xposeddescription">Narzędzie do dostosowywania MIUI 13 (Android 12)</string> <string name="xposeddescription">Narzędzie do dostosowywania MIUI 13+ (Android 12+)</string>
<string name="statusbar">Pasek statusu</string> <string name="statusbar">Pasek statusu</string>
<string name="status_bar_time_seconds">Wyświetlaj sekundy</string> <string name="status_bar_time_seconds">Wyświetlaj sekundy</string>
<string name="status_bar_network_speed_refresh_speed">Odświeżenie prędkości sieci w sekundach</string> <string name="status_bar_network_speed_refresh_speed">Odświeżenie prędkości sieci w sekundach</string>
@@ -136,6 +136,7 @@
<string name="layout_compatibility_mode">Tryb zgodności</string> <string name="layout_compatibility_mode">Tryb zgodności</string>
<string name="left_margin">Lewy margines (0: autom.)</string> <string name="left_margin">Lewy margines (0: autom.)</string>
<string name="right_margin">Prawy margines (0: autom.)</string> <string name="right_margin">Prawy margines (0: autom.)</string>
<string name="layout_compatibility_mode_summary">Wymuś układ pełnoekranowy (obsługuje wszystkie ekrany o specjalnym kształcie)</string>
<string name="remove_macro_blacklist">Usuń czarną listę gier, dla których wyłączono obsługę makr</string> <string name="remove_macro_blacklist">Usuń czarną listę gier, dla których wyłączono obsługę makr</string>
<string name="hide_network_speed_splitter">Ukryj rozdzielacz prędkości sieci</string> <string name="hide_network_speed_splitter">Ukryj rozdzielacz prędkości sieci</string>
<string name="updater">Aktualizacje</string> <string name="updater">Aktualizacje</string>
@@ -236,4 +237,14 @@
<string name="pkg_installer_summary">Wyłącz sprawdzanie licznika instalacji aplikacji</string> <string name="pkg_installer_summary">Wyłącz sprawdzanie licznika instalacji aplikacji</string>
<string name="big_mobile_type_only_show_network_card">Duża ikona typu sieci tylko dla aktywnej karty SIM</string> <string name="big_mobile_type_only_show_network_card">Duża ikona typu sieci tylko dla aktywnej karty SIM</string>
<string name="big_mobile_type_location">Pozycja dużej ikony typu sieci</string> <string name="big_mobile_type_location">Pozycja dużej ikony typu sieci</string>
<string name="miuihome_recentview_remove_card_animation">Zmodyfikuj animację oznaczania kart</string>
<string name="miuihome_recentview_remove_card_animation_summary">Zmodyfikuj efekt animacji karty usunięcia ostatniego zadania</string>
<string name="miuihome_recentwiew_wallpaper_darkening">Wyłącz przyciemnianie tapety</string>
<string name="miuihome_recentwiew_wallpaper_darkening_summary">Spowoduje to wyłączenie efektu polegającego na tym, że tapeta stopniowo rozjaśnia się od przyciemnienia podczas wchodzenia i wychodzenia z ostatnich zadań</string>
<string name="miuihome_scroll_icon_name">Przewiń nazwę aplikacji</string>
<string name="miuihome_scroll_icon_name_summary">Zbyt długa nazwa aplikacji zostanie przewinięta i wyświetlona bez nowego wiersza</string>
<string name="miuihome_shortcut_add_small_window">Dodaj widżet \"Menu skrótów\"</string>
<string name="miuihome_shortcut_add_small_window_summary">Naciśnij i przytrzymaj ikonę na ekranie głównym, aby dodać okno szybkiego otwierania</string>
<string name="miuihome_shortcut_add_small_window_title">Małe okno</string>
<string name="click_to_view_use_cases">Kliknij, aby wyświetlić przypadki użycia</string>
</resources> </resources>

View File

@@ -38,7 +38,6 @@
<string name="github_url">Sunt bineveniți mai mulți dezvoltatori să participe la dezvoltare</string> <string name="github_url">Sunt bineveniți mai mulți dezvoltatori să participe la dezvoltare</string>
<string name="issues">Feedback/Propunere</string> <string name="issues">Feedback/Propunere</string>
<string name="issues_url">Clic pentru a vizualiza problemele pe GitHub</string> <string name="issues_url">Clic pentru a vizualiza problemele pe GitHub</string>
<string name="xposeddescription">Instrument de personalizare pentru MIUI13 (Android 12)</string>
<string name="statusbar">Bară de stare</string> <string name="statusbar">Bară de stare</string>
<string name="status_bar_time_seconds">Afișare secunde</string> <string name="status_bar_time_seconds">Afișare secunde</string>
<string name="status_bar_network_speed_refresh_speed">Reîmprospătare viteză rețea în secunde</string> <string name="status_bar_network_speed_refresh_speed">Reîmprospătare viteză rețea în secunde</string>

View File

@@ -39,7 +39,6 @@
<string name="github_url">Приглашаем больше разработчиков принять участие в разработке</string> <string name="github_url">Приглашаем больше разработчиков принять участие в разработке</string>
<string name="issues">Обратная связь</string> <string name="issues">Обратная связь</string>
<string name="issues_url">Нажмите, чтобы просмотреть обсуждение на GitHub</string> <string name="issues_url">Нажмите, чтобы просмотреть обсуждение на GitHub</string>
<string name="xposeddescription">Инструмент настройки для MIUI13 (Android 12)</string>
<string name="statusbar">Строка состояния</string> <string name="statusbar">Строка состояния</string>
<string name="status_bar_time_seconds">Секунды</string> <string name="status_bar_time_seconds">Секунды</string>
<string name="status_bar_network_speed_refresh_speed">Обновление скорости сети в секундах</string> <string name="status_bar_network_speed_refresh_speed">Обновление скорости сети в секундах</string>

View File

@@ -39,7 +39,6 @@
<string name="github_url">Geliştirmeye katılmak için daha fazla geliştiriciye hoş geldiniz</string> <string name="github_url">Geliştirmeye katılmak için daha fazla geliştiriciye hoş geldiniz</string>
<string name="issues">Geribildirim/Teklif</string> <string name="issues">Geribildirim/Teklif</string>
<string name="issues_url">GitHub Sorunlarını görüntülemek için tıklayın</string> <string name="issues_url">GitHub Sorunlarını görüntülemek için tıklayın</string>
<string name="xposeddescription">MIUI13 (Android 12) için özelleştirme aracı</string>
<string name="statusbar">Durum çubuğu</string> <string name="statusbar">Durum çubuğu</string>
<string name="status_bar_time_seconds">Saniye göster</string> <string name="status_bar_time_seconds">Saniye göster</string>
<string name="status_bar_network_speed_refresh_speed">Saniyeler içinde ağ hızı yenileme</string> <string name="status_bar_network_speed_refresh_speed">Saniyeler içinde ağ hızı yenileme</string>

View File

@@ -39,7 +39,7 @@
<string name="github_url">Chào mừng các nhà phát triển tham gia vào quá trình phát triển</string> <string name="github_url">Chào mừng các nhà phát triển tham gia vào quá trình phát triển</string>
<string name="issues">Phản hồi/Đề xuất</string> <string name="issues">Phản hồi/Đề xuất</string>
<string name="issues_url">Ấn để xem GitHub Issues</string> <string name="issues_url">Ấn để xem GitHub Issues</string>
<string name="xposeddescription">Công cụ tuỳ chỉnh hoá MIUI13(Android 12)</string> <string name="xposeddescription">Công cụ tuỳ chỉnh cho MIUI13+(Android 12+)</string>
<string name="statusbar">Thanh trạng thái</string> <string name="statusbar">Thanh trạng thái</string>
<string name="status_bar_time_seconds">Hiển thị giây</string> <string name="status_bar_time_seconds">Hiển thị giây</string>
<string name="status_bar_network_speed_refresh_speed">Làm mới tốc độ mạng trong vài giây</string> <string name="status_bar_network_speed_refresh_speed">Làm mới tốc độ mạng trong vài giây</string>
@@ -136,6 +136,7 @@
<string name="layout_compatibility_mode">Chế độ tương thích</string> <string name="layout_compatibility_mode">Chế độ tương thích</string>
<string name="left_margin">Lề trái (0: Tự động)</string> <string name="left_margin">Lề trái (0: Tự động)</string>
<string name="right_margin">Lề phải (0: Tự động)</string> <string name="right_margin">Lề phải (0: Tự động)</string>
<string name="layout_compatibility_mode_summary">Bắt buộc bố cục toàn màn hình (hỗ trợ tất cả các màn hình có hình dạng đặc biệt)</string>
<string name="remove_macro_blacklist">Xóa danh sách đen macro trò chơi</string> <string name="remove_macro_blacklist">Xóa danh sách đen macro trò chơi</string>
<string name="hide_network_speed_splitter">Ẩn bộ chia tốc độ mạng</string> <string name="hide_network_speed_splitter">Ẩn bộ chia tốc độ mạng</string>
<string name="updater">Trình cập nhật</string> <string name="updater">Trình cập nhật</string>

View File

@@ -39,7 +39,7 @@
<string name="github_url">欢迎更多开发者共同参与开发</string> <string name="github_url">欢迎更多开发者共同参与开发</string>
<string name="issues">反馈/提议</string> <string name="issues">反馈/提议</string>
<string name="issues_url">点击查看GitHub Issues</string> <string name="issues_url">点击查看GitHub Issues</string>
<string name="xposeddescription">基于 MIUI13(Android 12) 适配的自定义工具</string> <string name="xposeddescription">基于 MIUI13+(Android 12+) 适配的自定义工具</string>
<string name="statusbar">状态栏</string> <string name="statusbar">状态栏</string>
<string name="status_bar_time_seconds">显示秒数</string> <string name="status_bar_time_seconds">显示秒数</string>
<string name="status_bar_network_speed_refresh_speed">网速秒刷新</string> <string name="status_bar_network_speed_refresh_speed">网速秒刷新</string>
@@ -247,4 +247,5 @@
<string name="miuihome_shortcut_add_small_window_summary">桌面图标长按快捷菜单位置添加快速打开小窗</string> <string name="miuihome_shortcut_add_small_window_summary">桌面图标长按快捷菜单位置添加快速打开小窗</string>
<string name="miuihome_shortcut_add_small_window_title">小窗</string> <string name="miuihome_shortcut_add_small_window_title">小窗</string>
<string name="click_to_view_use_cases">点击查看用例</string> <string name="click_to_view_use_cases">点击查看用例</string>
<string name="disable_bluetooth_temporarily_off" comment="This function is used to completely close Bluetooth">禁用临时关闭蓝牙</string>
</resources> </resources>

View File

@@ -39,7 +39,6 @@
<string name="github_url">歡迎更多開發者共同參與開發</string> <string name="github_url">歡迎更多開發者共同參與開發</string>
<string name="issues">反饋/提議</string> <string name="issues">反饋/提議</string>
<string name="issues_url">點擊查看GitHub Issues</string> <string name="issues_url">點擊查看GitHub Issues</string>
<string name="xposeddescription">基於 MIUI13(Android 12) 適配的自定義工具</string>
<string name="statusbar">狀態欄</string> <string name="statusbar">狀態欄</string>
<string name="status_bar_time_seconds">顯示秒數</string> <string name="status_bar_time_seconds">顯示秒數</string>
<string name="status_bar_network_speed_refresh_speed">網速秒刷新</string> <string name="status_bar_network_speed_refresh_speed">網速秒刷新</string>

View File

@@ -1,224 +1,225 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources> <resources>
<string name="performance"></string> <string name="performance"></string>
<string name="lock_max_fps">鎖定螢幕更新率上限</string> <string name="lock_max_fps">鎖定目前重新整理速率上限</string>
<string name="ui">介面</string> <string name="ui">介面</string>
<string name="delete_on_post_notification">移除上層顯示通知</string> <string name="delete_on_post_notification">移除上層顯示通知</string>
<string name="delete_on_post_notification_summary">移除 \"此應用正顯示在螢幕上其他應用的上層\" 通知</string> <string name="delete_on_post_notification_summary">移除此應用程式正顯示在螢幕上其他應用程式的上層通知</string>
<string name="other">其他</string> <string name="other">其他</string>
<string name="disable_flag_secure">允許截圖</string> <string name="disable_flag_secure">允許螢幕截圖</string>
<string name="disable_flag_secure_summary">開啟後允許在不允許截圖的軟體中截圖\n支援添加下拉控制中心快速開關,保障安全</string> <string name="disable_flag_secure_summary">開啟後允許在不允許截圖的軟體中截圖\n支援新增下拉控制中心快速開關,保障安全</string>
<string name="home">桌面</string> <string name="home">桌面</string>
<string name="home_time">始終顯示桌面時鐘</string> <string name="home_time">始終顯示桌面時鐘</string>
<string name="reboot_host">重啟全部作用域</string> <string name="reboot_host">重啟所有作用範圍</string>
<string name="reboot">重啟系統</string> <string name="reboot">重啟系統</string>
<!--Status bar icons--> <!--Status bar icons-->
<string name="status_bar_icon">狀態圖示</string> <string name="status_bar_icon">狀態圖示</string>
<string name="hide_no_sim_icon">隱藏 無SIM卡 圖示</string> <string name="hide_no_sim_icon">隱藏「無 SIM 卡」圖示</string>
<string name="hide_sim_one_icon">隱藏 SIM卡一 圖示</string> <string name="hide_sim_one_icon">隱藏SIM 卡 1」圖示</string>
<string name="hide_sim_two_icon">隱藏 SIM卡二 圖示</string> <string name="hide_sim_two_icon">隱藏SIM 卡 2」圖示</string>
<string name="hide_vpn_icon">隱藏 VPN 圖示</string> <string name="hide_vpn_icon">隱藏VPN圖示</string>
<string name="hide_airplane_icon">隱藏 飛行模式 圖示</string> <string name="hide_airplane_icon">隱藏「飛航模式圖示</string>
<string name="hide_wifi_icon">隱藏 WIFI 圖示</string> <string name="hide_wifi_icon">隱藏WIFI圖示</string>
<string name="hide_bluetooth_icon">隱藏 藍牙 圖示</string> <string name="hide_bluetooth_icon">隱藏藍牙圖示</string>
<string name="hide_volume_zen_icon">隱藏 聲音、勿擾 圖示</string> <string name="hide_volume_zen_icon">隱藏聲音、勿擾圖示</string>
<string name="hide_alarm_icon">隱藏 鬧鐘 圖示</string> <string name="hide_alarm_icon">隱藏鬧鐘圖示</string>
<string name="hide_hotspot_icon">隱藏 WIFI熱點 圖示</string> <string name="hide_hotspot_icon">隱藏WIFI 熱點圖示</string>
<string name="hide_headset_icon">隱藏 耳機 圖示</string> <string name="hide_headset_icon">隱藏耳機圖示</string>
<string name="hide_bluetooth_battery_icon">隱藏 藍牙電量 圖示</string> <string name="hide_bluetooth_battery_icon">隱藏藍牙電量圖示</string>
<string name="hide_nfc_icon">隱藏 NFC 圖示</string> <string name="hide_nfc_icon">隱藏NFC圖示</string>
<string name="hide_big_hd_icon">隱藏 HD 圖示</string> <string name="hide_big_hd_icon">隱藏「大型 HD圖示</string>
<string name="hide_small_hd_icon">隱藏 HD 圖示</string> <string name="hide_small_hd_icon">隱藏「小型 HD圖示</string>
<string name="hide_new_hd_icon">隱藏 HD 圖示</string> <string name="hide_new_hd_icon">隱藏「新 HD圖示</string>
<string name="hide_hd_no_service_icon">隱藏 HD無服務 圖示</string> <string name="hide_hd_no_service_icon">隱藏HD 無服務圖示</string>
<string name="about">關於</string> <string name="about">關於</string>
<string name="about_module">關於模組</string> <string name="about_module">關於模組</string>
<string name="verison">版本</string> <string name="verison">版本</string>
<string name="dev_coolapk">開發酷安</string> <string name="dev_coolapk">開發人員酷安</string>
<string name="opensource">源倉</string> <string name="opensource">放原始碼存放</string>
<string name="github_url">歡迎更多開發共同參與開發</string> <string name="github_url">歡迎更多開發人員共同參與開發</string>
<string name="issues">回饋/提議</string> <string name="issues">回饋/提議</string>
<string name="issues_url">點擊查看GitHub Issues</string> <string name="issues_url">按一下以檢視 GitHub 問題</string>
<string name="xposeddescription">基於 MIUI13(Android 12) 適配的自訂工具</string> <string name="xposeddescription">基於 MIUI13+(Android 12+) 的客製化工具</string>
<string name="statusbar">狀態</string> <string name="statusbar">狀態</string>
<string name="status_bar_time_seconds">顯示秒數</string> <string name="status_bar_time_seconds">顯示秒數</string>
<string name="status_bar_network_speed_refresh_speed">每秒更新即時網</string> <string name="status_bar_network_speed_refresh_speed">每秒更新即時網路速度</string>
<string name="remove_the_maximum_number_of_notification_icons">除通知圖示數量上限</string> <string name="remove_the_maximum_number_of_notification_icons">除通知圖示數量上限</string>
<string name="main_switch">模組開關</string> <string name="main_switch">模組開關</string>
<string name="hide_gps_icon">隱藏 GPS 圖示</string> <string name="hide_gps_icon">隱藏GPS圖示</string>
<string name="hide_status_bar_network_speed_second">隱藏網速(/s單位</string> <string name="hide_status_bar_network_speed_second">隱藏網路速度 (/s) 單位</string>
<string name="menu">選單</string> <string name="menu">選單</string>
<string name="Tips">提示</string> <string name="Tips">提示</string>
<string name="skip_waiting_time">跳過 5/10 秒警告時間</string> <string name="skip_waiting_time">跳過 5/10 秒警告時間</string>
<string name="unlock_unlimited_cropping">移除裁剪圖片/螢幕截圖的限制</string> <string name="unlock_unlimited_cropping">移除裁剪圖片/螢幕截圖的限制</string>
<string name="hide_slave_wifi_icon">隱藏 WIFI輔助 圖示</string> <string name="hide_slave_wifi_icon">隱藏WIFI 次要」圖示</string>
<string name="HideLauncherIcon">隱藏桌面圖示</string> <string name="HideLauncherIcon">隱藏桌面圖示</string>
<string name="hide_battery_percentage_icon">隱藏電量%</string> <string name="hide_battery_percentage_icon">隱藏電量 (%)</string>
<string name="hide_battery_icon">隱藏 電池 圖示</string> <string name="hide_battery_icon">隱藏電池圖示</string>
<string name="status_bar_clock_format">狀態時鐘格式</string> <string name="status_bar_clock_format">狀態時鐘格式</string>
<string name="status_bar_time_year">顯示年份</string> <string name="status_bar_time_year">顯示年份</string>
<string name="status_bar_time_month">顯示月份</string> <string name="status_bar_time_month">顯示月份</string>
<string name="status_bar_time_day">顯示日期</string> <string name="status_bar_time_day">顯示日期</string>
<string name="status_bar_time_week">顯示星期</string> <string name="status_bar_time_week">顯示星期</string>
<string name="status_bar_time_hide_space">隱藏間隔</string> <string name="status_bar_time_hide_space">隱藏間隔</string>
<string name="allow_screenshots">允許截圖</string> <string name="allow_screenshots">允許截圖</string>
<string name="lock_max">鎖定前上限</string> <string name="lock_max">鎖定前上限</string>
<string name="status_bar_time_double_hour">顯示時辰</string> <string name="status_bar_time_double_hour">顯示時辰</string>
<string name="custom_clock_switch">自訂時鐘-總開關</string> <string name="custom_clock_switch">自訂時鐘 - 主開關</string>
<string name="status_bar_time_period">顯示時段</string> <string name="status_bar_time_period">顯示時段</string>
<string name="status_bar_time_double_line">顯示</string> <string name="status_bar_time_double_line">顯示</string>
<string name="status_bar_clock_size">時鐘大小0不更改</string> <string name="status_bar_clock_size">時鐘大小 (0無變更)</string>
<string name="status_bar_clock_double_line_size">大小0不更改</string> <string name="status_bar_clock_double_line_size">大小 (0無變更)</string>
<string name="matters_needing_attention">功能無法生效?</string> <string name="matters_needing_attention">功能無法生效?</string>
<string name="Done">確定</string> <string name="Done">確定</string>
<string name="about_module_summary">查看模組相關訊</string> <string name="about_module_summary">檢視模組相關</string>
<string name="contributor_list">源倉庫貢獻者名單</string> <string name="contributor_list">放原始碼存放庫貢獻者名單</string>
<string name="developer">開發</string> <string name="developer">開發人員</string>
<string name="thank_list">感謝名單</string> <string name="thank_list">感謝名單</string>
<string name="third_party_open_source_statement">第三方開聲明</string> <string name="third_party_open_source_statement">第三方開放原始碼聲明</string>
<string name="corepacth">除安裝限制</string> <string name="corepacth">除安裝限制</string>
<string name="corepacth_summary">降級/不同簽/無簽安裝</string> <string name="corepacth_summary">降級/不同簽/無簽安裝</string>
<string name="prevent_recovery_of_battery_optimization_white_list">防止恢復電池最佳化白名單</string> <string name="prevent_recovery_of_battery_optimization_white_list">防止復原電池效能最佳化白名單</string>
<string name="failed_after_restart">系統重啟後仍會還原</string> <string name="failed_after_restart">系統重啟後仍會還原</string>
<string name="battery_optimization">電池最佳化</string> <string name="battery_optimization">電池效能最佳化</string>
<string name="battery_optimization_summary">快速打開被MIUI隱藏的電池最佳化功能</string> <string name="battery_optimization_summary">快速開啟被 MIUI 隱藏的電池效能最佳化功能</string>
<string name="remove_small_window_restrictions">強制使用小窗</string> <string name="remove_small_window_restrictions">強制使用小窗</string>
<string name="app_coolapk_url">來酷安給我們五星好評</string> <string name="app_coolapk_url">來酷安給我們五星好評</string>
<string name="app_coolapk_url_summary">這可以使我們被更多的人發現</string> <string name="app_coolapk_url_summary">這可以使我們被更多的人發現</string>
<string name="qq_channel">加入官方 QQ 頻道</string> <string name="qq_channel">加入官方 QQ 頻道</string>
<string name="tg_channel">加入官方 TG 頻道</string> <string name="tg_channel">加入官方 TG 頻道</string>
<string name="tg_channel_summary">可在頻道資料頁進入交流群</string> <string name="tg_channel_summary">可在頻道頁面進入聊天群組</string>
<string name="discussions">討論</string> <string name="discussions">討論</string>
<string name="remove_small_window_restrictions_summary">忽略系統黑名單與軟體禁止小窗</string> <string name="remove_small_window_restrictions_summary">忽略系統黑名單與軟體小窗封鎖</string>
<string name="remove_the_left_side_of_the_lock_screen">移除鎖定螢幕負一屏功能</string> <string name="remove_the_left_side_of_the_lock_screen">移除負一屏功能鎖定</string>
<string name="remove_lock_screen_camera">移除鎖定螢幕相機功能</string> <string name="remove_lock_screen_camera">移除鎖定螢幕相機功能</string>
<string name="only_official_default_themes_are_supported">僅支援官方預設主題</string> <string name="only_official_default_themes_are_supported">僅支援官方預設主題</string>
<string name="lock_one_hundred">手機管家鎖定 100 分</string> <string name="lock_one_hundred">手機管家鎖定 100 分</string>
<string name="scope">作用</string> <string name="scope">作用範圍</string>
<string name="scope_android">系統</string> <string name="scope_android">系統架</string>
<string name="scope_systemui">系統介面</string> <string name="scope_systemui">系統 UI</string>
<string name="scope_miuihome">系統桌面</string> <string name="scope_miuihome">系統桌面</string>
<string name="scope_other">其他</string> <string name="scope_other">其他</string>
<string name="status_bar_network_speed_refresh_speed_summary">將狀態欄網速組件的更新頻率改成1s</string> <string name="status_bar_network_speed_refresh_speed_summary">將狀態列網路速度元件的更新間隔變更為 1s</string>
<string name="hide_battery_percentage_icon_summary">需自行開啟電池百分比外顯功能</string> <string name="hide_battery_percentage_icon_summary">需自行開啟電池百分比外顯功能</string>
<string name="hide_status_bar_network_speed_second_summary">隱藏狀態欄網速組件的(/s單位</string> <string name="hide_status_bar_network_speed_second_summary">隱藏狀態列網路速度元件的 (/s) 單位</string>
<string name="remove_the_maximum_number_of_notification_icons_summary">除狀態最多能顯示3個通知的限制</string> <string name="remove_the_maximum_number_of_notification_icons_summary">除狀態最多能顯示三條通知的限制</string>
<string name="scope_systemui_summary">自訂系統介面、狀態、鎖定螢幕等</string> <string name="scope_systemui_summary">自訂系統介面、狀態、鎖定螢幕等</string>
<string name="scope_android_summary">首次啟動模組或模組更新後,\n此處的功能需重啟系統後才能生效</string> <string name="scope_android_summary">首次啟動模組或模組更新後,\n此處的功能需重啟系統後才能生效</string>
<string name="scope_other_summary">手機管家、相簿編輯、電量與性能等</string> <string name="scope_other_summary">手機管家、相簿編輯、電量與性能等</string>
<string name="scope_powerkeeper">電量與性能</string> <string name="scope_powerkeeper">電量與性能</string>
<string name="scope_securitycenter">手機管家</string> <string name="scope_securitycenter">手機管家</string>
<string name="scope_mediaeditor">相簿編輯</string> <string name="scope_mediaeditor">相簿編輯</string>
<string name="home_time_summary">開啟後即使存在時鐘小組件\n也不會對狀態欄隱藏時鐘</string> <string name="home_time_summary">開啟後即使存在時鐘小工具\n也不會隱藏狀態列時鐘</string>
<string name="skip_waiting_time_summary">開啟後可忽略MIUI在開啟USB偵錯、\n未知應用來源、無障礙時的凍結時間</string> <string name="skip_waiting_time_summary">開啟後可忽略 MIUI 在開啟 USB 偵錯、\n未知應用程式來源、無障礙時的凍結時間</string>
<string name="lock_one_hundred_summary">鎖定手機管家100分並隱藏修復按鈕</string> <string name="lock_one_hundred_summary">鎖定手機管家 100 分並封鎖修復按鈕</string>
<string name="unlock_unlimited_cropping_summary">無視MIUI對圖片裁切的最小限制</string> <string name="unlock_unlimited_cropping_summary">忽略 MIUI 對圖片裁切的最小限制</string>
<string name="hide_wifi_activity_icon">隱藏 WIFI箭頭 圖示</string> <string name="hide_wifi_activity_icon">隱藏WIFI 活動」圖示</string>
<string name="hide_mobile_activity_icon">隱藏動網路箭頭 圖示</string> <string name="hide_mobile_activity_icon">隱藏「行動網路活動」圖示</string>
<string name="hide_mobile_type_icon">隱藏 行動網路類型 圖示</string> <string name="hide_mobile_type_icon">隱藏行動網路類型圖示</string>
<string name="show_weather_main_switch">顯示天氣-總開關</string> <string name="show_weather_main_switch">顯示天氣 - 主開關</string>
<string name="lock_screen">鎖定螢幕</string> <string name="lock_screen">鎖定螢幕</string>
<string name="notification_center">通知中心</string> <string name="notification_center">通知中心</string>
<string name="show_city">顯示城市</string> <string name="show_city">顯示城市</string>
<string name="lock_max_fps_summary">支援添加下拉控制中心快速開關,即時切換</string> <string name="lock_max_fps_summary">支援新增下拉控制中心快速開關,即時切換</string>
<string name="control_center">控制中心</string> <string name="control_center">控制中心</string>
<string name="control_center_weather_summary">暫不支援妙享版控制中心</string> <string name="control_center_weather_summary">暫不支援妙享版控制中心</string>
<string name="not_support">您似乎正在使用過時的 LSPosed 版本或 LSPosed 未啟,請更新 LSPosed 或者啟動後再試。</string> <string name="not_support">您似乎正在使用過時的 LSPosed 版本或 LSPosed 未啟,請更新 LSPosed 或啟用後再試一次</string>
<string name="matters_needing_attention_context">首次啟動或更新後建議重啟手機\n絕大部分功能更後需要在右上角重啟作用域後生效</string> <string name="matters_needing_attention_context">首次啟動或更新後建議重啟手機\n絕大部分功能更後需要在右上角重啟範圍後生效</string>
<string name="are_you_sure_reboot">確定重啟系統?</string> <string name="are_you_sure_reboot">確定重啟系統?</string>
<string name="cancel">取消</string> <string name="cancel">取消</string>
<string name="are_you_sure_reboot_scope">確定重啟全部作用域</string> <string name="are_you_sure_reboot_scope">確定重啟所有作用範圍</string>
<string name="hide_battery_charging_icon">隱藏 充電 圖示</string> <string name="hide_battery_charging_icon">隱藏充電圖示</string>
<string name="hide_wifi_standard_icon">隱藏 WIFI標準 圖示</string> <string name="hide_wifi_standard_icon">隱藏WIFI 標準圖示</string>
<string name="status_bar_time_center">時間</string> <string name="status_bar_time_center">時間</string>
<string name="status_bar_layout_summary">更多狀態欄布局等待開發中</string> <string name="status_bar_layout_summary">更多狀態列版面配置等候開發中</string>
<string name="status_bar_layout">狀態欄布局</string> <string name="status_bar_layout">狀態列版面配置</string>
<string name="layout_compatibility_mode">相容模式</string> <string name="layout_compatibility_mode">相容模式</string>
<string name="left_margin">左邊距 (0: 自動)</string> <string name="left_margin">左邊距 (0自動)</string>
<string name="right_margin">右邊距 (0: 自動)</string> <string name="right_margin">右邊距 (0自動)</string>
<string name="remove_macro_blacklist">去除遊戲自動連招黑名單</string> <string name="layout_compatibility_mode_summary">強制全螢幕版面配置 (支援所有螢幕凹口或空缺)</string>
<string name="hide_network_speed_splitter">隱藏網速分隔符</string> <string name="remove_macro_blacklist">移除遊戲自動連招黑名單</string>
<string name="hide_network_speed_splitter">隱藏網路速度分割器</string>
<string name="updater">系統更新</string> <string name="updater">系統更新</string>
<string name="remove_ota_validate">*移除 OTA 驗證 [實驗性]</string> <string name="remove_ota_validate">*移除 OTA 驗證 [實驗性]</string>
<string name="remove_ota_validate_summary">- 僅支援VAB系列使用其餘系列請不要開啟。\n- 無需內測資格即可刷入完整內測包。\n- 擁有內測權限的使用者將無法接收內測更新\n可用於隱藏系統更新。\n- 跨版本類型升級後,建議清空數據。\n- 不支援非官方ROM使用。</string> <string name="remove_ota_validate_summary">- 僅支援 VAB 系列使用,其餘系列請不要開啟。\n- 無需內測資格即可刷入完整內測包。\n- 擁有內測權限的使用者將無法接收內測更新\n可用於隱藏系統更新。\n- 跨版本類型升級後,建議清除資料。\n- 不支援非官方 ROM 使用。</string>
<string name="settings">設定</string> <string name="settings">設定</string>
<string name="show_notification_importance">顯示通知重要程度</string> <string name="show_notification_importance">顯示通知重要程度</string>
<string name="show_notification_importance_summary">顯示 MIUI 12 及之後版本被隱藏的通知重要程度設定</string> <string name="show_notification_importance_summary">顯示 MIUI 12 及之後版本被隱藏的通知重要程度設定</string>
<string name="remove_ad">廣告</string> <string name="remove_ad">移除廣告</string>
<string name="remove_thememanager_ads">拿掉主題壁紙的廣告</string> <string name="remove_thememanager_ads">移除個性主題廣告</string>
<string name="battery_life_function">電池頁面示目前溫度</string> <string name="battery_life_function">電池頁面示目前溫度</string>
<string name="enable_wave_charge_animation">啟用 MIX Alpha 充電動畫</string> <string name="enable_wave_charge_animation">啟用 MIX Alpha 充電動畫</string>
<string name="max_wallpaper_scale">桌布縮放比例</string> <string name="max_wallpaper_scale">桌布縮放比例</string>
<string name="def">"預設值: "</string> <string name="def">"預設值: "</string>
<string name="current">目前值:</string> <string name="current">目前值:</string>
<string name="participate_in_translation">參與翻譯</string> <string name="participate_in_translation">參與翻譯</string>
<string name="participate_in_translation_summary">助我們將這個APP翻譯您的語言</string> <string name="participate_in_translation_summary">助我們將這個應用程式翻譯您的語言</string>
<string name="lock_screen_charging_current">充電時顯示目前電流</string> <string name="lock_screen_charging_current">充電時顯示目前電流</string>
<string name="current_current">目前電流</string> <string name="current_current">目前電流</string>
<string name="remove_open_app_confirmation_popup">移除打開應用彈出視窗</string> <string name="remove_open_app_confirmation_popup">移除「開啟應用程式」彈出視窗</string>
<string name="remove_open_app_confirmation_popup_summary">移除 \"XXX 想要開 XXX\" 的彈出視窗</string> <string name="remove_open_app_confirmation_popup_summary">移除XXX 想要開 XXX的彈出視窗</string>
<string name="hide_volume_icon">隱藏 音量 圖示</string> <string name="hide_volume_icon">隱藏音量圖示</string>
<string name="hide_zen_icon">隱藏 勿擾 圖示</string> <string name="hide_zen_icon">隱藏勿擾圖示</string>
<string name="hide_icon">隱藏圖示</string> <string name="hide_icon">隱藏圖示</string>
<string name="double_tap_to_sleep">雙擊鎖定螢幕</string> <string name="double_tap_to_sleep">輕觸兩下鎖定螢幕</string>
<string name="home_double_tap_to_sleep_summary">雙擊空白位置鎖定螢幕</string> <string name="home_double_tap_to_sleep_summary">輕觸兩下空白位置鎖定螢幕</string>
<string name="old_quick_settings_panel">舊快速設定面板</string> <string name="old_quick_settings_panel">快速設定面板</string>
<string name="old_qs_custom_switch">定義行與</string> <string name="old_qs_custom_switch">訂行</string>
<string name="qs_custom_columns_unexpanded"> (未展開)</string> <string name="qs_custom_columns_unexpanded"> (未展開)</string>
<string name="qs_custom_rows"></string> <string name="qs_custom_rows"></string>
<string name="qs_custom_columns"></string> <string name="qs_custom_columns"></string>
<string name="qs_custom_rows_horizontal"> (橫向)</string> <string name="qs_custom_rows_horizontal"> (橫向)</string>
<string name="status_bar_dual_row_network_speed">網路速度</string> <string name="status_bar_dual_row_network_speed">網路速度</string>
<string name="status_bar_dual_row_network_speed_summary">上下網路速度顯示</string> <string name="status_bar_dual_row_network_speed_summary">上下網路速度顯示</string>
<string name="status_bar_network_speed">狀態網路速度</string> <string name="status_bar_network_speed">狀態網路速度</string>
<string name="status_bar_network_speed_dual_row_size">大小0不更改</string> <string name="status_bar_network_speed_dual_row_size">大小 (0無變更)</string>
<string name="status_bar_network_speed_dual_row_icon">圖示</string> <string name="status_bar_network_speed_dual_row_icon">圖示</string>
<string name="none"></string> <string name="none"></string>
<string name="status_bar_network_speed_dual_row_gravity">行網速對齊</string> <string name="status_bar_network_speed_dual_row_gravity">對齊</string>
<string name="left">置左</string> <string name="left">置左</string>
<string name="right">置右</string> <string name="right">置右</string>
<string name="big_mobile_type_icon">大行動網路圖示</string> <string name="big_mobile_type_icon">行動網路圖示</string>
<string name="show_wifi_standard">顯示 Wifi 標準</string> <string name="show_wifi_standard">顯示 WiFi 標準</string>
<string name="can_notification_slide">強制允許全部通知使用小窗</string> <string name="can_notification_slide">強制允許所有通知使用小窗</string>
<string name="battery_percentage_font_size">電量百分比字大小</string> <string name="battery_percentage_font_size">電量百分比字大小</string>
<string name="zero_do_no_change">0不修改</string> <string name="zero_do_no_change">0無變更</string>
<string name="big_mobile_type_icon_size">大行動網路圖示大小</string> <string name="big_mobile_type_icon_size">行動網路圖示大小</string>
<string name="big_mobile_type_icon_bold">大行動網路圖示</string> <string name="big_mobile_type_icon_bold">行動網路圖示粗</string>
<string name="big_mobile_type_icon_up_and_down_position">大行動網路圖示上下位置</string> <string name="big_mobile_type_icon_up_and_down_position">行動網路圖示上下位置</string>
<string name="input_error">輸入錯誤</string> <string name="input_error">輸入錯誤</string>
<string name="range">範圍:</string> <string name="range">範圍:</string>
<string name="big_mobile_type_icon_left_and_right_margins">大行動網路圖示左右邊距</string> <string name="big_mobile_type_icon_left_and_right_margins">行動網路圖示左右邊距</string>
<string name="cast">接力</string> <string name="cast">投放</string>
<string name="force_support_send_app">允許所有應用使用接力</string> <string name="force_support_send_app">強制所有應用程式支援在其他裝置開啟</string>
<string name="status_bar_time_double_line_center_align">行居中對齊</string> <string name="status_bar_time_double_line_center_align">列置中對齊</string>
<string name="default1">預設值</string> <string name="default1">預設值</string>
<string name="clock_center">時鐘置中</string> <string name="clock_center">時鐘置中</string>
<string name="clock_right">時鐘置右</string> <string name="clock_right">時鐘置右</string>
<string name="status_bar_layout_mode">狀態欄布局模式</string> <string name="status_bar_layout_mode">狀態列版面配置模式</string>
<string name="clock_center_and_icon_left">間居中+圖示置左</string> <string name="clock_center_and_icon_left">鐘置中 + 圖示置左</string>
<string name="maximum_number_of_notification_icons">通知圖示最大數量</string> <string name="maximum_number_of_notification_icons">通知圖示最大數量</string>
<string name="maximum_number_of_notification_dots">通知點點數量</string> <string name="maximum_number_of_notification_dots">通知圓點最大數量</string>
<string name="custom_mobile_type_text">自訂行動網路類型文字</string> <string name="custom_mobile_type_text">自訂行動網路類型文字</string>
<string name="custom_mobile_type_text_switch">自訂行動網路類型文字開關</string> <string name="custom_mobile_type_text_switch">自訂行動網路類型文字開關</string>
<string name="downgr">允許降級安裝應用</string> <string name="downgr">允許降級安裝應用程式</string>
<string name="downgr_summary">允許在已安裝新版的情況下覆蓋安裝舊版本</string> <string name="downgr_summary">允許在已安裝新版的情況下覆寫為舊版本</string>
<string name="authcreak">禁用應用安裝管理器簽名驗證</string> <string name="authcreak">停用安裝程式簽章驗證</string>
<string name="authcreak_summary">關閉安裝應用時的簽名驗證可以安裝被修改的APK</string> <string name="authcreak_summary">關閉安裝應用程式時的簽名驗證,可以安裝被修改的 APK</string>
<string name="digestCreak">禁用APK簽名驗證</string> <string name="digestCreak">停用 APK 簽章驗證</string>
<string name="digestCreak_summary">允許覆蓋安裝同包名不同簽名的應用</string> <string name="digestCreak_summary">允許安裝套件名稱相同但簽章不同的應用程式</string>
<string name="UsePreSig">安裝時始終使用已安裝應用的簽</string> <string name="UsePreSig">安裝時始終使用已安裝應用程式的簽</string>
<string name="UsePreSig_summary">安裝時始終使用已安裝應用的簽\n這非常<b>危險</b>\n僅在真正需要時啟用</string> <string name="UsePreSig_summary">安裝時始終使用已安裝應用程式的簽\n這非常<b>危險</b>\n僅在真正需要時啟用</string>
<string name="enhancedMode">增強模式</string> <string name="enhancedMode">增強模式</string>
<string name="enhancedMode_summary">可以解決一些應用內部的完整性驗,一般不需要開啟</string> <string name="enhancedMode_summary">可以解決一些應用程式內部的完整性驗,一般不需要開啟</string>
<string name="rear_display">後螢幕11Ultra</string> <string name="rear_display">螢幕 (11 Ultra)</string>
<string name="lock_screen_clock_display_seconds">時鐘顯示秒數</string> <string name="lock_screen_clock_display_seconds">時鐘顯示秒數</string>
<string name="sound">聲音</string> <string name="sound">聲音</string>
<string name="media_volume_steps_switch">媒體音量階數</string> <string name="media_volume_steps_switch">媒體音量階數</string>
<string name="allow_untrusted_touches">允許不受信任的觸控</string> <string name="allow_untrusted_touches">允許不受信任的觸控</string>
<string name="take_effect_after_reboot">重新開機後生效</string> <string name="take_effect_after_reboot">重新開機後生效</string>
<string name="media_volume_steps_summary">開啟後可能會導致音量條的滾動卡頓或藍牙音量異常</string> <string name="media_volume_steps_summary">開啟後可能會導致音量列捲動卡頓或藍牙音量異常</string>
<string name="can_notification_slide_summary">可能無法支援一些使用小米推送 (Mi Push) 推播的通知</string> <string name="can_notification_slide_summary">可能無法支援一些使用小米推送 (Mi Push) 推播的通知</string>
<string name="screen_hole_location">螢幕挖孔位置</string> <string name="screen_hole_location">螢幕凹口位置</string>
<string name="custom_clock_mode">自訂時鐘模式</string> <string name="custom_clock_mode">自訂時鐘模式</string>
<string name="custom_clock_format_geek">時鐘格式</string> <string name="custom_clock_format_geek">時鐘格式</string>
<string name="off">關閉</string> <string name="off">關閉</string>
@@ -232,10 +233,10 @@
<string name="make_millet_more_aggressive_summary">允許 Millet 在背景應用程式有通知、有服務執行、有處理程序執行的狀況下凍結應用程式。\n不希望被凍結的應用程式可將省電策略設為無限制\n啟用前請先解除安裝墓碑和 NoANR 相關模組。</string> <string name="make_millet_more_aggressive_summary">允許 Millet 在背景應用程式有通知、有服務執行、有處理程序執行的狀況下凍結應用程式。\n不希望被凍結的應用程式可將省電策略設為無限制\n啟用前請先解除安裝墓碑和 NoANR 相關模組。</string>
<string name="make_millet_ignore_active">允許 Millet 凍結使用中的應用程式</string> <string name="make_millet_ignore_active">允許 Millet 凍結使用中的應用程式</string>
<string name="make_millet_ignore_active_summary">非常積極,可能會影響應用程式執行</string> <string name="make_millet_ignore_active_summary">非常積極,可能會影響應用程式執行</string>
<string name="pkg_installer">應用包管理組件</string> <string name="pkg_installer">套件安裝程式</string>
<string name="pkg_installer_summary">用頻繁安裝應用檢查</string> <string name="pkg_installer_summary">用頻繁應用程式安裝檢查</string>
<string name="big_mobile_type_only_show_network_card">大行動網路僅會顯示網路卡</string> <string name="big_mobile_type_only_show_network_card">行動網路僅會顯示網路卡</string>
<string name="big_mobile_type_location">大行動網路位置</string> <string name="big_mobile_type_location">行動網路位置</string>
<string name="miuihome_recentview_remove_card_animation">修改卡片動畫</string> <string name="miuihome_recentview_remove_card_animation">修改卡片動畫</string>
<string name="miuihome_recentview_remove_card_animation_summary">修改在最近任務介面移除卡片的動畫效果</string> <string name="miuihome_recentview_remove_card_animation_summary">修改在最近任務介面移除卡片的動畫效果</string>
<string name="miuihome_recentwiew_wallpaper_darkening">停用桌布壓暗</string> <string name="miuihome_recentwiew_wallpaper_darkening">停用桌布壓暗</string>
@@ -245,5 +246,5 @@
<string name="miuihome_shortcut_add_small_window">捷徑選單新增小窗</string> <string name="miuihome_shortcut_add_small_window">捷徑選單新增小窗</string>
<string name="miuihome_shortcut_add_small_window_summary">長按桌面圖示以快速開啟小窗應用程式</string> <string name="miuihome_shortcut_add_small_window_summary">長按桌面圖示以快速開啟小窗應用程式</string>
<string name="miuihome_shortcut_add_small_window_title">小窗應用程式</string> <string name="miuihome_shortcut_add_small_window_title">小窗應用程式</string>
<string name="click_to_view_use_cases">按一下以檢視</string> <string name="click_to_view_use_cases">按一下以檢視</string>
</resources> </resources>

View File

@@ -43,7 +43,7 @@
<string name="github_url">Welcome more developers to participate in the development</string> <string name="github_url">Welcome more developers to participate in the development</string>
<string name="issues">Feedback/Proposal</string> <string name="issues">Feedback/Proposal</string>
<string name="issues_url">Click to view GitHub Issues</string> <string name="issues_url">Click to view GitHub Issues</string>
<string name="xposeddescription">Customization tool for MIUI13(Android 12)</string> <string name="xposeddescription">Customization tool for MIUI13+(Android 12+)</string>
<string name="statusbar">Status bar</string> <string name="statusbar">Status bar</string>
<string name="status_bar_time_seconds">Display seconds</string> <string name="status_bar_time_seconds">Display seconds</string>
<string name="status_bar_network_speed_refresh_speed">Network speed refresh in seconds</string> <string name="status_bar_network_speed_refresh_speed">Network speed refresh in seconds</string>
@@ -251,4 +251,5 @@
<string name="miuihome_shortcut_add_small_window_summary">Press and hold the desktop icon to add a quick open window</string> <string name="miuihome_shortcut_add_small_window_summary">Press and hold the desktop icon to add a quick open window</string>
<string name="miuihome_shortcut_add_small_window_title">Small window</string> <string name="miuihome_shortcut_add_small_window_title">Small window</string>
<string name="click_to_view_use_cases">Click to view use cases</string> <string name="click_to_view_use_cases">Click to view use cases</string>
<string name="disable_bluetooth_temporarily_off">Disable bluetooth temporarily off</string>
</resources> </resources>