Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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
1 change: 1 addition & 0 deletions feature/interview-trainer/impl/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand All @@ -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(
Expand Down Expand Up @@ -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
)
}
}
)
}
}

/**
Expand Down Expand Up @@ -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<VoQuestionWithAnswer>
) {
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)
}
}
Original file line number Diff line number Diff line change
@@ -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
}
Loading