From 491e3ed138accdd8b342ecf37e8db7cbdef66458 Mon Sep 17 00:00:00 2001 From: LittleTurtle2333 <841474544@qq.com> Date: Mon, 14 Feb 2022 17:27:41 +0800 Subject: [PATCH] =?UTF-8?q?=E9=80=82=E9=85=8D=E6=9B=B4=E5=A4=9A=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E6=A0=8F=E5=9B=BE=E6=A0=87=E9=9A=90=E8=97=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 + app/build.gradle | 4 +- app/src/main/AndroidManifest.xml | 1 - .../com/lt2333/simplicitytools/MainHook.java | 339 +++++++++++++----- .../simplicitytools/SettingsActivity.java | 37 +- app/src/main/res/values-land/dimens.xml | 3 - app/src/main/res/values-w1240dp/dimens.xml | 3 - app/src/main/res/values-w600dp/dimens.xml | 3 - app/src/main/res/values/dimens.xml | 3 - app/src/main/res/values/strings.xml | 32 +- app/src/main/res/xml/root_preferences.xml | 91 ++++- 11 files changed, 393 insertions(+), 125 deletions(-) delete mode 100644 app/src/main/res/values-land/dimens.xml delete mode 100644 app/src/main/res/values-w1240dp/dimens.xml delete mode 100644 app/src/main/res/values-w600dp/dimens.xml delete mode 100644 app/src/main/res/values/dimens.xml diff --git a/.gitignore b/.gitignore index 8ccc4f86..f710866c 100644 --- a/.gitignore +++ b/.gitignore @@ -14,3 +14,5 @@ .externalNativeBuild .cxx local.properties +/app/release/app-release.apk +/app/release/output-metadata.json diff --git a/app/build.gradle b/app/build.gradle index 81c158ac..316e24d6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -10,7 +10,7 @@ android { minSdk 30 targetSdk 31 versionCode 1 - versionName "1.0" + versionName "1.0.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } @@ -32,8 +32,6 @@ android { dependencies { implementation 'androidx.constraintlayout:constraintlayout:2.1.2' - implementation 'androidx.navigation:navigation-fragment:2.3.5' - implementation 'androidx.navigation:navigation-ui:2.3.5' implementation 'androidx.preference:preference:1.1.1' compileOnly 'de.robv.android.xposed:api:82' implementation 'androidx.appcompat:appcompat:1.4.0' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 21c6d249..e6cfce51 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -14,7 +14,6 @@ android:exported="true"> - diff --git a/app/src/main/java/com/lt2333/simplicitytools/MainHook.java b/app/src/main/java/com/lt2333/simplicitytools/MainHook.java index a4a11d64..786b7e26 100644 --- a/app/src/main/java/com/lt2333/simplicitytools/MainHook.java +++ b/app/src/main/java/com/lt2333/simplicitytools/MainHook.java @@ -1,14 +1,14 @@ package com.lt2333.simplicitytools; -import android.telephony.SubscriptionInfo; +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.XC_MethodReplacement; 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; @@ -18,121 +18,282 @@ public class MainHook implements IXposedHookLoadPackage { String TAG = "MainHook"; @Override - public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { - + public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) { //电量与性能 if (lpparam.packageName.equals("com.miui.powerkeeper")) { + //锁定最高刷新率 - 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(); + 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); + } } - if (prefs.getBoolean("lock_max_fps", false)) { - param.setResult(null); - } - } - }); + }); + } catch (Exception e) { + XposedBridge.log(e); + } } + //系统界面 if (lpparam.packageName.equals("com.android.systemui")) { + //隐藏无SIM卡图标 - 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(); + 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); + } } - 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); + } - 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(); + //隐藏蓝牙图标 + 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); + } } - 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) == true) { - list.remove(1); + }); + } 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) == true) { - list.remove(0); + 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")) { //始终显示时钟 - 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(); + 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); + } } - if (prefs.getBoolean("home_time", false)) { - param.setResult(false); - } - } - }); + }); + } catch (Exception e) { + XposedBridge.log(e); + } } + //Andorid 框架 if (lpparam.packageName.equals("android")) { //允许截图 - XposedHelpers.findAndHookMethod("com.android.server.wm.WindowState", lpparam.classLoader, - "isSecureLocked", - new XC_MethodHook() { - @Override - protected void beforeHookedMethod(MethodHookParam param) throws Throwable { - if (prefs.hasFileChanged()) { - prefs.reload(); + 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); + } } - if (prefs.getBoolean("disable_flag_secure", false)) { - param.setResult(false); - } - } - }); - - //去除上层显示 - XposedHelpers.findAndHookMethod( - "com.android.server.wm.AlertWindowNotification", lpparam.classLoader, - "onPostNotification", - new XC_MethodHook() { - @Override - protected void beforeHookedMethod(MethodHookParam param) throws Throwable { - if (prefs.hasFileChanged()) { - prefs.reload(); - } - if (prefs.getBoolean("delete_on_post_notification", 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 index 144579bb..aec3ee1a 100644 --- a/app/src/main/java/com/lt2333/simplicitytools/SettingsActivity.java +++ b/app/src/main/java/com/lt2333/simplicitytools/SettingsActivity.java @@ -2,15 +2,19 @@ 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 { @@ -60,7 +64,7 @@ public class SettingsActivity extends AppCompatActivity { getSharedPreferences("config", Context.MODE_WORLD_READABLE); } catch (SecurityException exception) { new AlertDialog.Builder(this) - .setMessage("不支持") + .setMessage("您似乎正在使用过时的 LSPosed 版本或 LSPosed 未激活,请更新 LSPosed 或者激活后再试。") .show(); } } @@ -71,8 +75,39 @@ public class SettingsActivity extends AppCompatActivity { 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/res/values-land/dimens.xml b/app/src/main/res/values-land/dimens.xml deleted file mode 100644 index 14991b49..00000000 --- a/app/src/main/res/values-land/dimens.xml +++ /dev/null @@ -1,3 +0,0 @@ - - 48dp - \ No newline at end of file diff --git a/app/src/main/res/values-w1240dp/dimens.xml b/app/src/main/res/values-w1240dp/dimens.xml deleted file mode 100644 index 98f46b44..00000000 --- a/app/src/main/res/values-w1240dp/dimens.xml +++ /dev/null @@ -1,3 +0,0 @@ - - 200dp - \ No newline at end of file diff --git a/app/src/main/res/values-w600dp/dimens.xml b/app/src/main/res/values-w600dp/dimens.xml deleted file mode 100644 index 14991b49..00000000 --- a/app/src/main/res/values-w600dp/dimens.xml +++ /dev/null @@ -1,3 +0,0 @@ - - 48dp - \ No newline at end of file diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml deleted file mode 100644 index a1ce694c..00000000 --- a/app/src/main/res/values/dimens.xml +++ /dev/null @@ -1,3 +0,0 @@ - - 16dp - \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 4b9696f6..23c2a021 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -10,13 +10,33 @@ 其他 允许截图 开启后允许在不允许截图的软件中截图 - 核心破解 - 降级安装、不同签名安装、无视签名 - 隐藏无SIM卡图标 - 状态栏图标 桌面 始终显示桌面时钟 - 隐藏SIM卡一图标 - 隐藏SIM卡二图标 重启UI + + + 状态栏图标 + 隐藏 无SIM卡 图标 + 隐藏 SIM卡一 图标 + 隐藏 SIM卡二 图标 + 隐藏 VPN 图标 + 隐藏 飞行模式 图标 + 隐藏 WIFI 图标 + 隐藏 蓝牙 图标 + 隐藏 声音、勿扰 图标 + 隐藏 闹钟 图标 + 隐藏 WIFI热点 图标 + 隐藏 耳机 图标 + 隐藏 蓝牙电量 图标 + + + 关于 + 版本 + 开发者酷安 + \@乌堆小透明 + 开源仓库 + 点击查看开源仓库(GitHub) + + + \ No newline at end of file diff --git a/app/src/main/res/xml/root_preferences.xml b/app/src/main/res/xml/root_preferences.xml index f62c5989..8542442b 100644 --- a/app/src/main/res/xml/root_preferences.xml +++ b/app/src/main/res/xml/root_preferences.xml @@ -1,9 +1,10 @@ - + - @@ -14,16 +15,58 @@ app:iconSpaceReserved="false" app:title="@string/status_bar_icon"> - + + + + + + + + + + + + + + + - + + app:title="@string/hide_sim_two_icon" /> - @@ -33,7 +76,7 @@ app:iconSpaceReserved="false" app:title="@string/home"> - @@ -42,7 +85,7 @@ - @@ -51,14 +94,36 @@ - - + + + + + app:summary="@string/github_url" + app:title="@string/opensource"> + + + + + + +