From 59c00661e363fe4710b561c2df0d3a7e5d28b101 Mon Sep 17 00:00:00 2001 From: mu7220 <80700814+mu7220@users.noreply.github.com> Date: Fri, 16 Feb 2024 19:41:11 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E9=A1=B9=E7=9B=AE=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=20&&=20=E7=A7=BB=E9=99=A4=E9=83=A8=E5=88=86=E9=9D=9E?= =?UTF-8?q?=E5=BF=85=E8=A6=81=E6=8E=A8=E8=8D=90=E4=BD=9C=E7=94=A8=E5=9F=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: mu7220 <80700814+mu7220@users.noreply.github.com> --- README.md | 124 +++++++++--------- README_en-US.md | 10 +- README_pt-BR.md | 10 +- app/build.gradle | 5 +- .../data/adapter/NavigationPagerAdapter.java | 1 - .../hyperceiler/module/app/SystemUI.java | 2 +- .../hyperceiler/module/base/BaseModule.java | 14 +- .../module/base/BaseXposedInit.java | 3 + .../module/base/tool/XposedTool.java | 16 +-- .../module/hook/camera/CustomWatermark.java | 1 - .../module/hook/home/AnimDurationRatio.kt | 4 +- .../hook/home/drawer/PinyinArrangement.java | 9 +- .../hook/home/recent/AlwaysShowCleanUp.kt | 1 - .../module/hook/home/recent/RealMemory.kt | 1 - .../module/hook/home/title/DisableHideFile.kt | 3 - .../securitycenter/other/DisableRootCheck.kt | 2 +- .../AllowUntrustedTouchForU.java | 2 - .../hook/systemsettings/EnableFoldArea.kt | 2 +- .../QuickManageOverlayPermission.kt | 2 +- .../QuickManageUnknownAppSources.kt | 2 +- .../hook/systemui/SwitchControlPanel.java | 1 - .../hook/systemui/controlcenter/QQSGrid.kt | 4 +- .../systemui/controlcenter/QQSGridOld.java | 1 - .../hook/systemui/controlcenter/QSGrid.kt | 4 - .../hook/systemui/lockscreen/ChargingCVP.kt | 1 + .../lockscreen/ClockDisplaySeconds.kt | 7 +- .../hook/systemui/lockscreen/RemoveCamera.kt | 2 +- .../statusbar/DisplayHardwareDetail.java | 6 +- .../statusbar/NotificationIconColumns.java | 1 - .../statusbar/clock/TimeCustomization.kt | 4 +- .../statusbar/network/news/NewNetworkSpeed.kt | 2 + .../statusbar/network/old/NetworkSpeed.kt | 2 + .../module/hook/various/DialogBlur.java | 7 +- .../module/hook/various/DialogGravity.java | 10 +- .../hyperceiler/ui/SubPickerActivity.java | 1 - .../customhook/CustomHookConfigActivity.java | 2 - .../ui/fragment/AboutFragment.java | 16 +-- .../hyperceiler/ui/fragment/MainFragment.java | 1 - .../ui/fragment/MiLinkFragment.java | 4 - .../ui/fragment/SystemSettingsFragment.java | 1 - .../ui/fragment/framework/OtherSettings.java | 12 +- .../fragment/systemui/LockScreenSettings.java | 2 +- .../ui/fragment/various/AOSPSettings.java | 2 - .../various/LocationSimulationActivity.java | 1 - .../sevtinge/hyperceiler/utils/CtaUtils.java | 1 - .../hyperceiler/utils/LogcatHelper.java | 2 +- .../api/{LinQiqiApis.kt => NekoQiqiApis.kt} | 2 +- .../hyperceiler/utils/devicesdk/AppUtils.kt | 4 +- .../hyperceiler/utils/devicesdk/SystemSDK.kt | 6 +- .../hyperceiler/utils/log/LogManager.java | 15 +-- .../sevtinge/hyperceiler/view/WeatherView.kt | 14 +- app/src/main/res/values/arrays.xml | 4 - imgs/icon.png | Bin 12482 -> 14449 bytes 53 files changed, 151 insertions(+), 205 deletions(-) rename app/src/main/java/com/sevtinge/hyperceiler/utils/api/{LinQiqiApis.kt => NekoQiqiApis.kt} (99%) diff --git a/README.md b/README.md index 834af5510d..2e21090193 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ -
+

- +icon # HyperCeiler @@ -8,7 +8,7 @@ 简体中文  |  [English](/README_en-US.md) |  [Português (Brasil)](/README_pt-BR.md) -

+

## 支持的版本 @@ -31,67 +31,63 @@ HyperCeiler 已停止维护 Android 11-12 的 MIUI ROM,除系统框架、系
点击展开折叠的内容 -| 应用名 | 包名 | -|:------------------------------|:-----------------------------------| -| 系统框架 | system | -| 系统界面 | com.android.systemui | -| 系统桌面 | com.miui.home | -| 系统更新 | com.android.updater | -| Joyose | com.xiaomi.joyose | -| 小米设置 | com.xiaomi.misettings | -| 安全服务 (手机管家、平板管家) | com.miui.securitycenter | -| 笔记 | com.miui.notes | -| 壁纸 | com.miui.miwallpaper | -| 传送门 | com.miui.contentextension | -| 弹幕通知 | com.xiaomi.barrage | -| 百度输入法小米版 | com.baidu.input_mi | -| 电话 | com.android.incallui | -| 电话服务 | com.android.phone | -| 电量与性能 | com.miui.powerkeeper | -| 短信 | com.android.mms | -| 截屏 | com.miui.screenshot | -| 垃圾清理 | com.miui.cleanmaster | -| 浏览器 | com.android.browser | -| 鲁班(MTB) | com.xiaomi.mtb | -| 屏幕录制 | com.miui.screenrecorder | -| 权限管理服务 | com.lbe.security.miui | -| 设置 | com.android.settings | -| 搜狗输入法小米版 | com.sohu.inputmethod.sogou.xiaomi | -| 天气 | com.miui.weather2 | -| 互联互通服务 (投屏) | com.milink.service | -| 外部存储设备 | com.android.externalstorage | -| 息屏与锁屏编辑 (万象息屏) | com.miui.aod | -| 文件管理 | com.android.fileexplorer | -| 系统服务组件 | com.miui.securityadd | -| 下载管理 | com.android.providers.downloads.ui | -| 下载管理程序 | com.android.providers.downloads | -| 相册 | com.miui.gallery | -| 小米创作 | com.miui.creation | -| 小米互传 | com.miui.mishare.connectivity | -| 小米相册 - 编辑 | com.miui.mediaeditor | -| 小米云服务 | com.miui.cloudservice | -| 小米智能卡 | com.miui.tsmclient | -| 讯飞输入法小米版 | com.iflytek.inputmethod.miui | -| 应用包管理组件 | com.miui.packageinstaller | -| 应用商店 | com.xiaomi.market | -| 智能助理 | com.miui.personalassistant | -| 主题商店 (主题壁纸、壁纸与个性化) | com.android.thememanager | -| com.miui.rom | com.miui.rom | -| 系统安全组件 | com.miui.guardprovider | -| 时钟 | com.android.deskclock | -| 相机 | com.android.camera | -| 小爱翻译 | com.xiaomi.aiasst.vision | -| 小爱建议 | com.xiaomi.aireco | -| 小爱视觉 | com.xiaomi.scanner | -| 小爱同学 | com.miui.voiceassist | -| 音乐 | com.miui.player | -| 跨屏协同服务 (MIUI+ Beta 版) | com.xiaomi.mirror | -| NetworkBoost | com.xiaomi.NetworkBoost | -| NFC 服务 | com.android.nfc | -| 音质音效 | com.miui.misound | -| 备份 | com.miui.backup | -| 小米换机 | com.miui.huanji | -| MiTrustService | com.xiaomi.trustservice | +| 应用名 | 包名 | +|:----------------------|:-----------------------------------| +| 系统框架 | system | +| 系统界面 | com.android.systemui | +| 系统桌面 | com.miui.home | +| 系统更新 | com.android.updater | +| Joyose | com.xiaomi.joyose | +| 小米设置 | com.xiaomi.misettings | +| 安全服务 (手机管家、平板管家) | com.miui.securitycenter | +| 笔记 | com.miui.notes | +| 壁纸 | com.miui.miwallpaper | +| 传送门 | com.miui.contentextension | +| 弹幕通知 | com.xiaomi.barrage | +| 百度输入法小米版 | com.baidu.input_mi | +| 电话 | com.android.incallui | +| 电话服务 | com.android.phone | +| 电量与性能 | com.miui.powerkeeper | +| 短信 | com.android.mms | +| 截屏 | com.miui.screenshot | +| 垃圾清理 | com.miui.cleanmaster | +| 浏览器 | com.android.browser | +| 鲁班(MTB) | com.xiaomi.mtb | +| 屏幕录制 | com.miui.screenrecorder | +| 权限管理服务 | com.lbe.security.miui | +| 设置 | com.android.settings | +| 搜狗输入法小米版 | com.sohu.inputmethod.sogou.xiaomi | +| 天气 | com.miui.weather2 | +| 互联互通服务 (投屏) | com.milink.service | +| 外部存储设备 | com.android.externalstorage | +| 息屏与锁屏编辑 (万象息屏) | com.miui.aod | +| 文件管理 | com.android.fileexplorer | +| 系统服务组件 | com.miui.securityadd | +| 下载管理 | com.android.providers.downloads.ui | +| 下载管理程序 | com.android.providers.downloads | +| 相册 | com.miui.gallery | +| 小米创作 | com.miui.creation | +| 小米互传 | com.miui.mishare.connectivity | +| 小米相册 - 编辑 | com.miui.mediaeditor | +| 小米云服务 | com.miui.cloudservice | +| 小米智能卡 | com.miui.tsmclient | +| 讯飞输入法小米版 | com.iflytek.inputmethod.miui | +| 应用包管理组件 | com.miui.packageinstaller | +| 应用商店 | com.xiaomi.market | +| 智能助理 | com.miui.personalassistant | +| 主题商店 (主题壁纸、壁纸与个性化) | com.android.thememanager | +| 系统安全组件 | com.miui.guardprovider | +| 相机 | com.android.camera | +| 小爱翻译 | com.xiaomi.aiasst.vision | +| 小爱建议 | com.xiaomi.aireco | +| 小爱视觉 | com.xiaomi.scanner | +| 小爱同学 | com.miui.voiceassist | +| NetworkBoost | com.xiaomi.NetworkBoost | +| NFC 服务 | com.android.nfc | +| 音质音效 | com.miui.misound | +| 备份 | com.miui.backup | +| 小米换机 | com.miui.huanji | +| MiTrustService | com.xiaomi.trustservice |
diff --git a/README_en-US.md b/README_en-US.md index c69b09456f..99c9df249e 100644 --- a/README_en-US.md +++ b/README_en-US.md @@ -1,6 +1,6 @@ -
+

- +icon # HyperCeiler @@ -8,7 +8,7 @@ [简体中文](/README.md)  |  English |  [Português (Brasil)](/README_pt-BR.md) -

+

## Supported versions @@ -76,16 +76,12 @@ HyperCeiler has stopped maintaining the MIUI ROM of Android 11-12, except for th | GetApps | com.xiaomi.market | | App vault | com.miui.personalassistant | | Themes | com.android.thememanager | -| com.miui.rom | com.miui.rom | | MIUI Security Components | com.miui.guardprovider | -| Clock | com.android.deskclock | | Camera | com.android.camera | | Mi AI Translate | com.xiaomi.aiasst.vision | | Mi AI Suggestions | com.xiaomi.aireco | | Scanner | com.xiaomi.scanner | | Mi AI | com.miui.voiceassist | -| Music | com.miui.player | -| MIUI+ | com.xiaomi.mirror | | NetworkBoost | com.xiaomi.NetworkBoost | | NFC Service | com.android.nfc | | Earphones | com.miui.misound | diff --git a/README_pt-BR.md b/README_pt-BR.md index f5bc83bdfb..79fd69a2aa 100644 --- a/README_pt-BR.md +++ b/README_pt-BR.md @@ -1,6 +1,6 @@ -
+

- +icon # HyperCeiler @@ -8,7 +8,7 @@ [简体中文](/README.md)  |  [English](/README_en-US.md) |  Português (Brasil) -

+

## Versões suportadas @@ -76,16 +76,12 @@ O HyperCeiler deixou de ser mantido em ROM MIUI para o Android 11-12, exceto par | GetApps | com.xiaomi.market | | Assistente | com.miui.personalassistant | | Temas | com.android.thememanager | -| com.miui.rom | com.miui.rom | | Componentes de segurança do HyperOS | com.miui.guardprovider | -| Relógio | com.android.deskclock | | Câmera | com.android.camera | | Mi AI Translate | com.xiaomi.aiasst.vision | | AI Reco | com.xiaomi.aireco | | Scanner | com.xiaomi.scanner | | Mi AI | com.miui.voiceassist | -| Música | com.miui.player | -| Serviços de interconectividade de dispositivos | com.xiaomi.mirror | | NetworkBoost | com.xiaomi.NetworkBoost | | Serviço NFC | com.android.nfc | | Fones de ouvido | com.miui.misound | diff --git a/app/build.gradle b/app/build.gradle index 9db34b0b54..cac2f7adcd 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -74,6 +74,7 @@ android { System.console()?.readLine('\n' + prompt + ': ') } def keyStoreFile = getString('storeFile', 'STORE_FILE', 'Store file')?.with(rootProject.&file) + def gitRevision = getGitRevision() signingConfigs { hyperceiler { @@ -113,14 +114,14 @@ android { minifyEnabled true shrinkResources true proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - versionNameSuffix "_" + DateTimeFormatter.ofPattern("yyyyMMdd").format(LocalDateTime.now()) + "_" + getGitRevision() + versionNameSuffix "_" + DateTimeFormatter.ofPattern("yyyyMMdd").format(LocalDateTime.now()) + "_" + gitRevision buildConfigField "String", "GIT_HASH", "\"${getGitHash()}\"" if (keyStoreFile != null) { signingConfig signingConfigs.hyperceiler } } debug { - versionNameSuffix "_" + DateTimeFormatter.ofPattern("yyyyMMdd").format(LocalDateTime.now()) + "_" + getGitRevision() + versionNameSuffix "_" + DateTimeFormatter.ofPattern("yyyyMMdd").format(LocalDateTime.now()) + "_" + gitRevision buildConfigField "String", "GIT_HASH", "\"${getGitHash()}\"" if (keyStoreFile != null) { signingConfig signingConfigs.hyperceiler diff --git a/app/src/main/java/com/sevtinge/hyperceiler/data/adapter/NavigationPagerAdapter.java b/app/src/main/java/com/sevtinge/hyperceiler/data/adapter/NavigationPagerAdapter.java index 84fbf98c44..46d17790ed 100644 --- a/app/src/main/java/com/sevtinge/hyperceiler/data/adapter/NavigationPagerAdapter.java +++ b/app/src/main/java/com/sevtinge/hyperceiler/data/adapter/NavigationPagerAdapter.java @@ -23,7 +23,6 @@ import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; -import androidx.fragment.app.FragmentPagerAdapter; import androidx.fragment.app.FragmentStatePagerAdapter; import java.util.List; diff --git a/app/src/main/java/com/sevtinge/hyperceiler/module/app/SystemUI.java b/app/src/main/java/com/sevtinge/hyperceiler/module/app/SystemUI.java index b08d5977ef..58ea54720b 100644 --- a/app/src/main/java/com/sevtinge/hyperceiler/module/app/SystemUI.java +++ b/app/src/main/java/com/sevtinge/hyperceiler/module/app/SystemUI.java @@ -18,7 +18,7 @@ */ package com.sevtinge.hyperceiler.module.app; -import static com.sevtinge.hyperceiler.utils.api.LinQiqiApisKt.isNewNetworkStyle; +import static com.sevtinge.hyperceiler.utils.api.NekoQiqiApisKt.isNewNetworkStyle; import static com.sevtinge.hyperceiler.utils.devicesdk.SystemSDKKt.isAndroidVersion; import static com.sevtinge.hyperceiler.utils.devicesdk.SystemSDKKt.isMoreAndroidVersion; import static com.sevtinge.hyperceiler.utils.devicesdk.SystemSDKKt.isMoreHyperOSVersion; diff --git a/app/src/main/java/com/sevtinge/hyperceiler/module/base/BaseModule.java b/app/src/main/java/com/sevtinge/hyperceiler/module/base/BaseModule.java index 93b6971fd1..e3de75d54d 100644 --- a/app/src/main/java/com/sevtinge/hyperceiler/module/base/BaseModule.java +++ b/app/src/main/java/com/sevtinge/hyperceiler/module/base/BaseModule.java @@ -54,15 +54,13 @@ public void init(LoadPackageParam lpparam) { try { if (!ProjectApi.mAppModulePkg.equals(lpparam.packageName)) { Handler handler = new Handler(); - ContextUtils.getWaitContext(context -> { - handler.post( - () -> { - if (context != null) { - ResourcesTool.loadModuleRes(context); - } - } - ); + ContextUtils.getWaitContext(context -> handler.post( + () -> { + if (context != null) { + ResourcesTool.loadModuleRes(context); + } } + ) , "android".equals(lpparam.packageName)); } } catch (Throwable e) { diff --git a/app/src/main/java/com/sevtinge/hyperceiler/module/base/BaseXposedInit.java b/app/src/main/java/com/sevtinge/hyperceiler/module/base/BaseXposedInit.java index 1a53d859fe..65342e2a96 100644 --- a/app/src/main/java/com/sevtinge/hyperceiler/module/base/BaseXposedInit.java +++ b/app/src/main/java/com/sevtinge/hyperceiler/module/base/BaseXposedInit.java @@ -28,6 +28,8 @@ import static com.sevtinge.hyperceiler.utils.log.LogManager.logLevelDesc; import static com.sevtinge.hyperceiler.utils.log.XposedLogUtils.logI; +import android.annotation.SuppressLint; + import com.sevtinge.hyperceiler.module.app.AiAsst; import com.sevtinge.hyperceiler.module.app.Aod; import com.sevtinge.hyperceiler.module.app.Backup; @@ -101,6 +103,7 @@ public abstract class BaseXposedInit implements IXposedHookLoadPackage, IXposedH public static boolean isSafeModeOn = false; + @SuppressLint("StaticFieldLeak") public static ResourcesTool mResHook; public static String mModulePath = null; public static PrefsMap mPrefsMap = new PrefsMap<>(); diff --git a/app/src/main/java/com/sevtinge/hyperceiler/module/base/tool/XposedTool.java b/app/src/main/java/com/sevtinge/hyperceiler/module/base/tool/XposedTool.java index 67ea50dc3e..f37e006157 100644 --- a/app/src/main/java/com/sevtinge/hyperceiler/module/base/tool/XposedTool.java +++ b/app/src/main/java/com/sevtinge/hyperceiler/module/base/tool/XposedTool.java @@ -18,6 +18,7 @@ */ package com.sevtinge.hyperceiler.module.base.tool; +import android.annotation.SuppressLint; import android.app.Application; import android.content.Context; import android.content.res.ColorStateList; @@ -55,6 +56,7 @@ public class XposedTool extends XposedLogUtils { public static WeakReference mPct; // public Context mModuleContext = null; + @SuppressLint("StaticFieldLeak") public static final ResourcesTool mResHook = XposedInit.mResHook; public static void setTextView(TextView textView) { @@ -87,12 +89,8 @@ public static Context findContext(@ContextUtils.Duration int flag) { if ((context = currentApplication()) == null) context = getSystemContext(); } - case 1 -> { - context = currentApplication(); - } - case 2 -> { - context = getSystemContext(); - } + case 1 -> context = currentApplication(); + case 2 -> context = getSystemContext(); default -> { } } @@ -149,8 +147,7 @@ public static String getPackageVersionName(XC_LoadPackage.LoadPackageParam lppar Object parser = parserCls.newInstance(); File apkPath = new File(lpparam.appInfo.sourceDir); Object pkg = XposedHelpers.callMethod(parser, "parsePackage", apkPath, 0); - String versionName = (String) XposedHelpers.getObjectField(pkg, "mVersionName"); - return versionName; + return (String) XposedHelpers.getObjectField(pkg, "mVersionName"); } catch (Throwable e) { return ""; } @@ -162,8 +159,7 @@ public static int getPackageVersionCode(XC_LoadPackage.LoadPackageParam lpparam) Object parser = parserCls.newInstance(); File apkPath = new File(lpparam.appInfo.sourceDir); Object pkg = XposedHelpers.callMethod(parser, "parsePackage", apkPath, 0); - int versionCode = XposedHelpers.getIntField(pkg, "mVersionCode"); - return versionCode; + return XposedHelpers.getIntField(pkg, "mVersionCode"); } catch (Throwable e) { return -1; } diff --git a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/camera/CustomWatermark.java b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/camera/CustomWatermark.java index a0f54ea318..7ab8e82148 100644 --- a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/camera/CustomWatermark.java +++ b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/camera/CustomWatermark.java @@ -31,7 +31,6 @@ import org.luckypray.dexkit.result.MethodDataList; import java.lang.reflect.Method; -import java.lang.reflect.Modifier; public class CustomWatermark extends BaseHook { @Override diff --git a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/home/AnimDurationRatio.kt b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/home/AnimDurationRatio.kt index 49e7b35d28..575b8a6c2d 100644 --- a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/home/AnimDurationRatio.kt +++ b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/home/AnimDurationRatio.kt @@ -28,7 +28,7 @@ object AnimDurationRatio : BaseHook() { var value1 = mPrefsMap.getInt("home_title_animation_speed", 100).toFloat() var value2 = mPrefsMap.getInt("home_recent_animation_speed", 100).toFloat() if (value1 != 100f) { - value1 = value1 / 100f + value1 /= 100f loadClass("com.miui.home.recents.util.RectFSpringAnim").methodFinder().first { name == "getModifyResponse" }.createHook { @@ -38,7 +38,7 @@ object AnimDurationRatio : BaseHook() { } } if (value2 != 100f) { - value2 = value2 / 100f + value2 /= 100f loadClass("com.miui.home.launcher.common.DeviceLevelUtils").methodFinder().first { name == "getDeviceLevelTransitionAnimRatio" }.createHook { diff --git a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/home/drawer/PinyinArrangement.java b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/home/drawer/PinyinArrangement.java index 5d8ff2b92a..923149025a 100644 --- a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/home/drawer/PinyinArrangement.java +++ b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/home/drawer/PinyinArrangement.java @@ -19,6 +19,8 @@ package com.sevtinge.hyperceiler.module.hook.home.drawer; import android.app.Activity; +import android.content.res.Configuration; +import android.os.LocaleList; import com.github.promeg.pinyinhelper.Pinyin; import com.sevtinge.hyperceiler.module.base.BaseHook; @@ -28,7 +30,7 @@ import de.robv.android.xposed.XposedHelpers; public class PinyinArrangement extends BaseHook { - Locale locale; + LocaleList locale; Activity activity; @Override @@ -64,13 +66,14 @@ protected void before(MethodHookParam param) { @Override protected void before(MethodHookParam param) { activity = (Activity) XposedHelpers.getObjectField(param.thisObject, "mLauncher"); - locale = activity.getResources().getConfiguration().locale; + locale = activity.getResources().getConfiguration().getLocales(); activity.getResources().getConfiguration().setLocale(Locale.SIMPLIFIED_CHINESE); } @Override protected void after(MethodHookParam param) { - activity.getResources().getConfiguration().setLocale(locale); + Configuration configuration = activity.getResources().getConfiguration(); + configuration.setLocales(locale); } } ); diff --git a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/home/recent/AlwaysShowCleanUp.kt b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/home/recent/AlwaysShowCleanUp.kt index c21b45a58a..d4b43f2944 100644 --- a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/home/recent/AlwaysShowCleanUp.kt +++ b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/home/recent/AlwaysShowCleanUp.kt @@ -23,7 +23,6 @@ import com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook import com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder import com.sevtinge.hyperceiler.module.base.BaseHook import com.sevtinge.hyperceiler.utils.api.IS_TABLET -import com.sevtinge.hyperceiler.utils.api.isPad object AlwaysShowCleanUp: BaseHook() { override fun init() { diff --git a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/home/recent/RealMemory.kt b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/home/recent/RealMemory.kt index c9a20fbd04..ea69d53ff0 100644 --- a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/home/recent/RealMemory.kt +++ b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/home/recent/RealMemory.kt @@ -29,7 +29,6 @@ import com.github.kyuubiran.ezxhelper.finders.ConstructorFinder.`-Static`.constr import com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder import com.sevtinge.hyperceiler.module.base.BaseHook import com.sevtinge.hyperceiler.utils.api.IS_TABLET -import com.sevtinge.hyperceiler.utils.api.isPad import com.sevtinge.hyperceiler.utils.getObjectField // @SuppressLint("StaticFieldLeak") diff --git a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/home/title/DisableHideFile.kt b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/home/title/DisableHideFile.kt index 7aa069dde7..f909f14ed7 100644 --- a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/home/title/DisableHideFile.kt +++ b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/home/title/DisableHideFile.kt @@ -19,9 +19,6 @@ package com.sevtinge.hyperceiler.module.hook.home.title import android.content.ComponentName -import com.github.kyuubiran.ezxhelper.ClassUtils.loadClass -import com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook -import com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder import com.sevtinge.hyperceiler.module.base.BaseHook import com.sevtinge.hyperceiler.utils.api.IS_INTERNATIONAL_BUILD import de.robv.android.xposed.XC_MethodHook diff --git a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/securitycenter/other/DisableRootCheck.kt b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/securitycenter/other/DisableRootCheck.kt index 5d7e184267..0cb2709590 100644 --- a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/securitycenter/other/DisableRootCheck.kt +++ b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/securitycenter/other/DisableRootCheck.kt @@ -30,7 +30,7 @@ object DisableRootCheck : BaseHook() { addUsingStringsEquals("key_check_item_root") returnType = "boolean" } - }.single().getMethodInstance(lpparam.classLoader)?.createHook { + }.single().getMethodInstance(lpparam.classLoader).createHook { returnConstant(false) } } diff --git a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemframework/AllowUntrustedTouchForU.java b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemframework/AllowUntrustedTouchForU.java index 22e55010ed..292bba0d27 100644 --- a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemframework/AllowUntrustedTouchForU.java +++ b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemframework/AllowUntrustedTouchForU.java @@ -20,8 +20,6 @@ import com.sevtinge.hyperceiler.module.base.BaseHook; -import de.robv.android.xposed.XposedHelpers; - public class AllowUntrustedTouchForU extends BaseHook { //Class mInputManager; diff --git a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemsettings/EnableFoldArea.kt b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemsettings/EnableFoldArea.kt index 476b400ddc..28e2c332a9 100644 --- a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemsettings/EnableFoldArea.kt +++ b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemsettings/EnableFoldArea.kt @@ -32,7 +32,7 @@ class EnableFoldArea : BaseHook() { true ) - SettingsFeaturesClass.methodFinder().first(){ + SettingsFeaturesClass.methodFinder().first { name == "isSupportFoldScreenSettings" }.createHook { before{ diff --git a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemsettings/QuickManageOverlayPermission.kt b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemsettings/QuickManageOverlayPermission.kt index aef4ab5ffd..ffba46e570 100644 --- a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemsettings/QuickManageOverlayPermission.kt +++ b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemsettings/QuickManageOverlayPermission.kt @@ -32,7 +32,7 @@ class QuickManageOverlayPermission : BaseHook() { object : MethodHook() { override fun before(param: MethodHookParam) { val intent = (param.thisObject as Activity).intent - if (intent.action != Settings.ACTION_MANAGE_OVERLAY_PERMISSION || intent.data == null || intent.data!!.scheme != "package") return@before + if (intent.action != Settings.ACTION_MANAGE_OVERLAY_PERMISSION || intent.data == null || intent.data!!.scheme != "package") return param.thisObject.objectHelper().setObjectUntilSuperclass( "initialFragmentName", "com.android.settings.applications.appinfo.DrawOverlayDetails" diff --git a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemsettings/QuickManageUnknownAppSources.kt b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemsettings/QuickManageUnknownAppSources.kt index 345bbd8b7b..a7c18e5175 100644 --- a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemsettings/QuickManageUnknownAppSources.kt +++ b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemsettings/QuickManageUnknownAppSources.kt @@ -32,7 +32,7 @@ class QuickManageUnknownAppSources : BaseHook() { object : MethodHook() { override fun before(param: MethodHookParam) { val intent = (param.thisObject as Activity).intent - if (intent.action != Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES || intent.data == null || intent.data!!.scheme != "package") return@before + if (intent.action != Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES || intent.data == null || intent.data!!.scheme != "package") return param.thisObject.objectHelper().setObjectUntilSuperclass( "initialFragmentName", "com.android.settings.applications.appinfo.ExternalSourcesDetails" diff --git a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/SwitchControlPanel.java b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/SwitchControlPanel.java index be265c5723..410a833aa1 100644 --- a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/SwitchControlPanel.java +++ b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/SwitchControlPanel.java @@ -18,7 +18,6 @@ */ package com.sevtinge.hyperceiler.module.hook.systemui; -import static com.sevtinge.hyperceiler.utils.log.AndroidLogUtils.LogD; import static com.sevtinge.hyperceiler.utils.log.AndroidLogUtils.LogI; import android.view.MotionEvent; diff --git a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/controlcenter/QQSGrid.kt b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/controlcenter/QQSGrid.kt index b3bd58af11..ac08357388 100644 --- a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/controlcenter/QQSGrid.kt +++ b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/controlcenter/QQSGrid.kt @@ -29,8 +29,8 @@ import com.sevtinge.hyperceiler.module.base.BaseHook class QQSGrid : BaseHook() { override fun init() { - val cols = mPrefsMap.getInt("system_control_center_old_qs_grid_columns", 5); - val colsHorizontal = mPrefsMap.getInt("system_control_center_old_qs_grid_columns_horizontal", 6); + val cols = mPrefsMap.getInt("system_control_center_old_qs_grid_columns", 5) + val colsHorizontal = mPrefsMap.getInt("system_control_center_old_qs_grid_columns_horizontal", 6) loadClass("com.android.systemui.qs.MiuiQuickQSPanel").methodFinder().first { name == "setMaxTiles" && parameterCount == 1 diff --git a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/controlcenter/QQSGridOld.java b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/controlcenter/QQSGridOld.java index 0a81d1d46b..082ee078d7 100644 --- a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/controlcenter/QQSGridOld.java +++ b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/controlcenter/QQSGridOld.java @@ -28,7 +28,6 @@ public void init() { int colsResId = switch (cols) { case 3 -> R.integer.quick_quick_settings_num_rows_3; case 4 -> R.integer.quick_quick_settings_num_rows_4; - case 5 -> R.integer.quick_quick_settings_num_rows_5; case 6 -> R.integer.quick_quick_settings_num_rows_6; case 7 -> R.integer.quick_quick_settings_num_rows_7; default -> R.integer.quick_quick_settings_num_rows_5; diff --git a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/controlcenter/QSGrid.kt b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/controlcenter/QSGrid.kt index fbd97a830a..72f1e7cd51 100644 --- a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/controlcenter/QSGrid.kt +++ b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/controlcenter/QSGrid.kt @@ -19,15 +19,11 @@ package com.sevtinge.hyperceiler.module.hook.systemui.controlcenter import android.content.res.Configuration -import android.view.View import android.view.ViewGroup - import com.github.kyuubiran.ezxhelper.ClassUtils.loadClass import com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook import com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder - import com.sevtinge.hyperceiler.module.base.BaseHook - import de.robv.android.xposed.XposedHelpers class QSGrid : BaseHook() { diff --git a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/lockscreen/ChargingCVP.kt b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/lockscreen/ChargingCVP.kt index 2ce33f0526..e31c2dc6a7 100644 --- a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/lockscreen/ChargingCVP.kt +++ b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/lockscreen/ChargingCVP.kt @@ -206,6 +206,7 @@ object ChargingCVP : BaseHook() { } + @SuppressLint("DefaultLocale") private fun getCVP(): String { // 获取电流信息 val batteryManager = diff --git a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/lockscreen/ClockDisplaySeconds.kt b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/lockscreen/ClockDisplaySeconds.kt index 3fdeac0cc6..d75ccbcf04 100644 --- a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/lockscreen/ClockDisplaySeconds.kt +++ b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/lockscreen/ClockDisplaySeconds.kt @@ -35,7 +35,10 @@ import com.sevtinge.hyperceiler.utils.getObjectFieldAs import de.robv.android.xposed.XC_MethodHook import java.lang.reflect.Method import java.text.SimpleDateFormat -import java.util.* +import java.util.Calendar +import java.util.Date +import java.util.Timer +import java.util.TimerTask object ClockDisplaySeconds : BaseHook() { private var nowTime: Date = Calendar.getInstance().time @@ -58,7 +61,7 @@ object ClockDisplaySeconds : BaseHook() { Handler(viewGroup.context.mainLooper).post(r) } } - Timer().scheduleAtFixedRate(T(), 1000 - System.currentTimeMillis() % 1000, 1000) + Timer().schedule(T(), 1000 - System.currentTimeMillis() % 1000, 1000) } catch (_: Exception) { } } diff --git a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/lockscreen/RemoveCamera.kt b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/lockscreen/RemoveCamera.kt index 00fa61ae54..e23f573b08 100644 --- a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/lockscreen/RemoveCamera.kt +++ b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/lockscreen/RemoveCamera.kt @@ -54,7 +54,7 @@ object RemoveCamera : BaseHook() { } } } else if (isMiuiVersion(14f) && isAndroidVersion(34)) { - newClass!!.methodFinder().first() { + newClass!!.methodFinder().first { name == "onFinishInflate" }.createHook { after { diff --git a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/statusbar/DisplayHardwareDetail.java b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/statusbar/DisplayHardwareDetail.java index de4dbdf0f6..d187052447 100644 --- a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/statusbar/DisplayHardwareDetail.java +++ b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/statusbar/DisplayHardwareDetail.java @@ -18,7 +18,7 @@ */ package com.sevtinge.hyperceiler.module.hook.systemui.statusbar; -import static com.sevtinge.hyperceiler.utils.api.LinQiqiApisKt.isNewNetworkStyle; +import static com.sevtinge.hyperceiler.utils.api.NekoQiqiApisKt.isNewNetworkStyle; import static com.sevtinge.hyperceiler.utils.devicesdk.AppUtilsKt.dp2px; import static com.sevtinge.hyperceiler.utils.devicesdk.SystemSDKKt.isMoreAndroidVersion; import static de.robv.android.xposed.XposedHelpers.callMethod; @@ -86,8 +86,8 @@ private String getSlotNameByType(int mIconType) { } static class TextIcon { - public boolean atRight; - public int iconType; + public final boolean atRight; + public final int iconType; public TextIcon(boolean mAtRight, int mIconType) { atRight = mAtRight; diff --git a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/statusbar/NotificationIconColumns.java b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/statusbar/NotificationIconColumns.java index 0946fb7670..70ea155195 100644 --- a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/statusbar/NotificationIconColumns.java +++ b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/statusbar/NotificationIconColumns.java @@ -33,7 +33,6 @@ import com.sevtinge.hyperceiler.module.base.BaseHook; -import de.robv.android.xposed.XposedBridge; import de.robv.android.xposed.XposedHelpers; public class NotificationIconColumns extends BaseHook { diff --git a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/statusbar/clock/TimeCustomization.kt b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/statusbar/clock/TimeCustomization.kt index 71cd9dd928..b819fba8d8 100644 --- a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/statusbar/clock/TimeCustomization.kt +++ b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/statusbar/clock/TimeCustomization.kt @@ -111,7 +111,7 @@ object TimeCustomization : BaseHook() { Handler(textV.context.mainLooper).post(r) } } - Timer().scheduleAtFixedRate( + Timer().schedule( T(), 1000 - System.currentTimeMillis() % 1000, 1000 ) } catch (_: Exception) { @@ -187,7 +187,7 @@ object TimeCustomization : BaseHook() { Handler(textV.context.mainLooper).post(r) } } - Timer().scheduleAtFixedRate( + Timer().schedule( T(), 1000 - System.currentTimeMillis() % 1000, 1000 ) } catch (_: Exception) { diff --git a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/statusbar/network/news/NewNetworkSpeed.kt b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/statusbar/network/news/NewNetworkSpeed.kt index 98c092fc4b..68a5b6fbfc 100644 --- a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/statusbar/network/news/NewNetworkSpeed.kt +++ b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/statusbar/network/news/NewNetworkSpeed.kt @@ -18,6 +18,7 @@ */ package com.sevtinge.hyperceiler.module.hook.systemui.statusbar.network.news +import android.annotation.SuppressLint import android.content.Context import android.net.ConnectivityManager import android.net.NetworkCapabilities @@ -96,6 +97,7 @@ object NewNetworkSpeed : BaseHook() { } // 网速计算与隐藏相关 + @SuppressLint("DefaultLocale") private fun humanReadableByteCount(ctx: Context, bytes: Long): String { return try { val modRes = getModuleRes(ctx) diff --git a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/statusbar/network/old/NetworkSpeed.kt b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/statusbar/network/old/NetworkSpeed.kt index 77e75ddd13..d1f0bd1323 100644 --- a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/statusbar/network/old/NetworkSpeed.kt +++ b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/statusbar/network/old/NetworkSpeed.kt @@ -18,6 +18,7 @@ */ package com.sevtinge.hyperceiler.module.hook.systemui.statusbar.network.old +import android.annotation.SuppressLint import android.content.Context import android.net.ConnectivityManager import android.net.NetworkCapabilities @@ -92,6 +93,7 @@ object NetworkSpeed : BaseHook() { } // 网速计算与隐藏相关 + @SuppressLint("DefaultLocale") private fun humanReadableByteCount(ctx: Context, bytes: Long): String { return try { val modRes = getModuleRes(ctx) diff --git a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/various/DialogBlur.java b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/various/DialogBlur.java index e6fe30caa5..7a31e10ef5 100644 --- a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/various/DialogBlur.java +++ b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/various/DialogBlur.java @@ -18,6 +18,7 @@ */ package com.sevtinge.hyperceiler.module.hook.various; +import android.os.Build; import android.view.View; import com.sevtinge.hyperceiler.module.base.BaseHook; @@ -27,7 +28,7 @@ public class DialogBlur extends BaseHook { - Class mDialogCls = findClassIfExists("miuix.appcompat.app.AlertController"); + final Class mDialogCls = findClassIfExists("miuix.appcompat.app.AlertController"); @Override public void init() { @@ -39,7 +40,9 @@ protected void after(MethodHookParam param) throws Throwable { if (mParentPanel != null) { /*new BlurUtils(mParentPanel);*/ - new BlurUtils(mParentPanel, "default"); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { + new BlurUtils(mParentPanel, "default"); + } } } }); diff --git a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/various/DialogGravity.java b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/various/DialogGravity.java index 60447f5837..35007cbd41 100644 --- a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/various/DialogGravity.java +++ b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/various/DialogGravity.java @@ -42,13 +42,13 @@ public class DialogGravity extends BaseHook { - public static Context mContext; - public static View mParentPanel = null; + public Context mContext; + public View mParentPanel = null; - Class mDialogCls = XposedHelpers.findClassIfExists("miuix.appcompat.app.AlertController", lpparam.classLoader); - Class mDialogParentPanelCls = XposedHelpers.findClassIfExists("miuix.internal.widget.DialogParentPanel", lpparam.classLoader); + final Class mDialogCls = XposedHelpers.findClassIfExists("miuix.appcompat.app.AlertController", lpparam.classLoader); + final Class mDialogParentPanelCls = XposedHelpers.findClassIfExists("miuix.internal.widget.DialogParentPanel", lpparam.classLoader); - List methodList = new LinkedList<>(); + final List methodList = new LinkedList<>(); @Override public void init() { diff --git a/app/src/main/java/com/sevtinge/hyperceiler/ui/SubPickerActivity.java b/app/src/main/java/com/sevtinge/hyperceiler/ui/SubPickerActivity.java index aeadc3eba3..b9c7950e72 100644 --- a/app/src/main/java/com/sevtinge/hyperceiler/ui/SubPickerActivity.java +++ b/app/src/main/java/com/sevtinge/hyperceiler/ui/SubPickerActivity.java @@ -19,7 +19,6 @@ package com.sevtinge.hyperceiler.ui; import android.content.Intent; -import android.os.Bundle; import com.sevtinge.hyperceiler.callback.IAppSelectCallback; import com.sevtinge.hyperceiler.ui.base.SettingsActivity; diff --git a/app/src/main/java/com/sevtinge/hyperceiler/ui/customhook/CustomHookConfigActivity.java b/app/src/main/java/com/sevtinge/hyperceiler/ui/customhook/CustomHookConfigActivity.java index 997143aa80..daf5551776 100644 --- a/app/src/main/java/com/sevtinge/hyperceiler/ui/customhook/CustomHookConfigActivity.java +++ b/app/src/main/java/com/sevtinge/hyperceiler/ui/customhook/CustomHookConfigActivity.java @@ -18,8 +18,6 @@ */ package com.sevtinge.hyperceiler.ui.customhook; -import android.os.Bundle; - import com.sevtinge.hyperceiler.R; import com.sevtinge.hyperceiler.ui.base.SettingsActivity; diff --git a/app/src/main/java/com/sevtinge/hyperceiler/ui/fragment/AboutFragment.java b/app/src/main/java/com/sevtinge/hyperceiler/ui/fragment/AboutFragment.java index 36c79dc737..d5bc0a6cd1 100644 --- a/app/src/main/java/com/sevtinge/hyperceiler/ui/fragment/AboutFragment.java +++ b/app/src/main/java/com/sevtinge/hyperceiler/ui/fragment/AboutFragment.java @@ -18,21 +18,21 @@ */ package com.sevtinge.hyperceiler.ui.fragment; -import static com.sevtinge.hyperceiler.utils.devicesdk.SystemSDKKt.isMoreHyperOSVersion; - import android.content.Intent; import android.net.Uri; + import com.sevtinge.hyperceiler.BuildConfig; import com.sevtinge.hyperceiler.R; -import com.sevtinge.hyperceiler.ui.fragment.base.SettingsPreferenceFragment; import com.sevtinge.hyperceiler.expansionpacks.utils.ClickCountsUtils; +import com.sevtinge.hyperceiler.ui.fragment.base.SettingsPreferenceFragment; + import moralnorm.preference.Preference; import moralnorm.preference.SwitchPreference; public class AboutFragment extends SettingsPreferenceFragment { private int lIIlIll = 100 >>> 7; - private int lIIlIlI = 100 >>> 6; + private final int lIIlIlI = 100 >>> 6; @Override public int getContentResId() { @@ -49,8 +49,7 @@ public void initPrefs() { lIIllII.setTitle(BuildConfig.VERSION_NAME + " | " + BuildConfig.BUILD_TYPE); //if (isMoreHyperOSVersion(1f)) lIIllII.setSummary(R.string.description_hyperos); else lIIllII.setSummary(R.string.description_miui); lIIllII.setOnPreferenceClickListener(lIIllll -> { - if (lIIllll instanceof SwitchPreference) { - SwitchPreference switchPreference = (SwitchPreference) lIIllll; + if (lIIllll instanceof SwitchPreference switchPreference) { switchPreference.setChecked(!switchPreference.isChecked()); lIIlIll++; @@ -80,18 +79,15 @@ public void initPrefs() { * 调用 joinQQGroup() 即可发起手Q客户端申请加群 * * @param key 由官网生成的key - * @return 返回true表示呼起手Q成功,返回false表示呼起失败 */ - private boolean joinQQGroup(String key) { + private void joinQQGroup(String key) { Intent intent = new Intent(); intent.setData(Uri.parse("mqqopensdkapi://bizAgent/qm/qr?url=http%3A%2F%2Fqm.qq.com%2Fcgi-bin%2Fqm%2Fqr%3Ffrom%3Dapp%26p%3Dandroid%26jump_from%3Dwebapi%26k%3D" + key)); try { startActivity(intent); - return true; } catch (Exception e) { // 未安装手Q或安装的版本不支持 - return false; } } } diff --git a/app/src/main/java/com/sevtinge/hyperceiler/ui/fragment/MainFragment.java b/app/src/main/java/com/sevtinge/hyperceiler/ui/fragment/MainFragment.java index 97ab0f02b6..40ad0083c6 100644 --- a/app/src/main/java/com/sevtinge/hyperceiler/ui/fragment/MainFragment.java +++ b/app/src/main/java/com/sevtinge/hyperceiler/ui/fragment/MainFragment.java @@ -30,7 +30,6 @@ import com.sevtinge.hyperceiler.utils.devicesdk.DeviceSDKKt; import com.sevtinge.hyperceiler.utils.devicesdk.SystemSDKKt; -import java.util.ArrayList; import java.util.Objects; import moralnorm.preference.Preference; diff --git a/app/src/main/java/com/sevtinge/hyperceiler/ui/fragment/MiLinkFragment.java b/app/src/main/java/com/sevtinge/hyperceiler/ui/fragment/MiLinkFragment.java index a5bb8bf68e..bc99350f82 100644 --- a/app/src/main/java/com/sevtinge/hyperceiler/ui/fragment/MiLinkFragment.java +++ b/app/src/main/java/com/sevtinge/hyperceiler/ui/fragment/MiLinkFragment.java @@ -18,15 +18,11 @@ */ package com.sevtinge.hyperceiler.ui.fragment; -import static com.sevtinge.hyperceiler.utils.api.VoyagerApisKt.isPad; -import static com.sevtinge.hyperceiler.utils.devicesdk.SystemSDKKt.isAndroidVersion; import static com.sevtinge.hyperceiler.utils.devicesdk.SystemSDKKt.isMoreHyperOSVersion; -import android.content.Intent; import android.view.View; import com.sevtinge.hyperceiler.R; -import com.sevtinge.hyperceiler.ui.SubPickerActivity; import com.sevtinge.hyperceiler.ui.base.BaseSettingsActivity; import com.sevtinge.hyperceiler.ui.fragment.base.SettingsPreferenceFragment; diff --git a/app/src/main/java/com/sevtinge/hyperceiler/ui/fragment/SystemSettingsFragment.java b/app/src/main/java/com/sevtinge/hyperceiler/ui/fragment/SystemSettingsFragment.java index ec1b1a75e9..7273326075 100644 --- a/app/src/main/java/com/sevtinge/hyperceiler/ui/fragment/SystemSettingsFragment.java +++ b/app/src/main/java/com/sevtinge/hyperceiler/ui/fragment/SystemSettingsFragment.java @@ -33,7 +33,6 @@ import com.sevtinge.hyperceiler.ui.fragment.base.SettingsPreferenceFragment; import com.sevtinge.hyperceiler.utils.log.AndroidLogUtils; -import moralnorm.preference.PreferenceCategory; import moralnorm.preference.SeekBarPreferenceEx; import moralnorm.preference.SwitchPreference; diff --git a/app/src/main/java/com/sevtinge/hyperceiler/ui/fragment/framework/OtherSettings.java b/app/src/main/java/com/sevtinge/hyperceiler/ui/fragment/framework/OtherSettings.java index 6afd3f593f..eaf4601842 100644 --- a/app/src/main/java/com/sevtinge/hyperceiler/ui/fragment/framework/OtherSettings.java +++ b/app/src/main/java/com/sevtinge/hyperceiler/ui/fragment/framework/OtherSettings.java @@ -116,16 +116,8 @@ public void initPrefs() { } public void initApp(ExecutorService executorService, Runnable runnable) { - executorService.submit(new Runnable() { - @Override - public void run() { - handler.post(new Runnable() { - @Override - public void run() { - runnable.run(); - } - }); - } + executorService.submit(() -> { + handler.post(runnable); }); } diff --git a/app/src/main/java/com/sevtinge/hyperceiler/ui/fragment/systemui/LockScreenSettings.java b/app/src/main/java/com/sevtinge/hyperceiler/ui/fragment/systemui/LockScreenSettings.java index 17f05d78be..646de25491 100644 --- a/app/src/main/java/com/sevtinge/hyperceiler/ui/fragment/systemui/LockScreenSettings.java +++ b/app/src/main/java/com/sevtinge/hyperceiler/ui/fragment/systemui/LockScreenSettings.java @@ -18,7 +18,7 @@ */ package com.sevtinge.hyperceiler.ui.fragment.systemui; -import static com.sevtinge.hyperceiler.utils.api.LinQiqiApisKt.isDeviceEncrypted; +import static com.sevtinge.hyperceiler.utils.api.NekoQiqiApisKt.isDeviceEncrypted; import static com.sevtinge.hyperceiler.utils.devicesdk.SystemSDKKt.isAndroidVersion; import static com.sevtinge.hyperceiler.utils.devicesdk.SystemSDKKt.isHyperOSVersion; import static com.sevtinge.hyperceiler.utils.devicesdk.SystemSDKKt.isMoreAndroidVersion; diff --git a/app/src/main/java/com/sevtinge/hyperceiler/ui/fragment/various/AOSPSettings.java b/app/src/main/java/com/sevtinge/hyperceiler/ui/fragment/various/AOSPSettings.java index a7b2d48c7a..425a2d59fe 100644 --- a/app/src/main/java/com/sevtinge/hyperceiler/ui/fragment/various/AOSPSettings.java +++ b/app/src/main/java/com/sevtinge/hyperceiler/ui/fragment/various/AOSPSettings.java @@ -18,8 +18,6 @@ */ package com.sevtinge.hyperceiler.ui.fragment.various; -import android.view.View; - import com.sevtinge.hyperceiler.R; import com.sevtinge.hyperceiler.ui.fragment.base.SettingsPreferenceFragment; diff --git a/app/src/main/java/com/sevtinge/hyperceiler/ui/various/LocationSimulationActivity.java b/app/src/main/java/com/sevtinge/hyperceiler/ui/various/LocationSimulationActivity.java index 4eac9d01af..37222f7c17 100644 --- a/app/src/main/java/com/sevtinge/hyperceiler/ui/various/LocationSimulationActivity.java +++ b/app/src/main/java/com/sevtinge/hyperceiler/ui/various/LocationSimulationActivity.java @@ -24,7 +24,6 @@ import android.view.MenuItem; import androidx.annotation.NonNull; -import androidx.fragment.app.Fragment; import com.sevtinge.hyperceiler.R; import com.sevtinge.hyperceiler.ui.base.SettingsActivity; diff --git a/app/src/main/java/com/sevtinge/hyperceiler/utils/CtaUtils.java b/app/src/main/java/com/sevtinge/hyperceiler/utils/CtaUtils.java index 05550241c9..4c23e364e6 100644 --- a/app/src/main/java/com/sevtinge/hyperceiler/utils/CtaUtils.java +++ b/app/src/main/java/com/sevtinge/hyperceiler/utils/CtaUtils.java @@ -18,7 +18,6 @@ */ package com.sevtinge.hyperceiler.utils; -import android.annotation.SuppressLint; import android.app.Activity; import android.content.Context; import android.content.Intent; diff --git a/app/src/main/java/com/sevtinge/hyperceiler/utils/LogcatHelper.java b/app/src/main/java/com/sevtinge/hyperceiler/utils/LogcatHelper.java index dce32fb169..d8b951f21b 100644 --- a/app/src/main/java/com/sevtinge/hyperceiler/utils/LogcatHelper.java +++ b/app/src/main/java/com/sevtinge/hyperceiler/utils/LogcatHelper.java @@ -84,7 +84,7 @@ private static class LogDumper extends Thread { private Process logcatProc; private BufferedReader mReader = null; private boolean mRunning = true; - String cmds = null; + String cmds; private final String mPID; private FileOutputStream out = null; diff --git a/app/src/main/java/com/sevtinge/hyperceiler/utils/api/LinQiqiApis.kt b/app/src/main/java/com/sevtinge/hyperceiler/utils/api/NekoQiqiApis.kt similarity index 99% rename from app/src/main/java/com/sevtinge/hyperceiler/utils/api/LinQiqiApis.kt rename to app/src/main/java/com/sevtinge/hyperceiler/utils/api/NekoQiqiApis.kt index 61fb67ecf4..e09600f648 100644 --- a/app/src/main/java/com/sevtinge/hyperceiler/utils/api/LinQiqiApis.kt +++ b/app/src/main/java/com/sevtinge/hyperceiler/utils/api/NekoQiqiApis.kt @@ -152,7 +152,7 @@ fun isNewNetworkStyle(): Boolean { "com.android.systemui.statusbar.views.NetworkSpeedView", EzXHelper.classLoader ) return if (networkSpeedViewCls != null) { - LinearLayout::class.java.isAssignableFrom(networkSpeedViewCls); + LinearLayout::class.java.isAssignableFrom(networkSpeedViewCls) } else { false } diff --git a/app/src/main/java/com/sevtinge/hyperceiler/utils/devicesdk/AppUtils.kt b/app/src/main/java/com/sevtinge/hyperceiler/utils/devicesdk/AppUtils.kt index c9c3b10265..9c67346cb3 100644 --- a/app/src/main/java/com/sevtinge/hyperceiler/utils/devicesdk/AppUtils.kt +++ b/app/src/main/java/com/sevtinge/hyperceiler/utils/devicesdk/AppUtils.kt @@ -32,7 +32,7 @@ import com.github.kyuubiran.ezxhelper.EzXHelper import com.sevtinge.hyperceiler.utils.PropUtils import com.sevtinge.hyperceiler.utils.prefs.PrefsUtils.getSharedPrefs import moralnorm.internal.utils.DeviceHelper -import java.util.* +import java.util.Locale fun dp2px(dpValue: Float): Int = TypedValue.applyDimension( TypedValue.COMPLEX_UNIT_DIP, dpValue, EzXHelper.appContext.resources.displayMetrics @@ -63,7 +63,7 @@ fun checkVersionName(): String = getPackageInfoCompat(EzXHelper.appContext.packa fun isAlpha(): Boolean = getPackageInfoCompat(EzXHelper.appContext.packageName).versionName.contains("ALPHA", ignoreCase = true) -fun isTablet(): Boolean = Resources.getSystem().getConfiguration().smallestScreenWidthDp >= 600 +fun isTablet(): Boolean = Resources.getSystem().configuration.smallestScreenWidthDp >= 600 fun isPadDevice(): Boolean = isTablet() || DeviceHelper.isFoldDevice() diff --git a/app/src/main/java/com/sevtinge/hyperceiler/utils/devicesdk/SystemSDK.kt b/app/src/main/java/com/sevtinge/hyperceiler/utils/devicesdk/SystemSDK.kt index 54903a8d05..cc9b748de0 100644 --- a/app/src/main/java/com/sevtinge/hyperceiler/utils/devicesdk/SystemSDK.kt +++ b/app/src/main/java/com/sevtinge/hyperceiler/utils/devicesdk/SystemSDK.kt @@ -45,7 +45,7 @@ fun isAndroidVersion(versioncode: Int): Boolean{ 33 -> (getAndroidVersion() == Build.VERSION_CODES.TIRAMISU) 34 -> (getAndroidVersion() == Build.VERSION_CODES.UPSIDE_DOWN_CAKE) else -> false - }; + } return result } @@ -76,7 +76,7 @@ fun isMiuiVersion(versioncode: Float): Boolean{ 14f -> (getProp("ro.miui.ui.version.name") == "V140") 15f -> (getProp("ro.miui.ui.version.name") == "V150") else -> false - }; + } return result } @@ -95,7 +95,7 @@ fun isHyperOSVersion(versioncode: Float): Boolean{ val result: Boolean = when (versioncode) { 1f -> (getProp("ro.mi.os.version.name") == "OS1.0") else -> false - }; + } return result } diff --git a/app/src/main/java/com/sevtinge/hyperceiler/utils/log/LogManager.java b/app/src/main/java/com/sevtinge/hyperceiler/utils/log/LogManager.java index 65bc6ff766..4e2699c0c2 100644 --- a/app/src/main/java/com/sevtinge/hyperceiler/utils/log/LogManager.java +++ b/app/src/main/java/com/sevtinge/hyperceiler/utils/log/LogManager.java @@ -23,21 +23,14 @@ import com.sevtinge.hyperceiler.BuildConfig; public class LogManager { - public static int logLevel = getLogLevel(); + public static final int logLevel = getLogLevel(); public static int getLogLevel() { int level = mPrefsMap.getStringAsInt("log_level", 2); - switch (BuildConfig.BUILD_TYPE) { - case "canary" -> { - return level == 0 ? 3 : 4; - } - /*case "debug" -> { - return 4; - }*/ - default -> { - return level; - } + if (BuildConfig.BUILD_TYPE.equals("canary")) { + return level == 0 ? 3 : 4; } + return level; } public static String logLevelDesc() { diff --git a/app/src/main/java/com/sevtinge/hyperceiler/view/WeatherView.kt b/app/src/main/java/com/sevtinge/hyperceiler/view/WeatherView.kt index e540923214..5f52b314f3 100644 --- a/app/src/main/java/com/sevtinge/hyperceiler/view/WeatherView.kt +++ b/app/src/main/java/com/sevtinge/hyperceiler/view/WeatherView.kt @@ -33,18 +33,16 @@ class WeatherView(context: Context?, private val showCity: Boolean) : TextView(c private val mContext: Context private val weatherUri = Uri.parse("content://weather/weather") - private val mHandler: Handler + private val mHandler: Handler = object : Handler(Looper.getMainLooper()) { + override fun handleMessage(message: Message) { + val str = message.obj as String + this@WeatherView.text = if (TextUtils.isEmpty(str)) " " else str + } + } private val mWeatherObserver: ContentObserver? private val mWeatherRunnable: WeatherRunnable init { - mHandler = - object : Handler(Looper.getMainLooper()) { - override fun handleMessage(message: Message) { - val str = message.obj as String - this@WeatherView.text = if (TextUtils.isEmpty(str)) " " else str - } - } mWeatherObserver = WeatherContentObserver(mHandler) mContext = context!! mWeatherRunnable = WeatherRunnable() diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index 41686cec54..eb50d03d39 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -5,7 +5,6 @@ android com.android.browser com.android.camera - com.android.deskclock com.android.externalstorage com.android.fileexplorer com.android.incallui @@ -39,9 +38,7 @@ com.miui.notes com.miui.packageinstaller com.miui.personalassistant - com.miui.player com.miui.powerkeeper - com.miui.rom com.miui.screenrecorder com.miui.screenshot com.miui.securityadd @@ -54,7 +51,6 @@ com.xiaomi.barrage com.xiaomi.joyose com.xiaomi.market - com.xiaomi.mirror com.xiaomi.misettings com.xiaomi.mtb com.xiaomi.NetworkBoost diff --git a/imgs/icon.png b/imgs/icon.png index a26b61b66b65cc302bf0e2541d7743fab82091aa..e2b8175c2750c9a2b4978f50cc4aff64c287d71d 100644 GIT binary patch literal 14449 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 F{{v2?HH82G