From 9f049952e8fda95e74dfb529fa5c35501034f415 Mon Sep 17 00:00:00 2001 From: DimazzP Date: Sat, 3 May 2025 23:24:06 +0700 Subject: [PATCH] update --- .../com/example/lexilearn/MainActivity.kt | 5 +- .../lexilearn/data/remote/FirebaseHelper.kt | 72 +++++++++--------- .../data/repository/QuizRepository.kt | 70 +++++++---------- .../data/repository/UserRepository.kt | 6 +- .../com/example/lexilearn/ui/theme/Type.kt | 46 +++++------ .../pDetailMaterial/DetailMaterialScreen.kt | 12 ++- .../lexilearn/ui/views/pHome/HomeViewModel.kt | 9 +-- .../views/pLearnNumber/LearnNumberScreen.kt | 2 +- .../pNavMaterial/NavMaterialViewModel.kt | 1 - .../lexilearn/ui/views/pQuiz/QuizScreen.kt | 16 ++-- .../lexilearn/ui/views/pQuiz/QuizViewModel.kt | 23 ++---- app/src/main/res/font/fredoka.ttf | Bin 0 -> 50004 bytes 12 files changed, 127 insertions(+), 135 deletions(-) create mode 100644 app/src/main/res/font/fredoka.ttf diff --git a/app/src/main/java/com/example/lexilearn/MainActivity.kt b/app/src/main/java/com/example/lexilearn/MainActivity.kt index fc66079..79f51c1 100644 --- a/app/src/main/java/com/example/lexilearn/MainActivity.kt +++ b/app/src/main/java/com/example/lexilearn/MainActivity.kt @@ -15,6 +15,7 @@ import androidx.navigation.navArgument import com.example.lexilearn.data.model.MaterialDataModel import com.example.lexilearn.data.model.UserDataModel import com.example.lexilearn.data.repository.UserRepository +import com.example.lexilearn.ui.theme.LexiLearnTheme import com.example.lexilearn.ui.views.pDetailMaterial.DetailMaterialScreen import com.example.lexilearn.ui.views.pHome.HomeScreen import com.example.lexilearn.ui.views.pLearAlphabet.LearnAlphabetScreen @@ -75,7 +76,9 @@ class MainActivity : ComponentActivity() { } } setContent { - MyApp() + LexiLearnTheme { + MyApp() // Menggunakan MyApp dengan tema LexiLearn + } } } } diff --git a/app/src/main/java/com/example/lexilearn/data/remote/FirebaseHelper.kt b/app/src/main/java/com/example/lexilearn/data/remote/FirebaseHelper.kt index d21382a..085ca12 100644 --- a/app/src/main/java/com/example/lexilearn/data/remote/FirebaseHelper.kt +++ b/app/src/main/java/com/example/lexilearn/data/remote/FirebaseHelper.kt @@ -18,29 +18,30 @@ class FirebaseHelper(private val context: Context) { // 🔥 Fungsi untuk mengambil data berdasarkan filterMaterial (kode lama, tetap dipertahankan) fun fetchMaterials(filterMaterial: String, callback: (List) -> Unit) { - val databaseReference: DatabaseReference = - FirebaseDatabase.getInstance().getReference("data/$filterMaterial") +val databaseReference: DatabaseReference = +FirebaseDatabase.getInstance().getReference("data/$filterMaterial") - databaseReference.addListenerForSingleValueEvent(object : ValueEventListener { - override fun onDataChange(snapshot: DataSnapshot) { - val materialList = mutableListOf() - for (materialSnapshot in snapshot.children) { - val material = materialSnapshot.getValue(MaterialDataModel::class.java) - material?.let { materialList.add(it) } - } +databaseReference.addListenerForSingleValueEvent(object : ValueEventListener { +override fun onDataChange(snapshot: DataSnapshot) { +val materialList = mutableListOf() +for (materialSnapshot in snapshot.children) { + val material = materialSnapshot.getValue(MaterialDataModel::class.java) + material?.let { materialList.add(it) } +} - sharedPrefHelper.saveMaterialList(filterMaterial, materialList) - callback(materialList) - } +sharedPrefHelper.saveMaterialList(filterMaterial, materialList) +callback(materialList) +} - override fun onCancelled(error: DatabaseError) { - Log.e("FirebaseHelper", "Error: ${error.message}") - } - }) +override fun onCancelled(error: DatabaseError) { +Log.e("FirebaseHelper", "Error: ${error.message}") +} +}) } fun fetchAllMaterials(callback: (List) -> Unit) { - val databaseReference: DatabaseReference = FirebaseDatabase.getInstance().getReference("data") + val databaseReference: DatabaseReference = + FirebaseDatabase.getInstance().getReference("data") databaseReference.addListenerForSingleValueEvent(object : ValueEventListener { override fun onDataChange(snapshot: DataSnapshot) { @@ -102,8 +103,10 @@ class FirebaseHelper(private val context: Context) { // }) // } fun loginUser(callback: (Boolean, String?) -> Unit) { - val databaseReference: DatabaseReference = FirebaseDatabase.getInstance().getReference("users") - val userId = sharedPrefHelper.getUserId() // Ambil ID pengguna yang disimpan di SharedPreferences + val databaseReference: DatabaseReference = + FirebaseDatabase.getInstance().getReference("users") + val userId = + sharedPrefHelper.getUserId() // Ambil ID pengguna yang disimpan di SharedPreferences if (userId.isNullOrEmpty()) { callback(false, null) // Jika tidak ada ID tersimpan @@ -145,20 +148,19 @@ class FirebaseHelper(private val context: Context) { } } - fun updateUser(updatedUser: UserDataModel, callback: (Boolean) -> Unit) { - val getUserData = sharedPrefHelper.getUserData() - val userId = sharedPrefHelper.getUserId() // Ambil ID pengguna yang disimpan di SharedPreferences - val databaseReference = FirebaseDatabase.getInstance().getReference("users") - val newData = mapOf( - "name" to updatedUser.name, - "age" to updatedUser.age, - ) - if(userId!=null){ - databaseReference.child(userId).updateChildren(newData).addOnCompleteListener { task -> - callback(task.isSuccessful) - } - } - } +fun updateUser(updatedUser: UserDataModel, callback: (Boolean) -> Unit) { +val userId = sharedPrefHelper.getUserId() +val databaseReference = FirebaseDatabase.getInstance().getReference("users") +val newData = mapOf( +"name" to updatedUser.name, +"age" to updatedUser.age, +) +if (userId != null) { +databaseReference.child(userId).updateChildren(newData).addOnCompleteListener { task -> +callback(task.isSuccessful) +} +} +} // ✅ 🔥 Fungsi Fetch User Data Berdasarkan ID (Dapatkan data user setelah login) fun fetchUserData(callback: (UserDataModel?) -> Unit) { @@ -169,7 +171,8 @@ class FirebaseHelper(private val context: Context) { return } - val databaseReference: DatabaseReference = FirebaseDatabase.getInstance().getReference("users/$userId") + val databaseReference: DatabaseReference = + FirebaseDatabase.getInstance().getReference("users/$userId") databaseReference.addListenerForSingleValueEvent(object : ValueEventListener { override fun onDataChange(snapshot: DataSnapshot) { @@ -183,6 +186,7 @@ class FirebaseHelper(private val context: Context) { } }) } + fun fetchTop10Scores(callback: (List>) -> Unit) { val todayDate = getTodayDate() val databaseReference: DatabaseReference = diff --git a/app/src/main/java/com/example/lexilearn/data/repository/QuizRepository.kt b/app/src/main/java/com/example/lexilearn/data/repository/QuizRepository.kt index d09a77f..f5bb030 100644 --- a/app/src/main/java/com/example/lexilearn/data/repository/QuizRepository.kt +++ b/app/src/main/java/com/example/lexilearn/data/repository/QuizRepository.kt @@ -10,52 +10,38 @@ import kotlin.random.Random class QuizRepository { - /** - * Fungsi ini akan membuat soal dengan mode soal & jawaban yang DITENTUKAN oleh parameter. - */ - fun generateQuestion( - material: MaterialDataModel, - questionMode: Int, - answerMode: Int - ): QuizQuestion { - val questionType = when (questionMode) { - 1 -> listOf(QuestionType.TEXT, QuestionType.IMAGE).random() // Text atau Image - 2 -> QuestionType.AUDIO // Hanya Audio - else -> QuestionType.TEXT // Default ke Text - } +fun generateQuestion( + material: MaterialDataModel, + questionMode: Int, + answerMode: Int +): QuizQuestion { + val questionType = when (questionMode) { + 1 -> listOf(QuestionType.TEXT, QuestionType.IMAGE).random() + 2 -> QuestionType.AUDIO + else -> QuestionType.TEXT + } - val question = when (questionType) { - QuestionType.TEXT -> listOf(material.idName, material.idDescription).random() - QuestionType.IMAGE -> material.image - QuestionType.AUDIO -> material.enName - } ?: "Soal tidak tersedia" + val question = when (questionType) { + QuestionType.TEXT -> listOf(material.idName, material.idDescription).random() + QuestionType.IMAGE -> material.image + QuestionType.AUDIO -> material.enName + } ?: "Soal tidak tersedia" - val answerType = when (answerMode) { - 1 -> AnswerType.FULL_WORD - 2 -> AnswerType.SHUFFLED_LETTERS - else -> AnswerType.FULL_WORD - } + val answerType = when (answerMode) { + 1 -> AnswerType.FULL_WORD + 2 -> AnswerType.SHUFFLED_LETTERS + else -> AnswerType.FULL_WORD + } - return QuizQuestion( - questionType = questionType, - question = question, - correctAnswer = QuizAnswer( - answerType = answerType, - correctWord = material.enName - ) + return QuizQuestion( + questionType = questionType, + question = question, + correctAnswer = QuizAnswer( + answerType = answerType, + correctWord = material.enName ) - } - - /** - * Fungsi ini akan membuat soal dengan mode soal & jawaban yang DIPILIH SECARA ACAK. - */ - fun generateRandomQuestion(material: MaterialDataModel): QuizQuestion { - val randomQuestionMode = Random.nextInt(1, 3) // Acak antara 1 (Text/Image) atau 2 (Audio) - val randomAnswerMode = - Random.nextInt(1, 3) // Acak antara 1 (FULL_WORD) atau 2 (SHUFFLED_LETTERS) - - return generateQuestion(material, randomQuestionMode, randomAnswerMode) - } + ) +} fun getRandomMaterials( nData: Int, diff --git a/app/src/main/java/com/example/lexilearn/data/repository/UserRepository.kt b/app/src/main/java/com/example/lexilearn/data/repository/UserRepository.kt index 2bb0b4a..c1b674e 100644 --- a/app/src/main/java/com/example/lexilearn/data/repository/UserRepository.kt +++ b/app/src/main/java/com/example/lexilearn/data/repository/UserRepository.kt @@ -40,7 +40,8 @@ class UserRepository(private val context: Context) { return } - val userRef = FirebaseDatabase.getInstance().getReference("users/$userId/unlock_data/$idUnlock") + val userRef = + FirebaseDatabase.getInstance().getReference("users/$userId/unlock_data/$idUnlock") userRef.get().addOnSuccessListener { snapshot -> val currentValue = snapshot.getValue(Int::class.java) ?: 0 @@ -85,7 +86,8 @@ class UserRepository(private val context: Context) { return } - val userRef = FirebaseDatabase.getInstance().getReference("users/$userId/unlock_data/$idUnlock") + val userRef = + FirebaseDatabase.getInstance().getReference("users/$userId/unlock_data/$idUnlock") userRef.get().addOnSuccessListener { snapshot -> callback(snapshot.getValue(Int::class.java) ?: 0) }.addOnFailureListener { diff --git a/app/src/main/java/com/example/lexilearn/ui/theme/Type.kt b/app/src/main/java/com/example/lexilearn/ui/theme/Type.kt index 3c291ae..5949201 100644 --- a/app/src/main/java/com/example/lexilearn/ui/theme/Type.kt +++ b/app/src/main/java/com/example/lexilearn/ui/theme/Type.kt @@ -7,31 +7,31 @@ import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.sp import com.example.lexilearn.R +val _fredokaOne = FontFamily( + Font(R.font.fredoka) // Pastikan nama file sesuai +) // Set of Material typography styles to start with val Typography = Typography( - bodyLarge = TextStyle( - fontFamily = FontFamily(Font(R.font.inter)), - fontWeight = FontWeight.Normal, - fontSize = 16.sp, - lineHeight = 24.sp, - letterSpacing = 0.5.sp - ) - /* Other default text styles to override - titleLarge = TextStyle( - fontFamily = FontFamily.Default, - fontWeight = FontWeight.Normal, - fontSize = 22.sp, - lineHeight = 28.sp, - letterSpacing = 0.sp - ), - labelSmall = TextStyle( - fontFamily = FontFamily.Default, - fontWeight = FontWeight.Medium, - fontSize = 11.sp, - lineHeight = 16.sp, - letterSpacing = 0.5.sp - ) - */ + + displayLarge = TextStyle(fontFamily = _fredokaOne, fontSize = 57.sp), // Gaya displayLarge + displayMedium = TextStyle(fontFamily = _fredokaOne, fontSize = 45.sp), // Gaya displayMedium + displaySmall = TextStyle(fontFamily = _fredokaOne, fontSize = 36.sp), // Gaya displaySmall + + headlineLarge = TextStyle(fontFamily = _fredokaOne, fontSize = 32.sp), // Gaya headlineLarge + headlineMedium = TextStyle(fontFamily = _fredokaOne, fontSize = 28.sp), // Gaya headlineMedium + headlineSmall = TextStyle(fontFamily = _fredokaOne, fontSize = 24.sp), // Gaya headlineSmall + + titleLarge = TextStyle(fontFamily = _fredokaOne, fontSize = 22.sp), // Gaya titleLarge + titleMedium = TextStyle(fontFamily = _fredokaOne, fontSize = 20.sp), // Gaya titleMedium + titleSmall = TextStyle(fontFamily = _fredokaOne, fontSize = 18.sp), // Gaya titleSmall + + bodyLarge = TextStyle(fontFamily = _fredokaOne, fontSize = 16.sp), // Gaya bodyLarge + bodyMedium = TextStyle(fontFamily = _fredokaOne, fontSize = 14.sp), // Gaya bodyMedium + bodySmall = TextStyle(fontFamily = _fredokaOne, fontSize = 12.sp), // Gaya bodySmall + + labelLarge = TextStyle(fontFamily = _fredokaOne, fontSize = 14.sp), // Gaya labelLarge + labelMedium = TextStyle(fontFamily = _fredokaOne, fontSize = 12.sp), // Gaya labelMedium + labelSmall = TextStyle(fontFamily = _fredokaOne, fontSize = 10.sp) // Gaya labelSm ) diff --git a/app/src/main/java/com/example/lexilearn/ui/views/pDetailMaterial/DetailMaterialScreen.kt b/app/src/main/java/com/example/lexilearn/ui/views/pDetailMaterial/DetailMaterialScreen.kt index 4e41e81..1c6d484 100644 --- a/app/src/main/java/com/example/lexilearn/ui/views/pDetailMaterial/DetailMaterialScreen.kt +++ b/app/src/main/java/com/example/lexilearn/ui/views/pDetailMaterial/DetailMaterialScreen.kt @@ -41,7 +41,11 @@ import com.example.lexilearn.ui.theme.ctextBlack import com.example.lexilearn.ui.theme.ctextGray @Composable -fun DetailMaterialScreen(navController: NavController, materialListData: List, indexValue: Int) { +fun DetailMaterialScreen( + navController: NavController, + materialListData: List, + indexValue: Int +) { val viewModel: DetailMaterialViewModel = viewModel() LaunchedEffect(materialListData) { viewModel.fetchMaterial(materialListData) @@ -98,8 +102,8 @@ fun DetailMaterialScreen(navController: NavController, materialListData: List() - for (scoreSnapshot in snapshot.children) { val scoreData = scoreSnapshot.getValue(CompetitionScore::class.java) scoreData?.let { scoreList.add(it) } } - - // Urutkan dari yang tertinggi ke terendah _topScores.value = scoreList.sortedByDescending { it.score } } diff --git a/app/src/main/java/com/example/lexilearn/ui/views/pLearnNumber/LearnNumberScreen.kt b/app/src/main/java/com/example/lexilearn/ui/views/pLearnNumber/LearnNumberScreen.kt index c82c038..2c27782 100644 --- a/app/src/main/java/com/example/lexilearn/ui/views/pLearnNumber/LearnNumberScreen.kt +++ b/app/src/main/java/com/example/lexilearn/ui/views/pLearnNumber/LearnNumberScreen.kt @@ -30,7 +30,7 @@ fun LearnNumberScreen(navController: NavController) { Surface(modifier = Modifier.fillMaxSize()) { GradientQuiz( navController = navController, - headerText = "Belajar Alfabet Inggris", + headerText = "Belajar Angka Inggris", modifier = Modifier.fillMaxSize() ) { Column( diff --git a/app/src/main/java/com/example/lexilearn/ui/views/pNavMaterial/NavMaterialViewModel.kt b/app/src/main/java/com/example/lexilearn/ui/views/pNavMaterial/NavMaterialViewModel.kt index 969b852..d22ca56 100644 --- a/app/src/main/java/com/example/lexilearn/ui/views/pNavMaterial/NavMaterialViewModel.kt +++ b/app/src/main/java/com/example/lexilearn/ui/views/pNavMaterial/NavMaterialViewModel.kt @@ -45,7 +45,6 @@ class NavMaterialViewModel(application: Application) : AndroidViewModel(applicat _sizeUnlock.value = value } repository.getMaterialData(materialId) { materials -> -// val filteredMaterials = materials.filter { it.category == materialId } _materialList.value = materials.chunked(3) if (materials[0].category == "animal") { _textTitle.value = "hewan" diff --git a/app/src/main/java/com/example/lexilearn/ui/views/pQuiz/QuizScreen.kt b/app/src/main/java/com/example/lexilearn/ui/views/pQuiz/QuizScreen.kt index bb7b695..86edab7 100644 --- a/app/src/main/java/com/example/lexilearn/ui/views/pQuiz/QuizScreen.kt +++ b/app/src/main/java/com/example/lexilearn/ui/views/pQuiz/QuizScreen.kt @@ -53,12 +53,14 @@ import androidx.compose.ui.unit.IntOffset import androidx.compose.ui.zIndex import androidx.constraintlayout.compose.ConstraintLayout import com.example.lexilearn.data.model.QuestionType +import com.example.lexilearn.domain.models.ModelQuestion import com.example.lexilearn.ui.components.CardQuiz import com.example.lexilearn.ui.components.DraggableAnswerCard import com.example.lexilearn.ui.components.FirebaseImage import com.example.lexilearn.ui.components.GradientQuiz import com.example.lexilearn.ui.components.MyShadowCard import com.example.lexilearn.ui.theme.cAccent +import com.example.lexilearn.ui.theme.ctextBlack import com.example.lexilearn.ui.theme.ctextGray import com.example.lexilearn.ui.theme.ctextWhite import com.google.accompanist.flowlayout.FlowRow @@ -73,7 +75,6 @@ fun QuizScreen( indexValue: Int, quizViewModel: QuizViewModel = viewModel() ) { - println("testco tipe: ${typeQuiz}, index = ${indexValue}") val question by quizViewModel.currentQuestion.collectAsState() val isButtonVisible by quizViewModel.isButtonVisible val isAnswerCorrect by quizViewModel.isAnswerCorrect.collectAsState() @@ -222,7 +223,7 @@ fun QuizScreen( horizontalArrangement = Arrangement.SpaceBetween ) { Text( - text = "Score: $liveCurrentScore", + text = "Point: $liveCurrentScore", color = cAccent, fontSize = 18.sp, fontWeight = FontWeight.Bold @@ -256,6 +257,7 @@ fun QuizScreen( Text( text = question!!.question, fontSize = 20.sp, + color = ctextBlack, fontWeight = FontWeight.Bold, modifier = Modifier.padding(12.dp) ) @@ -366,10 +368,7 @@ fun QuizScreen( rect ) ) { - quizViewModel.updateQuestionShuffled( - ind, - dt - ) + val newDt = dt.copy() dt.apply { hasContent = false @@ -377,6 +376,10 @@ fun QuizScreen( false data = "?" } + quizViewModel.updateQuestionShuffled( + ind, + newDt + ) checkNull = true quizXOffset[id] = 0f @@ -431,6 +434,7 @@ fun QuizScreen( } } } + println("--------") } Spacer(modifier = Modifier.height(12.dp)) } diff --git a/app/src/main/java/com/example/lexilearn/ui/views/pQuiz/QuizViewModel.kt b/app/src/main/java/com/example/lexilearn/ui/views/pQuiz/QuizViewModel.kt index 4557ef5..d596f86 100644 --- a/app/src/main/java/com/example/lexilearn/ui/views/pQuiz/QuizViewModel.kt +++ b/app/src/main/java/com/example/lexilearn/ui/views/pQuiz/QuizViewModel.kt @@ -2,7 +2,6 @@ package com.example.lexilearn.ui.views.pQuiz import android.app.Application import android.speech.tts.TextToSpeech -import android.util.Log import androidx.compose.runtime.State import androidx.compose.runtime.mutableStateOf import androidx.lifecycle.AndroidViewModel @@ -46,10 +45,6 @@ class QuizViewModel(application: Application) : AndroidViewModel(application), _indexQuiz.value += 1 } - fun loadNewQuestion(material: MaterialDataModel, questionMode: Int, answerMode: Int) { - _currentQuestion.value = quizRepository.generateQuestion(material, questionMode, answerMode) - } - private val _shuffledAnswerLetters = MutableStateFlow>(emptyList()) val shuffledAnswerLetters: StateFlow> = _shuffledAnswerLetters @@ -101,7 +96,7 @@ class QuizViewModel(application: Application) : AndroidViewModel(application), val listAnswer = _currentQuestion.value?.correctAnswer?.correctWord?.mapIndexed { index, char -> ModelAnswer( - id = (_indexQuiz.value * 100) + index + 1, // ID unik per pertanyaan + id = (_indexQuiz.value * 100) + index + 1, data = char.toString().lowercase() ) } ?: emptyList() @@ -135,24 +130,21 @@ class QuizViewModel(application: Application) : AndroidViewModel(application), } fun checkAnswer(answerString: String): Boolean { - if (answerString.lowercase() == currentQuestion.value?.correctAnswer?.correctWord?.lowercase()) { - return true - } - return false + return (answerString.lowercase() == currentQuestion.value?.correctAnswer?.correctWord?.lowercase()) } fun observeData() { viewModelScope.launch { _questionShuffled.collect { newList -> - // Lakukan aksi setiap kali data berubah var answerString = "" newList.forEach { text -> answerString = answerString + text.data } if (answerString.contains("?") || answerString.isEmpty() || answerString.contains("null")) { + println("if-$answerString") _isButtonVisible.value = false } else { - Log.d("cobaaja", answerString) + println("else-$answerString") val checkData = checkAnswer(answerString); if (checkData) { triggerSnackbar("Jawaban Benar") @@ -185,6 +177,8 @@ class QuizViewModel(application: Application) : AndroidViewModel(application), super.onCleared() } + // competition + private val _totalScore = MutableStateFlow(0) val totalScore: StateFlow get() = _totalScore.asStateFlow() @@ -288,12 +282,11 @@ class QuizViewModel(application: Application) : AndroidViewModel(application), val penaltyTime = max(0, responseTime - safeTime) * timePenalty val penaltyWrong = wrongAttempts * wrongPenalty var score = baseScore - penaltyTime - penaltyWrong - - if (responseTime <= 3) { + if (responseTime <= 5) { +// println("responset: $responseTime") score += bonusQuick } return max(minScore, score) } - } \ No newline at end of file diff --git a/app/src/main/res/font/fredoka.ttf b/app/src/main/res/font/fredoka.ttf new file mode 100644 index 0000000000000000000000000000000000000000..3afd362bb09579dc3b853fde05a499bc4b0692d2 GIT binary patch literal 50004 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 VyR*w^!z73AJNtk(d;y8X{{dc;j$!}+ literal 0 HcmV?d00001