From d1dc80ed89311102c15edad90f0be1d7d77f9243 Mon Sep 17 00:00:00 2001 From: Andrew Neal Date: Sun, 16 Nov 2025 02:11:18 -0600 Subject: [PATCH 1/7] shift some packages around --- .../ui/screens/onboarding/OnboardingParentFragment.kt | 8 ++++---- .../mediaprovider/MediaProviderSelectionFragment.kt | 8 ++++---- .../{ => mediaprovider}/emby/EmbyConfigurationFragment.kt | 2 +- .../jellyfin/JellyfinConfigurationFragment.kt | 2 +- .../{ => mediaprovider}/plex/PlexConfigurationFragment.kt | 4 ++-- .../{ => mediaprovider}/taglib/DirectoryBinder.kt | 2 +- .../taglib/DirectorySelectionFragment.kt | 2 +- .../taglib/DirectorySelectionPresenter.kt | 3 +-- .../privacy/AnalyticsPermissionScreen.kt | 4 +--- .../privacy/AnalyticsPermissionViewModel.kt | 4 ++-- .../permissions/{ => storage}/StoragePermissionScreen.kt | 2 +- 11 files changed, 19 insertions(+), 22 deletions(-) rename android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/{ => mediaprovider}/emby/EmbyConfigurationFragment.kt (98%) rename android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/{ => mediaprovider}/jellyfin/JellyfinConfigurationFragment.kt (98%) rename android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/{ => mediaprovider}/plex/PlexConfigurationFragment.kt (98%) rename android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/{ => mediaprovider}/taglib/DirectoryBinder.kt (97%) rename android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/{ => mediaprovider}/taglib/DirectorySelectionFragment.kt (98%) rename android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/{ => mediaprovider}/taglib/DirectorySelectionPresenter.kt (97%) rename android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/{ => permissions}/privacy/AnalyticsPermissionScreen.kt (97%) rename android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/{ => permissions}/privacy/AnalyticsPermissionViewModel.kt (94%) rename android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/permissions/{ => storage}/StoragePermissionScreen.kt (99%) diff --git a/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/OnboardingParentFragment.kt b/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/OnboardingParentFragment.kt index de64173b1..04c49a4ab 100644 --- a/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/OnboardingParentFragment.kt +++ b/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/OnboardingParentFragment.kt @@ -20,13 +20,13 @@ 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.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 +import javax.inject.Inject enum class OnboardingPage { StoragePermission, diff --git a/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/MediaProviderSelectionFragment.kt b/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/MediaProviderSelectionFragment.kt index 0b590368b..4a9d0ed83 100644 --- a/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/MediaProviderSelectionFragment.kt +++ b/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/MediaProviderSelectionFragment.kt @@ -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 diff --git a/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/emby/EmbyConfigurationFragment.kt b/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/emby/EmbyConfigurationFragment.kt similarity index 98% rename from android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/emby/EmbyConfigurationFragment.kt rename to android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/emby/EmbyConfigurationFragment.kt index 9790b21c3..25a4a0a2e 100644 --- a/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/emby/EmbyConfigurationFragment.kt +++ b/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/emby/EmbyConfigurationFragment.kt @@ -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 diff --git a/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/jellyfin/JellyfinConfigurationFragment.kt b/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/jellyfin/JellyfinConfigurationFragment.kt similarity index 98% rename from android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/jellyfin/JellyfinConfigurationFragment.kt rename to android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/jellyfin/JellyfinConfigurationFragment.kt index c9937ceed..261b204ce 100644 --- a/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/jellyfin/JellyfinConfigurationFragment.kt +++ b/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/jellyfin/JellyfinConfigurationFragment.kt @@ -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 diff --git a/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/plex/PlexConfigurationFragment.kt b/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/plex/PlexConfigurationFragment.kt similarity index 98% rename from android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/plex/PlexConfigurationFragment.kt rename to android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/plex/PlexConfigurationFragment.kt index 9a8a9c4bc..0d1cd29df 100644 --- a/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/plex/PlexConfigurationFragment.kt +++ b/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/plex/PlexConfigurationFragment.kt @@ -1,4 +1,4 @@ -package com.simplecityapps.shuttle.ui.screens.onboarding.plex +package com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex import android.app.Dialog import android.os.Bundle @@ -18,10 +18,10 @@ import com.simplecityapps.shuttle.R import com.simplecityapps.shuttle.ui.common.autoCleared import com.simplecityapps.shuttle.ui.common.view.CircularLoadingView import dagger.hilt.android.AndroidEntryPoint -import javax.inject.Inject import kotlinx.coroutines.delay import kotlinx.coroutines.launch import timber.log.Timber +import javax.inject.Inject @AndroidEntryPoint class PlexConfigurationFragment : DialogFragment() { diff --git a/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/taglib/DirectoryBinder.kt b/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/taglib/DirectoryBinder.kt similarity index 97% rename from android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/taglib/DirectoryBinder.kt rename to android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/taglib/DirectoryBinder.kt index e5424989f..ba61414b6 100644 --- a/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/taglib/DirectoryBinder.kt +++ b/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/taglib/DirectoryBinder.kt @@ -1,4 +1,4 @@ -package com.simplecityapps.shuttle.ui.screens.onboarding.taglib +package com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib import android.view.View import android.view.ViewGroup diff --git a/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/taglib/DirectorySelectionFragment.kt b/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/taglib/DirectorySelectionFragment.kt similarity index 98% rename from android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/taglib/DirectorySelectionFragment.kt rename to android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/taglib/DirectorySelectionFragment.kt index 8254ce823..a7dba2352 100644 --- a/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/taglib/DirectorySelectionFragment.kt +++ b/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/taglib/DirectorySelectionFragment.kt @@ -1,4 +1,4 @@ -package com.simplecityapps.shuttle.ui.screens.onboarding.taglib +package com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib import android.annotation.SuppressLint import android.app.Activity diff --git a/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/taglib/DirectorySelectionPresenter.kt b/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/taglib/DirectorySelectionPresenter.kt similarity index 97% rename from android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/taglib/DirectorySelectionPresenter.kt rename to android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/taglib/DirectorySelectionPresenter.kt index 664fa528f..b27eef08e 100644 --- a/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/taglib/DirectorySelectionPresenter.kt +++ b/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/taglib/DirectorySelectionPresenter.kt @@ -1,4 +1,4 @@ -package com.simplecityapps.shuttle.ui.screens.onboarding.taglib +package com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib import android.content.ContentResolver import android.content.Context @@ -12,7 +12,6 @@ import com.simplecityapps.shuttle.ui.common.mvp.BasePresenter import dagger.hilt.android.qualifiers.ApplicationContext import javax.inject.Inject import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.flow.collect import kotlinx.coroutines.launch import timber.log.Timber diff --git a/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/privacy/AnalyticsPermissionScreen.kt b/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/permissions/privacy/AnalyticsPermissionScreen.kt similarity index 97% rename from android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/privacy/AnalyticsPermissionScreen.kt rename to android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/permissions/privacy/AnalyticsPermissionScreen.kt index 39da2c552..03a53f71d 100644 --- a/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/privacy/AnalyticsPermissionScreen.kt +++ b/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/permissions/privacy/AnalyticsPermissionScreen.kt @@ -1,6 +1,5 @@ -package com.simplecityapps.shuttle.ui.screens.onboarding.privacy +package com.simplecityapps.shuttle.ui.screens.onboarding.permissions.privacy -import android.R.attr.text import android.os.Bundle import android.view.LayoutInflater import android.view.View @@ -33,7 +32,6 @@ import androidx.core.view.postDelayed import androidx.fragment.app.Fragment import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle -import androidx.lifecycle.viewmodel.compose.viewModel import com.simplecityapps.shuttle.R import com.simplecityapps.shuttle.ui.screens.onboarding.OnboardingChild import com.simplecityapps.shuttle.ui.screens.onboarding.OnboardingPage diff --git a/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/privacy/AnalyticsPermissionViewModel.kt b/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/permissions/privacy/AnalyticsPermissionViewModel.kt similarity index 94% rename from android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/privacy/AnalyticsPermissionViewModel.kt rename to android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/permissions/privacy/AnalyticsPermissionViewModel.kt index 1c19e1a31..e180798fb 100644 --- a/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/privacy/AnalyticsPermissionViewModel.kt +++ b/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/permissions/privacy/AnalyticsPermissionViewModel.kt @@ -1,12 +1,12 @@ -package com.simplecityapps.shuttle.ui.screens.onboarding.privacy +package com.simplecityapps.shuttle.ui.screens.onboarding.permissions.privacy import androidx.lifecycle.ViewModel import com.simplecityapps.shuttle.persistence.GeneralPreferenceManager import com.simplecityapps.shuttle.remote_config.AnalyticsManager import dagger.hilt.android.lifecycle.HiltViewModel -import javax.inject.Inject import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.update +import javax.inject.Inject @HiltViewModel class AnalyticsPermissionViewModel @Inject constructor( diff --git a/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/permissions/StoragePermissionScreen.kt b/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/permissions/storage/StoragePermissionScreen.kt similarity index 99% rename from android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/permissions/StoragePermissionScreen.kt rename to android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/permissions/storage/StoragePermissionScreen.kt index c95f7d919..ee35fb8a3 100644 --- a/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/permissions/StoragePermissionScreen.kt +++ b/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/permissions/storage/StoragePermissionScreen.kt @@ -1,4 +1,4 @@ -package com.simplecityapps.shuttle.ui.screens.onboarding.permissions +package com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage import android.Manifest import android.os.Build From 00c9fad890c1de4c49d521580f8313746e1a7065 Mon Sep 17 00:00:00 2001 From: Andrew Neal Date: Sun, 16 Nov 2025 10:09:15 -0600 Subject: [PATCH 2/7] add plex configuration dialog --- .../MediaProviderSelectionScreen.kt | 29 ++- .../mediaprovider/MediaProviderViewModel.kt | 14 +- .../plex/PlexConfigurationDialog.kt | 214 ++++++++++++++++++ .../plex/PlexConfigurationViewModel.kt | 87 +++++++ .../scanner/MediaScannerDialogFragment.kt | 2 +- .../scanner/MediaScannerFragment.kt | 2 +- .../scanner/MediaScannerPresenter.kt | 2 +- .../scanner/ScanProgressBinder.kt | 2 +- .../privacy/AnalyticsPermissionViewModel.kt | 2 +- .../screens/MediaPreferenceFragment.kt | 2 +- ...urationDialogKt_Preview_ColorScheme_0].png | 3 + ...rationDialogKt_Preview_ColorScheme_10].png | 3 + ...rationDialogKt_Preview_ColorScheme_11].png | 3 + ...urationDialogKt_Preview_ColorScheme_1].png | 3 + ...urationDialogKt_Preview_ColorScheme_2].png | 3 + ...urationDialogKt_Preview_ColorScheme_3].png | 3 + ...urationDialogKt_Preview_ColorScheme_4].png | 3 + ...urationDialogKt_Preview_ColorScheme_5].png | 3 + ...urationDialogKt_Preview_ColorScheme_6].png | 3 + ...urationDialogKt_Preview_ColorScheme_7].png | 3 + ...urationDialogKt_Preview_ColorScheme_8].png | 3 + ...urationDialogKt_Preview_ColorScheme_9].png | 3 + ...missionScreenKt_Preview_ColorScheme_0].png | 3 + ...issionScreenKt_Preview_ColorScheme_10].png | 3 + ...issionScreenKt_Preview_ColorScheme_11].png | 3 + ...missionScreenKt_Preview_ColorScheme_1].png | 3 + ...missionScreenKt_Preview_ColorScheme_2].png | 3 + ...missionScreenKt_Preview_ColorScheme_3].png | 3 + ...missionScreenKt_Preview_ColorScheme_4].png | 3 + ...missionScreenKt_Preview_ColorScheme_5].png | 3 + ...missionScreenKt_Preview_ColorScheme_6].png | 3 + ...missionScreenKt_Preview_ColorScheme_7].png | 3 + ...missionScreenKt_Preview_ColorScheme_8].png | 3 + ...missionScreenKt_Preview_ColorScheme_9].png | 3 + ...missionScreenKt_Preview_ColorScheme_0].png | 3 + ...issionScreenKt_Preview_ColorScheme_10].png | 3 + ...issionScreenKt_Preview_ColorScheme_11].png | 3 + ...missionScreenKt_Preview_ColorScheme_1].png | 3 + ...missionScreenKt_Preview_ColorScheme_2].png | 3 + ...missionScreenKt_Preview_ColorScheme_3].png | 3 + ...missionScreenKt_Preview_ColorScheme_4].png | 3 + ...missionScreenKt_Preview_ColorScheme_5].png | 3 + ...missionScreenKt_Preview_ColorScheme_6].png | 3 + ...missionScreenKt_Preview_ColorScheme_7].png | 3 + ...missionScreenKt_Preview_ColorScheme_8].png | 3 + ...missionScreenKt_Preview_ColorScheme_9].png | 3 + ...ssionScreenKt_Rationale_ColorScheme_0].png | 3 + ...sionScreenKt_Rationale_ColorScheme_10].png | 3 + ...sionScreenKt_Rationale_ColorScheme_11].png | 3 + ...ssionScreenKt_Rationale_ColorScheme_1].png | 3 + ...ssionScreenKt_Rationale_ColorScheme_2].png | 3 + ...ssionScreenKt_Rationale_ColorScheme_3].png | 3 + ...ssionScreenKt_Rationale_ColorScheme_4].png | 3 + ...ssionScreenKt_Rationale_ColorScheme_5].png | 3 + ...ssionScreenKt_Rationale_ColorScheme_6].png | 3 + ...ssionScreenKt_Rationale_ColorScheme_7].png | 3 + ...ssionScreenKt_Rationale_ColorScheme_8].png | 3 + ...ssionScreenKt_Rationale_ColorScheme_9].png | 3 + .../provider/plex/http/LoginCredentials.kt | 12 +- 59 files changed, 502 insertions(+), 10 deletions(-) create mode 100644 android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/plex/PlexConfigurationDialog.kt create mode 100644 android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/plex/PlexConfigurationViewModel.kt rename android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/{ => mediaprovider}/scanner/MediaScannerDialogFragment.kt (94%) rename android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/{ => mediaprovider}/scanner/MediaScannerFragment.kt (98%) rename android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/{ => mediaprovider}/scanner/MediaScannerPresenter.kt (98%) rename android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/{ => mediaprovider}/scanner/ScanProgressBinder.kt (98%) create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Preview_ColorScheme_0].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Preview_ColorScheme_10].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Preview_ColorScheme_11].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Preview_ColorScheme_1].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Preview_ColorScheme_2].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Preview_ColorScheme_3].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Preview_ColorScheme_4].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Preview_ColorScheme_5].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Preview_ColorScheme_6].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Preview_ColorScheme_7].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Preview_ColorScheme_8].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Preview_ColorScheme_9].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.privacy.AnalyticsPermissionScreenKt_Preview_ColorScheme_0].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.privacy.AnalyticsPermissionScreenKt_Preview_ColorScheme_10].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.privacy.AnalyticsPermissionScreenKt_Preview_ColorScheme_11].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.privacy.AnalyticsPermissionScreenKt_Preview_ColorScheme_1].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.privacy.AnalyticsPermissionScreenKt_Preview_ColorScheme_2].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.privacy.AnalyticsPermissionScreenKt_Preview_ColorScheme_3].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.privacy.AnalyticsPermissionScreenKt_Preview_ColorScheme_4].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.privacy.AnalyticsPermissionScreenKt_Preview_ColorScheme_5].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.privacy.AnalyticsPermissionScreenKt_Preview_ColorScheme_6].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.privacy.AnalyticsPermissionScreenKt_Preview_ColorScheme_7].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.privacy.AnalyticsPermissionScreenKt_Preview_ColorScheme_8].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.privacy.AnalyticsPermissionScreenKt_Preview_ColorScheme_9].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Preview_ColorScheme_0].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Preview_ColorScheme_10].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Preview_ColorScheme_11].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Preview_ColorScheme_1].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Preview_ColorScheme_2].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Preview_ColorScheme_3].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Preview_ColorScheme_4].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Preview_ColorScheme_5].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Preview_ColorScheme_6].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Preview_ColorScheme_7].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Preview_ColorScheme_8].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Preview_ColorScheme_9].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Rationale_ColorScheme_0].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Rationale_ColorScheme_10].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Rationale_ColorScheme_11].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Rationale_ColorScheme_1].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Rationale_ColorScheme_2].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Rationale_ColorScheme_3].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Rationale_ColorScheme_4].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Rationale_ColorScheme_5].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Rationale_ColorScheme_6].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Rationale_ColorScheme_7].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Rationale_ColorScheme_8].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Rationale_ColorScheme_9].png 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 e86cc4e75..a4f0796ea 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 @@ -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 @@ -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, @@ -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, @@ -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 @@ -161,6 +176,7 @@ private fun MediaProviderSelectionScreen( onRemoveProviderClick = onRemoveProviderClick, onOverflowMenuClick = onProviderOverflowMenuClick, showProviderOverflowMenu = showProviderOverflowMenu, + onConfigureProviderClick = onConfigureProviderClick, onDismissOverflowMenuRequest = onDismissOverflowMenuRequest ) @@ -238,6 +254,7 @@ private fun LazyMediaProviderTypeColumn( onRemoveProviderClick: () -> Unit, onDismissOverflowMenuRequest: () -> Unit, onOverflowMenuClick: (MediaProviderType) -> Unit, + onConfigureProviderClick: (MediaProviderType) -> Unit, modifier: Modifier = Modifier ) { LazyColumn( @@ -254,7 +271,8 @@ private fun LazyMediaProviderTypeColumn( onRemoveProviderClick = onRemoveProviderClick, onOverflowMenuClick = { onOverflowMenuClick(provider) }, onDismissOverflowMenuRequest = onDismissOverflowMenuRequest, - showProviderOverflowMenu = showProviderOverflowMenu == provider + showProviderOverflowMenu = showProviderOverflowMenu == provider, + onConfigureProviderClick = { onConfigureProviderClick(provider) } ) } } @@ -285,6 +303,7 @@ private fun MediaProviderTypeItem( showProviderOverflowMenu: Boolean, onOverflowMenuClick: () -> Unit, onRemoveProviderClick: () -> Unit, + onConfigureProviderClick: () -> Unit, onDismissOverflowMenuRequest: () -> Unit, modifier: Modifier = Modifier ) { @@ -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)) } @@ -350,6 +375,7 @@ private fun Preview(@PreviewParameter(ColorSchemePreviewParameterProvider::class onRemoveProviderClick = {}, onAddMediaProviderClick = {}, onMediaProviderTypeClick = {}, + onConfigureProviderClick = {}, onProviderOverflowMenuClick = {}, onDismissOverflowMenuRequest = {}, onDismissAddMediaProviderRequest = {}, @@ -370,6 +396,7 @@ private fun AddMediaProviderDialog(@PreviewParameter(ColorSchemePreviewParameter onRemoveProviderClick = {}, onAddMediaProviderClick = {}, onMediaProviderTypeClick = {}, + onConfigureProviderClick = {}, onProviderOverflowMenuClick = {}, onDismissOverflowMenuRequest = {}, onDismissAddMediaProviderRequest = {}, diff --git a/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/MediaProviderViewModel.kt b/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/MediaProviderViewModel.kt index dede4da75..ee8000c3b 100644 --- a/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/MediaProviderViewModel.kt +++ b/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/MediaProviderViewModel.kt @@ -12,13 +12,13 @@ import com.simplecityapps.provider.jellyfin.JellyfinMediaProvider import com.simplecityapps.provider.plex.PlexMediaProvider import com.simplecityapps.shuttle.model.MediaProviderType import dagger.hilt.android.lifecycle.HiltViewModel -import javax.inject.Inject import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.flow.update +import javax.inject.Inject @HiltViewModel class MediaProviderViewModel @Inject constructor( @@ -53,6 +53,9 @@ class MediaProviderViewModel @Inject constructor( private val _showProviderOverflowMenu = MutableStateFlow(null) val showProviderOverflowMenu = _showProviderOverflowMenu.asStateFlow() + private val _configureMediaProvider = MutableStateFlow(null) + val configureMediaProvider = _configureMediaProvider.asStateFlow() + fun onAddMediaProvider(provider: MediaProviderType) { mediaImporter.mediaProviders += provider.toMediaProvider() _mediaProviders.update { providers -> providers + provider } @@ -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 diff --git a/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/plex/PlexConfigurationDialog.kt b/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/plex/PlexConfigurationDialog.kt new file mode 100644 index 000000000..45d98db1e --- /dev/null +++ b/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/plex/PlexConfigurationDialog.kt @@ -0,0 +1,214 @@ +package com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.wrapContentWidth +import androidx.compose.foundation.text.KeyboardOptions +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.Visibility +import androidx.compose.material.icons.filled.VisibilityOff +import androidx.compose.material3.AlertDialog +import androidx.compose.material3.ColorScheme +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.OutlinedTextField +import androidx.compose.material3.Switch +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.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.input.KeyboardType +import androidx.compose.ui.text.input.PasswordVisualTransformation +import androidx.compose.ui.text.input.VisualTransformation +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.tooling.preview.PreviewParameter +import androidx.compose.ui.unit.dp +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel +import androidx.lifecycle.compose.collectAsStateWithLifecycle +import com.simplecityapps.provider.plex.http.LoginCredentials +import com.simplecityapps.shuttle.R +import com.simplecityapps.shuttle.ui.snapshot.Snapshot +import com.simplecityapps.shuttle.ui.theme.ColorSchemePreviewParameterProvider + +@Composable +fun PlexConfigurationDialog( + onDismissRequest: () -> Unit, + modifier: Modifier = Modifier, + viewModel: PlexConfigurationViewModel = hiltViewModel() +) { + val address by viewModel.address.collectAsStateWithLifecycle() + val canAuthenticate by viewModel.canAuthenticate.collectAsStateWithLifecycle() + val loginCredentials by viewModel.loginCredentials.collectAsStateWithLifecycle() + val rememberPassword by viewModel.rememberPassword.collectAsStateWithLifecycle() + val authenticationSuccess by viewModel.authenticationSuccess.collectAsStateWithLifecycle() + + if (authenticationSuccess == true) { + LaunchedEffect(Unit) { + onDismissRequest() + } + } + + PlexConfigurationDialog( + address = address, + modifier = modifier, + canAuthenticate = canAuthenticate, + onDismissRequest = onDismissRequest, + rememberPassword = rememberPassword, + loginCredentials = loginCredentials, + onAddressChange = viewModel::onAddressChange, + onUsernameChange = viewModel::onUsernameChange, + onPasswordChange = viewModel::onPasswordChange, + onAuthCodeChange = viewModel::onAuthCodeChange, + onAuthenticateClick = viewModel::onAuthenticateClick, + onRememberPasswordChange = viewModel::onRememberPasswordChange + ) +} + +@Composable +private fun PlexConfigurationDialog( + address: String, + canAuthenticate: Boolean, + rememberPassword: Boolean, + loginCredentials: LoginCredentials?, + onDismissRequest: () -> Unit, + onAddressChange: (String) -> Unit, + onAuthCodeChange: (String) -> Unit, + onUsernameChange: (String) -> Unit, + onPasswordChange: (String) -> Unit, + onRememberPasswordChange: (Boolean) -> Unit, + onAuthenticateClick: (String, LoginCredentials) -> Unit, + modifier: Modifier = Modifier +) { + AlertDialog( + modifier = modifier, + onDismissRequest = onDismissRequest, + title = { + Text(text = stringResource(com.simplecityapps.mediaprovider.R.string.media_provider_title_long_plex)) + }, + text = { + Column(verticalArrangement = Arrangement.spacedBy(24.dp)) { + Column(verticalArrangement = Arrangement.spacedBy(8.dp)) { + OutlinedTextField( + value = address, + singleLine = true, + onValueChange = onAddressChange, + placeholder = { Text(text = "http://") }, + label = { Text(stringResource(com.simplecityapps.mediaprovider.R.string.media_provider_config_hint_address)) } + ) + Text( + color = MaterialTheme.colorScheme.tertiary, + style = MaterialTheme.typography.labelSmall, + text = "e.g. https://my.plex.server.com/32400" + ) + } + + OutlinedTextField( + singleLine = true, + onValueChange = onUsernameChange, + value = loginCredentials?.username ?: "", + label = { Text(stringResource(com.simplecityapps.mediaprovider.R.string.media_provider_config_hint_username)) } + ) + + var showPassword by remember { mutableStateOf(false) } + OutlinedTextField( + singleLine = true, + onValueChange = onPasswordChange, + value = loginCredentials?.password ?: "", + visualTransformation = if (showPassword) VisualTransformation.None else PasswordVisualTransformation(), + label = { Text(stringResource(com.simplecityapps.mediaprovider.R.string.media_provider_config_hint_password)) }, + trailingIcon = { + IconButton(onClick = { showPassword = !showPassword }) { + Icon( + contentDescription = null, + imageVector = if (showPassword) Icons.Default.VisibilityOff else Icons.Default.Visibility + ) + } + } + ) + + Column(verticalArrangement = Arrangement.spacedBy(8.dp)) { + OutlinedTextField( + singleLine = true, + onValueChange = onAuthCodeChange, + value = loginCredentials?.authCode ?: "", + keyboardOptions = KeyboardOptions.Default.copy( + keyboardType = KeyboardType.Number + ), + label = { Text(stringResource(R.string.media_provider_config_hint_code)) } + ) + Text( + color = MaterialTheme.colorScheme.tertiary, + style = MaterialTheme.typography.bodySmall, + text = stringResource(R.string.media_provider_config_helper_code) + ) + } + + Row( + modifier = Modifier + .fillMaxWidth() + .wrapContentWidth(Alignment.End), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.spacedBy(16.dp) + ) { + Text( + color = MaterialTheme.colorScheme.tertiary, + style = MaterialTheme.typography.bodySmall, + text = stringResource(com.simplecityapps.mediaprovider.R.string.media_provider_config_switch_remember_password) + ) + Switch( + checked = rememberPassword, + onCheckedChange = onRememberPasswordChange + ) + } + } + }, + dismissButton = { + TextButton(onClick = onDismissRequest) { + Text(text = stringResource(R.string.dialog_button_close)) + } + }, + confirmButton = { + TextButton( + enabled = canAuthenticate, + onClick = { onAuthenticateClick(address, loginCredentials!!) } + ) { + Text(text = stringResource(R.string.media_provider_button_authenticate)) + } + } + ) +} + +@Snapshot +@Preview +@Composable +private fun Preview(@PreviewParameter(ColorSchemePreviewParameterProvider::class) colorScheme: ColorScheme) { + MaterialTheme(colorScheme = colorScheme) { + PlexConfigurationDialog( + onDismissRequest = {}, + address = "http://", + loginCredentials = LoginCredentials( + username = "shuttle", + password = "musicplayer", + authCode = null + ), + canAuthenticate = true, + rememberPassword = false, + onAddressChange = {}, + onUsernameChange = {}, + onPasswordChange = {}, + onAuthCodeChange = {}, + onRememberPasswordChange = {}, + onAuthenticateClick = { _, _ -> } + ) + } +} diff --git a/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/plex/PlexConfigurationViewModel.kt b/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/plex/PlexConfigurationViewModel.kt new file mode 100644 index 000000000..bf0e27bfc --- /dev/null +++ b/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/plex/PlexConfigurationViewModel.kt @@ -0,0 +1,87 @@ +package com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex + +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import com.simplecityapps.provider.plex.PlexAuthenticationManager +import com.simplecityapps.provider.plex.http.LoginCredentials +import dagger.hilt.android.lifecycle.HiltViewModel +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.stateIn +import kotlinx.coroutines.flow.update +import kotlinx.coroutines.launch +import javax.inject.Inject + +@HiltViewModel +class PlexConfigurationViewModel @Inject constructor( + private val plexAuthenticationManager: PlexAuthenticationManager +) : ViewModel() { + + private val _address = MutableStateFlow( + plexAuthenticationManager.getAddress() ?: "" + ) + val address = _address.asStateFlow() + + private val _loginCredentials = MutableStateFlow( + plexAuthenticationManager.getLoginCredentials() ?: LoginCredentials.Empty + ) + val loginCredentials = _loginCredentials.asStateFlow() + + val canAuthenticate = combine( + _address, + _loginCredentials + ) { address, (username, password, _) -> + address.isNotBlank() && username.isNotBlank() && password.isNotBlank() + }.stateIn( + viewModelScope, + initialValue = false, + started = SharingStarted.WhileSubscribed() + ) + + private val _rememberPassword = MutableStateFlow( + plexAuthenticationManager.getLoginCredentials() != null + ) + val rememberPassword = _rememberPassword.asStateFlow() + + private val _authenticationSuccess = MutableStateFlow(null) + val authenticationSuccess = _authenticationSuccess.asStateFlow() + + fun onAddressChange(address: String) { + _address.update { address } + } + + fun onUsernameChange(username: String) { + _loginCredentials.update { credentials -> credentials.copy(username = username) } + } + + fun onPasswordChange(password: String) { + _loginCredentials.update { credentials -> credentials.copy(password = password) } + } + + fun onAuthCodeChange(authCode: String) { + _loginCredentials.update { credentials -> credentials.copy(authCode = authCode) } + } + + fun onRememberPasswordChange(remember: Boolean) { + if (!remember) { + plexAuthenticationManager.setLoginCredentials(null) + } + _rememberPassword.update { remember } + } + + fun onAuthenticateClick(address: String, loginCredentials: LoginCredentials) { + viewModelScope.launch { + plexAuthenticationManager.authenticate( + address = address, + loginCredentials = loginCredentials + ).onSuccess { + plexAuthenticationManager.setLoginCredentials(loginCredentials) + _authenticationSuccess.update { true } + }.onFailure { + _authenticationSuccess.update { false } + } + } + } +} diff --git a/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/scanner/MediaScannerDialogFragment.kt b/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/scanner/MediaScannerDialogFragment.kt similarity index 94% rename from android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/scanner/MediaScannerDialogFragment.kt rename to android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/scanner/MediaScannerDialogFragment.kt index 24c30fe9c..5ed117eea 100644 --- a/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/scanner/MediaScannerDialogFragment.kt +++ b/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/scanner/MediaScannerDialogFragment.kt @@ -1,4 +1,4 @@ -package com.simplecityapps.shuttle.ui.screens.onboarding.scanner +package com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.scanner import android.app.Dialog import android.os.Bundle diff --git a/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/scanner/MediaScannerFragment.kt b/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/scanner/MediaScannerFragment.kt similarity index 98% rename from android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/scanner/MediaScannerFragment.kt rename to android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/scanner/MediaScannerFragment.kt index a53c55a6c..af95e3a74 100644 --- a/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/scanner/MediaScannerFragment.kt +++ b/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/scanner/MediaScannerFragment.kt @@ -1,4 +1,4 @@ -package com.simplecityapps.shuttle.ui.screens.onboarding.scanner +package com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.scanner import android.os.Bundle import android.view.LayoutInflater diff --git a/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/scanner/MediaScannerPresenter.kt b/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/scanner/MediaScannerPresenter.kt similarity index 98% rename from android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/scanner/MediaScannerPresenter.kt rename to android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/scanner/MediaScannerPresenter.kt index c17e96055..cc3a75a66 100644 --- a/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/scanner/MediaScannerPresenter.kt +++ b/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/scanner/MediaScannerPresenter.kt @@ -1,4 +1,4 @@ -package com.simplecityapps.shuttle.ui.screens.onboarding.scanner +package com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.scanner import com.simplecityapps.mediaprovider.MediaImporter import com.simplecityapps.mediaprovider.Progress diff --git a/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/scanner/ScanProgressBinder.kt b/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/scanner/ScanProgressBinder.kt similarity index 98% rename from android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/scanner/ScanProgressBinder.kt rename to android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/scanner/ScanProgressBinder.kt index 222032298..403faaf79 100644 --- a/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/scanner/ScanProgressBinder.kt +++ b/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/scanner/ScanProgressBinder.kt @@ -1,4 +1,4 @@ -package com.simplecityapps.shuttle.ui.screens.onboarding.scanner +package com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.scanner import android.view.LayoutInflater import android.view.View diff --git a/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/permissions/privacy/AnalyticsPermissionViewModel.kt b/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/permissions/privacy/AnalyticsPermissionViewModel.kt index e180798fb..21fff57f8 100644 --- a/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/permissions/privacy/AnalyticsPermissionViewModel.kt +++ b/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/permissions/privacy/AnalyticsPermissionViewModel.kt @@ -4,9 +4,9 @@ import androidx.lifecycle.ViewModel import com.simplecityapps.shuttle.persistence.GeneralPreferenceManager import com.simplecityapps.shuttle.remote_config.AnalyticsManager import dagger.hilt.android.lifecycle.HiltViewModel +import javax.inject.Inject import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.update -import javax.inject.Inject @HiltViewModel class AnalyticsPermissionViewModel @Inject constructor( diff --git a/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/settings/screens/MediaPreferenceFragment.kt b/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/settings/screens/MediaPreferenceFragment.kt index 777cbba3c..8fb64468c 100644 --- a/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/settings/screens/MediaPreferenceFragment.kt +++ b/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/settings/screens/MediaPreferenceFragment.kt @@ -25,7 +25,7 @@ import com.simplecityapps.shuttle.persistence.GeneralPreferenceManager import com.simplecityapps.shuttle.query.SongQuery import com.simplecityapps.shuttle.ui.common.recyclerview.SectionedAdapter import com.simplecityapps.shuttle.ui.screens.onboarding.OnboardingParentFragmentArgs -import com.simplecityapps.shuttle.ui.screens.onboarding.scanner.MediaScannerDialogFragment +import com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.scanner.MediaScannerDialogFragment import com.simplecityapps.shuttle.ui.screens.settings.ExcludeBinder import com.squareup.phrase.Phrase import dagger.hilt.android.AndroidEntryPoint diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Preview_ColorScheme_0].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Preview_ColorScheme_0].png new file mode 100644 index 000000000..be0cda73c --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Preview_ColorScheme_0].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:67b24c83b0615ddefb072d3b483b5f414f690f17b69ea41a62aa9accba5d5360 +size 30306 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Preview_ColorScheme_10].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Preview_ColorScheme_10].png new file mode 100644 index 000000000..a140f4885 --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Preview_ColorScheme_10].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:95539fddcbaf8957871deffcc99a9eb2a092fd878443faf06d266f86482d19f4 +size 30541 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Preview_ColorScheme_11].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Preview_ColorScheme_11].png new file mode 100644 index 000000000..e1b04a9dd --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Preview_ColorScheme_11].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:03b5bb042196531c0c415865cb18322aca8c15815491b6f4ded613d9b12119b5 +size 30197 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Preview_ColorScheme_1].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Preview_ColorScheme_1].png new file mode 100644 index 000000000..445680029 --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Preview_ColorScheme_1].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:935c8cc62ac9d5072e16bfffc025df2d41da7a7c3de4fbcaae8c262d3f2c1f00 +size 30282 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Preview_ColorScheme_2].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Preview_ColorScheme_2].png new file mode 100644 index 000000000..d993b5151 --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Preview_ColorScheme_2].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d5388eb6c2bc15a0fa1fbbffc253763ff9ea504cf20bf8851fa067c17f111ddb +size 30354 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Preview_ColorScheme_3].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Preview_ColorScheme_3].png new file mode 100644 index 000000000..0b61b1fe2 --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Preview_ColorScheme_3].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:97818c9fb0c0f60035bfb3b72fe190a429e1e0aa72e6454d6dce199c848afb01 +size 29803 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Preview_ColorScheme_4].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Preview_ColorScheme_4].png new file mode 100644 index 000000000..2f3175fda --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Preview_ColorScheme_4].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8417d9b9298cf20ef20879c29633e8601e02bf8a2d388eb8c52db043e181be69 +size 29796 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Preview_ColorScheme_5].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Preview_ColorScheme_5].png new file mode 100644 index 000000000..042ffb067 --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Preview_ColorScheme_5].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c77dfbbabcaddb599940cfaeb847c1d0c3dce51b2ed0f8c32b16304f9394802e +size 29728 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Preview_ColorScheme_6].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Preview_ColorScheme_6].png new file mode 100644 index 000000000..624be95fe --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Preview_ColorScheme_6].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:92c0410937d045b8baa9c6686857d10bfdb738d36721c34196950f35d79c9031 +size 30424 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Preview_ColorScheme_7].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Preview_ColorScheme_7].png new file mode 100644 index 000000000..7a62cc0be --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Preview_ColorScheme_7].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6209cd079681264bb69b5393cae7ad1628c1d2dce157e6dde34c55ac28f2330e +size 30243 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Preview_ColorScheme_8].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Preview_ColorScheme_8].png new file mode 100644 index 000000000..b9b05399a --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Preview_ColorScheme_8].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a1a2a200fe89dcee67a039404935bca2b7fe94bcd74b9a61d9306e4276013e48 +size 30192 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Preview_ColorScheme_9].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Preview_ColorScheme_9].png new file mode 100644 index 000000000..ee2d7d537 --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Preview_ColorScheme_9].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f997c8b02b712de5e470f168e6355ef2dc9a38c98774e7754d1dec51231fff2a +size 29497 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.privacy.AnalyticsPermissionScreenKt_Preview_ColorScheme_0].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.privacy.AnalyticsPermissionScreenKt_Preview_ColorScheme_0].png new file mode 100644 index 000000000..7227cf2a2 --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.privacy.AnalyticsPermissionScreenKt_Preview_ColorScheme_0].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6fab7f2a3f5c39bef733722583406ef5a1cdffeb20118eb443cf1663354b5ae6 +size 38870 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.privacy.AnalyticsPermissionScreenKt_Preview_ColorScheme_10].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.privacy.AnalyticsPermissionScreenKt_Preview_ColorScheme_10].png new file mode 100644 index 000000000..3ac405411 --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.privacy.AnalyticsPermissionScreenKt_Preview_ColorScheme_10].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9113ee4b24e2030ff2209438e34f1b7aec84f20f9e6fd46ad99ea6a7476afe59 +size 38661 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.privacy.AnalyticsPermissionScreenKt_Preview_ColorScheme_11].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.privacy.AnalyticsPermissionScreenKt_Preview_ColorScheme_11].png new file mode 100644 index 000000000..7187e8cd9 --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.privacy.AnalyticsPermissionScreenKt_Preview_ColorScheme_11].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:37e5f8c9946cd335ff165116324c3122f2b7c4b1df8787b4fa954ba49f936197 +size 39064 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.privacy.AnalyticsPermissionScreenKt_Preview_ColorScheme_1].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.privacy.AnalyticsPermissionScreenKt_Preview_ColorScheme_1].png new file mode 100644 index 000000000..380f046b2 --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.privacy.AnalyticsPermissionScreenKt_Preview_ColorScheme_1].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8e630559d9c5c5f5195b755e974f6c874a24b5f7c1cffd79ad454e73bcfd4cb1 +size 39014 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.privacy.AnalyticsPermissionScreenKt_Preview_ColorScheme_2].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.privacy.AnalyticsPermissionScreenKt_Preview_ColorScheme_2].png new file mode 100644 index 000000000..5b17eb3ca --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.privacy.AnalyticsPermissionScreenKt_Preview_ColorScheme_2].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ecea151f26e1c20a6c593cff512b24869e33e3c516075e6a4b85e83388ae9f2f +size 38724 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.privacy.AnalyticsPermissionScreenKt_Preview_ColorScheme_3].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.privacy.AnalyticsPermissionScreenKt_Preview_ColorScheme_3].png new file mode 100644 index 000000000..c8a2f1c8c --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.privacy.AnalyticsPermissionScreenKt_Preview_ColorScheme_3].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:10e06adfe6615f5e1e41960eac579f62b201015e26e8de32f7bf363773f92b6d +size 38855 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.privacy.AnalyticsPermissionScreenKt_Preview_ColorScheme_4].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.privacy.AnalyticsPermissionScreenKt_Preview_ColorScheme_4].png new file mode 100644 index 000000000..15f231fc6 --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.privacy.AnalyticsPermissionScreenKt_Preview_ColorScheme_4].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3011eb98b1a61a4e1d66239652b0e5239491cd4228566f979e3618f718f61bae +size 37505 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.privacy.AnalyticsPermissionScreenKt_Preview_ColorScheme_5].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.privacy.AnalyticsPermissionScreenKt_Preview_ColorScheme_5].png new file mode 100644 index 000000000..72c69a443 --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.privacy.AnalyticsPermissionScreenKt_Preview_ColorScheme_5].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7c6cc3780b5a84ea71342526be7c9aaaf8f1fd3837694b6d221eb1ae97ba0bca +size 37701 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.privacy.AnalyticsPermissionScreenKt_Preview_ColorScheme_6].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.privacy.AnalyticsPermissionScreenKt_Preview_ColorScheme_6].png new file mode 100644 index 000000000..e1c49574c --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.privacy.AnalyticsPermissionScreenKt_Preview_ColorScheme_6].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ca6f3cea76a2597c4a8105c3c5d31e3042bdc34433647d44351eef106807a380 +size 38703 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.privacy.AnalyticsPermissionScreenKt_Preview_ColorScheme_7].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.privacy.AnalyticsPermissionScreenKt_Preview_ColorScheme_7].png new file mode 100644 index 000000000..971442430 --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.privacy.AnalyticsPermissionScreenKt_Preview_ColorScheme_7].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d8edfe2b8a97b4f23112a94855851e0d4680178f5e4176c5a7faf51aaac3b368 +size 38991 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.privacy.AnalyticsPermissionScreenKt_Preview_ColorScheme_8].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.privacy.AnalyticsPermissionScreenKt_Preview_ColorScheme_8].png new file mode 100644 index 000000000..b7765d2a3 --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.privacy.AnalyticsPermissionScreenKt_Preview_ColorScheme_8].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:84ece8f0e0e290f91ad7f9d3ab749ca10895d0a9dcc6bebbcf8b408e76117c3e +size 38447 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.privacy.AnalyticsPermissionScreenKt_Preview_ColorScheme_9].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.privacy.AnalyticsPermissionScreenKt_Preview_ColorScheme_9].png new file mode 100644 index 000000000..b454995a5 --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.privacy.AnalyticsPermissionScreenKt_Preview_ColorScheme_9].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d6df7ca5bf1b477bda55cf9cca093b79a209561a20ab583245d239805721ddf9 +size 38564 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Preview_ColorScheme_0].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Preview_ColorScheme_0].png new file mode 100644 index 000000000..8a329e146 --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Preview_ColorScheme_0].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d2d37c287d45b1cfd8f7f6341b68c64748abd979e448e163ef9013bc9e67476b +size 17070 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Preview_ColorScheme_10].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Preview_ColorScheme_10].png new file mode 100644 index 000000000..a0ef9e48e --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Preview_ColorScheme_10].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9d7ca8f34c203710e16c59c0129f3cd3a325892e5f6498177fce00b8dd9b3b42 +size 16676 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Preview_ColorScheme_11].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Preview_ColorScheme_11].png new file mode 100644 index 000000000..af948468d --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Preview_ColorScheme_11].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fd4995d670cc4e4b9dc45bf253259d34805418ca9964171103ba3b6915e134a4 +size 17462 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Preview_ColorScheme_1].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Preview_ColorScheme_1].png new file mode 100644 index 000000000..058ce8653 --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Preview_ColorScheme_1].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4eccde5dac8880c84652d14eaceddc7b7b1e9f96e5f08f098a557d4b6cd4eacc +size 17318 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Preview_ColorScheme_2].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Preview_ColorScheme_2].png new file mode 100644 index 000000000..872eb8239 --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Preview_ColorScheme_2].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4cdabc7cc0e172e090444030b6919893f3a39106688dba2ee7cd58cce35b598c +size 17098 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Preview_ColorScheme_3].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Preview_ColorScheme_3].png new file mode 100644 index 000000000..337e4d8fb --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Preview_ColorScheme_3].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ec0c4b2fdd3e5788e2fa59519523c1688881fd105561bc48c34c6602c11dbda7 +size 17003 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Preview_ColorScheme_4].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Preview_ColorScheme_4].png new file mode 100644 index 000000000..86c68000f --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Preview_ColorScheme_4].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:22e622f167a261b513db4fca231ead6bd07fd1cad6c68fc0e69e5b39951a3246 +size 16454 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Preview_ColorScheme_5].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Preview_ColorScheme_5].png new file mode 100644 index 000000000..fee726689 --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Preview_ColorScheme_5].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:acae2d75b23aad6d05308583b7c860936217878b72b898bd257ea19d2c6ff046 +size 16920 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Preview_ColorScheme_6].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Preview_ColorScheme_6].png new file mode 100644 index 000000000..f6347d8e4 --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Preview_ColorScheme_6].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:da83dcd50612af1ba63dd9027b18bdd019ed4b73520c10beda7194cb5ffdafca +size 17275 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Preview_ColorScheme_7].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Preview_ColorScheme_7].png new file mode 100644 index 000000000..3de568e0b --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Preview_ColorScheme_7].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fe391df2cc8660393aaa47f6b5373104c42c55ea82cc6e0228c2e08f7b0c5efd +size 17442 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Preview_ColorScheme_8].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Preview_ColorScheme_8].png new file mode 100644 index 000000000..73972f84a --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Preview_ColorScheme_8].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:086c618d36f4cfa7e2114486174a9cbf108250c345f03baaed1e958c5e0e12ad +size 17107 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Preview_ColorScheme_9].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Preview_ColorScheme_9].png new file mode 100644 index 000000000..f62a40d2e --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Preview_ColorScheme_9].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aef996c311d9d906861d670adbf794f9e4aacd687cb6f87fb731d4604884cfeb +size 17065 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Rationale_ColorScheme_0].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Rationale_ColorScheme_0].png new file mode 100644 index 000000000..bedd57182 --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Rationale_ColorScheme_0].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1f155df314009c0de8a951db05165e11a78f788115658f214d5777a50936adff +size 32181 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Rationale_ColorScheme_10].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Rationale_ColorScheme_10].png new file mode 100644 index 000000000..77491d8ff --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Rationale_ColorScheme_10].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b7a3313b45c921d7d7beb66d56cf32423ec7e83fad1a86680a034f12ac8a6f93 +size 32166 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Rationale_ColorScheme_11].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Rationale_ColorScheme_11].png new file mode 100644 index 000000000..d18091b8b --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Rationale_ColorScheme_11].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d2adeb78a386e1f3fc1e48d93258527c6b9c11a7c99c5751d9f1c3170ddf0d15 +size 31811 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Rationale_ColorScheme_1].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Rationale_ColorScheme_1].png new file mode 100644 index 000000000..1d72e960c --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Rationale_ColorScheme_1].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1b9ec4fc6d2034ce27fce04c41bdb9e9e5d312cc48c34859cfe55c1e2faece53 +size 31962 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Rationale_ColorScheme_2].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Rationale_ColorScheme_2].png new file mode 100644 index 000000000..236806257 --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Rationale_ColorScheme_2].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0cb9bf3ed56bd536e416ac68e0d731212469fcd334584160153d3b20544806ff +size 32241 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Rationale_ColorScheme_3].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Rationale_ColorScheme_3].png new file mode 100644 index 000000000..b70dd0e11 --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Rationale_ColorScheme_3].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:54bf6a59a51e0e79f0f6c7a3340fc157cf086c6524e10a4f52acec9d694b2e4d +size 31316 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Rationale_ColorScheme_4].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Rationale_ColorScheme_4].png new file mode 100644 index 000000000..f5e02d0d0 --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Rationale_ColorScheme_4].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bbc40566fc799dbbb054c04e586eb2a75325f569c98e9b5914c363dd4e32be25 +size 31152 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Rationale_ColorScheme_5].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Rationale_ColorScheme_5].png new file mode 100644 index 000000000..f9341d87f --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Rationale_ColorScheme_5].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c83760ca26a847b6d01ab0aed550578985d1925bcf21fe61de0a2260c37cb34d +size 31069 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Rationale_ColorScheme_6].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Rationale_ColorScheme_6].png new file mode 100644 index 000000000..b083e24d7 --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Rationale_ColorScheme_6].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ca438816825a1fa740d0ee1f70803e4b3741ee4bea00bdc6d70e7a617c77ad25 +size 32391 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Rationale_ColorScheme_7].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Rationale_ColorScheme_7].png new file mode 100644 index 000000000..df26b3eed --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Rationale_ColorScheme_7].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ca40836a3e448d854aebad57ef816d7bb783d1527803818d42dd9b32d9ce62e6 +size 31852 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Rationale_ColorScheme_8].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Rationale_ColorScheme_8].png new file mode 100644 index 000000000..ff068295f --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Rationale_ColorScheme_8].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ad481adaab99d81caf21566b5647d79242f14b82de68647069203eac16529929 +size 31934 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Rationale_ColorScheme_9].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Rationale_ColorScheme_9].png new file mode 100644 index 000000000..8a2118a40 --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.permissions.storage.StoragePermissionScreenKt_Rationale_ColorScheme_9].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bd9c3599d7317f2070120e4109d07dc97211b83a1902a2ce77447f97dde4a04c +size 31529 diff --git a/android/mediaprovider/plex/src/main/java/com/simplecityapps/provider/plex/http/LoginCredentials.kt b/android/mediaprovider/plex/src/main/java/com/simplecityapps/provider/plex/http/LoginCredentials.kt index 7d8d2d558..58dd546a3 100644 --- a/android/mediaprovider/plex/src/main/java/com/simplecityapps/provider/plex/http/LoginCredentials.kt +++ b/android/mediaprovider/plex/src/main/java/com/simplecityapps/provider/plex/http/LoginCredentials.kt @@ -1,10 +1,18 @@ package com.simplecityapps.provider.plex.http -open class LoginCredentials( +data class LoginCredentials( val username: String, val password: String, val authCode: String? -) +) { + companion object { + val Empty = LoginCredentials( + username = "", + password = "", + authCode = null + ) + } +} class AuthenticatedCredentials( val accessToken: String, From cea54e88a44651d4b9f47f31a65b6292134db486 Mon Sep 17 00:00:00 2001 From: Andrew Neal Date: Sun, 16 Nov 2025 10:09:40 -0600 Subject: [PATCH 3/7] update import --- .../shuttle/ui/screens/onboarding/OnboardingParentFragment.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/OnboardingParentFragment.kt b/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/OnboardingParentFragment.kt index 04c49a4ab..5fb67c942 100644 --- a/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/OnboardingParentFragment.kt +++ b/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/OnboardingParentFragment.kt @@ -20,7 +20,7 @@ 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.scanner.MediaScannerFragment +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 From 8b2c188816ea55b4c39eeeeba96fb1e146830924 Mon Sep 17 00:00:00 2001 From: Andrew Neal Date: Sun, 16 Nov 2025 19:00:39 -0600 Subject: [PATCH 4/7] update state --- .../mediaprovider/MediaProviderViewModel.kt | 2 +- .../plex/PlexAuthenticationState.kt | 7 + .../plex/PlexConfigurationDialog.kt | 434 +++++++++++++----- .../plex/PlexConfigurationFragment.kt | 2 +- .../plex/PlexConfigurationViewModel.kt | 102 ++-- .../plex/PlexConfigurationViewState.kt | 21 + 6 files changed, 421 insertions(+), 147 deletions(-) create mode 100644 android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/plex/PlexAuthenticationState.kt create mode 100644 android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/plex/PlexConfigurationViewState.kt diff --git a/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/MediaProviderViewModel.kt b/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/MediaProviderViewModel.kt index ee8000c3b..68846f150 100644 --- a/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/MediaProviderViewModel.kt +++ b/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/MediaProviderViewModel.kt @@ -12,13 +12,13 @@ import com.simplecityapps.provider.jellyfin.JellyfinMediaProvider import com.simplecityapps.provider.plex.PlexMediaProvider import com.simplecityapps.shuttle.model.MediaProviderType import dagger.hilt.android.lifecycle.HiltViewModel +import javax.inject.Inject import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.flow.update -import javax.inject.Inject @HiltViewModel class MediaProviderViewModel @Inject constructor( diff --git a/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/plex/PlexAuthenticationState.kt b/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/plex/PlexAuthenticationState.kt new file mode 100644 index 000000000..7d2e14245 --- /dev/null +++ b/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/plex/PlexAuthenticationState.kt @@ -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 +} diff --git a/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/plex/PlexConfigurationDialog.kt b/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/plex/PlexConfigurationDialog.kt index 45d98db1e..5e31b6d7a 100644 --- a/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/plex/PlexConfigurationDialog.kt +++ b/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/plex/PlexConfigurationDialog.kt @@ -1,15 +1,23 @@ package com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex +import androidx.compose.animation.AnimatedContent +import androidx.compose.animation.AnimatedVisibility +import androidx.compose.foundation.background +import androidx.compose.foundation.border import androidx.compose.foundation.layout.Arrangement 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.wrapContentWidth +import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Visibility import androidx.compose.material.icons.filled.VisibilityOff 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 @@ -19,6 +27,7 @@ import androidx.compose.material3.Switch import androidx.compose.material3.Text import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable +import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf @@ -35,6 +44,7 @@ import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle +import androidx.lifecycle.viewmodel.compose.LocalViewModelStoreOwner import com.simplecityapps.provider.plex.http.LoginCredentials import com.simplecityapps.shuttle.R import com.simplecityapps.shuttle.ui.snapshot.Snapshot @@ -46,47 +56,44 @@ fun PlexConfigurationDialog( modifier: Modifier = Modifier, viewModel: PlexConfigurationViewModel = hiltViewModel() ) { - val address by viewModel.address.collectAsStateWithLifecycle() - val canAuthenticate by viewModel.canAuthenticate.collectAsStateWithLifecycle() - val loginCredentials by viewModel.loginCredentials.collectAsStateWithLifecycle() - val rememberPassword by viewModel.rememberPassword.collectAsStateWithLifecycle() - val authenticationSuccess by viewModel.authenticationSuccess.collectAsStateWithLifecycle() - - if (authenticationSuccess == true) { - LaunchedEffect(Unit) { - onDismissRequest() + val owner = LocalViewModelStoreOwner.current + DisposableEffect(Unit) { + onDispose { + owner?.viewModelStore?.clear() } } - + val viewState by viewModel.viewState.collectAsStateWithLifecycle() PlexConfigurationDialog( - address = address, modifier = modifier, - canAuthenticate = canAuthenticate, + viewState = viewState, onDismissRequest = onDismissRequest, - rememberPassword = rememberPassword, - loginCredentials = loginCredentials, onAddressChange = viewModel::onAddressChange, onUsernameChange = viewModel::onUsernameChange, onPasswordChange = viewModel::onPasswordChange, onAuthCodeChange = viewModel::onAuthCodeChange, - onAuthenticateClick = viewModel::onAuthenticateClick, - onRememberPasswordChange = viewModel::onRememberPasswordChange + onRememberPasswordChange = viewModel::onRememberPasswordChange, + onAuthenticationSuccess = viewModel::onConsumeAuthenticationSuccess, + onAuthenticateClick = { + viewModel.onAuthenticateClick( + address = viewState.address, + rememberPassword = viewState.rememberPassword, + loginCredentials = viewState.loginCredentials + ) + } ) } @Composable private fun PlexConfigurationDialog( - address: String, - canAuthenticate: Boolean, - rememberPassword: Boolean, - loginCredentials: LoginCredentials?, + viewState: PlexConfigurationViewState, onDismissRequest: () -> Unit, + onAuthenticateClick: () -> Unit, onAddressChange: (String) -> Unit, onAuthCodeChange: (String) -> Unit, onUsernameChange: (String) -> Unit, onPasswordChange: (String) -> Unit, + onAuthenticationSuccess: () -> Unit, onRememberPasswordChange: (Boolean) -> Unit, - onAuthenticateClick: (String, LoginCredentials) -> Unit, modifier: Modifier = Modifier ) { AlertDialog( @@ -96,119 +103,332 @@ private fun PlexConfigurationDialog( Text(text = stringResource(com.simplecityapps.mediaprovider.R.string.media_provider_title_long_plex)) }, text = { - Column(verticalArrangement = Arrangement.spacedBy(24.dp)) { - Column(verticalArrangement = Arrangement.spacedBy(8.dp)) { - OutlinedTextField( - value = address, - singleLine = true, - onValueChange = onAddressChange, - placeholder = { Text(text = "http://") }, - label = { Text(stringResource(com.simplecityapps.mediaprovider.R.string.media_provider_config_hint_address)) } - ) - Text( - color = MaterialTheme.colorScheme.tertiary, - style = MaterialTheme.typography.labelSmall, - text = "e.g. https://my.plex.server.com/32400" - ) - } - - OutlinedTextField( - singleLine = true, - onValueChange = onUsernameChange, - value = loginCredentials?.username ?: "", - label = { Text(stringResource(com.simplecityapps.mediaprovider.R.string.media_provider_config_hint_username)) } - ) - - var showPassword by remember { mutableStateOf(false) } - OutlinedTextField( - singleLine = true, - onValueChange = onPasswordChange, - value = loginCredentials?.password ?: "", - visualTransformation = if (showPassword) VisualTransformation.None else PasswordVisualTransformation(), - label = { Text(stringResource(com.simplecityapps.mediaprovider.R.string.media_provider_config_hint_password)) }, - trailingIcon = { - IconButton(onClick = { showPassword = !showPassword }) { - Icon( - contentDescription = null, - imageVector = if (showPassword) Icons.Default.VisibilityOff else Icons.Default.Visibility - ) + AnimatedContent(targetState = viewState.authenticationState) { state -> + when (state) { + PlexAuthenticationState.Success -> { + LaunchedEffect(Unit) { + onDismissRequest() + onAuthenticationSuccess() } } - ) - - Column(verticalArrangement = Arrangement.spacedBy(8.dp)) { - OutlinedTextField( - singleLine = true, - onValueChange = onAuthCodeChange, - value = loginCredentials?.authCode ?: "", - keyboardOptions = KeyboardOptions.Default.copy( - keyboardType = KeyboardType.Number - ), - label = { Text(stringResource(R.string.media_provider_config_hint_code)) } - ) - Text( - color = MaterialTheme.colorScheme.tertiary, - style = MaterialTheme.typography.bodySmall, - text = stringResource(R.string.media_provider_config_helper_code) - ) - } - Row( - modifier = Modifier - .fillMaxWidth() - .wrapContentWidth(Alignment.End), - verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.spacedBy(16.dp) - ) { - Text( - color = MaterialTheme.colorScheme.tertiary, - style = MaterialTheme.typography.bodySmall, - text = stringResource(com.simplecityapps.mediaprovider.R.string.media_provider_config_switch_remember_password) - ) - Switch( - checked = rememberPassword, - onCheckedChange = onRememberPasswordChange + PlexAuthenticationState.Loading -> PlexAuthenticationLoading() + is PlexAuthenticationState.Error -> PlexAuthenticationError(state = state) + null -> PlexAuthenticationInputForm( + address = viewState.address, + rememberPassword = viewState.rememberPassword, + loginCredentials = viewState.loginCredentials, + onAddressChange = onAddressChange, + onUsernameChange = onUsernameChange, + onPasswordChange = onPasswordChange, + onAuthCodeChange = onAuthCodeChange, + onRememberPasswordChange = onRememberPasswordChange ) } } }, dismissButton = { - TextButton(onClick = onDismissRequest) { - Text(text = stringResource(R.string.dialog_button_close)) + AnimatedVisibility(visible = viewState.authenticationState != PlexAuthenticationState.Loading) { + TextButton(onClick = onDismissRequest) { + Text(text = stringResource(R.string.dialog_button_close)) + } } }, confirmButton = { - TextButton( - enabled = canAuthenticate, - onClick = { onAuthenticateClick(address, loginCredentials!!) } - ) { - Text(text = stringResource(R.string.media_provider_button_authenticate)) + AnimatedVisibility(visible = viewState.authenticationState != PlexAuthenticationState.Loading) { + TextButton( + onClick = onAuthenticateClick, + enabled = viewState.canAuthenticate + ) { + Text(text = stringResource(R.string.media_provider_button_authenticate)) + } } } ) } +@Composable +private fun PlexAuthenticationInputForm( + address: String, + rememberPassword: Boolean, + loginCredentials: LoginCredentials, + onAddressChange: (String) -> Unit, + onUsernameChange: (String) -> Unit, + onPasswordChange: (String) -> Unit, + onAuthCodeChange: (String) -> Unit, + onRememberPasswordChange: (Boolean) -> Unit, + modifier: Modifier = Modifier +) { + Column( + modifier = modifier.fillMaxWidth(), + verticalArrangement = Arrangement.spacedBy(24.dp) + ) { + AddressInputField( + address = address, + onAddressChange = onAddressChange + ) + UsernameInputField( + username = loginCredentials.username, + onUsernameChange = onUsernameChange + ) + PasswordInputField( + password = loginCredentials.password, + onPasswordChange = onPasswordChange + ) + AuthCodeInputField( + authCode = loginCredentials.authCode, + onAuthCodeChange = onAuthCodeChange + ) + RememberPasswordSwitch( + rememberPassword = rememberPassword, + onRememberPasswordChange = onRememberPasswordChange + ) + } +} + +@Composable +private fun PlexAuthenticationLoading() { + Column( + modifier = Modifier.fillMaxWidth(), + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.spacedBy(24.dp) + ) { + CircularProgressIndicator() + Text(text = stringResource(R.string.media_provider_authenticating)) + } +} + +@Composable +private fun PlexAuthenticationError( + state: PlexAuthenticationState.Error, + modifier: Modifier = Modifier +) { + Column( + modifier = modifier.fillMaxWidth(), + verticalArrangement = Arrangement.spacedBy(24.dp) + ) { + Column(verticalArrangement = Arrangement.spacedBy(4.dp)) { + Text( + text = "Connection failed", + color = MaterialTheme.colorScheme.onSurface, + style = MaterialTheme.typography.headlineSmall + ) + Text( + color = MaterialTheme.colorScheme.onSurface, + style = MaterialTheme.typography.bodyLarge, + text = "Unable to authenticate with your Plex server." + ) + } + Column( + modifier = Modifier + .fillMaxWidth() + .heightIn(min = 96.dp) + .background( + shape = RoundedCornerShape(8.dp), + color = MaterialTheme.colorScheme.errorContainer.copy(alpha = 0.3f) + ) + .border( + width = 1.dp, + shape = RoundedCornerShape(8.dp), + color = MaterialTheme.colorScheme.error + ) + .padding(16.dp), + verticalArrangement = Arrangement.Center + ) { + Text( + text = "Error: ${state.error}", + color = MaterialTheme.colorScheme.tertiaryFixedDim + ) + } + } +} + +@Composable +private fun RememberPasswordSwitch( + rememberPassword: Boolean, + onRememberPasswordChange: (Boolean) -> Unit, + modifier: Modifier = Modifier +) { + Row( + modifier = modifier + .fillMaxWidth() + .wrapContentWidth(Alignment.End), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.spacedBy(16.dp) + ) { + Text( + color = MaterialTheme.colorScheme.tertiary, + style = MaterialTheme.typography.bodySmall, + text = stringResource(com.simplecityapps.mediaprovider.R.string.media_provider_config_switch_remember_password) + ) + Switch( + checked = rememberPassword, + onCheckedChange = onRememberPasswordChange + ) + } +} + +@Composable +private fun AuthCodeInputField( + authCode: String?, + onAuthCodeChange: (String) -> Unit, + modifier: Modifier = Modifier +) { + Column( + modifier = modifier, + verticalArrangement = Arrangement.spacedBy(8.dp) + ) { + OutlinedTextField( + singleLine = true, + value = authCode ?: "", + onValueChange = onAuthCodeChange, + keyboardOptions = KeyboardOptions.Default.copy( + keyboardType = KeyboardType.Number + ), + label = { Text(stringResource(R.string.media_provider_config_hint_code)) } + ) + Text( + color = MaterialTheme.colorScheme.tertiary, + style = MaterialTheme.typography.bodySmall, + text = stringResource(R.string.media_provider_config_helper_code) + ) + } +} + +@Composable +private fun PasswordInputField( + password: String?, + onPasswordChange: (String) -> Unit, + modifier: Modifier = Modifier +) { + var showPassword by remember { mutableStateOf(false) } + OutlinedTextField( + singleLine = true, + modifier = modifier, + value = password ?: "", + onValueChange = onPasswordChange, + visualTransformation = if (showPassword) VisualTransformation.None else PasswordVisualTransformation(), + label = { Text(stringResource(com.simplecityapps.mediaprovider.R.string.media_provider_config_hint_password)) }, + trailingIcon = { + IconButton(onClick = { showPassword = !showPassword }) { + Icon( + contentDescription = null, + imageVector = if (showPassword) Icons.Default.VisibilityOff else Icons.Default.Visibility + ) + } + } + ) +} + +@Composable +private fun UsernameInputField( + username: String?, + onUsernameChange: (String) -> Unit, + modifier: Modifier = Modifier +) { + OutlinedTextField( + singleLine = true, + modifier = modifier, + value = username ?: "", + onValueChange = onUsernameChange, + label = { Text(stringResource(com.simplecityapps.mediaprovider.R.string.media_provider_config_hint_username)) } + ) +} + +@Composable +private fun AddressInputField( + address: String, + onAddressChange: (String) -> Unit, + modifier: Modifier = Modifier +) { + Column( + modifier = modifier, + verticalArrangement = Arrangement.spacedBy(8.dp) + ) { + OutlinedTextField( + value = address, + singleLine = true, + onValueChange = onAddressChange, + placeholder = { Text(text = "http://") }, + label = { Text(stringResource(com.simplecityapps.mediaprovider.R.string.media_provider_config_hint_address)) } + ) + Text( + color = MaterialTheme.colorScheme.tertiary, + style = MaterialTheme.typography.labelSmall, + text = "e.g. https://my.plex.server.com/32400" + ) + } +} + +@Snapshot +@Preview +@Composable +private fun Loading(@PreviewParameter(ColorSchemePreviewParameterProvider::class) colorScheme: ColorScheme) { + MaterialTheme(colorScheme = colorScheme) { + PlexConfigurationDialog( + onDismissRequest = {}, + viewState = PlexConfigurationViewState.Empty.copy( + authenticationState = PlexAuthenticationState.Loading + ), + onAddressChange = {}, + onUsernameChange = {}, + onPasswordChange = {}, + onAuthCodeChange = {}, + onAuthenticateClick = {}, + onAuthenticationSuccess = {}, + onRememberPasswordChange = {} + ) + } +} + @Snapshot @Preview @Composable -private fun Preview(@PreviewParameter(ColorSchemePreviewParameterProvider::class) colorScheme: ColorScheme) { +private fun Success(@PreviewParameter(ColorSchemePreviewParameterProvider::class) colorScheme: ColorScheme) { MaterialTheme(colorScheme = colorScheme) { PlexConfigurationDialog( onDismissRequest = {}, - address = "http://", - loginCredentials = LoginCredentials( - username = "shuttle", - password = "musicplayer", - authCode = null + viewState = PlexConfigurationViewState( + address = "http://", + loginCredentials = LoginCredentials( + username = "shuttle", + password = "musicplayer", + authCode = null + ), + canAuthenticate = true, + rememberPassword = false, + authenticationState = null + ), + onAddressChange = {}, + onUsernameChange = {}, + onPasswordChange = {}, + onAuthCodeChange = {}, + onAuthenticateClick = {}, + onAuthenticationSuccess = {}, + onRememberPasswordChange = {} + ) + } +} + +@Snapshot +@Preview +@Composable +private fun Error(@PreviewParameter(ColorSchemePreviewParameterProvider::class) colorScheme: ColorScheme) { + MaterialTheme(colorScheme = colorScheme) { + PlexConfigurationDialog( + onDismissRequest = {}, + viewState = PlexConfigurationViewState.Empty.copy( + authenticationState = PlexAuthenticationState.Error( + error = RuntimeException("Unable to connect to server") + ) ), - canAuthenticate = true, - rememberPassword = false, onAddressChange = {}, onUsernameChange = {}, onPasswordChange = {}, onAuthCodeChange = {}, - onRememberPasswordChange = {}, - onAuthenticateClick = { _, _ -> } + onAuthenticateClick = {}, + onAuthenticationSuccess = {}, + onRememberPasswordChange = {} ) } } diff --git a/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/plex/PlexConfigurationFragment.kt b/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/plex/PlexConfigurationFragment.kt index 0d1cd29df..add914219 100644 --- a/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/plex/PlexConfigurationFragment.kt +++ b/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/plex/PlexConfigurationFragment.kt @@ -18,10 +18,10 @@ import com.simplecityapps.shuttle.R import com.simplecityapps.shuttle.ui.common.autoCleared import com.simplecityapps.shuttle.ui.common.view.CircularLoadingView import dagger.hilt.android.AndroidEntryPoint +import javax.inject.Inject import kotlinx.coroutines.delay import kotlinx.coroutines.launch import timber.log.Timber -import javax.inject.Inject @AndroidEntryPoint class PlexConfigurationFragment : DialogFragment() { diff --git a/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/plex/PlexConfigurationViewModel.kt b/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/plex/PlexConfigurationViewModel.kt index bf0e27bfc..1964a4a45 100644 --- a/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/plex/PlexConfigurationViewModel.kt +++ b/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/plex/PlexConfigurationViewModel.kt @@ -5,83 +5,109 @@ import androidx.lifecycle.viewModelScope import com.simplecityapps.provider.plex.PlexAuthenticationManager import com.simplecityapps.provider.plex.http.LoginCredentials import dagger.hilt.android.lifecycle.HiltViewModel +import javax.inject.Inject import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.SharingStarted -import kotlinx.coroutines.flow.asStateFlow -import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch -import javax.inject.Inject @HiltViewModel class PlexConfigurationViewModel @Inject constructor( private val plexAuthenticationManager: PlexAuthenticationManager ) : ViewModel() { - private val _address = MutableStateFlow( - plexAuthenticationManager.getAddress() ?: "" + private val _viewState = MutableStateFlow( + PlexConfigurationViewState.Empty.copy( + address = plexAuthenticationManager.getAddress() ?: "", + rememberPassword = plexAuthenticationManager.getLoginCredentials() != null, + loginCredentials = plexAuthenticationManager.getLoginCredentials() ?: LoginCredentials.Empty + ) ) - val address = _address.asStateFlow() - - private val _loginCredentials = MutableStateFlow( - plexAuthenticationManager.getLoginCredentials() ?: LoginCredentials.Empty - ) - val loginCredentials = _loginCredentials.asStateFlow() - - val canAuthenticate = combine( - _address, - _loginCredentials - ) { address, (username, password, _) -> - address.isNotBlank() && username.isNotBlank() && password.isNotBlank() + val viewState = _viewState.map { state -> + PlexConfigurationViewState( + address = state.address, + loginCredentials = state.loginCredentials, + rememberPassword = state.rememberPassword, + authenticationState = state.authenticationState, + canAuthenticate = state.address.isNotBlank() && + state.loginCredentials.username.isNotBlank() && + state.loginCredentials.password.isNotBlank() + ) }.stateIn( - viewModelScope, - initialValue = false, - started = SharingStarted.WhileSubscribed() + scope = viewModelScope, + started = SharingStarted.WhileSubscribed(), + initialValue = PlexConfigurationViewState.Empty.copy( + address = plexAuthenticationManager.getAddress() ?: "", + rememberPassword = plexAuthenticationManager.getLoginCredentials() != null, + loginCredentials = plexAuthenticationManager.getLoginCredentials() ?: LoginCredentials.Empty + ) ) - private val _rememberPassword = MutableStateFlow( - plexAuthenticationManager.getLoginCredentials() != null - ) - val rememberPassword = _rememberPassword.asStateFlow() - - private val _authenticationSuccess = MutableStateFlow(null) - val authenticationSuccess = _authenticationSuccess.asStateFlow() - fun onAddressChange(address: String) { - _address.update { address } + _viewState.update { state -> + state.copy(address = address) + } } fun onUsernameChange(username: String) { - _loginCredentials.update { credentials -> credentials.copy(username = username) } + _viewState.update { state -> + state.copy(loginCredentials = state.loginCredentials.copy(username = username)) + } } fun onPasswordChange(password: String) { - _loginCredentials.update { credentials -> credentials.copy(password = password) } + _viewState.update { state -> + state.copy(loginCredentials = state.loginCredentials.copy(password = password)) + } } fun onAuthCodeChange(authCode: String) { - _loginCredentials.update { credentials -> credentials.copy(authCode = authCode) } + _viewState.update { state -> + state.copy(loginCredentials = state.loginCredentials.copy(authCode = authCode)) + } } fun onRememberPasswordChange(remember: Boolean) { if (!remember) { plexAuthenticationManager.setLoginCredentials(null) } - _rememberPassword.update { remember } + _viewState.update { state -> + state.copy(rememberPassword = remember) + } } - fun onAuthenticateClick(address: String, loginCredentials: LoginCredentials) { + fun onAuthenticateClick( + address: String, + rememberPassword: Boolean, + loginCredentials: LoginCredentials + ) { viewModelScope.launch { + _viewState.update { state -> + state.copy(authenticationState = PlexAuthenticationState.Loading) + } plexAuthenticationManager.authenticate( address = address, loginCredentials = loginCredentials ).onSuccess { - plexAuthenticationManager.setLoginCredentials(loginCredentials) - _authenticationSuccess.update { true } - }.onFailure { - _authenticationSuccess.update { false } + if (rememberPassword) { + plexAuthenticationManager.setLoginCredentials(loginCredentials) + } + _viewState.update { state -> + state.copy(authenticationState = PlexAuthenticationState.Success) + } + }.onFailure { error -> + _viewState.update { state -> + state.copy(authenticationState = PlexAuthenticationState.Error(error)) + } } } } + + fun onConsumeAuthenticationSuccess() { + _viewState.update { state -> + state.copy(authenticationState = null) + } + } } diff --git a/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/plex/PlexConfigurationViewState.kt b/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/plex/PlexConfigurationViewState.kt new file mode 100644 index 000000000..cc7d876f2 --- /dev/null +++ b/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/plex/PlexConfigurationViewState.kt @@ -0,0 +1,21 @@ +package com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex + +import com.simplecityapps.provider.plex.http.LoginCredentials + +data class PlexConfigurationViewState( + val address: String, + val canAuthenticate: Boolean, + val rememberPassword: Boolean, + val loginCredentials: LoginCredentials, + val authenticationState: PlexAuthenticationState? +) { + companion object { + val Empty = PlexConfigurationViewState( + address = "", + canAuthenticate = false, + rememberPassword = false, + authenticationState = null, + loginCredentials = LoginCredentials.Empty + ) + } +} From 2c6530f4cd0d1575ce842e0da319391c6366824d Mon Sep 17 00:00:00 2001 From: Andrew Neal Date: Sun, 16 Nov 2025 19:02:57 -0600 Subject: [PATCH 5/7] set address on success --- .../onboarding/mediaprovider/plex/PlexConfigurationViewModel.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/plex/PlexConfigurationViewModel.kt b/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/plex/PlexConfigurationViewModel.kt index 1964a4a45..ce64378db 100644 --- a/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/plex/PlexConfigurationViewModel.kt +++ b/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/mediaprovider/plex/PlexConfigurationViewModel.kt @@ -91,6 +91,7 @@ class PlexConfigurationViewModel @Inject constructor( address = address, loginCredentials = loginCredentials ).onSuccess { + plexAuthenticationManager.setAddress(address) if (rememberPassword) { plexAuthenticationManager.setLoginCredentials(loginCredentials) } From c62c53d42518e93cf4bc71486a3a12e185f9d311 Mon Sep 17 00:00:00 2001 From: Andrew Neal Date: Sun, 16 Nov 2025 19:06:45 -0600 Subject: [PATCH 6/7] update snapshots --- ...der.plex.PlexConfigurationDialogKt_Error_ColorScheme_0].png | 3 +++ ...er.plex.PlexConfigurationDialogKt_Error_ColorScheme_10].png | 3 +++ ...er.plex.PlexConfigurationDialogKt_Error_ColorScheme_11].png | 3 +++ ...der.plex.PlexConfigurationDialogKt_Error_ColorScheme_1].png | 3 +++ ...der.plex.PlexConfigurationDialogKt_Error_ColorScheme_2].png | 3 +++ ...der.plex.PlexConfigurationDialogKt_Error_ColorScheme_3].png | 3 +++ ...der.plex.PlexConfigurationDialogKt_Error_ColorScheme_4].png | 3 +++ ...der.plex.PlexConfigurationDialogKt_Error_ColorScheme_5].png | 3 +++ ...der.plex.PlexConfigurationDialogKt_Error_ColorScheme_6].png | 3 +++ ...der.plex.PlexConfigurationDialogKt_Error_ColorScheme_7].png | 3 +++ ...der.plex.PlexConfigurationDialogKt_Error_ColorScheme_8].png | 3 +++ ...der.plex.PlexConfigurationDialogKt_Error_ColorScheme_9].png | 3 +++ ...r.plex.PlexConfigurationDialogKt_Loading_ColorScheme_0].png | 3 +++ ....plex.PlexConfigurationDialogKt_Loading_ColorScheme_10].png | 3 +++ ....plex.PlexConfigurationDialogKt_Loading_ColorScheme_11].png | 3 +++ ...r.plex.PlexConfigurationDialogKt_Loading_ColorScheme_1].png | 3 +++ ...r.plex.PlexConfigurationDialogKt_Loading_ColorScheme_2].png | 3 +++ ...r.plex.PlexConfigurationDialogKt_Loading_ColorScheme_3].png | 3 +++ ...r.plex.PlexConfigurationDialogKt_Loading_ColorScheme_4].png | 3 +++ ...r.plex.PlexConfigurationDialogKt_Loading_ColorScheme_5].png | 3 +++ ...r.plex.PlexConfigurationDialogKt_Loading_ColorScheme_6].png | 3 +++ ...r.plex.PlexConfigurationDialogKt_Loading_ColorScheme_7].png | 3 +++ ...r.plex.PlexConfigurationDialogKt_Loading_ColorScheme_8].png | 3 +++ ...r.plex.PlexConfigurationDialogKt_Loading_ColorScheme_9].png | 3 +++ ...r.plex.PlexConfigurationDialogKt_Success_ColorScheme_0].png | 3 +++ ....plex.PlexConfigurationDialogKt_Success_ColorScheme_10].png | 3 +++ ....plex.PlexConfigurationDialogKt_Success_ColorScheme_11].png | 3 +++ ...r.plex.PlexConfigurationDialogKt_Success_ColorScheme_1].png | 3 +++ ...r.plex.PlexConfigurationDialogKt_Success_ColorScheme_2].png | 3 +++ ...r.plex.PlexConfigurationDialogKt_Success_ColorScheme_3].png | 3 +++ ...r.plex.PlexConfigurationDialogKt_Success_ColorScheme_4].png | 3 +++ ...r.plex.PlexConfigurationDialogKt_Success_ColorScheme_5].png | 3 +++ ...r.plex.PlexConfigurationDialogKt_Success_ColorScheme_6].png | 3 +++ ...r.plex.PlexConfigurationDialogKt_Success_ColorScheme_7].png | 3 +++ ...r.plex.PlexConfigurationDialogKt_Success_ColorScheme_8].png | 3 +++ ...r.plex.PlexConfigurationDialogKt_Success_ColorScheme_9].png | 3 +++ 36 files changed, 108 insertions(+) create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Error_ColorScheme_0].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Error_ColorScheme_10].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Error_ColorScheme_11].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Error_ColorScheme_1].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Error_ColorScheme_2].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Error_ColorScheme_3].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Error_ColorScheme_4].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Error_ColorScheme_5].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Error_ColorScheme_6].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Error_ColorScheme_7].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Error_ColorScheme_8].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Error_ColorScheme_9].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Loading_ColorScheme_0].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Loading_ColorScheme_10].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Loading_ColorScheme_11].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Loading_ColorScheme_1].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Loading_ColorScheme_2].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Loading_ColorScheme_3].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Loading_ColorScheme_4].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Loading_ColorScheme_5].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Loading_ColorScheme_6].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Loading_ColorScheme_7].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Loading_ColorScheme_8].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Loading_ColorScheme_9].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Success_ColorScheme_0].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Success_ColorScheme_10].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Success_ColorScheme_11].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Success_ColorScheme_1].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Success_ColorScheme_2].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Success_ColorScheme_3].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Success_ColorScheme_4].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Success_ColorScheme_5].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Success_ColorScheme_6].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Success_ColorScheme_7].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Success_ColorScheme_8].png create mode 100644 android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Success_ColorScheme_9].png diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Error_ColorScheme_0].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Error_ColorScheme_0].png new file mode 100644 index 000000000..e717f26be --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Error_ColorScheme_0].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:75b41378514d55d8157d767a638cf78ef76ab5d4182cec94b8a6f9752b912a04 +size 28793 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Error_ColorScheme_10].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Error_ColorScheme_10].png new file mode 100644 index 000000000..fc13d3965 --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Error_ColorScheme_10].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:978daee61900838d1f80633d0299fd3aa1bce9d69a891a46810c97b7d336350e +size 29023 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Error_ColorScheme_11].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Error_ColorScheme_11].png new file mode 100644 index 000000000..f0e5cc506 --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Error_ColorScheme_11].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cb33ce13383cea2900995fb3b4ecf9887e1e45315bad907687e0f7043fb5bb6d +size 28695 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Error_ColorScheme_1].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Error_ColorScheme_1].png new file mode 100644 index 000000000..075c87927 --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Error_ColorScheme_1].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a960650e6dc77efc86125f4827a26dd8f98015dbdc98b2fab6bd718a1b06536f +size 28419 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Error_ColorScheme_2].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Error_ColorScheme_2].png new file mode 100644 index 000000000..c7895049c --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Error_ColorScheme_2].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b2d05ecb9c539352739a24201f5651934c54040a444c2a337f5000f580281785 +size 28902 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Error_ColorScheme_3].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Error_ColorScheme_3].png new file mode 100644 index 000000000..c840dd80a --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Error_ColorScheme_3].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d143871979f6e2e38247922357234077c5c8f0240dc7fd046d11a6ba51d33c82 +size 28302 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Error_ColorScheme_4].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Error_ColorScheme_4].png new file mode 100644 index 000000000..22487e6ce --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Error_ColorScheme_4].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1e36c19000c4ce39859a20a1e1e7866ddc93b211bb64fde95e00bd0811093315 +size 27625 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Error_ColorScheme_5].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Error_ColorScheme_5].png new file mode 100644 index 000000000..e5d0ea557 --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Error_ColorScheme_5].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:72fe2991663ccab7eef55a59d91f29047644ac7e10b42ac0e1e1ecbd014756ec +size 27952 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Error_ColorScheme_6].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Error_ColorScheme_6].png new file mode 100644 index 000000000..e0b70e681 --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Error_ColorScheme_6].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9e6b21cef928d07108904efce65cbee618223e65fbf6e368f8deb3141f73042e +size 28946 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Error_ColorScheme_7].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Error_ColorScheme_7].png new file mode 100644 index 000000000..dad9d3ca8 --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Error_ColorScheme_7].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:361632fcbae8295c983d10003ae24a3e5d222f337bbbfa7de0b05ea609f43341 +size 28589 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Error_ColorScheme_8].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Error_ColorScheme_8].png new file mode 100644 index 000000000..77ee98303 --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Error_ColorScheme_8].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9b9f04a9fd06244e9db69e3df21676cfdb676c8650ca0201e84e29f66850489e +size 28747 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Error_ColorScheme_9].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Error_ColorScheme_9].png new file mode 100644 index 000000000..a8b0bc038 --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Error_ColorScheme_9].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b4af399b0c8acadd91a28d8e1629cd90dff8ea705ffaf320ed22cd01186aed37 +size 28034 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Loading_ColorScheme_0].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Loading_ColorScheme_0].png new file mode 100644 index 000000000..db98c5525 --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Loading_ColorScheme_0].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d102f4bb90ee6b4431f98ff50956d970b847f40d12d6bcd3540e1643a4871f79 +size 11661 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Loading_ColorScheme_10].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Loading_ColorScheme_10].png new file mode 100644 index 000000000..6bb3a9344 --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Loading_ColorScheme_10].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eac1d7dae27dcca058d20732dce0857de25c544ba271645f14f03e8028599890 +size 11809 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Loading_ColorScheme_11].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Loading_ColorScheme_11].png new file mode 100644 index 000000000..cf7bf24aa --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Loading_ColorScheme_11].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4f00d90f6b60fe8bd72af1b95f90531f5f82c139c903567bd8e12be888f644ed +size 11465 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Loading_ColorScheme_1].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Loading_ColorScheme_1].png new file mode 100644 index 000000000..f02fa6b3c --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Loading_ColorScheme_1].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e55a13a67bc369af16918b18d6963ab24a9052116dab1c90d45760214cb490c7 +size 11405 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Loading_ColorScheme_2].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Loading_ColorScheme_2].png new file mode 100644 index 000000000..eb256ebaf --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Loading_ColorScheme_2].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fbf63ed8c455cfa1854a0a4f2c36cbb9850862af2024f497faf37057a5f1391a +size 11753 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Loading_ColorScheme_3].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Loading_ColorScheme_3].png new file mode 100644 index 000000000..66dcc8011 --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Loading_ColorScheme_3].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a761c821c85befdfdd809295f3e1e31b72616eca1c5c2ed6e887abfc053580f2 +size 11302 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Loading_ColorScheme_4].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Loading_ColorScheme_4].png new file mode 100644 index 000000000..5d7f018b0 --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Loading_ColorScheme_4].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:65818ac7977a8b44e1406b11b748c3e43a8bbd4333714c0dbbea3bf57c7b64cb +size 11353 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Loading_ColorScheme_5].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Loading_ColorScheme_5].png new file mode 100644 index 000000000..45b48d705 --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Loading_ColorScheme_5].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:65e898f27fce6e2d937505620fd7e06f398d83f9904978384e4fb76121035bbc +size 11203 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Loading_ColorScheme_6].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Loading_ColorScheme_6].png new file mode 100644 index 000000000..e77c614d3 --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Loading_ColorScheme_6].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:228905f7210264ea6f459d617f4e606afcd57a6e3b5b40b23670a60e3f48fd6f +size 11744 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Loading_ColorScheme_7].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Loading_ColorScheme_7].png new file mode 100644 index 000000000..f57c60c7c --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Loading_ColorScheme_7].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:676b26a49998f3185626b83346d4362e75648ebb4b95bf1345339ebc0b264608 +size 11374 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Loading_ColorScheme_8].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Loading_ColorScheme_8].png new file mode 100644 index 000000000..acef24dbb --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Loading_ColorScheme_8].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e0871b4afea3f0e9a44a9212f808c14cc9edb266f1007288dda8367903e1e9cd +size 11584 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Loading_ColorScheme_9].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Loading_ColorScheme_9].png new file mode 100644 index 000000000..68bde75a9 --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Loading_ColorScheme_9].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1e14848c9070193d0b526accccc2787766482021a8ad2fcecdcf4919f5a12c2b +size 11232 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Success_ColorScheme_0].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Success_ColorScheme_0].png new file mode 100644 index 000000000..be0cda73c --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Success_ColorScheme_0].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:67b24c83b0615ddefb072d3b483b5f414f690f17b69ea41a62aa9accba5d5360 +size 30306 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Success_ColorScheme_10].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Success_ColorScheme_10].png new file mode 100644 index 000000000..a140f4885 --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Success_ColorScheme_10].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:95539fddcbaf8957871deffcc99a9eb2a092fd878443faf06d266f86482d19f4 +size 30541 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Success_ColorScheme_11].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Success_ColorScheme_11].png new file mode 100644 index 000000000..e1b04a9dd --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Success_ColorScheme_11].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:03b5bb042196531c0c415865cb18322aca8c15815491b6f4ded613d9b12119b5 +size 30197 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Success_ColorScheme_1].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Success_ColorScheme_1].png new file mode 100644 index 000000000..445680029 --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Success_ColorScheme_1].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:935c8cc62ac9d5072e16bfffc025df2d41da7a7c3de4fbcaae8c262d3f2c1f00 +size 30282 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Success_ColorScheme_2].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Success_ColorScheme_2].png new file mode 100644 index 000000000..d993b5151 --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Success_ColorScheme_2].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d5388eb6c2bc15a0fa1fbbffc253763ff9ea504cf20bf8851fa067c17f111ddb +size 30354 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Success_ColorScheme_3].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Success_ColorScheme_3].png new file mode 100644 index 000000000..0b61b1fe2 --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Success_ColorScheme_3].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:97818c9fb0c0f60035bfb3b72fe190a429e1e0aa72e6454d6dce199c848afb01 +size 29803 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Success_ColorScheme_4].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Success_ColorScheme_4].png new file mode 100644 index 000000000..2f3175fda --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Success_ColorScheme_4].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8417d9b9298cf20ef20879c29633e8601e02bf8a2d388eb8c52db043e181be69 +size 29796 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Success_ColorScheme_5].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Success_ColorScheme_5].png new file mode 100644 index 000000000..042ffb067 --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Success_ColorScheme_5].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c77dfbbabcaddb599940cfaeb847c1d0c3dce51b2ed0f8c32b16304f9394802e +size 29728 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Success_ColorScheme_6].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Success_ColorScheme_6].png new file mode 100644 index 000000000..624be95fe --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Success_ColorScheme_6].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:92c0410937d045b8baa9c6686857d10bfdb738d36721c34196950f35d79c9031 +size 30424 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Success_ColorScheme_7].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Success_ColorScheme_7].png new file mode 100644 index 000000000..7a62cc0be --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Success_ColorScheme_7].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6209cd079681264bb69b5393cae7ad1628c1d2dce157e6dde34c55ac28f2330e +size 30243 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Success_ColorScheme_8].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Success_ColorScheme_8].png new file mode 100644 index 000000000..b9b05399a --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Success_ColorScheme_8].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a1a2a200fe89dcee67a039404935bca2b7fe94bcd74b9a61d9306e4276013e48 +size 30192 diff --git a/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Success_ColorScheme_9].png b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Success_ColorScheme_9].png new file mode 100644 index 000000000..ee2d7d537 --- /dev/null +++ b/android/app/src/test/snapshots/images/com.simplecityapps.snapshot_SnapshotComposePreviewTests_previewTests[com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.plex.PlexConfigurationDialogKt_Success_ColorScheme_9].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f997c8b02b712de5e470f168e6355ef2dc9a38c98774e7754d1dec51231fff2a +size 29497 From 9c51e4b69afc53cef1b1374ab471a4656d05d6cf Mon Sep 17 00:00:00 2001 From: Andrew Neal Date: Sun, 16 Nov 2025 19:08:00 -0600 Subject: [PATCH 7/7] ktlint --- .../shuttle/ui/screens/onboarding/OnboardingParentFragment.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/OnboardingParentFragment.kt b/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/OnboardingParentFragment.kt index 5fb67c942..6cf3cfa99 100644 --- a/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/OnboardingParentFragment.kt +++ b/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/onboarding/OnboardingParentFragment.kt @@ -25,8 +25,8 @@ import com.simplecityapps.shuttle.ui.screens.onboarding.mediaprovider.taglib.Dir 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 me.relex.circleindicator.CircleIndicator3 import javax.inject.Inject +import me.relex.circleindicator.CircleIndicator3 enum class OnboardingPage { StoragePermission,