Remove black list

This commit is contained in:
tehcneko 2021-01-29 17:40:14 +08:00
parent 62fb91a469
commit cb7057e6db
15 changed files with 52 additions and 98 deletions

View File

@ -9,16 +9,15 @@ import android.os.Looper;
import androidx.preference.PreferenceManager; import androidx.preference.PreferenceManager;
import java.io.File;
import java.io.PrintWriter;
import java.io.StringWriter;
import io.github.lsposed.manager.ui.activity.CrashReportActivity; import io.github.lsposed.manager.ui.activity.CrashReportActivity;
import io.github.lsposed.manager.util.CompileUtil; import io.github.lsposed.manager.util.CompileUtil;
import io.github.lsposed.manager.util.ModuleUtil; import io.github.lsposed.manager.util.ModuleUtil;
import io.github.lsposed.manager.util.NotificationUtil; import io.github.lsposed.manager.util.NotificationUtil;
import io.github.lsposed.manager.util.RebootUtil; import io.github.lsposed.manager.util.RebootUtil;
import java.io.File;
import java.io.PrintWriter;
import java.io.StringWriter;
import rikka.shizuku.Shizuku; import rikka.shizuku.Shizuku;
import rikka.sui.Sui; import rikka.sui.Sui;
@ -42,11 +41,12 @@ public class App extends Application {
if (requestCode < 10) { if (requestCode < 10) {
RebootUtil.onRequestPermissionsResult(requestCode, grantResult); RebootUtil.onRequestPermissionsResult(requestCode, grantResult);
} else { } else {
CompileUtil.onRequestPermissionsResult(requestCode, grantResult); CompileUtil.onRequestPermissionsResult(requestCode - 10, grantResult);
} }
} }
public static int checkPermission(int code) { public static int checkPermission(int code, int from) {
int requestCode = code + from * 10;
try { try {
if (!Shizuku.isPreV11() && Shizuku.getVersion() >= 11) { if (!Shizuku.isPreV11() && Shizuku.getVersion() >= 11) {
if (Shizuku.checkSelfPermission() == PERMISSION_GRANTED) { if (Shizuku.checkSelfPermission() == PERMISSION_GRANTED) {
@ -54,7 +54,7 @@ public class App extends Application {
} else if (Shizuku.shouldShowRequestPermissionRationale()) { } else if (Shizuku.shouldShowRequestPermissionRationale()) {
return -1; return -1;
} else { } else {
Shizuku.requestPermission(code); Shizuku.requestPermission(requestCode);
return -1; return -1;
} }
} }

View File

@ -77,18 +77,10 @@ public class AppAdapter extends RecyclerView.Adapter<AppAdapter.ViewHolder> impl
List<PackageInfo> rmList = new ArrayList<>(); List<PackageInfo> rmList = new ArrayList<>();
for (PackageInfo info : fullList) { for (PackageInfo info : fullList) {
if (this instanceof ScopeAdapter) { if (this instanceof ScopeAdapter) {
boolean white = AppHelper.isWhiteListMode(); List<String> list = AppHelper.getAppList();
List<String> list = AppHelper.getAppList(white); if (!list.contains(info.packageName)) {
if (white) { rmList.add(info);
if (!list.contains(info.packageName)) { continue;
rmList.add(info);
continue;
}
} else {
if (list.contains(info.packageName)) {
rmList.add(info);
continue;
}
} }
if (info.packageName.equals(((ScopeAdapter) this).modulePackageName)) { if (info.packageName.equals(((ScopeAdapter) this).modulePackageName)) {
rmList.add(info); rmList.add(info);

View File

@ -12,7 +12,6 @@ import androidx.annotation.NonNull;
import androidx.appcompat.widget.PopupMenu; import androidx.appcompat.widget.PopupMenu;
import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentManager;
import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.Path; import java.nio.file.Path;
@ -32,9 +31,7 @@ public class AppHelper {
private static final String BASE_PATH = Constants.getBaseDir(); private static final String BASE_PATH = Constants.getBaseDir();
private static final String WHITE_LIST_PATH = "conf/whitelist/"; private static final String WHITE_LIST_PATH = "conf/whitelist/";
private static final String BLACK_LIST_PATH = "conf/blacklist/";
private static final String SCOPE_LIST_PATH = "conf/%s.conf"; private static final String SCOPE_LIST_PATH = "conf/%s.conf";
private static final String WHITE_LIST_MODE = "conf/usewhitelist";
public static List<String> forceWhiteList = new ArrayList<>(); public static List<String> forceWhiteList = new ArrayList<>();
@ -42,15 +39,10 @@ public class AppHelper {
public static void makeSurePath() { public static void makeSurePath() {
App.mkdir(WHITE_LIST_PATH); App.mkdir(WHITE_LIST_PATH);
App.mkdir(BLACK_LIST_PATH);
} }
public static boolean isWhiteListMode() { public static List<String> getAppList() {
return new File(BASE_PATH + WHITE_LIST_MODE).exists(); Path dir = Paths.get(BASE_PATH + (WHITE_LIST_PATH));
}
public static List<String> getAppList(boolean white) {
Path dir = Paths.get(BASE_PATH + (white ? WHITE_LIST_PATH : BLACK_LIST_PATH));
List<String> list = new ArrayList<>(); List<String> list = new ArrayList<>();
try { try {
Files.list(dir).forEach(path -> { Files.list(dir).forEach(path -> {
@ -59,13 +51,8 @@ public class AppHelper {
} }
}); });
forceWhiteList.forEach(s -> { forceWhiteList.forEach(s -> {
if (list.contains(s)) { if (!list.contains(s)) {
if (!white) { createAppListFile(s, true);
createAppListFile(s, false, false);
list.remove(s);
}
} else if (white) {
createAppListFile(s, true, true);
list.add(s); list.add(s);
} }
}); });
@ -76,8 +63,8 @@ public class AppHelper {
} }
} }
private static boolean createAppListFile(String packageName, boolean white, boolean add) { private static boolean createAppListFile(String packageName, boolean add) {
Path path = Paths.get(BASE_PATH + (white ? WHITE_LIST_PATH : BLACK_LIST_PATH) + packageName); Path path = Paths.get(BASE_PATH + (WHITE_LIST_PATH) + packageName);
try { try {
if (Files.exists(path)) { if (Files.exists(path)) {
if (!add) { if (!add) {
@ -94,18 +81,10 @@ public class AppHelper {
} }
static boolean setPackageAppList(String packageName, boolean add) { static boolean setPackageAppList(String packageName, boolean add) {
return setPackageAppList(packageName, isWhiteListMode(), add); if (!add && forceWhiteList.contains(packageName)) {
}
static boolean setPackageAppList(String packageName, boolean white, boolean add) {
if (add && !white && forceWhiteList.contains(packageName)) {
createAppListFile(packageName, false, false);
return false; return false;
} }
if (!add && white && forceWhiteList.contains(packageName)) { return createAppListFile(packageName, add);
return false;
}
return createAppListFile(packageName, white, add);
} }
public static void showMenu(@NonNull Context context, public static void showMenu(@NonNull Context context,

View File

@ -10,18 +10,18 @@ import io.github.lsposed.manager.R;
import io.github.lsposed.manager.ui.activity.AppListActivity; import io.github.lsposed.manager.ui.activity.AppListActivity;
public class BlackListAdapter extends AppAdapter { public class WhiteListAdapter extends AppAdapter {
private List<String> checkedList; private List<String> checkedList;
public BlackListAdapter(AppListActivity activity) { public WhiteListAdapter(AppListActivity activity) {
super(activity); super(activity);
} }
@Override @Override
public List<String> generateCheckedList() { public List<String> generateCheckedList() {
AppHelper.makeSurePath(); AppHelper.makeSurePath();
return checkedList = AppHelper.getAppList(AppHelper.isWhiteListMode()); return checkedList = AppHelper.getAppList();
} }
@Override @Override

View File

@ -20,9 +20,8 @@ import com.google.android.material.snackbar.Snackbar;
import io.github.lsposed.manager.R; import io.github.lsposed.manager.R;
import io.github.lsposed.manager.adapters.AppAdapter; import io.github.lsposed.manager.adapters.AppAdapter;
import io.github.lsposed.manager.adapters.AppHelper;
import io.github.lsposed.manager.adapters.BlackListAdapter;
import io.github.lsposed.manager.adapters.ScopeAdapter; import io.github.lsposed.manager.adapters.ScopeAdapter;
import io.github.lsposed.manager.adapters.WhiteListAdapter;
import io.github.lsposed.manager.databinding.ActivityScopeListBinding; import io.github.lsposed.manager.databinding.ActivityScopeListBinding;
import io.github.lsposed.manager.util.LinearLayoutManagerFix; import io.github.lsposed.manager.util.LinearLayoutManagerFix;
import me.zhanghai.android.fastscroll.FastScrollerBuilder; import me.zhanghai.android.fastscroll.FastScrollerBuilder;
@ -58,9 +57,9 @@ public class AppListActivity extends BaseActivity {
bar.setSubtitle(moduleName); bar.setSubtitle(moduleName);
appAdapter = new ScopeAdapter(this, modulePackageName, binding.masterSwitch); appAdapter = new ScopeAdapter(this, modulePackageName, binding.masterSwitch);
} else { } else {
bar.setTitle(AppHelper.isWhiteListMode() ? R.string.title_white_list : R.string.title_black_list); bar.setTitle(R.string.title_white_list);
binding.masterSwitch.setVisibility(View.GONE); binding.masterSwitch.setVisibility(View.GONE);
appAdapter = new BlackListAdapter(this); appAdapter = new WhiteListAdapter(this);
} }
appAdapter.setHasStableIds(true); appAdapter.setHasStableIds(true);
binding.recyclerView.setAdapter(appAdapter); binding.recyclerView.setAdapter(appAdapter);

View File

@ -10,6 +10,8 @@ import androidx.core.content.ContextCompat;
import com.bumptech.glide.Glide; import com.bumptech.glide.Glide;
import java.util.Locale;
import io.github.lsposed.manager.Constants; import io.github.lsposed.manager.Constants;
import io.github.lsposed.manager.R; import io.github.lsposed.manager.R;
import io.github.lsposed.manager.adapters.AppHelper; import io.github.lsposed.manager.adapters.AppHelper;
@ -20,8 +22,6 @@ import io.github.lsposed.manager.util.ModuleUtil;
import io.github.lsposed.manager.util.NavUtil; import io.github.lsposed.manager.util.NavUtil;
import io.github.lsposed.manager.util.light.Light; import io.github.lsposed.manager.util.light.Light;
import java.util.Locale;
public class MainActivity extends BaseActivity { public class MainActivity extends BaseActivity {
ActivityMainBinding binding; ActivityMainBinding binding;
@ -100,8 +100,8 @@ public class MainActivity extends BaseActivity {
protected void onResume() { protected void onResume() {
super.onResume(); super.onResume();
binding.modulesSummary.setText(String.format(getString(R.string.ModulesDetail), ModuleUtil.getInstance().getEnabledModules().size())); binding.modulesSummary.setText(String.format(getString(R.string.ModulesDetail), ModuleUtil.getInstance().getEnabledModules().size()));
binding.appsTitle.setText(AppHelper.isWhiteListMode() ? R.string.title_white_list : R.string.title_black_list); binding.appsTitle.setText(R.string.Apps);
int count = AppHelper.getAppList(AppHelper.isWhiteListMode()).size(); int count = AppHelper.getAppList().size();
binding.appsSummary.setText(getString(AppHelper.isWhiteListMode() ? R.string.whitelist_summary : R.string.blacklist_summary, count)); binding.appsSummary.setText(getString(R.string.whitelist_summary, count));
} }
} }

View File

@ -17,16 +17,16 @@ import androidx.preference.SwitchPreferenceCompat;
import com.takisoft.preferencex.PreferenceFragmentCompat; import com.takisoft.preferencex.PreferenceFragmentCompat;
import com.takisoft.preferencex.SimpleMenuPreference; import com.takisoft.preferencex.SimpleMenuPreference;
import io.github.lsposed.manager.Constants;
import io.github.lsposed.manager.R;
import io.github.lsposed.manager.databinding.ActivitySettingsBinding;
import io.github.lsposed.manager.ui.widget.IntegerListPreference;
import java.io.IOException; import java.io.IOException;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.Path; import java.nio.file.Path;
import java.nio.file.Paths; import java.nio.file.Paths;
import io.github.lsposed.manager.Constants;
import io.github.lsposed.manager.R;
import io.github.lsposed.manager.databinding.ActivitySettingsBinding;
import io.github.lsposed.manager.ui.widget.IntegerListPreference;
public class SettingsActivity extends BaseActivity { public class SettingsActivity extends BaseActivity {
private static final String KEY_PREFIX = SettingsActivity.class.getName() + '.'; private static final String KEY_PREFIX = SettingsActivity.class.getName() + '.';
private static final String EXTRA_SAVED_INSTANCE_STATE = KEY_PREFIX + "SAVED_INSTANCE_STATE"; private static final String EXTRA_SAVED_INSTANCE_STATE = KEY_PREFIX + "SAVED_INSTANCE_STATE";
@ -102,7 +102,6 @@ public class SettingsActivity extends BaseActivity {
public static class SettingsFragment extends PreferenceFragmentCompat { public static class SettingsFragment extends PreferenceFragmentCompat {
private static final Path enableResourcesFlag = Paths.get(Constants.getBaseDir(), "conf/enable_resources"); 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 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 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 disableModulesLogsFlag = Paths.get(Constants.getBaseDir() + "conf/disable_modules_log");
private static final Path variantFlag = Paths.get(Constants.getBaseDir()).getParent().resolve("variant"); private static final Path variantFlag = Paths.get(Constants.getBaseDir()).getParent().resolve("variant");
@ -111,12 +110,6 @@ public class SettingsActivity extends BaseActivity {
public void onCreatePreferencesFix(Bundle savedInstanceState, String rootKey) { public void onCreatePreferencesFix(Bundle savedInstanceState, String rootKey) {
addPreferencesFromResource(R.xml.prefs); addPreferencesFromResource(R.xml.prefs);
SwitchPreferenceCompat prefWhiteListMode = findPreference("white_list_switch");
if (prefWhiteListMode != null) {
prefWhiteListMode.setChecked(Files.exists(whiteListModeFlag));
prefWhiteListMode.setOnPreferenceChangeListener(new OnFlagChangeListener(whiteListModeFlag));
}
SwitchPreferenceCompat prefVerboseLogs = findPreference("disable_verbose_log"); SwitchPreferenceCompat prefVerboseLogs = findPreference("disable_verbose_log");
if (prefVerboseLogs != null) { if (prefVerboseLogs != null) {
prefVerboseLogs.setChecked(Files.exists(disableVerboseLogsFlag)); prefVerboseLogs.setChecked(Files.exists(disableVerboseLogsFlag));

View File

@ -33,6 +33,7 @@ import static android.content.pm.PackageManager.PERMISSION_GRANTED;
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
public class CompileDialogFragment extends AppCompatDialogFragment { public class CompileDialogFragment extends AppCompatDialogFragment {
// TODO:
private static final String COMPILE_COMMAND_PREFIX = "cmd package "; private static final String COMPILE_COMMAND_PREFIX = "cmd package ";
private static final String COMPILE_RESET_COMMAND = COMPILE_COMMAND_PREFIX + "compile --reset "; private static final String COMPILE_RESET_COMMAND = COMPILE_COMMAND_PREFIX + "compile --reset ";
private static final String COMPILE_SPEED_COMMAND = COMPILE_COMMAND_PREFIX + "compile -f -m speed "; private static final String COMPILE_SPEED_COMMAND = COMPILE_COMMAND_PREFIX + "compile -f -m speed ";
@ -85,7 +86,7 @@ public class CompileDialogFragment extends AppCompatDialogFragment {
} }
public void onRequestPermissionsResult(int requestCode, int grantResult) { public void onRequestPermissionsResult(int requestCode, int grantResult) {
CompileUtil.CompileType mode = CompileUtil.CompileType.values()[(requestCode - 1) / 10]; CompileUtil.CompileType mode = CompileUtil.CompileType.values()[requestCode];
if (grantResult == PERMISSION_GRANTED) { if (grantResult == PERMISSION_GRANTED) {
AsyncTask.THREAD_POOL_EXECUTOR.execute(() -> { AsyncTask.THREAD_POOL_EXECUTOR.execute(() -> {
try { try {
@ -128,8 +129,7 @@ public class CompileDialogFragment extends AppCompatDialogFragment {
if (arguments != null) { if (arguments != null) {
int type = arguments.getInt(KEY_TYPE); int type = arguments.getInt(KEY_TYPE);
appInfo = arguments.getParcelable(KEY_APP_INFO); appInfo = arguments.getParcelable(KEY_APP_INFO);
type = type * 10 + 1; int result = App.checkPermission(type, 1);
int result = App.checkPermission(type);
switch (result) { switch (result) {
case 0: case 0:
onRequestPermissionsResult(type, PERMISSION_GRANTED); onRequestPermissionsResult(type, PERMISSION_GRANTED);

View File

@ -14,12 +14,11 @@ import androidx.fragment.app.FragmentManager;
import com.google.android.material.dialog.MaterialAlertDialogBuilder; import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import com.topjohnwu.superuser.Shell; import com.topjohnwu.superuser.Shell;
import java.util.List;
import io.github.lsposed.manager.App; import io.github.lsposed.manager.App;
import io.github.lsposed.manager.R; import io.github.lsposed.manager.R;
import io.github.lsposed.manager.ui.fragment.CompileDialogFragment; import io.github.lsposed.manager.ui.fragment.CompileDialogFragment;
import java.util.List;
import rikka.shizuku.ShizukuBinderWrapper; import rikka.shizuku.ShizukuBinderWrapper;
import rikka.shizuku.ShizukuSystemProperties; import rikka.shizuku.ShizukuSystemProperties;
import rikka.shizuku.SystemServiceHelper; import rikka.shizuku.SystemServiceHelper;
@ -29,6 +28,7 @@ import static android.content.pm.PackageManager.PERMISSION_GRANTED;
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
public class CompileUtil { public class CompileUtil {
// TODO:
public enum CompileType { public enum CompileType {
RESET, RESET,
@ -58,7 +58,7 @@ public class CompileUtil {
private static Activity sActivity; private static Activity sActivity;
public static void onRequestPermissionsResult(int requestCode, int grantResult) { public static void onRequestPermissionsResult(int requestCode, int grantResult) {
CompileUtil.CompileType mode = CompileUtil.CompileType.values()[(requestCode - 1) / 10]; CompileUtil.CompileType mode = CompileUtil.CompileType.values()[requestCode];
if (mode == CompileType.DEXOPT_ALL || mode == CompileType.SPEED_ALL) { if (mode == CompileType.DEXOPT_ALL || mode == CompileType.SPEED_ALL) {
AlertDialog dialog = new MaterialAlertDialogBuilder(sActivity) AlertDialog dialog = new MaterialAlertDialogBuilder(sActivity)
.setTitle(R.string.speed_now) .setTitle(R.string.speed_now)
@ -125,8 +125,8 @@ public class CompileUtil {
public static void compileAllDexopt(Activity activity) { public static void compileAllDexopt(Activity activity) {
sActivity = activity; sActivity = activity;
int type = CompileType.DEXOPT_ALL.ordinal() * 10 + 1; int type = CompileType.DEXOPT_ALL.ordinal();
int result = App.checkPermission(type); int result = App.checkPermission(type, 1);
switch (result) { switch (result) {
case 0: case 0:
onRequestPermissionsResult(type, PERMISSION_GRANTED); onRequestPermissionsResult(type, PERMISSION_GRANTED);
@ -139,8 +139,8 @@ public class CompileUtil {
public static void compileAllSpeed(Activity activity) { public static void compileAllSpeed(Activity activity) {
sActivity = activity; sActivity = activity;
int type = CompileType.SPEED_ALL.ordinal() * 10 + 1; int type = CompileType.SPEED_ALL.ordinal();
int result = App.checkPermission(type); int result = App.checkPermission(type, 1);
switch (result) { switch (result) {
case 0: case 0:
onRequestPermissionsResult(type, PERMISSION_GRANTED); onRequestPermissionsResult(type, PERMISSION_GRANTED);

View File

@ -10,7 +10,6 @@ import com.topjohnwu.superuser.Shell;
import io.github.lsposed.manager.App; import io.github.lsposed.manager.App;
import io.github.lsposed.manager.BuildConfig; import io.github.lsposed.manager.BuildConfig;
import rikka.shizuku.ShizukuBinderWrapper; import rikka.shizuku.ShizukuBinderWrapper;
import rikka.shizuku.ShizukuSystemProperties; import rikka.shizuku.ShizukuSystemProperties;
import rikka.shizuku.SystemServiceHelper; import rikka.shizuku.SystemServiceHelper;
@ -61,7 +60,7 @@ public class RebootUtil {
public static void reboot(RebootType mode) { public static void reboot(RebootType mode) {
int result = App.checkPermission(mode.ordinal()); int result = App.checkPermission(mode.ordinal(), 0);
switch (result) { switch (result) {
case 0: case 0:
onRequestPermissionsResult(mode.ordinal(), PERMISSION_GRANTED); onRequestPermissionsResult(mode.ordinal(), PERMISSION_GRANTED);

View File

@ -132,7 +132,7 @@
<string name="compile_failed">优化失败或返回值为空</string> <string name="compile_failed">优化失败或返回值为空</string>
<string name="compile_failed_with_info">优化失败: </string> <string name="compile_failed_with_info">优化失败: </string>
<string name="hook_modules">强制添加模块</string> <string name="hook_modules">强制添加模块</string>
<string name="hook_modules_summary">强制将模块添加进白名单并移出黑名单\n关闭此选项并不会移除已勾选的应用标识</string> <string name="hook_modules_summary">强制将模块添加进白名单\n关闭此选项并不会移除已勾选的应用标识</string>
<string name="not_installed">未安装</string> <string name="not_installed">未安装</string>
<string name="support_group_telegram_channel">Telegram 频道: @LSPosed</string> <string name="support_group_telegram_channel">Telegram 频道: @LSPosed</string>
<string name="reboot_system">重启至系统</string> <string name="reboot_system">重启至系统</string>

View File

@ -130,7 +130,7 @@
<string name="app_stop">停止</string> <string name="app_stop">停止</string>
<string name="compile_failed">優化失敗或返回值為空</string> <string name="compile_failed">優化失敗或返回值為空</string>
<string name="hook_modules">強制添加模塊</string> <string name="hook_modules">強制添加模塊</string>
<string name="hook_modules_summary">強制將模塊添加進白名單並移出黑名單\n關閉此選項並不會移除已勾選的應用標識</string> <string name="hook_modules_summary">強制將模塊添加進白名單\n關閉此選項並不會移除已勾選的應用標識</string>
<string name="not_installed">未安裝</string> <string name="not_installed">未安裝</string>
<string name="support_group_telegram_channel">Telegram 頻道: @LSPosed</string> <string name="support_group_telegram_channel">Telegram 頻道: @LSPosed</string>
<string name="reboot_system">重啟至系統</string> <string name="reboot_system">重啟至系統</string>

View File

@ -130,7 +130,7 @@
<string name="app_stop">停止</string> <string name="app_stop">停止</string>
<string name="compile_failed">優化失敗或返回值為空</string> <string name="compile_failed">優化失敗或返回值為空</string>
<string name="hook_modules">強制新增模組</string> <string name="hook_modules">強制新增模組</string>
<string name="hook_modules_summary">強制將模組新增進白允許名單並移出封鎖名單\n關閉此選項並不會移除已勾選的 App 標識</string> <string name="hook_modules_summary">強制將模組新增進白允許名單\n關閉此選項並不會移除已勾選的 App 標識</string>
<string name="not_installed">未安裝</string> <string name="not_installed">未安裝</string>
<string name="support_group_telegram_channel">Telegram 頻道: @LSPosed</string> <string name="support_group_telegram_channel">Telegram 頻道: @LSPosed</string>
<string name="reboot_system">重啟至系統</string> <string name="reboot_system">重啟至系統</string>

View File

@ -143,7 +143,7 @@
<string name="compile_failed">Optimization failed or return value is empty</string> <string name="compile_failed">Optimization failed or return value is empty</string>
<string name="compile_failed_with_info">Optimization failed: </string> <string name="compile_failed_with_info">Optimization failed: </string>
<string name="hook_modules">Force hook modules</string> <string name="hook_modules">Force hook modules</string>
<string name="hook_modules_summary">Force add modules to white-list and remove from black list\nClosing this option does not remove added modules from white list</string> <string name="hook_modules_summary">Force add modules to white list\nClosing this option does not remove added modules from white list</string>
<string name="not_installed">Not installed</string> <string name="not_installed">Not installed</string>
<string name="support_group_telegram_channel">Telegram Channel: @LSPosed</string> <string name="support_group_telegram_channel">Telegram Channel: @LSPosed</string>
<string name="reboot_system">Reboot to System</string> <string name="reboot_system">Reboot to System</string>

View File

@ -76,14 +76,6 @@
android:persistent="false" android:persistent="false"
app:iconSpaceReserved="false" /> app:iconSpaceReserved="false" />
<SwitchPreferenceCompat
android:defaultValue="false"
android:key="white_list_switch"
android:summary="@string/white_list_mode_summary"
android:title="@string/white_list_mode_title"
android:persistent="false"
app:iconSpaceReserved="false" />
<SwitchPreferenceCompat <SwitchPreferenceCompat
android:defaultValue="false" android:defaultValue="false"
android:key="enable_boot_image_deopt" android:key="enable_boot_image_deopt"