mirror of
https://github.com/LittleTurtle2333/SimplicityTools.git
synced 2026-07-12 11:21:18 +08:00
优化项目结构,将全部Hook方法转移到Kotlin
This commit is contained in:
@@ -32,9 +32,10 @@ android {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
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.constraintlayout:constraintlayout:2.1.2'
|
||||||
implementation 'androidx.preference:preference:1.1.1'
|
implementation 'androidx.preference:preference:1.1.1'
|
||||||
compileOnly 'de.robv.android.xposed:api:82'
|
|
||||||
implementation 'androidx.appcompat:appcompat:1.4.0'
|
implementation 'androidx.appcompat:appcompat:1.4.0'
|
||||||
implementation 'com.google.android.material:material:1.4.0'
|
implementation 'com.google.android.material:material:1.4.0'
|
||||||
testImplementation 'junit:junit:4.+'
|
testImplementation 'junit:junit:4.+'
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
android:supportsRtl="true"
|
android:supportsRtl="true"
|
||||||
android:theme="@style/Theme.MyApplication">
|
android:theme="@style/Theme.MyApplication">
|
||||||
<activity
|
<activity
|
||||||
android:name=".SettingsActivity"
|
android:name=".activity.SettingsActivity"
|
||||||
android:exported="true">
|
android:exported="true">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.intent.action.MAIN" />
|
<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