refactor: Reduce duplicate code

This commit is contained in:
Ahmad Ansori Palembani 2024-06-12 07:35:27 +07:00
parent bde3f25fe9
commit 568f0e8c37
Signed by: null2264
GPG key ID: BA64F8B60AF3EFB6
3 changed files with 33 additions and 39 deletions

View file

@ -26,6 +26,7 @@ import androidx.compose.ui.res.stringResource
import com.hippo.unifile.UniFile
import dev.yokai.domain.storage.StoragePreferences
import dev.yokai.presentation.component.preference.storageLocationText
import dev.yokai.presentation.settings.screen.data.storageLocationPicker
import dev.yokai.presentation.theme.Size
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.core.preference.Preference
@ -100,23 +101,3 @@ internal class StorageStep : OnboardingStep {
}
}
}
@Composable
fun storageLocationPicker(
storageDirPref: Preference<String>,
): ManagedActivityResultLauncher<Uri?, Uri?> {
val context = LocalContext.current
return rememberLauncherForActivityResult(
contract = ActivityResultContracts.OpenDocumentTree(),
) { uri ->
if (uri != null) {
val flags =
Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION
context.tryTakePersistableUriPermission(uri, flags)
UniFile.fromUri(context, uri)?.let { storageDirPref.set(it.uri.toString()) }
}
}
}

View file

@ -38,6 +38,7 @@ import dev.yokai.presentation.settings.ComposableSettings
import dev.yokai.presentation.settings.screen.data.CreateBackup
import dev.yokai.presentation.settings.screen.data.RestoreBackup
import dev.yokai.presentation.settings.screen.data.StorageInfo
import dev.yokai.presentation.settings.screen.data.storageLocationPicker
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.backup.BackupFileValidator
import eu.kanade.tachiyomi.data.backup.create.BackupCreatorJob
@ -77,25 +78,6 @@ object SettingsDataScreen : ComposableSettings {
)
}
@Composable
private fun storageLocationPicker(
baseStorageDirectory: eu.kanade.tachiyomi.core.preference.Preference<String>,
): ManagedActivityResultLauncher<Uri?, Uri?> {
val context = LocalContext.current
return rememberLauncherForActivityResult(contract = ActivityResultContracts.OpenDocumentTree()) { uri ->
if (uri != null) {
val flags = Intent.FLAG_GRANT_READ_URI_PERMISSION or
Intent.FLAG_GRANT_WRITE_URI_PERMISSION
context.tryTakePersistableUriPermission(uri, flags)
UniFile.fromUri(context, uri)?.let {
baseStorageDirectory.set(it.uri.toString())
}
}
}
}
@Composable
private fun getStorageLocationPreference(storagePreferences: StoragePreferences): Preference.PreferenceItem.TextPreference {
val context = LocalContext.current

View file

@ -0,0 +1,31 @@
package dev.yokai.presentation.settings.screen.data
import android.content.Intent
import android.net.Uri
import androidx.activity.compose.ManagedActivityResultLauncher
import androidx.activity.compose.rememberLauncherForActivityResult
import androidx.activity.result.contract.ActivityResultContracts
import androidx.compose.runtime.Composable
import androidx.compose.ui.platform.LocalContext
import com.hippo.unifile.UniFile
import eu.kanade.tachiyomi.core.preference.Preference
import eu.kanade.tachiyomi.util.system.tryTakePersistableUriPermission
@Composable
fun storageLocationPicker(
baseStorageDirectory: Preference<String>,
): ManagedActivityResultLauncher<Uri?, Uri?> {
val context = LocalContext.current
return rememberLauncherForActivityResult(contract = ActivityResultContracts.OpenDocumentTree()) { uri ->
if (uri != null) {
val flags = Intent.FLAG_GRANT_READ_URI_PERMISSION or
Intent.FLAG_GRANT_WRITE_URI_PERMISSION
context.tryTakePersistableUriPermission(uri, flags)
UniFile.fromUri(context, uri)?.let {
baseStorageDirectory.set(it.uri.toString())
}
}
}
}