feat: Add onboarding permissions request for external storage
support save covers & using custom covers depends on the Android version
This commit is contained in:
parent
6739ad8d06
commit
c16ed41c2f
3 changed files with 77 additions and 3 deletions
|
|
@ -8,9 +8,18 @@
|
|||
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
|
||||
|
||||
<!-- Storage -->
|
||||
<!-- Permission to save cover into Pictures. It isn't required from API 29 -->
|
||||
<uses-permission
|
||||
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
|
||||
tools:ignore="ScopedStorage" />
|
||||
android:maxSdkVersion="28" />
|
||||
<!-- For access custom cover on Android 12 & below (API 32) -->
|
||||
<uses-permission
|
||||
android:name="android.permission.READ_EXTERNAL_STORAGE"
|
||||
android:maxSdkVersion="32" />
|
||||
<!-- For access custom cover from Android 13+ (API 33) -->
|
||||
<uses-permission
|
||||
android:name="android.permission.READ_MEDIA_IMAGES"
|
||||
tools:ignore="SelectedPhotoAccess" />
|
||||
|
||||
<!-- For background jobs -->
|
||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
||||
|
|
@ -265,7 +274,6 @@
|
|||
<!-- EH -->
|
||||
<activity
|
||||
android:name="exh.ui.intercept.InterceptActivity"
|
||||
android:label="@string/app_name"
|
||||
android:theme="@style/Theme.Tachiyomi"
|
||||
android:exported="true">
|
||||
<!-- E-Hentai -->
|
||||
|
|
|
|||
|
|
@ -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<PowerManager>()!!
|
||||
.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 <--
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -58,13 +58,19 @@
|
|||
<!-- Sync section -->
|
||||
<string name="pref_show_restoring_progress_banner">Show restoring progress banner</string>
|
||||
<string name="pref_show_syncing_progress_banner">Show syncing progress banner</string>
|
||||
<!-- Advanced section -->
|
||||
|
||||
<!-- Advanced section -->
|
||||
<string name="pref_clean_invalid_downloads">Clean invalid downloads</string>
|
||||
<string name="pref_clean_invalid_downloads_summary">Find and remove all downloads, files, folders which are not saved in your library</string>
|
||||
<string name="invalid_downloads_cleaned">Invalid downloads cleaned</string>
|
||||
<string name="pref_private_installer_warning">Avoid using Private Installer because it\'s not stable yet, will lead to really slow start/resume App.</string>
|
||||
<string name="saved_searches_feeds">Saved Searches & Feeds</string>
|
||||
|
||||
<!-- Onboarding section -->
|
||||
<string name="onboarding_permission_external_storage">Access media files permission</string>
|
||||
<string name="onboarding_permission_external_storage_description">Allow using custom covers in entry's Edit Info</string>
|
||||
<string name="onboarding_permission_writing_external_storage_description">Allow saving covers & using custom covers in entry's Edit Info</string>
|
||||
|
||||
<!-- About section -->
|
||||
<string name="whats_coming">What\'s coming (soon)</string>
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue