Skip to content

Commit

Permalink
Fix Tryout Submit
Browse files Browse the repository at this point in the history
  • Loading branch information
ferdiallen committed Apr 14, 2023
1 parent 7c780c8 commit 9c58c25
Show file tree
Hide file tree
Showing 17 changed files with 119 additions and 120 deletions.
13 changes: 3 additions & 10 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ android {

dependencies {
val composeBom = platform("androidx.compose:compose-bom:2023.01.00")
implementation("androidx.core:core-ktx:1.9.0")
implementation("androidx.core:core-ktx:1.10.0")
implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.6.1")
//noinspection GradleDependency
implementation("androidx.activity:activity-compose:1.7.0")
Expand All @@ -67,7 +67,7 @@ dependencies {
implementation("androidx.compose.ui:ui-tooling-preview")
implementation("androidx.compose.material3:material3")
implementation("androidx.compose.material:material-icons-extended")
implementation("androidx.core:core-ktx:1.9.0")
implementation("androidx.core:core-ktx:1.10.0")
testImplementation("junit:junit:4.13.2")
androidTestImplementation("androidx.test.ext:junit:1.1.5")
androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")
Expand Down Expand Up @@ -104,7 +104,7 @@ dependencies {
implementation("com.marosseleng.android:compose-material3-datetime-pickers:$materialDialog")

//Desugaring
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.0.2")
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.0.3")

//Multidex
val multidex_version = "2.0.1"
Expand All @@ -130,11 +130,4 @@ dependencies {

//Datastore
implementation("androidx.datastore:datastore-preferences:1.0.0")

//Workmanager
val work_version = "2.8.1"
implementation("androidx.work:work-runtime-ktx:$work_version")

//Livedata
implementation("androidx.compose.runtime:runtime-livedata:1.4.0")
}
1 change: 0 additions & 1 deletion app/src/main/java/com/example/nineintelligence/BaseApp.kt
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ class BaseApp : Application(), KoinComponent {
super.onCreate()
startKoin {
androidContext(this@BaseApp)
workManagerFactory()
modules(appModule)
}
}
Expand Down
11 changes: 7 additions & 4 deletions app/src/main/java/com/example/nineintelligence/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,18 @@ import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Surface
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import androidx.media3.common.util.UnstableApi
import androidx.navigation.compose.rememberNavController
import com.example.nineintelligence.core.AuthPrefs
import com.example.nineintelligence.domain.util.ExamType
import com.example.nineintelligence.navigation.RootNavigation
import com.example.nineintelligence.presentation.exam.ExamScreen
import com.example.nineintelligence.presentation.profile.ProfileScreen
import com.example.nineintelligence.ui.theme.NineIntelligenceTheme
import org.koin.android.ext.android.get

@UnstableApi
class MainActivity : ComponentActivity() {
Expand All @@ -32,7 +35,7 @@ class MainActivity : ComponentActivity() {
/*MainReadingSubject(
modifier = Modifier.padding(horizontal = 12.dp)
)*/
/*RootNavigation()*/
RootNavigation()
/*ProfileScreen(
Modifier
.fillMaxSize()
Expand All @@ -54,12 +57,12 @@ class MainActivity : ComponentActivity() {
modifier = Modifier.padding(horizontal = 12.dp),
slugname = "testing-broww"
)*/
ExamScreen(
/* ExamScreen(
controller = rememberNavController(), modifier = Modifier
.fillMaxSize()
.padding(horizontal = 22.dp),
typeOf = ExamType.TAKE_EXAMS, slugName = "brush-teeth-2",time = 60
)
typeOf = ExamType.TAKE_EXAMS, slugName = "brush-teeth-4", time = 60
)*/
/*BankSoal(controller = rememberNavController(), modifier = Modifier.fillMaxSize())*/
}
}
Expand Down
31 changes: 0 additions & 31 deletions app/src/main/java/com/example/nineintelligence/core/WorkerTimer.kt

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@ package com.example.nineintelligence.data.network.apiservice
import com.example.nineintelligence.domain.models.SubmitModel

interface SubmitAnswer {
suspend fun submitAnswer(answer: SubmitModel,slugName:String): SubmitModel
suspend fun submitAnswer(answer: SubmitModel,slugName:String): String
}
10 changes: 2 additions & 8 deletions app/src/main/java/com/example/nineintelligence/di/AppModule.kt
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ import androidx.media3.exoplayer.ExoPlayer
import androidx.work.WorkManager
import com.example.nineintelligence.core.AuthPrefs
import com.example.nineintelligence.core.Notification
import com.example.nineintelligence.core.WorkerTimer
import com.example.nineintelligence.data.network.apiservice.DetailUser
import com.example.nineintelligence.data.network.apiservice.GetBankSoalList
import com.example.nineintelligence.data.network.apiservice.GetListTryout
Expand Down Expand Up @@ -112,16 +111,14 @@ val appModule = module {
EnterViewModel(get(), get())
}
viewModel {
NavigationViewModel(get(), get())
NavigationViewModel(get())
}
viewModel {
ProfileViewModel(get(), get(), get(), get())
}
viewModel {
HomeViewModel(get(), get())
}


viewModel {
TryOutInformationViewModel(get(), get())
}
Expand Down Expand Up @@ -192,9 +189,6 @@ val appModule = module {
single {
TakenTryOutUseCase(get())
}
worker {
WorkerTimer(androidContext(), get(), get())
}
single {
WorkManager.getInstance(androidContext())
}
Expand All @@ -212,6 +206,6 @@ val appModule = module {
TryoutSubmitUseCase(get())
}
viewModel {
ExamViewModel(get())
ExamViewModel(get(),get())
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import kotlinx.serialization.Serializable

@Serializable
data class SubmitModel(
@SerialName("user_answer") val userAnswers: List<UserAnswerData> = emptyList()
@SerialName("user_answers") val userAnswers: List<UserAnswerData> = emptyList()
) {
@Serializable
data class UserAnswerData(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,11 @@ import kotlinx.serialization.Serializable

@Serializable
data class SubmitResponse(
@SerialName("taken_id") val takenId:Int? = null,
@SerialName("taken_id") val takenId: Int? = null,
@SerialName("hasil_id") val hasilId: Int? = null,
val totalFalse: Int? = null,
val totalCorrect: Int? = null,
@SerialName("to_id") val tryOutId: Int? = null,
@SerialName("user_id") val userId: String? = null,
val score: Int? = null
)
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ import io.ktor.client.call.body
import io.ktor.client.request.bearerAuth
import io.ktor.client.request.post
import io.ktor.client.request.setBody
import io.ktor.http.ContentType
import io.ktor.http.contentType
import kotlinx.serialization.decodeFromString
import kotlinx.serialization.json.Json

Expand All @@ -18,10 +20,10 @@ class SubmitAnswerImpl(
) : SubmitAnswer {
override suspend fun submitAnswer(answer: SubmitModel, slugName: String): String {
val res = http.post("${BuildConfig.BASE_URL}tryouts/$slugName/submit") {
contentType(ContentType.Application.Json)
bearerAuth(prefs.readToken() ?: return@post)
setBody(answer)
}.body<String>()
val decoded = Json.decodeFromString<>(res)
return decoded
return res
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,24 @@ package com.example.nineintelligence.domain.use_case.tryout_use_case
import com.example.nineintelligence.data.network.apiservice.SubmitAnswer
import com.example.nineintelligence.domain.models.SubmitModel
import com.example.nineintelligence.domain.util.Resource
import java.io.IOException

class TryoutSubmitUseCase(
private val submitAnswer: SubmitAnswer
) {
suspend fun submitAnswer(data: List<SubmitModel.UserAnswerData>, slugName: String): String {
val res = submitAnswer.submitAnswer(SubmitModel(data), slugName)
suspend fun submitAnswer(
data: List<SubmitModel.UserAnswerData>,
slugName: String
): Resource<String> {
return try {
val res = submitAnswer.submitAnswer(SubmitModel(data), slugName)
Resource.Success(res)
}catch (e:Exception){
println(e.message)
Resource.Error(e.message)
}catch (e:IOException){
println(e.message)
Resource.Error(e.message)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,9 @@ import androidx.compose.animation.AnimatedContentScope
import androidx.compose.animation.ExperimentalAnimationApi
import androidx.compose.animation.core.tween
import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.livedata.observeAsState
import androidx.compose.runtime.remember
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalLifecycleOwner
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleEventObserver
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.navigation.NavController
import androidx.navigation.NavGraphBuilder
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,30 +2,18 @@ package com.example.nineintelligence.navigation

import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import androidx.work.ExistingWorkPolicy
import androidx.work.OneTimeWorkRequestBuilder
import androidx.work.WorkManager
import com.example.nineintelligence.core.AuthPrefs
import com.example.nineintelligence.core.WorkerTimer
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.flow.update
import kotlinx.coroutines.launch

class NavigationViewModel(
private val store: AuthPrefs,
private val worker: WorkManager
private val store: AuthPrefs
) : ViewModel() {
private val _hasLoggedIn = MutableStateFlow(false)
val hasLoggedIn = _hasLoggedIn.asStateFlow()
private val authOneTime = OneTimeWorkRequestBuilder<WorkerTimer>().build()

init {
worker.beginUniqueWork(
"auth_authentication",
ExistingWorkPolicy.KEEP,
authOneTime
).enqueue()
viewModelScope.launch {
val logInAuthKey = store.readToken()
if (logInAuthKey != "" && logInAuthKey != null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ import androidx.navigation.NavController
import com.example.nineintelligence.R
import com.example.nineintelligence.core.CustomText
import com.example.nineintelligence.domain.models.ExamModel
import com.example.nineintelligence.domain.models.SubmitModel
import com.example.nineintelligence.domain.util.ExamType
import com.example.nineintelligence.navigation.NavigationHolder
import com.example.nineintelligence.ui.theme.MainBlueColor
Expand Down Expand Up @@ -197,14 +198,17 @@ fun ExamScreen(
questionText = retrievedSoal[out].content ?: "",
userAnswer = savedAnswerViewModel?.find {
it.first == out
}?.second ?: "",
}?.second?.answer ?: "",
questionAnswerList = retrievedSoal[out].answers as? List<String> ?: emptyList(),
onClickedAnswer = { _, answer ->
vm.stateFlowMethodSaveAnswer(out, answer)
vm.stateFlowMethodSaveAnswer(
out,
SubmitModel.UserAnswerData(retrievedSoal[out].idSoal, answer)
)
},
selectedAnswerIndex = savedAnswerViewModel?.find {
it.first == out
}?.second,
}?.second?.answer ?: "",
parentScreenSize = parentSize,
isClickable = typeOf == ExamType.TAKE_EXAMS,
showRightWrongAnswer = typeOf == ExamType.DISCUSSION,
Expand Down Expand Up @@ -293,7 +297,7 @@ fun ExamScreen(
pagerState.scrollToPage(it)
}
}, allAnswer = savedAnswerViewModel?.map {
it.second
it.second.answer ?: ""
} ?: emptyList())
}

Expand All @@ -316,9 +320,12 @@ fun ExamScreen(
Dialog(onDismissRequest = { shouldShowDialogOver = false }) {
DialogIsOver(onSubmitClick = {
shouldShowDialogOver = false
controller.navigate(NavigationHolder.QuestionDiscussion.route) {
/*controller.navigate(NavigationHolder.QuestionDiscussion.route) {
popUpTo(NavigationHolder.BankSoalScreen.route)
}
}*/
vm.saveAnswer(SubmitModel(savedAnswerViewModel?.map {
it.second
}?: emptyList()),slugName)
}, onCancelClick = {
shouldShowDialogOver = false
})
Expand Down
Loading

0 comments on commit 9c58c25

Please sign in to comment.