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"> + +