diff --git a/app/build.gradle b/app/build.gradle index cc3d30ed..348d762c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -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.+' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e6cfce51..4c0d9e02 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -10,7 +10,7 @@ android:supportsRtl="true" android:theme="@style/Theme.MyApplication"> diff --git a/app/src/main/assets/xposed_init b/app/src/main/assets/xposed_init index 8174da72..371c818b 100644 --- a/app/src/main/assets/xposed_init +++ b/app/src/main/assets/xposed_init @@ -1 +1 @@ -com.lt2333.simplicitytools.MainHook \ No newline at end of file +com.lt2333.simplicitytools.hook.MainHook \ No newline at end of file diff --git a/app/src/main/java/com/lt2333/simplicitytools/MainHook.java b/app/src/main/java/com/lt2333/simplicitytools/MainHook.java deleted file mode 100644 index 786b7e26..00000000 --- a/app/src/main/java/com/lt2333/simplicitytools/MainHook.java +++ /dev/null @@ -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); - } - } - - } - -} diff --git a/app/src/main/java/com/lt2333/simplicitytools/SettingsActivity.java b/app/src/main/java/com/lt2333/simplicitytools/SettingsActivity.java deleted file mode 100644 index aec3ee1a..00000000 --- a/app/src/main/java/com/lt2333/simplicitytools/SettingsActivity.java +++ /dev/null @@ -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); - } - } - -} \ No newline at end of file diff --git a/app/src/main/java/com/lt2333/simplicitytools/activity/SettingsActivity.kt b/app/src/main/java/com/lt2333/simplicitytools/activity/SettingsActivity.kt new file mode 100644 index 00000000..fe452098 --- /dev/null +++ b/app/src/main/java/com/lt2333/simplicitytools/activity/SettingsActivity.kt @@ -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("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) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/lt2333/simplicitytools/hook/MainHook.kt b/app/src/main/java/com/lt2333/simplicitytools/hook/MainHook.kt new file mode 100644 index 00000000..5f6c5093 --- /dev/null +++ b/app/src/main/java/com/lt2333/simplicitytools/hook/MainHook.kt @@ -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) + } + } + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/lt2333/simplicitytools/hook/app/Android.kt b/app/src/main/java/com/lt2333/simplicitytools/hook/app/Android.kt new file mode 100644 index 00000000..5e7cd53b --- /dev/null +++ b/app/src/main/java/com/lt2333/simplicitytools/hook/app/Android.kt @@ -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) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/lt2333/simplicitytools/hook/app/MiuiHome.kt b/app/src/main/java/com/lt2333/simplicitytools/hook/app/MiuiHome.kt new file mode 100644 index 00000000..79ec9b41 --- /dev/null +++ b/app/src/main/java/com/lt2333/simplicitytools/hook/app/MiuiHome.kt @@ -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) + } + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/lt2333/simplicitytools/hook/app/PowerKeeper.kt b/app/src/main/java/com/lt2333/simplicitytools/hook/app/PowerKeeper.kt new file mode 100644 index 00000000..dfe808ca --- /dev/null +++ b/app/src/main/java/com/lt2333/simplicitytools/hook/app/PowerKeeper.kt @@ -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 + } + } + }) + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/lt2333/simplicitytools/hook/app/SystemUI.kt b/app/src/main/java/com/lt2333/simplicitytools/hook/app/SystemUI.kt new file mode 100644 index 00000000..5fa4c611 --- /dev/null +++ b/app/src/main/java/com/lt2333/simplicitytools/hook/app/SystemUI.kt @@ -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) + } + + } +} \ No newline at end of file