diff --git a/app/build.gradle b/app/build.gradle index 4b0ddd19b..1181ca452 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -34,17 +34,20 @@ android { buildTypes { release { minifyEnabled true - proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + shrinkResources true + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro', 'proguard-log.pro' versionNameSuffix "_" + DateTimeFormatter.ofPattern("yyyyMMdd").format(LocalDateTime.now()) } beta { minifyEnabled true - proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + shrinkResources true + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro', 'proguard-log.pro' versionNameSuffix "_" + DateTimeFormatter.ofPattern("yyyyMMdd").format(LocalDateTime.now()) } canary { minifyEnabled true - proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + shrinkResources true + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro', 'proguard-log.pro' versionNameSuffix "_" + DateTimeFormatter.ofPattern("yyyyMMdd").format(LocalDateTime.now()) + "_" + getGitRevision() } debug { @@ -63,10 +66,6 @@ android { namespace 'com.sevtinge.cemiuiler' } -/* -repositories { - mavenCentral() -}*/ dependencies { diff --git a/app/proguard-log.pro b/app/proguard-log.pro new file mode 100644 index 000000000..151518a3d --- /dev/null +++ b/app/proguard-log.pro @@ -0,0 +1,54 @@ +########################################################################################################## +# 作者:Sollyu +# 日期:2020-11-02 +# 内容:发布版本移除日志,kotlin编译时带的而外信息,增强反调试难度 +# 使用:proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro', 'proguard-log.pro' +########################################################################################################## + +########################################################################################################## +# 删除安卓日志 +-assumenosideeffects class android.util.Log { + public static *** d(...); + public static *** v(...); + public static *** w(...); + public static *** e(...); +} + +########################################################################################################## +# 删除Kotlin编译时可能生成显示变量的方法 +-assumenosideeffects class kotlin.jvm.internal.Intrinsics { + public static void checkExpressionValueIsNotNull(java.lang.Object, java.lang.String); + public static void checkFieldIsNotNull(java.lang.Object, java.lang.String); + public static void checkFieldIsNotNull(java.lang.Object, java.lang.String, java.lang.String); + public static void checkNotNull(java.lang.Object); + public static void checkNotNull(java.lang.Object, java.lang.String); + public static void checkNotNullExpressionValue(java.lang.Object, java.lang.String); + public static void checkNotNullParameter(java.lang.Object, java.lang.String); + public static void checkParameterIsNotNull(java.lang.Object, java.lang.String); + public static void checkReturnedValueIsNotNull(java.lang.Object, java.lang.String); + public static void throwUninitializedPropertyAccessException(java.lang.String); +} + +########################################################################################################## +# 会暴露变量名称 +-assumenosideeffects class java.util.Objects { + public static java.lang.Object requireNonNull(java.lang.Object, java.lang.String); +} + +########################################################################################################## +# 删除slf4j的日志输出 +-assumenosideeffects interface org.slf4j.Logger { + public void trace(...); + public void debug(...); + public void info(...); + public void warn(...); + public void error(...); + + public boolean isTraceEnabled(...); + public boolean isDebugEnabled(...); + public boolean isWarnEnabled(...); +} + +-assumenosideeffects class org.slf4j.LoggerFactory { + public static ** getLogger(...); +} diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index a2942a698..16da1b1cb 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -6,5 +6,8 @@ -keep class * extends com.sevtinge.cemiuiler.module.base.BaseHook -keep class com.sevtinge.cemiuiler.ui.HideAppActivity -keep class * extends com.sevtinge.cemiuiler.ui.fragment.base.* +-keep class miui.drm.**{*;} -dontwarn android.app.ActivityTaskManager$RootTaskInfo -dontwarn miui.app.MiuiFreeFormManager$MiuiFreeFormStackInfo +-allowaccessmodification +-overloadaggressively diff --git a/app/src/main/java/com/sevtinge/cemiuiler/module/SecurityCenter.java b/app/src/main/java/com/sevtinge/cemiuiler/module/SecurityCenter.java index a9f129ad1..50bf662f2 100644 --- a/app/src/main/java/com/sevtinge/cemiuiler/module/SecurityCenter.java +++ b/app/src/main/java/com/sevtinge/cemiuiler/module/SecurityCenter.java @@ -1,5 +1,7 @@ package com.sevtinge.cemiuiler.module; +import static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isAndroidR; + import com.sevtinge.cemiuiler.module.base.BaseModule; import com.sevtinge.cemiuiler.module.securitycenter.AppLockPinScramble; import com.sevtinge.cemiuiler.module.securitycenter.BlurSecurity; @@ -30,7 +32,6 @@ import com.sevtinge.cemiuiler.module.securitycenter.lab.AiClipboardEnable; import com.sevtinge.cemiuiler.module.securitycenter.lab.BlurLocationEnable; import com.sevtinge.cemiuiler.module.securitycenter.lab.GetNumberEnable; -import com.sevtinge.cemiuiler.utils.devicesdk.SdkHelper; public class SecurityCenter extends BaseModule { @@ -58,10 +59,10 @@ public void handleLoadPackage() { initHook(new GetNumberEnable(), mPrefsMap.getBoolean("security_center_get_number")); // 前置摄像助手 - initHook(new BeautyLight(), mPrefsMap.getBoolean("security_center_beauty_light")); + initHook(BeautyLight.INSTANCE, mPrefsMap.getBoolean("security_center_beauty_light")); initHook(new BeautyLightAuto(), mPrefsMap.getBoolean("security_center_beauty_light_auto")); initHook(new BeautyFace(), mPrefsMap.getBoolean("security_center_beauty_face")); - initHook(new BeautyPrivacy(), mPrefsMap.getBoolean("security_center_beauty_privacy")); + initHook(BeautyPrivacy.INSTANCE, mPrefsMap.getBoolean("security_center_beauty_privacy")); initHook(new BeautyPc(), mPrefsMap.getBoolean("security_center_beauty_pc")); // 其他 @@ -80,7 +81,7 @@ public void handleLoadPackage() { initHook(new RemoveOpenAppConfirmationPopup(), mPrefsMap.getBoolean("security_center_remove_open_app_confirmation_popup")); // - if (!SdkHelper.isAndroidR()) { + if (!isAndroidR()) { initHook(new NewBoxBlur(), mPrefsMap.getBoolean("security_center_newbox_custom_enable")); initHook(BlurSecurity.INSTANCE, mPrefsMap.getBoolean("se_enable")); initHook(SidebarLineCustom.INSTANCE, mPrefsMap.getBoolean("security_center_sidebar_line_color")); diff --git a/app/src/main/java/com/sevtinge/cemiuiler/module/SystemFramework.java b/app/src/main/java/com/sevtinge/cemiuiler/module/SystemFramework.java index a85ff9d97..8c209fd22 100644 --- a/app/src/main/java/com/sevtinge/cemiuiler/module/SystemFramework.java +++ b/app/src/main/java/com/sevtinge/cemiuiler/module/SystemFramework.java @@ -1,5 +1,7 @@ package com.sevtinge.cemiuiler.module; +import static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isAndroidT; + import com.sevtinge.cemiuiler.module.base.BaseModule; import com.sevtinge.cemiuiler.module.systemframework.AllowUntrustedTouch; import com.sevtinge.cemiuiler.module.systemframework.AppDisableService; @@ -36,7 +38,6 @@ import com.sevtinge.cemiuiler.module.systemframework.network.N1Band; import com.sevtinge.cemiuiler.module.systemframework.network.N28Band; import com.sevtinge.cemiuiler.module.systemframework.network.N5N8Band; -import com.sevtinge.cemiuiler.utils.devicesdk.SdkHelper; public class SystemFramework extends BaseModule { @@ -53,9 +54,7 @@ public void handleLoadPackage() { initHook(RemoveSmallWindowRestrictions.INSTANCE, mPrefsMap.getBoolean("system_framework_disable_freeform_blacklist")); initHook(new StickyFloatingWindows(), mPrefsMap.getBoolean("system_framework_freeform_sticky")); initHook(MultiFreeFormSupported.INSTANCE, mPrefsMap.getBoolean("system_framework_freeform_recents_to_small_freeform")); - initHook(new OpenAppInFreeForm(), mPrefsMap.getBoolean("system_framework_freeform_open_notification") || - mPrefsMap.getBoolean("system_framework_freeform_app_share") || - mPrefsMap.getBoolean("system_framework_freeform_open_notification_fw")); + initHook(new OpenAppInFreeForm(), mPrefsMap.getBoolean("system_framework_freeform_jump")); // initHook(new OpenAppInFreeForm(), mPrefsMap.getBoolean("system_framework_freeform_jump")); // 音量 @@ -104,7 +103,7 @@ public void handleLoadPackage() { initHook(new LocationSimulation(), false); // 核心破解 - if (SdkHelper.isAndroidTiramisu()) { + if (isAndroidT()) { initHook(BypassSignCheckForT.INSTANCE, mPrefsMap.getBoolean("system_framework_core_patch_auth_creak")); } diff --git a/app/src/main/java/com/sevtinge/cemiuiler/module/SystemUI.java b/app/src/main/java/com/sevtinge/cemiuiler/module/SystemUI.java index a13c1bad4..276d4fe97 100644 --- a/app/src/main/java/com/sevtinge/cemiuiler/module/SystemUI.java +++ b/app/src/main/java/com/sevtinge/cemiuiler/module/SystemUI.java @@ -1,5 +1,7 @@ package com.sevtinge.cemiuiler.module; +import static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isAndroidR; + import com.sevtinge.cemiuiler.module.base.BaseModule; import com.sevtinge.cemiuiler.module.systemui.BluetoothRestrict; import com.sevtinge.cemiuiler.module.systemui.ChargeAnimationStyle; @@ -33,7 +35,7 @@ import com.sevtinge.cemiuiler.module.systemui.lockscreen.ClockDisplaySeconds; import com.sevtinge.cemiuiler.module.systemui.lockscreen.ForceClockUseSystemFontsHook; import com.sevtinge.cemiuiler.module.systemui.lockscreen.LockScreenDoubleTapToSleep; -import com.sevtinge.cemiuiler.module.systemui.lockscreen.NoPasswordHook; +import com.sevtinge.cemiuiler.module.systemui.lockscreen.NoPassword; import com.sevtinge.cemiuiler.module.systemui.lockscreen.RemoveCamera; import com.sevtinge.cemiuiler.module.systemui.lockscreen.RemoveSmartScreen; import com.sevtinge.cemiuiler.module.systemui.lockscreen.ScramblePIN; @@ -68,7 +70,6 @@ import com.sevtinge.cemiuiler.module.systemui.statusbar.network.NetworkSpeedStyle; import com.sevtinge.cemiuiler.module.systemui.statusbar.network.StatusBarNoNetSpeedSep; import com.sevtinge.cemiuiler.module.systemui.statusbar.network.s.NetworkSpeedWidth; -import com.sevtinge.cemiuiler.utils.devicesdk.SdkHelper; import java.util.Objects; @@ -120,9 +121,9 @@ public void handleLoadPackage() { // 网速指示器 if (mPrefsMap.getBoolean("system_ui_statusbar_network_speed_enable_custom")) { initHook(NetworkSpeed.INSTANCE); - initHook(NetworkSpeedStyle.INSTANCE); initHook(NetworkSpeedWidth.INSTANCE, mPrefsMap.getInt("system_ui_statusbar_network_speed_fixedcontent_width", 10) > 10); } + initHook(NetworkSpeedStyle.INSTANCE); initHook(NetworkSpeedSpacing.INSTANCE, mPrefsMap.getInt("system_ui_statusbar_network_speed_update_spacing", 3) != 3); initHook(NetworkSpeedSec.INSTANCE, mPrefsMap.getBoolean("system_ui_statusbar_network_speed_sec_unit")); initHook(StatusBarNoNetSpeedSep.INSTANCE, mPrefsMap.getBoolean("system_ui_status_bar_no_netspeed_separator")); @@ -205,11 +206,11 @@ public void handleLoadPackage() { mPrefsMap.getBoolean("system_ui_show_charging_v_more")); initHook(RemoveCamera.INSTANCE, mPrefsMap.getBoolean("system_ui_lock_screen_hide_camera")); initHook(RemoveSmartScreen.INSTANCE, mPrefsMap.getBoolean("system_ui_lock_screen_hide_smart_screen")); - initHook(NoPasswordHook.INSTANCE, mPrefsMap.getBoolean("system_ui_lock_screen_password_free")); + initHook(NoPassword.INSTANCE, mPrefsMap.getBoolean("system_ui_lock_screen_password_free")); initHook(LockScreenDoubleTapToSleep.INSTANCE, mPrefsMap.getBoolean("system_ui_lock_screen_double_lock")); initHook(ForceClockUseSystemFontsHook.INSTANCE, mPrefsMap.getBoolean("system_ui_lock_screen_force_system_fonts")); - if (!SdkHelper.isAndroidR()) { + if (!isAndroidR()) { initHook(AddBlurEffectToLockScreen.INSTANCE); initHook(AddBlurEffectToNotificationView.INSTANCE, mPrefsMap.getBoolean("n_enable")); initHook(BlurButton.INSTANCE, mPrefsMap.getBoolean("system_ui_lock_screen_blur_button")); diff --git a/app/src/main/java/com/sevtinge/cemiuiler/module/base/SystemUIHook.java b/app/src/main/java/com/sevtinge/cemiuiler/module/base/SystemUIHook.java index 8359107d0..32811c55c 100644 --- a/app/src/main/java/com/sevtinge/cemiuiler/module/base/SystemUIHook.java +++ b/app/src/main/java/com/sevtinge/cemiuiler/module/base/SystemUIHook.java @@ -1,8 +1,9 @@ package com.sevtinge.cemiuiler.module.base; -import android.os.Build; -import com.sevtinge.cemiuiler.utils.devicesdk.SdkHelper; +import static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isMoreAndroidVersion; + +import android.os.Build; import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam; @@ -15,7 +16,7 @@ public abstract class SystemUIHook extends BaseHook { public void setLoadPackageParam(LoadPackageParam param) { super.setLoadPackageParam(param); - if (SdkHelper.isAndroidMoreVersion(Build.VERSION_CODES.TIRAMISU)) { + if (isMoreAndroidVersion(Build.VERSION_CODES.TIRAMISU)) { mPluginLoaderClassName = "com.android.systemui.shared.plugins.PluginInstance$Factory"; } else { mPluginLoaderClassName = "com.android.systemui.shared.plugins.PluginManagerImpl"; diff --git a/app/src/main/java/com/sevtinge/cemiuiler/module/securitycenter/BlurSecurity.kt b/app/src/main/java/com/sevtinge/cemiuiler/module/securitycenter/BlurSecurity.kt index fbdc7e97e..194ecbd67 100644 --- a/app/src/main/java/com/sevtinge/cemiuiler/module/securitycenter/BlurSecurity.kt +++ b/app/src/main/java/com/sevtinge/cemiuiler/module/securitycenter/BlurSecurity.kt @@ -45,17 +45,10 @@ object BlurSecurity : BaseHook() { // 不反转颜色的名单ID或类名 // whiteList 不在列表内子元素也会反色 - private val invertColorWhiteList = - arrayOf( - "lv_main", - "second_view" - ) + private val invertColorWhiteList = arrayOf("lv_main", "second_view") // keepList 列表内元素及其子元素不会反色 - private val keepColorList = - arrayOf( - "rv_information" - ) + private val keepColorList = arrayOf("rv_information") override fun init() { val turboLayoutClass = findClassIfExists( @@ -67,9 +60,9 @@ object BlurSecurity : BaseHook() { lateinit var videoBoxViewClass: Class<*> lateinit var videoBoxViewMethodName: String when { - getPackageVersionCode(lpparam) in 40000749..40000750 || getPackageVersionCode(lpparam) == 40000770 || getPackageVersionCode( - lpparam - ) == 40000780 -> { + getPackageVersionCode(lpparam) in 40000749..40000750 || + getPackageVersionCode(lpparam) == 40000770 || + getPackageVersionCode(lpparam) >= 40000780 -> { appVersionCode = 40000749 videoBoxViewClass = findClassIfExists("t7.i") ?: return videoBoxViewMethodName = "i" @@ -77,7 +70,7 @@ object BlurSecurity : BaseHook() { getPackageVersionCode(lpparam) in 40000771..40000776 -> { appVersionCode = 40000771 - videoBoxViewClass = findClassIfExists("r7.m") ?: return + videoBoxViewClass = findClassIfExists("r7.m") ?: findClassIfExists("t7.i") ?: return videoBoxViewMethodName = "j" } @@ -120,12 +113,7 @@ object BlurSecurity : BaseHook() { } view.background = - HookUtils.createBlurDrawable( - view, - blurRadius, - 40, - backgroundColor - ) + HookUtils.createBlurDrawable(view, blurRadius, 40, backgroundColor) } override fun onViewDetachedFromWindow(view: View) { @@ -152,12 +140,7 @@ object BlurSecurity : BaseHook() { } gameContentLayout.background = - HookUtils.createBlurDrawable( - gameContentLayout, - blurRadius, - 40, - backgroundColor - ) + HookUtils.createBlurDrawable(gameContentLayout, blurRadius, 40, backgroundColor) if (shouldInvertColor) { invertViewColor(gameContentLayout) @@ -226,12 +209,7 @@ object BlurSecurity : BaseHook() { } view.background = - HookUtils.createBlurDrawable( - view, - blurRadius, - 40, - backgroundColor - ) + HookUtils.createBlurDrawable(view, blurRadius, 40, backgroundColor) if (shouldInvertColor) { invertViewColor(mainContent) @@ -266,12 +244,7 @@ object BlurSecurity : BaseHook() { } view.background = - HookUtils.createBlurDrawable( - view, - blurRadius, - 40, - backgroundColor - ) + HookUtils.createBlurDrawable(view, blurRadius, 40, backgroundColor) if (shouldInvertColor) { invertViewColor(mainContent) diff --git a/app/src/main/java/com/sevtinge/cemiuiler/module/securitycenter/SecurityCenterDexKit.java b/app/src/main/java/com/sevtinge/cemiuiler/module/securitycenter/SecurityCenterDexKit.java index 8e6fc67d3..bb2877d50 100644 --- a/app/src/main/java/com/sevtinge/cemiuiler/module/securitycenter/SecurityCenterDexKit.java +++ b/app/src/main/java/com/sevtinge/cemiuiler/module/securitycenter/SecurityCenterDexKit.java @@ -47,6 +47,7 @@ public void init() { .addQuery("Macro", List.of("pref_gb_unsupport_macro_apps", "gb_game_gunsight", "com.tencent.tmgp.sgame")) .addQuery("Macro1", List.of("key_macro_toast", "content://com.xiaomi.macro.MacroStatusProvider/game_macro_change")) .addQuery("LabUtils", List.of("mi_lab_ai_clipboard_enable", "mi_lab_blur_location_enable")) + .addQuery("BeautyLight", List.of("pref_support_front_light", "pref_privacy_support_devices")) .matchType(MatchType.CONTAINS) .build() ); diff --git a/app/src/main/java/com/sevtinge/cemiuiler/module/securitycenter/beauty/BeautyLight.java b/app/src/main/java/com/sevtinge/cemiuiler/module/securitycenter/beauty/BeautyLight.java deleted file mode 100644 index ae12daee7..000000000 --- a/app/src/main/java/com/sevtinge/cemiuiler/module/securitycenter/beauty/BeautyLight.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.sevtinge.cemiuiler.module.securitycenter.beauty; - -import static com.sevtinge.cemiuiler.utils.Helpers.getPackageVersionCode; - -import com.sevtinge.cemiuiler.module.base.BaseHook; - -import de.robv.android.xposed.XC_MethodHook; -import de.robv.android.xposed.XC_MethodReplacement; - -public class BeautyLight extends BaseHook { - @Override - public void init() { - int appVersionCode = getPackageVersionCode(lpparam); - if (appVersionCode == 40000749 || appVersionCode == 40000750) { - // hookAllMethods("p5.f", "m", XC_MethodReplacement.returnConstant(true)); - hookAllMethods("p5.f", "G", XC_MethodReplacement.returnConstant(true)); - } else if (appVersionCode == 40000754 || (appVersionCode >= 40000771 && appVersionCode <= 40000779 && appVersionCode != 40000772 && appVersionCode != 40000774 && appVersionCode != 40000777)) { - findAndHookMethod("com.miui.gamebooster.beauty.l", "j", new BaseHook.MethodHook() { - @Override - protected void before(XC_MethodHook.MethodHookParam param) throws Throwable { - param.setResult(true); - } - }); - } else if (appVersionCode == 40000772) { - findAndHookMethod("n5.f", "G", new BaseHook.MethodHook() { - @Override - protected void before(XC_MethodHook.MethodHookParam param) throws Throwable { - param.setResult(true); - } - }); - } else if (appVersionCode == 40000774) { - findAndHookMethod("n5.f", "H", new BaseHook.MethodHook() { - @Override - protected void before(XC_MethodHook.MethodHookParam param) throws Throwable { - param.setResult(true); - } - }); - } else if (appVersionCode == 40000777 || appVersionCode == 40000780) { - findAndHookMethod("p5.f", "H", new BaseHook.MethodHook() { - @Override - protected void before(XC_MethodHook.MethodHookParam param) throws Throwable { - param.setResult(true); - } - }); - } else { - findAndHookMethod("com.miui.gamebooster.utils.o", "c", XC_MethodReplacement.returnConstant(true)); - } - /*findAndHookMethod("com.miui.gamebooster.utils.o", "c", new BaseHook.MethodHook() { - @Override - protected void before(XC_MethodHook.MethodHookParam param) throws Throwable { - param.setResult(true); - } - });*/ - } - -} - diff --git a/app/src/main/java/com/sevtinge/cemiuiler/module/securitycenter/beauty/BeautyLight.kt b/app/src/main/java/com/sevtinge/cemiuiler/module/securitycenter/beauty/BeautyLight.kt new file mode 100644 index 000000000..cd198c4ef --- /dev/null +++ b/app/src/main/java/com/sevtinge/cemiuiler/module/securitycenter/beauty/BeautyLight.kt @@ -0,0 +1,47 @@ +package com.sevtinge.cemiuiler.module.securitycenter.beauty + +import com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook +import com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder +import com.sevtinge.cemiuiler.module.base.BaseHook +import com.sevtinge.cemiuiler.module.securitycenter.SecurityCenterDexKit +import com.sevtinge.cemiuiler.utils.Helpers +import com.sevtinge.cemiuiler.utils.api.isPad +import java.util.Objects + + +object BeautyLight : BaseHook() { + override fun init() { + try { + val appVersionCode = Helpers.getPackageVersionCode(lpparam) + val result = + Objects.requireNonNull(SecurityCenterDexKit.mSecurityCenterResultClassMap["BeautyLight"]) + for (descriptor in result) { + val beautyUtils = descriptor.getClassInstance(lpparam.classLoader) + beautyUtils.methodFinder().first { + if (!isPad()) { + when { + appVersionCode in 40000749..40000750 -> name == "G" + appVersionCode in 40000754..40000756 -> name == "j" + appVersionCode in 40000761..40000762 -> name == "k" + appVersionCode in 40000771..40000772 -> name == "G" + appVersionCode >= 40000774 -> name == "H"// 手机端截止到 7.8.5-20230515 版本 + else -> name == "c" // 未混淆分类 + } + } else { + when { + appVersionCode == 40010749 -> name == "G" + appVersionCode == 40010750 -> name == "j" + appVersionCode in 40010771..40010772 -> name == "G" + appVersionCode >= 40010774 -> name == "H"// 平板端截止到 7.8.5-20230511 版本 + else -> name == "j" // 未混淆分类 + } + } + }.createHook { + returnConstant(true) + } + } + } catch (e: Throwable) { + e.printStackTrace() + } + } +} diff --git a/app/src/main/java/com/sevtinge/cemiuiler/module/securitycenter/beauty/BeautyPrivacy.java b/app/src/main/java/com/sevtinge/cemiuiler/module/securitycenter/beauty/BeautyPrivacy.java deleted file mode 100644 index 62ce870e2..000000000 --- a/app/src/main/java/com/sevtinge/cemiuiler/module/securitycenter/beauty/BeautyPrivacy.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.sevtinge.cemiuiler.module.securitycenter.beauty; - -import static com.sevtinge.cemiuiler.utils.Helpers.getPackageVersionCode; - -import com.sevtinge.cemiuiler.module.base.BaseHook; - -import de.robv.android.xposed.XC_MethodHook; - -public class BeautyPrivacy extends BaseHook { - @Override - public void init() { - int appVersionCode = getPackageVersionCode(lpparam); - if (appVersionCode == 40000749 || appVersionCode == 40000750) { - findAndHookMethod("p5.f", "X", new BaseHook.MethodHook() { - @Override - protected void before(XC_MethodHook.MethodHookParam param) throws Throwable { - param.setResult(true); - } - }); - } else if (appVersionCode == 40000754 || (appVersionCode >= 40000771 && appVersionCode <= 40000779 && appVersionCode != 40000772 && appVersionCode != 40000774 && appVersionCode != 40000777)) { - findAndHookMethod("com.miui.gamebooster.beauty.l", "Q", new BaseHook.MethodHook() { - @Override - protected void before(XC_MethodHook.MethodHookParam param) throws Throwable { - param.setResult(true); - } - }); - } else if (appVersionCode == 40000772) { - findAndHookMethod("n5.f", "G", new BaseHook.MethodHook() { - @Override - protected void before(XC_MethodHook.MethodHookParam param) throws Throwable { - param.setResult(true); - } - }); - } else if (appVersionCode == 40000774) { - findAndHookMethod("n5.f", "Y", new BaseHook.MethodHook() { - @Override - protected void before(XC_MethodHook.MethodHookParam param) throws Throwable { - param.setResult(true); - } - }); - } else if (appVersionCode == 40000777 || appVersionCode == 40000780) { - findAndHookMethod("p5.f", "Y", new BaseHook.MethodHook() { - @Override - protected void before(XC_MethodHook.MethodHookParam param) throws Throwable { - param.setResult(true); - } - }); - } else { - findAndHookMethod("com.miui.gamebooster.beauty.i", "M", new BaseHook.MethodHook() { - @Override - protected void before(XC_MethodHook.MethodHookParam param) throws Throwable { - param.setResult(true); - } - }); - } - } -} - diff --git a/app/src/main/java/com/sevtinge/cemiuiler/module/securitycenter/beauty/BeautyPrivacy.kt b/app/src/main/java/com/sevtinge/cemiuiler/module/securitycenter/beauty/BeautyPrivacy.kt new file mode 100644 index 000000000..adebaa025 --- /dev/null +++ b/app/src/main/java/com/sevtinge/cemiuiler/module/securitycenter/beauty/BeautyPrivacy.kt @@ -0,0 +1,45 @@ +package com.sevtinge.cemiuiler.module.securitycenter.beauty + +import com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook +import com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder +import com.sevtinge.cemiuiler.module.base.BaseHook +import com.sevtinge.cemiuiler.module.securitycenter.SecurityCenterDexKit +import com.sevtinge.cemiuiler.utils.Helpers +import com.sevtinge.cemiuiler.utils.api.isPad +import java.util.Objects + +object BeautyPrivacy : BaseHook() { + override fun init() { + try { + val appVersionCode = Helpers.getPackageVersionCode(lpparam) + val result = + Objects.requireNonNull(SecurityCenterDexKit.mSecurityCenterResultClassMap["BeautyLight"]) + for (descriptor in result) { + val beautyPrivacyUtils = descriptor.getClassInstance(lpparam.classLoader) + beautyPrivacyUtils.methodFinder().first { + if (!isPad()) { + when { + appVersionCode in 40000749..40000750 -> name == "X" + appVersionCode in 40000754..40000756 -> name == "Q" + appVersionCode in 40000761..40000762 -> name == "R" + appVersionCode in 40000771..40000772 -> name == "X" + appVersionCode >= 40000774 -> name == "Y"// 手机端截止到 7.8.5-20230515 版本 + else -> name == "M" // 未混淆分类 + } + } else { + when { + appVersionCode == 40010749 -> name == "f" + appVersionCode == 40010750 -> name == "l" + appVersionCode >= 40010771 -> name == "f"// 平板端截止到 7.8.5-20230511 版本 + else -> name == "l" // 未混淆分类 + } + } + }.createHook { + returnConstant(true) + } + } + } catch (e: Throwable) { + e.printStackTrace() + } + } +} diff --git a/app/src/main/java/com/sevtinge/cemiuiler/module/systemframework/PackagePermissions.java b/app/src/main/java/com/sevtinge/cemiuiler/module/systemframework/PackagePermissions.java index d57289f75..69951ae29 100644 --- a/app/src/main/java/com/sevtinge/cemiuiler/module/systemframework/PackagePermissions.java +++ b/app/src/main/java/com/sevtinge/cemiuiler/module/systemframework/PackagePermissions.java @@ -1,12 +1,14 @@ package com.sevtinge.cemiuiler.module.systemframework; +import static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isMoreAndroidVersion; + import android.content.pm.ApplicationInfo; import android.content.pm.ResolveInfo; +import android.os.Build; import com.sevtinge.cemiuiler.module.base.BaseHook; import com.sevtinge.cemiuiler.utils.Helpers; import com.sevtinge.cemiuiler.utils.LogUtils; -import com.sevtinge.cemiuiler.utils.devicesdk.SdkHelper; import java.util.ArrayList; import java.util.Arrays; @@ -22,7 +24,7 @@ public void init() { systemPackages.add(Helpers.mAppModulePkg); // Allow signature level permissions for module - String PMSCls = SdkHelper.isAndroidTiramisu() ? "com.android.server.pm.permission.PermissionManagerServiceImpl" : "com.android.server.pm.permission.PermissionManagerService"; + String PMSCls = isMoreAndroidVersion(Build.VERSION_CODES.TIRAMISU) ? "com.android.server.pm.permission.PermissionManagerServiceImpl" : "com.android.server.pm.permission.PermissionManagerService"; // Allow signature level permissions for module hookAllMethods(PMSCls, "shouldGrantPermissionBySignature", new MethodHook() { @@ -44,7 +46,7 @@ protected void before(MethodHookParam param) { // Make module appear as system app - String ActQueryService = SdkHelper.isAndroidTiramisu() ? "com.android.server.pm.ComputerEngine" : "com.android.server.pm.PackageManagerService"; + String ActQueryService = isMoreAndroidVersion(Build.VERSION_CODES.TIRAMISU) ? "com.android.server.pm.ComputerEngine" : "com.android.server.pm.PackageManagerService"; hookAllMethods(ActQueryService, "queryIntentActivitiesInternal", new MethodHook() { @Override @SuppressWarnings("unchecked") diff --git a/app/src/main/java/com/sevtinge/cemiuiler/module/systemframework/VolumeSeparateControl.java b/app/src/main/java/com/sevtinge/cemiuiler/module/systemframework/VolumeSeparateControl.java index 8e2e0ed64..b10837a45 100644 --- a/app/src/main/java/com/sevtinge/cemiuiler/module/systemframework/VolumeSeparateControl.java +++ b/app/src/main/java/com/sevtinge/cemiuiler/module/systemframework/VolumeSeparateControl.java @@ -1,10 +1,13 @@ package com.sevtinge.cemiuiler.module.systemframework; +import static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isAndroidT; +import static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isMoreAndroidVersion; + +import android.os.Build; import android.provider.Settings; import android.util.SparseIntArray; import com.sevtinge.cemiuiler.module.base.BaseHook; -import com.sevtinge.cemiuiler.utils.devicesdk.SdkHelper; import java.util.Set; @@ -22,11 +25,14 @@ public void init() { findAndHookMethod(mAudioService, "updateStreamVolumeAlias", boolean.class, String.class, new MethodHook() { @Override protected void after(MethodHookParam param) throws Throwable { - int[] mStreamVolumeAlias = (int[]) (SdkHelper.isAndroidTiramisu() ? XposedHelpers.getStaticObjectField(mAudioService, "mStreamVolumeAlias") : XposedHelpers.getObjectField(param.thisObject, "mStreamVolumeAlias")); + int[] mStreamVolumeAlias = + (int[]) (isMoreAndroidVersion(Build.VERSION_CODES.TIRAMISU) ? + XposedHelpers.getStaticObjectField(mAudioService, "mStreamVolumeAlias") : + XposedHelpers.getObjectField(param.thisObject, "mStreamVolumeAlias")); mStreamVolumeAlias[1] = 1; mStreamVolumeAlias[5] = 5; - if (SdkHelper.isAndroidTiramisu()) { + if (isAndroidT()) { XposedHelpers.setStaticObjectField(mAudioService, "mStreamVolumeAlias", mStreamVolumeAlias); } else { XposedHelpers.setObjectField(param.thisObject, "mStreamVolumeAlias", mStreamVolumeAlias); diff --git a/app/src/main/java/com/sevtinge/cemiuiler/module/systemui/StatusBarActions.java b/app/src/main/java/com/sevtinge/cemiuiler/module/systemui/StatusBarActions.java index 35a97b76c..99f7aa3d7 100644 --- a/app/src/main/java/com/sevtinge/cemiuiler/module/systemui/StatusBarActions.java +++ b/app/src/main/java/com/sevtinge/cemiuiler/module/systemui/StatusBarActions.java @@ -1,5 +1,7 @@ package com.sevtinge.cemiuiler.module.systemui; +import static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isMoreAndroidVersion; + import android.annotation.SuppressLint; import android.content.BroadcastReceiver; import android.content.Context; @@ -7,13 +9,13 @@ import android.content.IntentFilter; import android.media.AudioManager; import android.os.Binder; +import android.os.Build; import android.os.Handler; import android.os.Process; import android.view.View; import com.sevtinge.cemiuiler.module.base.BaseHook; import com.sevtinge.cemiuiler.utils.Helpers; -import com.sevtinge.cemiuiler.utils.devicesdk.SdkHelper; import de.robv.android.xposed.XposedBridge; import de.robv.android.xposed.XposedHelpers; @@ -26,7 +28,7 @@ public class StatusBarActions extends BaseHook { @Override public void init() { - if (SdkHelper.isAndroidTiramisu()) { + if (isMoreAndroidVersion(Build.VERSION_CODES.TIRAMISU)) { mStatusBarClass = findClassIfExists("com.android.systemui.statusbar.phone.CentralSurfacesImpl"); } else { mStatusBarClass = findClassIfExists("com.android.systemui.statusbar.phone.StatusBar"); @@ -41,7 +43,7 @@ public void setupStatusBarAction() { findAndHookMethod(mStatusBarClass, "start", new MethodHook() { @Override - protected void after(MethodHookParam param) throws Throwable { + protected void after(MethodHookParam param) { mStatusBar = param.thisObject; Context mStatusBarContext = (Context) XposedHelpers.getObjectField(param.thisObject, "mContext"); IntentFilter intentfilter = new IntentFilter(); @@ -76,24 +78,21 @@ public void onReceive(Context context, Intent intent) { if (action == null) return; switch (action) { - case ACTION_PREFIX + "ClearMemory": + case ACTION_PREFIX + "ClearMemory" -> { Intent clearIntent = new Intent("com.android.systemui.taskmanager.Clear"); clearIntent.putExtra("show_toast", true); // clearIntent.putExtra("clean_type", -1); context.sendBroadcast(clearIntent); - break; - - case ACTION_PREFIX + "OpenRecents": + } + case ACTION_PREFIX + "OpenRecents" -> { Intent recentIntent = new Intent("SYSTEM_ACTION_RECENTS"); recentIntent.setPackage("com.android.systemui"); context.sendBroadcast(recentIntent); - break; + } - case ACTION_PREFIX + "OpenVolumeDialog": - OpenVolumeDialogs(context); - break; + case ACTION_PREFIX + "OpenVolumeDialog" -> OpenVolumeDialogs(context); - case ACTION_PREFIX + "OpenNotificationCenter": + case ACTION_PREFIX + "OpenNotificationCenter" -> { try { Object mNotificationPanel = XposedHelpers.getObjectField(mStatusBar, "mNotificationPanel"); boolean mPanelExpanded = (boolean) XposedHelpers.getObjectField(mNotificationPanel, "mPanelExpanded"); @@ -116,7 +115,7 @@ public void onReceive(Context context, Intent intent) { XposedHelpers.callMethod(context.getSystemService("statusbar"), "expandNotificationsPanel"); Binder.restoreCallingIdentity(token); } - break; + } } } }; @@ -171,7 +170,7 @@ public void setupRestartSystemUIAction() { if (mStatusBarClass == null) return; findAndHookMethod(mStatusBarClass, "start", new MethodHook() { @Override - protected void after(MethodHookParam param) throws Throwable { + protected void after(MethodHookParam param) { mStatusBar = param.thisObject; Context mStatusBarContext = (Context) XposedHelpers.getObjectField(param.thisObject, "mContext"); IntentFilter intentfilter = new IntentFilter(); diff --git a/app/src/main/java/com/sevtinge/cemiuiler/module/systemui/controlcenter/CCGrid.java b/app/src/main/java/com/sevtinge/cemiuiler/module/systemui/controlcenter/CCGrid.java index f28b31028..40b9ae128 100644 --- a/app/src/main/java/com/sevtinge/cemiuiler/module/systemui/controlcenter/CCGrid.java +++ b/app/src/main/java/com/sevtinge/cemiuiler/module/systemui/controlcenter/CCGrid.java @@ -1,5 +1,7 @@ package com.sevtinge.cemiuiler.module.systemui.controlcenter; +import static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isMoreAndroidVersion; + import android.annotation.SuppressLint; import android.content.Context; import android.content.pm.ApplicationInfo; @@ -14,7 +16,6 @@ import com.sevtinge.cemiuiler.R; import com.sevtinge.cemiuiler.module.base.BaseHook; import com.sevtinge.cemiuiler.utils.Helpers; -import com.sevtinge.cemiuiler.utils.devicesdk.SdkHelper; import java.util.ArrayList; import java.util.Iterator; @@ -59,7 +60,7 @@ protected void after(MethodHookParam param) throws Throwable { } }); - String pluginLoaderClass = SdkHelper.isAndroidMoreVersion(Build.VERSION_CODES.TIRAMISU) ? "com.android.systemui.shared.plugins.PluginInstance$Factory" : "com.android.systemui.shared.plugins.PluginManagerImpl"; + String pluginLoaderClass = isMoreAndroidVersion(Build.VERSION_CODES.TIRAMISU) ? "com.android.systemui.shared.plugins.PluginInstance$Factory" : "com.android.systemui.shared.plugins.PluginManagerImpl"; Helpers.hookAllMethods(pluginLoaderClass, lpparam.classLoader, "getClassLoader", new MethodHook() { private boolean isHooked = false; diff --git a/app/src/main/java/com/sevtinge/cemiuiler/module/systemui/controlcenter/QSFiveGTile.java b/app/src/main/java/com/sevtinge/cemiuiler/module/systemui/controlcenter/QSFiveGTile.java index 0097a97e1..8b9ccce97 100644 --- a/app/src/main/java/com/sevtinge/cemiuiler/module/systemui/controlcenter/QSFiveGTile.java +++ b/app/src/main/java/com/sevtinge/cemiuiler/module/systemui/controlcenter/QSFiveGTile.java @@ -1,10 +1,14 @@ package com.sevtinge.cemiuiler.module.systemui.controlcenter; +import static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isMoreAndroidVersion; + +import android.annotation.SuppressLint; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.res.Resources; import android.database.ContentObserver; +import android.os.Build; import android.os.Handler; import android.provider.Settings; import android.view.View; @@ -13,7 +17,6 @@ import com.sevtinge.cemiuiler.R; import com.sevtinge.cemiuiler.module.base.BaseHook; import com.sevtinge.cemiuiler.utils.Helpers; -import com.sevtinge.cemiuiler.utils.devicesdk.SdkHelper; import de.robv.android.xposed.XposedHelpers; import miui.telephony.TelephonyManager; @@ -29,6 +32,7 @@ public class QSFiveGTile extends BaseHook { String mNfcTileClsName; @Override + @SuppressLint("DiscouragedApi") public void init() { final boolean[] isListened = {false}; @@ -36,10 +40,10 @@ public void init() { int mFiveGIconResId = mResHook.addResource("ic_control_center_5g_toggle_on", R.drawable.ic_control_center_5g_toggle_on); int mFiveGIconOffResId = mResHook.addResource("ic_control_center_5g_toggle_off", R.drawable.ic_control_center_5g_toggle_off); - mQSFactoryClsName = SdkHelper.ATLEAST_T ? "com.android.systemui.qs.tileimpl.MiuiQSFactory" : + mQSFactoryClsName = isMoreAndroidVersion(Build.VERSION_CODES.TIRAMISU) ? "com.android.systemui.qs.tileimpl.MiuiQSFactory" : "com.android.systemui.qs.tileimpl.QSFactoryImpl"; - mNfcTileClsName = SdkHelper.ATLEAST_T ? "com.android.systemui.qs.tiles.MiuiNfcTile" : + mNfcTileClsName = isMoreAndroidVersion(Build.VERSION_CODES.TIRAMISU) ? "com.android.systemui.qs.tiles.MiuiNfcTile" : "com.android.systemui.qs.tiles.NfcTile"; mQSFactory = findClassIfExists(mQSFactoryClsName); @@ -66,7 +70,7 @@ protected void after(MethodHookParam param) throws Throwable { protected void before(MethodHookParam param) throws Throwable { String tileName = (String) param.args[0]; if (tileName.startsWith("custom_")) { - String nfcField = SdkHelper.ATLEAST_T ? "nfcTileProvider" : "mNfcTileProvider"; + String nfcField = isMoreAndroidVersion(Build.VERSION_CODES.TIRAMISU) ? "nfcTileProvider" : "mNfcTileProvider"; Object provider = XposedHelpers.getObjectField(param.thisObject, nfcField); Object tile = XposedHelpers.callMethod(provider, "get"); XposedHelpers.setAdditionalInstanceField(tile, "customName", tileName); diff --git a/app/src/main/java/com/sevtinge/cemiuiler/module/systemui/lockscreen/ForceClockUseSystemFontsHook.kt b/app/src/main/java/com/sevtinge/cemiuiler/module/systemui/lockscreen/ForceClockUseSystemFontsHook.kt index d066ad47f..cac2be3bb 100644 --- a/app/src/main/java/com/sevtinge/cemiuiler/module/systemui/lockscreen/ForceClockUseSystemFontsHook.kt +++ b/app/src/main/java/com/sevtinge/cemiuiler/module/systemui/lockscreen/ForceClockUseSystemFontsHook.kt @@ -2,37 +2,33 @@ package com.sevtinge.cemiuiler.module.systemui.lockscreen import android.graphics.Typeface import android.widget.TextView +import com.github.kyuubiran.ezxhelper.ClassUtils.loadClass +import com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHooks +import com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder import com.sevtinge.cemiuiler.module.base.BaseHook -import com.sevtinge.cemiuiler.utils.Helpers -import de.robv.android.xposed.XposedHelpers +import com.sevtinge.cemiuiler.utils.getObjectFieldAs object ForceClockUseSystemFontsHook : BaseHook() { override fun init() { - Helpers.findAndHookMethod( - "com.miui.clock.MiuiBaseClock", lpparam.classLoader, - "updateViewsTextSize", - object : MethodHook() { - @Throws(Throwable::class) - override fun after(param: MethodHookParam) { - val mTimeText = - XposedHelpers.getObjectField(param.thisObject, "mTimeText") as TextView - mTimeText.typeface = Typeface.DEFAULT - } - }) - Helpers.findAndHookMethod( - "com.miui.clock.MiuiLeftTopLargeClock", lpparam.classLoader, - "onLanguageChanged", - String::class.java, - object : MethodHook() { - @Throws(Throwable::class) - override fun after(param: MethodHookParam) { - val mTimeText = XposedHelpers.getObjectField( - param.thisObject, - "mCurrentDateLarge" - ) as TextView - mTimeText.typeface = Typeface.DEFAULT - } - }) + loadClass("com.miui.clock.MiuiBaseClock").methodFinder().filter { + name == "updateViewsTextSize" + }.toList().createHooks { + after { param -> + val mTimeText = + param.thisObject.getObjectFieldAs("mTimeText") + mTimeText.typeface = Typeface.DEFAULT + } + } + + loadClass("com.miui.clock.MiuiLeftTopLargeClock").methodFinder().filter { + name == "onLanguageChanged" + }.toList().createHooks { + after { param -> + val mTimeText = + param.thisObject.getObjectFieldAs("mCurrentDateLarge") + mTimeText.typeface = Typeface.DEFAULT + } + } } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/sevtinge/cemiuiler/module/systemui/lockscreen/LockScreenDoubleTapToSleep.kt b/app/src/main/java/com/sevtinge/cemiuiler/module/systemui/lockscreen/LockScreenDoubleTapToSleep.kt index a75d9dfac..2cf063215 100644 --- a/app/src/main/java/com/sevtinge/cemiuiler/module/systemui/lockscreen/LockScreenDoubleTapToSleep.kt +++ b/app/src/main/java/com/sevtinge/cemiuiler/module/systemui/lockscreen/LockScreenDoubleTapToSleep.kt @@ -1,6 +1,5 @@ package com.sevtinge.cemiuiler.module.systemui.lockscreen -import android.app.KeyguardManager import android.content.Context import android.os.SystemClock import android.view.MotionEvent @@ -10,6 +9,8 @@ import com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook import com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder import com.sevtinge.cemiuiler.module.base.BaseHook import de.robv.android.xposed.XposedHelpers +import de.robv.android.xposed.XposedHelpers.getAdditionalInstanceField +import de.robv.android.xposed.XposedHelpers.setAdditionalInstanceField object LockScreenDoubleTapToSleep : BaseHook() { override fun init() { @@ -18,18 +19,18 @@ object LockScreenDoubleTapToSleep : BaseHook() { }.createHook { before { val view = it.thisObject as View - XposedHelpers.setAdditionalInstanceField(view, "currentTouchTime", 0L) - XposedHelpers.setAdditionalInstanceField(view, "currentTouchX", 0f) - XposedHelpers.setAdditionalInstanceField(view, "currentTouchY", 0f) + setAdditionalInstanceField(view, "currentTouchTime", 0L) + setAdditionalInstanceField(view, "currentTouchX", 0f) + setAdditionalInstanceField(view, "currentTouchY", 0f) view.setOnTouchListener(View.OnTouchListener { v, event -> if (event.action != MotionEvent.ACTION_DOWN) return@OnTouchListener false var currentTouchTime = - XposedHelpers.getAdditionalInstanceField(view, "currentTouchTime") as Long + getAdditionalInstanceField(view, "currentTouchTime") as Long var currentTouchX = - XposedHelpers.getAdditionalInstanceField(view, "currentTouchX") as Float + getAdditionalInstanceField(view, "currentTouchX") as Float var currentTouchY = - XposedHelpers.getAdditionalInstanceField(view, "currentTouchY") as Float + getAdditionalInstanceField(view, "currentTouchY") as Float val lastTouchTime = currentTouchTime val lastTouchX = currentTouchX val lastTouchY = currentTouchY @@ -42,27 +43,23 @@ object LockScreenDoubleTapToSleep : BaseHook() { && kotlin.math.abs(currentTouchX - lastTouchX) < 100f && kotlin.math.abs(currentTouchY - lastTouchY) < 100f ) { - val keyguardMgr = - v.context.getSystemService(Context.KEYGUARD_SERVICE) as KeyguardManager - - if (keyguardMgr.isKeyguardLocked) { - XposedHelpers.callMethod( - v.context.getSystemService(Context.POWER_SERVICE), - "goToSleep", - SystemClock.uptimeMillis() - ) - } + XposedHelpers.callMethod( + v.context.getSystemService(Context.POWER_SERVICE), + "goToSleep", + SystemClock.uptimeMillis() + ) currentTouchTime = 0L currentTouchX = 0f currentTouchY = 0f } - XposedHelpers.setAdditionalInstanceField( + + setAdditionalInstanceField( view, "currentTouchTime", currentTouchTime ) - XposedHelpers.setAdditionalInstanceField(view, "currentTouchX", currentTouchX) - XposedHelpers.setAdditionalInstanceField(view, "currentTouchY", currentTouchY) + setAdditionalInstanceField(view, "currentTouchX", currentTouchX) + setAdditionalInstanceField(view, "currentTouchY", currentTouchY) v.performClick() false }) @@ -70,4 +67,4 @@ object LockScreenDoubleTapToSleep : BaseHook() { } } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/sevtinge/cemiuiler/module/systemui/lockscreen/NoPassword.kt b/app/src/main/java/com/sevtinge/cemiuiler/module/systemui/lockscreen/NoPassword.kt index fd9efa7ee..e62fa5f83 100644 --- a/app/src/main/java/com/sevtinge/cemiuiler/module/systemui/lockscreen/NoPassword.kt +++ b/app/src/main/java/com/sevtinge/cemiuiler/module/systemui/lockscreen/NoPassword.kt @@ -5,7 +5,7 @@ import com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook import com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder import com.sevtinge.cemiuiler.module.base.BaseHook -object NoPasswordHook : BaseHook() { +object NoPassword : BaseHook() { override fun init() { loadClass("com.android.internal.widget.LockPatternUtils\$StrongAuthTracker").methodFinder().first { name == "isBiometricAllowedForUser" @@ -24,4 +24,4 @@ object NoPasswordHook : BaseHook() { } } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/sevtinge/cemiuiler/module/systemui/plugin/PluginHelper.java b/app/src/main/java/com/sevtinge/cemiuiler/module/systemui/plugin/PluginHelper.java index 520669614..95004b114 100644 --- a/app/src/main/java/com/sevtinge/cemiuiler/module/systemui/plugin/PluginHelper.java +++ b/app/src/main/java/com/sevtinge/cemiuiler/module/systemui/plugin/PluginHelper.java @@ -1,8 +1,9 @@ package com.sevtinge.cemiuiler.module.systemui.plugin; -import static com.sevtinge.cemiuiler.utils.devicesdk.SdkHelper.ATLEAST_T; +import static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isMoreAndroidVersion; import android.content.pm.ApplicationInfo; +import android.os.Build; import com.sevtinge.cemiuiler.module.base.BaseHook; @@ -12,7 +13,7 @@ public class PluginHelper extends BaseHook { @Override public void init() { - String pluginLoaderClass = ATLEAST_T ? "com.android.systemui.shared.plugins.PluginInstance$Factory" : "com.android.systemui.shared.plugins.PluginManagerImpl"; + String pluginLoaderClass = isMoreAndroidVersion(Build.VERSION_CODES.TIRAMISU) ? "com.android.systemui.shared.plugins.PluginInstance$Factory" : "com.android.systemui.shared.plugins.PluginManagerImpl"; hookAllMethods(pluginLoaderClass, "getClassLoader", new MethodHook() { private boolean isHooked = false; diff --git a/app/src/main/java/com/sevtinge/cemiuiler/module/thememanager/ThemeCrackNew.kt b/app/src/main/java/com/sevtinge/cemiuiler/module/thememanager/ThemeCrackNew.kt index 020be6b80..0fb4d04ad 100644 --- a/app/src/main/java/com/sevtinge/cemiuiler/module/thememanager/ThemeCrackNew.kt +++ b/app/src/main/java/com/sevtinge/cemiuiler/module/thememanager/ThemeCrackNew.kt @@ -39,6 +39,7 @@ class ThemeCrackNew : BaseHook() { it.result = false } } + val drmResult = mThemeManagerResultMethodsMap["DrmResult"]!! for (descriptor in drmResult) { try { @@ -73,15 +74,12 @@ class ThemeCrackNew : BaseHook() { largeIconMethod.createHook { before { val resource = (it.thisObject.javaClass).fieldFinder().first { - type == loadClass( - "com.android.thememanager.basemodule.resource.model.Resource", - lpparam.classLoader - ) + type == + loadClass("com.android.thememanager.basemodule.resource.model.Resource", lpparam.classLoader) } val productId = it.thisObject.getObjectField(resource.name) - ?.callMethod("getProductId") - .toString() + ?.callMethod("getProductId").toString() val strPath = "/storage/emulated/0/Android/data/com.android.thememanager/files/MIUI/theme/.data/rights/theme/${productId}-largeicons.mra" val file = File(strPath) diff --git a/app/src/main/java/com/sevtinge/cemiuiler/module/thememanager/ThemeManagerDexKit.java b/app/src/main/java/com/sevtinge/cemiuiler/module/thememanager/ThemeManagerDexKit.java index 1075a66b0..427a5ebb1 100644 --- a/app/src/main/java/com/sevtinge/cemiuiler/module/thememanager/ThemeManagerDexKit.java +++ b/app/src/main/java/com/sevtinge/cemiuiler/module/thememanager/ThemeManagerDexKit.java @@ -26,8 +26,10 @@ public void init() { mThemeManagerResultMethodsMap = bridge.batchFindMethodsUsingStrings( BatchFindArgs.builder() - .addQuery("DrmResult", List.of("theme", "ThemeManagerTag", "/system")) - .addQuery("LargeIcon", List.of("apply failed", "/data/system/theme/large_icons/", "default_large_icon_product_id")) + .addQuery("DrmResult", List.of("theme", "ThemeManagerTag", "/system", "check rights isLegal:")) + .addQuery("LargeIcon", List.of( + "apply failed", "/data/system/theme/large_icons/", "default_large_icon_product_id", "largeicons", "relativePackageList is empty" + )) .matchType(MatchType.CONTAINS) .build() ); diff --git a/app/src/main/java/com/sevtinge/cemiuiler/module/various/NoAccessDeviceLogsRequest.kt b/app/src/main/java/com/sevtinge/cemiuiler/module/various/NoAccessDeviceLogsRequest.kt index b84ce7c5e..7e9b91957 100644 --- a/app/src/main/java/com/sevtinge/cemiuiler/module/various/NoAccessDeviceLogsRequest.kt +++ b/app/src/main/java/com/sevtinge/cemiuiler/module/various/NoAccessDeviceLogsRequest.kt @@ -1,21 +1,25 @@ package com.sevtinge.cemiuiler.module.various +import com.github.kyuubiran.ezxhelper.ClassUtils.loadClass +import com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHooks +import com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder import com.sevtinge.cemiuiler.module.base.BaseHook -import com.sevtinge.cemiuiler.utils.Helpers import de.robv.android.xposed.XposedHelpers object NoAccessDeviceLogsRequest : BaseHook() { override fun init() { - Helpers.hookAllMethods( - "com.android.server.logcat.LogcatManagerService", - lpparam.classLoader, - "onLogAccessRequested", - object : MethodHook() { - override fun before(param: MethodHookParam) { + try { + loadClass("com.android.server.logcat.LogcatManagerService").methodFinder().filter { + name == "onLogAccessRequested" + }.toList().createHooks { + before { param -> XposedHelpers.callMethod(param.thisObject, "declineRequest", param.args[0]) param.result = null } - }) + } + } catch (t: Throwable) { + logE(t) + } } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/sevtinge/cemiuiler/ui/base/BaseSettingsActivity.java b/app/src/main/java/com/sevtinge/cemiuiler/ui/base/BaseSettingsActivity.java index fd8a31af0..2a4bb32d3 100644 --- a/app/src/main/java/com/sevtinge/cemiuiler/ui/base/BaseSettingsActivity.java +++ b/app/src/main/java/com/sevtinge/cemiuiler/ui/base/BaseSettingsActivity.java @@ -95,7 +95,7 @@ public void showRestartDialog(String appLabel, String packagename) { public void showRestartDialog(boolean isRestartSystem, String appLabel, String packagename) { new AlertDialog.Builder(this) .setCancelable(false) - .setTitle(getResources().getString(R.string.soft_reboot) + appLabel) + .setTitle(getResources().getString(R.string.soft_reboot) + " " + appLabel) .setMessage(getResources().getString(R.string.restart_app_desc1) + appLabel + getResources().getString(R.string.restart_app_desc2)) .setHapticFeedbackEnabled(true) .setPositiveButton(android.R.string.ok, (dialog, which) -> doRestart(packagename, isRestartSystem)) diff --git a/app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/MainFragment.java b/app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/MainFragment.java index fcef35ab1..770c800df 100644 --- a/app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/MainFragment.java +++ b/app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/MainFragment.java @@ -1,8 +1,10 @@ package com.sevtinge.cemiuiler.ui.fragment; +import static com.sevtinge.cemiuiler.utils.api.VoyagerApisKt.isPad; +import static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isAndroidR; + import com.sevtinge.cemiuiler.R; import com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment; -import com.sevtinge.cemiuiler.utils.devicesdk.SdkHelper; import moralnorm.preference.Preference; @@ -10,6 +12,8 @@ public class MainFragment extends SettingsPreferenceFragment { Preference mPowerSetting; Preference mMTB; + Preference mSecurityCenter; + Preference mSecurityCenterPad; @Override public int getContentResId() { @@ -20,8 +24,13 @@ public int getContentResId() { public void initPrefs() { mPowerSetting = findPreference("prefs_key_powerkeeper"); mMTB = findPreference("prefs_key_mtb"); + mSecurityCenter = findPreference("prefs_key_security_center"); + mSecurityCenterPad = findPreference("prefs_key_security_center_pad"); + + mPowerSetting.setVisible(!isAndroidR()); + mMTB.setVisible(!isAndroidR()); - mPowerSetting.setVisible(!SdkHelper.isAndroidR()); - mMTB.setVisible(!SdkHelper.isAndroidR()); + mSecurityCenter.setVisible(!isPad()); + mSecurityCenterPad.setVisible(isPad()); } } diff --git a/app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/SystemSettingsFragment.java b/app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/SystemSettingsFragment.java index 02550aed6..53448456f 100644 --- a/app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/SystemSettingsFragment.java +++ b/app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/SystemSettingsFragment.java @@ -1,11 +1,13 @@ package com.sevtinge.cemiuiler.ui.fragment; +import static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isAndroidR; +import static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isMoreMiuiVersion; + import android.view.View; import com.sevtinge.cemiuiler.R; import com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity; import com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment; -import com.sevtinge.cemiuiler.utils.devicesdk.SdkHelper; import moralnorm.preference.PreferenceCategory; import moralnorm.preference.SwitchPreference; @@ -33,8 +35,8 @@ public void initPrefs() { mHighMode = findPreference("prefs_key_system_settings_develop_speed"); mAreaScreenshot = findPreference("prefs_key_system_settings_area_screenshot"); mKnuckleFunction = findPreference("prefs_key_system_settings_knuckle_function"); - mHighMode.setVisible(!SdkHelper.isAndroidR()); - mAreaScreenshot.setVisible(SdkHelper.isAndroidR()); - mKnuckleFunction.setVisible(SdkHelper.PROP_MIUI_VERSION_CODE >= 13); + mHighMode.setVisible(!isAndroidR()); + mAreaScreenshot.setVisible(isAndroidR()); + mKnuckleFunction.setVisible(isMoreMiuiVersion(13f)); } } diff --git a/app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/ThemeManagerFragment.java b/app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/ThemeManagerFragment.java index f81928a7c..ac7440e5b 100644 --- a/app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/ThemeManagerFragment.java +++ b/app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/ThemeManagerFragment.java @@ -1,11 +1,12 @@ package com.sevtinge.cemiuiler.ui.fragment; +import static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isMoreMiuiVersion; + import android.view.View; import com.sevtinge.cemiuiler.R; import com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity; import com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment; -import com.sevtinge.cemiuiler.utils.devicesdk.SdkHelper; import moralnorm.preference.PreferenceCategory; import moralnorm.preference.SwitchPreference; @@ -34,7 +35,7 @@ public void initPrefs() { mVersionCodeModifyPreferenceCat = findPreference("prefs_key_theme_manager_version_code_modify_cat"); mVersionCodeModifyPreference = findPreference("prefs_key_theme_manager_version_code_modify"); - if (SdkHelper.PROP_MIUI_VERSION_CODE <= 13) { + if (!isMoreMiuiVersion(13f)) { mVersionCodeModifyPreferenceCat.setVisible(true); } else { mVersionCodeModifyPreferenceCat.setVisible(false); diff --git a/app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/VariousFragment.java b/app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/VariousFragment.java index d381675a5..7d9f09db6 100644 --- a/app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/VariousFragment.java +++ b/app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/VariousFragment.java @@ -1,10 +1,13 @@ package com.sevtinge.cemiuiler.ui.fragment; +import static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isAndroidT; +import static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isMoreAndroidVersion; +import static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isMoreMiuiVersion; + import android.os.Build; import com.sevtinge.cemiuiler.R; import com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment; -import com.sevtinge.cemiuiler.utils.devicesdk.SdkHelper; import moralnorm.preference.SwitchPreference; @@ -23,8 +26,8 @@ public void initPrefs() { mDisableBluetoothRestrict = findPreference("prefs_key_various_disable_bluetooth_restrict"); mDisableDeviceLog = findPreference("prefs_key_various_disable_access_device_logs"); - mDisableBluetoothRestrict.setVisible(SdkHelper.IS_MIUI_14 || Build.VERSION.SDK_INT >= Build.VERSION_CODES.S); - mDisableDeviceLog.setVisible(SdkHelper.isAndroidTiramisu()); + mDisableBluetoothRestrict.setVisible(isMoreMiuiVersion(14f) && isMoreAndroidVersion(Build.VERSION_CODES.S)); + mDisableDeviceLog.setVisible(isAndroidT()); mDisableBluetoothRestrict.setOnPreferenceChangeListener((preference, o) -> true); mDisableDeviceLog.setOnPreferenceChangeListener((preference, o) -> true); diff --git a/app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/framework/FreeFormSettings.java b/app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/framework/FreeFormSettings.java index b7b834e0f..6987e54ed 100644 --- a/app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/framework/FreeFormSettings.java +++ b/app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/framework/FreeFormSettings.java @@ -1,11 +1,13 @@ package com.sevtinge.cemiuiler.ui.fragment.framework; +import static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isAndroidR; +import static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isMoreMiuiVersion; + import android.view.View; import com.sevtinge.cemiuiler.R; import com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity; import com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment; -import com.sevtinge.cemiuiler.utils.devicesdk.SdkHelper; import moralnorm.preference.PreferenceCategory; import moralnorm.preference.SwitchPreference; @@ -30,7 +32,7 @@ public void initPrefs() { mMoreFreeForm = findPreference("prefs_key_system_framework_freeform_count"); mSmallFreeForm = findPreference("prefs_key_system_framework_freeform_bubble_title"); - mMoreFreeForm.setVisible(SdkHelper.PROP_MIUI_VERSION_CODE >= 13); - mSmallFreeForm.setVisible(!SdkHelper.isAndroidR()); + mMoreFreeForm.setVisible(isMoreMiuiVersion(13f)); + mSmallFreeForm.setVisible(!isAndroidR()); } } diff --git a/app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/framework/NetworkSettings.java b/app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/framework/NetworkSettings.java index d333ce685..66a4d0023 100644 --- a/app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/framework/NetworkSettings.java +++ b/app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/framework/NetworkSettings.java @@ -1,6 +1,9 @@ package com.sevtinge.cemiuiler.ui.fragment.framework; +import android.view.View; + import com.sevtinge.cemiuiler.R; +import com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity; import com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment; public class NetworkSettings extends SettingsPreferenceFragment { @@ -8,4 +11,9 @@ public class NetworkSettings extends SettingsPreferenceFragment { public int getContentResId() { return R.xml.framework_phone; } + + @Override + public View.OnClickListener addRestartListener() { + return view -> ((BaseSettingsActivity)getActivity()).showRestartSystemDialog(); + } } diff --git a/app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/framework/OtherSettings.java b/app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/framework/OtherSettings.java index 260faa52e..7d062caaf 100644 --- a/app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/framework/OtherSettings.java +++ b/app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/framework/OtherSettings.java @@ -1,8 +1,10 @@ package com.sevtinge.cemiuiler.ui.fragment.framework; +import static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isAndroidR; +import static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isAndroidT; + import com.sevtinge.cemiuiler.R; import com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment; -import com.sevtinge.cemiuiler.utils.devicesdk.SdkHelper; import moralnorm.preference.Preference; import moralnorm.preference.SwitchPreference; @@ -22,9 +24,9 @@ public int getContentResId() { @Override public void initPrefs() { mAppLinkVerify = findPreference("prefs_key_system_framework_disable_app_link_verify"); - mAppLinkVerify.setVisible(!SdkHelper.isAndroidR()); + mAppLinkVerify.setVisible(!isAndroidR()); mAppLinkVerify.setOnPreferenceChangeListener((preference, o) -> true); mUseOriginalAnim = findPreference("prefs_key_system_framework_other_use_original_animation"); - mUseOriginalAnim.setVisible(!SdkHelper.isAndroidTiramisu()); + mUseOriginalAnim.setVisible(!isAndroidT()); } } diff --git a/app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/framework/VolumeSettings.java b/app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/framework/VolumeSettings.java index dd96958fd..0ff4f57b6 100644 --- a/app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/framework/VolumeSettings.java +++ b/app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/framework/VolumeSettings.java @@ -1,8 +1,10 @@ package com.sevtinge.cemiuiler.ui.fragment.framework; import android.provider.Settings; +import android.view.View; import com.sevtinge.cemiuiler.R; +import com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity; import com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment; import moralnorm.preference.DropDownPreference; @@ -15,6 +17,14 @@ public int getContentResId() { return R.xml.framework_volume; } + @Override + public View.OnClickListener addRestartListener() { + return view -> ((BaseSettingsActivity)getActivity()).showRestartDialog( + getResources().getString(R.string.system_ui), + "com.android.systemui" + ); + } + @Override public void initPrefs() { mDefaultVolumeStream = findPreference("prefs_key_system_framework_default_volume_stream"); diff --git a/app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/home/HomeDrawerSettings.java b/app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/home/HomeDrawerSettings.java index c7f8cbd4f..a1212efe6 100644 --- a/app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/home/HomeDrawerSettings.java +++ b/app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/home/HomeDrawerSettings.java @@ -1,11 +1,12 @@ package com.sevtinge.cemiuiler.ui.fragment.home; +import static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isAndroidR; + import android.view.View; import com.sevtinge.cemiuiler.R; import com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity; import com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment; -import com.sevtinge.cemiuiler.utils.devicesdk.SdkHelper; import moralnorm.preference.SwitchPreference; @@ -29,7 +30,7 @@ public View.OnClickListener addRestartListener() { @Override public void initPrefs() { mAllAppsContainerViewBlur = findPreference("prefs_key_home_drawer_blur"); - mAllAppsContainerViewBlur.setVisible(!SdkHelper.isAndroidR()); + mAllAppsContainerViewBlur.setVisible(!isAndroidR()); mAllAppsContainerViewBlur.setOnPreferenceChangeListener((preference, o) -> true); } diff --git a/app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/home/HomeOtherSettings.java b/app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/home/HomeOtherSettings.java index 981672dcc..e19c7df16 100644 --- a/app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/home/HomeOtherSettings.java +++ b/app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/home/HomeOtherSettings.java @@ -1,11 +1,12 @@ package com.sevtinge.cemiuiler.ui.fragment.home; +import static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isAndroidT; + import android.view.View; import com.sevtinge.cemiuiler.R; import com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity; import com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment; -import com.sevtinge.cemiuiler.utils.devicesdk.SdkHelper; import moralnorm.preference.SwitchPreference; @@ -29,6 +30,6 @@ public View.OnClickListener addRestartListener() { @Override public void initPrefs() { mFixAndroidRS = findPreference("prefs_key_home_other_fix_android_r_s"); - mFixAndroidRS.setVisible(!SdkHelper.isAndroidTiramisu()); + mFixAndroidRS.setVisible(!isAndroidT()); } } diff --git a/app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/home/HomeTitleSettings.java b/app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/home/HomeTitleSettings.java index daef92946..d96e8783b 100644 --- a/app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/home/HomeTitleSettings.java +++ b/app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/home/HomeTitleSettings.java @@ -1,11 +1,12 @@ package com.sevtinge.cemiuiler.ui.fragment.home; +import static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isAndroidT; + import android.view.View; import com.sevtinge.cemiuiler.R; import com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity; import com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment; -import com.sevtinge.cemiuiler.utils.devicesdk.SdkHelper; import moralnorm.preference.SwitchPreference; @@ -30,10 +31,10 @@ public View.OnClickListener addRestartListener() { @Override public void initPrefs() { mDisableMonoChrome = findPreference("prefs_key_home_other_icon_mono_chrome"); - mDisableMonoChrome.setVisible(SdkHelper.isAndroidTiramisu()); + mDisableMonoChrome.setVisible(isAndroidT()); mDisableMonoChrome.setOnPreferenceChangeListener((preference, o) -> true); mDisableMonetColor = findPreference("prefs_key_home_other_icon_monet_color"); - mDisableMonetColor.setVisible(SdkHelper.isAndroidTiramisu()); + mDisableMonetColor.setVisible(isAndroidT()); mDisableMonetColor.setOnPreferenceChangeListener((preference, o) -> true); } } diff --git a/app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/systemui/ControlCenterSettings.java b/app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/systemui/ControlCenterSettings.java index 6155f78d5..cea6c7a1f 100644 --- a/app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/systemui/ControlCenterSettings.java +++ b/app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/systemui/ControlCenterSettings.java @@ -1,5 +1,8 @@ package com.sevtinge.cemiuiler.ui.fragment.systemui; +import static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isAndroidSv2; +import static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isAndroidS; + import android.provider.Settings; import android.view.View; import android.widget.SeekBar; @@ -8,7 +11,6 @@ import com.sevtinge.cemiuiler.prefs.SeekBarPreferenceEx; import com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity; import com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment; -import com.sevtinge.cemiuiler.utils.devicesdk.SdkHelper; import moralnorm.preference.SwitchPreference; @@ -32,7 +34,7 @@ public View.OnClickListener addRestartListener() { @Override public void initPrefs() { mFixMediaPanel = findPreference("prefs_key_system_ui_control_center_fix_media_control_panel"); - mFixMediaPanel.setVisible(SdkHelper.isAndroidS() || SdkHelper.isAndroidSv2()); + mFixMediaPanel.setVisible(isAndroidS() || isAndroidSv2()); ((SeekBarPreferenceEx) findPreference("prefs_key_system_control_center_old_qs_grid_columns")).setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override diff --git a/app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/systemui/StatusBarSettings.java b/app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/systemui/StatusBarSettings.java index 603fb7e1e..775346c33 100644 --- a/app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/systemui/StatusBarSettings.java +++ b/app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/systemui/StatusBarSettings.java @@ -1,11 +1,12 @@ package com.sevtinge.cemiuiler.ui.fragment.systemui; +import static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isAndroidR; + import android.view.View; import com.sevtinge.cemiuiler.R; import com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity; import com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment; -import com.sevtinge.cemiuiler.utils.devicesdk.SdkHelper; import moralnorm.preference.Preference; @@ -29,6 +30,6 @@ public View.OnClickListener addRestartListener() { @Override public void initPrefs() { mDeviceStatus = findPreference("prefs_key_system_ui_status_bar_device"); - mDeviceStatus.setVisible(!SdkHelper.isAndroidR()); + mDeviceStatus.setVisible(!isAndroidR()); } } diff --git a/app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/systemui/SystemUIOtherSettings.java b/app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/systemui/SystemUIOtherSettings.java index 82e01f0c7..ad6629864 100644 --- a/app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/systemui/SystemUIOtherSettings.java +++ b/app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/systemui/SystemUIOtherSettings.java @@ -1,11 +1,12 @@ package com.sevtinge.cemiuiler.ui.fragment.systemui; +import static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isAndroidR; + import android.view.View; import com.sevtinge.cemiuiler.R; import com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity; import com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment; -import com.sevtinge.cemiuiler.utils.devicesdk.SdkHelper; import moralnorm.preference.PreferenceCategory; @@ -29,6 +30,6 @@ public View.OnClickListener addRestartListener() { @Override public void initPrefs() { mMonetOverlay = findPreference("prefs_key_system_ui_monet"); - mMonetOverlay.setVisible(!SdkHelper.isAndroidR()); + mMonetOverlay.setVisible(!isAndroidR()); } } diff --git a/app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/systemui/statusbar/IconManageSettings.java b/app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/systemui/statusbar/IconManageSettings.java index b58c7370e..ccb88a01d 100644 --- a/app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/systemui/statusbar/IconManageSettings.java +++ b/app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/systemui/statusbar/IconManageSettings.java @@ -1,12 +1,13 @@ package com.sevtinge.cemiuiler.ui.fragment.systemui.statusbar; +import static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isAndroidT; + import android.view.View; import com.sevtinge.cemiuiler.R; import com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity; import com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment; import com.sevtinge.cemiuiler.utils.PrefsUtils; -import com.sevtinge.cemiuiler.utils.devicesdk.SdkHelper; import moralnorm.preference.DropDownPreference; import moralnorm.preference.Preference; @@ -41,8 +42,8 @@ public void initPrefs() { UseNewHD = findPreference("prefs_key_system_ui_status_bar_use_new_hd"); IconNewHD = findPreference("prefs_key_system_ui_status_bar_icon_new_hd"); - UseNewHD.setVisible(SdkHelper.isAndroidTiramisu()); - IconNewHD.setVisible(SdkHelper.isAndroidTiramisu()); + UseNewHD.setVisible(isAndroidT()); + IconNewHD.setVisible(isAndroidT()); mAlarmClockIconN.setVisible(Integer.parseInt(PrefsUtils.mSharedPreferences.getString("prefs_key_system_ui_status_bar_icon_alarm_clock", "0")) == 3); diff --git a/app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/systemui/statusbar/NetworkSpeedIndicatorSettings.java b/app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/systemui/statusbar/NetworkSpeedIndicatorSettings.java index 3564ac83e..f05d27cd0 100644 --- a/app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/systemui/statusbar/NetworkSpeedIndicatorSettings.java +++ b/app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/systemui/statusbar/NetworkSpeedIndicatorSettings.java @@ -1,11 +1,12 @@ package com.sevtinge.cemiuiler.ui.fragment.systemui.statusbar; +import static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isAndroidR; + import android.view.View; import com.sevtinge.cemiuiler.R; import com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity; import com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment; -import com.sevtinge.cemiuiler.utils.devicesdk.SdkHelper; import moralnorm.preference.SeekBarPreference; @@ -29,6 +30,6 @@ public View.OnClickListener addRestartListener() { @Override public void initPrefs() { mNetworkSpeedWidth = findPreference("prefs_key_system_ui_statusbar_network_speed_fixedcontent_width"); - mNetworkSpeedWidth.setVisible(!SdkHelper.isAndroidR()); + mNetworkSpeedWidth.setVisible(!isAndroidR()); } } diff --git a/app/src/main/java/com/sevtinge/cemiuiler/utils/devicesdk/AppUtils.kt b/app/src/main/java/com/sevtinge/cemiuiler/utils/devicesdk/AppUtils.kt index fab3e6cb4..ad3c5f68e 100644 --- a/app/src/main/java/com/sevtinge/cemiuiler/utils/devicesdk/AppUtils.kt +++ b/app/src/main/java/com/sevtinge/cemiuiler/utils/devicesdk/AppUtils.kt @@ -59,22 +59,8 @@ fun isAlpha(): Boolean = fun isPadDevice(): Boolean = DeviceHelper.isTablet() || DeviceHelper.isFoldDevice() -fun atLeastAndroidS(): Boolean = Build.VERSION.SDK_INT >= Build.VERSION_CODES.S - -fun atLeastAndroidT(): Boolean = Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU - fun checkVersionCode(): Long = getPackageInfoCompat(EzXHelper.appContext.packageName).longVersionCode -fun checkMiuiVersion(): Float = when (getProp("ro.miui.ui.version.name")) { - "V140" -> 14f - "V130" -> 13f - "V125" -> 12.5f - "V12" -> 12f - "V11" -> 11f - "V10" -> 10f - else -> 0f -} - fun checkAndroidVersion(): String = getProp("ro.build.version.release") /** diff --git a/app/src/main/java/com/sevtinge/cemiuiler/utils/devicesdk/SdkHelper.java b/app/src/main/java/com/sevtinge/cemiuiler/utils/devicesdk/SdkHelper.java deleted file mode 100644 index bb711d570..000000000 --- a/app/src/main/java/com/sevtinge/cemiuiler/utils/devicesdk/SdkHelper.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.sevtinge.cemiuiler.utils.devicesdk; - -import android.os.Build; - -public class SdkHelper { - - public static final boolean ATLEAST_R; - public static final boolean ATLEAST_S; - public static final boolean ATLEAST_T; - - /* public static final boolean ATLEAST_U;*/ - - public static final boolean IS_MIUI; - public static final boolean IS_MIUI_13; - public static final boolean IS_MIUI_14; - public static final int PROP_MIUI_VERSION_CODE; - - public static boolean isAndroidMoreVersion(int version) { - return (Build.VERSION.SDK_INT >= version); - } - - public static boolean isAndroidR() { - return (Build.VERSION.SDK_INT == Build.VERSION_CODES.R); - } - - public static boolean isAndroidS() { - return (Build.VERSION.SDK_INT == Build.VERSION_CODES.S); - } - - public static boolean isAndroidSv2() { - return (Build.VERSION.SDK_INT == Build.VERSION_CODES.S_V2); - } - - public static boolean isAndroidTiramisu() { - return (Build.VERSION.SDK_INT == Build.VERSION_CODES.TIRAMISU); - } - -/* public static boolean isAndroidU(){ - return (Build.VERSION.SDK_INT == Build.VERSION_CODES.UPSIDE_DOWN_CAKE); - }*/ - - static { - ATLEAST_R = isAndroidR(); - ATLEAST_S = isAndroidS(); - ATLEAST_T = isAndroidTiramisu(); - /* ATLEAST_U = isAndroidU();*/ - - IS_MIUI = moralnorm.os.Build.IS_MIUI; - PROP_MIUI_VERSION_CODE = IS_MIUI ? Integer.parseInt(moralnorm.os.Build.getMiuiVersionCode()) : 0; - - IS_MIUI_13 = PROP_MIUI_VERSION_CODE == 13; - IS_MIUI_14 = PROP_MIUI_VERSION_CODE == 14; - } -} diff --git a/app/src/main/java/com/sevtinge/cemiuiler/utils/devicesdk/SystemSDK.kt b/app/src/main/java/com/sevtinge/cemiuiler/utils/devicesdk/SystemSDK.kt new file mode 100644 index 000000000..88e4c5b6d --- /dev/null +++ b/app/src/main/java/com/sevtinge/cemiuiler/utils/devicesdk/SystemSDK.kt @@ -0,0 +1,33 @@ +package com.sevtinge.cemiuiler.utils.devicesdk + +import android.os.Build + +/** +获取设备 Android 版本 、MIUI 版本 +并判断设备指定类型 + */ +fun getAndroidVersion(): Int = Build.VERSION.SDK_INT + +fun isAndroidR(): Boolean = getAndroidVersion() == Build.VERSION_CODES.R +fun isAndroidS(): Boolean = getAndroidVersion() == Build.VERSION_CODES.S +fun isAndroidSv2(): Boolean = getAndroidVersion() == Build.VERSION_CODES.S_V2 +fun isAndroidT(): Boolean = getAndroidVersion() == Build.VERSION_CODES.TIRAMISU +fun isAndroidU(): Boolean = getAndroidVersion() == Build.VERSION_CODES.UPSIDE_DOWN_CAKE + +fun isMoreAndroidVersion(version: Int): Boolean { + return getAndroidVersion() >= version +} + +fun getMiuiVersion(): Float = when (getProp("ro.miui.ui.version.name")) { + "V140" -> 14f + "V130" -> 13f + "V125" -> 12.5f + "V12" -> 12f + "V11" -> 11f + "V10" -> 10f + else -> 0f +} + +fun isMoreMiuiVersion(version: Float): Boolean { + return getMiuiVersion() >= version +} diff --git a/app/src/main/res/values-en-rUS/strings.xml b/app/src/main/res/values-en-rUS/strings.xml index 4c503bcad..ccf2852c4 100644 --- a/app/src/main/res/values-en-rUS/strings.xml +++ b/app/src/main/res/values-en-rUS/strings.xml @@ -521,7 +521,7 @@ Add hook Select mode Pull down the status bar to display shortcut switches and system notifications - Quickly restart the target app + Quickly restart apps Add Delete Are you sure you want to reset? @@ -547,7 +547,7 @@ Manage NFC automatically NFC is automatically turned on when entering the card swiping page, and it is automatically turned off when exiting "Are you sure you want to restart now " - " ?" + "?" Tip Module not activated Set the location of the module entry in the system settings @@ -683,7 +683,7 @@ Please set app drawer background transparency to 100% to use this feature Allow classic widget to be moved to the Minus One screen Always blur launcher wallpaper - Reboot + Reboot Transition animations use native styles Network speed indicator management Default @@ -1024,4 +1024,31 @@ Home screen distance from screen top margin New Task Shortcut + High level + Not set + Copy + Turned on + Turned off + Copied %1$s to clipboard. + Default + Choose the color + Preset color + Custom color + Transparency + Confirm selection + Back to the homepage + Back to the previous level + Back + Select all + Cancel + Ok + Select all + Unselect all + Delete + Cancel + Search + More + More + Clear up + Tablet security center \ No newline at end of file diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 4c4333d4e..60b94341a 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -505,7 +505,7 @@ Recuperação bem sucedida Recuperar Tem certeza de que deseja reiniciar agora - \? + ? Scanner Desbloquear cartão de identificação de digitalização Desbloquear ficheiros de verificação @@ -990,4 +990,5 @@ Remova quaisquer limitações de tamanho do widget Margem inferior Margem superior + Defeito \ No newline at end of file diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 531806571..1e9b431d0 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -621,7 +621,7 @@ Общий доступ к сторонним приложениям Mi Smart Hub Фото - Перезагрузка + Перезагрузка Отметить новый модуль По умолчанию Всегда скрывать @@ -1027,4 +1027,5 @@ Сделайте MIUI снова великой! Нижняя граница Верхняя граница + Стандарт diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index c71b089f4..7c9a5a5f5 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -537,7 +537,7 @@ Nfc\'yi otomatik olarak yönet Kart kaydırma sayfasına girerken NFC otomatik olarak açılır ve çıkarken otomatik olarak kapanır "Şimdi yeniden başlatmak istediğinizden emin misiniz" - " ?" + "?" Tip Modül aktif değil Sistem ayarlarında modül girişinin konumunu ayarlayın @@ -818,4 +818,5 @@ Widget boyut sınırlamalarını kaldırın Alt kenar boşluğu Üst kenar boşluğu + Varsayılan diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index dc5aeb2f1..db74f84c0 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -119,13 +119,6 @@ Trình duyệt Tùy chọn nhà phát triển 17.5.xxxxx trở lên không được hỗ trợ - Cuộc gọi Máy ảnh Mở khóa hình mờ AI @@ -187,8 +180,6 @@ Đồng hồ Mở khóa hoạt ảnh đồng hồ hẹn giờ Phiên bản 13.65.0 trở lên không được hỗ trợ - Gập Luôn gập Mở rộng @@ -210,8 +201,6 @@ Tùy chỉnh Chọn chế độ Thêm Hook - Đa phương tiện Đổ chuông Thông báo @@ -223,7 +212,6 @@ Bạn có chắc muốn tắt ứng dụng này? Khởi động lại để áp dụng Tải xuống - Trình chỉnh sửa Kích hoạt Tính năng @@ -415,10 +403,8 @@ Hiển thị tiện ích MIUI Hiển thị tiện ích MIUI trên trang tiện ích Android Mô-đun chưa được kích hoạt - Điện thoại Ẩn nhạc chuông - Trí tuệ xuất sắc Kiểm soát đám mây Vô hiệu hóa kiểm soát đám mây @@ -484,11 +470,7 @@ Đây là một tính năng có rủi ro cao, bất kỳ vấn đề nào phát sinh từ việc này sẽ do người dùng chịu, vui lòng sao lưu baseband của bạn cẩn thận. Nhập *#*#MODEMTEST#*#* trên giao diện quay số để mở Cài đặt MTB Âm nhạc Loại bỏ quảng cáo - Thông báo - Tất cả Âm thanh Tài liệu @@ -527,18 +509,15 @@ Ngăn chặn tắt ứng dụng nền Có thể tăng mức tiêu thụ điện năng Khoá FPS tối đa - + Sao chép vào clipboard. + Mặc định + Tùy chỉnh màu + Lựa chọn màu + Màu cài đặt sẵn + Xác nhận lựa chọn + Độ trong suốt + Tắt + Bật Đề xuất Ghi âm Sau khi đặt lại cấu hình mô-đun, tất cả dữ liệu của nó sẽ bị xóa! @@ -550,7 +529,7 @@ Khôi phục đã thành công Khôi phục "Bạn có muốn khởi động lại máy bây giờ " - " ?" + "?" Lưu thông tin vị trí Máy quét Mở khóa quét thẻ ID @@ -572,7 +551,6 @@ Mở khóa giới hạn cắt hình Vị trí lưu ảnh chụp màn hình /Pictures/Screenshots Tìm kiếm - Bảo mật Sửa đổi cách sắp xếp mặc định của danh sách quản lý ứng dụng Sắp xếp danh sách quản lý ứng dụng @@ -633,7 +611,6 @@ Khóa 100 điểm và vô hiệu hóa tối ưu hóa Chỉ hiển thị trong chế độ chỉnh sửa Chỉ hiện khi đang vuốt màn hình - Cài đặt Sao lưu cài đặt module Khắc phục sự cố @@ -662,7 +639,6 @@ Chỉ ẩn khi không kết nối Luôn hiện Chỉ hiện khi đổ chuông - Phím bật 5G nhanh Chế độ ngoài trời Mạng 5G @@ -971,7 +947,6 @@ Chức năng này là chức năng thử nghiệm có độ ổn định cao"Thanh trạng thái Hẹn giờ mở rộng Hệ thống - Chủ đề Vá chủ đề Vô hiệu quảng cáo diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 2a5e809a4..bef178f03 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -14,12 +14,41 @@ 感谢以下贡献者为 Cemiuiler 的开发提供了不同程度的帮助(排名顺序不分先后) 支持 您可以在此处捐赠以支持我们 - 重启 + 重启 确定要立即重启 吗? 提示 模块暂未激活 + 高级 + 未设置 + 复制 + 更多 + 清空 + + 已开启 + 已关闭 + 已将 %1$s 复制到剪贴板。 + 默认 + 选择颜色 + 预置颜色 + 自定义颜色 + 透明度 + 确认选择 + + 转到首页 + 转到上一层级 + 返回 + 全选 + 取消 + 确认 + 全选 + 全不选 + 删除 + 取消 + 搜索 + 更多 + 顶部边距 底部边距 左侧间距 @@ -68,6 +97,7 @@ 文件管理 截屏 手机管家 + 平板管家 系统框架 设置 系统界面 diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index 638a653ba..2aa58c21c 100644 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -502,7 +502,7 @@ 現在您必須手動啟用此選項的權限。 還原成功 還原 - 重啟 + 重啟 "確定要立即重啟" "嗎?" 小愛視覺 @@ -1022,39 +1022,31 @@ 只能識別翻譯中文、英文 底部邊距 頂部邊距 - + 已將%1$s複製到剪貼簿。 + 自訂顏色 + 預設 + 選擇顏色 + 預設顏色 + 確認選擇 + 透明度 + 已關閉 + 已開啟 + 未設定 + 進階 + 複製 + 轉到首頁 + 轉到上一層級 + 返回 + 全選 + 取消 + 確認 + 全選 + 全不選 + 刪除 + 取消 + 搜索 + 更多 + 更多 + 清空 + 平板管家 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index fdb50a304..f9dd0efd9 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -502,7 +502,7 @@ 現在您必須手動啟用此選項的權限。 還原成功 還原 - 重啟 + 重啟 "確定要立即重啟" "嗎?" 小愛視覺 @@ -1022,39 +1022,31 @@ 只能識別翻譯中文、英文 底部邊距 頂部邊距 - + 已將%1$s複製到剪貼簿。 + 自訂顏色 + 預設 + 選擇顏色 + 預設顏色 + 確認選擇 + 透明度 + 已關閉 + 已開啟 + 未設定 + 進階 + 複製 + 轉到首頁 + 轉到上一層級 + 返回 + 全選 + 取消 + 確認 + 全選 + 全不選 + 刪除 + 取消 + 搜索 + 更多 + 更多 + 清空 + 平板管家 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b0ba73739..6a1baa3a4 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -508,7 +508,7 @@ Add hook Select mode Pull down the status bar to display shortcut switches and system notifications - Quickly restart the target app + Quickly restart apps Add Delete Are you sure you want to reset? @@ -534,7 +534,7 @@ Manage NFC automatically NFC is automatically turned on when entering the card swiping page, and it is automatically turned off when exiting "Are you sure you want to restart now " - " ?" + "?" Tip Module not activated Set the location of the module entry in the system settings @@ -674,7 +674,7 @@ App name distance task view card Task view card rounded corners Disable hide Google - Reboot + Reboot Network speed indicator management Default Network speed update interval @@ -1041,4 +1041,32 @@ Bottom margin Top margin Shortcut + %1$s%2$s + High level + Not set + Copy + Turned on + Turned off + Copied %1$s to clipboard. + Default + Choose the color + Preset color + Custom color + Transparency + Confirm selection + Back to the homepage + Back to the previous level + Back + Select all + Cancel + Ok + Select all + Unselect all + Delete + Cancel + Search + More + More + Clear up + Tablet security center \ No newline at end of file diff --git a/app/src/main/res/xml/package_installer.xml b/app/src/main/res/xml/package_installer.xml index 8f601804c..49929ee1e 100644 --- a/app/src/main/res/xml/package_installer.xml +++ b/app/src/main/res/xml/package_installer.xml @@ -34,6 +34,12 @@ android:title="@string/miui_package_installer_count_checking" android:defaultValue="false" /> + + - - diff --git a/app/src/main/res/xml/prefs_main.xml b/app/src/main/res/xml/prefs_main.xml index 9b234f7f8..aeca79488 100644 --- a/app/src/main/res/xml/prefs_main.xml +++ b/app/src/main/res/xml/prefs_main.xml @@ -215,6 +215,13 @@ android:summary="com.miui.securitycenter" android:title="@string/security_center" /> + + - - - - - + + + +