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 0000000..73a95c1 Binary files /dev/null and b/app/src/main/res/drawable/logog.png differ