11package com.neki.android.app.main
22
3- import androidx.compose.animation.ContentTransform
4- import androidx.compose.animation.EnterTransition
5- import androidx.compose.animation.ExitTransition
63import androidx.activity.compose.rememberLauncherForActivityResult
74import androidx.activity.result.PickVisualMediaRequest
85import androidx.activity.result.contract.ActivityResultContracts
6+ import androidx.compose.animation.ContentTransform
7+ import androidx.compose.animation.EnterTransition
8+ import androidx.compose.animation.ExitTransition
99import androidx.compose.foundation.layout.PaddingValues
1010import androidx.compose.foundation.layout.fillMaxSize
1111import androidx.compose.foundation.layout.navigationBarsPadding
1212import androidx.compose.foundation.layout.padding
1313import androidx.compose.material3.Scaffold
1414import androidx.compose.runtime.Composable
15+ import androidx.compose.runtime.LaunchedEffect
1516import androidx.compose.runtime.getValue
1617import androidx.compose.runtime.mutableStateOf
1718import androidx.compose.runtime.remember
1819import androidx.compose.runtime.snapshots.SnapshotStateList
1920import androidx.compose.ui.Modifier
2021import androidx.compose.ui.platform.LocalContext
22+ import androidx.core.net.toUri
2123import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
2224import androidx.lifecycle.compose.collectAsStateWithLifecycle
2325import androidx.navigation3.runtime.NavEntry
2426import androidx.navigation3.runtime.NavKey
2527import androidx.navigation3.ui.NavDisplay
2628import com.neki.android.app.main.component.AddPhotoBottomSheet
2729import com.neki.android.app.main.component.AlbumUploadOption
28- import com.neki.android.app.ui.BottomNavigationBar
2930import com.neki.android.app.main.component.SelectWithAlbumDialog
31+ import com.neki.android.app.ui.BottomNavigationBar
3032import com.neki.android.core.navigation.result.LocalResultEventBus
3133import com.neki.android.core.navigation.result.ResultEffect
3234import com.neki.android.core.ui.component.LoadingDialog
3335import com.neki.android.core.ui.compose.collectWithLifecycle
3436import com.neki.android.core.ui.toast.NekiToast
3537import com.neki.android.feature.archive.api.ArchiveNavKey
36- import com.neki.android.feature.archive.api.ArchiveResult
38+ import com.neki.android.feature.archive.api.PhotoUploadedResult
3739import com.neki.android.feature.map.api.MapNavKey
3840import com.neki.android.feature.mypage.api.MyPageNavKey
3941import com.neki.android.feature.photo_upload.api.PhotoUploadNavKey
4042import com.neki.android.feature.photo_upload.api.QRScanResult
4143import com.neki.android.feature.pose.api.PoseNavKey
44+ import com.neki.android.feature.select_album.api.SelectAlbumAction
45+ import kotlinx.collections.immutable.ImmutableList
46+ import kotlinx.collections.immutable.persistentListOf
4247import timber.log.Timber
4348
4449@Composable
@@ -50,8 +55,9 @@ fun MainRoute(
5055 onTabSelected : (NavKey ) -> Unit ,
5156 onBack : () -> Unit ,
5257 navigateToQRScan : () -> Unit ,
53- navigateToUploadAlbumWithGallery : (List <String >) -> Unit ,
54- navigateToUploadAlbumWithQRScan : (String ) -> Unit ,
58+ navigateToSelectAlbum : (SelectAlbumAction ) -> Unit ,
59+ pendingShareUriStrings : ImmutableList <String > = persistentListOf(),
60+ onShareUrisConsumed : () -> Unit = {},
5561 viewModel : MainViewModel = hiltViewModel(),
5662) {
5763 val uiState by viewModel.store.uiState.collectAsStateWithLifecycle()
@@ -69,6 +75,13 @@ fun MainRoute(
6975 }
7076 }
7177
78+ LaunchedEffect (pendingShareUriStrings) {
79+ if (pendingShareUriStrings.isNotEmpty()) {
80+ viewModel.store.onIntent(MainIntent .ShareImageReceived (pendingShareUriStrings.map { it.toUri() }))
81+ onShareUrisConsumed()
82+ }
83+ }
84+
7285 ResultEffect <QRScanResult >(resultBus) { result ->
7386 when (result) {
7487 is QRScanResult .QRCodeScanned -> viewModel.store.onIntent(MainIntent .QRCodeScanned (result.imageUrl))
@@ -83,10 +96,9 @@ fun MainRoute(
8396 PickVisualMediaRequest (ActivityResultContracts .PickVisualMedia .ImageOnly ),
8497 )
8598
86- is MainSideEffect .NavigateToUploadAlbumWithGallery -> navigateToUploadAlbumWithGallery(sideEffect.uriStrings)
87- is MainSideEffect .NavigateToUploadAlbumWithQRScan -> navigateToUploadAlbumWithQRScan(sideEffect.imageUrl)
99+ is MainSideEffect .NavigateToSelectAlbum -> navigateToSelectAlbum(sideEffect.action)
88100 is MainSideEffect .ShowToast -> nekiToast.showToast(sideEffect.message)
89- MainSideEffect .RefreshArchive -> resultBus.sendResult< ArchiveResult > (result = ArchiveResult . PhotoUploaded )
101+ MainSideEffect .RefreshArchive -> resultBus.sendResult(result = PhotoUploadedResult , allowDuplicate = false )
90102 }
91103 }
92104
@@ -116,7 +128,6 @@ fun MainScreen(
116128 val shouldShowBottomBar by remember(currentKey) {
117129 mutableStateOf(currentKey in topLevelKeys)
118130 }
119-
120131 Scaffold (
121132 modifier = Modifier
122133 .fillMaxSize()
@@ -153,7 +164,7 @@ fun MainScreen(
153164 )
154165 }
155166
156- if (uiState.isLoading) {
167+ if (uiState.isLoading && ! uiState.isShowSelectWithAlbumDialog ) {
157168 LoadingDialog ()
158169 }
159170
0 commit comments