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() {
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()) {
new MaterialAlertDialogBuilder(activity)
.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();
builder.setPositiveButton(android.R.string.ok, (dialog, which) -> checkRecommended());
} else {
new MaterialAlertDialogBuilder(activity)
.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.setPositiveButton(android.R.string.cancel, null);
}
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;
} else {
return true;

View File

@ -81,7 +81,7 @@ public class ModulesActivity extends BaseActivity implements ModuleUtil.ModuleLi
});
adapter.addAll(showList);
adapter.notifyDataSetChanged();
moduleUtil.updateModulesList(false);
moduleUtil.updateModulesList();
binding.swipeRefreshLayout.setRefreshing(false);
}
};
@ -170,13 +170,6 @@ public class ModulesActivity extends BaseActivity implements ModuleUtil.ModuleLi
@Override
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);
}

View File

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