diff --git a/core/designsystem/src/main/java/com/teamwable/designsystem/component/button/WableBoardRequestButton.kt b/core/designsystem/src/main/java/com/teamwable/designsystem/component/button/WableBoardRequestButton.kt index ded8b024..a593b987 100644 --- a/core/designsystem/src/main/java/com/teamwable/designsystem/component/button/WableBoardRequestButton.kt +++ b/core/designsystem/src/main/java/com/teamwable/designsystem/component/button/WableBoardRequestButton.kt @@ -13,10 +13,12 @@ import com.teamwable.designsystem.theme.WableTheme @Composable fun BoardRequestButton( modifier: Modifier = Modifier, + textWhite: String = stringResource(R.string.str_community_floating_main), + textSky: String = stringResource(R.string.str_community_floating_sub), onClick: () -> Unit, ) { WableAnnotatedTextButton( - text = getAnnotatedString(), + text = getRequestBoardString(textWhite, textSky), onClick = onClick, modifier = modifier, buttonStyle = BigButtonDefaults.blackBigButtonStyle(), @@ -24,11 +26,13 @@ fun BoardRequestButton( } @Composable -private fun getAnnotatedString(): AnnotatedString { +private fun getRequestBoardString( + textWhite: String, textSky: String, +): AnnotatedString { val annotatedText = buildAnnotatedString { - append(stringResource(R.string.str_community_floating_main)) + append(textWhite) withStyle(style = SpanStyle(color = WableTheme.colors.sky50)) { - append(stringResource(R.string.str_community_floating_sub)) + append(textSky) } } return annotatedText diff --git a/feature/quiz/src/main/java/com/teamwable/quiz/QuizMainScreen.kt b/feature/quiz/src/main/java/com/teamwable/quiz/QuizMainScreen.kt index 315f963a..95793ad9 100644 --- a/feature/quiz/src/main/java/com/teamwable/quiz/QuizMainScreen.kt +++ b/feature/quiz/src/main/java/com/teamwable/quiz/QuizMainScreen.kt @@ -43,7 +43,7 @@ fun QuizMainRoute( @Composable fun QuizMainScreen( - time: String = "00:00", + time: String, onBtnClick: () -> Unit = {}, ) { Column( @@ -106,6 +106,8 @@ fun QuizMainScreen( modifier = Modifier .align(Alignment.BottomCenter) .padding(horizontal = 16.dp, vertical = 20.dp), + textWhite = stringResource(R.string.str_quiz_main_btn_white), + textSky = stringResource(R.string.str_quiz_main_btn_sky), onClick = onBtnClick, ) } @@ -117,6 +119,6 @@ fun QuizMainScreen( @DevicePreviews private fun QuizMainScreenPreview() { WableTheme { - QuizMainScreen() + QuizMainScreen(time = "00 : 00") } } diff --git a/feature/quiz/src/main/java/com/teamwable/quiz/QuizMainViewModel.kt b/feature/quiz/src/main/java/com/teamwable/quiz/QuizMainViewModel.kt index e2f6d571..f152a4cf 100644 --- a/feature/quiz/src/main/java/com/teamwable/quiz/QuizMainViewModel.kt +++ b/feature/quiz/src/main/java/com/teamwable/quiz/QuizMainViewModel.kt @@ -24,10 +24,10 @@ class QuizMainViewModel @Inject constructor( ) val remainingTime: StateFlow = getRemainingTimeUseCase.invoke() - .map { (hours, minutes) -> "%d:%02d".format(hours, minutes) } + .map { (hours, minutes) -> "%02d : %02d".format(hours, minutes) } .stateIn( scope = viewModelScope, started = SharingStarted.WhileSubscribed(5_000), - initialValue = "00:00", + initialValue = "00 : 00", ) } diff --git a/feature/quiz/src/main/java/com/teamwable/quiz/start/QuizStartViewModel.kt b/feature/quiz/src/main/java/com/teamwable/quiz/start/QuizStartViewModel.kt index 274abd65..4e1a1169 100644 --- a/feature/quiz/src/main/java/com/teamwable/quiz/start/QuizStartViewModel.kt +++ b/feature/quiz/src/main/java/com/teamwable/quiz/start/QuizStartViewModel.kt @@ -1,5 +1,7 @@ package com.teamwable.quiz.start +import android.os.SystemClock +import androidx.lifecycle.SavedStateHandle import androidx.lifecycle.viewModelScope import com.teamwable.common.base.BaseViewModel import com.teamwable.data.repository.QuizRepository @@ -17,10 +19,15 @@ import javax.inject.Inject class QuizStartViewModel @Inject constructor( private val quizRepository: QuizRepository, private val userInfoRepository: UserInfoRepository, + private val savedStateHandle: SavedStateHandle, ) : BaseViewModel( initialState = QuizStartState(), ) { - private var startTimeMillis: Long = 0L + private var startTimeMillis: Long + get() = savedStateHandle[KEY_START_TIME] ?: 0L + set(value) { + savedStateHandle[KEY_START_TIME] = value + } override fun initialDataLoad() { onIntent(QuizStartIntent.LoadInitialData) @@ -39,7 +46,7 @@ class QuizStartViewModel @Inject constructor( viewModelScope.launch { quizRepository.getQuiz() .onSuccess { quizModel -> - startTimeMillis = System.currentTimeMillis() + if (startTimeMillis == 0L) startTimeMillis = SystemClock.elapsedRealtime() intent { copy(quizModel = quizModel) } } .onFailure { postSideEffect(QuizStartSideEffect.ShowSnackBar(it)) } @@ -69,8 +76,11 @@ class QuizStartViewModel @Inject constructor( } private fun getElapsedTime(): Int { - val endTimeMillis = System.currentTimeMillis() - val elapsedSeconds = (endTimeMillis - startTimeMillis) / 1000 - return elapsedSeconds.toInt() + val elapsedMillis = SystemClock.elapsedRealtime() - startTimeMillis + return (elapsedMillis / 1000).toInt() + } + + companion object { + private const val KEY_START_TIME = "start_time_millis" } } diff --git a/feature/quiz/src/main/res/values/strings.xml b/feature/quiz/src/main/res/values/strings.xml index 159c8d09..1d20c6d1 100644 --- a/feature/quiz/src/main/res/values/strings.xml +++ b/feature/quiz/src/main/res/values/strings.xml @@ -2,6 +2,8 @@ 다음 퀴즈 참여까지\n남은 시간 + "와블에 대한 새로운 의견이 있다면? " + 정답을 골라주세요! 제출하기