From 7effbaac2f92887c22625eb67a591e6337a8194a Mon Sep 17 00:00:00 2001 From: androidacy-user Date: Sun, 16 Apr 2023 21:35:40 -0400 Subject: [PATCH] (fix) try to fix update showing in UI Signed-off-by: androidacy-user --- app/build.gradle | 4 +- app/src/main/AndroidManifest.xml | 5 - .../java/com/fox2code/mmm/MainActivity.java | 16 +- .../com/fox2code/mmm/MainApplication.java | 7 + .../mmm/androidacy/AndroidacyUtil.java | 22 ++- .../background/BackgroundUpdateChecker.java | 117 +++++++++++++- .../BackgroundUpdateCheckerService.java | 151 ------------------ .../mmm/installer/InstallerActivity.java | 3 +- .../com/fox2code/mmm/module/ModuleHolder.java | 5 +- build.gradle | 2 +- 10 files changed, 149 insertions(+), 183 deletions(-) delete mode 100644 app/src/main/java/com/fox2code/mmm/background/BackgroundUpdateCheckerService.java diff --git a/app/build.gradle b/app/build.gradle index 10a9dea..2e5b34c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -321,7 +321,7 @@ dependencies { implementation 'com.github.KieronQuinn:MonetCompat:0.4.1' implementation 'com.github.Fox2Code:FoxCompat:0.2.0' // Update the version code in the root build.gradle - implementation 'com.mikepenz:aboutlibraries:10.6.1' + implementation 'com.mikepenz:aboutlibraries:10.6.2' // Utils implementation 'androidx.work:work-runtime:2.8.1' @@ -402,7 +402,7 @@ android { jvmTarget = JavaVersion.VERSION_17 } //noinspection GrDeprecatedAPIUsage - buildToolsVersion '34.0.0 rc2' + buildToolsVersion '34.0.0 rc3' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 02b0b2d..81f46c9 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -191,11 +191,6 @@ android:resource="@xml/shared_file_paths" /> - - diff --git a/app/src/main/java/com/fox2code/mmm/MainActivity.java b/app/src/main/java/com/fox2code/mmm/MainActivity.java index ef2a2f8..f36c1c3 100644 --- a/app/src/main/java/com/fox2code/mmm/MainActivity.java +++ b/app/src/main/java/com/fox2code/mmm/MainActivity.java @@ -15,6 +15,8 @@ import android.graphics.Color; import android.net.Uri; import android.os.Build; import android.os.Bundle; +import android.os.Handler; +import android.os.Looper; import android.provider.Settings; import android.util.TypedValue; import android.view.View; @@ -221,6 +223,8 @@ public class MainActivity extends FoxActivity implements SwipeRefreshLayout.OnRe rootContainer.setLayoutParams(params); rootContainer.setY(0F); }); + // reset update module and update module Count in mainapplication + MainApplication.getINSTANCE().resetUpdateModule(); InstallerInitializer.tryGetMagiskPathAsync(new InstallerInitializer.Callback() { @Override public void onPathReceived(String path) { @@ -344,17 +348,18 @@ public class MainActivity extends FoxActivity implements SwipeRefreshLayout.OnRe }); if (BuildConfig.DEBUG) Timber.i("Apply"); RepoManager.getINSTANCE().runAfterUpdate(moduleViewListBuilderOnline::appendRemoteModules); - - moduleViewListBuilderOnline.applyTo(moduleListOnline, moduleViewAdapterOnline); // logic to handle updateable modules 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) { - runOnUiThread(() -> { - final var badge = bottomNavigationView.getOrCreateBadge(1); + Timber.i("Applying badge"); + new Handler(Looper.getMainLooper()).post(() -> { + final var badge = bottomNavigationView.getOrCreateBadge(R.id.online_menu_item); badge.setVisible(true); badge.setNumber(MainApplication.getINSTANCE().updateModuleCount); - bottomNavigationView.setSelectedItemId(R.id.installed_menu_item); + badge.applyTheme(MainApplication.getInitialApplication().getTheme()); + Timber.i("Badge applied"); }); } Timber.i("Finished app opening state!"); @@ -546,6 +551,7 @@ public class MainActivity extends FoxActivity implements SwipeRefreshLayout.OnRe RepoManager.getINSTANCE().updateEnabledStates(); RepoManager.getINSTANCE().runAfterUpdate(moduleViewListBuilderOnline::appendRemoteModules); this.moduleViewListBuilderOnline.applyTo(moduleListOnline, moduleViewAdapterOnline); + this.moduleViewListBuilder.applyTo(moduleList, moduleViewAdapter); }, "Repo update thread").start(); } diff --git a/app/src/main/java/com/fox2code/mmm/MainApplication.java b/app/src/main/java/com/fox2code/mmm/MainApplication.java index f2720b7..c3bcb44 100644 --- a/app/src/main/java/com/fox2code/mmm/MainApplication.java +++ b/app/src/main/java/com/fox2code/mmm/MainApplication.java @@ -112,6 +112,7 @@ public class MainApplication extends FoxApplication implements androidx.work.Con } public int updateModuleCount = 0; + public List updateModules = new ArrayList<>(); @StyleRes private int managerThemeResId = R.style.Theme_MagiskModuleManager; @@ -699,6 +700,12 @@ public class MainApplication extends FoxApplication implements androidx.work.Con return decryptedKey; // pass to a realm configuration via encryptionKey() } + public void resetUpdateModule() { + modulesHaveUpdates = false; + updateModuleCount = 0; + updateModules = new ArrayList<>(); + } + private static class ReleaseTree extends Timber.Tree { @Override protected void log(int priority, String tag, @NonNull String message, Throwable t) { diff --git a/app/src/main/java/com/fox2code/mmm/androidacy/AndroidacyUtil.java b/app/src/main/java/com/fox2code/mmm/androidacy/AndroidacyUtil.java index 99d6dd8..97fe73a 100644 --- a/app/src/main/java/com/fox2code/mmm/androidacy/AndroidacyUtil.java +++ b/app/src/main/java/com/fox2code/mmm/androidacy/AndroidacyUtil.java @@ -36,18 +36,16 @@ public enum AndroidacyUtil { // Avoid logging token public static String hideToken(@NonNull String url) { - int i = url.lastIndexOf("token="); - if (i == -1) - return url; - int i2 = url.indexOf('&', i); - int i3 = url.indexOf(' ', i); - if (i3 != -1 && i3 < i2) - i2 = i3; - if (i2 == -1) { - return url.substring(0, i + 6) + ""; - } else { - return url.substring(0, i + 6) + "" + url.substring(i2); - } + // for token, device_id, and client_id, replace with by using replaceAll to match until the next non-alphanumeric character or end + // Also, URL decode + url = Uri.decode(url); + url = url + "&"; + url = url.replaceAll("token=[^&]*", "token="); + url = url.replaceAll("device_id=[^&]*", "device_id="); + url = url.replaceAll("client_id=[^&]*", "client_id="); + // remove last & added at the end + url = url.substring(0, url.length() - 1); + return url; } public static String getModuleId(String moduleUrl) { diff --git a/app/src/main/java/com/fox2code/mmm/background/BackgroundUpdateChecker.java b/app/src/main/java/com/fox2code/mmm/background/BackgroundUpdateChecker.java index 86d9585..b97711c 100644 --- a/app/src/main/java/com/fox2code/mmm/background/BackgroundUpdateChecker.java +++ b/app/src/main/java/com/fox2code/mmm/background/BackgroundUpdateChecker.java @@ -1,6 +1,7 @@ package com.fox2code.mmm.background; import android.Manifest; +import android.annotation.SuppressLint; import android.app.NotificationChannelGroup; import android.app.NotificationManager; import android.app.PendingIntent; @@ -24,9 +25,16 @@ import androidx.work.WorkManager; import androidx.work.Worker; import androidx.work.WorkerParameters; +import com.fox2code.mmm.AppUpdateManager; import com.fox2code.mmm.MainActivity; import com.fox2code.mmm.MainApplication; import com.fox2code.mmm.R; +import com.fox2code.mmm.UpdateActivity; +import com.fox2code.mmm.manager.LocalModuleInfo; +import com.fox2code.mmm.manager.ModuleManager; +import com.fox2code.mmm.repo.RepoManager; +import com.fox2code.mmm.repo.RepoModule; +import com.fox2code.mmm.utils.io.PropUtils; import java.util.HashMap; import java.util.Map; @@ -40,7 +48,39 @@ public class BackgroundUpdateChecker extends Worker { public static final String NOTIFICATION_CHANNEL_ID = "background_update"; public static final int NOTIFICATION_ID = 1; public static final String NOTFIICATION_GROUP = "updates"; - static final Object lock = new Object(); // Avoid concurrency issues + static final Object lock = new Object(); // Avoid concurrency issuespublic static final String NOTIFICATION_CHANNEL_ID = "background_update"; + public static final String NOTIFICATION_CHANNEL_ID_APP = "background_update_app"; + private static final int NOTIFICATION_ID_ONGOING = 2; + private static final String NOTIFICATION_CHANNEL_ID_ONGOING = "mmm_background_update"; + private static final int NOTIFICATION_ID_APP = 3; + + @SuppressLint("RestrictedApi") + private static void postNotificationForAppUpdate(Context context) { + // create the notification channel if not already created + NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context); + notificationManager.createNotificationChannel(new NotificationChannelCompat.Builder(NOTIFICATION_CHANNEL_ID_APP, NotificationManagerCompat.IMPORTANCE_HIGH).setName(context.getString(R.string.notification_channel_category_app_update)).setDescription(context.getString(R.string.notification_channel_category_app_update_description)).setGroup(NOTFIICATION_GROUP).build()); + NotificationCompat.Builder builder = new NotificationCompat.Builder(context, NOTIFICATION_CHANNEL_ID_APP); + builder.setSmallIcon(R.drawable.baseline_system_update_24); + builder.setPriority(NotificationCompat.PRIORITY_HIGH); + builder.setCategory(NotificationCompat.CATEGORY_RECOMMENDATION); + builder.setShowWhen(false); + builder.setOnlyAlertOnce(true); + builder.setOngoing(false); + builder.setAutoCancel(true); + builder.setGroup(NOTFIICATION_GROUP); + // open app on click + Intent intent = new Intent(context, UpdateActivity.class); + // set action to ACTIONS.DOWNLOAD + intent.setAction(String.valueOf(UpdateActivity.ACTIONS.DOWNLOAD)); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); + builder.setContentIntent(android.app.PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_IMMUTABLE)); + // set summary to Found X + builder.setContentTitle(context.getString(R.string.notification_channel_background_update_app)); + builder.setContentText(context.getString(R.string.notification_channel_background_update_app_description)); + if (ContextCompat.checkSelfPermission(MainApplication.getINSTANCE(), Manifest.permission.POST_NOTIFICATIONS) == PackageManager.PERMISSION_GRANTED) { + notificationManager.notify(NOTIFICATION_ID_APP, builder.build()); + } + } public BackgroundUpdateChecker(@NonNull Context context, @NonNull WorkerParameters workerParams) { super(context, workerParams); @@ -65,10 +105,77 @@ public class BackgroundUpdateChecker extends Worker { return; } } - // start foreground service - Intent intent = new Intent(context, BackgroundUpdateCheckerService.class); - intent.setAction(BackgroundUpdateCheckerService.ACTION_START_FOREGROUND_SERVICE); - context.startService(intent); + synchronized (lock) { + // post checking notification if notifications are enabled + if (ContextCompat.checkSelfPermission(MainApplication.getINSTANCE(), Manifest.permission.POST_NOTIFICATIONS) == PackageManager.PERMISSION_GRANTED) { + NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context); + notificationManager.createNotificationChannel(new NotificationChannelCompat.Builder(NOTIFICATION_CHANNEL_ID_ONGOING, NotificationManagerCompat.IMPORTANCE_MIN).setName(context.getString(R.string.notification_channel_category_background_update)).setDescription(context.getString(R.string.notification_channel_category_background_update_description)).setGroup(NOTFIICATION_GROUP).build()); + NotificationCompat.Builder builder = new NotificationCompat.Builder(context, NOTIFICATION_CHANNEL_ID); + builder.setSmallIcon(R.drawable.ic_baseline_update_24); + builder.setPriority(NotificationCompat.PRIORITY_MIN); + builder.setCategory(NotificationCompat.CATEGORY_SERVICE); + builder.setShowWhen(false); + builder.setOnlyAlertOnce(true); + builder.setOngoing(true); + builder.setAutoCancel(false); + builder.setGroup("update_bg"); + builder.setContentTitle(context.getString(R.string.notification_channel_background_update)); + builder.setContentText(context.getString(R.string.notification_channel_background_update_description)); + notificationManager.notify(NOTIFICATION_ID_ONGOING, builder.build()); + } else { + Timber.d("Not posting notification because of missing permission"); + } + ModuleManager.getINSTANCE().scanAsync(); + RepoManager.getINSTANCE().update(null); + ModuleManager.getINSTANCE().runAfterScan(() -> { + int moduleUpdateCount = 0; + HashMap repoModules = RepoManager.getINSTANCE().getModules(); + // hashmap of updateable modules names + HashMap updateableModules = new HashMap<>(); + for (LocalModuleInfo localModuleInfo : ModuleManager.getINSTANCE().getModules().values()) { + if ("twrp-keep".equals(localModuleInfo.id)) continue; + // exclude all modules with id's stored in the pref pref_background_update_check_excludes + try { + if (MainApplication.getPreferences("mmm").getStringSet("pref_background_update_check_excludes", null).contains(localModuleInfo.id)) + continue; + } catch (Exception ignored) { + } + RepoModule repoModule = repoModules.get(localModuleInfo.id); + localModuleInfo.checkModuleUpdate(); + if (localModuleInfo.updateVersionCode > localModuleInfo.versionCode && !PropUtils.isNullString(localModuleInfo.updateVersion)) { + moduleUpdateCount++; + updateableModules.put(localModuleInfo.name, localModuleInfo.version); + } else if (repoModule != null && repoModule.moduleInfo.versionCode > localModuleInfo.versionCode && !PropUtils.isNullString(repoModule.moduleInfo.version)) { + moduleUpdateCount++; + updateableModules.put(localModuleInfo.name, localModuleInfo.version); + } + } + if (moduleUpdateCount != 0) { + Timber.d("Found %d updates", moduleUpdateCount); + postNotification(context, updateableModules, moduleUpdateCount, false); + } + }); + // check for app updates + if (MainApplication.getPreferences("mmm").getBoolean("pref_background_update_check_app", false)) { + try { + boolean shouldUpdate = AppUpdateManager.getAppUpdateManager().checkUpdate(true); + if (shouldUpdate) { + Timber.d("Found app update"); + postNotificationForAppUpdate(context); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + // remove checking notification + if (ContextCompat.checkSelfPermission(MainApplication.getINSTANCE(), Manifest.permission.POST_NOTIFICATIONS) == PackageManager.PERMISSION_GRANTED) { + Timber.d("Removing notification"); + NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context); + notificationManager.cancel(NOTIFICATION_ID_ONGOING); + } + } + // increment or create counter in shared preferences + MainApplication.getPreferences("mmm").edit().putInt("pref_background_update_counter", MainApplication.getPreferences("mmm").getInt("pref_background_update_counter", 0) + 1).apply(); } public static void postNotification(Context context, HashMap updateable, int updateCount, boolean test) { diff --git a/app/src/main/java/com/fox2code/mmm/background/BackgroundUpdateCheckerService.java b/app/src/main/java/com/fox2code/mmm/background/BackgroundUpdateCheckerService.java deleted file mode 100644 index ff535e8..0000000 --- a/app/src/main/java/com/fox2code/mmm/background/BackgroundUpdateCheckerService.java +++ /dev/null @@ -1,151 +0,0 @@ -package com.fox2code.mmm.background; - -import static com.fox2code.mmm.background.BackgroundUpdateChecker.NOTFIICATION_GROUP; -import static com.fox2code.mmm.background.BackgroundUpdateChecker.postNotification; - -import android.Manifest; -import android.annotation.SuppressLint; -import android.app.PendingIntent; -import android.app.Service; -import android.content.Context; -import android.content.Intent; -import android.content.pm.PackageManager; -import android.os.IBinder; - -import androidx.core.app.NotificationChannelCompat; -import androidx.core.app.NotificationCompat; -import androidx.core.app.NotificationManagerCompat; -import androidx.core.content.ContextCompat; - -import com.fox2code.mmm.AppUpdateManager; -import com.fox2code.mmm.MainApplication; -import com.fox2code.mmm.R; -import com.fox2code.mmm.UpdateActivity; -import com.fox2code.mmm.manager.LocalModuleInfo; -import com.fox2code.mmm.manager.ModuleManager; -import com.fox2code.mmm.repo.RepoManager; -import com.fox2code.mmm.repo.RepoModule; -import com.fox2code.mmm.utils.io.PropUtils; - -import java.util.HashMap; - -import timber.log.Timber; - -@SuppressLint("RestrictedApi") -public class BackgroundUpdateCheckerService extends Service { - public static final String NOTIFICATION_CHANNEL_ID = "background_update"; - public static final String NOTIFICATION_CHANNEL_ID_APP = "background_update_app"; - public static final String ACTION_START_FOREGROUND_SERVICE = "ACTION_START_FOREGROUND_SERVICE"; - static final Object lock = new Object(); // Avoid concurrency issues - private static final int NOTIFICATION_ID_ONGOING = 2; - private static final String NOTIFICATION_CHANNEL_ID_ONGOING = "mmm_background_update"; - private static final int NOTIFICATION_ID_APP = 3; - - @SuppressLint("RestrictedApi") - private static void postNotificationForAppUpdate(Context context) { - // create the notification channel if not already created - NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context); - notificationManager.createNotificationChannel(new NotificationChannelCompat.Builder(NOTIFICATION_CHANNEL_ID_APP, NotificationManagerCompat.IMPORTANCE_HIGH).setName(context.getString(R.string.notification_channel_category_app_update)).setDescription(context.getString(R.string.notification_channel_category_app_update_description)).setGroup(NOTFIICATION_GROUP).build()); - NotificationCompat.Builder builder = new NotificationCompat.Builder(context, NOTIFICATION_CHANNEL_ID_APP); - builder.setSmallIcon(R.drawable.baseline_system_update_24); - builder.setPriority(NotificationCompat.PRIORITY_HIGH); - builder.setCategory(NotificationCompat.CATEGORY_RECOMMENDATION); - builder.setShowWhen(false); - builder.setOnlyAlertOnce(true); - builder.setOngoing(false); - builder.setAutoCancel(true); - builder.setGroup(NOTFIICATION_GROUP); - // open app on click - Intent intent = new Intent(context, UpdateActivity.class); - // set action to ACTIONS.DOWNLOAD - intent.setAction(String.valueOf(UpdateActivity.ACTIONS.DOWNLOAD)); - intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); - builder.setContentIntent(android.app.PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_IMMUTABLE)); - // set summary to Found X - builder.setContentTitle(context.getString(R.string.notification_channel_background_update_app)); - builder.setContentText(context.getString(R.string.notification_channel_background_update_app_description)); - if (ContextCompat.checkSelfPermission(MainApplication.getINSTANCE(), Manifest.permission.POST_NOTIFICATIONS) == PackageManager.PERMISSION_GRANTED) { - notificationManager.notify(NOTIFICATION_ID_APP, builder.build()); - } - } - - @Override - public IBinder onBind(Intent intent) { - Context context = MainApplication.getINSTANCE().getApplicationContext(); - // check if ACTION_START_FOREGROUND_SERVICE was called - if (intent.getAction() != null && intent.getAction().equals(ACTION_START_FOREGROUND_SERVICE)) { - synchronized (lock) { - // post checking notification if notifications are enabled - if (ContextCompat.checkSelfPermission(MainApplication.getINSTANCE(), Manifest.permission.POST_NOTIFICATIONS) == PackageManager.PERMISSION_GRANTED) { - NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context); - notificationManager.createNotificationChannel(new NotificationChannelCompat.Builder(NOTIFICATION_CHANNEL_ID_ONGOING, NotificationManagerCompat.IMPORTANCE_MIN).setName(context.getString(R.string.notification_channel_category_background_update)).setDescription(context.getString(R.string.notification_channel_category_background_update_description)).setGroup(NOTFIICATION_GROUP).build()); - NotificationCompat.Builder builder = new NotificationCompat.Builder(context, NOTIFICATION_CHANNEL_ID); - builder.setSmallIcon(R.drawable.ic_baseline_update_24); - builder.setPriority(NotificationCompat.PRIORITY_MIN); - builder.setCategory(NotificationCompat.CATEGORY_SERVICE); - builder.setShowWhen(false); - builder.setOnlyAlertOnce(true); - builder.setOngoing(true); - builder.setAutoCancel(false); - builder.setGroup("update_bg"); - builder.setContentTitle(context.getString(R.string.notification_channel_background_update)); - builder.setContentText(context.getString(R.string.notification_channel_background_update_description)); - notificationManager.notify(NOTIFICATION_ID_ONGOING, builder.build()); - } else { - Timber.d("Not posting notification because of missing permission"); - } - ModuleManager.getINSTANCE().scanAsync(); - RepoManager.getINSTANCE().update(null); - ModuleManager.getINSTANCE().runAfterScan(() -> { - int moduleUpdateCount = 0; - HashMap repoModules = RepoManager.getINSTANCE().getModules(); - // hashmap of updateable modules names - HashMap updateableModules = new HashMap<>(); - for (LocalModuleInfo localModuleInfo : ModuleManager.getINSTANCE().getModules().values()) { - if ("twrp-keep".equals(localModuleInfo.id)) continue; - // exclude all modules with id's stored in the pref pref_background_update_check_excludes - try { - if (MainApplication.getPreferences("mmm").getStringSet("pref_background_update_check_excludes", null).contains(localModuleInfo.id)) - continue; - } catch (Exception ignored) { - } - RepoModule repoModule = repoModules.get(localModuleInfo.id); - localModuleInfo.checkModuleUpdate(); - if (localModuleInfo.updateVersionCode > localModuleInfo.versionCode && !PropUtils.isNullString(localModuleInfo.updateVersion)) { - moduleUpdateCount++; - updateableModules.put(localModuleInfo.name, localModuleInfo.version); - } else if (repoModule != null && repoModule.moduleInfo.versionCode > localModuleInfo.versionCode && !PropUtils.isNullString(repoModule.moduleInfo.version)) { - moduleUpdateCount++; - updateableModules.put(localModuleInfo.name, localModuleInfo.version); - } - } - if (moduleUpdateCount != 0) { - Timber.d("Found %d updates", moduleUpdateCount); - postNotification(context, updateableModules, moduleUpdateCount, false); - } - }); - // check for app updates - if (MainApplication.getPreferences("mmm").getBoolean("pref_background_update_check_app", false)) { - try { - boolean shouldUpdate = AppUpdateManager.getAppUpdateManager().checkUpdate(true); - if (shouldUpdate) { - Timber.d("Found app update"); - postNotificationForAppUpdate(context); - } - } catch (Exception e) { - e.printStackTrace(); - } - } - // remove checking notification - if (ContextCompat.checkSelfPermission(MainApplication.getINSTANCE(), Manifest.permission.POST_NOTIFICATIONS) == PackageManager.PERMISSION_GRANTED) { - Timber.d("Removing notification"); - NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context); - notificationManager.cancel(NOTIFICATION_ID_ONGOING); - } - } - } else { - Timber.d("No action found"); - } - return null; - } -} diff --git a/app/src/main/java/com/fox2code/mmm/installer/InstallerActivity.java b/app/src/main/java/com/fox2code/mmm/installer/InstallerActivity.java index 7f141f7..c78f1c2 100644 --- a/app/src/main/java/com/fox2code/mmm/installer/InstallerActivity.java +++ b/app/src/main/java/com/fox2code/mmm/installer/InstallerActivity.java @@ -27,6 +27,7 @@ import com.fox2code.mmm.MainActivity; import com.fox2code.mmm.MainApplication; import com.fox2code.mmm.R; import com.fox2code.mmm.XHooks; +import com.fox2code.mmm.androidacy.AndroidacyUtil; import com.fox2code.mmm.module.ActionButtonType; import com.fox2code.mmm.utils.FastException; import com.fox2code.mmm.utils.IntentHelper; @@ -168,7 +169,7 @@ public class InstallerActivity extends FoxActivity { // Set this to the error message if it's a HTTP error byte[] rawModule; try { - Timber.i("%s%s", (urlMode ? "Downloading: " : "Loading: "), finalTarget); + Timber.i("%s%s", (urlMode ? "Downloading: " : "Loading: "), AndroidacyUtil.hideToken(finalTarget)); rawModule = urlMode ? Http.doHttpGet(finalTarget, (progress, max, done) -> { if (max <= 0 && this.progressIndicator.isIndeterminate()) return; this.runOnUiThread(() -> { 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 d027ca2..0226d5f 100644 --- a/app/src/main/java/com/fox2code/mmm/module/ModuleHolder.java +++ b/app/src/main/java/com/fox2code/mmm/module/ModuleHolder.java @@ -147,7 +147,10 @@ public final class ModuleHolder implements Comparable { this.repoModule.moduleInfo.versionCode)) { Timber.d("Module %s has update", this.moduleId); MainApplication.getINSTANCE().modulesHaveUpdates = true; - MainApplication.getINSTANCE().updateModuleCount++; + if (!MainApplication.getINSTANCE().updateModules.contains(this.moduleId)) { + MainApplication.getINSTANCE().updateModules.add(this.moduleId); + MainApplication.getINSTANCE().updateModuleCount++; + } Timber.d("modulesHaveUpdates = %s, updateModuleCount = %s", MainApplication.getINSTANCE().modulesHaveUpdates, MainApplication.getINSTANCE().updateModuleCount); return Type.UPDATABLE; } else { diff --git a/build.gradle b/build.gradle index 8205923..cfc25c0 100644 --- a/build.gradle +++ b/build.gradle @@ -19,7 +19,7 @@ buildscript { project.ext.sentry_version = "6.16.0" dependencies { //noinspection AndroidGradlePluginVersion - classpath 'com.android.tools.build:gradle:8.0.0-rc01' + classpath 'com.android.tools.build:gradle:8.0.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.20" classpath "com.mikepenz.aboutlibraries.plugin:aboutlibraries-plugin:${latestAboutLibsRelease}"