Skip to content
Merged
Changes from 3 commits
Commits
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
Original file line number Diff line number Diff line change
Expand Up @@ -3,43 +3,104 @@ package com.eatssu.android.presentation.cafeteria.review
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Button
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.navigation.compose.rememberNavController
import com.eatssu.common.enums.MenuType
import com.eatssu.design_system.theme.EatssuTheme
import com.google.firebase.crashlytics.FirebaseCrashlytics
import dagger.hilt.android.AndroidEntryPoint
import timber.log.Timber
import kotlin.properties.Delegates

@AndroidEntryPoint
class ReviewComposeActivity : ComponentActivity() {

private lateinit var menuType: String
private var menuType: String? = null
private var itemId by Delegates.notNull<Long>()
private lateinit var itemName: String

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
getIntents() // 컴포즈 화면 그리기 전에 호출

setContent {
EatssuTheme {
val navHostController = rememberNavController()

ReviewNav(
navHostController = navHostController,
menuType = MenuType.valueOf(menuType),
menuName = itemName,
id = itemId,
onExit = { finish() }
)
val parsedMenuType = runCatching {
if (menuType.isNullOrBlank()) null else MenuType.valueOf(menuType!!)
}.onFailure { exception ->
Timber.e(exception, "Failed to parse MenuType: \$menuType")
FirebaseCrashlytics.getInstance().recordException(
IllegalArgumentException("Invalid MenuType '\$menuType' for itemId \$itemId. Original exception: \${exception.message}", exception)
)
}.getOrNull()

parsedMenuType?.let { type ->
ReviewNav(
navHostController = navHostController,
menuType = type,
menuName = itemName,
id = itemId,
onExit = { finish() }
)
} ?: run {
Timber.e("Invalid or null MenuType received: \$menuType")
ErrorScreen(
onBackClick = { finish() }
)

@PeraSite PeraSite Mar 3, 2026

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

val menuTypeEnum = MenuType.entries.find { it.name == menuType }

menuTypeEnum?.let {
    ReviewNav(
        navHostController = navHostController,
        menuType = MenuType.valueOf(menuType),
        menuName = itemName,
        id = itemId,
        onExit = { finish() }
    )
} ?: ErrorScreen(
    onBackClick = { finish() }
)

이렇게 깔끔하게 수정하는건 어떨까욧? 굳이 에러 로깅을 할 필요는 없이 프론트엔드에서 느슨하게 처리해도 좋다고 생각합니당

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

제가 수정 푸시하고 출시할게요~!

}
}
}
getIntents()
}

private fun getIntents() { //todo 추후 변경
menuType = intent.getStringExtra("menuType").toString()
menuType = intent.getStringExtra("menuType")
itemId = intent.getLongExtra("itemId", 0)
itemName = intent.getStringExtra("itemName").toString().replace(Regex("[\\[\\]]"), "")

Timber.d("메뉴는 $itemName $menuType $itemId")
}

@Composable
private fun ErrorScreen(onBackClick: () -> Unit) {
Column(
modifier = Modifier.fillMaxSize().padding(16.dp),
verticalArrangement = Arrangement.Center,
horizontalAlignment = Alignment.CenterHorizontally
) {
Text(
text = "메뉴 정보를 불러오는데 실패했습니다.\n다시 시도해주세요.",
textAlign = TextAlign.Center,
style = MaterialTheme.typography.bodyLarge,
color = MaterialTheme.colorScheme.onSurface
)
Spacer(modifier = Modifier.height(16.dp))
Button(onClick = onBackClick) {
Text(text = "뒤로가기")
}
}
}

@Preview(showBackground = true)
@Composable
private fun ErrorScreenPreview() {
EatssuTheme {
ErrorScreen(onBackClick = {})
}
}
}