mirror of
https://github.com/LittleTurtle2333/SimplicityTools.git
synced 2026-07-12 19:31:17 +08:00
优化项目结构,将全部Hook方法转移到Kotlin
This commit is contained in:
@@ -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.+'
|
||||
|
||||
@@ -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" />
|
||||
|
||||
@@ -1 +1 @@
|
||||
com.lt2333.simplicitytools.MainHook
|
||||
com.lt2333.simplicitytools.hook.MainHook
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
}
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user