Use EasyXposed (#112)

* add EasyXposed

* change hook entry

* [android] use EasyXposed

* [com.miui.mediaeditor] use EasyXposed

* [com.miui.home] use EasyXposed

* [com.miui.powerkeeper] use EasyXposed

* [com.miui.screenshot] use EasyXposed

* [com.miui.securitycenter] use EasyXposed

* [com.android.settings] use EasyXposed

* [com.android.thememanager] use EasyXposed

* [com.android.systemui] use EasyXposed
This commit is contained in:
QQ little ice
2022-03-27 02:07:02 +08:00
committed by GitHub
parent 6f91cab9b8
commit 4c13ad4152
60 changed files with 647 additions and 530 deletions

View File

@@ -27,6 +27,8 @@
public void *(de.robv.android.xposed.IXposedHookZygoteInit$StartupParam); public void *(de.robv.android.xposed.IXposedHookZygoteInit$StartupParam);
} }
-keep class * extends com.lt2333.simplicitytools.util.xposed.EasyXposedInit
-assumenosideeffects class kotlin.jvm.internal.Intrinsics { -assumenosideeffects class kotlin.jvm.internal.Intrinsics {
public static void check*(...); public static void check*(...);
public static void throw*(...); public static void throw*(...);

View File

@@ -1 +1 @@
com.lt2333.simplicitytools.hook.MainHook com.lt2333.simplicitytools.hook.XposedEntry

View File

@@ -1,46 +0,0 @@
package com.lt2333.simplicitytools.hook
import com.github.kyuubiran.ezxhelper.init.EzXHelperInit
import com.lt2333.simplicitytools.BuildConfig
import com.lt2333.simplicitytools.hook.app.*
import de.robv.android.xposed.IXposedHookLoadPackage
import de.robv.android.xposed.IXposedHookZygoteInit
import de.robv.android.xposed.XSharedPreferences
import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam
class MainHook : IXposedHookLoadPackage,IXposedHookZygoteInit {
private var prefs = XSharedPreferences(BuildConfig.APPLICATION_ID, "config")
override fun initZygote(startupParam: IXposedHookZygoteInit.StartupParam) {
EzXHelperInit.initZygote(startupParam)
}
override fun handleLoadPackage(lpparam: LoadPackageParam) {
if (prefs.getBoolean("main_switch", true)) {
EzXHelperInit.initHandleLoadPackage(lpparam)
EzXHelperInit.setEzClassLoader(lpparam.classLoader)
when (lpparam.packageName) {
//Android
"android" -> Android().handleLoadPackage(lpparam)
//系统界面
"com.android.systemui" -> SystemUI().handleLoadPackage(lpparam)
//电量与性能
"com.miui.powerkeeper" -> PowerKeeper().handleLoadPackage(lpparam)
//桌面
"com.miui.home" -> MiuiHome().handleLoadPackage(lpparam)
//手机管家
"com.miui.securitycenter" -> SecurityCenter().handleLoadPackage(lpparam)
//相册编辑
"com.miui.mediaeditor" -> MediaEditor().handleLoadPackage(lpparam)
//系统更新
"com.android.updater" -> Updater().handleLoadPackage(lpparam)
//设置
"com.android.settings" -> Settings().handleLoadPackage(lpparam)
//主题壁纸
"com.android.thememanager" -> ThemeManager().handleLoadPackage(lpparam)
//截屏
"com.miui.screenshot" -> ScreenShot().handleLoadPackage(lpparam)
}
}
}
}

View File

@@ -0,0 +1,37 @@
package com.lt2333.simplicitytools.hook
import com.lt2333.simplicitytools.BuildConfig
import com.lt2333.simplicitytools.hook.app.*
import com.lt2333.simplicitytools.util.xposed.EasyXposedInit
import com.lt2333.simplicitytools.util.xposed.base.AppRegister
import de.robv.android.xposed.IXposedHookZygoteInit
import de.robv.android.xposed.XSharedPreferences
import de.robv.android.xposed.callbacks.XC_LoadPackage
class XposedEntry: EasyXposedInit() {
private var prefs = XSharedPreferences(BuildConfig.APPLICATION_ID, "config")
override val registeredApp: List<AppRegister> = listOf(
Android, // Android
SystemUI, // 系统界面
PowerKeeper, // 电量与性能
MiuiHome, // 桌面
SecurityCenter, // 手机管家
MediaEditor, // 相册编辑
Updater, // 系统更新
Settings, // 设置
ThemeManager, // 主题壁纸
ScreenShot, // 截屏
)
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam?) {
if (prefs.getBoolean("main_switch", true)) {
super.handleLoadPackage(lpparam)
}
}
override fun initZygote(startupParam: IXposedHookZygoteInit.StartupParam?) {
super.initZygote(startupParam)
}
}

View File

@@ -5,22 +5,25 @@ import com.lt2333.simplicitytools.hook.app.android.DisableFlagSecure
import com.lt2333.simplicitytools.hook.app.android.MaxWallpaperScale import com.lt2333.simplicitytools.hook.app.android.MaxWallpaperScale
import com.lt2333.simplicitytools.hook.app.android.RemoveSmallWindowRestrictions import com.lt2333.simplicitytools.hook.app.android.RemoveSmallWindowRestrictions
import com.lt2333.simplicitytools.hook.app.android.corepatch.CorePatch import com.lt2333.simplicitytools.hook.app.android.corepatch.CorePatch
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.AppRegister
import de.robv.android.xposed.XposedBridge import de.robv.android.xposed.XposedBridge
import de.robv.android.xposed.callbacks.XC_LoadPackage import de.robv.android.xposed.callbacks.XC_LoadPackage
class Android : IXposedHookLoadPackage { object Android: AppRegister() {
override val packageName: String = "android"
override val processName: List<String> = emptyList()
override val logTag: String = "Simplicitytools"
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) { override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
XposedBridge.log("Simplicitytools: 成功 Hook "+javaClass.simpleName) XposedBridge.log("Simplicitytools: 成功 Hook "+javaClass.simpleName)
//核心破解 //核心破解
CorePatch().handleLoadPackage(lpparam) CorePatch().handleLoadPackage(lpparam)
//允许截图
DisableFlagSecure().handleLoadPackage(lpparam) autoInitHooks(lpparam,
//上层显示 DisableFlagSecure, //允许截图
DeleteOnPostNotification().handleLoadPackage(lpparam) DeleteOnPostNotification, //上层显示
//解除小窗限制 RemoveSmallWindowRestrictions, //解除小窗限制
RemoveSmallWindowRestrictions().handleLoadPackage(lpparam) MaxWallpaperScale, //壁纸缩放比例
//壁纸缩放比例 )
MaxWallpaperScale().handleLoadPackage(lpparam)
} }
} }

View File

@@ -1,14 +1,19 @@
package com.lt2333.simplicitytools.hook.app package com.lt2333.simplicitytools.hook.app
import com.lt2333.simplicitytools.hook.app.mediaeditor.UnlockUnlimitedCropping import com.lt2333.simplicitytools.hook.app.mediaeditor.UnlockUnlimitedCropping
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.AppRegister
import de.robv.android.xposed.XposedBridge import de.robv.android.xposed.XposedBridge
import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam import de.robv.android.xposed.callbacks.XC_LoadPackage
class MediaEditor : IXposedHookLoadPackage { object MediaEditor: AppRegister() {
override fun handleLoadPackage(lpparam: LoadPackageParam) { override val packageName: String = "com.miui.mediaeditor"
override val processName: List<String> = emptyList()
override val logTag: String = "Simplicitytools"
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
XposedBridge.log("Simplicitytools: 成功 Hook "+javaClass.simpleName) XposedBridge.log("Simplicitytools: 成功 Hook "+javaClass.simpleName)
//解锁裁切最小值 autoInitHooks(lpparam,
UnlockUnlimitedCropping().handleLoadPackage(lpparam) UnlockUnlimitedCropping, //解锁裁切最小值
)
} }
} }

View File

@@ -2,16 +2,20 @@ package com.lt2333.simplicitytools.hook.app
import com.lt2333.simplicitytools.hook.app.miuihome.AlwaysDisplayTime import com.lt2333.simplicitytools.hook.app.miuihome.AlwaysDisplayTime
import com.lt2333.simplicitytools.hook.app.miuihome.DoubleTapToSleep import com.lt2333.simplicitytools.hook.app.miuihome.DoubleTapToSleep
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.AppRegister
import de.robv.android.xposed.XposedBridge import de.robv.android.xposed.XposedBridge
import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam import de.robv.android.xposed.callbacks.XC_LoadPackage
class MiuiHome : IXposedHookLoadPackage { object MiuiHome: AppRegister() {
override fun handleLoadPackage(lpparam: LoadPackageParam) { override val packageName: String = "com.miui.home"
override val processName: List<String> = emptyList()
override val logTag: String = "Simplicitytools"
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
XposedBridge.log("Simplicitytools: 成功 Hook "+javaClass.simpleName) XposedBridge.log("Simplicitytools: 成功 Hook "+javaClass.simpleName)
//时钟显示时钟 autoInitHooks(lpparam,
AlwaysDisplayTime().handleLoadPackage(lpparam) AlwaysDisplayTime, //时钟显示时钟
//双击锁屏 DoubleTapToSleep, //双击锁屏
DoubleTapToSleep().handleLoadPackage(lpparam) )
} }
} }

View File

@@ -2,18 +2,20 @@ package com.lt2333.simplicitytools.hook.app
import com.lt2333.simplicitytools.hook.app.powerkeeper.LockMaxFps import com.lt2333.simplicitytools.hook.app.powerkeeper.LockMaxFps
import com.lt2333.simplicitytools.hook.app.powerkeeper.PreventRecoveryOfBatteryOptimizationWhitelist import com.lt2333.simplicitytools.hook.app.powerkeeper.PreventRecoveryOfBatteryOptimizationWhitelist
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.AppRegister
import de.robv.android.xposed.XposedBridge import de.robv.android.xposed.XposedBridge
import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam import de.robv.android.xposed.callbacks.XC_LoadPackage
class PowerKeeper : IXposedHookLoadPackage { object PowerKeeper: AppRegister() {
override val packageName: String = "com.miui.powerkeeper"
override val processName: List<String> = emptyList()
override val logTag: String = "Simplicitytools"
override fun handleLoadPackage(lpparam: LoadPackageParam) { override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
XposedBridge.log("Simplicitytools: 成功 Hook "+javaClass.simpleName) XposedBridge.log("Simplicitytools: 成功 Hook "+javaClass.simpleName)
//锁定最高刷新率 autoInitHooks(lpparam,
LockMaxFps().handleLoadPackage(lpparam) LockMaxFps, //锁定最高刷新率
//防止恢复电池优化白名单 PreventRecoveryOfBatteryOptimizationWhitelist, //防止恢复电池优化白名单
PreventRecoveryOfBatteryOptimizationWhitelist().handleLoadPackage(lpparam) )
} }
} }

View File

@@ -1,15 +1,19 @@
package com.lt2333.simplicitytools.hook.app package com.lt2333.simplicitytools.hook.app
import com.lt2333.simplicitytools.hook.app.screenshot.UnlockUnlimitedCropping import com.lt2333.simplicitytools.hook.app.screenshot.UnlockUnlimitedCropping
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.AppRegister
import de.robv.android.xposed.XposedBridge import de.robv.android.xposed.XposedBridge
import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam import de.robv.android.xposed.callbacks.XC_LoadPackage
class ScreenShot : IXposedHookLoadPackage { object ScreenShot: AppRegister() {
override val packageName: String = "com.miui.screenshot"
override val processName: List<String> = emptyList()
override val logTag: String = "Simplicitytools"
override fun handleLoadPackage(lpparam: LoadPackageParam) { override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
XposedBridge.log("Simplicitytools: 成功 Hook " + javaClass.simpleName) XposedBridge.log("Simplicitytools: 成功 Hook " + javaClass.simpleName)
//锁定最高刷新率 autoInitHooks(lpparam,
UnlockUnlimitedCropping().handleLoadPackage(lpparam) UnlockUnlimitedCropping, //锁定最高刷新率
)
} }
} }

View File

@@ -1,23 +1,23 @@
package com.lt2333.simplicitytools.hook.app package com.lt2333.simplicitytools.hook.app
import com.lt2333.simplicitytools.hook.app.securitycenter.* import com.lt2333.simplicitytools.hook.app.securitycenter.*
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.AppRegister
import de.robv.android.xposed.XposedBridge import de.robv.android.xposed.XposedBridge
import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam import de.robv.android.xposed.callbacks.XC_LoadPackage
class SecurityCenter : IXposedHookLoadPackage { object SecurityCenter: AppRegister() {
override val packageName: String = "com.miui.securitycenter"
override val processName: List<String> = emptyList()
override val logTag: String = "Simplicitytools"
override fun handleLoadPackage(lpparam: LoadPackageParam) { override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
XposedBridge.log("Simplicitytools: 成功 Hook " + javaClass.simpleName) XposedBridge.log("Simplicitytools: 成功 Hook " + javaClass.simpleName)
//跳过 5/10秒等待时间 autoInitHooks(lpparam,
SkipWaitingTime().handleLoadPackage(lpparam) SkipWaitingTime, //跳过 5/10秒等待时间
//锁定 100分 LockOneHundred, //锁定 100分
LockOneHundred().handleLoadPackage(lpparam) RemoveMacroBlacklist, //去除自动连招黑名单
//去除自动连招黑名单 ShowBatteryTemperature, //显示电池温度
RemoveMacroBlacklist().handleLoadPackage(lpparam) RemoveOpenAppConfirmationPopup, //去除打开应用弹窗
//显示电池温度 )
ShowBatteryTemperature().handleLoadPackage(lpparam)
//去除打开应用弹窗
RemoveOpenAppConfirmationPopup().handleLoadPackage(lpparam)
} }
} }

View File

@@ -1,13 +1,19 @@
package com.lt2333.simplicitytools.hook.app package com.lt2333.simplicitytools.hook.app
import com.lt2333.simplicitytools.hook.app.settings.ShowNotificationImportance import com.lt2333.simplicitytools.hook.app.settings.ShowNotificationImportance
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.AppRegister
import de.robv.android.xposed.XposedBridge import de.robv.android.xposed.XposedBridge
import de.robv.android.xposed.callbacks.XC_LoadPackage import de.robv.android.xposed.callbacks.XC_LoadPackage
class Settings: IXposedHookLoadPackage { object Settings: AppRegister() {
override val packageName: String = "com.android.settings"
override val processName: List<String> = emptyList()
override val logTag: String = "Simplicitytools"
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) { override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
XposedBridge.log("Simplicitytools: 成功 Hook "+javaClass.simpleName) XposedBridge.log("Simplicitytools: 成功 Hook "+javaClass.simpleName)
ShowNotificationImportance().handleLoadPackage(lpparam) autoInitHooks(lpparam,
ShowNotificationImportance, //显示通知重要程度
)
} }
} }

View File

@@ -1,67 +1,45 @@
package com.lt2333.simplicitytools.hook.app package com.lt2333.simplicitytools.hook.app
import com.lt2333.simplicitytools.hook.app.systemui.* import com.lt2333.simplicitytools.hook.app.systemui.*
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.AppRegister
import de.robv.android.xposed.XposedBridge import de.robv.android.xposed.XposedBridge
import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam import de.robv.android.xposed.callbacks.XC_LoadPackage
class SystemUI : IXposedHookLoadPackage { object SystemUI: AppRegister() {
override val packageName: String = "com.android.systemui"
override val processName: List<String> = emptyList()
override val logTag: String = "Simplicitytools"
override fun handleLoadPackage(lpparam: LoadPackageParam) { override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
XposedBridge.log("Simplicitytools: 成功 Hook "+javaClass.simpleName) XposedBridge.log("Simplicitytools: 成功 Hook "+javaClass.simpleName)
//隐藏状态栏图标 autoInitHooks(lpparam,
HideStatusBarIcon().handleLoadPackage(lpparam) HideStatusBarIcon, //隐藏状态栏图标
//隐藏电池 HideBatteryIcon, //隐藏电池
HideBatteryIcon().handleLoadPackage(lpparam) HideHDIcon, //隐藏HD图标
//隐藏HD图标 HideSimIcon, //隐藏SIM卡图标
HideHDIcon().handleLoadPackage(lpparam) HideMobileActivityIcon, //隐藏移动箭头图标
//隐藏SIM卡图标 HideMobileTypeIcon, //隐藏移动类型图标
HideSimIcon().handleLoadPackage(lpparam) HideStatusBarNetworkSpeedSecond, //隐藏状态栏网速/s
//隐藏移动箭头图标 HideWifiActivityIcon, //隐藏WIFI活动箭头图标
HideMobileActivityIcon().handleLoadPackage(lpparam) RemoveTheMaximumNumberOfNotificationIcons, //移除通知图标上限
//隐藏移动类型图标 StatusBarNetworkSpeedRefreshSpeed, //状态栏网速秒刷新
HideMobileTypeIcon().handleLoadPackage(lpparam) StatusBarTimeCustomization, //状态栏时钟自定义
//隐藏状态栏网速/s RemoveTheLeftSideOfTheLockScreen, //移除锁屏负一屏功能
HideStatusBarNetworkSpeedSecond().handleLoadPackage(lpparam) RemoveLockScreenCamera, //移除锁屏相机功能
//隐藏WIFI活动箭头图标 NotificationWeather, //通知面板天气
HideWifiActivityIcon().handleLoadPackage(lpparam) OldNotificationWeather,
//移除通知图标上限 ControlCenterWeather, //控制中心天气
RemoveTheMaximumNumberOfNotificationIcons().handleLoadPackage(lpparam) //StatusBarCurrent, //TODO状态栏电流
//状态栏网速秒刷新 StatusBarLayout, //状态栏布局
StatusBarNetworkSpeedRefreshSpeed().handleLoadPackage(lpparam) HideNetworkSpeedSplitter, //隐藏时钟与实时网速之间的分隔符
//状态栏时钟自定义 WaveCharge, //Alpha充电动画
StatusBarTimeCustomization().handleLoadPackage(lpparam) LockScreenCurrent, //锁屏电流
//移除锁屏负一屏功能 LockScreenDoubleTapToSleep, //锁屏下双击锁屏
RemoveTheLeftSideOfTheLockScreen().handleLoadPackage(lpparam) StatusBarDoubleTapToSleep, //双击状态栏锁屏
//移除锁屏相机功能 OldQSCustom, //旧版快速设置自定义
RemoveLockScreenCamera().handleLoadPackage(lpparam) DoubleLineNetworkSpeed, //双排网速
//通知面板天气 StatusBarBigMobileTypeIcon, //大移动类型
NotificationWeather().handleLoadPackage(lpparam) BatteryPercentage, //电量百分比
OldNotificationWeather().handleLoadPackage(lpparam) )
//控制中心天气
ControlCenterWeather().handleLoadPackage(lpparam)
//TODO状态栏电流
//StatusBarCurrent().handleLoadPackage(lpparam)
//状态栏布局
StatusBarLayout().handleLoadPackage(lpparam)
//隐藏时钟与实时网速之间的分隔符
HideNetworkSpeedSplitter().handleLoadPackage(lpparam)
//Alpha充电动画
WaveCharge().handleLoadPackage(lpparam)
//锁屏电流
LockScreenCurrent().handleLoadPackage(lpparam)
//锁屏下双击锁屏
LockScreenDoubleTapToSleep().handleLoadPackage(lpparam)
//双击状态栏锁屏
StatusBarDoubleTapToSleep().handleLoadPackage(lpparam)
//旧版快速设置自定义
OldQSCustom().handleLoadPackage(lpparam)
//双排网速
DoubleLineNetworkSpeed().handleLoadPackage(lpparam)
//大移动类型
StatusBarBigMobileTypeIcon().handleLoadPackage(lpparam)
//电量百分比
BatteryPercentage().handleLoadPackage(lpparam)
} }
}
}

View File

@@ -1,14 +1,19 @@
package com.lt2333.simplicitytools.hook.app package com.lt2333.simplicitytools.hook.app
import com.lt2333.simplicitytools.hook.app.thememanager.RemoveAds import com.lt2333.simplicitytools.hook.app.thememanager.RemoveAds
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.AppRegister
import de.robv.android.xposed.XposedBridge import de.robv.android.xposed.XposedBridge
import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam import de.robv.android.xposed.callbacks.XC_LoadPackage
class ThemeManager : IXposedHookLoadPackage { object ThemeManager: AppRegister() {
override fun handleLoadPackage(lpparam: LoadPackageParam) { override val packageName: String = "com.android.thememanager"
override val processName: List<String> = emptyList()
override val logTag: String = "Simplicitytools"
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
XposedBridge.log("Simplicitytools: 成功 Hook "+javaClass.simpleName) XposedBridge.log("Simplicitytools: 成功 Hook "+javaClass.simpleName)
//移除主题壁纸的广告 autoInitHooks(lpparam,
RemoveAds().handleLoadPackage(lpparam) RemoveAds, //移除主题壁纸的广告
)
} }
} }

View File

@@ -2,11 +2,15 @@ package com.lt2333.simplicitytools.hook.app
import com.lt2333.simplicitytools.util.XSPUtils import com.lt2333.simplicitytools.util.XSPUtils
import com.lt2333.simplicitytools.util.hookBeforeMethod import com.lt2333.simplicitytools.util.hookBeforeMethod
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.AppRegister
import de.robv.android.xposed.XposedHelpers import de.robv.android.xposed.XposedHelpers
import de.robv.android.xposed.callbacks.XC_LoadPackage import de.robv.android.xposed.callbacks.XC_LoadPackage
class Updater : IXposedHookLoadPackage { object Updater: AppRegister() {
override val packageName: String = "com.android.updater"
override val processName: List<String> = emptyList()
override val logTag: String = "Simplicitytools"
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) { override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
if (XSPUtils.getBoolean("remove_ota_validate", false)) { if (XSPUtils.getBoolean("remove_ota_validate", false)) {
var letter = 'a' var letter = 'a'

View File

@@ -2,15 +2,16 @@ package com.lt2333.simplicitytools.hook.app.android
import com.lt2333.simplicitytools.util.hasEnable import com.lt2333.simplicitytools.util.hasEnable
import com.lt2333.simplicitytools.util.hookBeforeMethod import com.lt2333.simplicitytools.util.hookBeforeMethod
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.callbacks.XC_LoadPackage
class DeleteOnPostNotification : IXposedHookLoadPackage { object DeleteOnPostNotification : HookRegister() {
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
"com.android.server.wm.AlertWindowNotification".hookBeforeMethod(lpparam.classLoader, "onPostNotification") { override fun init() {
"com.android.server.wm.AlertWindowNotification".hookBeforeMethod(getDefaultClassLoader(), "onPostNotification") {
hasEnable("delete_on_post_notification") { hasEnable("delete_on_post_notification") {
it.result = null it.result = null
} }
} }
} }
} }

View File

@@ -2,15 +2,16 @@ package com.lt2333.simplicitytools.hook.app.android
import com.lt2333.simplicitytools.util.hasEnable import com.lt2333.simplicitytools.util.hasEnable
import com.lt2333.simplicitytools.util.hookBeforeMethod import com.lt2333.simplicitytools.util.hookBeforeMethod
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.callbacks.XC_LoadPackage
class DisableFlagSecure : IXposedHookLoadPackage { object DisableFlagSecure : HookRegister() {
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
"com.android.server.wm.WindowState".hookBeforeMethod(lpparam.classLoader, "isSecureLocked") { override fun init() {
"com.android.server.wm.WindowState".hookBeforeMethod(getDefaultClassLoader(), "isSecureLocked") {
hasEnable("disable_flag_secure") { hasEnable("disable_flag_secure") {
it.result = false it.result = false
} }
} }
} }
} }

View File

@@ -3,15 +3,15 @@ package com.lt2333.simplicitytools.hook.app.android
import com.lt2333.simplicitytools.util.XSPUtils import com.lt2333.simplicitytools.util.XSPUtils
import com.lt2333.simplicitytools.util.hookBeforeMethod import com.lt2333.simplicitytools.util.hookBeforeMethod
import com.lt2333.simplicitytools.util.setFloatField import com.lt2333.simplicitytools.util.setFloatField
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.callbacks.XC_LoadPackage
class MaxWallpaperScale : IXposedHookLoadPackage { object MaxWallpaperScale : HookRegister() {
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
"com.android.server.wm.WallpaperController".hookBeforeMethod(lpparam.classLoader, "zoomOutToScale", Float::class.java) { override fun init() {
"com.android.server.wm.WallpaperController".hookBeforeMethod(getDefaultClassLoader(), "zoomOutToScale", Float::class.java) {
val value = XSPUtils.getFloat("max_wallpaper_scale", 1.1f) val value = XSPUtils.getFloat("max_wallpaper_scale", 1.1f)
it.thisObject.setFloatField("mMaxWallpaperScale", value) it.thisObject.setFloatField("mMaxWallpaperScale", value)
} }
} }
} }

View File

@@ -4,36 +4,35 @@ import android.content.Context
import com.lt2333.simplicitytools.util.hasEnable import com.lt2333.simplicitytools.util.hasEnable
import com.lt2333.simplicitytools.util.hookAfterMethod import com.lt2333.simplicitytools.util.hookAfterMethod
import com.lt2333.simplicitytools.util.hookBeforeMethod import com.lt2333.simplicitytools.util.hookBeforeMethod
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.callbacks.XC_LoadPackage
class RemoveSmallWindowRestrictions : IXposedHookLoadPackage { object RemoveSmallWindowRestrictions : HookRegister() {
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
override fun init() {
// 强制所有活动设为可以调整大小 // 强制所有活动设为可以调整大小
"com.android.server.wm.Task".hookBeforeMethod(lpparam.classLoader, "isResizeable") { "com.android.server.wm.Task".hookBeforeMethod(getDefaultClassLoader(), "isResizeable") {
hasEnable("remove_small_window_restrictions") { hasEnable("remove_small_window_restrictions") {
it.result = true it.result = true
} }
} }
"android.util.MiuiMultiWindowAdapter".hookAfterMethod(lpparam.classLoader, "getFreeformBlackList") { "android.util.MiuiMultiWindowAdapter".hookAfterMethod(getDefaultClassLoader(), "getFreeformBlackList") {
hasEnable("remove_small_window_restrictions") { hasEnable("remove_small_window_restrictions") {
it.result = (it.result as MutableList<*>).apply { clear() } it.result = (it.result as MutableList<*>).apply { clear() }
} }
} }
"android.util.MiuiMultiWindowAdapter".hookAfterMethod(lpparam.classLoader, "getFreeformBlackListFromCloud", Context::class.java) { "android.util.MiuiMultiWindowAdapter".hookAfterMethod(getDefaultClassLoader(), "getFreeformBlackListFromCloud", Context::class.java) {
hasEnable("remove_small_window_restrictions") { hasEnable("remove_small_window_restrictions") {
it.result = (it.result as MutableList<*>).apply { clear() } it.result = (it.result as MutableList<*>).apply { clear() }
} }
} }
"android.util.MiuiMultiWindowUtils".hookAfterMethod(lpparam.classLoader, "supportFreeform") { "android.util.MiuiMultiWindowUtils".hookAfterMethod(getDefaultClassLoader(), "supportFreeform") {
hasEnable("remove_small_window_restrictions") { hasEnable("remove_small_window_restrictions") {
it.result = true it.result = true
} }
} }
} }
} }

View File

@@ -1,17 +1,17 @@
package com.lt2333.simplicitytools.hook.app.mediaeditor package com.lt2333.simplicitytools.hook.app.mediaeditor
import com.lt2333.simplicitytools.util.XSPUtils import com.lt2333.simplicitytools.util.XSPUtils
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.XC_MethodHook import de.robv.android.xposed.XC_MethodHook
import de.robv.android.xposed.XposedHelpers import de.robv.android.xposed.XposedHelpers
import de.robv.android.xposed.callbacks.XC_LoadPackage
class UnlockUnlimitedCropping :IXposedHookLoadPackage { object UnlockUnlimitedCropping : HookRegister() {
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
override fun init() {
//解锁图库裁切最小值 //解锁图库裁切最小值
val classIfExists = XposedHelpers.findClassIfExists( val classIfExists = XposedHelpers.findClassIfExists(
"com.miui.gallery.editor.photo.core.imports.obsoletes.Crop\$ResizeDetector", "com.miui.gallery.editor.photo.core.imports.obsoletes.Crop\$ResizeDetector",
lpparam.classLoader getDefaultClassLoader()
) )
XposedHelpers.findAndHookMethod( XposedHelpers.findAndHookMethod(
classIfExists, classIfExists,
@@ -26,7 +26,7 @@ class UnlockUnlimitedCropping :IXposedHookLoadPackage {
//截图无限裁切 //截图无限裁切
val classIfExists2 = XposedHelpers.findClassIfExists( val classIfExists2 = XposedHelpers.findClassIfExists(
"com.miui.gallery.editor.photo.screen.crop.ScreenCropView\$ResizeDetector", "com.miui.gallery.editor.photo.screen.crop.ScreenCropView\$ResizeDetector",
lpparam.classLoader getDefaultClassLoader()
) )
XposedHelpers.findAndHookMethod( XposedHelpers.findAndHookMethod(
@@ -40,4 +40,5 @@ class UnlockUnlimitedCropping :IXposedHookLoadPackage {
} }
}) })
} }
} }

View File

@@ -1,16 +1,16 @@
package com.lt2333.simplicitytools.hook.app.miuihome package com.lt2333.simplicitytools.hook.app.miuihome
import com.lt2333.simplicitytools.util.XSPUtils import com.lt2333.simplicitytools.util.XSPUtils
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.XC_MethodHook import de.robv.android.xposed.XC_MethodHook
import de.robv.android.xposed.XposedHelpers import de.robv.android.xposed.XposedHelpers
import de.robv.android.xposed.callbacks.XC_LoadPackage
class AlwaysDisplayTime : IXposedHookLoadPackage { object AlwaysDisplayTime : HookRegister() {
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
override fun init() {
val classIfExists = XposedHelpers.findClassIfExists( val classIfExists = XposedHelpers.findClassIfExists(
"com.miui.home.launcher.Workspace", "com.miui.home.launcher.Workspace",
lpparam.classLoader getDefaultClassLoader()
) )
XposedHelpers.findAndHookMethod( XposedHelpers.findAndHookMethod(
classIfExists, classIfExists,
@@ -23,4 +23,5 @@ class AlwaysDisplayTime : IXposedHookLoadPackage {
} }
}) })
} }
} }

View File

@@ -4,15 +4,15 @@ import android.content.Context
import android.content.Intent import android.content.Intent
import android.view.MotionEvent import android.view.MotionEvent
import com.lt2333.simplicitytools.util.* import com.lt2333.simplicitytools.util.*
import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import com.yuk.miuihome.module.DoubleTapController import com.yuk.miuihome.module.DoubleTapController
import de.robv.android.xposed.IXposedHookLoadPackage
import de.robv.android.xposed.XposedHelpers import de.robv.android.xposed.XposedHelpers
import de.robv.android.xposed.callbacks.XC_LoadPackage
class DoubleTapToSleep : IXposedHookLoadPackage { object DoubleTapToSleep : HookRegister() {
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
override fun init() {
hasEnable("double_tap_to_sleep") { hasEnable("double_tap_to_sleep") {
"com.miui.home.launcher.Workspace".findClass(lpparam.classLoader) "com.miui.home.launcher.Workspace".findClass(getDefaultClassLoader())
.hookAfterAllConstructors { .hookAfterAllConstructors {
var mDoubleTapControllerEx = var mDoubleTapControllerEx =
XposedHelpers.getAdditionalInstanceField( XposedHelpers.getAdditionalInstanceField(
@@ -28,7 +28,7 @@ class DoubleTapToSleep : IXposedHookLoadPackage {
) )
} }
"com.miui.home.launcher.Workspace".findClass(lpparam.classLoader).hookBeforeMethod( "com.miui.home.launcher.Workspace".findClass(getDefaultClassLoader()).hookBeforeMethod(
"dispatchTouchEvent", MotionEvent::class.java "dispatchTouchEvent", MotionEvent::class.java
) { ) {
val mDoubleTapControllerEx = XposedHelpers.getAdditionalInstanceField( val mDoubleTapControllerEx = XposedHelpers.getAdditionalInstanceField(
@@ -50,4 +50,5 @@ class DoubleTapToSleep : IXposedHookLoadPackage {
} }
} }
} }
} }

View File

@@ -1,16 +1,16 @@
package com.lt2333.simplicitytools.hook.app.powerkeeper package com.lt2333.simplicitytools.hook.app.powerkeeper
import com.lt2333.simplicitytools.util.XSPUtils import com.lt2333.simplicitytools.util.XSPUtils
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.XC_MethodHook import de.robv.android.xposed.XC_MethodHook
import de.robv.android.xposed.XposedHelpers import de.robv.android.xposed.XposedHelpers
import de.robv.android.xposed.callbacks.XC_LoadPackage
class LockMaxFps : IXposedHookLoadPackage { object LockMaxFps : HookRegister() {
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
override fun init() {
val classIfExists = XposedHelpers.findClassIfExists( val classIfExists = XposedHelpers.findClassIfExists(
"com.miui.powerkeeper.statemachine.DisplayFrameSetting", "com.miui.powerkeeper.statemachine.DisplayFrameSetting",
lpparam.classLoader getDefaultClassLoader()
) )
XposedHelpers.findAndHookMethod( XposedHelpers.findAndHookMethod(
classIfExists, classIfExists,
@@ -25,4 +25,5 @@ class LockMaxFps : IXposedHookLoadPackage {
} }
}) })
} }
} }

View File

@@ -1,16 +1,16 @@
package com.lt2333.simplicitytools.hook.app.powerkeeper package com.lt2333.simplicitytools.hook.app.powerkeeper
import com.lt2333.simplicitytools.util.XSPUtils import com.lt2333.simplicitytools.util.XSPUtils
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.XC_MethodHook import de.robv.android.xposed.XC_MethodHook
import de.robv.android.xposed.XposedHelpers import de.robv.android.xposed.XposedHelpers
import de.robv.android.xposed.callbacks.XC_LoadPackage
class PreventRecoveryOfBatteryOptimizationWhitelist : IXposedHookLoadPackage { object PreventRecoveryOfBatteryOptimizationWhitelist : HookRegister() {
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
override fun init() {
val classIfExists = XposedHelpers.findClassIfExists( val classIfExists = XposedHelpers.findClassIfExists(
"com.miui.powerkeeper.statemachine.ForceDozeController", "com.miui.powerkeeper.statemachine.ForceDozeController",
lpparam.classLoader getDefaultClassLoader()
) )
XposedHelpers.findAndHookMethod( XposedHelpers.findAndHookMethod(
classIfExists, classIfExists,
@@ -28,4 +28,5 @@ class PreventRecoveryOfBatteryOptimizationWhitelist : IXposedHookLoadPackage {
} }
}) })
} }
} }

View File

@@ -1,17 +1,17 @@
package com.lt2333.simplicitytools.hook.app.screenshot package com.lt2333.simplicitytools.hook.app.screenshot
import com.lt2333.simplicitytools.util.XSPUtils import com.lt2333.simplicitytools.util.XSPUtils
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.XC_MethodHook import de.robv.android.xposed.XC_MethodHook
import de.robv.android.xposed.XposedHelpers import de.robv.android.xposed.XposedHelpers
import de.robv.android.xposed.callbacks.XC_LoadPackage
class UnlockUnlimitedCropping :IXposedHookLoadPackage { object UnlockUnlimitedCropping : HookRegister() {
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
override fun init() {
//截图无限裁切 //截图无限裁切
val classIfExists2 = XposedHelpers.findClassIfExists( val classIfExists2 = XposedHelpers.findClassIfExists(
"com.miui.gallery.editor.photo.screen.crop.ScreenCropView\$b", "com.miui.gallery.editor.photo.screen.crop.ScreenCropView\$b",
lpparam.classLoader getDefaultClassLoader()
) )
XposedHelpers.findAndHookMethod( XposedHelpers.findAndHookMethod(
@@ -25,4 +25,5 @@ class UnlockUnlimitedCropping :IXposedHookLoadPackage {
} }
}) })
} }
} }

View File

@@ -4,14 +4,13 @@ import android.view.View
import com.lt2333.simplicitytools.util.XSPUtils import com.lt2333.simplicitytools.util.XSPUtils
import com.lt2333.simplicitytools.util.findClass import com.lt2333.simplicitytools.util.findClass
import com.lt2333.simplicitytools.util.hookBeforeMethod import com.lt2333.simplicitytools.util.hookBeforeMethod
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.callbacks.XC_LoadPackage
class LockOneHundred : IXposedHookLoadPackage { object LockOneHundred : HookRegister() {
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
override fun init() {
//防止点击重新检测 //防止点击重新检测
val mainContentFrameClass = "com.miui.securityscan.ui.main.MainContentFrame".findClass(lpparam.classLoader) val mainContentFrameClass = "com.miui.securityscan.ui.main.MainContentFrame".findClass(getDefaultClassLoader())
mainContentFrameClass.hookBeforeMethod("onClick", View::class.java) { mainContentFrameClass.hookBeforeMethod("onClick", View::class.java) {
if (XSPUtils.getBoolean("lock_one_hundred", false)) { if (XSPUtils.getBoolean("lock_one_hundred", false)) {
it.result = null it.result = null
@@ -19,11 +18,12 @@ class LockOneHundred : IXposedHookLoadPackage {
} }
//锁定100分 //锁定100分
var scoreManagerClass = "com.miui.securityscan.scanner.ScoreManager".findClass(lpparam.classLoader) val scoreManagerClass = "com.miui.securityscan.scanner.ScoreManager".findClass(getDefaultClassLoader())
scoreManagerClass.hookBeforeMethod("B") { scoreManagerClass.hookBeforeMethod("B") {
if (XSPUtils.getBoolean("lock_one_hundred", false)) { if (XSPUtils.getBoolean("lock_one_hundred", false)) {
it.result = 0 it.result = 0
} }
} }
} }
} }

View File

@@ -1,18 +1,18 @@
package com.lt2333.simplicitytools.hook.app.securitycenter package com.lt2333.simplicitytools.hook.app.securitycenter
import com.lt2333.simplicitytools.util.XSPUtils import com.lt2333.simplicitytools.util.XSPUtils
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.XC_MethodHook import de.robv.android.xposed.XC_MethodHook
import de.robv.android.xposed.XposedHelpers import de.robv.android.xposed.XposedHelpers
import de.robv.android.xposed.callbacks.XC_LoadPackage
class RemoveMacroBlacklist : IXposedHookLoadPackage { object RemoveMacroBlacklist : HookRegister() {
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
override fun init() {
if (XSPUtils.getBoolean("remove_macro_blacklist", false)) { if (XSPUtils.getBoolean("remove_macro_blacklist", false)) {
var letter = 'a' var letter = 'a'
for (i in 0..25) { for (i in 0..25) {
val classIfExists = XposedHelpers.findClassIfExists( val classIfExists = XposedHelpers.findClassIfExists(
"com.miui.gamebooster.v.$letter" + "0", lpparam.classLoader "com.miui.gamebooster.v.$letter" + "0", getDefaultClassLoader()
) ?: continue ) ?: continue
if (classIfExists.declaredMethods.size in 6..12 && classIfExists.fields.isEmpty() && classIfExists.declaredFields.size >= 2) { if (classIfExists.declaredMethods.size in 6..12 && classIfExists.fields.isEmpty() && classIfExists.declaredFields.size >= 2) {
XposedHelpers.findAndHookMethod(classIfExists, "c", String::class.java, XposedHelpers.findAndHookMethod(classIfExists, "c", String::class.java,
@@ -27,4 +27,5 @@ class RemoveMacroBlacklist : IXposedHookLoadPackage {
} }
} }
} }
} }

View File

@@ -4,12 +4,14 @@ import android.widget.TextView
import com.lt2333.simplicitytools.util.XSPUtils import com.lt2333.simplicitytools.util.XSPUtils
import com.lt2333.simplicitytools.util.findClass import com.lt2333.simplicitytools.util.findClass
import com.lt2333.simplicitytools.util.hookAfterMethod import com.lt2333.simplicitytools.util.hookAfterMethod
import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.IXposedHookLoadPackage import de.robv.android.xposed.IXposedHookLoadPackage
import de.robv.android.xposed.callbacks.XC_LoadPackage import de.robv.android.xposed.callbacks.XC_LoadPackage
class RemoveOpenAppConfirmationPopup : IXposedHookLoadPackage { object RemoveOpenAppConfirmationPopup : HookRegister() {
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
val textViewClass = "android.widget.TextView".findClass(lpparam.classLoader) override fun init() {
val textViewClass = "android.widget.TextView".findClass(getDefaultClassLoader())
textViewClass.hookAfterMethod( textViewClass.hookAfterMethod(
"setText", "setText",
CharSequence::class.java CharSequence::class.java
@@ -31,4 +33,5 @@ class RemoveOpenAppConfirmationPopup : IXposedHookLoadPackage {
} }
} }
} }
} }

View File

@@ -17,17 +17,23 @@ import com.lt2333.simplicitytools.util.XSPUtils
import com.lt2333.simplicitytools.util.findClass import com.lt2333.simplicitytools.util.findClass
import com.lt2333.simplicitytools.util.hookAfterMethod import com.lt2333.simplicitytools.util.hookAfterMethod
import com.lt2333.simplicitytools.util.hookBeforeMethod import com.lt2333.simplicitytools.util.hookBeforeMethod
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.callbacks.XC_LoadPackage
import java.lang.reflect.Field import java.lang.reflect.Field
class ShowBatteryTemperature: IXposedHookLoadPackage { object ShowBatteryTemperature: HookRegister() {
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) { private fun getBatteryTemperature(context: Context): Int {
return context.registerReceiver(
null as BroadcastReceiver?,
IntentFilter("android.intent.action.BATTERY_CHANGED")
)!!.getIntExtra("temperature", 0) / 10
}
override fun init() {
if (!XSPUtils.getBoolean("battery_life_function", false)) return if (!XSPUtils.getBoolean("battery_life_function", false)) return
val a = "com.miui.powercenter.a\$a".findClass(lpparam.classLoader) val a = "com.miui.powercenter.a\$a".findClass(getDefaultClassLoader())
"com.miui.powercenter.a".hookBeforeMethod(lpparam.classLoader, "b", Context::class.java) { "com.miui.powercenter.a".hookBeforeMethod(getDefaultClassLoader(), "b", Context::class.java) {
it.result = getBatteryTemperature(it.args[0] as Context).toString() it.result = getBatteryTemperature(it.args[0] as Context).toString()
} }
a.hookAfterMethod("run") { a.hookAfterMethod("run") {
val context = AndroidAppHelper.currentApplication().applicationContext val context = AndroidAppHelper.currentApplication().applicationContext
@@ -59,10 +65,5 @@ class ShowBatteryTemperature: IXposedHookLoadPackage {
linearLayout.addView(tempView) linearLayout.addView(tempView)
} }
} }
private fun getBatteryTemperature(context: Context): Int {
return context.registerReceiver(
null as BroadcastReceiver?,
IntentFilter("android.intent.action.BATTERY_CHANGED")
)!!.getIntExtra("temperature", 0) / 10
}
} }

View File

@@ -4,13 +4,12 @@ import android.widget.TextView
import com.lt2333.simplicitytools.util.XSPUtils import com.lt2333.simplicitytools.util.XSPUtils
import com.lt2333.simplicitytools.util.findClass import com.lt2333.simplicitytools.util.findClass
import com.lt2333.simplicitytools.util.hookBeforeMethod import com.lt2333.simplicitytools.util.hookBeforeMethod
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.callbacks.XC_LoadPackage
class SkipWaitingTime : IXposedHookLoadPackage { object SkipWaitingTime : HookRegister() {
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
val textViewClass = "android.widget.TextView".findClass(lpparam.classLoader) override fun init() {
val textViewClass = "android.widget.TextView".findClass(getDefaultClassLoader())
textViewClass.hookBeforeMethod( textViewClass.hookBeforeMethod(
"setText", "setText",
CharSequence::class.java, CharSequence::class.java,
@@ -35,4 +34,5 @@ class SkipWaitingTime : IXposedHookLoadPackage {
} }
} }
} }
} }

View File

@@ -2,13 +2,13 @@ package com.lt2333.simplicitytools.hook.app.settings
import android.app.NotificationChannel import android.app.NotificationChannel
import com.lt2333.simplicitytools.util.* import com.lt2333.simplicitytools.util.*
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.XposedHelpers import de.robv.android.xposed.XposedHelpers
import de.robv.android.xposed.callbacks.XC_LoadPackage
class ShowNotificationImportance : IXposedHookLoadPackage { object ShowNotificationImportance : HookRegister() {
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
val channelNotificationSettingsClass = "com.android.settings.notification.ChannelNotificationSettings".findClass(lpparam.classLoader) override fun init() {
val channelNotificationSettingsClass = "com.android.settings.notification.ChannelNotificationSettings".findClass(getDefaultClassLoader())
channelNotificationSettingsClass.hookBeforeMethod("removeDefaultPrefs") { channelNotificationSettingsClass.hookBeforeMethod("removeDefaultPrefs") {
if (!XSPUtils.getBoolean("show_notification_importance", false)) return@hookBeforeMethod if (!XSPUtils.getBoolean("show_notification_importance", false)) return@hookBeforeMethod
val importance = it.thisObject.callMethod("findPreference", "importance") ?: return@hookBeforeMethod val importance = it.thisObject.callMethod("findPreference", "importance") ?: return@hookBeforeMethod
@@ -20,7 +20,7 @@ class ShowNotificationImportance : IXposedHookLoadPackage {
it.result = null it.result = null
} }
val dropDownPreferenceClass = XposedHelpers.findClass("androidx.preference.Preference", lpparam.classLoader) val dropDownPreferenceClass = XposedHelpers.findClass("androidx.preference.Preference", getDefaultClassLoader())
dropDownPreferenceClass.hookAfterMethod("callChangeListener", Any::class.java) { dropDownPreferenceClass.hookAfterMethod("callChangeListener", Any::class.java) {
val channelNotificationSettings = XposedHelpers.getAdditionalInstanceField(it.thisObject, "channelNotificationSettings") ?: return@hookAfterMethod val channelNotificationSettings = XposedHelpers.getAdditionalInstanceField(it.thisObject, "channelNotificationSettings") ?: return@hookAfterMethod
val mChannel = channelNotificationSettings.getObjectField("mChannel") as NotificationChannel val mChannel = channelNotificationSettings.getObjectField("mChannel") as NotificationChannel
@@ -31,4 +31,5 @@ class ShowNotificationImportance : IXposedHookLoadPackage {
mBackend.callMethod("updateChannel", mPkg, mUid, mChannel) mBackend.callMethod("updateChannel", mPkg, mUid, mChannel)
} }
} }
} }

View File

@@ -5,15 +5,15 @@ import android.widget.TextView
import com.lt2333.simplicitytools.util.XSPUtils import com.lt2333.simplicitytools.util.XSPUtils
import com.lt2333.simplicitytools.util.getObjectField import com.lt2333.simplicitytools.util.getObjectField
import com.lt2333.simplicitytools.util.hookAfterMethod import com.lt2333.simplicitytools.util.hookAfterMethod
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.callbacks.XC_LoadPackage
class BatteryPercentage : IXposedHookLoadPackage { object BatteryPercentage: HookRegister() {
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
override fun init() {
val size = XSPUtils.getFloat("battery_percentage_font_size", 0f) val size = XSPUtils.getFloat("battery_percentage_font_size", 0f)
if (size == 0f) return if (size == 0f) return
"com.android.systemui.statusbar.views.MiuiBatteryMeterView".hookAfterMethod( "com.android.systemui.statusbar.views.MiuiBatteryMeterView".hookAfterMethod(
lpparam.classLoader, getDefaultClassLoader(),
"updateResources" "updateResources"
) { ) {
(it.thisObject.getObjectField("mBatteryPercentView") as TextView).setTextSize( (it.thisObject.getObjectField("mBatteryPercentView") as TextView).setTextSize(
@@ -21,4 +21,5 @@ class BatteryPercentage : IXposedHookLoadPackage {
) )
} }
} }
} }

View File

@@ -11,17 +11,17 @@ import androidx.constraintlayout.widget.ConstraintLayout
import cn.fkj233.ui.activity.dp2px import cn.fkj233.ui.activity.dp2px
import com.github.kyuubiran.ezxhelper.utils.loadClass import com.github.kyuubiran.ezxhelper.utils.loadClass
import com.lt2333.simplicitytools.util.* import com.lt2333.simplicitytools.util.*
import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import com.lt2333.simplicitytools.view.WeatherView import com.lt2333.simplicitytools.view.WeatherView
import de.robv.android.xposed.IXposedHookLoadPackage
import de.robv.android.xposed.callbacks.XC_LoadPackage
class ControlCenterWeather : IXposedHookLoadPackage { object ControlCenterWeather: HookRegister() {
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
override fun init() {
hasEnable("") { hasEnable("") {
var mWeatherView: TextView? = null var mWeatherView: TextView? = null
val isDisplayCity = XSPUtils.getBoolean("", false) val isDisplayCity = XSPUtils.getBoolean("", false)
"com.android.systemui.controlcenter.phone.widget.QSControlCenterHeaderView".hookAfterMethod( "com.android.systemui.controlcenter.phone.widget.QSControlCenterHeaderView".hookAfterMethod(
lpparam.classLoader, getDefaultClassLoader(),
"onFinishInflate" "onFinishInflate"
) { ) {
val viewGroup = it.thisObject as ViewGroup val viewGroup = it.thisObject as ViewGroup
@@ -78,7 +78,7 @@ class ControlCenterWeather : IXposedHookLoadPackage {
} }
//解决横屏重叠 //解决横屏重叠
"com.android.systemui.controlcenter.phone.widget.QSControlCenterHeaderView".hookAfterMethod( "com.android.systemui.controlcenter.phone.widget.QSControlCenterHeaderView".hookAfterMethod(
lpparam.classLoader, getDefaultClassLoader(),
"updateLayout" "updateLayout"
) { ) {
val mOrientation = it.thisObject.getObjectField("mOrientation") as Int val mOrientation = it.thisObject.getObjectField("mOrientation") as Int
@@ -94,7 +94,7 @@ class ControlCenterWeather : IXposedHookLoadPackage {
var mConstraintLayout: ConstraintLayout? = null var mConstraintLayout: ConstraintLayout? = null
val isDisplayCity = XSPUtils.getBoolean("control_center_weather_city", false) val isDisplayCity = XSPUtils.getBoolean("control_center_weather_city", false)
"com.android.systemui.controlcenter.phone.widget.QSControlCenterHeaderView".hookAfterMethod( "com.android.systemui.controlcenter.phone.widget.QSControlCenterHeaderView".hookAfterMethod(
lpparam.classLoader, getDefaultClassLoader(),
"onFinishInflate" "onFinishInflate"
) { ) {
val viewGroup = it.thisObject as ViewGroup val viewGroup = it.thisObject as ViewGroup
@@ -257,7 +257,7 @@ class ControlCenterWeather : IXposedHookLoadPackage {
} }
//解决横屏重叠 //解决横屏重叠
"com.android.systemui.controlcenter.phone.widget.QSControlCenterHeaderView".hookAfterMethod( "com.android.systemui.controlcenter.phone.widget.QSControlCenterHeaderView".hookAfterMethod(
lpparam.classLoader, getDefaultClassLoader(),
"updateLayout" "updateLayout"
) { ) {
val viewGroup = it.thisObject as ViewGroup val viewGroup = it.thisObject as ViewGroup
@@ -292,4 +292,5 @@ class ControlCenterWeather : IXposedHookLoadPackage {
} }
} }
} }
} }

View File

@@ -9,11 +9,10 @@ import android.widget.TextView
import com.github.kyuubiran.ezxhelper.init.InitFields import com.github.kyuubiran.ezxhelper.init.InitFields
import com.lt2333.simplicitytools.R import com.lt2333.simplicitytools.R
import com.lt2333.simplicitytools.util.* import com.lt2333.simplicitytools.util.*
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.callbacks.XC_LoadPackage
import java.text.DecimalFormat import java.text.DecimalFormat
class DoubleLineNetworkSpeed : IXposedHookLoadPackage { object DoubleLineNetworkSpeed: HookRegister() {
private var mLastTotalUp: Long = 0 private var mLastTotalUp: Long = 0
private var mLastTotalDown: Long = 0 private var mLastTotalDown: Long = 0
@@ -27,7 +26,7 @@ class DoubleLineNetworkSpeed : IXposedHookLoadPackage {
private val getDualSize = XSPUtils.getInt("status_bar_network_speed_dual_row_size", 0) private val getDualSize = XSPUtils.getInt("status_bar_network_speed_dual_row_size", 0)
private val getDualAlign = XSPUtils.getInt("status_bar_network_speed_dual_row_gravity", 0) private val getDualAlign = XSPUtils.getInt("status_bar_network_speed_dual_row_gravity", 0)
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) { override fun init() {
val none = InitFields.moduleRes.getString(R.string.none) val none = InitFields.moduleRes.getString(R.string.none)
@@ -39,7 +38,7 @@ class DoubleLineNetworkSpeed : IXposedHookLoadPackage {
} }
hasEnable("status_bar_dual_row_network_speed") { hasEnable("status_bar_dual_row_network_speed") {
"com.android.systemui.statusbar.views.NetworkSpeedView".findClass(lpparam.classLoader) "com.android.systemui.statusbar.views.NetworkSpeedView".findClass(getDefaultClassLoader())
.hookAfterConstructor(Context::class.java, AttributeSet::class.java) { .hookAfterConstructor(Context::class.java, AttributeSet::class.java) {
val mView = it.thisObject as TextView val mView = it.thisObject as TextView
mView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 7f) mView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 7f)
@@ -56,24 +55,24 @@ class DoubleLineNetworkSpeed : IXposedHookLoadPackage {
} }
"com.android.systemui.statusbar.policy.NetworkSpeedController".hookBeforeMethod( "com.android.systemui.statusbar.policy.NetworkSpeedController".hookBeforeMethod(
lpparam.classLoader, getDefaultClassLoader(),
"formatSpeed", "formatSpeed",
Context::class.java, Context::class.java,
Long::class.java Long::class.java
) { ) {
if (getDualAlign == 0) { if (getDualAlign == 0) {
it.result = it.result =
"${upIcon} ${getTotalUpSpeed(it.args[0]as Context)}\n${downIcon} ${getTotalDownloadSpeed(it.args[0]as Context)}" "$upIcon ${getTotalUpSpeed(it.args[0]as Context)}\n${downIcon} ${getTotalDownloadSpeed(it.args[0]as Context)}"
} else { } else {
it.result = it.result =
"${getTotalUpSpeed(it.args[0]as Context)} ${upIcon}\n${getTotalDownloadSpeed(it.args[0]as Context)} ${downIcon}" "${getTotalUpSpeed(it.args[0]as Context)} ${upIcon}\n${getTotalDownloadSpeed(it.args[0]as Context)} $downIcon"
} }
} }
} }
} }
//获取总的上行速度 //获取总的上行速度
fun getTotalUpSpeed(context: Context): String { private fun getTotalUpSpeed(context: Context): String {
var totalUpSpeed = 0F var totalUpSpeed = 0F
val currentTotalTxBytes = TrafficStats.getTotalTxBytes() val currentTotalTxBytes = TrafficStats.getTotalTxBytes()
@@ -98,15 +97,15 @@ class DoubleLineNetworkSpeed : IXposedHookLoadPackage {
mLastTotalUp = currentTotalTxBytes mLastTotalUp = currentTotalTxBytes
lastTimeStampTotalUp = nowTimeStampTotalUp lastTimeStampTotalUp = nowTimeStampTotalUp
if (totalUpSpeed >= 100) { return if (totalUpSpeed >= 100) {
return "" + totalUpSpeed.toInt() + unit "" + totalUpSpeed.toInt() + unit
} else { } else {
return "" + totalUpSpeed + unit "" + totalUpSpeed + unit
} }
} }
//获取总的下行速度 //获取总的下行速度
fun getTotalDownloadSpeed(context: Context): String { private fun getTotalDownloadSpeed(context: Context): String {
var totalDownSpeed = 0F var totalDownSpeed = 0F
val currentTotalRxBytes = TrafficStats.getTotalRxBytes() val currentTotalRxBytes = TrafficStats.getTotalRxBytes()
val nowTimeStampTotalDown = System.currentTimeMillis() val nowTimeStampTotalDown = System.currentTimeMillis()
@@ -130,13 +129,12 @@ class DoubleLineNetworkSpeed : IXposedHookLoadPackage {
mLastTotalDown = currentTotalRxBytes mLastTotalDown = currentTotalRxBytes
lastTimeStampTotalDown = nowTimeStampTotalDown lastTimeStampTotalDown = nowTimeStampTotalDown
if (totalDownSpeed >= 100) { return if (totalDownSpeed >= 100) {
return "" + totalDownSpeed.toInt() + unit "" + totalDownSpeed.toInt() + unit
} else { } else {
return "" + totalDownSpeed + unit "" + totalDownSpeed + unit
} }
} }
} }

View File

@@ -7,12 +7,12 @@ import android.widget.TextView
import com.lt2333.simplicitytools.util.getObjectField import com.lt2333.simplicitytools.util.getObjectField
import com.lt2333.simplicitytools.util.hasEnable import com.lt2333.simplicitytools.util.hasEnable
import com.lt2333.simplicitytools.util.hookAfterMethod import com.lt2333.simplicitytools.util.hookAfterMethod
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.callbacks.XC_LoadPackage
class HideBatteryIcon : IXposedHookLoadPackage { object HideBatteryIcon : HookRegister() {
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
"com.android.systemui.statusbar.views.MiuiBatteryMeterView".hookAfterMethod(lpparam.classLoader, "updateResources") { override fun init() {
"com.android.systemui.statusbar.views.MiuiBatteryMeterView".hookAfterMethod(getDefaultClassLoader(), "updateResources") {
//隐藏电池图标 //隐藏电池图标
hasEnable("hide_battery_icon") { hasEnable("hide_battery_icon") {
@@ -32,7 +32,7 @@ class HideBatteryIcon : IXposedHookLoadPackage {
(it.thisObject.getObjectField("mBatteryPercentMarkView") as TextView).textSize = 0F (it.thisObject.getObjectField("mBatteryPercentMarkView") as TextView).textSize = 0F
} }
"com.android.systemui.statusbar.views.MiuiBatteryMeterView".hookAfterMethod(lpparam.classLoader, "updateChargeAndText") { "com.android.systemui.statusbar.views.MiuiBatteryMeterView".hookAfterMethod(getDefaultClassLoader(), "updateChargeAndText") {
//隐藏电池充电图标 //隐藏电池充电图标
hasEnable("hide_battery_charging_icon") { hasEnable("hide_battery_charging_icon") {
(it.thisObject.getObjectField("mBatteryChargingInView") as ImageView).visibility = View.GONE (it.thisObject.getObjectField("mBatteryChargingInView") as ImageView).visibility = View.GONE
@@ -41,4 +41,5 @@ class HideBatteryIcon : IXposedHookLoadPackage {
} }
} }
} }
} }

View File

@@ -5,13 +5,13 @@ import android.widget.ImageView
import com.lt2333.simplicitytools.util.getObjectField import com.lt2333.simplicitytools.util.getObjectField
import com.lt2333.simplicitytools.util.hasEnable import com.lt2333.simplicitytools.util.hasEnable
import com.lt2333.simplicitytools.util.hookAfterMethod import com.lt2333.simplicitytools.util.hookAfterMethod
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.callbacks.XC_LoadPackage
class HideHDIcon :IXposedHookLoadPackage { object HideHDIcon: HookRegister() {
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
override fun init() {
val iconState = "com.android.systemui.statusbar.phone.StatusBarSignalPolicy\$MobileIconState" val iconState = "com.android.systemui.statusbar.phone.StatusBarSignalPolicy\$MobileIconState"
"com.android.systemui.statusbar.StatusBarMobileView".hookAfterMethod(lpparam.classLoader, "initViewState", iconState) { "com.android.systemui.statusbar.StatusBarMobileView".hookAfterMethod(getDefaultClassLoader(), "initViewState", iconState) {
hasEnable("hide_big_hd_icon") { hasEnable("hide_big_hd_icon") {
(it.thisObject.getObjectField("mVolte") as ImageView).visibility = View.GONE (it.thisObject.getObjectField("mVolte") as ImageView).visibility = View.GONE
} }
@@ -23,7 +23,7 @@ class HideHDIcon :IXposedHookLoadPackage {
} }
} }
"com.android.systemui.statusbar.StatusBarMobileView".hookAfterMethod(lpparam.classLoader, "updateState", iconState) { "com.android.systemui.statusbar.StatusBarMobileView".hookAfterMethod(getDefaultClassLoader(), "updateState", iconState) {
hasEnable("hide_big_hd_icon") { hasEnable("hide_big_hd_icon") {
(it.thisObject.getObjectField("mVolte") as ImageView).visibility = View.GONE (it.thisObject.getObjectField("mVolte") as ImageView).visibility = View.GONE
} }
@@ -35,4 +35,5 @@ class HideHDIcon :IXposedHookLoadPackage {
} }
} }
} }
} }

View File

@@ -5,24 +5,25 @@ import android.widget.ImageView
import com.lt2333.simplicitytools.util.getObjectField import com.lt2333.simplicitytools.util.getObjectField
import com.lt2333.simplicitytools.util.hasEnable import com.lt2333.simplicitytools.util.hasEnable
import com.lt2333.simplicitytools.util.hookAfterMethod import com.lt2333.simplicitytools.util.hookAfterMethod
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.callbacks.XC_LoadPackage
class HideMobileActivityIcon : IXposedHookLoadPackage { object HideMobileActivityIcon: HookRegister() {
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
override fun init() {
val iconState = "com.android.systemui.statusbar.phone.StatusBarSignalPolicy\$MobileIconState" val iconState = "com.android.systemui.statusbar.phone.StatusBarSignalPolicy\$MobileIconState"
"com.android.systemui.statusbar.StatusBarMobileView".hookAfterMethod(lpparam.classLoader, "initViewState", iconState) { "com.android.systemui.statusbar.StatusBarMobileView".hookAfterMethod(getDefaultClassLoader(), "initViewState", iconState) {
hasEnable("hide_mobile_activity_icon") { hasEnable("hide_mobile_activity_icon") {
(it.thisObject.getObjectField("mLeftInOut") as ImageView).visibility = View.GONE (it.thisObject.getObjectField("mLeftInOut") as ImageView).visibility = View.GONE
(it.thisObject.getObjectField("mRightInOut") as ImageView).visibility = View.GONE (it.thisObject.getObjectField("mRightInOut") as ImageView).visibility = View.GONE
} }
} }
"com.android.systemui.statusbar.StatusBarMobileView".hookAfterMethod(lpparam.classLoader, "updateState", iconState) { "com.android.systemui.statusbar.StatusBarMobileView".hookAfterMethod(getDefaultClassLoader(), "updateState", iconState) {
hasEnable("hide_mobile_activity_icon") { hasEnable("hide_mobile_activity_icon") {
(it.thisObject.getObjectField("mLeftInOut") as ImageView).visibility = View.GONE (it.thisObject.getObjectField("mLeftInOut") as ImageView).visibility = View.GONE
(it.thisObject.getObjectField("mRightInOut") as ImageView).visibility = View.GONE (it.thisObject.getObjectField("mRightInOut") as ImageView).visibility = View.GONE
} }
} }
} }
} }

View File

@@ -7,17 +7,17 @@ import com.lt2333.simplicitytools.util.XSPUtils
import com.lt2333.simplicitytools.util.getObjectField import com.lt2333.simplicitytools.util.getObjectField
import com.lt2333.simplicitytools.util.hasEnable import com.lt2333.simplicitytools.util.hasEnable
import com.lt2333.simplicitytools.util.hookAfterMethod import com.lt2333.simplicitytools.util.hookAfterMethod
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.XC_MethodHook import de.robv.android.xposed.XC_MethodHook
import de.robv.android.xposed.callbacks.XC_LoadPackage
class HideMobileTypeIcon : IXposedHookLoadPackage { object HideMobileTypeIcon: HookRegister() {
val isBigType=XSPUtils.getBoolean("big_mobile_type_icon", false)
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) { private val isBigType = XSPUtils.getBoolean("big_mobile_type_icon", false)
val iconState =
"com.android.systemui.statusbar.phone.StatusBarSignalPolicy\$MobileIconState" override fun init() {
val iconState = "com.android.systemui.statusbar.phone.StatusBarSignalPolicy\$MobileIconState"
"com.android.systemui.statusbar.StatusBarMobileView".hookAfterMethod( "com.android.systemui.statusbar.StatusBarMobileView".hookAfterMethod(
lpparam.classLoader, getDefaultClassLoader(),
"initViewState", "initViewState",
iconState iconState
) { ) {
@@ -25,7 +25,7 @@ class HideMobileTypeIcon : IXposedHookLoadPackage {
} }
"com.android.systemui.statusbar.StatusBarMobileView".hookAfterMethod( "com.android.systemui.statusbar.StatusBarMobileView".hookAfterMethod(
lpparam.classLoader, getDefaultClassLoader(),
"updateState", "updateState",
iconState iconState
) { ) {
@@ -33,7 +33,7 @@ class HideMobileTypeIcon : IXposedHookLoadPackage {
} }
} }
fun hideMobileTypeIcon(it: XC_MethodHook.MethodHookParam) { private fun hideMobileTypeIcon(it: XC_MethodHook.MethodHookParam) {
hasEnable("hide_mobile_type_icon") { hasEnable("hide_mobile_type_icon") {
if (isBigType) { if (isBigType) {
(it.thisObject.getObjectField("mMobileType") as TextView).visibility = (it.thisObject.getObjectField("mMobileType") as TextView).visibility =

View File

@@ -4,12 +4,12 @@ import android.widget.TextView
import com.lt2333.simplicitytools.util.XSPUtils import com.lt2333.simplicitytools.util.XSPUtils
import com.lt2333.simplicitytools.util.findClass import com.lt2333.simplicitytools.util.findClass
import com.lt2333.simplicitytools.util.hookAfterMethod import com.lt2333.simplicitytools.util.hookAfterMethod
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.callbacks.XC_LoadPackage
class HideNetworkSpeedSplitter : IXposedHookLoadPackage { object HideNetworkSpeedSplitter: HookRegister() {
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
val networkSpeedSplitterClass = "com.android.systemui.statusbar.views.NetworkSpeedSplitter".findClass(lpparam.classLoader) override fun init() {
val networkSpeedSplitterClass = "com.android.systemui.statusbar.views.NetworkSpeedSplitter".findClass(getDefaultClassLoader())
networkSpeedSplitterClass.hookAfterMethod("init") { networkSpeedSplitterClass.hookAfterMethod("init") {
if (XSPUtils.getBoolean("hide_network_speed_splitter", false)) { if (XSPUtils.getBoolean("hide_network_speed_splitter", false)) {
val textView = it.thisObject as TextView val textView = it.thisObject as TextView
@@ -17,4 +17,5 @@ class HideNetworkSpeedSplitter : IXposedHookLoadPackage {
} }
} }
} }
} }

View File

@@ -2,12 +2,12 @@ package com.lt2333.simplicitytools.hook.app.systemui
import com.lt2333.simplicitytools.util.hasEnable import com.lt2333.simplicitytools.util.hasEnable
import com.lt2333.simplicitytools.util.hookBeforeMethod import com.lt2333.simplicitytools.util.hookBeforeMethod
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.callbacks.XC_LoadPackage
class HideSimIcon :IXposedHookLoadPackage { object HideSimIcon: HookRegister() {
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
"com.android.systemui.statusbar.phone.StatusBarSignalPolicy".hookBeforeMethod(lpparam.classLoader, "hasCorrectSubs", MutableList::class.java) { override fun init() {
"com.android.systemui.statusbar.phone.StatusBarSignalPolicy".hookBeforeMethod(getDefaultClassLoader(), "hasCorrectSubs", MutableList::class.java) {
val list = it.args[0] as MutableList<*> val list = it.args[0] as MutableList<*>
val size = list.size val size = list.size
hasEnable("hide_sim_two_icon", extraCondition = { size == 2 }) { hasEnable("hide_sim_two_icon", extraCondition = { size == 2 }) {
@@ -18,4 +18,5 @@ class HideSimIcon :IXposedHookLoadPackage {
} }
} }
} }
} }

View File

@@ -2,27 +2,25 @@ package com.lt2333.simplicitytools.hook.app.systemui
import com.lt2333.simplicitytools.util.hasEnable import com.lt2333.simplicitytools.util.hasEnable
import com.lt2333.simplicitytools.util.hookBeforeMethod import com.lt2333.simplicitytools.util.hookBeforeMethod
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.XC_MethodHook import de.robv.android.xposed.XC_MethodHook
import de.robv.android.xposed.callbacks.XC_LoadPackage
class HideStatusBarIcon : IXposedHookLoadPackage { object HideStatusBarIcon: HookRegister() {
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
override fun init() {
"com.android.systemui.statusbar.phone.StatusBarIconControllerImpl".hookBeforeMethod( "com.android.systemui.statusbar.phone.StatusBarIconControllerImpl".hookBeforeMethod(
lpparam.classLoader, getDefaultClassLoader(),
"setIconVisibility", "setIconVisibility",
String::class.java, String::class.java,
Boolean::class.java Boolean::class.java
) { hideIcon(it) } ) { hideIcon(it) }
"com.android.systemui.statusbar.phone.MiuiDripLeftStatusBarIconControllerImpl".hookBeforeMethod( "com.android.systemui.statusbar.phone.MiuiDripLeftStatusBarIconControllerImpl".hookBeforeMethod(
lpparam.classLoader, getDefaultClassLoader(),
"setIconVisibility", "setIconVisibility",
String::class.java, String::class.java,
Boolean::class.java Boolean::class.java
) { hideIcon(it) } ) { hideIcon(it) }
} }
private fun hideIcon(it: XC_MethodHook.MethodHookParam) { private fun hideIcon(it: XC_MethodHook.MethodHookParam) {

View File

@@ -3,12 +3,12 @@ package com.lt2333.simplicitytools.hook.app.systemui
import com.lt2333.simplicitytools.util.hasEnable import com.lt2333.simplicitytools.util.hasEnable
import com.lt2333.simplicitytools.util.hookBeforeMethod import com.lt2333.simplicitytools.util.hookBeforeMethod
import com.lt2333.simplicitytools.util.isNonNull import com.lt2333.simplicitytools.util.isNonNull
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.callbacks.XC_LoadPackage
class HideStatusBarNetworkSpeedSecond :IXposedHookLoadPackage { object HideStatusBarNetworkSpeedSecond: HookRegister() {
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
"com.android.systemui.statusbar.views.NetworkSpeedView".hookBeforeMethod(lpparam.classLoader, "setNetworkSpeed", String::class.java) { override fun init() {
"com.android.systemui.statusbar.views.NetworkSpeedView".hookBeforeMethod(getDefaultClassLoader(), "setNetworkSpeed", String::class.java) {
hasEnable("hide_status_bar_network_speed_second") { hasEnable("hide_status_bar_network_speed_second") {
it.args[0].isNonNull { s -> it.args[0].isNonNull { s ->
it.args[0] = (s as String) it.args[0] = (s as String)
@@ -19,4 +19,5 @@ class HideStatusBarNetworkSpeedSecond :IXposedHookLoadPackage {
} }
} }
} }
} }

View File

@@ -6,13 +6,13 @@ import android.widget.TextView
import com.lt2333.simplicitytools.util.getObjectField import com.lt2333.simplicitytools.util.getObjectField
import com.lt2333.simplicitytools.util.hasEnable import com.lt2333.simplicitytools.util.hasEnable
import com.lt2333.simplicitytools.util.hookAfterMethod import com.lt2333.simplicitytools.util.hookAfterMethod
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.callbacks.XC_LoadPackage
class HideWifiActivityIcon : IXposedHookLoadPackage { object HideWifiActivityIcon: HookRegister() {
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
override fun init() {
val iconState = "com.android.systemui.statusbar.phone.StatusBarSignalPolicy\$WifiIconState" val iconState = "com.android.systemui.statusbar.phone.StatusBarSignalPolicy\$WifiIconState"
"com.android.systemui.statusbar.StatusBarWifiView".hookAfterMethod(lpparam.classLoader, "initViewState", iconState) { "com.android.systemui.statusbar.StatusBarWifiView".hookAfterMethod(getDefaultClassLoader(), "initViewState", iconState) {
//隐藏WIFI箭头 //隐藏WIFI箭头
hasEnable("hide_wifi_activity_icon") { hasEnable("hide_wifi_activity_icon") {
(it.thisObject.getObjectField("mWifiActivityView") as ImageView).visibility = View.INVISIBLE (it.thisObject.getObjectField("mWifiActivityView") as ImageView).visibility = View.INVISIBLE
@@ -23,7 +23,7 @@ class HideWifiActivityIcon : IXposedHookLoadPackage {
} }
} }
"com.android.systemui.statusbar.StatusBarWifiView".hookAfterMethod(lpparam.classLoader, "updateState", iconState) { "com.android.systemui.statusbar.StatusBarWifiView".hookAfterMethod(getDefaultClassLoader(), "updateState", iconState) {
//隐藏WIFI箭头 //隐藏WIFI箭头
hasEnable("hide_wifi_activity_icon") { hasEnable("hide_wifi_activity_icon") {
(it.thisObject.getObjectField("mWifiActivityView") as ImageView).visibility = View.INVISIBLE (it.thisObject.getObjectField("mWifiActivityView") as ImageView).visibility = View.INVISIBLE
@@ -34,4 +34,5 @@ class HideWifiActivityIcon : IXposedHookLoadPackage {
} }
} }
} }
} }

View File

@@ -8,18 +8,18 @@ import com.lt2333.simplicitytools.R
import com.lt2333.simplicitytools.util.findClass import com.lt2333.simplicitytools.util.findClass
import com.lt2333.simplicitytools.util.hasEnable import com.lt2333.simplicitytools.util.hasEnable
import com.lt2333.simplicitytools.util.hookAfterMethod import com.lt2333.simplicitytools.util.hookAfterMethod
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.XposedHelpers import de.robv.android.xposed.XposedHelpers
import de.robv.android.xposed.callbacks.XC_LoadPackage
import java.io.BufferedReader import java.io.BufferedReader
import java.io.FileReader import java.io.FileReader
import java.lang.reflect.Method import java.lang.reflect.Method
import kotlin.math.roundToInt import kotlin.math.roundToInt
class LockScreenCurrent : IXposedHookLoadPackage { object LockScreenCurrent : HookRegister() {
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
override fun init() {
hasEnable("lock_screen_charging_current") { hasEnable("lock_screen_charging_current") {
"com.android.keyguard.charge.ChargeUtils".findClass(lpparam.classLoader) "com.android.keyguard.charge.ChargeUtils".findClass(getDefaultClassLoader())
.hookAfterMethod( .hookAfterMethod(
"getChargingHintText", "getChargingHintText",
Context::class.java, Context::class.java,
@@ -28,7 +28,7 @@ class LockScreenCurrent : IXposedHookLoadPackage {
) { ) {
it.result = getCurrent() + "\n" + it.result it.result = getCurrent() + "\n" + it.result
} }
"com.android.systemui.statusbar.phone.KeyguardBottomAreaView".findClass(lpparam.classLoader) "com.android.systemui.statusbar.phone.KeyguardBottomAreaView".findClass(getDefaultClassLoader())
.hookAfterMethod( .hookAfterMethod(
"onFinishInflate" "onFinishInflate"
) { ) {
@@ -105,4 +105,5 @@ class LockScreenCurrent : IXposedHookLoadPackage {
} }
return defaultValue return defaultValue
} }
} }

View File

@@ -10,16 +10,16 @@ import android.view.View.OnTouchListener
import com.lt2333.simplicitytools.util.findClass import com.lt2333.simplicitytools.util.findClass
import com.lt2333.simplicitytools.util.hasEnable import com.lt2333.simplicitytools.util.hasEnable
import com.lt2333.simplicitytools.util.hookBeforeMethod import com.lt2333.simplicitytools.util.hookBeforeMethod
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.XposedHelpers import de.robv.android.xposed.XposedHelpers
import de.robv.android.xposed.callbacks.XC_LoadPackage
class LockScreenDoubleTapToSleep : IXposedHookLoadPackage { object LockScreenDoubleTapToSleep: HookRegister() {
@SuppressLint("ClickableViewAccessibility") @SuppressLint("ClickableViewAccessibility")
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) { override fun init() {
hasEnable("lock_screen_double_tap_to_sleep") { hasEnable("lock_screen_double_tap_to_sleep") {
"com.android.systemui.statusbar.phone.NotificationsQuickSettingsContainer".findClass( "com.android.systemui.statusbar.phone.NotificationsQuickSettingsContainer".findClass(
lpparam.classLoader getDefaultClassLoader()
).hookBeforeMethod("onFinishInflate") { ).hookBeforeMethod("onFinishInflate") {
val view = it.thisObject as View val view = it.thisObject as View
XposedHelpers.setAdditionalInstanceField(view, "currentTouchTime", 0L) XposedHelpers.setAdditionalInstanceField(view, "currentTouchTime", 0L)
@@ -68,4 +68,5 @@ class LockScreenDoubleTapToSleep : IXposedHookLoadPackage {
} }
} }
} }
} }

View File

@@ -11,20 +11,18 @@ import androidx.constraintlayout.widget.ConstraintLayout
import cn.fkj233.ui.activity.dp2px import cn.fkj233.ui.activity.dp2px
import com.github.kyuubiran.ezxhelper.utils.loadClass import com.github.kyuubiran.ezxhelper.utils.loadClass
import com.lt2333.simplicitytools.util.* import com.lt2333.simplicitytools.util.*
import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import com.lt2333.simplicitytools.view.WeatherView import com.lt2333.simplicitytools.view.WeatherView
import de.robv.android.xposed.IXposedHookLoadPackage
import de.robv.android.xposed.callbacks.XC_LoadPackage
class NotificationWeather : IXposedHookLoadPackage { object NotificationWeather: HookRegister() {
override fun init() {
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
hasEnable("notification_weather") { hasEnable("notification_weather") {
var mWeatherView: TextView? = null var mWeatherView: TextView? = null
var mConstraintLayout: ConstraintLayout? = null var mConstraintLayout: ConstraintLayout? = null
val isDisplayCity = XSPUtils.getBoolean("notification_weather_city", false) val isDisplayCity = XSPUtils.getBoolean("notification_weather_city", false)
"com.android.systemui.qs.MiuiNotificationHeaderView".hookAfterMethod( "com.android.systemui.qs.MiuiNotificationHeaderView".hookAfterMethod(
lpparam.classLoader, getDefaultClassLoader(),
"onFinishInflate" "onFinishInflate"
) { ) {
val viewGroup = it.thisObject as ViewGroup val viewGroup = it.thisObject as ViewGroup
@@ -187,7 +185,7 @@ class NotificationWeather : IXposedHookLoadPackage {
} }
//解决横屏重叠 //解决横屏重叠
"com.android.systemui.qs.MiuiNotificationHeaderView".hookAfterMethod( "com.android.systemui.qs.MiuiNotificationHeaderView".hookAfterMethod(
lpparam.classLoader, getDefaultClassLoader(),
"updateLayout" "updateLayout"
) { ) {
val viewGroup = it.thisObject as ViewGroup val viewGroup = it.thisObject as ViewGroup
@@ -222,4 +220,5 @@ class NotificationWeather : IXposedHookLoadPackage {
} }
} }
} }
} }

View File

@@ -8,17 +8,17 @@ import android.widget.TextView
import android.widget.Toast import android.widget.Toast
import com.github.kyuubiran.ezxhelper.utils.loadClass import com.github.kyuubiran.ezxhelper.utils.loadClass
import com.lt2333.simplicitytools.util.* import com.lt2333.simplicitytools.util.*
import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import com.lt2333.simplicitytools.view.WeatherView import com.lt2333.simplicitytools.view.WeatherView
import de.robv.android.xposed.IXposedHookLoadPackage
import de.robv.android.xposed.callbacks.XC_LoadPackage
class OldNotificationWeather : IXposedHookLoadPackage { object OldNotificationWeather: HookRegister() {
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
override fun init() {
hasEnable("notification_weather") { hasEnable("notification_weather") {
var mWeatherView: TextView? = null var mWeatherView: TextView? = null
val isDisplayCity = XSPUtils.getBoolean("notification_weather_city", false) val isDisplayCity = XSPUtils.getBoolean("notification_weather_city", false)
"com.android.systemui.qs.MiuiQSHeaderView".hookAfterMethod( "com.android.systemui.qs.MiuiQSHeaderView".hookAfterMethod(
lpparam.classLoader, getDefaultClassLoader(),
"onFinishInflate" "onFinishInflate"
) { ) {
val viewGroup = it.thisObject as ViewGroup val viewGroup = it.thisObject as ViewGroup
@@ -84,7 +84,7 @@ class OldNotificationWeather : IXposedHookLoadPackage {
} }
//解决横屏重叠 //解决横屏重叠
"com.android.systemui.qs.MiuiQSHeaderView".hookAfterMethod( "com.android.systemui.qs.MiuiQSHeaderView".hookAfterMethod(
lpparam.classLoader, getDefaultClassLoader(),
"updateLayout" "updateLayout"
) { ) {
val mOritation = it.thisObject.getObjectField("mOrientation") as Int val mOritation = it.thisObject.getObjectField("mOrientation") as Int
@@ -96,5 +96,6 @@ class OldNotificationWeather : IXposedHookLoadPackage {
} }
} }
} }
} }

View File

@@ -6,12 +6,12 @@ import com.lt2333.simplicitytools.util.XSPUtils
import com.lt2333.simplicitytools.util.hasEnable import com.lt2333.simplicitytools.util.hasEnable
import com.lt2333.simplicitytools.util.hookAfterMethod import com.lt2333.simplicitytools.util.hookAfterMethod
import com.lt2333.simplicitytools.util.hookBeforeMethod import com.lt2333.simplicitytools.util.hookBeforeMethod
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.XposedHelpers import de.robv.android.xposed.XposedHelpers
import de.robv.android.xposed.callbacks.XC_LoadPackage
class OldQSCustom : IXposedHookLoadPackage { object OldQSCustom: HookRegister() {
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
override fun init() {
hasEnable("old_qs_custom_switch") { hasEnable("old_qs_custom_switch") {
val mRows = XSPUtils.getInt("qs_custom_rows", 3) val mRows = XSPUtils.getInt("qs_custom_rows", 3)
val mRowsHorizontal = XSPUtils.getInt("qs_custom_rows_horizontal", 2) val mRowsHorizontal = XSPUtils.getInt("qs_custom_rows_horizontal", 2)
@@ -19,7 +19,7 @@ class OldQSCustom : IXposedHookLoadPackage {
val mColumnsUnexpanded = XSPUtils.getInt("qs_custom_columns_unexpanded", 5) val mColumnsUnexpanded = XSPUtils.getInt("qs_custom_columns_unexpanded", 5)
"com.android.systemui.qs.MiuiQuickQSPanel".hookBeforeMethod( "com.android.systemui.qs.MiuiQuickQSPanel".hookBeforeMethod(
lpparam.classLoader, getDefaultClassLoader(),
"setMaxTiles", Int::class.java "setMaxTiles", Int::class.java
) { ) {
//未展开时的列数 //未展开时的列数
@@ -27,14 +27,14 @@ class OldQSCustom : IXposedHookLoadPackage {
} }
"com.android.systemui.qs.MiuiTileLayout".hookAfterMethod( "com.android.systemui.qs.MiuiTileLayout".hookAfterMethod(
lpparam.classLoader, getDefaultClassLoader(),
"updateColumns" "updateColumns"
) { ) {
//展开时的列数 //展开时的列数
XposedHelpers.setObjectField(it.thisObject, "mColumns", mColumns) XposedHelpers.setObjectField(it.thisObject, "mColumns", mColumns)
} }
"com.android.systemui.qs.MiuiTileLayout".hookAfterMethod( "com.android.systemui.qs.MiuiTileLayout".hookAfterMethod(
lpparam.classLoader, getDefaultClassLoader(),
"updateResources" "updateResources"
) { ) {
//展开时的行数 //展开时的行数
@@ -49,4 +49,5 @@ class OldQSCustom : IXposedHookLoadPackage {
} }
} }
} }
} }

View File

@@ -6,30 +6,30 @@ import com.lt2333.simplicitytools.util.getObjectField
import com.lt2333.simplicitytools.util.hasEnable import com.lt2333.simplicitytools.util.hasEnable
import com.lt2333.simplicitytools.util.hookAfterMethod import com.lt2333.simplicitytools.util.hookAfterMethod
import com.lt2333.simplicitytools.util.hookBeforeMethod import com.lt2333.simplicitytools.util.hookBeforeMethod
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.callbacks.XC_LoadPackage
class RemoveLockScreenCamera : IXposedHookLoadPackage { object RemoveLockScreenCamera: HookRegister() {
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
override fun init() {
//屏蔽右下角组件显示 //屏蔽右下角组件显示
"com.android.systemui.statusbar.phone.KeyguardBottomAreaView".hookAfterMethod(lpparam.classLoader, "onFinishInflate") { "com.android.systemui.statusbar.phone.KeyguardBottomAreaView".hookAfterMethod(getDefaultClassLoader(), "onFinishInflate") {
hasEnable("remove_lock_screen_camera") { hasEnable("remove_lock_screen_camera") {
(it.thisObject.getObjectField("mRightAffordanceViewLayout") as LinearLayout).visibility = View.GONE (it.thisObject.getObjectField("mRightAffordanceViewLayout") as LinearLayout).visibility = View.GONE
} }
} }
//屏蔽滑动撞墙动画 //屏蔽滑动撞墙动画
"com.android.keyguard.KeyguardMoveRightController".hookBeforeMethod(lpparam.classLoader, "onTouchMove", Float::class.java, Float::class.java) { "com.android.keyguard.KeyguardMoveRightController".hookBeforeMethod(getDefaultClassLoader(), "onTouchMove", Float::class.java, Float::class.java) {
hasEnable("remove_lock_screen_camera") { hasEnable("remove_lock_screen_camera") {
it.result = false it.result = false
} }
} }
"com.android.keyguard.KeyguardMoveRightController".hookBeforeMethod(lpparam.classLoader, "reset") { "com.android.keyguard.KeyguardMoveRightController".hookBeforeMethod(getDefaultClassLoader(), "reset") {
hasEnable("remove_lock_screen_camera") { hasEnable("remove_lock_screen_camera") {
it.result = null it.result = null
} }
} }
} }
} }

View File

@@ -2,15 +2,16 @@ package com.lt2333.simplicitytools.hook.app.systemui
import com.lt2333.simplicitytools.util.hasEnable import com.lt2333.simplicitytools.util.hasEnable
import com.lt2333.simplicitytools.util.hookBeforeMethod import com.lt2333.simplicitytools.util.hookBeforeMethod
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.callbacks.XC_LoadPackage
class RemoveTheLeftSideOfTheLockScreen : IXposedHookLoadPackage { object RemoveTheLeftSideOfTheLockScreen: HookRegister() {
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
"com.android.keyguard.negative.MiuiKeyguardMoveLeftViewContainer".hookBeforeMethod(lpparam.classLoader, "inflateLeftView") { override fun init() {
"com.android.keyguard.negative.MiuiKeyguardMoveLeftViewContainer".hookBeforeMethod(getDefaultClassLoader(), "inflateLeftView") {
hasEnable("remove_the_left_side_of_the_lock_screen") { hasEnable("remove_the_left_side_of_the_lock_screen") {
it.result = null it.result = null
} }
} }
} }
} }

View File

@@ -4,13 +4,13 @@ import com.lt2333.simplicitytools.util.callMethod
import com.lt2333.simplicitytools.util.hasEnable import com.lt2333.simplicitytools.util.hasEnable
import com.lt2333.simplicitytools.util.replaceMethod import com.lt2333.simplicitytools.util.replaceMethod
import com.lt2333.simplicitytools.util.setIntField import com.lt2333.simplicitytools.util.setIntField
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.callbacks.XC_LoadPackage
class RemoveTheMaximumNumberOfNotificationIcons : IXposedHookLoadPackage { object RemoveTheMaximumNumberOfNotificationIcons: HookRegister() {
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
override fun init() {
hasEnable("remove_the_maximum_number_of_notification_icons") { hasEnable("remove_the_maximum_number_of_notification_icons") {
"com.android.systemui.statusbar.phone.NotificationIconContainer".replaceMethod(lpparam.classLoader, "miuiShowNotificationIcons", Boolean::class.java) { "com.android.systemui.statusbar.phone.NotificationIconContainer".replaceMethod(getDefaultClassLoader(), "miuiShowNotificationIcons", Boolean::class.java) {
if (it.args[0] as Boolean) { if (it.args[0] as Boolean) {
it.thisObject.setIntField("MAX_DOTS", 30) it.thisObject.setIntField("MAX_DOTS", 30)
it.thisObject.setIntField("MAX_STATIC_ICONS", 30) it.thisObject.setIntField("MAX_STATIC_ICONS", 30)
@@ -24,4 +24,5 @@ class RemoveTheMaximumNumberOfNotificationIcons : IXposedHookLoadPackage {
} }
} }
} }
} }

View File

@@ -13,57 +13,57 @@ import com.lt2333.simplicitytools.util.XSPUtils
import com.lt2333.simplicitytools.util.hasEnable import com.lt2333.simplicitytools.util.hasEnable
import com.lt2333.simplicitytools.util.hookAfterMethod import com.lt2333.simplicitytools.util.hookAfterMethod
import com.lt2333.simplicitytools.util.hookBeforeMethod import com.lt2333.simplicitytools.util.hookBeforeMethod
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.XposedHelpers import de.robv.android.xposed.XposedHelpers
import de.robv.android.xposed.callbacks.XC_LoadPackage
class StatusBarBigMobileTypeIcon : IXposedHookLoadPackage { object StatusBarBigMobileTypeIcon: HookRegister() {
val upAndDownPosition = XSPUtils.getInt("big_mobile_type_icon_up_and_down_position", 0)
val leftAndRightMargin = XSPUtils.getInt("big_mobile_type_icon_left_and_right_margins", 0)
val isBold = XSPUtils.getBoolean("big_mobile_type_icon_bold", true)
val size = XSPUtils.getFloat("big_mobile_type_icon_size", 12.5f)
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) { private val upAndDownPosition = XSPUtils.getInt("big_mobile_type_icon_up_and_down_position", 0)
private val leftAndRightMargin = XSPUtils.getInt("big_mobile_type_icon_left_and_right_margins", 0)
private val isBold = XSPUtils.getBoolean("big_mobile_type_icon_bold", true)
private val size = XSPUtils.getFloat("big_mobile_type_icon_size", 12.5f)
override fun init() {
hasEnable("big_mobile_type_icon") { hasEnable("big_mobile_type_icon") {
"com.android.systemui.statusbar.StatusBarMobileView".hookAfterMethod( "com.android.systemui.statusbar.StatusBarMobileView".hookAfterMethod(
lpparam.classLoader, getDefaultClassLoader(),
"init" "init"
) { ) {
val StatusBarMobileView = it.thisObject as ViewGroup val statusBarMobileView = it.thisObject as ViewGroup
val context: Context = StatusBarMobileView.context val context: Context = statusBarMobileView.context
val res: Resources = context.resources val res: Resources = context.resources
//获取组件 //获取组件
val mobile_container_left_ID: Int = val mobileContainerLeftId: Int =
res.getIdentifier("mobile_container_left", "id", "com.android.systemui") res.getIdentifier("mobile_container_left", "id", "com.android.systemui")
val mobile_container_left = val mobileContainerLeft =
StatusBarMobileView.findViewById<ViewGroup>(mobile_container_left_ID) statusBarMobileView.findViewById<ViewGroup>(mobileContainerLeftId)
val mobile_type_ID: Int = val mobileTypeId: Int =
res.getIdentifier("mobile_type", "id", "com.android.systemui") res.getIdentifier("mobile_type", "id", "com.android.systemui")
val mobile_type = StatusBarMobileView.findViewById<TextView>(mobile_type_ID) val mobileType = statusBarMobileView.findViewById<TextView>(mobileTypeId)
val mobile_left_mobile_inout_ID: Int = res.getIdentifier( val mobileLeftMobileInoutId: Int = res.getIdentifier(
"mobile_left_mobile_inout", "mobile_left_mobile_inout",
"id", "id",
"com.android.systemui" "com.android.systemui"
) )
val mobile_left_mobile_inout = val mobileLeftMobileInout =
StatusBarMobileView.findViewById<ImageView>(mobile_left_mobile_inout_ID) statusBarMobileView.findViewById<ImageView>(mobileLeftMobileInoutId)
//获取插入位置 //获取插入位置
val mobile_container_right_ID: Int = res.getIdentifier( val mobileContainerRightId: Int = res.getIdentifier(
"mobile_container_right", "mobile_container_right",
"id", "id",
"com.android.systemui" "com.android.systemui"
) )
val mobile_container_right = val mobileContainerRight =
StatusBarMobileView.findViewById<ViewGroup>(mobile_container_right_ID) statusBarMobileView.findViewById<ViewGroup>(mobileContainerRightId)
val RightParentLayout = mobile_container_right.parent as ViewGroup val rightParentLayout = mobileContainerRight.parent as ViewGroup
val mobile_container_right_Index = val mobileContainerRightIndex =
RightParentLayout.indexOfChild(mobile_container_right) rightParentLayout.indexOfChild(mobileContainerRight)
//创建新布局 //创建新布局
val newLinearLayoutLP = LinearLayout.LayoutParams( val newLinearLayoutLP = LinearLayout.LayoutParams(
@@ -74,50 +74,50 @@ class StatusBarBigMobileTypeIcon : IXposedHookLoadPackage {
} }
val newLinearlayout = LinearLayout(context).also { val newLinearlayout = LinearLayout(context).also {
it.layoutParams = newLinearLayoutLP it.layoutParams = newLinearLayoutLP
it.id = mobile_container_left_ID it.id = mobileContainerLeftId
it.setPadding(leftAndRightMargin, 0, leftAndRightMargin, 0) it.setPadding(leftAndRightMargin, 0, leftAndRightMargin, 0)
} }
XposedHelpers.setObjectField(it.thisObject, "mMobileLeftContainer", newLinearlayout) XposedHelpers.setObjectField(it.thisObject, "mMobileLeftContainer", newLinearlayout)
RightParentLayout.addView( rightParentLayout.addView(
newLinearlayout, newLinearlayout,
mobile_container_right_Index mobileContainerRightIndex
) )
//将组件插入新的布局 //将组件插入新的布局
(mobile_type.parent as ViewGroup).removeView(mobile_type) (mobileType.parent as ViewGroup).removeView(mobileType)
(mobile_left_mobile_inout.parent as ViewGroup).removeView(mobile_left_mobile_inout) (mobileLeftMobileInout.parent as ViewGroup).removeView(mobileLeftMobileInout)
(mobile_container_left.parent as ViewGroup).removeView(mobile_container_left) (mobileContainerLeft.parent as ViewGroup).removeView(mobileContainerLeft)
newLinearlayout.addView(mobile_type) //类型 newLinearlayout.addView(mobileType) //类型
val mobile_type_lp = LinearLayout.LayoutParams( val mobileTypeLp = LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT LinearLayout.LayoutParams.WRAP_CONTENT
).also { ).also {
it.gravity = Gravity.CENTER_VERTICAL it.gravity = Gravity.CENTER_VERTICAL
it.topMargin = upAndDownPosition it.topMargin = upAndDownPosition
} }
mobile_type.also { mobileType.also {
it.setTextSize(TypedValue.COMPLEX_UNIT_DIP, size) it.setTextSize(TypedValue.COMPLEX_UNIT_DIP, size)
if (isBold) { if (isBold) {
it.typeface = Typeface.DEFAULT_BOLD it.typeface = Typeface.DEFAULT_BOLD
} }
it.layoutParams = mobile_type_lp it.layoutParams = mobileTypeLp
} }
newLinearlayout.addView(mobile_left_mobile_inout) //箭头 newLinearlayout.addView(mobileLeftMobileInout) //箭头
val mobile_left_mobile_inout_lp = LinearLayout.LayoutParams( val mobileLeftMobileInoutLp = LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.MATCH_PARENT LinearLayout.LayoutParams.MATCH_PARENT
) )
mobile_left_mobile_inout.also { mobileLeftMobileInout.also {
it.layoutParams = mobile_left_mobile_inout_lp it.layoutParams = mobileLeftMobileInoutLp
} }
//屏蔽更新布局 //屏蔽更新布局
"com.android.systemui.statusbar.StatusBarMobileView".hookBeforeMethod( "com.android.systemui.statusbar.StatusBarMobileView".hookBeforeMethod(
lpparam.classLoader, getDefaultClassLoader(),
"updateMobileTypeLayout", String::class.java "updateMobileTypeLayout", String::class.java
) { ) {
it.result = null it.result = null
@@ -125,4 +125,5 @@ class StatusBarBigMobileTypeIcon : IXposedHookLoadPackage {
} }
} }
} }
} }

View File

@@ -9,16 +9,16 @@ import android.view.ViewGroup
import com.lt2333.simplicitytools.util.findClass import com.lt2333.simplicitytools.util.findClass
import com.lt2333.simplicitytools.util.hasEnable import com.lt2333.simplicitytools.util.hasEnable
import com.lt2333.simplicitytools.util.hookBeforeMethod import com.lt2333.simplicitytools.util.hookBeforeMethod
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.XposedHelpers import de.robv.android.xposed.XposedHelpers
import de.robv.android.xposed.callbacks.XC_LoadPackage
class StatusBarDoubleTapToSleep : IXposedHookLoadPackage { object StatusBarDoubleTapToSleep: HookRegister() {
@SuppressLint("ClickableViewAccessibility") @SuppressLint("ClickableViewAccessibility")
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) { override fun init() {
hasEnable("status_bar_double_tap_to_sleep") { hasEnable("status_bar_double_tap_to_sleep") {
"com.android.systemui.statusbar.phone.MiuiPhoneStatusBarView".findClass( "com.android.systemui.statusbar.phone.MiuiPhoneStatusBarView".findClass(
lpparam.classLoader getDefaultClassLoader()
).hookBeforeMethod( ).hookBeforeMethod(
"onFinishInflate" "onFinishInflate"
) { ) {
@@ -65,4 +65,5 @@ class StatusBarDoubleTapToSleep : IXposedHookLoadPackage {
} }
} }
} }
} }

View File

@@ -1,5 +1,6 @@
package com.lt2333.simplicitytools.hook.app.systemui package com.lt2333.simplicitytools.hook.app.systemui
import android.annotation.SuppressLint
import android.content.Context import android.content.Context
import android.content.res.Configuration import android.content.res.Configuration
import android.content.res.Resources import android.content.res.Resources
@@ -14,26 +15,26 @@ import com.lt2333.simplicitytools.util.XSPUtils
import com.lt2333.simplicitytools.util.findClass import com.lt2333.simplicitytools.util.findClass
import com.lt2333.simplicitytools.util.getObjectField import com.lt2333.simplicitytools.util.getObjectField
import com.lt2333.simplicitytools.util.hookAfterMethod import com.lt2333.simplicitytools.util.hookAfterMethod
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.callbacks.XC_LoadPackage
class StatusBarLayout : IXposedHookLoadPackage { @SuppressLint("StaticFieldLeak")
object StatusBarLayout: HookRegister() {
private var mLeftLayout: LinearLayout? = null private var mLeftLayout: LinearLayout? = null
private var mRightLayout: LinearLayout? = null private var mRightLayout: LinearLayout? = null
private var mCenterLayout: LinearLayout? = null private var mCenterLayout: LinearLayout? = null
private var status_bar: ViewGroup? = null private var statusBar: ViewGroup? = null
private var status_bar_left = 0 private var statusBarLeft = 0
private var status_bar_top = 0 private var statusBarTop = 0
private var status_bar_right = 0 private var statusBarRight = 0
private var status_bar_bottom = 0 private var statusBarBottom = 0
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) { override fun init() {
if (!XSPUtils.getBoolean("status_bar_time_center", false)) return if (!XSPUtils.getBoolean("status_bar_time_center", false)) return
val collapsedStatusBarFragmentClass = val collapsedStatusBarFragmentClass =
"com.android.systemui.statusbar.phone.CollapsedStatusBarFragment".findClass(lpparam.classLoader) "com.android.systemui.statusbar.phone.CollapsedStatusBarFragment".findClass(getDefaultClassLoader())
collapsedStatusBarFragmentClass.hookAfterMethod( collapsedStatusBarFragmentClass.hookAfterMethod(
"onViewCreated", "onViewCreated",
@@ -44,36 +45,36 @@ class StatusBarLayout : IXposedHookLoadPackage {
param.thisObject.getObjectField("mStatusBar") as ViewGroup param.thisObject.getObjectField("mStatusBar") as ViewGroup
val context: Context = MiuiPhoneStatusBarView.context val context: Context = MiuiPhoneStatusBarView.context
val res: Resources = MiuiPhoneStatusBarView.resources val res: Resources = MiuiPhoneStatusBarView.resources
val status_bar_ID: Int = res.getIdentifier("status_bar", "id", "com.android.systemui") val statusBarId: Int = res.getIdentifier("status_bar", "id", "com.android.systemui")
val status_bar_contents_ID: Int = val statusBarContentsId: Int =
res.getIdentifier("status_bar_contents", "id", "com.android.systemui") res.getIdentifier("status_bar_contents", "id", "com.android.systemui")
val system_icon_area_ID: Int = val systemIconAreaId: Int =
res.getIdentifier("system_icon_area", "id", "com.android.systemui") res.getIdentifier("system_icon_area", "id", "com.android.systemui")
val clock_ID: Int = res.getIdentifier("clock", "id", "com.android.systemui") val clockId: Int = res.getIdentifier("clock", "id", "com.android.systemui")
val phone_status_bar_left_container_ID: Int = val phoneStatusBarLeftContainerId: Int =
res.getIdentifier("phone_status_bar_left_container", "id", "com.android.systemui") res.getIdentifier("phone_status_bar_left_container", "id", "com.android.systemui")
val fullscreen_notification_icon_area_ID: Int = val fullscreenNotificationIconAreaId: Int =
res.getIdentifier("fullscreen_notification_icon_area", "id", "com.android.systemui") res.getIdentifier("fullscreen_notification_icon_area", "id", "com.android.systemui")
status_bar = MiuiPhoneStatusBarView.findViewById(status_bar_ID) statusBar = MiuiPhoneStatusBarView.findViewById(statusBarId)
val status_bar_contents: ViewGroup = val statusBarContents: ViewGroup =
MiuiPhoneStatusBarView.findViewById(status_bar_contents_ID) MiuiPhoneStatusBarView.findViewById(statusBarContentsId)
if (status_bar == null) return@hookAfterMethod if (statusBar == null) return@hookAfterMethod
val Clock: View = MiuiPhoneStatusBarView.findViewById(clock_ID) val Clock: View = MiuiPhoneStatusBarView.findViewById(clockId)
val phone_status_bar_left_container: ViewGroup = val phoneStatusBarLeftContainer: ViewGroup =
MiuiPhoneStatusBarView.findViewById(phone_status_bar_left_container_ID) MiuiPhoneStatusBarView.findViewById(phoneStatusBarLeftContainerId)
val fullscreen_notification_icon_area: ViewGroup = val fullscreenNotificationIconArea: ViewGroup =
MiuiPhoneStatusBarView.findViewById(fullscreen_notification_icon_area_ID) MiuiPhoneStatusBarView.findViewById(fullscreenNotificationIconAreaId)
val system_icon_area: ViewGroup = val systemIconArea: ViewGroup =
MiuiPhoneStatusBarView.findViewById(system_icon_area_ID) MiuiPhoneStatusBarView.findViewById(systemIconAreaId)
(Clock.parent as ViewGroup).removeView(Clock) (Clock.parent as ViewGroup).removeView(Clock)
(phone_status_bar_left_container.parent as ViewGroup).removeView( (phoneStatusBarLeftContainer.parent as ViewGroup).removeView(
phone_status_bar_left_container phoneStatusBarLeftContainer
) )
(fullscreen_notification_icon_area.parent as ViewGroup).removeView( (fullscreenNotificationIconArea.parent as ViewGroup).removeView(
fullscreen_notification_icon_area fullscreenNotificationIconArea
) )
(system_icon_area.parent as ViewGroup).removeView(system_icon_area) (systemIconArea.parent as ViewGroup).removeView(systemIconArea)
val mConstraintLayoutLp = ConstraintLayout.LayoutParams( val mConstraintLayoutLp = ConstraintLayout.LayoutParams(
ConstraintLayout.LayoutParams.MATCH_PARENT, ConstraintLayout.LayoutParams.MATCH_PARENT,
@@ -83,14 +84,14 @@ class StatusBarLayout : IXposedHookLoadPackage {
val mConstraintLayout = val mConstraintLayout =
ConstraintLayout(context).also { it.layoutParams = mConstraintLayoutLp } ConstraintLayout(context).also { it.layoutParams = mConstraintLayoutLp }
mConstraintLayout.addView(fullscreen_notification_icon_area) mConstraintLayout.addView(fullscreenNotificationIconArea)
val fullscreen_notification_icon_area_lp = FrameLayout.LayoutParams( val fullscreen_notification_icon_area_lp = FrameLayout.LayoutParams(
ConstraintLayout.LayoutParams.MATCH_PARENT, ConstraintLayout.LayoutParams.MATCH_PARENT,
ConstraintLayout.LayoutParams.MATCH_PARENT ConstraintLayout.LayoutParams.MATCH_PARENT
) )
fullscreen_notification_icon_area.layoutParams = fullscreen_notification_icon_area_lp fullscreenNotificationIconArea.layoutParams = fullscreen_notification_icon_area_lp
//增加一个左对齐布局 //增加一个左对齐布局
mLeftLayout = LinearLayout(context) mLeftLayout = LinearLayout(context)
@@ -112,30 +113,30 @@ class StatusBarLayout : IXposedHookLoadPackage {
LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.MATCH_PARENT, 1.0f) LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.MATCH_PARENT, 1.0f)
mRightLayout!!.layoutParams = RightLp mRightLayout!!.layoutParams = RightLp
mRightLayout!!.gravity = Gravity.END or Gravity.CENTER_VERTICAL mRightLayout!!.gravity = Gravity.END or Gravity.CENTER_VERTICAL
mLeftLayout!!.addView(phone_status_bar_left_container) mLeftLayout!!.addView(phoneStatusBarLeftContainer)
mLeftLayout!!.addView(mConstraintLayout) mLeftLayout!!.addView(mConstraintLayout)
mCenterLayout!!.addView(Clock) mCenterLayout!!.addView(Clock)
mRightLayout!!.addView(system_icon_area) mRightLayout!!.addView(systemIconArea)
status_bar_contents.addView(mLeftLayout, 0) statusBarContents.addView(mLeftLayout, 0)
status_bar_contents.addView(mCenterLayout) statusBarContents.addView(mCenterLayout)
status_bar_contents.addView(mRightLayout) statusBarContents.addView(mRightLayout)
status_bar_left = status_bar!!.paddingLeft statusBarLeft = statusBar!!.paddingLeft
status_bar_top = status_bar!!.paddingTop statusBarTop = statusBar!!.paddingTop
status_bar_right = status_bar!!.paddingRight statusBarRight = statusBar!!.paddingRight
status_bar_bottom = status_bar!!.paddingBottom statusBarBottom = statusBar!!.paddingBottom
if (XSPUtils.getBoolean("layout_compatibility_mode", false)) { if (XSPUtils.getBoolean("layout_compatibility_mode", false)) {
val custom_left_margin = XSPUtils.getInt("status_bar_left_margin", 0) val customLeftMargin = XSPUtils.getInt("status_bar_left_margin", 0)
if (custom_left_margin != 0) { if (customLeftMargin != 0) {
status_bar_left = custom_left_margin statusBarLeft = customLeftMargin
} }
val custom_right_margin = XSPUtils.getInt("status_bar_right_margin", 0) val customRightMargin = XSPUtils.getInt("status_bar_right_margin", 0)
if (custom_right_margin != 0) { if (customRightMargin != 0) {
status_bar_right = custom_right_margin statusBarRight = customRightMargin
} }
updateLayout(context) updateLayout(context)
} }
@@ -143,7 +144,7 @@ class StatusBarLayout : IXposedHookLoadPackage {
} }
val phoneStatusBarViewClass = val phoneStatusBarViewClass =
"com.android.systemui.statusbar.phone.PhoneStatusBarView".findClass(lpparam.classLoader) "com.android.systemui.statusbar.phone.PhoneStatusBarView".findClass(getDefaultClassLoader())
phoneStatusBarViewClass.hookAfterMethod("updateLayoutForCutout") { phoneStatusBarViewClass.hookAfterMethod("updateLayoutForCutout") {
if (XSPUtils.getBoolean("layout_compatibility_mode", false)) { if (XSPUtils.getBoolean("layout_compatibility_mode", false)) {
@@ -154,18 +155,18 @@ class StatusBarLayout : IXposedHookLoadPackage {
} }
fun updateLayout(context: Context) { private fun updateLayout(context: Context) {
//判断屏幕方向 //判断屏幕方向
val mConfiguration: Configuration = context.resources.configuration val mConfiguration: Configuration = context.resources.configuration
if (mConfiguration.orientation == Configuration.ORIENTATION_PORTRAIT) { if (mConfiguration.orientation == Configuration.ORIENTATION_PORTRAIT) {
mLeftLayout!!.setPadding(status_bar_left, 0, 0, 0) mLeftLayout!!.setPadding(statusBarLeft, 0, 0, 0)
mRightLayout!!.setPadding(0, 0, status_bar_right, 0) mRightLayout!!.setPadding(0, 0, statusBarRight, 0)
status_bar!!.setPadding(0, status_bar_top, 0, status_bar_bottom) statusBar!!.setPadding(0, statusBarTop, 0, statusBarBottom)
} else { } else {
//横屏状态 //横屏状态
mLeftLayout!!.setPadding(175, 0, 0, 0) mLeftLayout!!.setPadding(175, 0, 0, 0)
mRightLayout!!.setPadding(0, 0, 175, 0) mRightLayout!!.setPadding(0, 0, 175, 0)
status_bar!!.setPadding(0, status_bar_top, 0, status_bar_bottom) statusBar!!.setPadding(0, statusBarTop, 0, statusBarBottom)
} }
} }

View File

@@ -2,15 +2,16 @@ package com.lt2333.simplicitytools.hook.app.systemui
import com.lt2333.simplicitytools.util.hasEnable import com.lt2333.simplicitytools.util.hasEnable
import com.lt2333.simplicitytools.util.hookBeforeMethod import com.lt2333.simplicitytools.util.hookBeforeMethod
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.callbacks.XC_LoadPackage
class StatusBarNetworkSpeedRefreshSpeed :IXposedHookLoadPackage { object StatusBarNetworkSpeedRefreshSpeed: HookRegister() {
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
"com.android.systemui.statusbar.policy.NetworkSpeedController".hookBeforeMethod(lpparam.classLoader, "postUpdateNetworkSpeedDelay", Long::class.java) { override fun init() {
"com.android.systemui.statusbar.policy.NetworkSpeedController".hookBeforeMethod(getDefaultClassLoader(), "postUpdateNetworkSpeedDelay", Long::class.java) {
hasEnable("status_bar_network_speed_refresh_speed") { hasEnable("status_bar_network_speed_refresh_speed") {
it.args[0] = 1000L it.args[0] = 1000L
} }
} }
} }
} }

View File

@@ -11,13 +11,12 @@ import com.lt2333.simplicitytools.util.XSPUtils
import com.lt2333.simplicitytools.util.findClass import com.lt2333.simplicitytools.util.findClass
import com.lt2333.simplicitytools.util.hookAfterConstructor import com.lt2333.simplicitytools.util.hookAfterConstructor
import com.lt2333.simplicitytools.util.hookAfterMethod import com.lt2333.simplicitytools.util.hookAfterMethod
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.callbacks.XC_LoadPackage
import java.lang.reflect.Method import java.lang.reflect.Method
import java.text.SimpleDateFormat import java.text.SimpleDateFormat
import java.util.* import java.util.*
class StatusBarTimeCustomization : IXposedHookLoadPackage { object StatusBarTimeCustomization: HookRegister() {
private val isYear = XSPUtils.getBoolean("status_bar_time_year", false) private val isYear = XSPUtils.getBoolean("status_bar_time_year", false)
private val isMonth = XSPUtils.getBoolean("status_bar_time_month", false) private val isMonth = XSPUtils.getBoolean("status_bar_time_month", false)
@@ -31,15 +30,15 @@ class StatusBarTimeCustomization : IXposedHookLoadPackage {
private val getClockSize = XSPUtils.getInt("status_bar_clock_size", 0) private val getClockSize = XSPUtils.getInt("status_bar_clock_size", 0)
private val isOpen = XSPUtils.getBoolean("custom_clock_switch", false) private val isOpen = XSPUtils.getBoolean("custom_clock_switch", false)
private val getClockDoubleSize = XSPUtils.getInt("status_bar_clock_double_line_size", 0) private val getClockDoubleSize = XSPUtils.getInt("status_bar_clock_double_line_size", 0)
private var now_time: Date? = null private var nowTime: Date? = null
private var str = "" private var str = ""
@SuppressLint("SetTextI18n") @SuppressLint("SetTextI18n")
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) { override fun init() {
if (isOpen) { if (isOpen) {
var c: Context? = null var c: Context? = null
val miuiClockClass = val miuiClockClass =
"com.android.systemui.statusbar.views.MiuiClock".findClass(lpparam.classLoader) "com.android.systemui.statusbar.views.MiuiClock".findClass(getDefaultClassLoader())
miuiClockClass.hookAfterConstructor( miuiClockClass.hookAfterConstructor(
Context::class.java, Context::class.java,
AttributeSet::class.java, AttributeSet::class.java,
@@ -52,16 +51,16 @@ class StatusBarTimeCustomization : IXposedHookLoadPackage {
textV.isSingleLine = false textV.isSingleLine = false
if (isDoubleLine) { if (isDoubleLine) {
str = "\n" str = "\n"
var clock_double_line_size = 7F var clockDoubleLineSize = 7F
if (getClockDoubleSize != 0) { if (getClockDoubleSize != 0) {
clock_double_line_size = getClockDoubleSize.toFloat() clockDoubleLineSize = getClockDoubleSize.toFloat()
} }
textV.setTextSize(TypedValue.COMPLEX_UNIT_DIP, clock_double_line_size) textV.setTextSize(TypedValue.COMPLEX_UNIT_DIP, clockDoubleLineSize)
textV.setLineSpacing(0F, 0.8F) textV.setLineSpacing(0F, 0.8F)
} else { } else {
if (getClockSize != 0) { if (getClockSize != 0) {
val clock_size = getClockSize.toFloat() val clockSize = getClockSize.toFloat()
textV.setTextSize(TypedValue.COMPLEX_UNIT_DIP, clock_size) textV.setTextSize(TypedValue.COMPLEX_UNIT_DIP, clockSize)
} }
} }
val d: Method = textV.javaClass.getDeclaredMethod("updateTime") val d: Method = textV.javaClass.getDeclaredMethod("updateTime")
@@ -87,7 +86,7 @@ class StatusBarTimeCustomization : IXposedHookLoadPackage {
Settings.System.TIME_12_24 Settings.System.TIME_12_24
) )
val is24 = t == "24" val is24 = t == "24"
now_time = Calendar.getInstance().time nowTime = Calendar.getInstance().time
textV.text = getDate(c!!) + str + getTime(c!!, is24) textV.text = getDate(c!!) + str + getTime(c!!, is24)
} }
} catch (e: Exception) { } catch (e: Exception) {
@@ -96,7 +95,6 @@ class StatusBarTimeCustomization : IXposedHookLoadPackage {
} }
} }
@SuppressLint("SimpleDateFormat") @SuppressLint("SimpleDateFormat")
private fun getDate(context: Context): String { private fun getDate(context: Context): String {
var datePattern = "" var datePattern = ""
@@ -134,7 +132,7 @@ class StatusBarTimeCustomization : IXposedHookLoadPackage {
if (!isHideSpace) datePattern = "$datePattern " if (!isHideSpace) datePattern = "$datePattern "
} }
} }
datePattern = SimpleDateFormat(datePattern).format(now_time) datePattern = SimpleDateFormat(datePattern).format(nowTime)
return datePattern return datePattern
} }
@@ -144,7 +142,7 @@ class StatusBarTimeCustomization : IXposedHookLoadPackage {
val isZh = isZh(context) val isZh = isZh(context)
timePattern += if (t) "HH:mm" else "h:mm" timePattern += if (t) "HH:mm" else "h:mm"
if (isSecond) timePattern += ":ss" if (isSecond) timePattern += ":ss"
timePattern = SimpleDateFormat(timePattern).format(now_time) timePattern = SimpleDateFormat(timePattern).format(nowTime)
if (isZh) timePattern = getPeriod(isZh) + timePattern else timePattern += getPeriod(isZh) if (isZh) timePattern = getPeriod(isZh) + timePattern else timePattern += getPeriod(isZh)
timePattern = getDoubleHour() + timePattern timePattern = getDoubleHour() + timePattern
return timePattern return timePattern
@@ -155,7 +153,7 @@ class StatusBarTimeCustomization : IXposedHookLoadPackage {
var period = "" var period = ""
if (isPeriod) { if (isPeriod) {
if (isZh) { if (isZh) {
when (SimpleDateFormat("HH").format(now_time)) { when (SimpleDateFormat("HH").format(nowTime)) {
"00", "01", "02", "03", "04", "05" -> { "00", "01", "02", "03", "04", "05" -> {
period = "凌晨" period = "凌晨"
} }
@@ -176,7 +174,7 @@ class StatusBarTimeCustomization : IXposedHookLoadPackage {
} }
} }
} else { } else {
period = SimpleDateFormat("a").format(now_time) period = SimpleDateFormat("a").format(nowTime)
if (!isHideSpace) { if (!isHideSpace) {
period = " $period" period = " $period"
} }
@@ -190,7 +188,7 @@ class StatusBarTimeCustomization : IXposedHookLoadPackage {
private fun getDoubleHour(): String { private fun getDoubleHour(): String {
var doubleHour = "" var doubleHour = ""
if (isDoubleHour) { if (isDoubleHour) {
when (SimpleDateFormat("HH").format(now_time)) { when (SimpleDateFormat("HH").format(nowTime)) {
"23", "00" -> { "23", "00" -> {
doubleHour = "子时" doubleHour = "子时"
} }

View File

@@ -3,12 +3,12 @@ package com.lt2333.simplicitytools.hook.app.systemui
import com.github.kyuubiran.ezxhelper.utils.findMethod import com.github.kyuubiran.ezxhelper.utils.findMethod
import com.github.kyuubiran.ezxhelper.utils.hookMethod import com.github.kyuubiran.ezxhelper.utils.hookMethod
import com.lt2333.simplicitytools.util.hasEnable import com.lt2333.simplicitytools.util.hasEnable
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.XposedHelpers import de.robv.android.xposed.XposedHelpers
import de.robv.android.xposed.callbacks.XC_LoadPackage
class WaveCharge : IXposedHookLoadPackage { object WaveCharge: HookRegister() {
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam?) {
override fun init() {
hasEnable("enable_wave_charge_animation") { hasEnable("enable_wave_charge_animation") {
findMethod("com.android.keyguard.charge.ChargeUtils") { findMethod("com.android.keyguard.charge.ChargeUtils") {
name == "supportWaveChargeAnimation" name == "supportWaveChargeAnimation"
@@ -41,4 +41,5 @@ class WaveCharge : IXposedHookLoadPackage {
} }
} }
} }
} }

View File

@@ -3,15 +3,16 @@ package com.lt2333.simplicitytools.hook.app.thememanager
import com.lt2333.simplicitytools.util.findClass import com.lt2333.simplicitytools.util.findClass
import com.lt2333.simplicitytools.util.hasEnable import com.lt2333.simplicitytools.util.hasEnable
import com.lt2333.simplicitytools.util.hookBeforeMethod import com.lt2333.simplicitytools.util.hookBeforeMethod
import de.robv.android.xposed.IXposedHookLoadPackage import com.lt2333.simplicitytools.util.xposed.base.HookRegister
import de.robv.android.xposed.callbacks.XC_LoadPackage
class RemoveAds : IXposedHookLoadPackage { object RemoveAds : HookRegister() {
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
"com.android.thememanager.basemodule.ad.model.AdInfoResponse".hookBeforeMethod(lpparam.classLoader, "isAdValid", "com.android.thememanager.basemodule.ad.model.AdInfo".findClass(lpparam.classLoader)) { override fun init() {
"com.android.thememanager.basemodule.ad.model.AdInfoResponse".hookBeforeMethod(getDefaultClassLoader(), "isAdValid", "com.android.thememanager.basemodule.ad.model.AdInfo".findClass(getDefaultClassLoader())) {
hasEnable("remove_thememanager_ads") { hasEnable("remove_thememanager_ads") {
it.result = false it.result = false
} }
} }
} }
} }

View File

@@ -0,0 +1,31 @@
package com.lt2333.simplicitytools.util.xposed
import com.github.kyuubiran.ezxhelper.init.EzXHelperInit
import com.github.kyuubiran.ezxhelper.utils.Log.logexIfThrow
import com.lt2333.simplicitytools.util.xposed.base.AppRegister
import de.robv.android.xposed.IXposedHookLoadPackage
import de.robv.android.xposed.IXposedHookZygoteInit
import de.robv.android.xposed.callbacks.XC_LoadPackage
abstract class EasyXposedInit: IXposedHookLoadPackage, IXposedHookZygoteInit {
private lateinit var packageParam: XC_LoadPackage.LoadPackageParam
abstract val registeredApp: List<AppRegister>
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam?) {
packageParam = lpparam!!
registeredApp.forEach { app ->
if (app.packageName == lpparam.packageName && (lpparam.processName in app.processName || app.processName.isEmpty())) {
EzXHelperInit.initHandleLoadPackage(lpparam)
EzXHelperInit.setLogTag(app.logTag)
EzXHelperInit.setToastTag(app.logTag)
runCatching { app.handleLoadPackage(lpparam) }.logexIfThrow("Failed call handleLoadPackage, package: ${app.packageName}")
}
}
}
override fun initZygote(startupParam: IXposedHookZygoteInit.StartupParam?) {
EzXHelperInit.initZygote(startupParam!!)
}
}

View File

@@ -0,0 +1,30 @@
package com.lt2333.simplicitytools.util.xposed.base
import com.github.kyuubiran.ezxhelper.utils.Log
import com.github.kyuubiran.ezxhelper.utils.Log.logexIfThrow
import de.robv.android.xposed.IXposedHookInitPackageResources
import de.robv.android.xposed.IXposedHookLoadPackage
import de.robv.android.xposed.callbacks.XC_InitPackageResources
import de.robv.android.xposed.callbacks.XC_LoadPackage
abstract class AppRegister: IXposedHookLoadPackage {
abstract val packageName: String
abstract val processName: List<String>
abstract val logTag: String
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {}
protected fun autoInitHooks(lpparam: XC_LoadPackage.LoadPackageParam, vararg hook: HookRegister) {
hook.forEach {
runCatching {
if (it.isInit) return@forEach
it.setLoadPackageParam(lpparam)
it.init()
it.isInit = true
Log.i("Inited hook: ${it.javaClass.simpleName}")
}.logexIfThrow("Failed init hook: ${it.javaClass.simpleName}")
}
}
}

View File

@@ -0,0 +1,25 @@
package com.lt2333.simplicitytools.util.xposed.base
import de.robv.android.xposed.callbacks.XC_LoadPackage
abstract class HookRegister {
private lateinit var lpparam: XC_LoadPackage.LoadPackageParam
var isInit: Boolean = false
abstract fun init()
fun setLoadPackageParam(loadPackageParam: XC_LoadPackage.LoadPackageParam) {
lpparam = loadPackageParam
}
protected fun getLoadPackageParam(): XC_LoadPackage.LoadPackageParam {
if (!this::lpparam.isInitialized) {
throw RuntimeException("lpparam should be initialized")
}
return lpparam
}
protected fun getDefaultClassLoader(): ClassLoader {
return getLoadPackageParam().classLoader
}
}