From fe17834fa35e66358a13ca27f2d4cd5e0ae9bd26 Mon Sep 17 00:00:00 2001 From: tehcneko <7764726+tehcneko@users.noreply.github.com> Date: Sat, 15 May 2021 09:47:18 +0800 Subject: [PATCH] [app] Fix module list crashes (#578) --- .../manager/ui/activity/ModulesActivity.java | 63 ++++++++++--------- .../org/lsposed/manager/util/ModuleUtil.java | 2 +- 2 files changed, 33 insertions(+), 32 deletions(-) diff --git a/app/src/main/java/org/lsposed/manager/ui/activity/ModulesActivity.java b/app/src/main/java/org/lsposed/manager/ui/activity/ModulesActivity.java index 7c8e8dfc..d182a77c 100644 --- a/app/src/main/java/org/lsposed/manager/ui/activity/ModulesActivity.java +++ b/app/src/main/java/org/lsposed/manager/ui/activity/ModulesActivity.java @@ -92,21 +92,22 @@ public class ModulesActivity extends BaseActivity implements ModuleUtil.ModuleLi protected ActivityModuleDetailBinding binding; protected SearchView searchView; private SearchView.OnQueryTextListener mSearchListener; + private final PagerAdapter pagerAdapter = new PagerAdapter(); private final ArrayList adapters = new ArrayList<>(); - private static final Handler uninstallHandler; + private Handler uninstallHandler; private PackageManager pm; private ModuleUtil moduleUtil; private ModuleUtil.InstalledModule selectedModule; - static { + @Override + public void onCreate(Bundle savedInstanceState) { HandlerThread uninstallThread = new HandlerThread("uninstall"); uninstallThread.start(); uninstallHandler = new Handler(uninstallThread.getLooper()); - } - - @Override - public void onCreate(Bundle savedInstanceState) { + moduleUtil = ModuleUtil.getInstance(); + pm = getPackageManager(); + moduleUtil.addListener(this); super.onCreate(savedInstanceState); binding = ActivityModuleDetailBinding.inflate(getLayoutInflater()); setContentView(binding.getRoot()); @@ -117,28 +118,6 @@ public class ModulesActivity extends BaseActivity implements ModuleUtil.ModuleLi if (bar != null) { bar.setDisplayHomeAsUpEnabled(true); } - int[] users = ConfigManager.getUsers(); - if (users != null) { - adapters.clear(); - if (users.length != 1) { - binding.viewPager.setUserInputEnabled(true); - ArrayList titles = new ArrayList<>(); - for (int userId : users) { - var adapter = new ModuleAdapter(userId); - adapter.setHasStableIds(true); - adapters.add(adapter); - titles.add(getString(R.string.user_title, userId)); - } - new TabLayoutMediator(binding.tabLayout, binding.viewPager, (tab, position) -> tab.setText(titles.get(position))).attach(); - binding.tabLayout.setVisibility(View.VISIBLE); - } else { - binding.viewPager.setUserInputEnabled(false); - var adapter = new ModuleAdapter(0); - adapter.setHasStableIds(true); - adapters.add(adapter); - binding.tabLayout.setVisibility(View.GONE); - } - } binding.viewPager.setAdapter(new PagerAdapter()); binding.viewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() { @Override @@ -167,9 +146,6 @@ public class ModulesActivity extends BaseActivity implements ModuleUtil.ModuleLi return false; } }; - moduleUtil = ModuleUtil.getInstance(); - pm = getPackageManager(); - moduleUtil.addListener(this); if (ConfigManager.getXposedVersionName() == null) { Toast.makeText(this, R.string.lsposed_not_active, Toast.LENGTH_LONG).show(); finish(); @@ -195,6 +171,31 @@ public class ModulesActivity extends BaseActivity implements ModuleUtil.ModuleLi @Override protected void onResume() { super.onResume(); + int[] users = ConfigManager.getUsers(); + if (users != null) { + if (users.length != adapters.size()) { + adapters.clear(); + if (users.length != 1) { + binding.viewPager.setUserInputEnabled(true); + ArrayList titles = new ArrayList<>(); + for (int userId : users) { + var adapter = new ModuleAdapter(userId); + adapter.setHasStableIds(true); + adapters.add(adapter); + titles.add(getString(R.string.user_title, userId)); + } + new TabLayoutMediator(binding.tabLayout, binding.viewPager, (tab, position) -> tab.setText(titles.get(position))).attach(); + binding.tabLayout.setVisibility(View.VISIBLE); + } else { + binding.viewPager.setUserInputEnabled(false); + var adapter = new ModuleAdapter(0); + adapter.setHasStableIds(true); + adapters.add(adapter); + binding.tabLayout.setVisibility(View.GONE); + } + pagerAdapter.notifyDataSetChanged(); + } + } adapters.forEach(ModuleAdapter::refresh); } diff --git a/app/src/main/java/org/lsposed/manager/util/ModuleUtil.java b/app/src/main/java/org/lsposed/manager/util/ModuleUtil.java index fb4c9f96..2aa2c7d6 100644 --- a/app/src/main/java/org/lsposed/manager/util/ModuleUtil.java +++ b/app/src/main/java/org/lsposed/manager/util/ModuleUtil.java @@ -110,7 +110,7 @@ public final class ModuleUtil { throw new NameNotFoundException(); } } catch (NameNotFoundException e) { - InstalledModule old = installedModules.remove(packageName); + InstalledModule old = installedModules.remove(Pair.create(packageName, userId)); if (old != null) { for (ModuleListener listener : listeners) { listener.onSingleInstalledModuleReloaded();