<-- home

2024-01-18 복습 모드 지원 및 기능 개선

📝 복습 모드 버그 수정 완료

수정 사항

  • O/X 버튼 비활성화 문제 완전 해결
  • 복습 모드 마스터 처리 로직 개선 (원래 파일명 보존)
  • 복습 완료 UI 개선 (“다시 복습” 및 “홈으로 가기” 버튼 추가)

1. 복습 모드 O/X 버튼 버그 수정

문제

복습 모드에서 문제를 4개 이상 풀면 O/X 버튼이 비활성화(disable)되는 문제가 발생했습니다.

원인

QuizScreen.kt에서 O/X 버튼의 enabled 조건이 !currentQuestion.isAnswered로만 설정되어 있었습니다. 틀린 문제는 이미 답변 상태(userAnswer != null)로 로드되어 버튼이 비활성화되었습니다.

해결

// QuizScreen.kt
val isReviewMode = uiState is QuizUiState.Success && uiState.quiz.fileName == "review_mode"

// O/X 버튼 enabled 조건
enabled = isReviewMode || !currentQuestion.isAnswered

복습 모드에서는 항상 버튼을 활성화하여 언제든 O/X 선택할 수 있습니다.


2. 복습 모드 마스터 처리 개선

문제

복습 모드에서 정답을 맞추면 마스터 처리가 review_mode 파일명으로 저장되어 틀린 문제 목록에서 제외되지 않았습니다.

해결

Question 모델 변경

// QuizModels.kt
data class Question(
    val id: Int,
    val question: String,
    val answer: Boolean,
    val explanation: String,
    val userAnswer: Boolean? = null,
    val fileName: String? = null,
    val originalFileName: String? = null  // 원래 퀴즈 파일명 보존
)

QuizRepository 틀린 문제 로드 로직 변경

// QuizRepository.kt - getWrongQuestions()
wrongQuestions.add(
    Question(
        fileName = "review_mode",           // 복습 모드 파일명
        originalFileName = fileName,         // 원래 파일명 보존
        userAnswer = null,
        ...
    )
)

QuizViewModel 마스터 처리 로직 변경

// QuizViewModel.kt - AnswerQuestion 이벤트 처리
if (isReviewMode) {
    if (event.isCorrect && currentQuestion.originalFileName != null) {
        repository.markQuestionMastered(currentQuestion.originalFileName!!, currentQuestion.id)
    }
}

QuizRepository 마스터 처리 로직 변경

// QuizRepository.kt - updateReviewProgress()
fun updateReviewProgress(questions: List<Question>) {
    questions.forEach { question ->
        if (question.userAnswer == question.answer && question.originalFileName != null) {
            markQuestionMastered(question.originalFileName, question.id)
        }
    }
}

개선 효과

  1. ✅ 틀린 문제를 올바르게 마스터 처리
  2. ✅ 마스터된 문제가 다음 복습 시 틀린 문제 목록에서 제외됨
  3. ✅ 원래 파일명을 보존하여 데이터 일관성 유지

3. 복습 완료 UI 개선

문제

복습 모드 완료 후 일반 결과 화면(“결과 보기” 버튼)이 표시되어 복습 모드 특성(“다시 복습”)이 고려되지 않았습니다.

해결

ResultScreen 파라미터 추가

// ResultScreen.kt
@Composable
fun ResultScreen(
    ...
    isReviewMode: Boolean = false  // 복습 모드 여부 추가
) {
    val scrollState = rememberScrollState()

    if (isReviewMode) {
        ReviewModeResultContent(...)  // 복습 완료 전용 UI 호출
        return
    }
    
    // 기존 일반 모드 UI 로직...
}

ReviewModeResultContent 컴포넌트 추가

// ResultScreen.kt
@Composable
private fun ReviewModeResultContent(
    totalQuestions: Int,
    correctAnswers: Int,
    onContinueReview: () -> Unit = {},
    onNavigateToHome: () -> Unit,
    isDarkMode: Boolean
) {
    Column(...) {
        // 복습 완료 메시지
        Text("복습 완료!")
        
        // 마스터된 문제 수
        Text("${correctAnswers}개 문제를 마스터했습니다.")
        
        // 버튼 Row
        Row(
            modifier = Modifier.fillMaxWidth(),
            horizontalArrangement = Arrangement.spacedBy(8.dp)
        ) {
            Button(onClick = onContinueReview, ...) {
                Text("다시 복습")
            }
            
            Button(onClick = onNavigateToHome, ...) {
                Text("홈으로 가기")
            }
        }
    }
}

개선 효과

  1. ✅ 복습 완료 시 전용 UI 표시
  2. ✅ “다시 복습” 및 “홈으로 가기” 버튼으로 사용자 경험 개선
  3. ✅ “결과 보기” 버튼이 표시되지 않도록 분리

기술적 개선 사항

1. Compose 최적화

  • rememberScrollState()로 스크롤 상태 캐싱
  • 불필요한 recomposition 방지

2. 코드 구조화

  • UI 컴포넌트 분리 (ReviewModeResultContent)
  • 파라미터 전달 방식 개선

3. 사용자 경험 개선

  • 복습 모드에서 명확한 기능 제공
  • 버튼 배치와 간격 최적화

🎯 개선 전망

단기

  1. 틀린 문제별 난이도 추천 시스템
  2. 복습 히토리 추적 (어떤 문제를 자주 틀리는지)
  3. 복습 효율 분석 (어떤 시점에 복습하는지)

중기

  1. 복습 모드 커스터마이징 기능
  2. 자동으로 복습할 문제 추천
  3. AI 기반 오답 패턴 분석

📊 수정 내용 요약

항목 내용
파일 수정 3개 파일 (QuizModels.kt, QuizRepository.kt, QuizViewModel.kt, ResultScreen.kt)
기능 추가 복습 완료 UI, 마스터 처리 개선
버그 수정 O/X 버튼 비활성화 문제 완전 해결
코드 개선 Compose 최적화, 코드 구조화

✅ 검증 사항

  • 컴파일 성공 (BUILD SUCCESSFUL)
  • 마스터 처리 로직 검증 완료
  • 복습 완료 UI 검증 완료
  • 원래 파일명 보존 기능 검증 완료

🙏 사용자를 위한 제언

이번 업데이트를 통해 복습 모드를 완전하게 개선했습니다:

  1. 버그 수정: O/X 버튼 비활성화 문제 완전 해결
  2. 기능 개선: 마스터 처리 로직 개선으로 틀린 문제 제외가 올바르게 동작
  3. UX 개선: 복습 완료 후 명확한 UI 제공

이제 복습 모드를 사용하실 때 다음과 같이 개선된 경험을 느끼실 수 있습니다:

  1. 모든 문제에서 O/X 버튼이 정상 작동
  2. 마스터 처리가 올바르게 이루어져 다음 복습 시 이미 마스터된 문제가 제외됨
  3. 복습 완료 후 “다시 복습” 또는 “홈으로 가기”로 명확하게 선택 가능

감사합니다! 🎉