From c46b50e1ef59025f9cb2812a96181633a6ae66f0 Mon Sep 17 00:00:00 2001 From: androidacy-user Date: Mon, 1 May 2023 16:29:38 -0400 Subject: [PATCH] various fixes Signed-off-by: androidacy-user --- .../java/com/fox2code/mmm/MainActivity.java | 9 +++++++- .../fox2code/mmm/module/ActionButtonType.java | 22 +++++++++++-------- .../com/fox2code/mmm/module/ModuleHolder.java | 1 + .../mmm/module/ModuleViewListBuilder.java | 15 ++++++++++++- app/src/main/res/values-v31/themes.xml | 6 +++++ app/src/main/res/values/strings.xml | 1 + app/src/main/res/values/themes.xml | 19 +++++++++++++++- 7 files changed, 61 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/com/fox2code/mmm/MainActivity.java b/app/src/main/java/com/fox2code/mmm/MainActivity.java index 1221889..4a9a900 100644 --- a/app/src/main/java/com/fox2code/mmm/MainActivity.java +++ b/app/src/main/java/com/fox2code/mmm/MainActivity.java @@ -46,6 +46,7 @@ import com.fox2code.mmm.manager.ModuleManager; import com.fox2code.mmm.module.ModuleViewAdapter; import com.fox2code.mmm.module.ModuleViewListBuilder; import com.fox2code.mmm.repo.RepoManager; +import com.fox2code.mmm.repo.RepoModule; import com.fox2code.mmm.settings.SettingsActivity; import com.fox2code.mmm.utils.ExternalHelper; import com.fox2code.mmm.utils.io.net.Http; @@ -58,6 +59,8 @@ import com.google.android.material.snackbar.Snackbar; import org.matomo.sdk.extra.TrackHelper; import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.List; import java.util.Objects; import io.realm.Realm; @@ -84,6 +87,8 @@ public class MainActivity extends FoxActivity implements SwipeRefreshLayout.OnRe private CardView searchCard; private SearchView searchView; private boolean initMode; + public static List localModuleInfoList = new ArrayList<>(); + public static List onlineModuleInfoList = new ArrayList<>(); public MainActivity() { this.moduleViewListBuilder = new ModuleViewListBuilder(this); @@ -365,6 +370,8 @@ public class MainActivity extends FoxActivity implements SwipeRefreshLayout.OnRe } if (BuildConfig.DEBUG) Timber.i("Apply"); RepoManager.getINSTANCE().runAfterUpdate(moduleViewListBuilderOnline::appendRemoteModules); + moduleViewListBuilder.applyTo(moduleList, moduleViewAdapter); + moduleViewListBuilder.applyTo(moduleListOnline, moduleViewAdapterOnline); moduleViewListBuilderOnline.applyTo(moduleListOnline, moduleViewAdapterOnline); // if moduleViewListBuilderOnline has the upgradeable notification, show a badge on the online repo nav item if (MainApplication.getINSTANCE().modulesHaveUpdates) { @@ -589,8 +596,8 @@ public class MainActivity extends FoxActivity implements SwipeRefreshLayout.OnRe NotificationType.NEED_CAPTCHA_ANDROIDACY.autoAdd(moduleViewListBuilder); RepoManager.getINSTANCE().updateEnabledStates(); RepoManager.getINSTANCE().runAfterUpdate(moduleViewListBuilderOnline::appendRemoteModules); - this.moduleViewListBuilderOnline.applyTo(moduleListOnline, moduleViewAdapterOnline); this.moduleViewListBuilder.applyTo(moduleList, moduleViewAdapter); + this.moduleViewListBuilderOnline.applyTo(moduleListOnline, moduleViewAdapterOnline); }, "Repo update thread").start(); } diff --git a/app/src/main/java/com/fox2code/mmm/module/ActionButtonType.java b/app/src/main/java/com/fox2code/mmm/module/ActionButtonType.java index 74968b4..8e6da70 100644 --- a/app/src/main/java/com/fox2code/mmm/module/ActionButtonType.java +++ b/app/src/main/java/com/fox2code/mmm/module/ActionButtonType.java @@ -27,6 +27,8 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder; import org.matomo.sdk.extra.TrackHelper; +import java.util.Objects; + import io.noties.markwon.Markwon; import timber.log.Timber; @@ -66,20 +68,24 @@ public enum ActionButtonType { }, UPDATE_INSTALL() { @Override public void update(Chip button, ModuleHolder moduleHolder) { - int icon = moduleHolder.hasUpdate() ? R.drawable.ic_baseline_update_24 : R.drawable.ic_baseline_system_update_24; - button.setChipIcon(button.getContext().getDrawable(icon)); + int icon; if (moduleHolder.hasUpdate()) { + icon = R.drawable.ic_baseline_update_24; button.setText(R.string.update); + } else if (moduleHolder.moduleInfo != null) { + icon = R.drawable.ic_baseline_refresh_24; + button.setText(R.string.reinstall); } else { + icon = R.drawable.ic_baseline_system_update_24; button.setText(R.string.install); } + button.setChipIcon(button.getContext().getDrawable(icon)); } @Override public void doAction(Chip button, ModuleHolder moduleHolder) { ModuleInfo moduleInfo = moduleHolder.getMainModuleInfo(); - if (moduleInfo == null) - return; + if (moduleInfo == null) return; String name; if (moduleHolder.moduleInfo != null) { @@ -89,8 +95,7 @@ public enum ActionButtonType { } TrackHelper.track().event("view_update_install", name).with(MainApplication.getINSTANCE().getTracker()); String updateZipUrl = moduleHolder.getUpdateZipUrl(); - if (updateZipUrl == null) - return; + if (updateZipUrl == null) return; // Androidacy manage the selection between download and install if (AndroidacyUtil.isAndroidacyLink(updateZipUrl)) { IntentHelper.openUrlAndroidacy(button.getContext(), updateZipUrl, true, moduleInfo.name, moduleInfo.config); @@ -132,7 +137,7 @@ public enum ActionButtonType { } } if (markwon != null) { - TextView messageView = alertDialog.getWindow().findViewById(android.R.id.message); + TextView messageView = Objects.requireNonNull(alertDialog.getWindow()).findViewById(android.R.id.message); markwon.setParsedMarkdown(messageView, (Spanned) desc); } } @@ -197,8 +202,7 @@ public enum ActionButtonType { @Override public void doAction(Chip button, ModuleHolder moduleHolder) { String config = moduleHolder.getMainModuleConfig(); - if (config == null) - return; + if (config == null) return; String name; if (moduleHolder.moduleInfo != null) { diff --git a/app/src/main/java/com/fox2code/mmm/module/ModuleHolder.java b/app/src/main/java/com/fox2code/mmm/module/ModuleHolder.java index da9541d..3988631 100644 --- a/app/src/main/java/com/fox2code/mmm/module/ModuleHolder.java +++ b/app/src/main/java/com/fox2code/mmm/module/ModuleHolder.java @@ -32,6 +32,7 @@ public final class ModuleHolder implements Comparable { public final Type separator; public int footerPx; public View.OnClickListener onClickListener; + public LocalModuleInfo moduleInfo; public RepoModule repoModule; public int filterLevel; diff --git a/app/src/main/java/com/fox2code/mmm/module/ModuleViewListBuilder.java b/app/src/main/java/com/fox2code/mmm/module/ModuleViewListBuilder.java index d87d322..90c8fde 100644 --- a/app/src/main/java/com/fox2code/mmm/module/ModuleViewListBuilder.java +++ b/app/src/main/java/com/fox2code/mmm/module/ModuleViewListBuilder.java @@ -8,6 +8,7 @@ import androidx.recyclerview.widget.RecyclerView; import com.fox2code.mmm.AppUpdateManager; import com.fox2code.mmm.BuildConfig; +import com.fox2code.mmm.MainActivity; import com.fox2code.mmm.MainApplication; import com.fox2code.mmm.NotificationType; import com.fox2code.mmm.installer.InstallerInitializer; @@ -84,6 +85,8 @@ public class ModuleViewListBuilder { moduleManager.runAfterScan(() -> { Timber.i("A1: %s", moduleManager.getModules().size()); for (LocalModuleInfo moduleInfo : moduleManager.getModules().values()) { + // add the local module to the list in MainActivity + MainActivity.localModuleInfoList.add(moduleInfo); ModuleHolder moduleHolder = this.mappedModuleHolders.get(moduleInfo.id); if (moduleHolder == null) { this.mappedModuleHolders.put(moduleInfo.id, @@ -109,6 +112,8 @@ public class ModuleViewListBuilder { Timber.i("A2: %s", repoManager.getModules().size()); boolean no32bitSupport = Build.SUPPORTED_32_BIT_ABIS.length == 0; for (RepoModule repoModule : repoManager.getModules().values()) { + // add the remote module to the list in MainActivity + MainActivity.onlineModuleInfoList.add(repoModule); // if repoData is null, something is wrong if (repoModule.repoData == null) { Timber.w("RepoData is null for module %s", repoModule.id); @@ -138,6 +143,14 @@ public class ModuleViewListBuilder { moduleHolder = new ModuleHolder(repoModule.id)); } moduleHolder.repoModule = repoModule; + // check if local module is installed + // iterate over MainActivity.localModuleInfoList until we hit the module with the same id + for (LocalModuleInfo localModuleInfo : MainActivity.localModuleInfoList) { + if (localModuleInfo.id.equals(repoModule.id)) { + moduleHolder.moduleInfo = localModuleInfo; + break; + } + } } }); } @@ -174,7 +187,7 @@ public class ModuleViewListBuilder { return false; } - public void applyTo(final RecyclerView moduleList,final ModuleViewAdapter moduleViewAdapter) { + public void applyTo(final RecyclerView moduleList, final ModuleViewAdapter moduleViewAdapter) { if (this.updating) return; this.updating = true; ModuleManager.getINSTANCE().afterScan(); diff --git a/app/src/main/res/values-v31/themes.xml b/app/src/main/res/values-v31/themes.xml index f88236b..e84d08f 100644 --- a/app/src/main/res/values-v31/themes.xml +++ b/app/src/main/res/values-v31/themes.xml @@ -15,6 +15,8 @@ false true @style/Theme.Design.NoActionBar + @dimen/card_corner_radius + @style/Theme.MagiskModuleManager.AlertDialog @@ -63,6 +67,8 @@ false true @style/Theme.Design.NoActionBar + @dimen/card_corner_radius + @style/Theme.MagiskModuleManager.AlertDialog @@ -118,7 +123,6 @@ @color/orange_700 @color/orange_500 @color/orange_700 - @color/orange_200 @color/black @color/white @@ -133,6 +137,8 @@ true false true + @dimen/card_corner_radius + @style/Theme.MagiskModuleManager.AlertDialog \ No newline at end of file