Fix manager updating modules list (#47)

This commit is contained in:
tehcneko 2021-02-02 14:13:18 +08:00 committed by GitHub
parent 97ddb596d3
commit 7aeee8fe9a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 15 additions and 81 deletions

View File

@ -457,28 +457,20 @@ public class ScopeAdapter extends RecyclerView.Adapter<ScopeAdapter.ViewHolder>
public boolean onBackPressed() { public boolean onBackPressed() {
if (masterSwitch.isChecked() && checkedList.isEmpty()) { if (masterSwitch.isChecked() && checkedList.isEmpty()) {
MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(activity);
builder.setTitle(R.string.use_recommended);
builder.setMessage(hasRecommended() ? R.string.no_scope_selected_has_recommended : R.string.no_scope_selected);
if (hasRecommended()) { if (hasRecommended()) {
new MaterialAlertDialogBuilder(activity) builder.setPositiveButton(android.R.string.ok, (dialog, which) -> checkRecommended());
.setTitle(R.string.use_recommended)
.setMessage(R.string.no_scope_selected_has_recommended)
.setPositiveButton(android.R.string.ok, (dialog, which) -> checkRecommended())
.setNegativeButton(android.R.string.cancel, (dialog, which) -> {
ModuleUtil.getInstance().setModuleEnabled(modulePackageName, false);
Toast.makeText(activity, activity.getString(R.string.module_disabled_no_selection, moduleName), Toast.LENGTH_LONG).show();
activity.finish();
})
.show();
} else { } else {
new MaterialAlertDialogBuilder(activity) builder.setPositiveButton(android.R.string.cancel, null);
.setMessage(R.string.no_scope_selected)
.setPositiveButton(android.R.string.cancel, null)
.setNegativeButton(android.R.string.ok, (dialog, which) -> {
ModuleUtil.getInstance().setModuleEnabled(modulePackageName, false);
Toast.makeText(activity, activity.getString(R.string.module_disabled_no_selection, moduleName), Toast.LENGTH_LONG).show();
activity.finish();
})
.show();
} }
builder.setNegativeButton(hasRecommended() ? android.R.string.cancel : android.R.string.ok, (dialog, which) -> {
ModuleUtil.getInstance().setModuleEnabled(modulePackageName, false);
Toast.makeText(activity, activity.getString(R.string.module_disabled_no_selection, moduleName), Toast.LENGTH_LONG).show();
activity.finish();
});
builder.show();
return false; return false;
} else { } else {
return true; return true;

View File

@ -81,7 +81,7 @@ public class ModulesActivity extends BaseActivity implements ModuleUtil.ModuleLi
}); });
adapter.addAll(showList); adapter.addAll(showList);
adapter.notifyDataSetChanged(); adapter.notifyDataSetChanged();
moduleUtil.updateModulesList(false); moduleUtil.updateModulesList();
binding.swipeRefreshLayout.setRefreshing(false); binding.swipeRefreshLayout.setRefreshing(false);
} }
}; };
@ -170,13 +170,6 @@ public class ModulesActivity extends BaseActivity implements ModuleUtil.ModuleLi
@Override @Override
public void onSingleInstalledModuleReloaded(ModuleUtil moduleUtil, String packageName, ModuleUtil.InstalledModule module) { public void onSingleInstalledModuleReloaded(ModuleUtil moduleUtil, String packageName, ModuleUtil.InstalledModule module) {
moduleUtil.updateModulesList(false);
runOnUiThread(reloadModules);
}
@Override
public void onInstalledModulesReloaded(ModuleUtil moduleUtil) {
moduleUtil.updateModulesList(false);
runOnUiThread(reloadModules); runOnUiThread(reloadModules);
} }

View File

@ -7,13 +7,9 @@ import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.PackageManager.NameNotFoundException;
import android.os.Build; import android.os.Build;
import android.util.Log; import android.util.Log;
import android.view.View;
import android.widget.Toast;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import com.google.android.material.snackbar.Snackbar;
import java.io.IOException; import java.io.IOException;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.util.Arrays; import java.util.Arrays;
@ -26,7 +22,6 @@ import java.util.concurrent.CopyOnWriteArrayList;
import io.github.lsposed.manager.App; import io.github.lsposed.manager.App;
import io.github.lsposed.manager.Constants; import io.github.lsposed.manager.Constants;
import io.github.lsposed.manager.R;
import io.github.lsposed.manager.adapters.AppHelper; import io.github.lsposed.manager.adapters.AppHelper;
public final class ModuleUtil { public final class ModuleUtil {
@ -35,11 +30,9 @@ public final class ModuleUtil {
private static ModuleUtil instance = null; private static ModuleUtil instance = null;
private final PackageManager pm; private final PackageManager pm;
private final List<ModuleListener> listeners = new CopyOnWriteArrayList<>(); private final List<ModuleListener> listeners = new CopyOnWriteArrayList<>();
//private InstalledModule framework = null;
private Map<String, InstalledModule> installedModules; private Map<String, InstalledModule> installedModules;
private final List<String> enabledModules; private final List<String> enabledModules;
private boolean isReloading = false; private boolean isReloading = false;
private Toast toast;
private final SharedPreferences prefs; private final SharedPreferences prefs;
private ModuleUtil() { private ModuleUtil() {
@ -92,9 +85,6 @@ public final class ModuleUtil {
synchronized (this) { synchronized (this) {
isReloading = false; isReloading = false;
} }
for (ModuleListener listener : listeners) {
listener.onInstalledModulesReloaded(instance);
}
} }
public InstalledModule reloadSingleModule(String packageName) { public InstalledModule reloadSingleModule(String packageName) {
@ -143,9 +133,11 @@ public final class ModuleUtil {
if (enabled) { if (enabled) {
if (!enabledModules.contains(packageName)) { if (!enabledModules.contains(packageName)) {
enabledModules.add(packageName); enabledModules.add(packageName);
updateModulesList();
} }
} else { } else {
enabledModules.remove(packageName); enabledModules.remove(packageName);
updateModulesList();
} }
} }
@ -167,58 +159,20 @@ public final class ModuleUtil {
return result; return result;
} }
public synchronized void updateModulesList(boolean showToast) { public synchronized void updateModulesList() {
updateModulesList(showToast, null);
}
public synchronized void updateModulesList(boolean showToast, View view) {
try { try {
Log.i(App.TAG, "ModuleUtil -> updating modules.list"); Log.i(App.TAG, "ModuleUtil -> updating modules.list");
int installedXposedVersion = Constants.getXposedApiVersion();
if (!prefs.getBoolean("skip_xposedminversion_check", false) && installedXposedVersion <= 0 && showToast) {
showToast(view, R.string.notinstalled);
return;
}
PrintWriter modulesList = new PrintWriter(Constants.getModulesListFile()); PrintWriter modulesList = new PrintWriter(Constants.getModulesListFile());
PrintWriter enabledModulesList = new PrintWriter(Constants.getEnabledModulesListFile()); PrintWriter enabledModulesList = new PrintWriter(Constants.getEnabledModulesListFile());
List<InstalledModule> enabledModules = getEnabledModules(); List<InstalledModule> enabledModules = getEnabledModules();
for (InstalledModule module : enabledModules) { for (InstalledModule module : enabledModules) {
if (!prefs.getBoolean("skip_xposedminversion_check", false) && (module.minVersion > installedXposedVersion || module.minVersion < MIN_MODULE_VERSION) && showToast) {
showToast(view, R.string.notinstalled);
continue;
}
modulesList.println(module.app.sourceDir); modulesList.println(module.app.sourceDir);
enabledModulesList.println(module.app.packageName); enabledModulesList.println(module.app.packageName);
} }
modulesList.close(); modulesList.close();
enabledModulesList.close(); enabledModulesList.close();
if (showToast) {
showToast(view, R.string.xposed_module_list_updated);
}
} catch (IOException e) { } catch (IOException e) {
Log.e(App.TAG, "ModuleUtil -> cannot write " + Constants.getModulesListFile(), e); Log.e(App.TAG, "ModuleUtil -> cannot write " + Constants.getModulesListFile(), e);
showToast(view, "cannot write " + Constants.getModulesListFile() + e);
}
}
private void showToast(View view, int message) {
showToast(view, App.getInstance().getString(message));
}
private void showToast(View view, String message) {
if (view != null) {
Snackbar.make(view, message, Snackbar.LENGTH_SHORT).show();
} else {
if (toast != null) {
toast.cancel();
toast = null;
}
toast = Toast.makeText(App.getInstance(), message, Toast.LENGTH_SHORT);
toast.show();
} }
} }
@ -237,11 +191,6 @@ public final class ModuleUtil {
* reloaded * reloaded
*/ */
void onSingleInstalledModuleReloaded(ModuleUtil moduleUtil, String packageName, InstalledModule module); void onSingleInstalledModuleReloaded(ModuleUtil moduleUtil, String packageName, InstalledModule module);
/**
* Called whenever all installed modules have been reloaded
*/
void onInstalledModulesReloaded(ModuleUtil moduleUtil);
} }
public class InstalledModule { public class InstalledModule {