From cdac438f1e93f7698db28bf7ce7932e29fbf3df6 Mon Sep 17 00:00:00 2001
From: AntsyLich <59261191+AntsyLich@users.noreply.github.com>
Date: Mon, 15 Jan 2024 22:43:13 +0600
Subject: [PATCH] Make the app Android 8+
(cherry picked from commit dfb3091e380dda3e9bfb64bf5c9a685cf3a03d0e)
# Conflicts:
# README.md
# app/src/debug/res/mipmap-hdpi/ic_launcher.png
# app/src/debug/res/mipmap-hdpi/ic_launcher_round.png
# app/src/debug/res/mipmap-mdpi/ic_launcher.png
# app/src/debug/res/mipmap-mdpi/ic_launcher_round.png
# app/src/debug/res/mipmap-xhdpi/ic_launcher.png
# app/src/debug/res/mipmap-xhdpi/ic_launcher_round.png
# app/src/debug/res/mipmap-xxhdpi/ic_launcher.png
# app/src/debug/res/mipmap-xxhdpi/ic_launcher_round.png
# app/src/debug/res/mipmap-xxxhdpi/ic_launcher.png
# app/src/debug/res/mipmap-xxxhdpi/ic_launcher_round.png
# app/src/main/java/eu/kanade/domain/ui/UiPreferences.kt
# app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsAdvancedScreen.kt
# app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsReaderScreen.kt
# app/src/main/java/eu/kanade/tachiyomi/data/coil/TachiyomiImageDecoder.kt
# app/src/main/java/eu/kanade/tachiyomi/extension/installer/ShizukuInstaller.kt
# app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/ZipPageLoader.kt
# app/src/main/res/mipmap-hdpi/ic_launcher.png
# app/src/main/res/mipmap-hdpi/ic_launcher_round.png
# app/src/main/res/mipmap-mdpi/ic_launcher.png
# app/src/main/res/mipmap-mdpi/ic_launcher_round.png
# app/src/main/res/mipmap-xhdpi/ic_launcher.png
# app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
# app/src/main/res/mipmap-xxhdpi/ic_launcher.png
# app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
# app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
# app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
# buildSrc/src/main/kotlin/AndroidConfig.kt
---
README.md | 2 +-
.../ic_launcher.xml | 0
.../ic_launcher_round.xml | 0
.../java/eu/kanade/domain/ui/UiPreferences.kt | 6 +--
.../manga/components/MangaCoverDialog.kt | 8 +---
.../widget/AppThemeModePreferenceWidget.kt | 18 ++-----
.../kanade/presentation/util/Permissions.kt | 9 +---
app/src/main/java/eu/kanade/tachiyomi/App.kt | 27 +++++------
.../data/coil/TachiyomiImageDecoder.kt | 5 +-
.../data/notification/NotificationReceiver.kt | 23 ++++-----
.../extension/installer/ShizukuInstaller.kt | 9 +---
.../tachiyomi/util/storage/FileExtensions.kt | 8 +---
.../util/system/ContextExtensions.kt | 10 ++--
.../util/system/NetworkExtensions.kt | 3 +-
.../util/system/NetworkStateTracker.kt | 47 +++++--------------
.../sc_collections_bookmark_48dp.xml | 24 ----------
.../main/res/drawable-v26/sc_explore_48dp.xml | 21 ---------
.../main/res/drawable-v26/sc_history_48dp.xml | 21 ---------
.../res/drawable-v26/sc_new_releases_48dp.xml | 21 ---------
.../drawable/sc_collections_bookmark_48dp.xml | 44 ++++++++---------
app/src/main/res/drawable/sc_explore_48dp.xml | 38 +++++++--------
app/src/main/res/drawable/sc_history_48dp.xml | 38 +++++++--------
.../res/drawable/sc_new_releases_48dp.xml | 38 +++++++--------
.../ic_launcher.xml | 0
.../ic_launcher_round.xml | 0
.../kotlin/mihon/buildlogic/AndroidConfig.kt | 2 +-
.../util/system/WebViewClientCompat.kt | 3 --
.../tachiyomi/util/system/WebViewUtil.kt | 15 ++----
28 files changed, 135 insertions(+), 305 deletions(-)
rename app/src/debug/res/{mipmap-anydpi-v26 => mipmap}/ic_launcher.xml (100%)
rename app/src/debug/res/{mipmap-anydpi-v26 => mipmap}/ic_launcher_round.xml (100%)
delete mode 100644 app/src/main/res/drawable-v26/sc_collections_bookmark_48dp.xml
delete mode 100644 app/src/main/res/drawable-v26/sc_explore_48dp.xml
delete mode 100644 app/src/main/res/drawable-v26/sc_history_48dp.xml
delete mode 100644 app/src/main/res/drawable-v26/sc_new_releases_48dp.xml
rename app/src/main/res/{mipmap-anydpi-v26 => mipmap}/ic_launcher.xml (100%)
rename app/src/main/res/{mipmap-anydpi-v26 => mipmap}/ic_launcher_round.xml (100%)
diff --git a/README.md b/README.md
index bb6bec9d1..27deeb551 100644
--- a/README.md
+++ b/README.md
@@ -4,7 +4,7 @@
#  Komikku
-Mihon/Tachiyomi is a free and open source manga reader for Android 6.0 and above. This version of Mihon/Tachiyomi, Komikku was based off TachiyomiSY. This version is meant to push forward in the ways of usability and features. TachiyomiSY tries to push forward where it can, but staying in a place where it can easily grab updates and features from the main app, it tries to make new features, or take features from other forks like SY, J2K and Neko.
+Mihon/Tachiyomi is a free and open source manga reader for Android 8.0 and above. This version of Mihon/Tachiyomi, Komikku was based off TachiyomiSY. This version is meant to push forward in the ways of usability and features. TachiyomiSY tries to push forward where it can, but staying in a place where it can easily grab updates and features from the main app, it tries to make new features, or take features from other forks like SY, J2K and Neko.

diff --git a/app/src/debug/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/debug/res/mipmap/ic_launcher.xml
similarity index 100%
rename from app/src/debug/res/mipmap-anydpi-v26/ic_launcher.xml
rename to app/src/debug/res/mipmap/ic_launcher.xml
diff --git a/app/src/debug/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/debug/res/mipmap/ic_launcher_round.xml
similarity index 100%
rename from app/src/debug/res/mipmap-anydpi-v26/ic_launcher_round.xml
rename to app/src/debug/res/mipmap/ic_launcher_round.xml
diff --git a/app/src/main/java/eu/kanade/domain/ui/UiPreferences.kt b/app/src/main/java/eu/kanade/domain/ui/UiPreferences.kt
index debb769e6..a2c89e201 100644
--- a/app/src/main/java/eu/kanade/domain/ui/UiPreferences.kt
+++ b/app/src/main/java/eu/kanade/domain/ui/UiPreferences.kt
@@ -1,6 +1,5 @@
package eu.kanade.domain.ui
-import android.os.Build
import com.materialkolor.PaletteStyle
import eu.kanade.domain.ui.model.AppTheme
import eu.kanade.domain.ui.model.TabletUiMode
@@ -17,10 +16,7 @@ class UiPreferences(
private val preferenceStore: PreferenceStore,
) {
- fun themeMode() = preferenceStore.getEnum(
- "pref_theme_mode_key",
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { ThemeMode.SYSTEM } else { ThemeMode.LIGHT },
- )
+ fun themeMode() = preferenceStore.getEnum("pref_theme_mode_key", ThemeMode.SYSTEM)
fun appTheme() = preferenceStore.getEnum(
"pref_app_theme",
diff --git a/app/src/main/java/eu/kanade/presentation/manga/components/MangaCoverDialog.kt b/app/src/main/java/eu/kanade/presentation/manga/components/MangaCoverDialog.kt
index 5237c2cbb..a70511326 100644
--- a/app/src/main/java/eu/kanade/presentation/manga/components/MangaCoverDialog.kt
+++ b/app/src/main/java/eu/kanade/presentation/manga/components/MangaCoverDialog.kt
@@ -2,7 +2,6 @@ package eu.kanade.presentation.manga.components
import android.graphics.Bitmap
import android.graphics.drawable.BitmapDrawable
-import android.os.Build
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Row
@@ -175,14 +174,9 @@ fun MangaCoverDialog(
// Copy bitmap in case it came from memory cache
// Because SSIV needs to thoroughly read the image
val copy = (drawable as? BitmapDrawable)?.let {
- val config = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
- Bitmap.Config.HARDWARE
- } else {
- Bitmap.Config.ARGB_8888
- }
BitmapDrawable(
view.context.resources,
- it.bitmap.copy(config, false),
+ it.bitmap.copy(Bitmap.Config.HARDWARE, false),
)
} ?: drawable
view.setImage(copy, ReaderPageImageView.Config(zoomDuration = 500))
diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/widget/AppThemeModePreferenceWidget.kt b/app/src/main/java/eu/kanade/presentation/more/settings/widget/AppThemeModePreferenceWidget.kt
index d1901745b..6ba423e32 100644
--- a/app/src/main/java/eu/kanade/presentation/more/settings/widget/AppThemeModePreferenceWidget.kt
+++ b/app/src/main/java/eu/kanade/presentation/more/settings/widget/AppThemeModePreferenceWidget.kt
@@ -1,6 +1,5 @@
package eu.kanade.presentation.more.settings.widget
-import android.os.Build
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.MultiChoiceSegmentedButtonRow
@@ -13,18 +12,11 @@ import eu.kanade.domain.ui.model.ThemeMode
import tachiyomi.i18n.MR
import tachiyomi.presentation.core.i18n.stringResource
-private val options = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
- mapOf(
- ThemeMode.SYSTEM to MR.strings.theme_system,
- ThemeMode.LIGHT to MR.strings.theme_light,
- ThemeMode.DARK to MR.strings.theme_dark,
- )
-} else {
- mapOf(
- ThemeMode.LIGHT to MR.strings.theme_light,
- ThemeMode.DARK to MR.strings.theme_dark,
- )
-}
+private val options = mapOf(
+ ThemeMode.SYSTEM to MR.strings.theme_system,
+ ThemeMode.LIGHT to MR.strings.theme_light,
+ ThemeMode.DARK to MR.strings.theme_dark,
+)
@Composable
internal fun AppThemeModePreferenceWidget(
diff --git a/app/src/main/java/eu/kanade/presentation/util/Permissions.kt b/app/src/main/java/eu/kanade/presentation/util/Permissions.kt
index 798f2ff24..80c2f90b9 100644
--- a/app/src/main/java/eu/kanade/presentation/util/Permissions.kt
+++ b/app/src/main/java/eu/kanade/presentation/util/Permissions.kt
@@ -1,7 +1,5 @@
package eu.kanade.presentation.util
-import android.os.Build
-import android.provider.Settings
import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.getValue
@@ -23,12 +21,7 @@ fun rememberRequestPackageInstallsPermissionState(initialValue: Boolean = false)
DisposableEffect(lifecycleOwner.lifecycle) {
val observer = object : DefaultLifecycleObserver {
override fun onResume(owner: LifecycleOwner) {
- installGranted = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
- context.packageManager.canRequestPackageInstalls()
- } else {
- @Suppress("DEPRECATION")
- Settings.Secure.getInt(context.contentResolver, Settings.Secure.INSTALL_NON_MARKET_APPS) != 0
- }
+ installGranted = context.packageManager.canRequestPackageInstalls()
}
}
lifecycleOwner.lifecycle.addObserver(observer)
diff --git a/app/src/main/java/eu/kanade/tachiyomi/App.kt b/app/src/main/java/eu/kanade/tachiyomi/App.kt
index b2a30d852..b0a4a89b0 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/App.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/App.kt
@@ -248,22 +248,19 @@ class App : Application(), DefaultLifecycleObserver, SingletonImageLoader.Factor
}
override fun getPackageName(): String {
- // This causes freezes in Android 6/7 for some reason
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
- try {
- // Override the value passed as X-Requested-With in WebView requests
- val stackTrace = Looper.getMainLooper().thread.stackTrace
- val chromiumElement = stackTrace.find {
- it.className.equals(
- "org.chromium.base.BuildInfo",
- ignoreCase = true,
- )
- }
- if (chromiumElement?.methodName.equals("getAll", ignoreCase = true)) {
- return WebViewUtil.SPOOF_PACKAGE_NAME
- }
- } catch (_: Exception) {
+ try {
+ // Override the value passed as X-Requested-With in WebView requests
+ val stackTrace = Looper.getMainLooper().thread.stackTrace
+ val chromiumElement = stackTrace.find {
+ it.className.equals(
+ "org.chromium.base.BuildInfo",
+ ignoreCase = true,
+ )
}
+ if (chromiumElement?.methodName.equals("getAll", ignoreCase = true)) {
+ return WebViewUtil.SPOOF_PACKAGE_NAME
+ }
+ } catch (_: Exception) {
}
return super.getPackageName()
}
diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/coil/TachiyomiImageDecoder.kt b/app/src/main/java/eu/kanade/tachiyomi/data/coil/TachiyomiImageDecoder.kt
index 8074fb692..8d59dd9bd 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/data/coil/TachiyomiImageDecoder.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/data/coil/TachiyomiImageDecoder.kt
@@ -1,7 +1,6 @@
package eu.kanade.tachiyomi.data.coil
import android.graphics.Bitmap
-import android.os.Build
import coil3.ImageLoader
import coil3.asCoilImage
import coil3.decode.DecodeResult
@@ -68,7 +67,6 @@ class TachiyomiImageDecoder(private val resources: ImageSource, private val opti
check(bitmap != null) { "Failed to decode image" }
if (
- Build.VERSION.SDK_INT >= Build.VERSION_CODES.O &&
options.bitmapConfig == Bitmap.Config.HARDWARE &&
maxOf(bitmap.width, bitmap.height) <= GLUtil.maxTextureSize
) {
@@ -105,8 +103,7 @@ class TachiyomiImageDecoder(private val resources: ImageSource, private val opti
}
// SY <--
return when (type) {
- ImageUtil.ImageType.AVIF, ImageUtil.ImageType.JXL -> true
- ImageUtil.ImageType.HEIF -> Build.VERSION.SDK_INT < Build.VERSION_CODES.O
+ ImageUtil.ImageType.AVIF, ImageUtil.ImageType.JXL, ImageUtil.ImageType.HEIF -> true
else -> false
}
}
diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/notification/NotificationReceiver.kt b/app/src/main/java/eu/kanade/tachiyomi/data/notification/NotificationReceiver.kt
index cd4908141..66bc5a603 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/data/notification/NotificationReceiver.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/data/notification/NotificationReceiver.kt
@@ -5,7 +5,6 @@ import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.net.Uri
-import android.os.Build
import androidx.core.net.toUri
import eu.kanade.tachiyomi.data.backup.restore.BackupRestoreJob
import eu.kanade.tachiyomi.data.download.DownloadManager
@@ -368,20 +367,18 @@ class NotificationReceiver : BroadcastReceiver() {
When programmatically dismissing this notification, the group notification is not automatically dismissed.
*/
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
- val groupKey = context.notificationManager.activeNotifications.find {
- it.id == notificationId
- }?.groupKey
+ val groupKey = context.notificationManager.activeNotifications.find {
+ it.id == notificationId
+ }?.groupKey
- if (groupId != null && groupId != 0 && !groupKey.isNullOrEmpty()) {
- val notifications = context.notificationManager.activeNotifications.filter {
- it.groupKey == groupKey
- }
+ if (groupId != null && groupId != 0 && !groupKey.isNullOrEmpty()) {
+ val notifications = context.notificationManager.activeNotifications.filter {
+ it.groupKey == groupKey
+ }
- if (notifications.size == 2) {
- context.cancelNotification(groupId)
- return
- }
+ if (notifications.size == 2) {
+ context.cancelNotification(groupId)
+ return
}
}
diff --git a/app/src/main/java/eu/kanade/tachiyomi/extension/installer/ShizukuInstaller.kt b/app/src/main/java/eu/kanade/tachiyomi/extension/installer/ShizukuInstaller.kt
index eda627589..24a8cb377 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/extension/installer/ShizukuInstaller.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/extension/installer/ShizukuInstaller.kt
@@ -2,7 +2,6 @@ package eu.kanade.tachiyomi.extension.installer
import android.app.Service
import android.content.pm.PackageManager
-import android.os.Build
import android.os.Process
import eu.kanade.tachiyomi.extension.model.InstallStep
import eu.kanade.tachiyomi.util.system.getUriSize
@@ -51,12 +50,8 @@ class ShizukuInstaller(private val service: Service) : Installer(service) {
try {
val size = service.getUriSize(entry.uri) ?: throw IllegalStateException()
service.contentResolver.openInputStream(entry.uri)!!.use {
- val createCommand = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
- val userId = Process.myUserHandle().hashCode()
- "pm install-create --user $userId -r -i ${service.packageName} -S $size"
- } else {
- "pm install-create -r -i ${service.packageName} -S $size"
- }
+ val userId = Process.myUserHandle().hashCode()
+ val createCommand = "pm install-create --user $userId -r -i ${service.packageName} -S $size"
val createResult = exec(createCommand)
sessionId = SESSION_ID_REGEX.find(createResult.out)?.value
?: throw RuntimeException("Failed to create install session")
diff --git a/app/src/main/java/eu/kanade/tachiyomi/util/storage/FileExtensions.kt b/app/src/main/java/eu/kanade/tachiyomi/util/storage/FileExtensions.kt
index 3c0fab2ab..c0575c0d5 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/util/storage/FileExtensions.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/util/storage/FileExtensions.kt
@@ -2,9 +2,7 @@ package eu.kanade.tachiyomi.util.storage
import android.content.Context
import android.net.Uri
-import android.os.Build
import androidx.core.content.FileProvider
-import androidx.core.net.toUri
import eu.kanade.tachiyomi.BuildConfig
import java.io.File
@@ -17,11 +15,7 @@ val Context.cacheImageDir: File
* @param context context of application
*/
fun File.getUriCompat(context: Context): Uri {
- return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
- FileProvider.getUriForFile(context, BuildConfig.APPLICATION_ID + ".provider", this)
- } else {
- this.toUri()
- }
+ return FileProvider.getUriForFile(context, BuildConfig.APPLICATION_ID + ".provider", this)
}
/**
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 4ec99c07a..190764631 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
@@ -170,12 +170,8 @@ fun Context.isInstalledFromFDroid(): Boolean {
}
fun Context.launchRequestPackageInstallsPermission() {
- val intent = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
- Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES).apply {
- data = Uri.parse("package:$packageName")
- }
- } else {
- Intent(Settings.ACTION_SECURITY_SETTINGS)
+ Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES).apply {
+ data = Uri.parse("package:$packageName")
+ startActivity(this)
}
- startActivity(intent)
}
diff --git a/app/src/main/java/eu/kanade/tachiyomi/util/system/NetworkExtensions.kt b/app/src/main/java/eu/kanade/tachiyomi/util/system/NetworkExtensions.kt
index 8d72a9c86..18e16baac 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/util/system/NetworkExtensions.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/util/system/NetworkExtensions.kt
@@ -18,8 +18,7 @@ fun Context.isOnline(): Boolean {
val networkCapabilities = connectivityManager.getNetworkCapabilities(activeNetwork) ?: return false
val maxTransport = when {
Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1 -> NetworkCapabilities.TRANSPORT_LOWPAN
- Build.VERSION.SDK_INT >= Build.VERSION_CODES.O -> NetworkCapabilities.TRANSPORT_WIFI_AWARE
- else -> NetworkCapabilities.TRANSPORT_VPN
+ else -> NetworkCapabilities.TRANSPORT_WIFI_AWARE
}
return (NetworkCapabilities.TRANSPORT_CELLULAR..maxTransport).any(networkCapabilities::hasTransport)
}
diff --git a/app/src/main/java/eu/kanade/tachiyomi/util/system/NetworkStateTracker.kt b/app/src/main/java/eu/kanade/tachiyomi/util/system/NetworkStateTracker.kt
index a4a686541..0c309ae55 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/util/system/NetworkStateTracker.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/util/system/NetworkStateTracker.kt
@@ -1,14 +1,9 @@
package eu.kanade.tachiyomi.util.system
-import android.content.BroadcastReceiver
import android.content.Context
-import android.content.Intent
-import android.content.IntentFilter
-import android.net.ConnectivityManager
import android.net.ConnectivityManager.NetworkCallback
import android.net.Network
import android.net.NetworkCapabilities
-import android.os.Build
import kotlinx.coroutines.channels.awaitClose
import kotlinx.coroutines.flow.callbackFlow
@@ -17,11 +12,7 @@ data class NetworkState(
val isValidated: Boolean,
val isWifi: Boolean,
) {
- val isOnline = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
- isConnected && isValidated
- } else {
- isConnected
- }
+ val isOnline = isConnected && isValidated
}
@Suppress("DEPRECATION")
@@ -34,34 +25,18 @@ fun Context.activeNetworkState(): NetworkState {
)
}
-@Suppress("DEPRECATION")
fun Context.networkStateFlow() = callbackFlow {
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
- val networkCallback = object : NetworkCallback() {
- override fun onCapabilitiesChanged(network: Network, networkCapabilities: NetworkCapabilities) {
- trySend(activeNetworkState())
- }
- override fun onLost(network: Network) {
- trySend(activeNetworkState())
- }
+ val networkCallback = object : NetworkCallback() {
+ override fun onCapabilitiesChanged(network: Network, networkCapabilities: NetworkCapabilities) {
+ trySend(activeNetworkState())
}
-
- connectivityManager.registerDefaultNetworkCallback(networkCallback)
- awaitClose {
- connectivityManager.unregisterNetworkCallback(networkCallback)
- }
- } else {
- val receiver = object : BroadcastReceiver() {
- override fun onReceive(context: Context, intent: Intent) {
- if (intent.action == ConnectivityManager.CONNECTIVITY_ACTION) {
- trySend(activeNetworkState())
- }
- }
- }
-
- registerReceiver(receiver, IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION))
- awaitClose {
- unregisterReceiver(receiver)
+ override fun onLost(network: Network) {
+ trySend(activeNetworkState())
}
}
+
+ connectivityManager.registerDefaultNetworkCallback(networkCallback)
+ awaitClose {
+ connectivityManager.unregisterNetworkCallback(networkCallback)
+ }
}
diff --git a/app/src/main/res/drawable-v26/sc_collections_bookmark_48dp.xml b/app/src/main/res/drawable-v26/sc_collections_bookmark_48dp.xml
deleted file mode 100644
index fd2784fbb..000000000
--- a/app/src/main/res/drawable-v26/sc_collections_bookmark_48dp.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/app/src/main/res/drawable-v26/sc_explore_48dp.xml b/app/src/main/res/drawable-v26/sc_explore_48dp.xml
deleted file mode 100644
index 9737e6031..000000000
--- a/app/src/main/res/drawable-v26/sc_explore_48dp.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
diff --git a/app/src/main/res/drawable-v26/sc_history_48dp.xml b/app/src/main/res/drawable-v26/sc_history_48dp.xml
deleted file mode 100644
index f8b0ff94a..000000000
--- a/app/src/main/res/drawable-v26/sc_history_48dp.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
diff --git a/app/src/main/res/drawable-v26/sc_new_releases_48dp.xml b/app/src/main/res/drawable-v26/sc_new_releases_48dp.xml
deleted file mode 100644
index 256f5ff8f..000000000
--- a/app/src/main/res/drawable-v26/sc_new_releases_48dp.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
diff --git a/app/src/main/res/drawable/sc_collections_bookmark_48dp.xml b/app/src/main/res/drawable/sc_collections_bookmark_48dp.xml
index d45e333f7..fd2784fbb 100644
--- a/app/src/main/res/drawable/sc_collections_bookmark_48dp.xml
+++ b/app/src/main/res/drawable/sc_collections_bookmark_48dp.xml
@@ -1,24 +1,24 @@
-
-
-
-
-
-
-
-
-
+ tools:keep="@drawable/sc_collections_bookmark_48dp">
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/sc_explore_48dp.xml b/app/src/main/res/drawable/sc_explore_48dp.xml
index bc97eb259..9737e6031 100644
--- a/app/src/main/res/drawable/sc_explore_48dp.xml
+++ b/app/src/main/res/drawable/sc_explore_48dp.xml
@@ -1,21 +1,21 @@
-
-
-
-
-
-
-
-
+ tools:keep="@drawable/sc_explore_48dp">
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/sc_history_48dp.xml b/app/src/main/res/drawable/sc_history_48dp.xml
index 3ee54e497..f8b0ff94a 100644
--- a/app/src/main/res/drawable/sc_history_48dp.xml
+++ b/app/src/main/res/drawable/sc_history_48dp.xml
@@ -1,21 +1,21 @@
-
-
-
-
-
-
-
-
+ tools:keep="@drawable/sc_history_48dp">
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/sc_new_releases_48dp.xml b/app/src/main/res/drawable/sc_new_releases_48dp.xml
index 20d04862c..256f5ff8f 100644
--- a/app/src/main/res/drawable/sc_new_releases_48dp.xml
+++ b/app/src/main/res/drawable/sc_new_releases_48dp.xml
@@ -1,21 +1,21 @@
-
-
-
-
-
-
-
-
+ tools:keep="@drawable/sc_new_releases_48dp">
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/main/res/mipmap/ic_launcher.xml
similarity index 100%
rename from app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
rename to app/src/main/res/mipmap/ic_launcher.xml
diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/main/res/mipmap/ic_launcher_round.xml
similarity index 100%
rename from app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
rename to app/src/main/res/mipmap/ic_launcher_round.xml
diff --git a/buildSrc/src/main/kotlin/mihon/buildlogic/AndroidConfig.kt b/buildSrc/src/main/kotlin/mihon/buildlogic/AndroidConfig.kt
index 17e124f39..afea120de 100644
--- a/buildSrc/src/main/kotlin/mihon/buildlogic/AndroidConfig.kt
+++ b/buildSrc/src/main/kotlin/mihon/buildlogic/AndroidConfig.kt
@@ -5,7 +5,7 @@ import org.gradle.api.JavaVersion as GradleJavaVersion
object AndroidConfig {
const val COMPILE_SDK = 34
const val TARGET_SDK = 34
- const val MIN_SDK = 23
+ const val MIN_SDK = 26
const val NDK = "26.1.10909125"
val JavaVersion = GradleJavaVersion.VERSION_17
}
diff --git a/core/common/src/main/kotlin/eu/kanade/tachiyomi/util/system/WebViewClientCompat.kt b/core/common/src/main/kotlin/eu/kanade/tachiyomi/util/system/WebViewClientCompat.kt
index 93ce0337d..6547a46e0 100644
--- a/core/common/src/main/kotlin/eu/kanade/tachiyomi/util/system/WebViewClientCompat.kt
+++ b/core/common/src/main/kotlin/eu/kanade/tachiyomi/util/system/WebViewClientCompat.kt
@@ -1,7 +1,5 @@
package eu.kanade.tachiyomi.util.system
-import android.annotation.TargetApi
-import android.os.Build
import android.webkit.WebResourceError
import android.webkit.WebResourceRequest
import android.webkit.WebResourceResponse
@@ -28,7 +26,6 @@ abstract class WebViewClientCompat : WebViewClient() {
) {
}
- @TargetApi(Build.VERSION_CODES.N)
final override fun shouldOverrideUrlLoading(
view: WebView,
request: WebResourceRequest,
diff --git a/core/common/src/main/kotlin/eu/kanade/tachiyomi/util/system/WebViewUtil.kt b/core/common/src/main/kotlin/eu/kanade/tachiyomi/util/system/WebViewUtil.kt
index a61384362..b059e15d4 100644
--- a/core/common/src/main/kotlin/eu/kanade/tachiyomi/util/system/WebViewUtil.kt
+++ b/core/common/src/main/kotlin/eu/kanade/tachiyomi/util/system/WebViewUtil.kt
@@ -3,7 +3,6 @@ package eu.kanade.tachiyomi.util.system
import android.annotation.SuppressLint
import android.content.Context
import android.content.pm.PackageManager
-import android.os.Build
import android.webkit.CookieManager
import android.webkit.WebSettings
import android.webkit.WebView
@@ -35,15 +34,11 @@ object WebViewUtil {
}
fun getVersion(context: Context): String {
- return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
- val webView = WebView.getCurrentWebViewPackage() ?: return "how did you get here?"
- val pm = context.packageManager
- val label = webView.applicationInfo.loadLabel(pm)
- val version = webView.versionName
- "$label $version"
- } else {
- "Unknown"
- }
+ val webView = WebView.getCurrentWebViewPackage() ?: return "how did you get here?"
+ val pm = context.packageManager
+ val label = webView.applicationInfo.loadLabel(pm)
+ val version = webView.versionName
+ return "$label $version"
}
fun supportsWebView(context: Context): Boolean {