Skip to content

Commit 1ffec50

Browse files
HI-JIN2PeraSite
andauthored
[Fix] MenuType enum의 llegalArgumentException을 예방합니다 (#486)
* fix(review): Handle null or invalid MenuType gracefully in ReviewComposeActivity to prevent crashes * feat(review): Add ErrorScreen with Preview and Crashlytics logging for MenuType parsing failure * fix(review): Move getIntents() before setContent to prevent null MenuType during initial Compose rendering * refactor: enum 계산 개선 --------- Co-authored-by: PeraSite <pretocki3@gmail.com>
1 parent 1b96e52 commit 1ffec50

1 file changed

Lines changed: 63 additions & 10 deletions

File tree

app/src/main/java/com/eatssu/android/presentation/cafeteria/review/ReviewComposeActivity.kt

Lines changed: 63 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,43 +3,96 @@ package com.eatssu.android.presentation.cafeteria.review
33
import android.os.Bundle
44
import androidx.activity.ComponentActivity
55
import 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
621
import androidx.navigation.compose.rememberNavController
722
import com.eatssu.common.enums.MenuType
823
import com.eatssu.design_system.theme.EatssuTheme
24+
import com.google.firebase.crashlytics.FirebaseCrashlytics
925
import dagger.hilt.android.AndroidEntryPoint
1026
import timber.log.Timber
1127
import kotlin.properties.Delegates
1228

1329
@AndroidEntryPoint
1430
class 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

Comments
 (0)