Second Commit:

Version 1.5 [Partialy Optimized Version] [UI Fixes And Improvment]
Todo:
Optimized the Code
Add String Theolgy
This commit is contained in:
Diassdp
2025-03-05 20:46:02 +07:00
parent db9c19a17a
commit 649229579b
6 changed files with 72 additions and 51 deletions

View File

@ -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."

View File

@ -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<Map<String, Any>> ?: 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<Map<String, Any>> ?: 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()

View File

@ -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(

View File

@ -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())

View File

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB