@@ -6,6 +6,7 @@ import android.content.Intent
6
6
import android.net.Uri
7
7
import android.os.Build
8
8
import android.provider.Settings
9
+ import androidx.activity.compose.BackHandler
9
10
import androidx.activity.compose.rememberLauncherForActivityResult
10
11
import androidx.activity.result.contract.ActivityResultContracts
11
12
import androidx.annotation.RequiresApi
@@ -58,6 +59,7 @@ import com.record.designsystem.component.button.RecordyButton
58
59
import com.record.designsystem.component.button.RecordyChipButton
59
60
import com.record.designsystem.component.dialog.RecordyDialog
60
61
import com.record.designsystem.component.navbar.TopNavigationBar
62
+ import com.record.designsystem.component.snackbar.SnackBarType
61
63
import com.record.designsystem.component.textfield.RecordyBasicTextField
62
64
import com.record.designsystem.theme.Background
63
65
import com.record.designsystem.theme.RecordyTheme
@@ -76,18 +78,37 @@ import java.io.File
76
78
fun VideoPickerRoute (
77
79
paddingValues : PaddingValues ,
78
80
viewModel : UploadViewModel = hiltViewModel(),
81
+ popBackStack : () -> Unit ,
79
82
) {
83
+
80
84
val state by viewModel.uiState.collectAsStateWithLifecycle()
81
85
val context = LocalContext .current
86
+ val coroutineScope = rememberCoroutineScope()
87
+
88
+ BackHandler (true ) {
89
+ coroutineScope.launch {
90
+ viewModel.showExitUploadDialog()
91
+ }
92
+ }
93
+
82
94
LaunchedEffectWithLifecycle {
83
95
viewModel.getPresignedUrl()
84
96
viewModel.sideEffect.collectLatest { }
85
97
}
86
98
99
+ LaunchedEffectWithLifecycle {
100
+ viewModel.sideEffect.collectLatest { sideEffect ->
101
+ when (sideEffect) {
102
+ is UploadSideEffect .PopBackStack -> popBackStack()
103
+ }
104
+ }
105
+ }
106
+
87
107
VideoPickerScreen (
88
108
state = state,
89
109
showShouldShowRationaleDialog = viewModel::showShouldShowRationaleDialog,
90
110
hideShouldShowRationaleDialog = viewModel::hideShouldShowRationaleDialog,
111
+ hideExitUploadDialog = viewModel::hideExitUploadDialog,
91
112
showIsSelectedVideoSheetOpen = viewModel::showIsSelectedVideoSheetOpen,
92
113
hideIsSelectedVideoSheetOpen = viewModel::hideIsSelectedVideoSheetOpen,
93
114
showIsSelectedDefinedContentSheetOpen = viewModel::showIsSelectedDefinedContentSheetOpen,
@@ -97,6 +118,7 @@ fun VideoPickerRoute(
97
118
uploadVideoS3Bucket = {
98
119
viewModel.uploadVideoToS3Bucket(context, it)
99
120
},
121
+ onClickBackStack = viewModel::popBackStack
100
122
)
101
123
}
102
124
@@ -111,6 +133,8 @@ fun VideoPickerScreen(
111
133
state : UploadState = UploadState (),
112
134
showShouldShowRationaleDialog : () -> Unit = {},
113
135
hideShouldShowRationaleDialog : () -> Unit = {},
136
+ onClickBackStack : () -> Unit = {},
137
+ hideExitUploadDialog : () -> Unit = {},
114
138
showIsSelectedVideoSheetOpen : () -> Unit = {},
115
139
hideIsSelectedVideoSheetOpen : () -> Unit = {},
116
140
showIsSelectedDefinedContentSheetOpen : () -> Unit = {},
@@ -335,6 +359,17 @@ fun VideoPickerScreen(
335
359
},
336
360
)
337
361
}
362
+ if (state.showExitUploadDialog) {
363
+ RecordyDialog (
364
+ graphicAsset = R .drawable.img_allow,
365
+ title = " 화면을 나가시겠어요?" ,
366
+ subTitle = " 지금까지 작성하신 내용이 모두 사라져요." ,
367
+ negativeButtonLabel = " 취소" ,
368
+ positiveButtonLabel = " 나가기" ,
369
+ onDismissRequest = hideExitUploadDialog,
370
+ onPositiveButtonClick = onClickBackStack
371
+ )
372
+ }
338
373
SelectedVideoBottomSheet (
339
374
sheetState = rememberModalBottomSheetState(skipPartiallyExpanded = true ),
340
375
isSheetOpen = state.isSelectedVideoSheetOpen,
0 commit comments