diff --git a/app/src/main/java/com/fox2code/mmm/MainActivity.java b/app/src/main/java/com/fox2code/mmm/MainActivity.java index 026245f..ef2a2f8 100644 --- a/app/src/main/java/com/fox2code/mmm/MainActivity.java +++ b/app/src/main/java/com/fox2code/mmm/MainActivity.java @@ -346,6 +346,17 @@ public class MainActivity extends FoxActivity implements SwipeRefreshLayout.OnRe RepoManager.getINSTANCE().runAfterUpdate(moduleViewListBuilderOnline::appendRemoteModules); moduleViewListBuilderOnline.applyTo(moduleListOnline, moduleViewAdapterOnline); + // logic to handle updateable modules + moduleViewListBuilder.applyTo(moduleListOnline, moduleViewAdapterOnline); + // if moduleViewListBuilderOnline has the upgradeable notification, show a badge on the online repo nav item + if (MainApplication.getINSTANCE().modulesHaveUpdates) { + runOnUiThread(() -> { + final var badge = bottomNavigationView.getOrCreateBadge(1); + badge.setVisible(true); + badge.setNumber(MainApplication.getINSTANCE().updateModuleCount); + bottomNavigationView.setSelectedItemId(R.id.installed_menu_item); + }); + } Timber.i("Finished app opening state!"); } }, true); diff --git a/app/src/main/java/com/fox2code/mmm/MainApplication.java b/app/src/main/java/com/fox2code/mmm/MainApplication.java index 95a8fc4..f2720b7 100644 --- a/app/src/main/java/com/fox2code/mmm/MainApplication.java +++ b/app/src/main/java/com/fox2code/mmm/MainApplication.java @@ -90,7 +90,7 @@ public class MainApplication extends FoxApplication implements androidx.work.Con @SuppressLint("RestrictedApi") // Use FoxProcess wrapper helper. private static final boolean wrapped = !FoxProcessExt.isRootLoader(); - private static boolean SHOWCASE_MODE_TRUE = false; + private static String SHOWCASE_MODE_TRUE = null; public static boolean isOfficial = false; private static long secret; private static Locale timeFormatLocale = Resources.getSystem().getConfiguration().getLocales().get(0); @@ -101,6 +101,7 @@ public class MainApplication extends FoxApplication implements androidx.work.Con private static boolean firstBoot; private static HashMap mSharedPrefs; private static final ArrayList callers = new ArrayList<>(); + public boolean modulesHaveUpdates = false; static { Shell.setDefaultBuilder(shellBuilder = Shell.Builder.create().setFlags(Shell.FLAG_REDIRECT_STDERR).setTimeout(10).setInitializers(InstallerInitializer.class)); @@ -110,6 +111,8 @@ public class MainApplication extends FoxApplication implements androidx.work.Con } while (secret == 0); } + public int updateModuleCount = 0; + @StyleRes private int managerThemeResId = R.style.Theme_MagiskModuleManager; private FoxThemeWrapper markwonThemeContext; @@ -188,9 +191,12 @@ public class MainApplication extends FoxApplication implements androidx.work.Con } public static boolean isShowcaseMode() { - if (SHOWCASE_MODE_TRUE) return true; + if (SHOWCASE_MODE_TRUE != null) { + // convert from String to boolean + return Boolean.parseBoolean(SHOWCASE_MODE_TRUE); + } boolean showcaseMode = getPreferences("mmm").getBoolean("pref_showcase_mode", false); - SHOWCASE_MODE_TRUE = showcaseMode; + SHOWCASE_MODE_TRUE = String.valueOf(showcaseMode); return showcaseMode; } 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 6cc1c5c..d027ca2 100644 --- a/app/src/main/java/com/fox2code/mmm/module/ModuleHolder.java +++ b/app/src/main/java/com/fox2code/mmm/module/ModuleHolder.java @@ -15,8 +15,8 @@ import com.fox2code.mmm.manager.LocalModuleInfo; import com.fox2code.mmm.manager.ModuleInfo; import com.fox2code.mmm.repo.RepoModule; import com.fox2code.mmm.utils.IntentHelper; -import com.fox2code.mmm.utils.io.net.Http; import com.fox2code.mmm.utils.io.PropUtils; +import com.fox2code.mmm.utils.io.net.Http; import java.util.Comparator; import java.util.List; @@ -145,6 +145,10 @@ public final class ModuleHolder implements Comparable { } else if (this.moduleInfo.versionCode < this.moduleInfo.updateVersionCode || (this.repoModule != null && this.moduleInfo.versionCode < this.repoModule.moduleInfo.versionCode)) { + Timber.d("Module %s has update", this.moduleId); + MainApplication.getINSTANCE().modulesHaveUpdates = true; + MainApplication.getINSTANCE().updateModuleCount++; + Timber.d("modulesHaveUpdates = %s, updateModuleCount = %s", MainApplication.getINSTANCE().modulesHaveUpdates, MainApplication.getINSTANCE().updateModuleCount); return Type.UPDATABLE; } else { return Type.INSTALLED; diff --git a/app/src/main/java/com/fox2code/mmm/utils/io/net/Http.java b/app/src/main/java/com/fox2code/mmm/utils/io/net/Http.java index c63a119..7c4b047 100644 --- a/app/src/main/java/com/fox2code/mmm/utils/io/net/Http.java +++ b/app/src/main/java/com/fox2code/mmm/utils/io/net/Http.java @@ -192,6 +192,7 @@ public enum Http { // for debug builds, add a logging interceptor // this spams the logcat, so it's disabled by default and hidden behind a build config flag if (BuildConfig.DEBUG && BuildConfig.DEBUG_HTTP) { + Timber.w("HTTP logging is enabled. Performance may be impacted."); HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor(); loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY); httpclientBuilder.addInterceptor(loggingInterceptor); @@ -460,8 +461,6 @@ public enum Http { public static boolean hasConnectivity() { // Check if we have internet connection - // Attempt to contact connectivitycheck.gstatic.com/generate_204 - // If we can't, we don't have internet connection Timber.d("Checking internet connection..."); // this url is actually hosted by Cloudflare and is not dependent on Androidacy servers being up byte[] resp;