From 125ef3589f338b0d858c9f7d1fc5c96eea25cb41 Mon Sep 17 00:00:00 2001 From: tehcneko <7764726+tehcneko@users.noreply.github.com> Date: Fri, 29 Jan 2021 18:42:19 +0800 Subject: [PATCH] Ask to select scope apps when enabling modules --- .../lsposed/manager/adapters/AppAdapter.java | 2 +- .../lsposed/manager/adapters/AppHelper.java | 2 +- .../manager/adapters/ScopeAdapter.java | 7 +++++-- .../manager/ui/activity/AppListActivity.java | 20 ++++++++++++++++--- .../manager/ui/activity/ModulesActivity.java | 16 ++++++++++++++- .../manager/ui/widget/MasterSwitch.java | 2 +- .../lsposed/manager/util/ModuleUtil.java | 4 +++- ...y_scope_list.xml => activity_app_list.xml} | 0 app/src/main/res/values-zh-rCN/strings.xml | 2 ++ app/src/main/res/values/strings.xml | 2 ++ 10 files changed, 47 insertions(+), 10 deletions(-) rename app/src/main/res/layout/{activity_scope_list.xml => activity_app_list.xml} (100%) diff --git a/app/src/main/java/io/github/lsposed/manager/adapters/AppAdapter.java b/app/src/main/java/io/github/lsposed/manager/adapters/AppAdapter.java index fb2d0b09..8806e0ba 100644 --- a/app/src/main/java/io/github/lsposed/manager/adapters/AppAdapter.java +++ b/app/src/main/java/io/github/lsposed/manager/adapters/AppAdapter.java @@ -48,7 +48,7 @@ public class AppAdapter extends RecyclerView.Adapter impl private final ApplicationInfo.DisplayNameComparator displayNameComparator; protected List fullList, showList; private final DateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()); - private List checkedList; + public List checkedList; private final PackageManager pm; private final ApplicationFilter filter; private Comparator cmp; diff --git a/app/src/main/java/io/github/lsposed/manager/adapters/AppHelper.java b/app/src/main/java/io/github/lsposed/manager/adapters/AppHelper.java index 137e89f9..b14b0490 100644 --- a/app/src/main/java/io/github/lsposed/manager/adapters/AppHelper.java +++ b/app/src/main/java/io/github/lsposed/manager/adapters/AppHelper.java @@ -145,7 +145,7 @@ public class AppHelper { return s; } - static List getScopeList(String modulePackageName) { + public static List getScopeList(String modulePackageName) { if (scopeList.containsKey(modulePackageName)) { return scopeList.get(modulePackageName); } diff --git a/app/src/main/java/io/github/lsposed/manager/adapters/ScopeAdapter.java b/app/src/main/java/io/github/lsposed/manager/adapters/ScopeAdapter.java index ccb0e6b6..1888af19 100644 --- a/app/src/main/java/io/github/lsposed/manager/adapters/ScopeAdapter.java +++ b/app/src/main/java/io/github/lsposed/manager/adapters/ScopeAdapter.java @@ -1,6 +1,7 @@ package io.github.lsposed.manager.adapters; import android.content.pm.PackageInfo; +import android.util.Log; import android.widget.CompoundButton; import com.google.android.material.snackbar.Snackbar; @@ -11,6 +12,7 @@ import java.util.List; import io.github.lsposed.manager.R; import io.github.lsposed.manager.ui.activity.AppListActivity; import io.github.lsposed.manager.ui.widget.MasterSwitch; +import io.github.lsposed.manager.util.ModuleUtil; public class ScopeAdapter extends AppAdapter { @@ -26,8 +28,9 @@ public class ScopeAdapter extends AppAdapter { masterSwitch.setOnCheckedChangedListener(new MasterSwitch.OnCheckedChangeListener() { @Override public void onCheckedChanged(boolean checked) { + Log.e("Test", checked + ""); enabled = checked; - AppHelper.saveScopeList(modulePackageName, enabled ? checkedList : new ArrayList<>()); + ModuleUtil.getInstance().setModuleEnabled(modulePackageName, enabled); notifyDataSetChanged(); } }); @@ -43,7 +46,7 @@ public class ScopeAdapter extends AppAdapter { } scopeList.retainAll(list); checkedList = scopeList; - enabled = checkedList.size() != 0; + enabled = ModuleUtil.getInstance().isModuleEnabled(modulePackageName); activity.runOnUiThread(() -> masterSwitch.setChecked(enabled)); return checkedList; } diff --git a/app/src/main/java/io/github/lsposed/manager/ui/activity/AppListActivity.java b/app/src/main/java/io/github/lsposed/manager/ui/activity/AppListActivity.java index 28a2eb5e..57c5e20a 100644 --- a/app/src/main/java/io/github/lsposed/manager/ui/activity/AppListActivity.java +++ b/app/src/main/java/io/github/lsposed/manager/ui/activity/AppListActivity.java @@ -16,6 +16,7 @@ import androidx.appcompat.app.ActionBar; import androidx.appcompat.widget.SearchView; import androidx.recyclerview.widget.DividerItemDecoration; +import com.google.android.material.dialog.MaterialAlertDialogBuilder; import com.google.android.material.snackbar.Snackbar; import io.github.lsposed.manager.R; @@ -24,6 +25,7 @@ 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.util.LinearLayoutManagerFix; +import io.github.lsposed.manager.util.ModuleUtil; import me.zhanghai.android.fastscroll.FastScrollerBuilder; public class AppListActivity extends BaseActivity { @@ -39,16 +41,17 @@ public class AppListActivity extends BaseActivity { } }; private final Handler handler = new Handler(Looper.getMainLooper()); + private String modulePackageName; @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); - String modulePackageName = getIntent().getStringExtra("modulePackageName"); + modulePackageName = getIntent().getStringExtra("modulePackageName"); String moduleName = getIntent().getStringExtra("moduleName"); binding = ActivityScopeListBinding.inflate(getLayoutInflater()); setContentView(binding.getRoot()); setSupportActionBar(binding.toolbar); - binding.toolbar.setNavigationOnClickListener(view -> finish()); + binding.toolbar.setNavigationOnClickListener(view -> onBackPressed()); ActionBar bar = getSupportActionBar(); assert bar != null; bar.setDisplayHomeAsUpEnabled(true); @@ -117,7 +120,18 @@ public class AppListActivity extends BaseActivity { @Override public void onBackPressed() { if (searchView.isIconified()) { - super.onBackPressed(); + if (binding.masterSwitch.isChecked() && appAdapter.checkedList.isEmpty()) { + new MaterialAlertDialogBuilder(this) + .setMessage(R.string.no_scope_selected) + .setPositiveButton(android.R.string.cancel, null) + .setNegativeButton(android.R.string.ok, (dialog, which) -> { + ModuleUtil.getInstance().setModuleEnabled(modulePackageName, false); + super.onBackPressed(); + }) + .show(); + } else { + super.onBackPressed(); + } } else { searchView.setIconified(true); } diff --git a/app/src/main/java/io/github/lsposed/manager/ui/activity/ModulesActivity.java b/app/src/main/java/io/github/lsposed/manager/ui/activity/ModulesActivity.java index 7687a175..81d8f38b 100644 --- a/app/src/main/java/io/github/lsposed/manager/ui/activity/ModulesActivity.java +++ b/app/src/main/java/io/github/lsposed/manager/ui/activity/ModulesActivity.java @@ -48,6 +48,7 @@ import io.github.lsposed.manager.BuildConfig; import io.github.lsposed.manager.Constants; import io.github.lsposed.manager.R; import io.github.lsposed.manager.adapters.AppAdapter; +import io.github.lsposed.manager.adapters.AppHelper; import io.github.lsposed.manager.databinding.ActivityModulesBinding; import io.github.lsposed.manager.util.GlideApp; import io.github.lsposed.manager.util.LinearLayoutManagerFix; @@ -205,7 +206,6 @@ public class ModulesActivity extends BaseActivity implements ModuleUtil.ModuleLi } fastScrollerBuilder.build(); binding.swipeRefreshLayout.setOnRefreshListener(reloadModules::run); - reloadModules.run(); mSearchListener = new SearchView.OnQueryTextListener() { @Override public boolean onQueryTextSubmit(String query) { @@ -222,6 +222,12 @@ public class ModulesActivity extends BaseActivity implements ModuleUtil.ModuleLi } + @Override + protected void onResume() { + super.onResume(); + reloadModules.run(); + } + @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_modules, menu); @@ -521,6 +527,14 @@ public class ModulesActivity extends BaseActivity implements ModuleUtil.ModuleLi String packageName = item.packageName; boolean changed = moduleUtil.isModuleEnabled(packageName) ^ isChecked; if (changed) { + if (isChecked && AppHelper.getScopeList(packageName).isEmpty()) { + moduleUtil.setModuleEnabled(packageName, true); + Intent intent = new Intent(ModulesActivity.this, AppListActivity.class); + intent.putExtra("modulePackageName", packageName); + intent.putExtra("moduleName", item.getAppName()); + startActivity(intent); + return; + } moduleUtil.setModuleEnabled(packageName, isChecked); moduleUtil.updateModulesList(true, binding.snackbar); } diff --git a/app/src/main/java/io/github/lsposed/manager/ui/widget/MasterSwitch.java b/app/src/main/java/io/github/lsposed/manager/ui/widget/MasterSwitch.java index b1bad361..e838341f 100644 --- a/app/src/main/java/io/github/lsposed/manager/ui/widget/MasterSwitch.java +++ b/app/src/main/java/io/github/lsposed/manager/ui/widget/MasterSwitch.java @@ -55,7 +55,7 @@ public class MasterSwitch extends FrameLayout implements View.OnClickListener, C setBackground(drawable); TextView masterTitle = findViewById(android.R.id.title); - masterTitle.setText(R.string.enable_scope); + masterTitle.setText(R.string.enable_module); switchCompat = findViewById(R.id.switchWidget); setOnClickListener(this); diff --git a/app/src/main/java/io/github/lsposed/manager/util/ModuleUtil.java b/app/src/main/java/io/github/lsposed/manager/util/ModuleUtil.java index ae34ec8a..72ea98b8 100644 --- a/app/src/main/java/io/github/lsposed/manager/util/ModuleUtil.java +++ b/app/src/main/java/io/github/lsposed/manager/util/ModuleUtil.java @@ -144,7 +144,9 @@ public final class ModuleUtil { public void setModuleEnabled(String packageName, boolean enabled) { if (enabled) { - enabledModules.add(packageName); + if (!enabledModules.contains(packageName)) { + enabledModules.add(packageName); + } } else { enabledModules.remove(packageName); } diff --git a/app/src/main/res/layout/activity_scope_list.xml b/app/src/main/res/layout/activity_app_list.xml similarity index 100% rename from app/src/main/res/layout/activity_scope_list.xml rename to app/src/main/res/layout/activity_app_list.xml diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 65883b8b..5052151b 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -169,4 +169,6 @@ 排序… %d 个应用位于黑名单中 %d 个应用位于白名单中 + 启用模块 + 未选择任何应用。继续? diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a23686e4..a3bab0a7 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -177,4 +177,6 @@ Sorting… %d apps blacklisted %d apps whitelisted + Enable module + You did not select any app. Continue?