From 1be153e51c8a23d16d2f0c7b0f4624954a7079de Mon Sep 17 00:00:00 2001 From: arkon Date: Wed, 13 Apr 2022 17:44:43 -0400 Subject: [PATCH] Show different update notification for F-Droid installations (cherry picked from commit 821d9cdb02318464abb062e9a945ff8c35402b1e) # Conflicts: # app/src/main/java/eu/kanade/tachiyomi/data/updater/AppUpdateChecker.kt --- .../tachiyomi/data/updater/AppUpdateChecker.kt | 12 +++++++++--- .../tachiyomi/data/updater/AppUpdateNotifier.kt | 16 ++++++++++++++++ .../tachiyomi/data/updater/AppUpdateResult.kt | 1 + .../tachiyomi/util/system/ContextExtensions.kt | 13 +++++++++++++ app/src/main/res/values/strings.xml | 1 + 5 files changed, 40 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/updater/AppUpdateChecker.kt b/app/src/main/java/eu/kanade/tachiyomi/data/updater/AppUpdateChecker.kt index 36f070311..462f73406 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/data/updater/AppUpdateChecker.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/updater/AppUpdateChecker.kt @@ -8,6 +8,7 @@ import eu.kanade.tachiyomi.network.NetworkHelper import eu.kanade.tachiyomi.network.await import eu.kanade.tachiyomi.network.parseAs import eu.kanade.tachiyomi.util.lang.withIOContext +import eu.kanade.tachiyomi.util.system.getInstallerPackageName import exh.syDebugVersion import uy.kohesive.injekt.injectLazy import java.util.Date @@ -34,14 +35,19 @@ class AppUpdateChecker { // Check if latest version is different from current version if (/* SY --> */ isNewVersionSY(it.version) /* SY <-- */) { - AppUpdateResult.NewUpdate(it) + if (context.getInstallerPackageName() == "org.fdroid.fdroid") { + AppUpdateResult.NewUpdateFdroidInstallation + } else { + AppUpdateResult.NewUpdate(it) + } } else { AppUpdateResult.NoNewUpdate } } - if (result is AppUpdateResult.NewUpdate) { - AppUpdateNotifier(context).promptUpdate(result.release) + when (result) { + is AppUpdateResult.NewUpdate -> AppUpdateNotifier(context).promptUpdate(result.release) + is AppUpdateResult.NewUpdateFdroidInstallation -> AppUpdateNotifier(context).promptFdroidUpdate() } result diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/updater/AppUpdateNotifier.kt b/app/src/main/java/eu/kanade/tachiyomi/data/updater/AppUpdateNotifier.kt index f6bcce4b7..a1bb160f7 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/updater/AppUpdateNotifier.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/updater/AppUpdateNotifier.kt @@ -58,6 +58,22 @@ internal class AppUpdateNotifier(private val context: Context) { notificationBuilder.show() } + /** + * Some people are still installing the app from F-Droid, so we avoid prompting GitHub-based + * updates. + * + * We can prompt them to migrate to the GitHub version though. + */ + fun promptFdroidUpdate() { + with(notificationBuilder) { + setContentTitle(context.getString(R.string.update_check_notification_update_available)) + setContentText(context.getString(R.string.update_check_fdroid_migration_info)) + setSmallIcon(R.drawable.ic_tachi) + setContentIntent(NotificationHandler.openUrl(context, "https://tachiyomi.org/help/guides/troubleshooting/#unable-to-install-the-app-or-extensions")) + } + notificationBuilder.show() + } + /** * Call when apk download starts. * diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/updater/AppUpdateResult.kt b/app/src/main/java/eu/kanade/tachiyomi/data/updater/AppUpdateResult.kt index 7a40a3d3d..695d13492 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/updater/AppUpdateResult.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/updater/AppUpdateResult.kt @@ -2,5 +2,6 @@ package eu.kanade.tachiyomi.data.updater sealed class AppUpdateResult { class NewUpdate(val release: GithubRelease) : AppUpdateResult() + object NewUpdateFdroidInstallation : AppUpdateResult() object NoNewUpdate : AppUpdateResult() } diff --git a/app/src/main/java/eu/kanade/tachiyomi/util/system/ContextExtensions.kt b/app/src/main/java/eu/kanade/tachiyomi/util/system/ContextExtensions.kt index 2894f7ab2..134d8470d 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/util/system/ContextExtensions.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/util/system/ContextExtensions.kt @@ -382,6 +382,19 @@ fun Context.isPackageInstalled(packageName: String): Boolean { } } +fun Context.getInstallerPackageName(): String? { + return try { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + packageManager.getInstallSourceInfo(packageName).installingPackageName + } else { + @Suppress("DEPRECATION") + packageManager.getInstallerPackageName(packageName) + } + } catch (e: Exception) { + null + } +} + fun Context.getApplicationIcon(pkgName: String): Drawable? { return try { packageManager.getApplicationIcon(pkgName) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 7cf87430b..447b8aa5f 100755 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -765,6 +765,7 @@ Download complete Download error New version available! + A new version is available from the official releases. Tap to learn how to migrate from unofficial F-Droid releases.