From d482970284d5ad5172315024fc784da1b7cce9e4 Mon Sep 17 00:00:00 2001
From: NekoInverter <7741672-NekoInverter@users.noreply.gitlab.com>
Date: Mon, 25 Jan 2021 22:59:38 +0800
Subject: [PATCH] Add variant switch
---
app/build.gradle | 1 -
.../manager/ui/activity/SettingsActivity.java | 79 +++++++++++++------
app/src/main/res/values-zh-rCN/strings.xml | 3 +
app/src/main/res/values/arrays.xml | 9 +++
app/src/main/res/xml/prefs.xml | 9 +++
.../src/main/cpp/main/src/config_manager.cpp | 5 ++
6 files changed, 79 insertions(+), 27 deletions(-)
diff --git a/app/build.gradle b/app/build.gradle
index af176607..a98810d5 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -74,5 +74,4 @@ dependencies {
implementation 'tech.rectifier.preferencex-android:preferencex-simplemenu:88f93154b2'
implementation 'me.zhanghai.android.appiconloader:appiconloader-glide:1.2.0'
implementation 'me.zhanghai.android.fastscroll:library:1.1.5'
- compileOnly 'de.robv.android.xposed:api:82'
}
diff --git a/app/src/main/java/org/meowcat/edxposed/manager/ui/activity/SettingsActivity.java b/app/src/main/java/org/meowcat/edxposed/manager/ui/activity/SettingsActivity.java
index 92abce41..d9b91a43 100644
--- a/app/src/main/java/org/meowcat/edxposed/manager/ui/activity/SettingsActivity.java
+++ b/app/src/main/java/org/meowcat/edxposed/manager/ui/activity/SettingsActivity.java
@@ -15,6 +15,7 @@ import androidx.preference.Preference;
import androidx.preference.SwitchPreferenceCompat;
import com.takisoft.preferencex.PreferenceFragmentCompat;
+import com.takisoft.preferencex.SimpleMenuPreference;
import org.meowcat.edxposed.manager.Constants;
import org.meowcat.edxposed.manager.R;
@@ -22,7 +23,10 @@ import org.meowcat.edxposed.manager.databinding.ActivitySettingsBinding;
import org.meowcat.edxposed.manager.ui.widget.IntegerListPreference;
import org.meowcat.edxposed.manager.util.RepoLoader;
-import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
public class SettingsActivity extends BaseActivity {
private static final String KEY_PREFIX = SettingsActivity.class.getName() + '.';
@@ -97,15 +101,14 @@ public class SettingsActivity extends BaseActivity {
return restarting || super.dispatchGenericMotionEvent(event);
}
- @SuppressWarnings({"ResultOfMethodCallIgnored"})
public static class SettingsFragment extends PreferenceFragmentCompat {
- private static final File enableResourcesFlag = new File(Constants.getBaseDir() + "conf/enable_resources");
- private static final File deoptBootFlag = new File(Constants.getBaseDir() + "conf/deoptbootimage");
- private static final File whiteListModeFlag = new File(Constants.getBaseDir() + "conf/usewhitelist");
- private static final File disableVerboseLogsFlag = new File(Constants.getBaseDir() + "conf/disable_verbose_log");
- private static final File disableModulesLogsFlag = new File(Constants.getBaseDir() + "conf/disable_modules_log");
+ private static final Path enableResourcesFlag = Paths.get(Constants.getBaseDir(), "conf/enable_resources");
+ private static final Path deoptBootFlag = Paths.get(Constants.getBaseDir(), "conf/deoptbootimage");
+ private static final Path whiteListModeFlag = Paths.get(Constants.getBaseDir(), "conf/usewhitelist");
+ private static final Path disableVerboseLogsFlag = Paths.get(Constants.getBaseDir(), "conf/disable_verbose_log");
+ private static final Path disableModulesLogsFlag = Paths.get(Constants.getBaseDir() + "conf/disable_modules_log");
+ private static final Path variantFlag = Paths.get(Constants.getBaseDir()).getParent().resolve("variant");
- @SuppressLint({"ObsoleteSdkInt", "WorldReadableFiles"})
@Override
public void onCreatePreferencesFix(Bundle savedInstanceState, String rootKey) {
addPreferencesFromResource(R.xml.prefs);
@@ -120,32 +123,55 @@ public class SettingsActivity extends BaseActivity {
SwitchPreferenceCompat prefWhiteListMode = findPreference("white_list_switch");
if (prefWhiteListMode != null) {
- prefWhiteListMode.setChecked(whiteListModeFlag.exists());
+ prefWhiteListMode.setChecked(Files.exists(whiteListModeFlag));
prefWhiteListMode.setOnPreferenceChangeListener(new OnFlagChangeListener(whiteListModeFlag));
}
SwitchPreferenceCompat prefVerboseLogs = findPreference("disable_verbose_log");
if (prefVerboseLogs != null) {
- prefVerboseLogs.setChecked(disableVerboseLogsFlag.exists());
+ prefVerboseLogs.setChecked(Files.exists(disableVerboseLogsFlag));
prefVerboseLogs.setOnPreferenceChangeListener(new OnFlagChangeListener(disableVerboseLogsFlag));
}
SwitchPreferenceCompat prefModulesLogs = findPreference("disable_modules_log");
if (prefModulesLogs != null) {
- prefModulesLogs.setChecked(disableModulesLogsFlag.exists());
+ prefModulesLogs.setChecked(Files.exists(disableModulesLogsFlag));
prefModulesLogs.setOnPreferenceChangeListener(new OnFlagChangeListener(disableModulesLogsFlag));
}
SwitchPreferenceCompat prefEnableDeopt = findPreference("enable_boot_image_deopt");
if (prefEnableDeopt != null) {
- prefEnableDeopt.setChecked(deoptBootFlag.exists());
+ prefEnableDeopt.setChecked(Files.exists(deoptBootFlag));
prefEnableDeopt.setOnPreferenceChangeListener(new OnFlagChangeListener(deoptBootFlag));
}
- SwitchPreferenceCompat prefDisableResources = findPreference("enable_resources");
- if (prefDisableResources != null) {
- prefDisableResources.setChecked(!enableResourcesFlag.exists());
- prefDisableResources.setOnPreferenceChangeListener(new OnFlagChangeListener(enableResourcesFlag));
+ SwitchPreferenceCompat prefEnableResources = findPreference("enable_resources");
+ if (prefEnableResources != null) {
+ prefEnableResources.setChecked(Files.exists(enableResourcesFlag));
+ prefEnableResources.setOnPreferenceChangeListener(new OnFlagChangeListener(enableResourcesFlag));
+ }
+
+ SimpleMenuPreference prefVariant = findPreference("variant");
+ if (prefVariant != null) {
+ if (requireActivity().getApplicationInfo().uid / 100000 != 0) {
+ prefVariant.setVisible(false);
+ } else {
+ try {
+ prefVariant.setValue(new String(Files.readAllBytes(variantFlag)).trim());
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ prefVariant.setOnPreferenceChangeListener((preference, newValue) -> {
+ try {
+ Files.write(variantFlag, ((String) newValue).getBytes());
+ return true;
+ } catch (IOException e) {
+ e.printStackTrace();
+ Toast.makeText(getActivity(), e.getMessage(), Toast.LENGTH_SHORT).show();
+ return false;
+ }
+ });
+ }
}
SwitchPreferenceCompat transparent = findPreference("transparent_status_bar");
@@ -246,25 +272,26 @@ public class SettingsActivity extends BaseActivity {
}
private class OnFlagChangeListener implements Preference.OnPreferenceChangeListener {
- private final File flag;
+ private final Path flag;
- OnFlagChangeListener(File flag) {
+ OnFlagChangeListener(Path flag) {
this.flag = flag;
}
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
boolean enabled = (Boolean) newValue;
- if (enabled) {
- try {
- flag.createNewFile();
- } catch (Exception e) {
- Toast.makeText(getActivity(), e.getMessage(), Toast.LENGTH_SHORT).show();
+ try {
+ if (enabled) {
+ Files.createFile(flag);
+ } else {
+ Files.delete(flag);
}
- } else {
- flag.delete();
+ } catch (Exception e) {
+ e.printStackTrace();
+ Toast.makeText(getActivity(), e.getMessage(), Toast.LENGTH_SHORT).show();
}
- return (enabled == flag.exists());
+ return (enabled == Files.exists(flag));
}
}
}
diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml
index 983c7a14..c18c3e3e 100644
--- a/app/src/main/res/values-zh-rCN/strings.xml
+++ b/app/src/main/res/values-zh-rCN/strings.xml
@@ -313,4 +313,7 @@
作用域
启用作用域
您安装的 LSPosed 版本不支持模块作用域,下载新版本?
+ 启用资源钩子
+ 警告: 资源钩子已被弃用
+ 变体
diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml
index 3a967a31..38506d77 100644
--- a/app/src/main/res/values/arrays.xml
+++ b/app/src/main/res/values/arrays.xml
@@ -65,4 +65,13 @@
- experimental
+
+ - YAHFA
+ - SandHook
+
+
+ - 1
+ - 2
+
+
diff --git a/app/src/main/res/xml/prefs.xml b/app/src/main/res/xml/prefs.xml
index 18fe5869..8538853f 100644
--- a/app/src/main/res/xml/prefs.xml
+++ b/app/src/main/res/xml/prefs.xml
@@ -115,6 +115,15 @@
android:title="@string/settings_group_framework"
app:iconSpaceReserved="false">
+
+