From 649229579b3ddece86dcd3fdc62181a10b329555 Mon Sep 17 00:00:00 2001 From: Diassdp <149257568+Diassdp@users.noreply.github.com> Date: Wed, 5 Mar 2025 20:46:02 +0700 Subject: [PATCH] Second Commit: Version 1.5 [Partialy Optimized Version] [UI Fixes And Improvment] Todo: Optimized the Code Add String Theolgy --- .../com/healthjournal/algorithm/Algorithm.kt | 8 +- .../ui/dashboard/MainActivity.kt | 107 +++++++++++------- .../ui/journal/input/JournalInputActivity.kt | 2 +- .../ui/profile/ProfileActivity.kt | 2 +- .../recommendation/RecommendationActivity.kt | 4 +- app/src/main/res/drawable/logog.png | Bin 0 -> 20660 bytes 6 files changed, 72 insertions(+), 51 deletions(-) create mode 100644 app/src/main/res/drawable/logog.png diff --git a/app/src/main/java/com/healthjournal/algorithm/Algorithm.kt b/app/src/main/java/com/healthjournal/algorithm/Algorithm.kt index be54fcb..e85bd21 100644 --- a/app/src/main/java/com/healthjournal/algorithm/Algorithm.kt +++ b/app/src/main/java/com/healthjournal/algorithm/Algorithm.kt @@ -21,14 +21,14 @@ class AlgoritmaKesehatan { return when (healthData.gender) { "Female", "Other" -> when { healthData.bloodSugar < 70 -> "Gula darah rendah, konsumsi makanan manis seperti buah atau madu." - healthData.bloodSugar in 70.0..140.0 -> "Gula darah normal, pertahankan pola makan sehat." - healthData.bloodSugar > 140 -> "Gula darah tinggi, kurangi makanan manis dan lakukan olahraga teratur." + healthData.bloodSugar in 70.0..130.0 -> "Gula darah normal, pertahankan pola makan sehat." + healthData.bloodSugar > 130 -> "Gula darah tinggi, kurangi makanan manis dan lakukan olahraga teratur." else -> "Data gula darah tidak valid." } "Male" -> when { healthData.bloodSugar < 70 -> "Gula darah rendah, segera konsumsi makanan berkarbohidrat." - healthData.bloodSugar in 70.0..130.0 -> "Gula darah normal, jaga pola makan seimbang." - healthData.bloodSugar > 130 -> "Gula darah tinggi, batasi konsumsi gula dan periksa kesehatan secara berkala." + healthData.bloodSugar in 70.0..120.0 -> "Gula darah normal, jaga pola makan seimbang." + healthData.bloodSugar > 120 -> "Gula darah tinggi, batasi konsumsi gula dan periksa kesehatan secara berkala." else -> "Data gula darah tidak valid." } else -> "Data gula darah tidak valid." diff --git a/app/src/main/java/com/healthjournal/ui/dashboard/MainActivity.kt b/app/src/main/java/com/healthjournal/ui/dashboard/MainActivity.kt index f5994d7..ab2dac2 100644 --- a/app/src/main/java/com/healthjournal/ui/dashboard/MainActivity.kt +++ b/app/src/main/java/com/healthjournal/ui/dashboard/MainActivity.kt @@ -13,7 +13,10 @@ import androidx.recyclerview.widget.LinearLayoutManager import com.google.android.material.bottomnavigation.BottomNavigationView import com.google.firebase.Firebase import com.google.firebase.auth.FirebaseAuth +import com.google.firebase.database.DataSnapshot +import com.google.firebase.database.DatabaseError import com.google.firebase.database.FirebaseDatabase +import com.google.firebase.database.ValueEventListener import com.google.firebase.database.database import com.healthjournal.R import com.healthjournal.data.ResultData @@ -23,6 +26,7 @@ import com.healthjournal.ui.journal.input.JournalInputActivity import com.healthjournal.ui.login.LoginActivity import com.healthjournal.ui.profile.ProfileActivity import com.healthjournal.ui.recommendation.RecommendationActivity +import com.healthjournal.ui.users.UsersInputActivity import com.healthjournal.utils.NotificationUtils import java.text.SimpleDateFormat import java.util.Calendar @@ -115,22 +119,28 @@ class MainActivity : AppCompatActivity() { val dateFormat = SimpleDateFormat("dd/MM/yyyy", Locale.getDefault()) + // Set start of the week (Sunday) today.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY) - val startDate = dateFormat.format(today.time) + val startDate = today.time + // Set end of the week (Saturday) val endDate = today.clone() as Calendar endDate.add(Calendar.DAY_OF_WEEK, 6) - val endDateString = dateFormat.format(endDate.time) + val endDateDate = endDate.time - database.getReference("users").child(userID).child("journal") - .get() + database.getReference("users").child(userID).child("journal").get() .addOnCompleteListener { task -> if (task.isSuccessful) { count = task.result.children.count { snapshot -> - val date = snapshot.child("date").value.toString() - date >= startDate && date <= endDateString + val dateString = snapshot.child("date").value.toString() + val entryDate = try { + dateFormat.parse(dateString) + } catch (e: Exception) { + null + } + entryDate?.let { it in startDate..endDateDate } ?: false } - Log.d("debug", "Entries found: $count for week: $startDate - $endDateString") + Log.d("debug", "Entries found: $count for week: ${dateFormat.format(startDate)} - ${dateFormat.format(endDateDate)}") binding.tvDailyCounter.text = "$count/7" } else { Log.e("error", task.exception?.message.toString()) @@ -139,6 +149,7 @@ class MainActivity : AppCompatActivity() { } } + private fun setupListener(){ binding.btnRecomendation.setOnClickListener { startActivity(Intent(this, RecommendationActivity::class.java)) @@ -190,22 +201,29 @@ class MainActivity : AppCompatActivity() { } private fun userCheck() { - user = FirebaseAuth.getInstance() - - if (user.currentUser == null) { - Toast.makeText(this, "Please Login to an account", Toast.LENGTH_SHORT).show() - val intent = Intent(this, LoginActivity::class.java) - startActivity(intent) - finish() - } else { - Toast.makeText(this, "Welcome back!", Toast.LENGTH_SHORT).show() - dailycheck() - getWeekCount() - populateHistory() + val firebaseUser = user.currentUser + if (firebaseUser != null) { + val userID = firebaseUser.uid + val userRef = database.getReference("users").child(userID) + userRef.get().addOnCompleteListener { task -> + if (task.isSuccessful) { + if (task.result.exists() && task.result.childrenCount > 0) { + Toast.makeText(this, "Selamat Kembali!", Toast.LENGTH_SHORT).show() + dailycheck() + getWeekCount() + populateHistory() + } else { + Toast.makeText(this, "Tidak ada user data kesehatan. Tolong isi data kesehatan profile.", Toast.LENGTH_LONG).show() + startActivity(Intent(this@MainActivity, UsersInputActivity::class.java)) + finish() + } + } else { + Toast.makeText(this, "Failed to retrieve user data.", Toast.LENGTH_SHORT).show() + } + } } } - private fun populateHistory() { val userID = user.currentUser!!.uid mainAdapter = MainAdapter(healthDataList) @@ -215,32 +233,35 @@ class MainActivity : AppCompatActivity() { layoutManager = LinearLayoutManager(this@MainActivity) } - database.getReference("users").child(userID).child("journal").get() - .addOnCompleteListener { task -> - if (task.isSuccessful) { - healthDataList.clear() - task.result.children.forEach { snapshot -> - val journalID = snapshot.key.toString() - val bloodSugar = snapshot.child("bloodSugar").value.toString().toFloatOrNull() ?: 0f - val diastolicBP = snapshot.child("bloodPressureDIA").value.toString().toIntOrNull() ?: 0 - val systolicBP = snapshot.child("bloodPressureSYS").value.toString().toIntOrNull() ?: 0 - val BMI = snapshot.child("bmi").value.toString().toFloatOrNull() ?: 0f - val date = snapshot.child("date").value.toString() - val task = snapshot.child("recommendation").child("tasks").value as? List> ?: emptyList() + val historyRef = database.getReference("users").child(userID).child("journal") - val resultData = ResultData(journalID, bloodSugar, diastolicBP, systolicBP, BMI, date, task) - healthDataList.add(resultData) - } + historyRef.addValueEventListener(object : ValueEventListener { + override fun onDataChange(snapshot: DataSnapshot) { + healthDataList.clear() + snapshot.children.forEach { data -> + val journalID = data.key.toString() + val bloodSugar = data.child("bloodSugar").value.toString().toFloatOrNull() ?: 0f + val diastolicBP = data.child("bloodPressureDIA").value.toString().toIntOrNull() ?: 0 + val systolicBP = data.child("bloodPressureSYS").value.toString().toIntOrNull() ?: 0 + val BMI = data.child("bmi").value.toString().toFloatOrNull() ?: 0f + val date = data.child("date").value.toString() + val task = data.child("recommendation").child("tasks").value as? List> ?: emptyList() - val dateFormat = SimpleDateFormat("dd/MM/yyyy", Locale.getDefault()) - healthDataList.sortByDescending { it.date.let { date -> dateFormat.parse(date) } } - - mainAdapter.notifyDataSetChanged() - } else { - Log.d("error", task.exception?.message.toString()) - Toast.makeText(this, task.exception?.message, Toast.LENGTH_SHORT).show() + val resultData = ResultData(journalID, bloodSugar, diastolicBP, systolicBP, BMI, date, task) + healthDataList.add(resultData) } + + val dateFormat = SimpleDateFormat("dd/MM/yyyy", Locale.getDefault()) + healthDataList.sortByDescending { it.date.let { date -> dateFormat.parse(date) } } + + mainAdapter.notifyDataSetChanged() } + + override fun onCancelled(error: DatabaseError) { + Log.d("error", error.message) + Toast.makeText(this@MainActivity, error.message, Toast.LENGTH_SHORT).show() + } + }) } @@ -257,7 +278,7 @@ class MainActivity : AppCompatActivity() { val bmiValue = it.result.child("BMI").value.toString().toDoubleOrNull() ?: 0.0 binding.tvBloodsugarLevel.text = it.result.child("bloodSugar").value.toString() + " mg/dL" binding.tvBloodsugarDesc.text = it.result.child("recommendation").child("bloodSugarAnalysis").value.toString() - binding.tvBloodpressureLevel.text = it.result.child("bloodPressureDIA").value.toString() + "/" + it.result.child("bloodPressureSYS").value.toString() + " mm Hg" + binding.tvBloodpressureLevel.text = it.result.child("bloodPressureSYS").value.toString() + "/" + it.result.child("bloodPressureDIA").value.toString() + " mm Hg" binding.tvBloodpressureDesc.text = it.result.child("recommendation").child("bloodPressureAnalysis").value.toString() binding.tvBmiLevel.text = String.format(Locale.getDefault(), "%.2f BMI", bmiValue) binding.tvBmiDesc.text = it.result.child("recommendation").child("BMIAnalysis").value.toString() diff --git a/app/src/main/java/com/healthjournal/ui/journal/input/JournalInputActivity.kt b/app/src/main/java/com/healthjournal/ui/journal/input/JournalInputActivity.kt index d6cf591..4d6ec0e 100644 --- a/app/src/main/java/com/healthjournal/ui/journal/input/JournalInputActivity.kt +++ b/app/src/main/java/com/healthjournal/ui/journal/input/JournalInputActivity.kt @@ -97,7 +97,7 @@ class JournalInputActivity : AppCompatActivity() { if (weight != null && bloodPressureSYS.isNotEmpty() && bloodPressureDIA.isNotEmpty() && bloodSugar.isNotEmpty()) { database.getReference("users").child(userId).child("height").get().addOnSuccessListener { snapshot -> val BMI = calculateBMI(weight, height) - val healthData = HealthData(bloodSugar.toFloat(), bloodPressureSYS.toInt(), bloodPressureDIA.toInt(), BMI,age,gender) + val healthData = HealthData(bloodSugar.toFloat(),bloodPressureDIA.toInt(),bloodPressureSYS.toInt(), BMI,age,gender) val recommendation = AlgoritmaKesehatan().recommendationOfTheDay(healthData) val data = hashMapOf( diff --git a/app/src/main/java/com/healthjournal/ui/profile/ProfileActivity.kt b/app/src/main/java/com/healthjournal/ui/profile/ProfileActivity.kt index 5123ffd..27376e2 100644 --- a/app/src/main/java/com/healthjournal/ui/profile/ProfileActivity.kt +++ b/app/src/main/java/com/healthjournal/ui/profile/ProfileActivity.kt @@ -71,7 +71,7 @@ class ProfileActivity : AppCompatActivity() { if (it.isSuccessful) { binding.edtName.setText(it.result.child("name").value.toString()) binding.tvMyname.text = it.result.child("name").value.toString() - binding.tvMyemail.text = it.result.child("email").value.toString() + binding.tvMyemail.text = user.currentUser?.email.toString() binding.edtDate.setText(it.result.child("date").value.toString()) binding.edtInputHeight.setText(it.result.child("height").value.toString()) binding.edtInputWeight.setText(it.result.child("weight").value.toString()) diff --git a/app/src/main/java/com/healthjournal/ui/recommendation/RecommendationActivity.kt b/app/src/main/java/com/healthjournal/ui/recommendation/RecommendationActivity.kt index f5beacf..d07ecb4 100644 --- a/app/src/main/java/com/healthjournal/ui/recommendation/RecommendationActivity.kt +++ b/app/src/main/java/com/healthjournal/ui/recommendation/RecommendationActivity.kt @@ -43,9 +43,9 @@ class RecommendationActivity : AppCompatActivity() { binding.tvBloodsugarLevel2.text = "${it.child("bloodSugar").value} mg/dL" binding.tvBloodsugarDesc.text = it.child("recommendation").child("bloodSugarAnalysis").value.toString() - binding.tvBloodpressureLevel2.text = "${it.child("bloodPressureDIA").value}/${it.child("bloodPressureSYS").value} mm Hg" + binding.tvBloodpressureLevel2.text = "${it.child("bloodPressureSYS").value}/${it.child("bloodPressureDIA").value} mm Hg" binding.tvBloodpressureDesc.text = it.child("recommendation").child("bloodPressureAnalysis").value.toString() - binding.tvBMILevel2.text = "${bmiValue} BMI" + binding.tvBMILevel2.text = String.format(Locale.getDefault(), "%.2f BMI", bmiValue) binding.tvBMIDesc.text = it.child("recommendation").child("BMIAnalysis").value.toString() val tasks = it.child("recommendation").child("tasks").value diff --git a/app/src/main/res/drawable/logog.png b/app/src/main/res/drawable/logog.png new file mode 100644 index 0000000000000000000000000000000000000000..73a95c1f09bec678e8b6529e58c59df33c0dfdea GIT binary patch literal 20660 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 literal 0 HcmV?d00001