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