diff --git a/app/src/main/java/eu/kanade/presentation/browse/ExtensionDetailsScreen.kt b/app/src/main/java/eu/kanade/presentation/browse/ExtensionDetailsScreen.kt
index 6ed93ace8..aff0bb09a 100644
--- a/app/src/main/java/eu/kanade/presentation/browse/ExtensionDetailsScreen.kt
+++ b/app/src/main/java/eu/kanade/presentation/browse/ExtensionDetailsScreen.kt
@@ -4,8 +4,6 @@ import android.content.Intent
import android.net.Uri
import android.provider.Settings
import android.util.DisplayMetrics
-import androidx.annotation.StringRes
-import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.Arrangement
@@ -56,6 +54,7 @@ import eu.kanade.presentation.components.EmptyScreen
import eu.kanade.presentation.components.LoadingScreen
import eu.kanade.presentation.components.Scaffold
import eu.kanade.presentation.components.ScrollbarLazyColumn
+import eu.kanade.presentation.components.WarningBanner
import eu.kanade.presentation.more.settings.widget.TextPreferenceWidget
import eu.kanade.presentation.more.settings.widget.TrailingWidgetBuffer
import eu.kanade.presentation.util.horizontalPadding
@@ -216,25 +215,6 @@ private fun ExtensionDetails(
}
}
-@Composable
-private fun WarningBanner(
- @StringRes textRes: Int,
- // SY -->
- modifier: Modifier = Modifier,
-) {
- Text(
- text = stringResource(textRes),
- modifier = modifier
- // SY <--
- .fillMaxWidth()
- .background(MaterialTheme.colorScheme.error)
- .padding(16.dp),
- color = MaterialTheme.colorScheme.onError,
- style = MaterialTheme.typography.bodyMedium,
- textAlign = TextAlign.Center,
- )
-}
-
@Composable
private fun DetailsHeader(
extension: Extension,
diff --git a/app/src/main/java/eu/kanade/presentation/components/Banners.kt b/app/src/main/java/eu/kanade/presentation/components/Banners.kt
index 9aef71deb..3bb503b4d 100644
--- a/app/src/main/java/eu/kanade/presentation/components/Banners.kt
+++ b/app/src/main/java/eu/kanade/presentation/components/Banners.kt
@@ -1,5 +1,6 @@
package eu.kanade.presentation.components
+import androidx.annotation.StringRes
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxWidth
@@ -13,6 +14,23 @@ import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp
import eu.kanade.tachiyomi.R
+@Composable
+fun WarningBanner(
+ @StringRes textRes: Int,
+ modifier: Modifier = Modifier,
+) {
+ Text(
+ text = stringResource(textRes),
+ modifier = modifier
+ .fillMaxWidth()
+ .background(MaterialTheme.colorScheme.error)
+ .padding(16.dp),
+ color = MaterialTheme.colorScheme.onError,
+ style = MaterialTheme.typography.bodyMedium,
+ textAlign = TextAlign.Center,
+ )
+}
+
@Composable
fun AppStateBanners(
downloadedOnlyMode: Boolean,
diff --git a/app/src/main/java/eu/kanade/presentation/more/MoreScreen.kt b/app/src/main/java/eu/kanade/presentation/more/MoreScreen.kt
index da69ca653..102fce1f7 100644
--- a/app/src/main/java/eu/kanade/presentation/more/MoreScreen.kt
+++ b/app/src/main/java/eu/kanade/presentation/more/MoreScreen.kt
@@ -1,5 +1,6 @@
package eu.kanade.presentation.more
+import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.WindowInsets
import androidx.compose.foundation.layout.asPaddingValues
import androidx.compose.foundation.layout.navigationBars
@@ -27,6 +28,7 @@ import androidx.compose.ui.res.vectorResource
import eu.kanade.presentation.components.AppStateBanners
import eu.kanade.presentation.components.Divider
import eu.kanade.presentation.components.ScrollbarLazyColumn
+import eu.kanade.presentation.components.WarningBanner
import eu.kanade.presentation.more.settings.widget.SwitchPreferenceWidget
import eu.kanade.presentation.more.settings.widget.TextPreferenceWidget
import eu.kanade.tachiyomi.R
@@ -38,6 +40,7 @@ import eu.kanade.tachiyomi.widget.TachiyomiBottomNavigationView
@Composable
fun MoreScreen(
presenter: MorePresenter,
+ isFDroid: Boolean,
onClickDownloadQueue: () -> Unit,
onClickCategories: () -> Unit,
onClickBackupAndRestore: () -> Unit,
@@ -56,6 +59,17 @@ fun MoreScreen(
WindowInsets.navigationBars.asPaddingValues(),
),
) {
+ if (isFDroid) {
+ item {
+ WarningBanner(
+ textRes = R.string.fdroid_warning,
+ modifier = Modifier.clickable {
+ uriHandler.openUri("https://tachiyomi.org/help/faq/#how-do-i-migrate-from-the-f-droid-version")
+ },
+ )
+ }
+ }
+
item {
LogoHeader()
}
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 bc875e36d..c344185f2 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
@@ -9,7 +9,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 eu.kanade.tachiyomi.util.system.isInstalledFromFDroid
import eu.kanade.tachiyomi.util.system.isPreviewBuildType
import eu.kanade.tachiyomi.util.system.isReleaseBuildType
import exh.syDebugVersion
@@ -41,7 +41,7 @@ class AppUpdateChecker {
// Check if latest version is different from current version
if (/* SY --> */ isNewVersionSY(it.version) /* SY <-- */) {
- if (context.getInstallerPackageName() == "org.fdroid.fdroid") {
+ if (context.isInstalledFromFDroid()) {
AppUpdateResult.NewUpdateFdroidInstallation
} else {
AppUpdateResult.NewUpdate(it)
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/more/MoreController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/more/MoreController.kt
index 68a9c5643..7602225fb 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/more/MoreController.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/more/MoreController.kt
@@ -10,6 +10,7 @@ import eu.kanade.tachiyomi.ui.download.DownloadController
import eu.kanade.tachiyomi.ui.recent.history.HistoryController
import eu.kanade.tachiyomi.ui.recent.updates.UpdatesController
import eu.kanade.tachiyomi.ui.setting.SettingsMainController
+import eu.kanade.tachiyomi.util.system.isInstalledFromFDroid
import exh.ui.batchadd.BatchAddController
class MoreController :
@@ -22,6 +23,7 @@ class MoreController :
override fun ComposeContent() {
MoreScreen(
presenter = presenter,
+ isFDroid = activity?.isInstalledFromFDroid() ?: false,
onClickDownloadQueue = { router.pushController(DownloadController()) },
onClickCategories = { router.pushController(CategoryController()) },
onClickBackupAndRestore = { router.pushController(SettingsMainController.toBackupScreen()) },
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 9ba2d3385..b6edb4a0f 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
@@ -39,6 +39,7 @@ import androidx.core.net.toUri
import com.hippo.unifile.UniFile
import eu.kanade.domain.ui.UiPreferences
import eu.kanade.domain.ui.model.TabletUiMode
+import eu.kanade.tachiyomi.BuildConfig
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.ui.base.delegate.ThemingDelegate
import eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences
@@ -393,8 +394,8 @@ fun Context.isPackageInstalled(packageName: String): Boolean {
}
}
-fun Context.getInstallerPackageName(): String? {
- return try {
+fun Context.isInstalledFromFDroid(): Boolean {
+ val installerPackageName = try {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
packageManager.getInstallSourceInfo(packageName).installingPackageName
} else {
@@ -404,6 +405,10 @@ fun Context.getInstallerPackageName(): String? {
} catch (e: Exception) {
null
}
+
+ return installerPackageName == "org.fdroid.fdroid" ||
+ // F-Droid builds typically disable the updater
+ (!BuildConfig.INCLUDE_UPDATER && !isDevFlavor)
}
fun Context.getApplicationIcon(pkgName: String): Drawable? {
diff --git a/i18n/src/main/res/values/strings.xml b/i18n/src/main/res/values/strings.xml
index 981d12184..1ebfe92dd 100755
--- a/i18n/src/main/res/values/strings.xml
+++ b/i18n/src/main/res/values/strings.xml
@@ -548,6 +548,7 @@
+ F-Droid builds are not officially supported.\nTap to learn more.
Downloaded only
Incognito mode
Pauses reading history