From 734145cf502c715b4b7e19860dd73df553fdb32f Mon Sep 17 00:00:00 2001 From: xzakota <51871051+xzakota@users.noreply.github.com> Date: Tue, 4 Feb 2025 15:49:46 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E9=94=81=E5=B1=8F=E6=89=8B=E7=94=B5?= =?UTF-8?q?=E7=AD=92=E6=8C=89=E9=92=AE=20(#1114)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: 铃柒柒 --- .github/workflows/ci_build.yml | 4 +- .../module/app/SystemUI/Pad/SystemUiU.java | 34 ++-- .../module/app/SystemUI/Pad/SystemUiV.java | 32 ++-- .../module/app/SystemUI/Phone/SystemUiU.java | 34 ++-- .../module/app/SystemUI/Phone/SystemUiV.java | 35 ++-- .../hook/systemui/ChargeAnimationStyle.java | 119 ------------- .../module/hook/systemui/Dependency.kt | 65 ------- .../hook/systemui/InterfacesImplManager.kt | 29 --- .../hook/systemui/base/api/ActivityStarter.kt | 12 ++ .../systemui/base/api/BaseReflectObject.kt | 5 + .../hook/systemui/base/api/Dependency.kt | 65 +++++++ .../systemui/base/api/FlashlightController.kt | 74 ++++++++ .../module/hook/systemui/base/api/MiuiStub.kt | 69 ++++++++ .../hook/systemui/base/lockscreen/Keyguard.kt | 16 ++ .../controlcenter/ControlCenterStyle.kt | 19 +- .../hook/systemui/lockscreen/BlurButton.kt | 32 ++-- .../lockscreen/CustomizeBottomButton.kt | 165 ++++++++++++++++++ .../hook/systemui/lockscreen/RemoveCamera.kt | 7 +- .../systemui/lockscreen/RemoveSmartScreen.kt | 21 +-- .../systemui/{ => other}/BrightnessPct.java | 2 +- .../systemui/{ => other}/DisableBottomBar.kt | 6 +- .../{ => other}/DisableInfinitymodeGesture.kt | 6 +- .../{ => other}/DisableMiuiMultiWinSwitch.kt | 6 +- .../systemui/{ => other}/EnableVolumeBlur.kt | 2 +- .../{ => other}/MonetThemeOverlay.java | 4 +- .../{ => other}/NotificationFreeform.java | 4 +- .../{ => other}/RemoveMiuiMultiWinSwitch.kt | 6 +- .../systemui/{ => other}/VolumeTimer.java | 2 +- .../{ => other}/VolumeTimerValuesHook.java | 2 +- .../hook/systemui/plugin/NewPluginHelperKt.kt | 4 +- .../statusbar/model/DualRowSignalHookV.kt | 47 +++-- .../statusbar/model/MobilePublicHookV.kt | 8 +- .../statusbar/model/MobileTypeSingle2Hook.kt | 45 +++-- .../ui/app/main/HomePageFragment.java | 4 +- .../hooker/systemui/LockScreenSettings.java | 12 +- .../hyperceiler/utils/KotlinXposedHelper.kt | 25 +-- .../hyperceiler/utils/extension/Context.kt | 24 +++ .../sevtinge/hyperceiler/view/WeatherView.kt | 13 +- .../res/drawable/ic_flashlight_off_filled.xml | 13 ++ .../res/drawable/ic_flashlight_on_filled.xml | 13 ++ app/src/main/res/values-zh-rCN/strings.xml | 2 + app/src/main/res/values/arrays.xml | 12 ++ app/src/main/res/values/strings.xml | 2 + .../main/res/xml/system_ui_lock_screen.xml | 17 +- 44 files changed, 695 insertions(+), 423 deletions(-) delete mode 100644 app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/ChargeAnimationStyle.java delete mode 100644 app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/Dependency.kt delete mode 100644 app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/InterfacesImplManager.kt create mode 100644 app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/base/api/ActivityStarter.kt create mode 100644 app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/base/api/BaseReflectObject.kt create mode 100644 app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/base/api/Dependency.kt create mode 100644 app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/base/api/FlashlightController.kt create mode 100644 app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/base/api/MiuiStub.kt create mode 100644 app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/base/lockscreen/Keyguard.kt create mode 100644 app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/lockscreen/CustomizeBottomButton.kt rename app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/{ => other}/BrightnessPct.java (97%) rename app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/{ => other}/DisableBottomBar.kt (89%) rename app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/{ => other}/DisableInfinitymodeGesture.kt (79%) rename app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/{ => other}/DisableMiuiMultiWinSwitch.kt (89%) rename app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/{ => other}/EnableVolumeBlur.kt (98%) rename app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/{ => other}/MonetThemeOverlay.java (93%) rename app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/{ => other}/NotificationFreeform.java (90%) rename app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/{ => other}/RemoveMiuiMultiWinSwitch.kt (89%) rename app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/{ => other}/VolumeTimer.java (94%) rename app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/{ => other}/VolumeTimerValuesHook.java (99%) create mode 100644 app/src/main/java/com/sevtinge/hyperceiler/utils/extension/Context.kt create mode 100644 app/src/main/res/drawable/ic_flashlight_off_filled.xml create mode 100644 app/src/main/res/drawable/ic_flashlight_on_filled.xml diff --git a/.github/workflows/ci_build.yml b/.github/workflows/ci_build.yml index 8949c4c589..1d3d3ebd74 100644 --- a/.github/workflows/ci_build.yml +++ b/.github/workflows/ci_build.yml @@ -102,10 +102,10 @@ jobs: path: ${{ env.APK_FILE }} compression-level: 9 - push_to_canary_channel: + push_to_canary_group: if: github.event_name == 'push' && github.ref == 'refs/heads/main' && github.ref_type != 'tag' && !contains(github.event.head_commit.message, '[skp]') && !contains(github.event.head_commit.message, 's#') runs-on: ubuntu-latest - name: Push to Canary Channel + name: Push to Canary Group needs: build_app steps: - name: Download Artifacts diff --git a/app/src/main/java/com/sevtinge/hyperceiler/module/app/SystemUI/Pad/SystemUiU.java b/app/src/main/java/com/sevtinge/hyperceiler/module/app/SystemUI/Pad/SystemUiU.java index 2b4ce51606..217b0306ad 100644 --- a/app/src/main/java/com/sevtinge/hyperceiler/module/app/SystemUI/Pad/SystemUiU.java +++ b/app/src/main/java/com/sevtinge/hyperceiler/module/app/SystemUI/Pad/SystemUiU.java @@ -23,26 +23,14 @@ import com.sevtinge.hyperceiler.module.hook.systemui.AllowManageAllNotifications; import com.sevtinge.hyperceiler.module.hook.systemui.AutoCollapse; import com.sevtinge.hyperceiler.module.hook.systemui.AutoSEffSwitchForSystemUi; -import com.sevtinge.hyperceiler.module.hook.systemui.BrightnessPct; -import com.sevtinge.hyperceiler.module.hook.systemui.ChargeAnimationStyle; -import com.sevtinge.hyperceiler.module.hook.systemui.DisableBottomBar; -import com.sevtinge.hyperceiler.module.hook.systemui.DisableInfinitymodeGesture; -import com.sevtinge.hyperceiler.module.hook.systemui.DisableMiuiMultiWinSwitch; import com.sevtinge.hyperceiler.module.hook.systemui.DisableTransparent; -import com.sevtinge.hyperceiler.module.hook.systemui.MonetThemeOverlay; import com.sevtinge.hyperceiler.module.hook.systemui.NotificationFix; -import com.sevtinge.hyperceiler.module.hook.systemui.NotificationFreeform; -import com.sevtinge.hyperceiler.module.hook.systemui.RemoveMiuiMultiWinSwitch; -import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.OldWeather; -import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.media.MediaPicture; -import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.media.SquigglyProgress; import com.sevtinge.hyperceiler.module.hook.systemui.StatusBarActions; import com.sevtinge.hyperceiler.module.hook.systemui.StickyFloatingWindowsForSystemUI; import com.sevtinge.hyperceiler.module.hook.systemui.UiLockApp; import com.sevtinge.hyperceiler.module.hook.systemui.UnimportantNotification; import com.sevtinge.hyperceiler.module.hook.systemui.UnlockClipboard; import com.sevtinge.hyperceiler.module.hook.systemui.UnlockCustomActions; -import com.sevtinge.hyperceiler.module.hook.systemui.VolumeTimerValuesHook; import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.AllowAllThemesNotificationBlur; import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.CompactNotificationsHook; import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.ControlCenterStyle; @@ -53,15 +41,11 @@ import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.FlashLight; import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.GmsTile; import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.HideDelimiter; -import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.media.MediaButton; -import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.media.MediaControlPanelBackgroundMix; -import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.media.MediaControlPanelTimeViewTextSize; -import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.media.MediaSeekBar; -import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.media.MediaSeekBarColor; import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.MuteVisibleNotifications; import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.NotificationImportanceHyperOSFix; import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.NotificationRowMenu; import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.NotificationWeather; +import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.OldWeather; import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.QQSGrid; import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.QSColor; import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.QSGrid; @@ -74,6 +58,13 @@ import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.SunlightModeHigh; import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.SwitchCCAndNotification; import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.TaplusTile; +import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.media.MediaButton; +import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.media.MediaControlPanelBackgroundMix; +import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.media.MediaControlPanelTimeViewTextSize; +import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.media.MediaPicture; +import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.media.MediaSeekBar; +import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.media.MediaSeekBarColor; +import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.media.SquigglyProgress; import com.sevtinge.hyperceiler.module.hook.systemui.lockscreen.AllowThirdLockScreenUseFace; import com.sevtinge.hyperceiler.module.hook.systemui.lockscreen.BlockEditor; import com.sevtinge.hyperceiler.module.hook.systemui.lockscreen.BlurButton; @@ -92,6 +83,14 @@ import com.sevtinge.hyperceiler.module.hook.systemui.navigation.HideNavigationBar; import com.sevtinge.hyperceiler.module.hook.systemui.navigation.NavigationCustom; import com.sevtinge.hyperceiler.module.hook.systemui.navigation.RotationButton; +import com.sevtinge.hyperceiler.module.hook.systemui.other.BrightnessPct; +import com.sevtinge.hyperceiler.module.hook.systemui.other.DisableBottomBar; +import com.sevtinge.hyperceiler.module.hook.systemui.other.DisableInfinitymodeGesture; +import com.sevtinge.hyperceiler.module.hook.systemui.other.DisableMiuiMultiWinSwitch; +import com.sevtinge.hyperceiler.module.hook.systemui.other.MonetThemeOverlay; +import com.sevtinge.hyperceiler.module.hook.systemui.other.NotificationFreeform; +import com.sevtinge.hyperceiler.module.hook.systemui.other.RemoveMiuiMultiWinSwitch; +import com.sevtinge.hyperceiler.module.hook.systemui.other.VolumeTimerValuesHook; import com.sevtinge.hyperceiler.module.hook.systemui.plugin.NewPluginHelperKt; import com.sevtinge.hyperceiler.module.hook.systemui.statusbar.BlurEnable; import com.sevtinge.hyperceiler.module.hook.systemui.statusbar.DoubleTapToSleep; @@ -132,7 +131,6 @@ public void handleLoadPackage() { /*initHook(new NewPluginHelper()); initHook(FocusNotifLyricPluginHelper.INSTANCE, mPrefsMap.getBoolean("system_ui_statusbar_music_switch"));*/ // initHook(Island.INSTANCE, true); // 灵动岛 - initHook(new ChargeAnimationStyle(), mPrefsMap.getStringAsInt("system_ui_charge_animation_style", 0) > 0); // initHook(DisableChargeAnimation.INSTANCE); // 小窗 diff --git a/app/src/main/java/com/sevtinge/hyperceiler/module/app/SystemUI/Pad/SystemUiV.java b/app/src/main/java/com/sevtinge/hyperceiler/module/app/SystemUI/Pad/SystemUiV.java index 3fd304c463..3fbb5fd5c7 100644 --- a/app/src/main/java/com/sevtinge/hyperceiler/module/app/SystemUI/Pad/SystemUiV.java +++ b/app/src/main/java/com/sevtinge/hyperceiler/module/app/SystemUI/Pad/SystemUiV.java @@ -24,18 +24,8 @@ import com.sevtinge.hyperceiler.module.hook.systemui.AllowManageAllNotifications; import com.sevtinge.hyperceiler.module.hook.systemui.AutoCollapse; import com.sevtinge.hyperceiler.module.hook.systemui.AutoSEffSwitchForSystemUi; -import com.sevtinge.hyperceiler.module.hook.systemui.BrightnessPct; -import com.sevtinge.hyperceiler.module.hook.systemui.DisableBottomBar; -import com.sevtinge.hyperceiler.module.hook.systemui.DisableInfinitymodeGesture; -import com.sevtinge.hyperceiler.module.hook.systemui.DisableMiuiMultiWinSwitch; import com.sevtinge.hyperceiler.module.hook.systemui.DisableTransparent; -import com.sevtinge.hyperceiler.module.hook.systemui.MonetThemeOverlay; import com.sevtinge.hyperceiler.module.hook.systemui.NotificationFix; -import com.sevtinge.hyperceiler.module.hook.systemui.NotificationFreeform; -import com.sevtinge.hyperceiler.module.hook.systemui.RemoveMiuiMultiWinSwitch; -import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.OldWeather; -import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.media.MediaPicture; -import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.media.SquigglyProgress; import com.sevtinge.hyperceiler.module.hook.systemui.StatusBarActions; import com.sevtinge.hyperceiler.module.hook.systemui.StickyFloatingWindowsForSystemUI; import com.sevtinge.hyperceiler.module.hook.systemui.UiLockApp; @@ -51,17 +41,13 @@ import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.FixTilesList; import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.GmsTile; import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.HideDelimiter; -import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.media.MediaButton; -import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.media.MediaControlPanelBackgroundMix; -import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.media.MediaControlPanelTimeViewTextSize; -import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.media.MediaSeekBar; -import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.media.MediaSeekBarColor; import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.MuteVisibleNotifications; import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.NewFlashLight; import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.NotificationColor; import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.NotificationImportanceHyperOSFix; import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.NotificationRowMenu; import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.NotificationWeather; +import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.OldWeather; import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.QQSGrid; import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.QSColor; import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.QSGrid; @@ -74,6 +60,13 @@ import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.SunlightModeHigh; import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.SwitchCCAndNotification; import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.TaplusTile; +import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.media.MediaButton; +import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.media.MediaControlPanelBackgroundMix; +import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.media.MediaControlPanelTimeViewTextSize; +import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.media.MediaPicture; +import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.media.MediaSeekBar; +import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.media.MediaSeekBarColor; +import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.media.SquigglyProgress; import com.sevtinge.hyperceiler.module.hook.systemui.lockscreen.AllowThirdLockScreenUseFace; import com.sevtinge.hyperceiler.module.hook.systemui.lockscreen.BlurButton; import com.sevtinge.hyperceiler.module.hook.systemui.lockscreen.ChargingCVP; @@ -85,12 +78,18 @@ import com.sevtinge.hyperceiler.module.hook.systemui.lockscreen.LockScreenDoubleTapToSleep; import com.sevtinge.hyperceiler.module.hook.systemui.lockscreen.NoPassword; import com.sevtinge.hyperceiler.module.hook.systemui.lockscreen.RemoveCamera; -import com.sevtinge.hyperceiler.module.hook.systemui.lockscreen.RemoveSmartScreen; import com.sevtinge.hyperceiler.module.hook.systemui.lockscreen.ScramblePIN; import com.sevtinge.hyperceiler.module.hook.systemui.navigation.HandleLineCustom; import com.sevtinge.hyperceiler.module.hook.systemui.navigation.HideNavigationBar; import com.sevtinge.hyperceiler.module.hook.systemui.navigation.NavigationCustom; import com.sevtinge.hyperceiler.module.hook.systemui.navigation.RotationButton; +import com.sevtinge.hyperceiler.module.hook.systemui.other.BrightnessPct; +import com.sevtinge.hyperceiler.module.hook.systemui.other.DisableBottomBar; +import com.sevtinge.hyperceiler.module.hook.systemui.other.DisableInfinitymodeGesture; +import com.sevtinge.hyperceiler.module.hook.systemui.other.DisableMiuiMultiWinSwitch; +import com.sevtinge.hyperceiler.module.hook.systemui.other.MonetThemeOverlay; +import com.sevtinge.hyperceiler.module.hook.systemui.other.NotificationFreeform; +import com.sevtinge.hyperceiler.module.hook.systemui.other.RemoveMiuiMultiWinSwitch; import com.sevtinge.hyperceiler.module.hook.systemui.plugin.NewPluginHelperKt; import com.sevtinge.hyperceiler.module.hook.systemui.statusbar.BlurEnable; import com.sevtinge.hyperceiler.module.hook.systemui.statusbar.DoubleTapToSleep; @@ -258,7 +257,6 @@ public void handleLoadPackage() { initHook(new ScramblePIN(), mPrefsMap.getBoolean("system_ui_lock_screen_scramble_pin")); initHook(ChargingCVP.INSTANCE, mPrefsMap.getBoolean("system_ui_lock_screen_show_charging_cv")); initHook(RemoveCamera.INSTANCE, mPrefsMap.getBoolean("system_ui_lock_screen_hide_camera")); - initHook(RemoveSmartScreen.INSTANCE, mPrefsMap.getBoolean("system_ui_lock_screen_hide_smart_screen")); initHook(NoPassword.INSTANCE, mPrefsMap.getBoolean("system_ui_lock_screen_password_free")); initHook(LockScreenDoubleTapToSleep.INSTANCE, mPrefsMap.getBoolean("system_ui_lock_screen_double_lock")); initHook(HideLockscreenZenMode.INSTANCE, mPrefsMap.getBoolean("system_ui_lock_screen_not_disturb_mode")); diff --git a/app/src/main/java/com/sevtinge/hyperceiler/module/app/SystemUI/Phone/SystemUiU.java b/app/src/main/java/com/sevtinge/hyperceiler/module/app/SystemUI/Phone/SystemUiU.java index 334ca6cd5e..602d53150a 100644 --- a/app/src/main/java/com/sevtinge/hyperceiler/module/app/SystemUI/Phone/SystemUiU.java +++ b/app/src/main/java/com/sevtinge/hyperceiler/module/app/SystemUI/Phone/SystemUiU.java @@ -23,26 +23,14 @@ import com.sevtinge.hyperceiler.module.hook.systemui.AllowManageAllNotifications; import com.sevtinge.hyperceiler.module.hook.systemui.AutoCollapse; import com.sevtinge.hyperceiler.module.hook.systemui.AutoSEffSwitchForSystemUi; -import com.sevtinge.hyperceiler.module.hook.systemui.BrightnessPct; -import com.sevtinge.hyperceiler.module.hook.systemui.ChargeAnimationStyle; -import com.sevtinge.hyperceiler.module.hook.systemui.DisableBottomBar; -import com.sevtinge.hyperceiler.module.hook.systemui.DisableInfinitymodeGesture; -import com.sevtinge.hyperceiler.module.hook.systemui.DisableMiuiMultiWinSwitch; import com.sevtinge.hyperceiler.module.hook.systemui.DisableTransparent; -import com.sevtinge.hyperceiler.module.hook.systemui.MonetThemeOverlay; import com.sevtinge.hyperceiler.module.hook.systemui.NotificationFix; -import com.sevtinge.hyperceiler.module.hook.systemui.NotificationFreeform; -import com.sevtinge.hyperceiler.module.hook.systemui.RemoveMiuiMultiWinSwitch; -import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.OldWeather; -import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.media.MediaPicture; -import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.media.SquigglyProgress; import com.sevtinge.hyperceiler.module.hook.systemui.StatusBarActions; import com.sevtinge.hyperceiler.module.hook.systemui.StickyFloatingWindowsForSystemUI; import com.sevtinge.hyperceiler.module.hook.systemui.UiLockApp; import com.sevtinge.hyperceiler.module.hook.systemui.UnimportantNotification; import com.sevtinge.hyperceiler.module.hook.systemui.UnlockClipboard; import com.sevtinge.hyperceiler.module.hook.systemui.UnlockCustomActions; -import com.sevtinge.hyperceiler.module.hook.systemui.VolumeTimerValuesHook; import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.AllowAllThemesNotificationBlur; import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.CompactNotificationsHook; import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.ControlCenterStyle; @@ -53,15 +41,11 @@ import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.FlashLight; import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.GmsTile; import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.HideDelimiter; -import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.media.MediaButton; -import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.media.MediaControlPanelBackgroundMix; -import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.media.MediaControlPanelTimeViewTextSize; -import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.media.MediaSeekBar; -import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.media.MediaSeekBarColor; import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.MuteVisibleNotifications; import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.NotificationImportanceHyperOSFix; import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.NotificationRowMenu; import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.NotificationWeather; +import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.OldWeather; import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.QQSGrid; import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.QSColor; import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.QSGrid; @@ -74,6 +58,13 @@ import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.SunlightModeHigh; import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.SwitchCCAndNotification; import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.TaplusTile; +import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.media.MediaButton; +import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.media.MediaControlPanelBackgroundMix; +import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.media.MediaControlPanelTimeViewTextSize; +import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.media.MediaPicture; +import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.media.MediaSeekBar; +import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.media.MediaSeekBarColor; +import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.media.SquigglyProgress; import com.sevtinge.hyperceiler.module.hook.systemui.lockscreen.AllowThirdLockScreenUseFace; import com.sevtinge.hyperceiler.module.hook.systemui.lockscreen.BlockEditor; import com.sevtinge.hyperceiler.module.hook.systemui.lockscreen.BlurButton; @@ -92,6 +83,14 @@ import com.sevtinge.hyperceiler.module.hook.systemui.navigation.HideNavigationBar; import com.sevtinge.hyperceiler.module.hook.systemui.navigation.NavigationCustom; import com.sevtinge.hyperceiler.module.hook.systemui.navigation.RotationButton; +import com.sevtinge.hyperceiler.module.hook.systemui.other.BrightnessPct; +import com.sevtinge.hyperceiler.module.hook.systemui.other.DisableBottomBar; +import com.sevtinge.hyperceiler.module.hook.systemui.other.DisableInfinitymodeGesture; +import com.sevtinge.hyperceiler.module.hook.systemui.other.DisableMiuiMultiWinSwitch; +import com.sevtinge.hyperceiler.module.hook.systemui.other.MonetThemeOverlay; +import com.sevtinge.hyperceiler.module.hook.systemui.other.NotificationFreeform; +import com.sevtinge.hyperceiler.module.hook.systemui.other.RemoveMiuiMultiWinSwitch; +import com.sevtinge.hyperceiler.module.hook.systemui.other.VolumeTimerValuesHook; import com.sevtinge.hyperceiler.module.hook.systemui.plugin.NewPluginHelperKt; import com.sevtinge.hyperceiler.module.hook.systemui.statusbar.BlurEnable; import com.sevtinge.hyperceiler.module.hook.systemui.statusbar.DoubleTapToSleep; @@ -130,7 +129,6 @@ public void handleLoadPackage() { // PluginHelper initHook(NewPluginHelperKt.INSTANCE); // initHook(Island.INSTANCE, true); // 灵动岛 - initHook(new ChargeAnimationStyle(), mPrefsMap.getStringAsInt("system_ui_charge_animation_style", 0) > 0); // 小窗 initHook(new NotificationFreeform(), mPrefsMap.getBoolean("system_ui_notification_freeform")); diff --git a/app/src/main/java/com/sevtinge/hyperceiler/module/app/SystemUI/Phone/SystemUiV.java b/app/src/main/java/com/sevtinge/hyperceiler/module/app/SystemUI/Phone/SystemUiV.java index cbb8b2c43f..9038472111 100644 --- a/app/src/main/java/com/sevtinge/hyperceiler/module/app/SystemUI/Phone/SystemUiV.java +++ b/app/src/main/java/com/sevtinge/hyperceiler/module/app/SystemUI/Phone/SystemUiV.java @@ -24,25 +24,16 @@ import com.sevtinge.hyperceiler.module.hook.systemui.AllowManageAllNotifications; import com.sevtinge.hyperceiler.module.hook.systemui.AutoCollapse; import com.sevtinge.hyperceiler.module.hook.systemui.AutoSEffSwitchForSystemUi; -import com.sevtinge.hyperceiler.module.hook.systemui.BrightnessPct; -import com.sevtinge.hyperceiler.module.hook.systemui.DisableBottomBar; -import com.sevtinge.hyperceiler.module.hook.systemui.DisableInfinitymodeGesture; -import com.sevtinge.hyperceiler.module.hook.systemui.DisableMiuiMultiWinSwitch; import com.sevtinge.hyperceiler.module.hook.systemui.DisableTransparent; import com.sevtinge.hyperceiler.module.hook.systemui.FuckStatusbarGestures; -import com.sevtinge.hyperceiler.module.hook.systemui.MonetThemeOverlay; import com.sevtinge.hyperceiler.module.hook.systemui.NotificationFix; -import com.sevtinge.hyperceiler.module.hook.systemui.NotificationFreeform; -import com.sevtinge.hyperceiler.module.hook.systemui.RemoveMiuiMultiWinSwitch; -import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.OldWeather; -import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.media.MediaPicture; -import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.media.SquigglyProgress; import com.sevtinge.hyperceiler.module.hook.systemui.StatusBarActions; import com.sevtinge.hyperceiler.module.hook.systemui.StickyFloatingWindowsForSystemUI; import com.sevtinge.hyperceiler.module.hook.systemui.UiLockApp; import com.sevtinge.hyperceiler.module.hook.systemui.UnimportantNotification; import com.sevtinge.hyperceiler.module.hook.systemui.UnlockClipboard; import com.sevtinge.hyperceiler.module.hook.systemui.UnlockCustomActions; +import com.sevtinge.hyperceiler.module.hook.systemui.base.lockscreen.Keyguard; import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.AllowAllThemesNotificationBlur; import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.CompactNotificationsHook; import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.ControlCenterStyle; @@ -52,17 +43,13 @@ import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.FixTilesList; import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.GmsTile; import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.HideDelimiter; -import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.media.MediaButton; -import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.media.MediaControlPanelBackgroundMix; -import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.media.MediaControlPanelTimeViewTextSize; -import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.media.MediaSeekBar; -import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.media.MediaSeekBarColor; import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.MuteVisibleNotifications; import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.NewFlashLight; import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.NotificationColor; import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.NotificationImportanceHyperOSFix; import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.NotificationRowMenu; import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.NotificationWeather; +import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.OldWeather; import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.QQSGrid; import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.QSColor; import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.QSGrid; @@ -74,9 +61,17 @@ import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.SunlightModeHigh; import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.SwitchCCAndNotification; import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.TaplusTile; +import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.media.MediaButton; +import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.media.MediaControlPanelBackgroundMix; +import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.media.MediaControlPanelTimeViewTextSize; +import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.media.MediaPicture; +import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.media.MediaSeekBar; +import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.media.MediaSeekBarColor; +import com.sevtinge.hyperceiler.module.hook.systemui.controlcenter.media.SquigglyProgress; import com.sevtinge.hyperceiler.module.hook.systemui.lockscreen.AllowThirdLockScreenUseFace; import com.sevtinge.hyperceiler.module.hook.systemui.lockscreen.BlurButton; import com.sevtinge.hyperceiler.module.hook.systemui.lockscreen.ChargingCVP; +import com.sevtinge.hyperceiler.module.hook.systemui.lockscreen.CustomizeBottomButton; import com.sevtinge.hyperceiler.module.hook.systemui.lockscreen.DisableUnlockByBleToast; import com.sevtinge.hyperceiler.module.hook.systemui.lockscreen.HideLockScreenHint; import com.sevtinge.hyperceiler.module.hook.systemui.lockscreen.HideLockScreenStatusBar; @@ -86,12 +81,18 @@ import com.sevtinge.hyperceiler.module.hook.systemui.lockscreen.NoPassword; import com.sevtinge.hyperceiler.module.hook.systemui.lockscreen.NotificationShowOnKeyguard; import com.sevtinge.hyperceiler.module.hook.systemui.lockscreen.RemoveCamera; -import com.sevtinge.hyperceiler.module.hook.systemui.lockscreen.RemoveSmartScreen; import com.sevtinge.hyperceiler.module.hook.systemui.lockscreen.ScramblePIN; import com.sevtinge.hyperceiler.module.hook.systemui.navigation.HandleLineCustom; import com.sevtinge.hyperceiler.module.hook.systemui.navigation.HideNavigationBar; import com.sevtinge.hyperceiler.module.hook.systemui.navigation.NavigationCustom; import com.sevtinge.hyperceiler.module.hook.systemui.navigation.RotationButton; +import com.sevtinge.hyperceiler.module.hook.systemui.other.BrightnessPct; +import com.sevtinge.hyperceiler.module.hook.systemui.other.DisableBottomBar; +import com.sevtinge.hyperceiler.module.hook.systemui.other.DisableInfinitymodeGesture; +import com.sevtinge.hyperceiler.module.hook.systemui.other.DisableMiuiMultiWinSwitch; +import com.sevtinge.hyperceiler.module.hook.systemui.other.MonetThemeOverlay; +import com.sevtinge.hyperceiler.module.hook.systemui.other.NotificationFreeform; +import com.sevtinge.hyperceiler.module.hook.systemui.other.RemoveMiuiMultiWinSwitch; import com.sevtinge.hyperceiler.module.hook.systemui.plugin.NewPluginHelperKt; import com.sevtinge.hyperceiler.module.hook.systemui.statusbar.BlurEnable; import com.sevtinge.hyperceiler.module.hook.systemui.statusbar.DoubleTapToSleep; @@ -278,10 +279,10 @@ public void handleLoadPackage() { initHook(UnlockClipboard.INSTANCE, mPrefsMap.getBoolean("system_ui_unlock_clipboard")); // 锁屏 + initHook(CustomizeBottomButton.INSTANCE, Keyguard.getLeftButtonType() != 0); initHook(new ScramblePIN(), mPrefsMap.getBoolean("system_ui_lock_screen_scramble_pin")); initHook(ChargingCVP.INSTANCE, mPrefsMap.getBoolean("system_ui_lock_screen_show_charging_cv")); initHook(RemoveCamera.INSTANCE, mPrefsMap.getBoolean("system_ui_lock_screen_hide_camera")); - initHook(RemoveSmartScreen.INSTANCE, mPrefsMap.getBoolean("system_ui_lock_screen_hide_smart_screen")); initHook(NoPassword.INSTANCE, mPrefsMap.getBoolean("system_ui_lock_screen_password_free")); initHook(LockScreenDoubleTapToSleep.INSTANCE, mPrefsMap.getBoolean("system_ui_lock_screen_double_lock")); initHook(NotificationShowOnKeyguard.INSTANCE, mPrefsMap.getBoolean("system_ui_lock_screen_unlock_notification_restrict")); diff --git a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/ChargeAnimationStyle.java b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/ChargeAnimationStyle.java deleted file mode 100644 index bcb2475d45..0000000000 --- a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/ChargeAnimationStyle.java +++ /dev/null @@ -1,119 +0,0 @@ -/* - * This file is part of HyperCeiler. - - * HyperCeiler is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - - * Copyright (C) 2023-2025 HyperCeiler Contributions -*/ -package com.sevtinge.hyperceiler.module.hook.systemui; - -import android.util.ArraySet; - -import com.sevtinge.hyperceiler.module.base.BaseHook; - -import java.util.Set; - -import de.robv.android.xposed.XposedHelpers; - -public class ChargeAnimationStyle extends BaseHook { - - Class mChargeAnimCls; - Class mWaveViewCls; - - int mChargeAnimationType; - int mType; - - @Override - public void init() { - - mChargeAnimCls = findClassIfExists("com.android.keyguard.charge.ChargeUtils"); - mWaveViewCls = findClassIfExists("com.android.keyguard.charge.wave.WaveView"); - - mChargeAnimationType = mPrefsMap.getStringAsInt("system_ui_charge_animation_style", 0); - - setChargeAnimationType(mChargeAnimationType); - } - - public void setChargeAnimationType(int value) { - - if (value == 1) { - findAndHookMethod(mChargeAnimCls, "isChargeAnimationDisabled", new MethodHook() { - @Override - protected void after(MethodHookParam param) { - param.setResult(true); - } - }); - } else if (value == 4) { - - findAndHookMethod(mChargeAnimCls, "supportWaveChargeAnimation", new MethodHook() { - @Override - protected void after(MethodHookParam param) { - StackTraceElement[] stackElement = new Throwable().getStackTrace(); - boolean mResult = false; - Set classTrue = new ArraySet<>(new String[]{"com.android.keyguard.charge.ChargeUtils", - "com.android.keyguard.charge.container.MiuiChargeContainerView"}); - int i = 0; - int length = stackElement.length; - - while (true) { - if (i >= length) { - break; - } else if (!classTrue.contains(stackElement[i].getClassName())) { - i++; - } else { - mResult = true; - logI(TAG, ChargeAnimationStyle.this.lpparam.packageName, stackElement[i].getClassName()); - break; - } - } - param.setResult(mResult); - } - }); - - findAndHookMethod(mWaveViewCls, "updateWaveHeight", new MethodHook() { - @Override - protected void after(MethodHookParam param) { - XposedHelpers.setIntField(param.thisObject, "mWaveXOffset", 0); - } - }); - - - /*findAndHookMethod(mChargeAnimCls,"getChargeAnimationType", new MethodHook() { - @Override - protected void before(MethodHookParam param) throws Throwable { - param.setResult(2); - } - }); - - findAndHookMethod(mWaveViewCls, "updateWaveHeight" ,new MethodHook() { - @Override - protected void after(MethodHookParam param) throws Throwable { - XposedHelpers.setIntField(param.thisObject, "mWaveXOffset", 0); - } - });*/ - } else { - switch (value) { - case 2 -> mType = 0; - case 3 -> mType = 1; - } - - findAndHookMethod(mChargeAnimCls, "getChargeAnimationType", new MethodHook() { - @Override - protected void before(MethodHookParam param) { - param.setResult(mType); - } - }); - } - } -} diff --git a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/Dependency.kt b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/Dependency.kt deleted file mode 100644 index 209ff804a5..0000000000 --- a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/Dependency.kt +++ /dev/null @@ -1,65 +0,0 @@ -/* - * This file is part of HyperCeiler. - - * HyperCeiler is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - - * Copyright (C) 2023-2025 HyperCeiler Contributions -*/ -package com.sevtinge.hyperceiler.module.hook.systemui - -import com.github.kyuubiran.ezxhelper.* -import com.sevtinge.hyperceiler.utils.* - -import de.robv.android.xposed.XposedHelpers.* - -@Suppress("MemberVisibilityCanBePrivate") -object Dependency { - private const val DEPENDENCY = "com.android.systemui.Dependency" - - private val dependencyClz by lazy { - findClass(DEPENDENCY, EzXHelper.classLoader) - } - - /* ========================== only for HyperOS2 ========================== */ - @JvmStatic - @get:JvmName(name = "getDependency") - val sDependency: Any? - get() = dependencyClz.getStaticObjectField("sDependency") - - @JvmStatic - @get:JvmName(name = "getMiuiLegacyDependency") - val mMiuiLegacyDependency: Any? - get() = sDependency?.getObjectField("mMiuiLegacyDependency") - - @JvmStatic - @get:JvmName(name = "getDependencies") - val mDependencies: Map<*, *>? - get() = sDependency?.getObjectField("mDependencies") as Map<*, *>? - - @JvmStatic - fun getDependencyInner(depClz: Class<*>): Any? { - return sDependency?.callMethod("getDependencyInner", depClz) - } - - @JvmStatic - fun getDependencyInner(depClzName: String): Any? { - return getDependencyInner(findClass(depClzName, EzXHelper.classLoader)) - } - - /* ========================== only for HyperOS1 ========================== */ - @JvmStatic - fun get(depClz: Class<*>): Any? { - return dependencyClz.callStaticMethod("get", depClz) - } -} \ No newline at end of file diff --git a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/InterfacesImplManager.kt b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/InterfacesImplManager.kt deleted file mode 100644 index f219daead3..0000000000 --- a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/InterfacesImplManager.kt +++ /dev/null @@ -1,29 +0,0 @@ -package com.sevtinge.hyperceiler.module.hook.systemui - -import com.github.kyuubiran.ezxhelper.* -import com.sevtinge.hyperceiler.utils.* -import de.robv.android.xposed.XposedHelpers.* - -/** - * only for HyperOS2 - */ -object InterfacesImplManager { - private const val IMPL_MANAGER = "com.miui.systemui.interfacesmanager.InterfacesImplManager" - - const val I_ACTIVITY_STARTER = "com.android.systemui.plugins.ActivityStarter" - - @JvmStatic - @get:JvmName(name = "getClassContainer") - val sClassContainer by lazy { - managerClz.getStaticObjectFieldAs, Any>>("sClassContainer") - } - - private val managerClz by lazy { - findClass(IMPL_MANAGER, EzXHelper.classLoader) - } - - @JvmStatic - fun registerImpl(clz: Class<*>, obj: Any) { - managerClz.callStaticMethod("registerImpl", clz, obj) - } -} \ No newline at end of file diff --git a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/base/api/ActivityStarter.kt b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/base/api/ActivityStarter.kt new file mode 100644 index 0000000000..5e00368073 --- /dev/null +++ b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/base/api/ActivityStarter.kt @@ -0,0 +1,12 @@ +package com.sevtinge.hyperceiler.module.hook.systemui.base.api + +import android.content.Intent +import com.sevtinge.hyperceiler.utils.callMethod + +@Suppress("unused") +class ActivityStarter(instance: Any) : BaseReflectObject(instance) { + @JvmOverloads + fun startActivity(intent: Intent, isCreateStatusBarTransitionAnimator: Boolean = true) { + instance.callMethod("startActivity", intent, isCreateStatusBarTransitionAnimator) + } +} diff --git a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/base/api/BaseReflectObject.kt b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/base/api/BaseReflectObject.kt new file mode 100644 index 0000000000..84a383dfe4 --- /dev/null +++ b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/base/api/BaseReflectObject.kt @@ -0,0 +1,5 @@ +package com.sevtinge.hyperceiler.module.hook.systemui.base.api + +abstract class BaseReflectObject(open val instance: Any) { + override fun toString(): String = instance.toString() +} diff --git a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/base/api/Dependency.kt b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/base/api/Dependency.kt new file mode 100644 index 0000000000..4de8668038 --- /dev/null +++ b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/base/api/Dependency.kt @@ -0,0 +1,65 @@ +/* + * This file is part of HyperCeiler. + + * HyperCeiler is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + + * Copyright (C) 2023-2025 HyperCeiler Contributions +*/ +package com.sevtinge.hyperceiler.module.hook.systemui.base.api + +import com.github.kyuubiran.ezxhelper.ClassUtils.loadClass +import com.sevtinge.hyperceiler.utils.callMethod +import com.sevtinge.hyperceiler.utils.callMethodAs +import com.sevtinge.hyperceiler.utils.callStaticMethod +import com.sevtinge.hyperceiler.utils.getObjectField +import com.sevtinge.hyperceiler.utils.getObjectFieldAs +import com.sevtinge.hyperceiler.utils.getStaticObjectFieldAs + +@Suppress("unused") +object Dependency { + private const val DEPENDENCY = "com.android.systemui.Dependency" + + private val CLASS by lazy { + loadClass(DEPENDENCY) + } + + val INSTANCE by lazy { + CLASS.getStaticObjectFieldAs("sDependency") + } + + val dependencies by lazy { + INSTANCE.getObjectFieldAs>("mDependencies") + } + + /* ========================== only for HyperOS2 ========================== */ + val miuiLegacyDependency by lazy { + INSTANCE.getObjectField("mMiuiLegacyDependency") + } + + @JvmStatic + fun getDependencyInner(clazz: Class<*>): Any? = INSTANCE.callMethod("getDependencyInner", clazz) + + @JvmStatic + fun getDependencyInner(className: String): Any? = getDependencyInner(loadClass(className)) + + /* ========================== only for HyperOS1 ========================== */ + val activityStarter by lazy { + ActivityStarter( + INSTANCE.getObjectFieldAs("mActivityStarter").callMethodAs("get") + ) + } + + @JvmStatic + fun get(clazz: Class<*>): Any? = CLASS.callStaticMethod("get", clazz) +} diff --git a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/base/api/FlashlightController.kt b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/base/api/FlashlightController.kt new file mode 100644 index 0000000000..b90b184c18 --- /dev/null +++ b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/base/api/FlashlightController.kt @@ -0,0 +1,74 @@ +package com.sevtinge.hyperceiler.module.hook.systemui.base.api + +import com.github.kyuubiran.ezxhelper.ClassUtils.loadClass +import com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createAfterHook +import com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder +import com.sevtinge.hyperceiler.utils.callMethod +import com.sevtinge.hyperceiler.utils.callMethodAs + +@Suppress("unused") +class FlashlightController(instance: Any) : BaseReflectObject(instance) { + fun isEnabled(): Boolean = instance.callMethodAs("isEnabled") + + fun isAvailable(): Boolean = instance.callMethodAs("isAvailable") + + // 是否支持官方 UI 调节亮度 + fun supportFlashlightUIDisplay(): Boolean = runCatching { + instance.callMethodAs("supportFlashlightUIDisplay") + }.getOrDefault(false) + + fun setFlashlight(enabled: Boolean) { + instance.callMethod("setFlashlight", enabled) + } + + fun toggleFlashlight() = setFlashlight(!isEnabled()) + + companion object { + private val miuiFlashlightControllerImpl by lazy { + loadClass("com.android.systemui.controlcenter.policy.MiuiFlashlightControllerImpl") + } + + private var isHooked = false + private val listeners = mutableListOf() + + fun addListener(listener: FlashlightListener) { + listeners += listener + hookDispatchListeners() + } + + fun removeListener(listener: FlashlightListener) { + listeners -= listener + } + + private fun hookDispatchListeners() { + if (isHooked) { + return + } + isHooked = true + + miuiFlashlightControllerImpl.methodFinder() + .filterByName("dispatchListeners") + .filterByParamTypes(Int::class.java, Boolean::class.java) + .single().createAfterHook { param -> + synchronized(listeners) { + val event = param.args[0] as Int + val isEnabled = param.args[1] as Boolean + + listeners.forEach { + when (event) { + 0 -> it.onFlashlightError() + 1 -> it.onFlashlightChanged(isEnabled) + 2 -> it.onFlashlightAvailabilityChanged(isEnabled) + } + } + } + } + } + } + + interface FlashlightListener { + fun onFlashlightError() {} + fun onFlashlightChanged(isEnabled: Boolean) + fun onFlashlightAvailabilityChanged(isEnabled: Boolean) {} + } +} diff --git a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/base/api/MiuiStub.kt b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/base/api/MiuiStub.kt new file mode 100644 index 0000000000..8cf0dc240a --- /dev/null +++ b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/base/api/MiuiStub.kt @@ -0,0 +1,69 @@ +package com.sevtinge.hyperceiler.module.hook.systemui.base.api + +import android.content.Context +import android.os.Handler +import com.github.kyuubiran.ezxhelper.ClassUtils.loadClass +import com.sevtinge.hyperceiler.utils.callMethodAs +import com.sevtinge.hyperceiler.utils.getObjectFieldAs +import com.sevtinge.hyperceiler.utils.getStaticObjectFieldAs +import java.util.concurrent.Executor + +/** + * only for HyperOS2 + */ +@Suppress("unused") +object MiuiStub { + private const val MIUI_STUB = "miui.stub.MiuiStub" + + private val INSTANCE by lazy { + loadClass(MIUI_STUB).getStaticObjectFieldAs("INSTANCE") + } + + val baseProvider by lazy { + BaseProvider(INSTANCE.getObjectFieldAs("mBaseProvider")) + } + + val miuiModuleProvider by lazy { + MiuiModuleProvider(INSTANCE.getObjectFieldAs("mMiuiModuleProvider")) + } + + val sysUIProvider by lazy { + SysUIProvider(INSTANCE.getObjectFieldAs("mSysUIProvider")) + } + + override fun toString(): String = INSTANCE.toString() + + class BaseProvider(instance: Any) : BaseReflectObject(instance) { + val mainHandler by lazy { + instance.getObjectFieldAs("mMainHandler") + } + + val bgHandler by lazy { + instance.getObjectFieldAs("mBgHandler") + } + + val context by lazy { + instance.getObjectFieldAs("mContext") + } + + val uiBackgroundExecutor by lazy { + instance.getObjectFieldAs("mUiBackgroundExecutor") + } + } + + class MiuiModuleProvider(instance: Any) : BaseReflectObject(instance) + + class SysUIProvider(instance: Any) : BaseReflectObject(instance) { + val flashlightController by lazy { + FlashlightController( + instance.getObjectFieldAs("mFlashlightController").callMethodAs("get") + ) + } + + val activityStarter by lazy { + ActivityStarter( + instance.getObjectFieldAs("mActivityStarter").callMethodAs("get") + ) + } + } +} diff --git a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/base/lockscreen/Keyguard.kt b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/base/lockscreen/Keyguard.kt new file mode 100644 index 0000000000..7dbb0a246f --- /dev/null +++ b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/base/lockscreen/Keyguard.kt @@ -0,0 +1,16 @@ +package com.sevtinge.hyperceiler.module.hook.systemui.base.lockscreen + +import com.github.kyuubiran.ezxhelper.ClassUtils +import com.sevtinge.hyperceiler.module.base.tool.HookTool + +object Keyguard { + // 锁屏底部左侧按钮 + @JvmStatic + val leftButtonType by lazy { + HookTool.mPrefsMap.getStringAsInt("system_ui_lock_screen_bottom_left_button", 0) + } + + val keyguardBottomAreaInjector by lazy { + ClassUtils.loadClass("com.android.keyguard.injector.KeyguardBottomAreaInjector") + } +} \ No newline at end of file diff --git a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/controlcenter/ControlCenterStyle.kt b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/controlcenter/ControlCenterStyle.kt index edc8391c7a..58f726fd65 100644 --- a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/controlcenter/ControlCenterStyle.kt +++ b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/controlcenter/ControlCenterStyle.kt @@ -23,7 +23,8 @@ import com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook import com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHooks import com.github.kyuubiran.ezxhelper.ObjectUtils.setObject import com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder -import com.sevtinge.hyperceiler.module.base.* +import com.sevtinge.hyperceiler.module.base.BaseHook +import com.sevtinge.hyperceiler.utils.devicesdk.isHyperOSVersion object ControlCenterStyle : BaseHook() { override fun init() { @@ -33,14 +34,16 @@ object ControlCenterStyle : BaseHook() { } } - loadClass("com.miui.interfaces.SettingsObserver").methodFinder() - .filterByName("setValue\$default").first() - .createHook { - before { - if (it.args[1] == "force_use_control_panel") { - it.args[2] = 0 + if (isHyperOSVersion(1f)) { + loadClass("com.miui.interfaces.SettingsObserver").methodFinder() + .filterByName("setValue\$default").first() + .createHook { + before { + if (it.args[1] == "force_use_control_panel") { + it.args[2] = 0 + } } } - } + } } } diff --git a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/lockscreen/BlurButton.kt b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/lockscreen/BlurButton.kt index 15c643cb43..b59968ebdb 100644 --- a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/lockscreen/BlurButton.kt +++ b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/lockscreen/BlurButton.kt @@ -18,29 +18,31 @@ */ package com.sevtinge.hyperceiler.module.hook.systemui.lockscreen -import android.app.* -import android.content.* -import android.graphics.* -import android.graphics.drawable.* -import android.view.* -import android.widget.* -import com.github.kyuubiran.ezxhelper.* -import com.github.kyuubiran.ezxhelper.ClassUtils.loadClassOrNull +import android.app.KeyguardManager +import android.content.Context +import android.graphics.Color +import android.graphics.Outline +import android.graphics.drawable.LayerDrawable +import android.view.View +import android.view.ViewOutlineProvider +import android.widget.ImageView import com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHooks +import com.github.kyuubiran.ezxhelper.ObjectUtils import com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder -import com.sevtinge.hyperceiler.module.base.* -import com.sevtinge.hyperceiler.utils.* -import com.sevtinge.hyperceiler.utils.blur.BlurUtils.* +import com.sevtinge.hyperceiler.module.base.BaseHook +import com.sevtinge.hyperceiler.module.hook.systemui.base.lockscreen.Keyguard.keyguardBottomAreaInjector +import com.sevtinge.hyperceiler.module.hook.systemui.base.lockscreen.Keyguard.leftButtonType +import com.sevtinge.hyperceiler.utils.blur.BlurUtils.createBlurDrawable import com.sevtinge.hyperceiler.utils.blur.MiBlurUtilsKt.addMiBackgroundBlendColor import com.sevtinge.hyperceiler.utils.blur.MiBlurUtilsKt.clearMiBackgroundBlendColor import com.sevtinge.hyperceiler.utils.blur.MiBlurUtilsKt.setMiBackgroundBlurRadius import com.sevtinge.hyperceiler.utils.blur.MiBlurUtilsKt.setMiViewBlurMode -import com.sevtinge.hyperceiler.utils.devicesdk.* -import de.robv.android.xposed.* +import com.sevtinge.hyperceiler.utils.setBooleanField +import de.robv.android.xposed.XC_MethodHook object BlurButton : BaseHook() { private val removeLeft by lazy { - mPrefsMap.getBoolean("system_ui_lock_screen_hide_smart_screen") + leftButtonType == 1 } private val removeRight by lazy { mPrefsMap.getBoolean("system_ui_lock_screen_hide_camera") @@ -57,7 +59,7 @@ object BlurButton : BaseHook() { override fun init() { // by StarVoyager - loadClassOrNull("com.android.keyguard.injector.KeyguardBottomAreaInjector")!!.methodFinder() + keyguardBottomAreaInjector.methodFinder() .filter { name in setOf( "updateLeftIcon", diff --git a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/lockscreen/CustomizeBottomButton.kt b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/lockscreen/CustomizeBottomButton.kt new file mode 100644 index 0000000000..3b3c0a5bfa --- /dev/null +++ b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/lockscreen/CustomizeBottomButton.kt @@ -0,0 +1,165 @@ +package com.sevtinge.hyperceiler.module.hook.systemui.lockscreen + +import android.annotation.SuppressLint +import android.graphics.drawable.Drawable +import android.os.SystemClock +import android.view.HapticFeedbackConstants +import android.view.MotionEvent +import android.view.View +import android.widget.ImageView +import android.widget.LinearLayout +import com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createAfterHook +import com.github.kyuubiran.ezxhelper.ObjectUtils.getObjectOrNullAs +import com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder +import com.sevtinge.hyperceiler.R +import com.sevtinge.hyperceiler.module.base.BaseHook +import com.sevtinge.hyperceiler.module.base.tool.HookTool.MethodHook.returnConstant +import com.sevtinge.hyperceiler.module.base.tool.ResourcesTool +import com.sevtinge.hyperceiler.module.hook.systemui.base.api.FlashlightController +import com.sevtinge.hyperceiler.module.hook.systemui.base.api.MiuiStub +import com.sevtinge.hyperceiler.module.hook.systemui.base.lockscreen.Keyguard.keyguardBottomAreaInjector +import com.sevtinge.hyperceiler.module.hook.systemui.base.lockscreen.Keyguard.leftButtonType +import com.sevtinge.hyperceiler.utils.getAdditionalInstanceFieldAs +import com.sevtinge.hyperceiler.utils.getObjectFieldAs +import com.sevtinge.hyperceiler.utils.setAdditionalInstanceField + +object CustomizeBottomButton : BaseHook() { + override fun init() { + when (leftButtonType) { + // 隐藏左侧按钮 + 1 -> hideLeftButton() + // 左侧按钮 -> 手电筒按钮 + 2 -> replaceFlashlightButton() + } + } + + fun hideLeftButton() { + keyguardBottomAreaInjector.methodFinder() + .filterByName("updateIcons") + .single().createAfterHook { + val left = + getObjectOrNullAs(it.thisObject, "mLeftAffordanceViewLayout") ?: return@createAfterHook + left.visibility = View.GONE + } + } + + @SuppressLint("ClickableViewAccessibility") + private fun replaceFlashlightButton() { + lateinit var flashlightController: FlashlightController + + var downTime = 0L + var leftButton: ImageView? = null + var offDrawable: Drawable? = null + var onDrawable: Drawable? = null + + val touchListener = View.OnTouchListener { view, event -> + when (event.action) { + MotionEvent.ACTION_DOWN -> { + downTime = SystemClock.uptimeMillis() + view.animate().setDuration(100).scaleX(1.21F).scaleY(1.21F) + } + + MotionEvent.ACTION_UP -> { + view.animate().setDuration(100).scaleX(1F).scaleY(1F).withEndAction { + if (SystemClock.uptimeMillis() - downTime >= 400) { + flashlightController.toggleFlashlight() + leftButton?.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS) + } + } + } + + MotionEvent.ACTION_CANCEL -> { + view.animate().setDuration(150).scaleX(1F).scaleY(1F) + } + } + + true + } + + val resetImageDrawable = { isEnabled: Boolean, isPost: Boolean -> + leftButton?.run { + val action = action@{ + val isInnerEnabled = getAdditionalInstanceFieldAs("isEnabled") + if (isInnerEnabled != null) { + if (isInnerEnabled == isEnabled) { + return@action + } else { + setAdditionalInstanceField("isEnabled", isEnabled) + } + } + + setImageDrawable(if (isEnabled) onDrawable else offDrawable) + } + + if (isPost) { + post(action) + } else { + action() + } + } + } + + val flashlightListener = object : FlashlightController.FlashlightListener { + override fun onFlashlightError() { + logD(TAG, lpparam.packageName, "onFlashlightError") + resetImageDrawable(false, true) + } + + override fun onFlashlightChanged(isEnabled: Boolean) { + logD(TAG, lpparam.packageName, "onFlashlightChanged($isEnabled)") + resetImageDrawable(isEnabled, true) + } + + override fun onFlashlightAvailabilityChanged(isEnabled: Boolean) { + logD(TAG, lpparam.packageName, "onFlashlightAvailabilityChanged($isEnabled)") + if (!isEnabled) { + resetImageDrawable(false, true) + } + } + } + + findAndHookMethod( + "com.android.systemui.statusbar.policy.KeyguardStateControllerImpl", + "notifyKeyguardState", Boolean::class.java, Boolean::class.java, + object : MethodHook() { + override fun after(param: MethodHookParam) { + val showing = param.args[0] as Boolean + val occluded = param.args[1] as Boolean + logD(TAG, lpparam.packageName, "notifyKeyguardState($showing, $occluded)") + + if (showing && !occluded) { + resetImageDrawable(flashlightController.isEnabled(), true) + FlashlightController.addListener(flashlightListener) + } else { + FlashlightController.removeListener(flashlightListener) + } + } + } + ) + + hookAllConstructors(keyguardBottomAreaInjector, object : MethodHook() { + override fun after(param: MethodHookParam) { + flashlightController = MiuiStub.sysUIProvider.flashlightController + + val context = MiuiStub.baseProvider.context + ResourcesTool.loadModuleRes(context) + offDrawable = context.getDrawable(R.drawable.ic_flashlight_off_filled) + onDrawable = context.getDrawable(R.drawable.ic_flashlight_on_filled) + } + }) + + findAndHookMethod(keyguardBottomAreaInjector, "updateLeftIcon", object : MethodHook() { + override fun after(param: MethodHookParam) { + leftButton = param.thisObject.getObjectFieldAs("mLeftButton")?.also { + resetImageDrawable(false, false) + it.setOnTouchListener(touchListener) + } + } + }) + + findAndHookMethod( + "com.android.keyguard.negative.KeyguardMoveLeftController", "isLeftViewLaunchActivity", + returnConstant(false) + ) + } +} 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 b793ed63c9..f20ecb1a8c 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 @@ -26,15 +26,12 @@ import com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHooks import com.github.kyuubiran.ezxhelper.ObjectUtils import com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder import com.sevtinge.hyperceiler.module.base.BaseHook +import com.sevtinge.hyperceiler.module.hook.systemui.base.lockscreen.Keyguard.keyguardBottomAreaInjector object RemoveCamera : BaseHook() { - private val newClass by lazy { - loadClassOrNull("com.android.keyguard.injector.KeyguardBottomAreaInjector") - } - override fun init() { // 屏蔽右下角组件显示 - newClass!!.methodFinder().filter { + keyguardBottomAreaInjector.methodFinder().filter { name in setOf( "updateRightAffordanceViewLayoutVisibility", "startButtonLayoutAnimate" diff --git a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/lockscreen/RemoveSmartScreen.kt b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/lockscreen/RemoveSmartScreen.kt index a60ac521d2..2f11708799 100644 --- a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/lockscreen/RemoveSmartScreen.kt +++ b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/lockscreen/RemoveSmartScreen.kt @@ -18,28 +18,11 @@ */ package com.sevtinge.hyperceiler.module.hook.systemui.lockscreen -import android.view.View -import android.widget.LinearLayout -import com.github.kyuubiran.ezxhelper.ClassUtils.loadClassOrNull -import com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook -import com.github.kyuubiran.ezxhelper.ObjectUtils -import com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder import com.sevtinge.hyperceiler.module.base.BaseHook -import com.sevtinge.hyperceiler.utils.devicesdk.isMoreAndroidVersion -import com.sevtinge.hyperceiler.utils.devicesdk.isMoreHyperOSVersion +import com.sevtinge.hyperceiler.module.hook.systemui.lockscreen.CustomizeBottomButton.hideLeftButton object RemoveSmartScreen : BaseHook() { override fun init() { - loadClassOrNull("com.android.keyguard.injector.KeyguardBottomAreaInjector")!!.methodFinder() - .filterByName("updateIcons") - .single().createHook { - after { - val left = - ObjectUtils.getObjectOrNullAs(it.thisObject, "mLeftAffordanceViewLayout") ?: return@after - left.visibility = View.GONE - } - } - + hideLeftButton() } - } diff --git a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/BrightnessPct.java b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/other/BrightnessPct.java similarity index 97% rename from app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/BrightnessPct.java rename to app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/other/BrightnessPct.java index f5dcd244c3..f755953116 100644 --- a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/BrightnessPct.java +++ b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/other/BrightnessPct.java @@ -16,7 +16,7 @@ * Copyright (C) 2023-2025 HyperCeiler Contributions */ -package com.sevtinge.hyperceiler.module.hook.systemui; +package com.sevtinge.hyperceiler.module.hook.systemui.other; import static com.sevtinge.hyperceiler.module.base.tool.OtherTool.mPct; import static com.sevtinge.hyperceiler.module.base.tool.OtherTool.removePct; diff --git a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/DisableBottomBar.kt b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/other/DisableBottomBar.kt similarity index 89% rename from app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/DisableBottomBar.kt rename to app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/other/DisableBottomBar.kt index 16f96566e2..40fb2709cc 100644 --- a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/DisableBottomBar.kt +++ b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/other/DisableBottomBar.kt @@ -16,13 +16,13 @@ * Copyright (C) 2023-2025 HyperCeiler Contributions */ -package com.sevtinge.hyperceiler.module.hook.systemui +package com.sevtinge.hyperceiler.module.hook.systemui.other 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.* -import com.sevtinge.hyperceiler.utils.devicesdk.* +import com.sevtinge.hyperceiler.module.base.BaseHook +import com.sevtinge.hyperceiler.utils.devicesdk.isMoreAndroidVersion object DisableBottomBar : BaseHook() { override fun init() { diff --git a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/DisableInfinitymodeGesture.kt b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/other/DisableInfinitymodeGesture.kt similarity index 79% rename from app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/DisableInfinitymodeGesture.kt rename to app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/other/DisableInfinitymodeGesture.kt index 55bd8be60a..383a20b4fa 100644 --- a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/DisableInfinitymodeGesture.kt +++ b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/other/DisableInfinitymodeGesture.kt @@ -1,10 +1,10 @@ -package com.sevtinge.hyperceiler.module.hook.systemui +package com.sevtinge.hyperceiler.module.hook.systemui.other 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.* -import com.sevtinge.hyperceiler.utils.devicesdk.* +import com.sevtinge.hyperceiler.module.base.BaseHook +import com.sevtinge.hyperceiler.utils.devicesdk.isMoreAndroidVersion object DisableInfinitymodeGesture : BaseHook() { diff --git a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/DisableMiuiMultiWinSwitch.kt b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/other/DisableMiuiMultiWinSwitch.kt similarity index 89% rename from app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/DisableMiuiMultiWinSwitch.kt rename to app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/other/DisableMiuiMultiWinSwitch.kt index 597f094f91..a1995637f2 100644 --- a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/DisableMiuiMultiWinSwitch.kt +++ b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/other/DisableMiuiMultiWinSwitch.kt @@ -16,13 +16,13 @@ * Copyright (C) 2023-2025 HyperCeiler Contributions */ -package com.sevtinge.hyperceiler.module.hook.systemui +package com.sevtinge.hyperceiler.module.hook.systemui.other 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.* -import com.sevtinge.hyperceiler.utils.devicesdk.* +import com.sevtinge.hyperceiler.module.base.BaseHook +import com.sevtinge.hyperceiler.utils.devicesdk.isMoreAndroidVersion // by ljlvink object DisableMiuiMultiWinSwitch : BaseHook() { diff --git a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/EnableVolumeBlur.kt b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/other/EnableVolumeBlur.kt similarity index 98% rename from app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/EnableVolumeBlur.kt rename to app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/other/EnableVolumeBlur.kt index fb9c418de8..f7a2f36e20 100644 --- a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/EnableVolumeBlur.kt +++ b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/other/EnableVolumeBlur.kt @@ -16,7 +16,7 @@ * Copyright (C) 2023-2025 HyperCeiler Contributions */ -package com.sevtinge.hyperceiler.module.hook.systemui +package com.sevtinge.hyperceiler.module.hook.systemui.other import com.sevtinge.hyperceiler.module.base.BaseHook import com.sevtinge.hyperceiler.utils.getValueByField diff --git a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/MonetThemeOverlay.java b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/other/MonetThemeOverlay.java similarity index 93% rename from app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/MonetThemeOverlay.java rename to app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/other/MonetThemeOverlay.java index f8ceb43082..edee7d64a8 100644 --- a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/MonetThemeOverlay.java +++ b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/other/MonetThemeOverlay.java @@ -16,9 +16,7 @@ * Copyright (C) 2023-2025 HyperCeiler Contributions */ -package com.sevtinge.hyperceiler.module.hook.systemui; - -import static com.sevtinge.hyperceiler.utils.devicesdk.SystemSDKKt.isMoreAndroidVersion; +package com.sevtinge.hyperceiler.module.hook.systemui.other; import android.content.Context; import android.os.Handler; diff --git a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/NotificationFreeform.java b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/other/NotificationFreeform.java similarity index 90% rename from app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/NotificationFreeform.java rename to app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/other/NotificationFreeform.java index a933bdc162..6004b8ce44 100644 --- a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/NotificationFreeform.java +++ b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/other/NotificationFreeform.java @@ -16,9 +16,7 @@ * Copyright (C) 2023-2025 HyperCeiler Contributions */ -package com.sevtinge.hyperceiler.module.hook.systemui; - -import static com.sevtinge.hyperceiler.utils.devicesdk.SystemSDKKt.isMoreAndroidVersion; +package com.sevtinge.hyperceiler.module.hook.systemui.other; import com.sevtinge.hyperceiler.module.base.BaseHook; diff --git a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/RemoveMiuiMultiWinSwitch.kt b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/other/RemoveMiuiMultiWinSwitch.kt similarity index 89% rename from app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/RemoveMiuiMultiWinSwitch.kt rename to app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/other/RemoveMiuiMultiWinSwitch.kt index 4a4c8cbddd..2846ea2622 100644 --- a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/RemoveMiuiMultiWinSwitch.kt +++ b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/other/RemoveMiuiMultiWinSwitch.kt @@ -16,13 +16,13 @@ * Copyright (C) 2023-2025 HyperCeiler Contributions */ -package com.sevtinge.hyperceiler.module.hook.systemui +package com.sevtinge.hyperceiler.module.hook.systemui.other 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.* -import com.sevtinge.hyperceiler.utils.devicesdk.* +import com.sevtinge.hyperceiler.module.base.BaseHook +import com.sevtinge.hyperceiler.utils.devicesdk.isMoreAndroidVersion // by ljlvink object RemoveMiuiMultiWinSwitch : BaseHook() { diff --git a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/VolumeTimer.java b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/other/VolumeTimer.java similarity index 94% rename from app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/VolumeTimer.java rename to app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/other/VolumeTimer.java index 375a450ffc..b94f21a82a 100644 --- a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/VolumeTimer.java +++ b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/other/VolumeTimer.java @@ -17,7 +17,7 @@ * Copyright (C) 2023-2025 HyperCeiler Contributions */ -package com.sevtinge.hyperceiler.module.hook.systemui; +package com.sevtinge.hyperceiler.module.hook.systemui.other; import com.sevtinge.hyperceiler.R; import com.sevtinge.hyperceiler.XposedInit; diff --git a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/VolumeTimerValuesHook.java b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/other/VolumeTimerValuesHook.java similarity index 99% rename from app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/VolumeTimerValuesHook.java rename to app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/other/VolumeTimerValuesHook.java index 0600118c83..df15a44ffb 100644 --- a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/VolumeTimerValuesHook.java +++ b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/other/VolumeTimerValuesHook.java @@ -16,7 +16,7 @@ * Copyright (C) 2023-2025 HyperCeiler Contributions */ -package com.sevtinge.hyperceiler.module.hook.systemui; +package com.sevtinge.hyperceiler.module.hook.systemui.other; import com.sevtinge.hyperceiler.R; import com.sevtinge.hyperceiler.XposedInit; diff --git a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/plugin/NewPluginHelperKt.kt b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/plugin/NewPluginHelperKt.kt index 2733825376..b7900206da 100644 --- a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/plugin/NewPluginHelperKt.kt +++ b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/plugin/NewPluginHelperKt.kt @@ -208,11 +208,11 @@ object NewPluginHelperKt : BaseHook() { } private fun loadClassLoaders( - name: String, + tag: String, classLoader: ClassLoader, loaders: List Unit>> ) { - loaders.forEach { (tag, prefKey, loader) -> + loaders.forEach { (name, prefKey, loader) -> runCatching { if (prefKey) { loader(classLoader) diff --git a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/statusbar/model/DualRowSignalHookV.kt b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/statusbar/model/DualRowSignalHookV.kt index 12e6147dcc..87cbd9bee2 100644 --- a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/statusbar/model/DualRowSignalHookV.kt +++ b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/statusbar/model/DualRowSignalHookV.kt @@ -18,33 +18,44 @@ */ package com.sevtinge.hyperceiler.module.hook.systemui.statusbar.model -import android.content.* -import android.content.res.* -import android.view.* -import android.widget.* +import android.content.Context +import android.content.res.ColorStateList +import android.view.Gravity +import android.view.View +import android.view.ViewGroup +import android.widget.FrameLayout +import android.widget.ImageView +import android.widget.LinearLayout import com.github.kyuubiran.ezxhelper.ClassUtils.loadClass import com.github.kyuubiran.ezxhelper.ClassUtils.loadClassOrNull import com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook import com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder import com.github.kyuubiran.ezxhelper.misc.ViewUtils.findViewByIdName import com.github.kyuubiran.ezxhelper.misc.ViewUtils.getIdByName -import com.sevtinge.hyperceiler.module.base.* -import com.sevtinge.hyperceiler.module.base.dexkit.* -import com.sevtinge.hyperceiler.module.base.tool.OtherTool.* -import com.sevtinge.hyperceiler.module.hook.systemui.* +import com.sevtinge.hyperceiler.module.base.BaseHook +import com.sevtinge.hyperceiler.module.base.dexkit.DexKit +import com.sevtinge.hyperceiler.module.base.tool.OtherTool.getModuleRes +import com.sevtinge.hyperceiler.module.hook.systemui.base.api.Dependency import com.sevtinge.hyperceiler.module.hook.systemui.base.statusbar.icon.MobileClass.miuiMobileIconBinder import com.sevtinge.hyperceiler.module.hook.systemui.base.statusbar.icon.MobileClass.mobileSignalController import com.sevtinge.hyperceiler.module.hook.systemui.base.statusbar.icon.MobileClass.modernStatusBarMobileView import com.sevtinge.hyperceiler.module.hook.systemui.base.statusbar.icon.MobileClass.networkController import com.sevtinge.hyperceiler.module.hook.systemui.base.statusbar.icon.MobilePrefs.showMobileType -import com.sevtinge.hyperceiler.utils.* import com.sevtinge.hyperceiler.utils.StateFlowHelper.setStateFlowValue -import com.sevtinge.hyperceiler.utils.api.* -import com.sevtinge.hyperceiler.utils.devicesdk.* -import de.robv.android.xposed.* -import org.luckypray.dexkit.query.enums.* -import java.lang.reflect.* -import java.util.function.* +import com.sevtinge.hyperceiler.utils.api.ProjectApi +import com.sevtinge.hyperceiler.utils.callMethod +import com.sevtinge.hyperceiler.utils.callMethodAs +import com.sevtinge.hyperceiler.utils.callStaticMethod +import com.sevtinge.hyperceiler.utils.devicesdk.DisplayUtils +import com.sevtinge.hyperceiler.utils.getBooleanField +import com.sevtinge.hyperceiler.utils.getIntField +import com.sevtinge.hyperceiler.utils.getObjectField +import com.sevtinge.hyperceiler.utils.getObjectFieldAs +import de.robv.android.xposed.XposedHelpers +import org.luckypray.dexkit.query.enums.StringMatchType +import java.lang.reflect.Method +import java.lang.reflect.Modifier +import java.util.function.Consumer class DualRowSignalHookV : BaseHook() { @@ -255,9 +266,9 @@ class DualRowSignalHookV : BaseHook() { if (reuseCache == null) { if (miuiIconManagerFactory != null && - Dependency.mDependencies?.contains(miuiIconManagerFactory) == true + Dependency.dependencies.contains(miuiIconManagerFactory) == true ) { - reuseCache = Dependency.mMiuiLegacyDependency + reuseCache = Dependency.miuiLegacyDependency ?.getObjectField("mMiuiIconManagerFactory") ?.callMethod("get") ?.getObjectField("mMobileUiAdapter") @@ -483,4 +494,4 @@ class DualRowSignalHookV : BaseHook() { return "MobileInfo(subId=$subId, dataSimLevel=$dataSimLevel, noDataSimLevel=$noDataSimLevel)" } } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/statusbar/model/MobilePublicHookV.kt b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/statusbar/model/MobilePublicHookV.kt index 87f41def74..293bbbd248 100644 --- a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/statusbar/model/MobilePublicHookV.kt +++ b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/statusbar/model/MobilePublicHookV.kt @@ -20,7 +20,7 @@ package com.sevtinge.hyperceiler.module.hook.systemui.statusbar.model import android.telephony.SubscriptionManager import com.sevtinge.hyperceiler.module.base.BaseHook -import com.sevtinge.hyperceiler.module.hook.systemui.Dependency +import com.sevtinge.hyperceiler.module.hook.systemui.base.api.Dependency import com.sevtinge.hyperceiler.module.hook.systemui.base.statusbar.icon.MobileClass.miuiCellularIconVM import com.sevtinge.hyperceiler.module.hook.systemui.base.statusbar.icon.MobilePrefs.card1 import com.sevtinge.hyperceiler.module.hook.systemui.base.statusbar.icon.MobilePrefs.card2 @@ -48,7 +48,7 @@ class MobilePublicHookV : BaseHook() { val mobileIconInteractor = param.args[2] val subId = mobileIconInteractor.getObjectFieldAs("subId") - val javaAdapter = Dependency.mMiuiLegacyDependency + val javaAdapter = Dependency.miuiLegacyDependency ?.getObjectField("mCentralSurfaces") ?.callMethod("get") ?.getObjectField("mJavaAdapter") @@ -59,7 +59,7 @@ class MobilePublicHookV : BaseHook() { cellularIcon.setObjectField("isVisible", isVisible) if (!hideRoaming) cellularIcon.setObjectField("smallRoamVisible", newReadonlyStateFlow(false)) - val activeSubId = Dependency.mMiuiLegacyDependency + val activeSubId = Dependency.miuiLegacyDependency ?.getObjectField("mOperatorCustomizedPolicy") ?.callMethod("get") ?.getObjectField("mobileIcons") @@ -104,4 +104,4 @@ class MobilePublicHookV : BaseHook() { param.thisObject.setObjectField(fieldName, newReadonlyStateFlow(value)) } } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/statusbar/model/MobileTypeSingle2Hook.kt b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/statusbar/model/MobileTypeSingle2Hook.kt index bbc94b862a..de54fe90bb 100644 --- a/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/statusbar/model/MobileTypeSingle2Hook.kt +++ b/app/src/main/java/com/sevtinge/hyperceiler/module/hook/systemui/statusbar/model/MobileTypeSingle2Hook.kt @@ -19,18 +19,21 @@ package com.sevtinge.hyperceiler.module.hook.systemui.statusbar.model -import android.annotation.* -import android.graphics.* -import android.telephony.* -import android.view.* -import android.widget.* -import com.github.kyuubiran.ezxhelper.* +import android.annotation.SuppressLint +import android.graphics.Typeface +import android.telephony.SubscriptionManager +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.LinearLayout +import android.widget.TextView import com.github.kyuubiran.ezxhelper.ClassUtils.loadClass +import com.github.kyuubiran.ezxhelper.EzXHelper import com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook import com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder import com.github.kyuubiran.ezxhelper.misc.ViewUtils.findViewByIdName -import com.sevtinge.hyperceiler.module.base.* -import com.sevtinge.hyperceiler.module.hook.systemui.* +import com.sevtinge.hyperceiler.module.base.BaseHook +import com.sevtinge.hyperceiler.module.hook.systemui.base.api.Dependency import com.sevtinge.hyperceiler.module.hook.systemui.base.statusbar.icon.MobileClass.hdController import com.sevtinge.hyperceiler.module.hook.systemui.base.statusbar.icon.MobileClass.mOperatorConfig import com.sevtinge.hyperceiler.module.hook.systemui.base.statusbar.icon.MobileClass.modernStatusBarMobileView @@ -45,13 +48,19 @@ import com.sevtinge.hyperceiler.module.hook.systemui.base.statusbar.icon.MobileP import com.sevtinge.hyperceiler.module.hook.systemui.base.statusbar.icon.MobilePrefs.rightMargin import com.sevtinge.hyperceiler.module.hook.systemui.base.statusbar.icon.MobilePrefs.showMobileType import com.sevtinge.hyperceiler.module.hook.systemui.base.statusbar.icon.MobilePrefs.verticalOffset -import com.sevtinge.hyperceiler.utils.* import com.sevtinge.hyperceiler.utils.StateFlowHelper.newReadonlyStateFlow -import com.sevtinge.hyperceiler.utils.api.ProjectApi.* -import com.sevtinge.hyperceiler.utils.devicesdk.* -import com.sevtinge.hyperceiler.utils.devicesdk.DisplayUtils.* -import java.lang.reflect.* -import java.util.function.* +import com.sevtinge.hyperceiler.utils.api.ProjectApi.isDebug +import com.sevtinge.hyperceiler.utils.callMethod +import com.sevtinge.hyperceiler.utils.callMethodAs +import com.sevtinge.hyperceiler.utils.devicesdk.DisplayUtils.dp2px +import com.sevtinge.hyperceiler.utils.devicesdk.SubscriptionManagerProvider +import com.sevtinge.hyperceiler.utils.getBooleanField +import com.sevtinge.hyperceiler.utils.getIntField +import com.sevtinge.hyperceiler.utils.getObjectField +import com.sevtinge.hyperceiler.utils.getObjectFieldAs +import com.sevtinge.hyperceiler.utils.setObjectField +import java.lang.reflect.Method +import java.util.function.Consumer object MobileTypeSingle2Hook : BaseHook() { private val DarkIconDispatcherClass by lazy { @@ -249,12 +258,12 @@ object MobileTypeSingle2Hook : BaseHook() { @SuppressLint("NewApi") private fun setOnDataChangedListener() { - val javaAdapter = Dependency.mMiuiLegacyDependency + val javaAdapter = Dependency.miuiLegacyDependency ?.getObjectField("mCentralSurfaces") ?.callMethod("get") ?.getObjectField("mJavaAdapter") - val dataConnected = Dependency.mMiuiLegacyDependency + val dataConnected = Dependency.miuiLegacyDependency ?.getObjectField("mMiuiIconManagerFactory") ?.callMethod("get") ?.getObjectField("mMobileUiAdapter") @@ -353,7 +362,7 @@ object MobileTypeSingle2Hook : BaseHook() { } private fun getMobileViewBySubId(subId: Int, callback: (View) -> Unit) { - val statusBarIconController = Dependency.mMiuiLegacyDependency + val statusBarIconController = Dependency.miuiLegacyDependency ?.getObjectField("mStatusBarIconController") ?.callMethod("get") @@ -377,4 +386,4 @@ object MobileTypeSingle2Hook : BaseHook() { } } } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/sevtinge/hyperceiler/ui/app/main/HomePageFragment.java b/app/src/main/java/com/sevtinge/hyperceiler/ui/app/main/HomePageFragment.java index a333abf58b..6a13e3f921 100644 --- a/app/src/main/java/com/sevtinge/hyperceiler/ui/app/main/HomePageFragment.java +++ b/app/src/main/java/com/sevtinge/hyperceiler/ui/app/main/HomePageFragment.java @@ -184,7 +184,7 @@ private void onSearchItemClickListener(ModData ad) { Preference mHeadtipHyperCeiler; Preference mHeadtipTip; MainActivityContextHelper mainActivityContextHelper; - private final String TAG = "MainFragment"; + private static final String TAG = "MainFragment"; public static final String ANDROID_NS = "http://schemas.android.com/apk/res/android"; boolean mWarnTipVisible = false; boolean mNoticeTipVisible = false; @@ -338,7 +338,7 @@ public void checkWarnings() { if (!isSignPass) { mHeadtipWarn.setTitle(R.string.headtip_warn_sign_verification_failed); mHeadtipWarn.setVisible(true); - } else if (!isOfficialRom) { + } else if (isOfficialRom) { mHeadtipWarn.setTitle(R.string.headtip_warn_not_offical_rom); mHeadtipWarn.setVisible(true); } else if (!isFullSupport) { diff --git a/app/src/main/java/com/sevtinge/hyperceiler/ui/hooker/systemui/LockScreenSettings.java b/app/src/main/java/com/sevtinge/hyperceiler/ui/hooker/systemui/LockScreenSettings.java index 3e1af83e0a..58216dff8f 100644 --- a/app/src/main/java/com/sevtinge/hyperceiler/ui/hooker/systemui/LockScreenSettings.java +++ b/app/src/main/java/com/sevtinge/hyperceiler/ui/hooker/systemui/LockScreenSettings.java @@ -26,9 +26,13 @@ import com.sevtinge.hyperceiler.R; import com.sevtinge.hyperceiler.ui.hooker.dashboard.DashboardFragment; +import fan.preference.DropDownPreference; + public class LockScreenSettings extends DashboardFragment { + SwitchPreference mHideLeftButton; // 隐藏左侧按钮 SwitchPreference mPasswordFree; // 开机免输入密码 SwitchPreference mBlockEditor; // 禁用长按进入锁屏编辑 + DropDownPreference mHideLeftButtonNew; // 左侧按钮自定义 @Override public int getPreferenceScreenResId() { @@ -37,10 +41,16 @@ public int getPreferenceScreenResId() { @Override public void initPrefs() { + final boolean moreAndroidVersion = isMoreAndroidVersion(35); mPasswordFree = findPreference("prefs_key_system_ui_lock_screen_password_free"); mBlockEditor = findPreference("prefs_key_system_ui_lock_screen_block_editor"); - mBlockEditor.setVisible(!isMoreAndroidVersion(35)); + mHideLeftButton = findPreference("prefs_key_system_ui_lock_screen_hide_smart_screen"); + mHideLeftButtonNew = findPreference("prefs_key_system_ui_lock_screen_bottom_left_button"); + + mBlockEditor.setVisible(!moreAndroidVersion); + mHideLeftButton.setVisible(!moreAndroidVersion); + mHideLeftButtonNew.setVisible(moreAndroidVersion); if (isDeviceEncrypted(requireContext())) { mPasswordFree.setChecked(false); diff --git a/app/src/main/java/com/sevtinge/hyperceiler/utils/KotlinXposedHelper.kt b/app/src/main/java/com/sevtinge/hyperceiler/utils/KotlinXposedHelper.kt index f1d3139624..e198df4d45 100644 --- a/app/src/main/java/com/sevtinge/hyperceiler/utils/KotlinXposedHelper.kt +++ b/app/src/main/java/com/sevtinge/hyperceiler/utils/KotlinXposedHelper.kt @@ -16,7 +16,7 @@ * Copyright (C) 2023-2025 HyperCeiler Contributions */ -@file:Suppress("unused") +@file:Suppress("unused", "UNCHECKED_CAST") package com.sevtinge.hyperceiler.utils @@ -250,16 +250,27 @@ inline fun T.runCatchingOrNull(func: T.() -> R?) = try { null } +fun Any.getAdditionalInstanceField(field: String): Any? = getAdditionalInstanceField(this, field) + +fun Any.getAdditionalInstanceFieldAs(field: String) = getAdditionalInstanceField(field) as T + +fun Any.setAdditionalInstanceField( + field: String, + value: Any? +) = setAdditionalInstanceField(this, field, value) + +fun Any.removeAdditionalInstanceField( + field: String +): Any? = removeAdditionalInstanceField(this, field) + fun Any.getObjectField(field: String?): Any? = getObjectField(this, field) fun Any.getObjectFieldOrNull(field: String?): Any? = runCatchingOrNull { getObjectField(this, field) } -@Suppress("UNCHECKED_CAST") fun Any.getObjectFieldAs(field: String?) = getObjectField(this, field) as T -@Suppress("UNCHECKED_CAST") fun Any.getObjectFieldOrNullAs(field: String?) = runCatchingOrNull { getObjectField(this, field) as T } @@ -303,20 +314,16 @@ fun Class<*>.callStaticMethodOrNull(methodName: String?, vararg args: Any?): Any callStaticMethod(this, methodName, *args) } -@Suppress("UNCHECKED_CAST") fun Class<*>.callStaticMethodAs(methodName: String?, vararg args: Any?) = callStaticMethod(this, methodName, *args) as T -@Suppress("UNCHECKED_CAST") fun Class<*>.callStaticMethodOrNullAs(methodName: String?, vararg args: Any?) = runCatchingOrNull { callStaticMethod(this, methodName, *args) as T } -@Suppress("UNCHECKED_CAST") fun Class<*>.getStaticObjectFieldAs(field: String?) = getStaticObjectField(this, field) as T -@Suppress("UNCHECKED_CAST") fun Class<*>.getStaticObjectFieldOrNullAs(field: String?) = runCatchingOrNull { getStaticObjectField(this, field) as T } @@ -361,11 +368,9 @@ inline fun Class<*>.findFieldByExactType(): Field? = fun Class<*>.findFieldByExactType(type: Class<*>): Field? = findFirstFieldByExactType(this, type) -@Suppress("UNCHECKED_CAST") fun Any.callMethodAs(methodName: String?, vararg args: Any?) = callMethod(this, methodName, *args) as T -@Suppress("UNCHECKED_CAST") fun Any.callMethodOrNullAs(methodName: String?, vararg args: Any?) = runCatchingOrNull { callMethod(this, methodName, *args) as T } @@ -471,7 +476,6 @@ fun Class<*>.findFirstFieldByExactTypeOrNull(type: Class<*>?): Field? = runCatch fun Any.getFirstFieldByExactType(type: Class<*>): Any? = javaClass.findFirstFieldByExactType(type).get(this) -@Suppress("UNCHECKED_CAST") fun Any.getFirstFieldByExactTypeAs(type: Class<*>) = javaClass.findFirstFieldByExactType(type).get(this) as? T @@ -482,7 +486,6 @@ fun Any.getFirstFieldByExactTypeOrNull(type: Class<*>?): Any? = runCatchingOrNul javaClass.findFirstFieldByExactTypeOrNull(type)?.get(this) } -@Suppress("UNCHECKED_CAST") fun Any.getFirstFieldByExactTypeOrNullAs(type: Class<*>?) = getFirstFieldByExactTypeOrNull(type) as? T diff --git a/app/src/main/java/com/sevtinge/hyperceiler/utils/extension/Context.kt b/app/src/main/java/com/sevtinge/hyperceiler/utils/extension/Context.kt new file mode 100644 index 0000000000..93aa6ac0d8 --- /dev/null +++ b/app/src/main/java/com/sevtinge/hyperceiler/utils/extension/Context.kt @@ -0,0 +1,24 @@ +package com.sevtinge.hyperceiler.utils.extension + +import android.annotation.SuppressLint +import android.content.Context +import android.graphics.drawable.Drawable +import androidx.annotation.DrawableRes +import androidx.annotation.StringRes +import androidx.appcompat.content.res.AppCompatResources + +@SuppressLint("DiscouragedApi") +fun Context.getIdByName( + name: String, + type: String = "id" +): Int = resources.getIdentifier(name, type, packageName) + +@StringRes +fun Context.getStringIdByName(name: String): Int = getIdByName(name, "string") +fun Context.getString(name: String): String? = getString(getStringIdByName(name)) + +@DrawableRes +fun Context.getDrawableIdByName(name: String): Int = getIdByName(name, "drawable") +fun Context.getDrawable( + name: String +): Drawable? = AppCompatResources.getDrawable(this, getDrawableIdByName(name)) 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 ec5d0073fd..06960b76f7 100644 --- a/app/src/main/java/com/sevtinge/hyperceiler/view/WeatherView.kt +++ b/app/src/main/java/com/sevtinge/hyperceiler/view/WeatherView.kt @@ -28,10 +28,8 @@ import android.os.Message import android.text.TextUtils import android.widget.TextView import androidx.core.net.toUri -import com.github.kyuubiran.ezxhelper.ClassUtils.loadClass -import com.sevtinge.hyperceiler.module.hook.systemui.Dependency -import com.sevtinge.hyperceiler.module.hook.systemui.InterfacesImplManager -import com.sevtinge.hyperceiler.utils.callMethod +import com.sevtinge.hyperceiler.module.hook.systemui.base.api.Dependency +import com.sevtinge.hyperceiler.module.hook.systemui.base.api.MiuiStub import com.sevtinge.hyperceiler.utils.devicesdk.isMoreHyperOSVersion @SuppressLint("ViewConstructor") @@ -104,12 +102,11 @@ class WeatherView(context: Context?, private val showCity: Boolean) : TextView(c ) } - val clz = loadClass(InterfacesImplManager.I_ACTIVITY_STARTER) if (isMoreHyperOSVersion(2f)) { - InterfacesImplManager.sClassContainer[clz] + MiuiStub.sysUIProvider.activityStarter } else { - Dependency.get(clz) - }?.callMethod("startActivity", intent, true) + Dependency.activityStarter + }.startActivity(intent) } } diff --git a/app/src/main/res/drawable/ic_flashlight_off_filled.xml b/app/src/main/res/drawable/ic_flashlight_off_filled.xml new file mode 100644 index 0000000000..377731b55b --- /dev/null +++ b/app/src/main/res/drawable/ic_flashlight_off_filled.xml @@ -0,0 +1,13 @@ + + + + diff --git a/app/src/main/res/drawable/ic_flashlight_on_filled.xml b/app/src/main/res/drawable/ic_flashlight_on_filled.xml new file mode 100644 index 0000000000..c838ddcf3b --- /dev/null +++ b/app/src/main/res/drawable/ic_flashlight_on_filled.xml @@ -0,0 +1,13 @@ + + + + diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 62d2a868af..572c944a57 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -294,6 +294,7 @@ 加粗 关闭 + 隐藏 默认 左侧 右侧 @@ -658,6 +659,7 @@ 显示刷新间隔 隐藏相机 隐藏负一屏 + 底部左侧按钮 当前电流 锁屏按钮背景模糊 启用后相机和负一屏按钮的背景带有模糊,可能存在功耗偏高的情况,仅支持默认主题 diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index 051daa42d6..b84663ba5a 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -592,6 +592,18 @@ 4 + + @string/array_default + @string/array_hide + @string/ic_qs_title_flashlight + + + + 0 + 1 + 2 + + @string/array_default @string/array_align_left diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index be84e03b6e..2c8268e3f8 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -337,6 +337,7 @@ Bold Close + Hide Default Left Right @@ -671,6 +672,7 @@ Display refresh interval Hide camera Hide smart screen + Left button at the bottom Current Blur Lock screen buttons After enabling, the background of the camera and negative screen button on the Lock screen is blurred, which may cause high power consumption.\nSupport default theme only. diff --git a/app/src/main/res/xml/system_ui_lock_screen.xml b/app/src/main/res/xml/system_ui_lock_screen.xml index 8bba00681d..df28a6c0a1 100644 --- a/app/src/main/res/xml/system_ui_lock_screen.xml +++ b/app/src/main/res/xml/system_ui_lock_screen.xml @@ -23,15 +23,23 @@ + android:title="@string/system_ui_lock_screen_hide_smart_screen" /> + + + android:title="@string/system_ui_lock_screen_hide_camera" />