Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
14 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,8 @@ dependencies {
implementation(projects.feature.mypage.impl)
implementation(projects.feature.photoUpload.api)
implementation(projects.feature.photoUpload.impl)
implementation(projects.feature.selectAlbum.api)
implementation(projects.feature.selectAlbum.impl)

implementation(libs.timber)

Expand Down
5 changes: 2 additions & 3 deletions app/src/main/java/com/neki/android/app/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ import com.neki.android.core.navigation.root.RootNavigator
import com.neki.android.feature.auth.api.AuthNavKey
import com.neki.android.feature.auth.impl.navigation.authEntryProvider
import com.neki.android.feature.photo_upload.api.navigateToQRScan
import com.neki.android.feature.photo_upload.api.navigateToUploadAlbum
import com.neki.android.feature.select_album.api.navigateToSelectAlbum
import android.net.Uri
import androidx.core.content.IntentCompat
import dagger.hilt.android.AndroidEntryPoint
Expand Down Expand Up @@ -123,8 +123,7 @@ class MainActivity : ComponentActivity() {
onTabSelected = { mainNavigator.navigate(it) },
onBack = { mainNavigator.goBack() },
navigateToQRScan = mainNavigator::navigateToQRScan,
navigateToUploadAlbumWithGallery = mainNavigator::navigateToUploadAlbum,
navigateToUploadAlbumWithQRScan = mainNavigator::navigateToUploadAlbum,
navigateToSelectAlbum = { action -> mainNavigator.navigateToSelectAlbum(action) },
pendingShareUriStrings = pendingShareUriStrings,
onShareUrisConsumed = { pendingShareUriStrings = persistentListOf() },
)
Expand Down
4 changes: 2 additions & 2 deletions app/src/main/java/com/neki/android/app/main/MainContract.kt
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.neki.android.app.main

import android.net.Uri
import com.neki.android.feature.select_album.api.SelectAlbumAction
import kotlinx.collections.immutable.ImmutableList
import kotlinx.collections.immutable.persistentListOf

Expand Down Expand Up @@ -28,8 +29,7 @@ sealed interface MainIntent {
sealed interface MainSideEffect {
data object NavigateToQRScan : MainSideEffect
data object OpenGallery : MainSideEffect
data class NavigateToUploadAlbumWithGallery(val uriStrings: List<String>) : MainSideEffect
data class NavigateToUploadAlbumWithQRScan(val imageUrl: String) : MainSideEffect
data class NavigateToSelectAlbum(val action: SelectAlbumAction) : MainSideEffect
data class ShowToast(val message: String) : MainSideEffect
data object RefreshArchive : MainSideEffect
}
8 changes: 3 additions & 5 deletions app/src/main/java/com/neki/android/app/main/MainScreen.kt
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ import com.neki.android.feature.mypage.api.MyPageNavKey
import com.neki.android.feature.photo_upload.api.PhotoUploadNavKey
import com.neki.android.feature.photo_upload.api.QRScanResult
import com.neki.android.feature.pose.api.PoseNavKey
import com.neki.android.feature.select_album.api.SelectAlbumAction
import timber.log.Timber

@Composable
Expand All @@ -54,8 +55,7 @@ fun MainRoute(
onTabSelected: (NavKey) -> Unit,
onBack: () -> Unit,
navigateToQRScan: () -> Unit,
navigateToUploadAlbumWithGallery: (List<String>) -> Unit,
navigateToUploadAlbumWithQRScan: (String) -> Unit,
navigateToSelectAlbum: (SelectAlbumAction) -> Unit,
pendingShareUriStrings: ImmutableList<String> = persistentListOf(),
onShareUrisConsumed: () -> Unit = {},
viewModel: MainViewModel = hiltViewModel(),
Expand Down Expand Up @@ -95,9 +95,7 @@ fun MainRoute(
MainSideEffect.OpenGallery -> photoPicker.launch(
PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.ImageOnly),
)

is MainSideEffect.NavigateToUploadAlbumWithGallery -> navigateToUploadAlbumWithGallery(sideEffect.uriStrings)
is MainSideEffect.NavigateToUploadAlbumWithQRScan -> navigateToUploadAlbumWithQRScan(sideEffect.imageUrl)
is MainSideEffect.NavigateToSelectAlbum -> navigateToSelectAlbum(sideEffect.action)
is MainSideEffect.ShowToast -> nekiToast.showToast(sideEffect.message)
MainSideEffect.RefreshArchive -> resultBus.sendResult(result = PhotoUploadedResult, allowDuplicate = false)
}
Expand Down
55 changes: 28 additions & 27 deletions app/src/main/java/com/neki/android/app/main/MainViewModel.kt
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import com.neki.android.core.domain.usecase.UploadMultiplePhotoUseCase
import com.neki.android.core.domain.usecase.UploadSinglePhotoUseCase
import com.neki.android.core.ui.MviIntentStore
import com.neki.android.core.ui.mviIntentStore
import com.neki.android.feature.select_album.api.SelectAlbumAction
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.collections.immutable.persistentListOf
import kotlinx.collections.immutable.toImmutableList
Expand Down Expand Up @@ -39,10 +40,12 @@ class MainViewModel @Inject constructor(
reduce { copy(isShowAddPhotoBottomSheet = false) }
postSideEffect(MainSideEffect.NavigateToQRScan)
}

MainIntent.ClickGalleryUpload -> {
reduce { copy(isShowAddPhotoBottomSheet = false) }
postSideEffect(MainSideEffect.OpenGallery)
}

is MainIntent.SelectGalleryImage -> reduce { copy(isShowSelectWithAlbumDialog = true, selectedUris = intent.uris.toImmutableList()) }
is MainIntent.ShareImageReceived -> reduce { copy(isShowSelectWithAlbumDialog = true, selectedUris = intent.uris.toImmutableList()) }
is MainIntent.QRCodeScanned -> reduce { copy(scannedImageUrl = intent.imageUrl, isShowSelectWithAlbumDialog = true) }
Expand All @@ -53,43 +56,41 @@ class MainViewModel @Inject constructor(
scannedImageUrl = null,
)
}

MainIntent.ClickUploadWithAlbum -> {
val action = if (state.scannedImageUrl != null) {
SelectAlbumAction.UploadFromQR(imageUrl = state.scannedImageUrl)
} else {
SelectAlbumAction.UploadFromGallery(
imageUriStrings = state.selectedUris.map { it.toString() },
)
}
reduce {
copy(
isShowSelectWithAlbumDialog = false,
scannedImageUrl = null,
selectedUris = persistentListOf(),
)
}
postSideEffect(MainSideEffect.NavigateToSelectAlbum(action))
}

MainIntent.ClickUploadWithoutAlbum -> {
reduce { copy(isShowSelectWithAlbumDialog = false) }
if (state.scannedImageUrl != null) {
postSideEffect(MainSideEffect.NavigateToUploadAlbumWithQRScan(state.scannedImageUrl))
uploadSingleImage(
imageUrl = state.scannedImageUrl,
reduce = reduce,
postSideEffect = postSideEffect,
)
} else {
postSideEffect(MainSideEffect.NavigateToUploadAlbumWithGallery(state.selectedUris.map { it.toString() }))
uploadMultipleImages(
imageUris = state.selectedUris,
reduce = reduce,
postSideEffect = postSideEffect,
)
}
}
MainIntent.ClickUploadWithoutAlbum -> uploadWithoutAlbum(state, reduce, postSideEffect)
}
}

private fun uploadWithoutAlbum(
state: MainState,
reduce: (MainState.() -> MainState) -> Unit,
postSideEffect: (MainSideEffect) -> Unit,
) {
reduce { copy(isShowSelectWithAlbumDialog = false) }

if (state.scannedImageUrl != null) {
uploadSingleImage(
imageUrl = state.scannedImageUrl,
reduce = reduce,
postSideEffect = postSideEffect,
)
} else {
uploadMultipleImages(
imageUris = state.selectedUris,
reduce = reduce,
postSideEffect = postSideEffect,
)
}
}

Expand All @@ -101,7 +102,7 @@ class MainViewModel @Inject constructor(
viewModelScope.launch {
reduce { copy(isLoading = true) }

uploadSinglePhotoUseCase(imageUrl = imageUrl)
uploadSinglePhotoUseCase(imageUrl = imageUrl, folderId = null)
.onSuccess {
reduce { copy(isLoading = false, scannedImageUrl = null) }
postSideEffect(MainSideEffect.ShowToast("이미지를 추가했어요"))
Expand All @@ -123,7 +124,7 @@ class MainViewModel @Inject constructor(
viewModelScope.launch {
reduce { copy(isLoading = true) }

uploadMultiplePhotoUseCase(imageUris = imageUris)
uploadMultiplePhotoUseCase(imageUris = imageUris, folderId = null)
.onSuccess {
reduce { copy(isLoading = false, selectedUris = persistentListOf()) }
postSideEffect(MainSideEffect.ShowToast("이미지를 추가했어요"))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,22 +8,8 @@ sealed interface PhotoUploadNavKey : NavKey {

@Serializable
data object QRScan : PhotoUploadNavKey

@Serializable
data class UploadAlbum(
val imageUrl: String? = null,
val uriStrings: List<String> = emptyList(),
) : PhotoUploadNavKey
}

fun MainNavigator.navigateToQRScan() {
navigate(PhotoUploadNavKey.QRScan)
}

fun MainNavigator.navigateToUploadAlbum(uriStrings: List<String>) {
navigate(PhotoUploadNavKey.UploadAlbum(uriStrings = uriStrings))
}

fun MainNavigator.navigateToUploadAlbum(imageUrl: String) {
navigate(PhotoUploadNavKey.UploadAlbum(imageUrl = imageUrl))
}

This file was deleted.

This file was deleted.

Loading
Loading