优化项目结构,将全部Hook方法转移到Kotlin

This commit is contained in:
LittleTurtle2333
2022-02-15 16:33:45 +08:00
parent d9780c9e3d
commit 9fea21b885
11 changed files with 455 additions and 415 deletions

View File

@@ -32,9 +32,10 @@ android {
}
dependencies {
compileOnly 'de.robv.android.xposed:api:82'
compileOnly 'de.robv.android.xposed:api:82:sources'
implementation 'androidx.constraintlayout:constraintlayout:2.1.2'
implementation 'androidx.preference:preference:1.1.1'
compileOnly 'de.robv.android.xposed:api:82'
implementation 'androidx.appcompat:appcompat:1.4.0'
implementation 'com.google.android.material:material:1.4.0'
testImplementation 'junit:junit:4.+'

View File

@@ -10,7 +10,7 @@
android:supportsRtl="true"
android:theme="@style/Theme.MyApplication">
<activity
android:name=".SettingsActivity"
android:name=".activity.SettingsActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

View File

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

View File

@@ -1,299 +0,0 @@
package com.lt2333.simplicitytools;
import android.content.Intent;
import android.util.Log;
import java.util.List;
import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XSharedPreferences;
import de.robv.android.xposed.XposedBridge;
import de.robv.android.xposed.XposedHelpers;
import de.robv.android.xposed.callbacks.XC_LoadPackage;
public class MainHook implements IXposedHookLoadPackage {
XSharedPreferences prefs = new XSharedPreferences(BuildConfig.APPLICATION_ID, "config");
String TAG = "MainHook";
@Override
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) {
//电量与性能
if (lpparam.packageName.equals("com.miui.powerkeeper")) {
//锁定最高刷新率
try {
XposedHelpers.findAndHookMethod(
"com.miui.powerkeeper.statemachine.DisplayFrameSetting", lpparam.classLoader,
"setScreenEffect",
String.class, int.class, int.class,
new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) {
if (prefs.hasFileChanged()) {
prefs.reload();
}
if (prefs.getBoolean("lock_max_fps", false)) {
param.setResult(null);
}
}
});
} catch (Exception e) {
XposedBridge.log(e);
}
}
//系统界面
if (lpparam.packageName.equals("com.android.systemui")) {
//隐藏无SIM卡图标
try {
XposedHelpers.findAndHookMethod(
"com.android.systemui.statusbar.phone.MiuiStatusBarSignalPolicy", lpparam.classLoader,
"setNoSims", boolean.class, boolean.class,
new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) {
if (prefs.hasFileChanged()) {
prefs.reload();
}
if (prefs.getBoolean("hide_no_sim_icon", false)) {
param.setResult(null);
}
}
});
} catch (Exception e) {
XposedBridge.log(e);
}
//隐藏VPN图标
try {
XposedHelpers.findAndHookMethod(
"com.android.systemui.statusbar.phone.StatusBarSignalPolicy", lpparam.classLoader,
"updateVpn",
new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) {
if (prefs.hasFileChanged()) {
prefs.reload();
}
if (prefs.getBoolean("hide_vpn_icon", false)) {
param.setResult(null);
}
}
});
} catch (Exception e) {
XposedBridge.log(e);
}
//隐藏飞行模式图标
try {
XposedHelpers.findAndHookMethod(
"com.android.systemui.statusbar.phone.StatusBarSignalPolicy", lpparam.classLoader,
"setIsAirplaneMode", XposedHelpers.findClass("com.android.systemui.statusbar.policy.NetworkController$IconState", lpparam.classLoader),
new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) {
if (prefs.hasFileChanged()) {
prefs.reload();
}
if (prefs.getBoolean("hide_airplane_icon", false)) {
param.setResult(null);
}
}
});
} catch (Exception e) {
XposedBridge.log(e);
}
//隐藏WIFI图标
try {
XposedHelpers.findAndHookMethod(
"com.android.systemui.statusbar.phone.MiuiStatusBarSignalPolicy", lpparam.classLoader,
"updateWifiIconWithState", XposedHelpers.findClass("com.android.systemui.statusbar.phone.StatusBarSignalPolicy$WifiIconState", lpparam.classLoader),
new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) {
if (prefs.hasFileChanged()) {
prefs.reload();
}
if (prefs.getBoolean("hide_wifi_icon", false)) {
param.setResult(null);
}
}
});
} catch (Exception e) {
XposedBridge.log(e);
}
//隐藏蓝牙图标
try {
XposedHelpers.findAndHookMethod(
"com.android.systemui.statusbar.phone.MiuiPhoneStatusBarPolicy", lpparam.classLoader,
"updateBluetooth", String.class,
new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) {
if (prefs.hasFileChanged()) {
prefs.reload();
}
if (prefs.getBoolean("hide_bluetooth_icon", false)) {
param.setResult(null);
}
}
});
} catch (Exception e) {
XposedBridge.log(e);
}
//隐藏 声音、勿扰 图标
try {
XposedHelpers.findAndHookMethod(
"com.android.systemui.statusbar.phone.MiuiPhoneStatusBarPolicy", lpparam.classLoader,
"updateVolumeZen",
new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) {
if (prefs.hasFileChanged()) {
prefs.reload();
}
if (prefs.getBoolean("hide_volume_zen_icon", false)) {
param.setResult(null);
}
}
});
} catch (Exception e) {
XposedBridge.log(e);
}
//隐藏 闹钟 图标
try {
XposedHelpers.findAndHookMethod(
"com.android.systemui.statusbar.phone.MiuiPhoneStatusBarPolicy", lpparam.classLoader,
"onMiuiAlarmChanged",
new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) {
if (prefs.hasFileChanged()) {
prefs.reload();
}
if (prefs.getBoolean("hide_alarm_icon", false)) {
param.setResult(null);
}
}
});
} catch (Exception e) {
XposedBridge.log(e);
}
//隐藏 耳机 图标
try {
XposedHelpers.findAndHookMethod(
"com.android.systemui.statusbar.phone.MiuiPhoneStatusBarPolicy", lpparam.classLoader,
"updateHeadsetPlug", Intent.class,
new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) {
if (prefs.hasFileChanged()) {
prefs.reload();
}
if (prefs.getBoolean("hide_headset_icon", false)) {
param.setResult(null);
}
}
});
} catch (Exception e) {
XposedBridge.log(e);
}
//隐藏 蓝牙电量 图标
try {
XposedHelpers.findAndHookMethod(
"com.android.systemui.statusbar.phone.MiuiPhoneStatusBarPolicy", lpparam.classLoader,
"updateBluetoothHandsfreeBattery", Intent.class,
new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) {
if (prefs.hasFileChanged()) {
prefs.reload();
}
if (prefs.getBoolean("hide_bluetooth_battery_icon", false)) {
param.setResult(null);
}
}
});
} catch (Exception e) {
XposedBridge.log(e);
}
//隐藏卡一卡二
try {
XposedHelpers.findAndHookMethod(
"com.android.systemui.statusbar.phone.StatusBarSignalPolicy", lpparam.classLoader,
"hasCorrectSubs", List.class,
new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) {
if (prefs.hasFileChanged()) {
prefs.reload();
}
List list = ((List<?>) param.args[0]);
int size = list.size();
Log.d(TAG, "beforeHookedMethod: " + size);
if (size == 2 && prefs.getBoolean("hide_sim_two_icon", false)) {
list.remove(1);
}
if (size >= 1 && prefs.getBoolean("hide_sim_one_icon", false)) {
list.remove(0);
}
}
});
} catch (Exception e) {
XposedBridge.log(e);
}
}
//MIUI桌面
if (lpparam.packageName.equals("com.miui.home")) {
//始终显示时钟
try {
XposedHelpers.findAndHookMethod(
"com.miui.home.launcher.Workspace", lpparam.classLoader,
"isScreenHasClockGadget", long.class,
new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) {
if (prefs.hasFileChanged()) {
prefs.reload();
}
if (prefs.getBoolean("home_time", false)) {
param.setResult(false);
}
}
});
} catch (Exception e) {
XposedBridge.log(e);
}
}
//Andorid 框架
if (lpparam.packageName.equals("android")) {
//允许截图
try {
XposedHelpers.findAndHookMethod("com.android.server.wm.WindowState", lpparam.classLoader,
"isSecureLocked",
new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) {
if (prefs.hasFileChanged()) {
prefs.reload();
}
if (prefs.getBoolean("disable_flag_secure", false)) {
param.setResult(false);
}
}
});
} catch (Exception e) {
XposedBridge.log(e);
}
}
}
}

View File

@@ -1,113 +0,0 @@
package com.lt2333.simplicitytools;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.Uri;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.preference.Preference;
import androidx.preference.PreferenceFragmentCompat;
public class SettingsActivity extends AppCompatActivity {
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
if (item.getItemId() == R.id.reboot_ui) {
String[] commad = new String[]{"killall com.android.systemui"};
ShellUtils.execCommand(commad, true);
}
return super.onOptionsItemSelected(item);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.settings_activity);
if (savedInstanceState == null) {
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.settings, new SettingsFragment())
.commit();
}
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
actionBar.setDisplayHomeAsUpEnabled(false);
}
checkEdXposed();
}
@SuppressLint("WorldReadableFiles")
private void checkEdXposed() {
try {
// getSharedPreferences will hooked by LSPosed and change xml file path to /data/misc/edxp**
// will not throw SecurityException
//noinspection deprecation
getSharedPreferences("config", Context.MODE_WORLD_READABLE);
} catch (SecurityException exception) {
new AlertDialog.Builder(this)
.setMessage("您似乎正在使用过时的 LSPosed 版本或 LSPosed 未激活,请更新 LSPosed 或者激活后再试。")
.show();
}
}
public static class SettingsFragment extends PreferenceFragmentCompat {
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
getPreferenceManager().setSharedPreferencesName("config");
setPreferencesFromResource(R.xml.root_preferences, rootKey);
findPreference("verison").setSummary(BuildConfig.VERSION_NAME+"("+BuildConfig.BUILD_TYPE+")");
}
@Override
public boolean onPreferenceTreeClick(Preference preference) {
if (preference.getKey().equals("opensource")){
try {
Uri uri = Uri.parse("https://github.com/LittleTurtle2333/Simplicity_Tools_Xposed");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
} catch (Exception e) {
Toast.makeText(getActivity(), "访问失败", Toast.LENGTH_SHORT).show();
}
}
if (preference.getKey().equals("dev_coolapk")) {
try {
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("coolmarket://u/883441")));
Toast.makeText(getActivity(), "乌堆小透明:靓仔,点个关注吧!", Toast.LENGTH_SHORT).show();
} catch (Exception e) {
Toast.makeText(getActivity(), "本机未安装酷安应用", Toast.LENGTH_SHORT).show();
Uri uri = Uri.parse("http://www.coolapk.com/u/883441");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
}
}
return super.onPreferenceTreeClick(preference);
}
}
}

View File

@@ -0,0 +1,101 @@
package com.lt2333.simplicitytools.activity
import android.annotation.SuppressLint
import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.view.Menu
import android.view.MenuItem
import android.widget.Toast
import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AppCompatActivity
import androidx.preference.Preference
import androidx.preference.PreferenceFragmentCompat
import com.lt2333.simplicitytools.BuildConfig
import com.lt2333.simplicitytools.R
import com.lt2333.simplicitytools.util.ShellUtils
class SettingsActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.settings_activity)
if (savedInstanceState == null) {
supportFragmentManager
.beginTransaction()
.replace(R.id.settings, SettingsFragment())
.commit()
}
supportActionBar?.setDisplayHomeAsUpEnabled(false)
checkLSPosed()
}
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
menuInflater.inflate(R.menu.main, menu)
return super.onCreateOptionsMenu(menu)
}
@SuppressLint("WorldReadableFiles")
private fun checkLSPosed() {
try {
getSharedPreferences("config", MODE_WORLD_READABLE)
} catch (exception: SecurityException) {
AlertDialog.Builder(this)
.setMessage("您似乎正在使用过时的 LSPosed 版本或 LSPosed 未激活,请更新 LSPosed 或者激活后再试。")
.show()
}
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
R.id.reboot_ui -> {
val commad = arrayOf("killall com.android.systemui")
ShellUtils.execCommand(commad, true)
}
}
return super.onOptionsItemSelected(item)
}
class SettingsFragment : PreferenceFragmentCompat() {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
preferenceManager.sharedPreferencesName = "config"
setPreferencesFromResource(R.xml.root_preferences, rootKey)
findPreference<Preference>("verison")!!.summary =
BuildConfig.VERSION_NAME + "(" + BuildConfig.BUILD_TYPE + ")"
}
override fun onPreferenceTreeClick(preference: Preference?): Boolean {
when (preference!!.key) {
"opensource" -> {
try {
val uri =
Uri.parse("https://github.com/LittleTurtle2333/Simplicity_Tools_Xposed")
val intent = Intent(Intent.ACTION_VIEW, uri)
startActivity(intent)
} catch (e: Exception) {
Toast.makeText(activity, "访问失败", Toast.LENGTH_SHORT).show()
}
}
"dev_coolapk" -> {
try {
startActivity(
Intent(
Intent.ACTION_VIEW,
Uri.parse("coolmarket://u/883441")
)
)
Toast.makeText(activity, "乌堆小透明:靓仔,点个关注吧!", Toast.LENGTH_SHORT).show()
} catch (e: Exception) {
Toast.makeText(activity, "本机未安装酷安应用", Toast.LENGTH_SHORT).show()
val uri = Uri.parse("http://www.coolapk.com/u/883441")
val intent = Intent(Intent.ACTION_VIEW, uri)
startActivity(intent)
}
}
}
return super.onPreferenceTreeClick(preference)
}
}
}

View File

@@ -0,0 +1,29 @@
package com.lt2333.simplicitytools.hook
import de.robv.android.xposed.IXposedHookLoadPackage
import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam
import com.lt2333.simplicitytools.hook.app.PowerKeeper
import com.lt2333.simplicitytools.hook.app.SystemUI
import com.lt2333.simplicitytools.hook.app.MiuiHome
import com.lt2333.simplicitytools.hook.app.Android
class MainHook : IXposedHookLoadPackage {
override fun handleLoadPackage(lpparam: LoadPackageParam) {
when (lpparam.packageName) {
"com.miui.powerkeeper" -> {
PowerKeeper().handleLoadPackage(lpparam)
}
"com.android.systemui" -> {
SystemUI().handleLoadPackage(lpparam)
}
"com.miui.home" -> {
MiuiHome().handleLoadPackage(lpparam)
}
"android" -> {
Android().handleLoadPackage(lpparam)
}
}
}
}

View File

@@ -0,0 +1,31 @@
package com.lt2333.simplicitytools.hook.app
import com.lt2333.simplicitytools.BuildConfig
import de.robv.android.xposed.*
import de.robv.android.xposed.callbacks.XC_LoadPackage
class Android : IXposedHookLoadPackage {
var prefs = XSharedPreferences(BuildConfig.APPLICATION_ID, "config")
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
//允许截图
try {
XposedHelpers.findAndHookMethod("com.android.server.wm.WindowState",
lpparam.classLoader,
"isSecureLocked",
object : XC_MethodHook() {
override fun beforeHookedMethod(param: MethodHookParam) {
if (prefs.hasFileChanged()) {
prefs.reload()
}
if (prefs.getBoolean("disable_flag_secure", false)) {
param.result = false
}
}
})
} catch (e: Exception) {
XposedBridge.log(e)
}
}
}

View File

@@ -0,0 +1,34 @@
package com.lt2333.simplicitytools.hook.app
import com.lt2333.simplicitytools.BuildConfig
import com.lt2333.simplicitytools.hook.MainHook
import de.robv.android.xposed.*
import de.robv.android.xposed.XC_MethodHook.MethodHookParam
import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam
class MiuiHome : IXposedHookLoadPackage {
var prefs = XSharedPreferences(BuildConfig.APPLICATION_ID, "config")
override fun handleLoadPackage(lpparam: LoadPackageParam) {
//始终显示时钟
try {
XposedHelpers.findAndHookMethod(
"com.miui.home.launcher.Workspace", lpparam.classLoader,
"isScreenHasClockGadget", Long::class.javaPrimitiveType,
object : XC_MethodHook() {
override fun beforeHookedMethod(param: MethodHookParam) {
if (prefs.hasFileChanged()) {
prefs.reload()
}
if (prefs.getBoolean("home_time", false)) {
param.result = false
}
}
})
} catch (e: Exception) {
XposedBridge.log(e)
}
}
}

View File

@@ -0,0 +1,30 @@
package com.lt2333.simplicitytools.hook.app
import com.lt2333.simplicitytools.BuildConfig
import de.robv.android.xposed.*
import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam
class PowerKeeper : IXposedHookLoadPackage {
var prefs = XSharedPreferences(BuildConfig.APPLICATION_ID, "config")
override fun handleLoadPackage(lpparam: LoadPackageParam) {
//锁定最高刷新率
XposedHelpers.findAndHookMethod(
"com.miui.powerkeeper.statemachine.DisplayFrameSetting", lpparam.classLoader,
"setScreenEffect",
String::class.java, Int::class.javaPrimitiveType, Int::class.javaPrimitiveType,
object : XC_MethodHook() {
override fun beforeHookedMethod(param: MethodHookParam) {
super.beforeHookedMethod(param)
if (prefs.hasFileChanged()) {
prefs.reload()
}
if (prefs.getBoolean("lock_max_fps", false)) {
param.result = null
}
}
})
}
}

View File

@@ -0,0 +1,226 @@
package com.lt2333.simplicitytools.hook.app
import android.content.Intent
import android.util.Log
import com.lt2333.simplicitytools.BuildConfig
import com.lt2333.simplicitytools.hook.MainHook
import de.robv.android.xposed.*
import de.robv.android.xposed.XC_MethodHook.MethodHookParam
import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam
class SystemUI : IXposedHookLoadPackage {
var prefs = XSharedPreferences(BuildConfig.APPLICATION_ID, "config")
override fun handleLoadPackage(lpparam: LoadPackageParam) {
//隐藏无SIM卡图标
try {
XposedHelpers.findAndHookMethod(
"com.android.systemui.statusbar.phone.MiuiStatusBarSignalPolicy",
lpparam.classLoader,
"setNoSims",
Boolean::class.javaPrimitiveType,
Boolean::class.javaPrimitiveType,
object : XC_MethodHook() {
override fun beforeHookedMethod(param: MethodHookParam) {
if (prefs.hasFileChanged()) {
prefs.reload()
}
if (prefs.getBoolean("hide_no_sim_icon", false)) {
param.result = null
}
}
})
} catch (e: Exception) {
XposedBridge.log(e)
}
//隐藏VPN图标
//隐藏VPN图标
try {
XposedHelpers.findAndHookMethod(
"com.android.systemui.statusbar.phone.StatusBarSignalPolicy", lpparam.classLoader,
"updateVpn",
object : XC_MethodHook() {
override fun beforeHookedMethod(param: MethodHookParam) {
if (prefs.hasFileChanged()) {
prefs.reload()
}
if (prefs.getBoolean("hide_vpn_icon", false)) {
param.result = null
}
}
})
} catch (e: Exception) {
XposedBridge.log(e)
}
//隐藏飞行模式图标
try {
XposedHelpers.findAndHookMethod(
"com.android.systemui.statusbar.phone.StatusBarSignalPolicy",
lpparam.classLoader,
"setIsAirplaneMode",
XposedHelpers.findClass(
"com.android.systemui.statusbar.policy.NetworkController\$IconState",
lpparam.classLoader
),
object : XC_MethodHook() {
override fun beforeHookedMethod(param: MethodHookParam) {
if (prefs.hasFileChanged()) {
prefs.reload()
}
if (prefs.getBoolean("hide_airplane_icon", false)) {
param.result = null
}
}
})
} catch (e: Exception) {
XposedBridge.log(e)
}
//隐藏WIFI图标
try {
XposedHelpers.findAndHookMethod(
"com.android.systemui.statusbar.phone.MiuiStatusBarSignalPolicy",
lpparam.classLoader,
"updateWifiIconWithState",
XposedHelpers.findClass(
"com.android.systemui.statusbar.phone.StatusBarSignalPolicy\$WifiIconState",
lpparam.classLoader
),
object : XC_MethodHook() {
override fun beforeHookedMethod(param: MethodHookParam) {
if (prefs.hasFileChanged()) {
prefs.reload()
}
if (prefs.getBoolean("hide_wifi_icon", false)) {
param.result = null
}
}
})
} catch (e: Exception) {
XposedBridge.log(e)
}
//隐藏蓝牙图标
try {
XposedHelpers.findAndHookMethod(
"com.android.systemui.statusbar.phone.MiuiPhoneStatusBarPolicy",
lpparam.classLoader,
"updateBluetooth",
String::class.java,
object : XC_MethodHook() {
override fun beforeHookedMethod(param: MethodHookParam) {
if (prefs.hasFileChanged()) {
prefs.reload()
}
if (prefs.getBoolean("hide_bluetooth_icon", false)) {
param.result = null
}
}
})
} catch (e: Exception) {
XposedBridge.log(e)
}
//隐藏 声音、勿扰 图标
try {
XposedHelpers.findAndHookMethod(
"com.android.systemui.statusbar.phone.MiuiPhoneStatusBarPolicy",
lpparam.classLoader,
"updateVolumeZen",
object : XC_MethodHook() {
override fun beforeHookedMethod(param: MethodHookParam) {
if (prefs.hasFileChanged()) {
prefs.reload()
}
if (prefs.getBoolean("hide_volume_zen_icon", false)) {
param.result = null
}
}
})
} catch (e: Exception) {
XposedBridge.log(e)
}
//隐藏 闹钟 图标
try {
XposedHelpers.findAndHookMethod(
"com.android.systemui.statusbar.phone.MiuiPhoneStatusBarPolicy",
lpparam.classLoader,
"onMiuiAlarmChanged",
object : XC_MethodHook() {
override fun beforeHookedMethod(param: MethodHookParam) {
if (prefs.hasFileChanged()) {
prefs.reload()
}
if (prefs.getBoolean("hide_alarm_icon", false)) {
param.result = null
}
}
})
} catch (e: Exception) {
XposedBridge.log(e)
}
//隐藏 耳机 图标
try {
XposedHelpers.findAndHookMethod(
"com.android.systemui.statusbar.phone.MiuiPhoneStatusBarPolicy",
lpparam.classLoader,
"updateHeadsetPlug",
Intent::class.java,
object : XC_MethodHook() {
override fun beforeHookedMethod(param: MethodHookParam) {
if (prefs.hasFileChanged()) {
prefs.reload()
}
if (prefs.getBoolean("hide_headset_icon", false)) {
param.result = null
}
}
})
} catch (e: Exception) {
XposedBridge.log(e)
}
//隐藏 蓝牙电量 图标
try {
XposedHelpers.findAndHookMethod(
"com.android.systemui.statusbar.phone.MiuiPhoneStatusBarPolicy",
lpparam.classLoader,
"updateBluetoothHandsfreeBattery",
Intent::class.java,
object : XC_MethodHook() {
override fun beforeHookedMethod(param: MethodHookParam) {
if (prefs.hasFileChanged()) {
prefs.reload()
}
if (prefs.getBoolean("hide_bluetooth_battery_icon", false)) {
param.result = null
}
}
})
} catch (e: Exception) {
XposedBridge.log(e)
}
//隐藏卡一卡二
try {
XposedHelpers.findAndHookMethod(
"com.android.systemui.statusbar.phone.StatusBarSignalPolicy", lpparam.classLoader,
"hasCorrectSubs", MutableList::class.java,
object : XC_MethodHook() {
override fun beforeHookedMethod(param: MethodHookParam) {
if (prefs.hasFileChanged()) {
prefs.reload()
}
val list = param.args[0] as MutableList<*>
val size = list.size
if (size == 2 && prefs.getBoolean("hide_sim_two_icon", false)) {
list.removeAt(1)
}
if (size >= 1 && prefs.getBoolean("hide_sim_one_icon", false)) {
list.removeAt(0)
}
}
})
} catch (e: Exception) {
XposedBridge.log(e)
}
}
}