diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d252d6436..1eb6155b9 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -8,9 +8,18 @@
+
+ android:maxSdkVersion="28" />
+
+
+
+
@@ -265,7 +274,6 @@
diff --git a/app/src/main/java/eu/kanade/presentation/more/onboarding/PermissionStep.kt b/app/src/main/java/eu/kanade/presentation/more/onboarding/PermissionStep.kt
index 8b3d9c07b..0fdbf70a5 100644
--- a/app/src/main/java/eu/kanade/presentation/more/onboarding/PermissionStep.kt
+++ b/app/src/main/java/eu/kanade/presentation/more/onboarding/PermissionStep.kt
@@ -36,6 +36,7 @@ import androidx.lifecycle.compose.LocalLifecycleOwner
import eu.kanade.presentation.util.rememberRequestPackageInstallsPermissionState
import eu.kanade.tachiyomi.util.system.launchRequestPackageInstallsPermission
import tachiyomi.i18n.MR
+import tachiyomi.i18n.kmk.KMR
import tachiyomi.presentation.core.i18n.stringResource
import tachiyomi.presentation.core.util.secondaryItemAlpha
@@ -44,6 +45,10 @@ internal class PermissionStep : OnboardingStep {
private var notificationGranted by mutableStateOf(false)
private var batteryGranted by mutableStateOf(false)
+ // KMK -->
+ private var externalStoragePermissionGranted by mutableStateOf(false)
+ // KMK <--
+
override val isComplete: Boolean = true
@Composable
@@ -64,6 +69,18 @@ internal class PermissionStep : OnboardingStep {
}
batteryGranted = context.getSystemService()!!
.isIgnoringBatteryOptimizations(context.packageName)
+ // KMK -->
+ externalStoragePermissionGranted = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
+ context.checkSelfPermission(Manifest.permission.READ_MEDIA_IMAGES) ==
+ PackageManager.PERMISSION_GRANTED
+ } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
+ context.checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) ==
+ PackageManager.PERMISSION_GRANTED
+ } else {
+ context.checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) ==
+ PackageManager.PERMISSION_GRANTED
+ }
+ // KMK <--
}
}
lifecycleOwner.lifecycle.addObserver(observer)
@@ -109,6 +126,49 @@ internal class PermissionStep : OnboardingStep {
context.startActivity(intent)
},
)
+
+ // KMK -->
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
+ val permissionRequester = rememberLauncherForActivityResult(
+ contract = ActivityResultContracts.RequestPermission(),
+ onResult = {
+ // no-op. resulting checks is being done on resume
+ },
+ )
+ PermissionItem(
+ title = stringResource(KMR.strings.onboarding_permission_external_storage),
+ subtitle = stringResource(KMR.strings.onboarding_permission_external_storage_description),
+ granted = externalStoragePermissionGranted,
+ onButtonClick = { permissionRequester.launch(Manifest.permission.READ_MEDIA_IMAGES) },
+ )
+ } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
+ val permissionRequester = rememberLauncherForActivityResult(
+ contract = ActivityResultContracts.RequestPermission(),
+ onResult = {
+ // no-op. resulting checks is being done on resume
+ },
+ )
+ PermissionItem(
+ title = stringResource(KMR.strings.onboarding_permission_external_storage),
+ subtitle = stringResource(KMR.strings.onboarding_permission_external_storage_description),
+ granted = externalStoragePermissionGranted,
+ onButtonClick = { permissionRequester.launch(Manifest.permission.READ_EXTERNAL_STORAGE) },
+ )
+ } else {
+ val permissionRequester = rememberLauncherForActivityResult(
+ contract = ActivityResultContracts.RequestPermission(),
+ onResult = {
+ // no-op. resulting checks is being done on resume
+ },
+ )
+ PermissionItem(
+ title = stringResource(KMR.strings.onboarding_permission_external_storage),
+ subtitle = stringResource(KMR.strings.onboarding_permission_writing_external_storage_description),
+ granted = externalStoragePermissionGranted,
+ onButtonClick = { permissionRequester.launch(Manifest.permission.WRITE_EXTERNAL_STORAGE) },
+ )
+ }
+ // KMK <--
}
}
diff --git a/i18n-kmk/src/commonMain/moko-resources/base/strings.xml b/i18n-kmk/src/commonMain/moko-resources/base/strings.xml
index b61401ae7..907c34ca5 100644
--- a/i18n-kmk/src/commonMain/moko-resources/base/strings.xml
+++ b/i18n-kmk/src/commonMain/moko-resources/base/strings.xml
@@ -58,13 +58,19 @@
Show restoring progress banner
Show syncing progress banner
-
+
+
Clean invalid downloads
Find and remove all downloads, files, folders which are not saved in your library
Invalid downloads cleaned
Avoid using Private Installer because it\'s not stable yet, will lead to really slow start/resume App.
Saved Searches & Feeds
+
+ Access media files permission
+ Allow using custom covers in entry's Edit Info
+ Allow saving covers & using custom covers in entry's Edit Info
+
What\'s coming (soon)