@@ -3,43 +3,96 @@ package com.eatssu.android.presentation.cafeteria.review
33import android.os.Bundle
44import androidx.activity.ComponentActivity
55import androidx.activity.compose.setContent
6+ import androidx.compose.foundation.layout.Arrangement
7+ import androidx.compose.foundation.layout.Column
8+ import androidx.compose.foundation.layout.Spacer
9+ import androidx.compose.foundation.layout.fillMaxSize
10+ import androidx.compose.foundation.layout.height
11+ import androidx.compose.foundation.layout.padding
12+ import androidx.compose.material3.Button
13+ import androidx.compose.material3.MaterialTheme
14+ import androidx.compose.material3.Text
15+ import androidx.compose.runtime.Composable
16+ import androidx.compose.ui.Alignment
17+ import androidx.compose.ui.Modifier
18+ import androidx.compose.ui.text.style.TextAlign
19+ import androidx.compose.ui.tooling.preview.Preview
20+ import androidx.compose.ui.unit.dp
621import androidx.navigation.compose.rememberNavController
722import com.eatssu.common.enums.MenuType
823import com.eatssu.design_system.theme.EatssuTheme
24+ import com.google.firebase.crashlytics.FirebaseCrashlytics
925import dagger.hilt.android.AndroidEntryPoint
1026import timber.log.Timber
1127import kotlin.properties.Delegates
1228
1329@AndroidEntryPoint
1430class ReviewComposeActivity : ComponentActivity () {
1531
16- private lateinit var menuType: String
32+ private var menuType: String? = null
1733 private var itemId by Delegates .notNull<Long >()
1834 private lateinit var itemName: String
1935
2036 override fun onCreate (savedInstanceState : Bundle ? ) {
2137 super .onCreate(savedInstanceState)
38+ getIntents() // 컴포즈 화면 그리기 전에 호출
39+
2240 setContent {
2341 EatssuTheme {
2442 val navHostController = rememberNavController()
43+ val parsedMenuType = MenuType .entries.find { it.name == menuType }
2544
26- ReviewNav (
27- navHostController = navHostController,
28- menuType = MenuType .valueOf(menuType),
29- menuName = itemName,
30- id = itemId,
31- onExit = { finish() }
32- )
45+ parsedMenuType?.let { type ->
46+ ReviewNav (
47+ navHostController = navHostController,
48+ menuType = type,
49+ menuName = itemName,
50+ id = itemId,
51+ onExit = { finish() }
52+ )
53+ } ? : run {
54+ Timber .e(" Invalid or null MenuType received: $menuType " )
55+ ErrorScreen (
56+ onBackClick = { finish() }
57+ )
58+ }
3359 }
3460 }
35- getIntents()
3661 }
3762
3863 private fun getIntents () { // todo 추후 변경
39- menuType = intent.getStringExtra(" menuType" ).toString()
64+ menuType = intent.getStringExtra(" menuType" )
4065 itemId = intent.getLongExtra(" itemId" , 0 )
4166 itemName = intent.getStringExtra(" itemName" ).toString().replace(Regex (" [\\ [\\ ]]" ), " " )
4267
4368 Timber .d(" 메뉴는 $itemName $menuType $itemId " )
4469 }
70+
71+ @Composable
72+ private fun ErrorScreen (onBackClick : () -> Unit ) {
73+ Column (
74+ modifier = Modifier .fillMaxSize().padding(16 .dp),
75+ verticalArrangement = Arrangement .Center ,
76+ horizontalAlignment = Alignment .CenterHorizontally
77+ ) {
78+ Text (
79+ text = " 메뉴 정보를 불러오는데 실패했습니다.\n 다시 시도해주세요." ,
80+ textAlign = TextAlign .Center ,
81+ style = MaterialTheme .typography.bodyLarge,
82+ color = MaterialTheme .colorScheme.onSurface
83+ )
84+ Spacer (modifier = Modifier .height(16 .dp))
85+ Button (onClick = onBackClick) {
86+ Text (text = " 뒤로가기" )
87+ }
88+ }
89+ }
90+
91+ @Preview(showBackground = true )
92+ @Composable
93+ private fun ErrorScreenPreview () {
94+ EatssuTheme {
95+ ErrorScreen (onBackClick = {})
96+ }
97+ }
4598}
0 commit comments