diff --git a/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/MediaProviderSelectionScreen.kt b/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/MediaProviderSelectionScreen.kt index ba39b8f16..580fb4260 100644 --- a/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/MediaProviderSelectionScreen.kt +++ b/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/MediaProviderSelectionScreen.kt @@ -56,6 +56,7 @@ import com.simplecityapps.shuttle.ui.screens.onboarding.OnboardingPage import com.simplecityapps.shuttle.ui.screens.onboarding.OnboardingParent import com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.emby.EmbyConfigurationDialog import com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialog +import com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib.DirectorySelectionDialog import com.simplecityapps.shuttle.ui.snapshot.Snapshot import com.simplecityapps.shuttle.ui.theme.AppTheme import com.simplecityapps.shuttle.ui.theme.ColorSchemePreviewParameterProvider @@ -105,8 +106,8 @@ private fun MediaProviderSelectionScreen( if (configureMediaProvider != null) { when (configureMediaProvider!!) { - MediaProviderType.Shuttle -> TODO() - MediaProviderType.MediaStore -> TODO() + MediaProviderType.Shuttle -> DirectorySelectionDialog(onDismissRequest = viewModel::onConsumeConfigureMediaProvider) + MediaProviderType.MediaStore -> Unit MediaProviderType.Emby -> EmbyConfigurationDialog(onDismissRequest = viewModel::onConsumeConfigureMediaProvider) MediaProviderType.Jellyfin -> TODO() MediaProviderType.Plex -> PlexConfigurationDialog(onDismissRequest = viewModel::onConsumeConfigureMediaProvider) diff --git a/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/taglib/DirectorySelectionDialog.kt b/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/taglib/DirectorySelectionDialog.kt new file mode 100644 index 000000000..1f713704d --- /dev/null +++ b/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/taglib/DirectorySelectionDialog.kt @@ -0,0 +1,257 @@ +package com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib + +import android.net.Uri +import androidx.activity.compose.rememberLauncherForActivityResult +import androidx.activity.result.contract.ActivityResultContracts +import androidx.compose.animation.AnimatedContent +import androidx.compose.animation.AnimatedVisibility +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.heightIn +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.items +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.Close +import androidx.compose.material.icons.outlined.Folder +import androidx.compose.material3.AlertDialog +import androidx.compose.material3.CircularProgressIndicator +import androidx.compose.material3.ColorScheme +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.tooling.preview.PreviewParameter +import androidx.compose.ui.unit.dp +import androidx.core.net.toUri +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel +import androidx.lifecycle.compose.collectAsStateWithLifecycle +import com.simplecityapps.saf.DocumentNodeTree +import com.simplecityapps.shuttle.R +import com.simplecityapps.shuttle.ui.snapshot.Snapshot +import com.simplecityapps.shuttle.ui.theme.ColorSchemePreviewParameterProvider + +@Composable +fun DirectorySelectionDialog( + onDismissRequest: () -> Unit, + modifier: Modifier = Modifier, + viewModel: DirectorySelectionViewModel = hiltViewModel() +) { + val contentResolver = LocalContext.current.contentResolver + val viewState by viewModel.viewState.collectAsStateWithLifecycle() + val directoryLauncher = rememberLauncherForActivityResult( + contract = ActivityResultContracts.OpenDocumentTree() + ) { uri -> + uri?.let { safeUri -> viewModel.handleSafResult(contentResolver, safeUri) } + } + LaunchedEffect(Unit) { + viewModel.onInitializeConfiguration() + } + DirectorySelectionDialog( + modifier = modifier, + viewState = viewState, + onDoneClick = onDismissRequest, + onDismissRequest = onDismissRequest, + onRemoveDirectoryClick = viewModel::removeItem, + onAddDirectoryClick = { directoryLauncher.launch(null) } + ) +} + +@Composable +private fun DirectorySelectionDialog( + viewState: DirectorySelectionViewState, + onDoneClick: () -> Unit, + onDismissRequest: () -> Unit, + onAddDirectoryClick: () -> Unit, + onRemoveDirectoryClick: (DirectorySelectionContract.Directory) -> Unit, + modifier: Modifier = Modifier +) { + AlertDialog( + modifier = modifier, + onDismissRequest = onDismissRequest, + title = { + Text(text = stringResource(R.string.onboarding_directories_dialog_add_title)) + }, + text = { + AnimatedContent(targetState = viewState.directories) { directories -> + if (directories.isEmpty()) { + EmptyDirectoryState() + } else { + DirectoryList( + directories = viewState.directories, + onRemoveClick = onRemoveDirectoryClick + ) + } + } + }, + dismissButton = { + TextButton(onClick = onAddDirectoryClick) { + Text(text = stringResource(R.string.onboarding_directories_dialog_add_button)) + } + }, + confirmButton = { + TextButton( + onClick = onDoneClick, + enabled = viewState.isTraversalComplete + ) { + Text(text = stringResource(R.string.dialog_button_done)) + } + } + ) +} + +@Composable +private fun EmptyDirectoryState( + modifier: Modifier = Modifier +) { + Box( + modifier = modifier + .fillMaxWidth() + .padding(vertical = 24.dp) + ) { + Text( + style = MaterialTheme.typography.bodyLarge, + color = MaterialTheme.colorScheme.onSurfaceVariant, + text = stringResource(R.string.onboarding_directories_add_directories_help_text) + ) + } +} + +@Composable +private fun DirectoryList( + directories: List, + onRemoveClick: (DirectorySelectionContract.Directory) -> Unit, + modifier: Modifier = Modifier +) { + LazyColumn( + modifier = modifier.heightIn(max = 300.dp), + verticalArrangement = Arrangement.spacedBy(8.dp) + ) { + items(items = directories) { directory -> + DirectoryItem( + directory = directory, + onRemoveClick = { onRemoveClick(directory) } + ) + } + } +} + +@Composable +private fun DirectoryItem( + directory: DirectorySelectionContract.Directory, + onRemoveClick: () -> Unit, + modifier: Modifier = Modifier +) { + Row( + modifier = modifier.fillMaxWidth(), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.spacedBy(12.dp) + ) { + Icon( + contentDescription = null, + imageVector = Icons.Outlined.Folder, + tint = MaterialTheme.colorScheme.primary + ) + + Column(modifier = Modifier.weight(1f)) { + Text( + text = directory.tree.displayName, + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.onSurface + ) + Text( + maxLines = 1, + text = directory.tree.rootUri.toString(), + style = MaterialTheme.typography.bodySmall, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + } + + AnimatedVisibility(visible = !directory.traversalComplete) { + CircularProgressIndicator( + modifier = Modifier + .padding(8.dp) + .size(16.dp), + strokeWidth = 2.dp + ) + } + + IconButton(onClick = onRemoveClick) { + Icon( + contentDescription = null, + imageVector = Icons.Default.Close, + tint = MaterialTheme.colorScheme.onSurfaceVariant + ) + } + } +} + +@Snapshot +@Preview +@Composable +private fun Empty(@PreviewParameter(ColorSchemePreviewParameterProvider::class) colorScheme: ColorScheme) { + MaterialTheme(colorScheme = colorScheme) { + DirectorySelectionDialog( + onDismissRequest = {}, + viewState = DirectorySelectionViewState( + directories = emptyList(), + isTraversalComplete = true + ), + onAddDirectoryClick = {}, + onRemoveDirectoryClick = {}, + onDoneClick = {} + ) + } +} + +@Snapshot +@Preview +@Composable +private fun Success(@PreviewParameter(ColorSchemePreviewParameterProvider::class) colorScheme: ColorScheme) { + MaterialTheme(colorScheme = colorScheme) { + DirectorySelectionDialog( + onDismissRequest = {}, + viewState = DirectorySelectionViewState( + directories = listOf( + DirectorySelectionContract.Directory( + tree = DocumentNodeTree( + uri = Uri.EMPTY, + rootUri = "/my_music".toUri(), + documentId = "1", + displayName = "My Music", + mimeType = ".mp3" + ), + traversalComplete = false + ), + DirectorySelectionContract.Directory( + tree = DocumentNodeTree( + uri = Uri.EMPTY, + rootUri = "/my_audiobooks".toUri(), + documentId = "2", + displayName = "My Audiobooks", + mimeType = ".mp3" + ), + traversalComplete = true + ) + ), + isTraversalComplete = true + ), + onAddDirectoryClick = {}, + onRemoveDirectoryClick = {}, + onDoneClick = {} + ) + } +} diff --git a/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/taglib/DirectorySelectionPresenter.kt b/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/taglib/DirectorySelectionPresenter.kt index b27eef08e..db683706b 100644 --- a/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/taglib/DirectorySelectionPresenter.kt +++ b/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/taglib/DirectorySelectionPresenter.kt @@ -16,7 +16,7 @@ import kotlinx.coroutines.launch import timber.log.Timber interface DirectorySelectionContract { - data class Directory(val tree: DocumentNodeTree, val traversalComplete: Boolean, val hasWritePermission: Boolean) + data class Directory(val tree: DocumentNodeTree, val traversalComplete: Boolean) interface Presenter : BaseContract.Presenter { fun loadData(contentResolver: ContentResolver) @@ -58,7 +58,7 @@ constructor( setData(data) } else { uris.forEach { uriPermission -> - parseUri(contentResolver, uriPermission.uri, uriPermission.isWritePermission) + parseUri(contentResolver, uriPermission.uri) } } } @@ -79,7 +79,7 @@ constructor( ) { intent.data?.let { uri -> contentResolver.takePersistableUriPermission(uri, intent.flags and (Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION)) - parseUri(contentResolver, uri, true) + parseUri(contentResolver, uri) } } @@ -95,8 +95,7 @@ constructor( private fun parseUri( contentResolver: ContentResolver, - uri: Uri, - hasWritePermission: Boolean + uri: Uri ) { appCoroutineScope.launch { SafDirectoryHelper.buildFolderNodeTree(contentResolver, uri) @@ -104,8 +103,7 @@ constructor( val directory = DirectorySelectionContract.Directory( tree = treeStatus.tree, - traversalComplete = treeStatus is SafDirectoryHelper.TreeStatus.Complete, - hasWritePermission = hasWritePermission + traversalComplete = treeStatus is SafDirectoryHelper.TreeStatus.Complete ) val index = data.indexOfFirst { it.tree == treeStatus.tree } if (index == -1) { diff --git a/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/taglib/DirectorySelectionViewModel.kt b/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/taglib/DirectorySelectionViewModel.kt new file mode 100644 index 000000000..78028320a --- /dev/null +++ b/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/taglib/DirectorySelectionViewModel.kt @@ -0,0 +1,92 @@ +package com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib + +import android.content.ContentResolver +import android.content.Context +import android.content.Intent +import android.net.Uri +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import com.simplecityapps.saf.SafDirectoryHelper +import dagger.hilt.android.lifecycle.HiltViewModel +import dagger.hilt.android.qualifiers.ApplicationContext +import javax.inject.Inject +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.stateIn +import kotlinx.coroutines.flow.update +import kotlinx.coroutines.launch + +@HiltViewModel +class DirectorySelectionViewModel @Inject constructor( + @param:ApplicationContext private val context: Context +) : ViewModel() { + + private val _viewState = MutableStateFlow(DirectorySelectionViewState.Empty) + val viewState = _viewState.map { state -> + state.copy( + isTraversalComplete = state.directories.all( + DirectorySelectionContract.Directory::traversalComplete + ) + ) + }.stateIn( + scope = viewModelScope, + started = SharingStarted.WhileSubscribed(), + initialValue = DirectorySelectionViewState.Empty + ) + + fun onInitializeConfiguration() { + val contentResolver = context.contentResolver + context.contentResolver.persistedUriPermissions + .filter { permission -> + permission.isWritePermission || permission.isReadPermission + } + .forEach { permission -> + parseUri(contentResolver, permission.uri) + } + } + + fun handleSafResult( + contentResolver: ContentResolver, + uri: Uri + ) { + val flags = Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION + contentResolver.takePersistableUriPermission(uri, flags) + parseUri(contentResolver, uri) + } + + fun removeItem(directory: DirectorySelectionContract.Directory) { + val flags = Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION + context.contentResolver.releasePersistableUriPermission(directory.tree.rootUri, flags) + _viewState.update { state -> + state.copy(directories = state.directories - directory) + } + } + + private fun parseUri( + contentResolver: ContentResolver, + uri: Uri + ) { + viewModelScope.launch { + SafDirectoryHelper.buildFolderNodeTree(contentResolver, uri) + .collect { treeStatus -> + val directory = DirectorySelectionContract.Directory( + tree = treeStatus.tree, + traversalComplete = treeStatus is SafDirectoryHelper.TreeStatus.Complete + ) + _viewState.update { state -> + val currentList = state.directories.toMutableList() + val index = currentList.indexOfFirst { + it.tree.rootUri == directory.tree.rootUri + } + if (index == -1) { + currentList += directory + } else { + currentList[index] = directory + } + state.copy(directories = currentList) + } + } + } + } +} diff --git a/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/taglib/DirectorySelectionViewState.kt b/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/taglib/DirectorySelectionViewState.kt new file mode 100644 index 000000000..cfa886458 --- /dev/null +++ b/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/taglib/DirectorySelectionViewState.kt @@ -0,0 +1,13 @@ +package com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib + +data class DirectorySelectionViewState( + val directories: List, + val isTraversalComplete: Boolean +) { + companion object { + val Empty = DirectorySelectionViewState( + directories = emptyList(), + isTraversalComplete = false + ) + } +} diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib.DirectorySelectionDialogKt_Empty_ColorScheme_0].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib.DirectorySelectionDialogKt_Empty_ColorScheme_0].png new file mode 100644 index 000000000..b2df23dbf --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib.DirectorySelectionDialogKt_Empty_ColorScheme_0].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:192ac8539c0f4606cffde74696ca8953b6a6d8ce075d23e690ba44868c17fdef +size 25809 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib.DirectorySelectionDialogKt_Empty_ColorScheme_10].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib.DirectorySelectionDialogKt_Empty_ColorScheme_10].png new file mode 100644 index 000000000..a4ea3e602 --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib.DirectorySelectionDialogKt_Empty_ColorScheme_10].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ce2e4c9b189f6f46e50cb84f0d5345c74486a0704d155d441b197b3b5be9d496 +size 25890 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib.DirectorySelectionDialogKt_Empty_ColorScheme_11].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib.DirectorySelectionDialogKt_Empty_ColorScheme_11].png new file mode 100644 index 000000000..cd0b1cffb --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib.DirectorySelectionDialogKt_Empty_ColorScheme_11].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f2c0990b62d8c786b03a7f175083c5a4372246a217096c11541749a1e2dc1518 +size 25631 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib.DirectorySelectionDialogKt_Empty_ColorScheme_1].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib.DirectorySelectionDialogKt_Empty_ColorScheme_1].png new file mode 100644 index 000000000..55e78c15e --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib.DirectorySelectionDialogKt_Empty_ColorScheme_1].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bbb40d0fb1a2a14e29f92900fa3b9b6ea8a5336f0af386431b19ddbcd6fe1f10 +size 25511 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib.DirectorySelectionDialogKt_Empty_ColorScheme_2].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib.DirectorySelectionDialogKt_Empty_ColorScheme_2].png new file mode 100644 index 000000000..9129526ac --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib.DirectorySelectionDialogKt_Empty_ColorScheme_2].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b454d3dd9de397b6d22041753cabd8e7b3fe01ccca2168e96dd8446a28e635ad +size 25686 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib.DirectorySelectionDialogKt_Empty_ColorScheme_3].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib.DirectorySelectionDialogKt_Empty_ColorScheme_3].png new file mode 100644 index 000000000..89d17262f --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib.DirectorySelectionDialogKt_Empty_ColorScheme_3].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ed85b2f27427d4ef8fcee2dc007bedffef1aa0988489480906bc18859a120426 +size 25351 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib.DirectorySelectionDialogKt_Empty_ColorScheme_4].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib.DirectorySelectionDialogKt_Empty_ColorScheme_4].png new file mode 100644 index 000000000..ed83cde7c --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib.DirectorySelectionDialogKt_Empty_ColorScheme_4].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:30f99be52fe250c39d6df4c4ed257b480df24c0867afacebf201bb739370bec6 +size 25329 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib.DirectorySelectionDialogKt_Empty_ColorScheme_5].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib.DirectorySelectionDialogKt_Empty_ColorScheme_5].png new file mode 100644 index 000000000..109ee3702 --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib.DirectorySelectionDialogKt_Empty_ColorScheme_5].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9185f8f3f596f561c3067c90c70574788c829e5ddb54ed43dec1b1a1367335bc +size 25086 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib.DirectorySelectionDialogKt_Empty_ColorScheme_6].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib.DirectorySelectionDialogKt_Empty_ColorScheme_6].png new file mode 100644 index 000000000..e2554d55e --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib.DirectorySelectionDialogKt_Empty_ColorScheme_6].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:70f74b95f6f009d911b6015b1c199b6bbcc0c17e2bad1f0256e6ed9eb62d9178 +size 25830 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib.DirectorySelectionDialogKt_Empty_ColorScheme_7].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib.DirectorySelectionDialogKt_Empty_ColorScheme_7].png new file mode 100644 index 000000000..735e6e687 --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib.DirectorySelectionDialogKt_Empty_ColorScheme_7].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:779ddb802c623a2c838b38697c7f95c3a1e3b92c8532cab8207f2207c9ee7ded +size 25477 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib.DirectorySelectionDialogKt_Empty_ColorScheme_8].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib.DirectorySelectionDialogKt_Empty_ColorScheme_8].png new file mode 100644 index 000000000..03c6b5d99 --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib.DirectorySelectionDialogKt_Empty_ColorScheme_8].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0581bf5b3faed6946341e71d565e63c84f7c1b52148751906d32e9611d44858d +size 25460 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib.DirectorySelectionDialogKt_Empty_ColorScheme_9].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib.DirectorySelectionDialogKt_Empty_ColorScheme_9].png new file mode 100644 index 000000000..1a23f36c9 --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib.DirectorySelectionDialogKt_Empty_ColorScheme_9].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3bfaa7dcfe45e3d8fa71df82e8bb7358934a3dcffd4381220337fd1a047c5006 +size 25110 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib.DirectorySelectionDialogKt_Success_ColorScheme_0].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib.DirectorySelectionDialogKt_Success_ColorScheme_0].png new file mode 100644 index 000000000..b254129a7 --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib.DirectorySelectionDialogKt_Success_ColorScheme_0].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3e71217b1105bf1bd5302488bfa4f9476928bcdaf78fe21b432b7988762ff962 +size 20485 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib.DirectorySelectionDialogKt_Success_ColorScheme_10].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib.DirectorySelectionDialogKt_Success_ColorScheme_10].png new file mode 100644 index 000000000..9a2e399a9 --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib.DirectorySelectionDialogKt_Success_ColorScheme_10].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:31dd2bc52c552fd8e9402997422583de5129a744cb603e6eac87c144b5d47933 +size 20622 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib.DirectorySelectionDialogKt_Success_ColorScheme_11].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib.DirectorySelectionDialogKt_Success_ColorScheme_11].png new file mode 100644 index 000000000..f40fc778a --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib.DirectorySelectionDialogKt_Success_ColorScheme_11].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b68580df11e476183e538fb818f5dcb861fa2ee87cfcc2a8aa991f42fdf3c55d +size 20283 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib.DirectorySelectionDialogKt_Success_ColorScheme_1].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib.DirectorySelectionDialogKt_Success_ColorScheme_1].png new file mode 100644 index 000000000..cc4165504 --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib.DirectorySelectionDialogKt_Success_ColorScheme_1].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:891ab03abe239cbff84ffbc13bb98959ded0afa431dba774a209673e55f44f65 +size 19964 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib.DirectorySelectionDialogKt_Success_ColorScheme_2].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib.DirectorySelectionDialogKt_Success_ColorScheme_2].png new file mode 100644 index 000000000..5ccb709ec --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib.DirectorySelectionDialogKt_Success_ColorScheme_2].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3337392a34f25e0490da5b884d86cb45ff40c003ff09e111bc28403c9387d534 +size 20415 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib.DirectorySelectionDialogKt_Success_ColorScheme_3].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib.DirectorySelectionDialogKt_Success_ColorScheme_3].png new file mode 100644 index 000000000..7cab56805 --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib.DirectorySelectionDialogKt_Success_ColorScheme_3].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7c3f25a2779541bb787441992422708bb573baa443708abbc57586cd29385ed9 +size 19780 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib.DirectorySelectionDialogKt_Success_ColorScheme_4].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib.DirectorySelectionDialogKt_Success_ColorScheme_4].png new file mode 100644 index 000000000..cb2e34bf3 --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib.DirectorySelectionDialogKt_Success_ColorScheme_4].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0e3970f749eaf24e5c809f95f2f0bf7f199c6a959e5732d50400262c6fef3207 +size 19681 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib.DirectorySelectionDialogKt_Success_ColorScheme_5].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib.DirectorySelectionDialogKt_Success_ColorScheme_5].png new file mode 100644 index 000000000..35dca9171 --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib.DirectorySelectionDialogKt_Success_ColorScheme_5].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b01bc54ae8943a54e68f8d0abf157d8a71757af4e92abdd1b23fec60b1ca1228 +size 19558 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib.DirectorySelectionDialogKt_Success_ColorScheme_6].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib.DirectorySelectionDialogKt_Success_ColorScheme_6].png new file mode 100644 index 000000000..225a51607 --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib.DirectorySelectionDialogKt_Success_ColorScheme_6].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:21926fc426a12ad15e895797395459af52088d75eac9620afee53550c6e0533a +size 20560 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib.DirectorySelectionDialogKt_Success_ColorScheme_7].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib.DirectorySelectionDialogKt_Success_ColorScheme_7].png new file mode 100644 index 000000000..6716d3cc0 --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib.DirectorySelectionDialogKt_Success_ColorScheme_7].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2ec0512e47873af764ba7802daa5268f23cac5e3d9ef89ce1ba2c7730487b3a4 +size 19906 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib.DirectorySelectionDialogKt_Success_ColorScheme_8].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib.DirectorySelectionDialogKt_Success_ColorScheme_8].png new file mode 100644 index 000000000..0098ac5db --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib.DirectorySelectionDialogKt_Success_ColorScheme_8].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6f9848d745c2921d262b5972145d5c729f563d80c7ef58e15a5d3a56eac5e326 +size 20155 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib.DirectorySelectionDialogKt_Success_ColorScheme_9].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib.DirectorySelectionDialogKt_Success_ColorScheme_9].png new file mode 100644 index 000000000..1465ec615 --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib.DirectorySelectionDialogKt_Success_ColorScheme_9].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4e1cf7dd491adf166d5d62ec5f2741c845b1910cda993d67c2d798c996fbeb6f +size 19434