From c4245a99f892f5ef79c72cccae6a249e1afbeab6 Mon Sep 17 00:00:00 2001 From: Deyryl Date: Mon, 30 Mar 2026 15:35:59 +0300 Subject: [PATCH 1/2] =?UTF-8?q?ANDR-72:=20=D0=B8=D1=81=D0=BF=D0=BE=D0=BB?= =?UTF-8?q?=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20Parcelize=20?= =?UTF-8?q?=D0=B4=D0=BB=D1=8F=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B4=D0=B0=D1=87?= =?UTF-8?q?=D0=B8=20=D0=BC=D0=B5=D0=B6=D0=B4=D1=83=20=D1=8D=D0=BA=D1=80?= =?UTF-8?q?=D0=B0=D0=BD=D0=B0=D0=BC=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- feature/interview-trainer/impl/build.gradle.kts | 1 + .../interviewQuiz/presentation/VoQuestionWithAnswer.kt | 8 ++++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/feature/interview-trainer/impl/build.gradle.kts b/feature/interview-trainer/impl/build.gradle.kts index b6dbb5eb..494c89ce 100644 --- a/feature/interview-trainer/impl/build.gradle.kts +++ b/feature/interview-trainer/impl/build.gradle.kts @@ -2,6 +2,7 @@ plugins { alias(libs.plugins.android.library) alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlin.compose) + alias(libs.plugins.kotlin.parcelize) } android { diff --git a/feature/interview-trainer/impl/src/main/java/ru/yeahub/interview_trainer/impl/interviewQuiz/presentation/VoQuestionWithAnswer.kt b/feature/interview-trainer/impl/src/main/java/ru/yeahub/interview_trainer/impl/interviewQuiz/presentation/VoQuestionWithAnswer.kt index cb3e3002..9d9b9690 100644 --- a/feature/interview-trainer/impl/src/main/java/ru/yeahub/interview_trainer/impl/interviewQuiz/presentation/VoQuestionWithAnswer.kt +++ b/feature/interview-trainer/impl/src/main/java/ru/yeahub/interview_trainer/impl/interviewQuiz/presentation/VoQuestionWithAnswer.kt @@ -1,16 +1,20 @@ package ru.yeahub.interview_trainer.impl.interviewQuiz.presentation +import android.os.Parcelable import androidx.compose.runtime.Immutable +import kotlinx.parcelize.Parcelize @Immutable +@Parcelize data class VoQuestionWithAnswer( val id: Long, val title: String, val shortAnswer: String, val userAnswer: QuizAnswerResult -) +) : Parcelable -enum class QuizAnswerResult { +@Parcelize +enum class QuizAnswerResult : Parcelable { KNOWN, UNKNOWN } From e1d4c93a54a450ab8439504676d4363b091b822b Mon Sep 17 00:00:00 2001 From: Deyryl Date: Mon, 30 Mar 2026 16:16:37 +0300 Subject: [PATCH 2/2] =?UTF-8?q?ANDR-72:=20=D0=B4=D0=BE=D0=BF=D0=BE=D0=BB?= =?UTF-8?q?=D0=BD=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BD=D0=B0=D0=B2=D0=B8=D0=B3?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/InterviewTrainerFeatureImpl.kt | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git a/feature/interview-trainer/impl/src/main/java/ru/yeahub/interview_trainer/impl/InterviewTrainerFeatureImpl.kt b/feature/interview-trainer/impl/src/main/java/ru/yeahub/interview_trainer/impl/InterviewTrainerFeatureImpl.kt index 50eb3940..af512c14 100644 --- a/feature/interview-trainer/impl/src/main/java/ru/yeahub/interview_trainer/impl/InterviewTrainerFeatureImpl.kt +++ b/feature/interview-trainer/impl/src/main/java/ru/yeahub/interview_trainer/impl/InterviewTrainerFeatureImpl.kt @@ -8,12 +8,18 @@ import androidx.navigation.compose.composable import androidx.navigation.navArgument import ru.yeahub.interview_trainer.impl.createQuiz.presentation.CreateQuizResult import ru.yeahub.interview_trainer.impl.createQuiz.ui.CreateQuizScreen +import ru.yeahub.interview_trainer.impl.interviewQuiz.presentation.InterviewQuizResult +import ru.yeahub.interview_trainer.impl.interviewQuiz.presentation.VoQuestionWithAnswer +import ru.yeahub.interview_trainer.impl.interviewQuiz.ui.InterviewQuizScreen import ru.yeahub.navigation_api.FeatureApi import ru.yeahub.navigation_api.FeatureRoute import ru.yeahub.navigation_api.NavigationPathManager import timber.log.Timber private const val TITLE_TOP_APP_BAR = "title" +private const val SPECIALIZATION_ID = "specializationId" +private const val QUESTIONS_COUNT = "questionsCount" +private const val QUIZ_ANSWERS_KEY = "quizAnswersKey" private const val NOT_FOUND_NUMBER = 404 class InterviewTrainerFeatureImpl : FeatureApi { @@ -34,6 +40,12 @@ class InterviewTrainerFeatureImpl : FeatureApi { val createQuizRoute = "$featurePath/${FeatureRoute.InterviewTrainerFeature.CREATE_QUIZ_SCREEN_NAME}/{$TITLE_TOP_APP_BAR}" + // Регистрируем путь экрана тренировки + // (interview_trainer/interview_quiz/{titleId}/{specializationId}/{questionsCount}) + val interviewQuizRoute = + "$featurePath/${FeatureRoute.InterviewTrainerFeature.INTERVIEW_QUIZ_SCREEN_NAME}" + + "/{$TITLE_TOP_APP_BAR}/{$SPECIALIZATION_ID}/{$QUESTIONS_COUNT}" + Timber.d("InterviewTrainerFeatureImpl registerGraph: currentPath: $createQuizRoute") navGraphBuilder.composable( @@ -67,6 +79,38 @@ class InterviewTrainerFeatureImpl : FeatureApi { } CreateQuizScreen(onResult = onResult, titleTopAppBarResId = titleTopAppBarResId) } + + navGraphBuilder.composable( + route = interviewQuizRoute, + arguments = listOf( + navArgument(TITLE_TOP_APP_BAR) { type = NavType.IntType }, + navArgument(SPECIALIZATION_ID) { type = NavType.StringType }, + navArgument(QUESTIONS_COUNT) { type = NavType.StringType }, + ) + ) { backStackEntry -> + val titleTopAppBarResId = + backStackEntry.arguments?.getInt(TITLE_TOP_APP_BAR) + ?: NOT_FOUND_NUMBER + + InterviewQuizScreen( + onResult = { result -> + when (result) { + is InterviewQuizResult.NavigateBack -> handleBackNavigation( + pathManager = pathManager, + navController = navController + ) + + is InterviewQuizResult.NavigateToInterviewQuizResultScreen -> handleQuizResultNavigation( + pathManager = pathManager, + navController = navController, + featurePath = featurePath, + titleTopAppBarResId = titleTopAppBarResId, + questionsWithAnswersList = result.questionsWithAnswersList + ) + } + } + ) + } } /** @@ -113,4 +157,28 @@ class InterviewTrainerFeatureImpl : FeatureApi { navController.navigate(interviewQuizRoute) pathManager.setCurrentPath(interviewQuizRoute) } + + /** + * Обработка навигации к экрану результата тренировки (InterviewQuizResultScreen) + */ + private fun handleQuizResultNavigation( + pathManager: NavigationPathManager, + navController: NavHostController, + featurePath: String, + titleTopAppBarResId: Int, + questionsWithAnswersList: List + ) { + navController.currentBackStackEntry + ?.savedStateHandle + ?.set(QUIZ_ANSWERS_KEY, ArrayList(questionsWithAnswersList)) + + val interviewQuizResultRoute = + "$featurePath/${FeatureRoute.InterviewTrainerFeature.INTERVIEW_QUIZ_RESULT_SCREEN_NAME}" + + "/$titleTopAppBarResId" + + Timber.d("InterviewTrainerFeatureImpl registerGraph: $interviewQuizResultRoute") + + navController.navigate(interviewQuizResultRoute) + pathManager.setCurrentPath(interviewQuizResultRoute) + } } \ No newline at end of file