Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,10 @@ import com.simplecityapps.shuttle.R
import com.simplecityapps.shuttle.persistence.GeneralPreferenceManager
import com.simplecityapps.shuttle.ui.common.autoCleared
import com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.MediaProviderSelectionFragment
import com.simplecityapps.shuttle.ui.screens.onboarding.permissions.StoragePermissionScreenFragment
import com.simplecityapps.shuttle.ui.screens.onboarding.privacy.AnalyticsPermissionScreenFragment
import com.simplecityapps.shuttle.ui.screens.onboarding.scanner.MediaScannerFragment
import com.simplecityapps.shuttle.ui.screens.onboarding.taglib.DirectorySelectionFragment
import com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.scanner.MediaScannerFragment
import com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib.DirectorySelectionFragment
import com.simplecityapps.shuttle.ui.screens.onboarding.permissions.privacy.AnalyticsPermissionScreenFragment
import com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenFragment
import dagger.hilt.android.AndroidEntryPoint
import javax.inject.Inject
import me.relex.circleindicator.CircleIndicator3
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,10 @@ import com.simplecityapps.shuttle.ui.screens.home.search.HeaderBinder
import com.simplecityapps.shuttle.ui.screens.onboarding.OnboardingChild
import com.simplecityapps.shuttle.ui.screens.onboarding.OnboardingPage
import com.simplecityapps.shuttle.ui.screens.onboarding.OnboardingParent
import com.simplecityapps.shuttle.ui.screens.onboarding.emby.EmbyConfigurationFragment
import com.simplecityapps.shuttle.ui.screens.onboarding.jellyfin.JellyfinConfigurationFragment
import com.simplecityapps.shuttle.ui.screens.onboarding.plex.PlexConfigurationFragment
import com.simplecityapps.shuttle.ui.screens.onboarding.taglib.DirectorySelectionFragment
import com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.emby.EmbyConfigurationFragment
import com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.jellyfin.JellyfinConfigurationFragment
import com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationFragment
import com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib.DirectorySelectionFragment
import com.squareup.phrase.Phrase
import dagger.hilt.android.AndroidEntryPoint
import javax.inject.Inject
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ import com.simplecityapps.shuttle.model.MediaProviderType
import com.simplecityapps.shuttle.ui.screens.onboarding.OnboardingChild
import com.simplecityapps.shuttle.ui.screens.onboarding.OnboardingPage
import com.simplecityapps.shuttle.ui.screens.onboarding.OnboardingParent
import com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialog
import com.simplecityapps.shuttle.ui.snapshot.Snapshot
import com.simplecityapps.shuttle.ui.theme.AppTheme
import com.simplecityapps.shuttle.ui.theme.ColorSchemePreviewParameterProvider
Expand Down Expand Up @@ -97,8 +98,20 @@ private fun MediaProviderSelectionScreen(
) {
val mediaProviders by viewModel.mediaProviders.collectAsStateWithLifecycle()
val unAddedMediaProviders by viewModel.unAddedMediaProviders.collectAsStateWithLifecycle()
val configureMediaProvider by viewModel.configureMediaProvider.collectAsStateWithLifecycle()
val showAddProviderDialog by viewModel.showAddMediaProviderDialog.collectAsStateWithLifecycle()
val showProviderOverflowMenu by viewModel.showProviderOverflowMenu.collectAsStateWithLifecycle()

if (configureMediaProvider != null) {
when (configureMediaProvider!!) {
MediaProviderType.Shuttle -> TODO()
MediaProviderType.MediaStore -> TODO()
MediaProviderType.Emby -> TODO()
MediaProviderType.Jellyfin -> TODO()
MediaProviderType.Plex -> PlexConfigurationDialog(onDismissRequest = viewModel::onConsumeConfigureMediaProvider)
}
}

MediaProviderSelectionScreen(
modifier = modifier,
mediaProviders = mediaProviders,
Expand All @@ -107,6 +120,7 @@ private fun MediaProviderSelectionScreen(
showProviderOverflowMenu = showProviderOverflowMenu,
onMediaProviderTypeClick = viewModel::onAddMediaProvider,
onRemoveProviderClick = viewModel::onRemoveMediaProvider,
onConfigureProviderClick = viewModel::onConfigureProviderClick,
onAddMediaProviderClick = viewModel::onAddMediaProviderClicked,
onProviderOverflowMenuClick = viewModel::onMediaProviderOverflowMenuClicked,
onDismissOverflowMenuRequest = viewModel::onDismissMediaProviderOverflowMenu,
Expand All @@ -124,6 +138,7 @@ private fun MediaProviderSelectionScreen(
onAddMediaProviderClick: () -> Unit,
onDismissOverflowMenuRequest: () -> Unit,
onDismissAddMediaProviderRequest: () -> Unit,
onConfigureProviderClick: (MediaProviderType) -> Unit,
onMediaProviderTypeClick: (MediaProviderType) -> Unit,
onProviderOverflowMenuClick: (MediaProviderType) -> Unit,
modifier: Modifier = Modifier
Expand Down Expand Up @@ -161,6 +176,7 @@ private fun MediaProviderSelectionScreen(
onRemoveProviderClick = onRemoveProviderClick,
onOverflowMenuClick = onProviderOverflowMenuClick,
showProviderOverflowMenu = showProviderOverflowMenu,
onConfigureProviderClick = onConfigureProviderClick,
onDismissOverflowMenuRequest = onDismissOverflowMenuRequest
)

Expand Down Expand Up @@ -238,6 +254,7 @@ private fun LazyMediaProviderTypeColumn(
onRemoveProviderClick: () -> Unit,
onDismissOverflowMenuRequest: () -> Unit,
onOverflowMenuClick: (MediaProviderType) -> Unit,
onConfigureProviderClick: (MediaProviderType) -> Unit,
modifier: Modifier = Modifier
) {
LazyColumn(
Expand All @@ -254,7 +271,8 @@ private fun LazyMediaProviderTypeColumn(
onRemoveProviderClick = onRemoveProviderClick,
onOverflowMenuClick = { onOverflowMenuClick(provider) },
onDismissOverflowMenuRequest = onDismissOverflowMenuRequest,
showProviderOverflowMenu = showProviderOverflowMenu == provider
showProviderOverflowMenu = showProviderOverflowMenu == provider,
onConfigureProviderClick = { onConfigureProviderClick(provider) }
)
}
}
Expand Down Expand Up @@ -285,6 +303,7 @@ private fun MediaProviderTypeItem(
showProviderOverflowMenu: Boolean,
onOverflowMenuClick: () -> Unit,
onRemoveProviderClick: () -> Unit,
onConfigureProviderClick: () -> Unit,
onDismissOverflowMenuRequest: () -> Unit,
modifier: Modifier = Modifier
) {
Expand All @@ -303,6 +322,12 @@ private fun MediaProviderTypeItem(
expanded = showProviderOverflowMenu,
onDismissRequest = onDismissOverflowMenuRequest
) {
if (provider != MediaProviderType.MediaStore) {
DropdownMenuItem(
onClick = onConfigureProviderClick,
text = { Text(stringResource(R.string.menu_title_media_provider_configure)) }
)
}
DropdownMenuItem(
onClick = onRemoveProviderClick,
text = { Text(stringResource(R.string.menu_title_remove)) }
Expand Down Expand Up @@ -350,6 +375,7 @@ private fun Preview(@PreviewParameter(ColorSchemePreviewParameterProvider::class
onRemoveProviderClick = {},
onAddMediaProviderClick = {},
onMediaProviderTypeClick = {},
onConfigureProviderClick = {},
onProviderOverflowMenuClick = {},
onDismissOverflowMenuRequest = {},
onDismissAddMediaProviderRequest = {},
Expand All @@ -370,6 +396,7 @@ private fun AddMediaProviderDialog(@PreviewParameter(ColorSchemePreviewParameter
onRemoveProviderClick = {},
onAddMediaProviderClick = {},
onMediaProviderTypeClick = {},
onConfigureProviderClick = {},
onProviderOverflowMenuClick = {},
onDismissOverflowMenuRequest = {},
onDismissAddMediaProviderRequest = {},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,9 @@ class MediaProviderViewModel @Inject constructor(
private val _showProviderOverflowMenu = MutableStateFlow<MediaProviderType?>(null)
val showProviderOverflowMenu = _showProviderOverflowMenu.asStateFlow()

private val _configureMediaProvider = MutableStateFlow<MediaProviderType?>(null)
val configureMediaProvider = _configureMediaProvider.asStateFlow()

fun onAddMediaProvider(provider: MediaProviderType) {
mediaImporter.mediaProviders += provider.toMediaProvider()
_mediaProviders.update { providers -> providers + provider }
Expand Down Expand Up @@ -82,6 +85,15 @@ class MediaProviderViewModel @Inject constructor(
_showProviderOverflowMenu.update { null }
}

fun onConfigureProviderClick(provider: MediaProviderType) {
_configureMediaProvider.update { provider }
_showProviderOverflowMenu.update { null }
}

fun onConsumeConfigureMediaProvider() {
_configureMediaProvider.update { null }
}

private fun MediaProviderType.toMediaProvider(): MediaProvider = when (this) {
MediaProviderType.MediaStore -> mediaStoreMediaProvider
MediaProviderType.Shuttle -> taglibMediaProvider
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.simplecityapps.shuttle.ui.screens.onboarding.emby
package com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.emby

import android.app.Dialog
import android.os.Bundle
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.simplecityapps.shuttle.ui.screens.onboarding.jellyfin
package com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.jellyfin

import android.app.Dialog
import android.os.Bundle
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex

sealed interface PlexAuthenticationState {
data object Loading : PlexAuthenticationState
data object Success : PlexAuthenticationState
data class Error(val error: Throwable?) : PlexAuthenticationState
}
Loading