Second Commit:
Version 1.5 [Partialy Optimized Version] [UI Fixes And Improvment] Todo: Optimized the Code Add String Theolgy
This commit is contained in:
@ -21,14 +21,14 @@ class AlgoritmaKesehatan {
|
|||||||
return when (healthData.gender) {
|
return when (healthData.gender) {
|
||||||
"Female", "Other" -> when {
|
"Female", "Other" -> when {
|
||||||
healthData.bloodSugar < 70 -> "Gula darah rendah, konsumsi makanan manis seperti buah atau madu."
|
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 in 70.0..130.0 -> "Gula darah normal, pertahankan pola makan sehat."
|
||||||
healthData.bloodSugar > 140 -> "Gula darah tinggi, kurangi makanan manis dan lakukan olahraga teratur."
|
healthData.bloodSugar > 130 -> "Gula darah tinggi, kurangi makanan manis dan lakukan olahraga teratur."
|
||||||
else -> "Data gula darah tidak valid."
|
else -> "Data gula darah tidak valid."
|
||||||
}
|
}
|
||||||
"Male" -> when {
|
"Male" -> when {
|
||||||
healthData.bloodSugar < 70 -> "Gula darah rendah, segera konsumsi makanan berkarbohidrat."
|
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 in 70.0..120.0 -> "Gula darah normal, jaga pola makan seimbang."
|
||||||
healthData.bloodSugar > 130 -> "Gula darah tinggi, batasi konsumsi gula dan periksa kesehatan secara berkala."
|
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."
|
||||||
}
|
}
|
||||||
else -> "Data gula darah tidak valid."
|
else -> "Data gula darah tidak valid."
|
||||||
|
@ -13,7 +13,10 @@ import androidx.recyclerview.widget.LinearLayoutManager
|
|||||||
import com.google.android.material.bottomnavigation.BottomNavigationView
|
import com.google.android.material.bottomnavigation.BottomNavigationView
|
||||||
import com.google.firebase.Firebase
|
import com.google.firebase.Firebase
|
||||||
import com.google.firebase.auth.FirebaseAuth
|
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.FirebaseDatabase
|
||||||
|
import com.google.firebase.database.ValueEventListener
|
||||||
import com.google.firebase.database.database
|
import com.google.firebase.database.database
|
||||||
import com.healthjournal.R
|
import com.healthjournal.R
|
||||||
import com.healthjournal.data.ResultData
|
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.login.LoginActivity
|
||||||
import com.healthjournal.ui.profile.ProfileActivity
|
import com.healthjournal.ui.profile.ProfileActivity
|
||||||
import com.healthjournal.ui.recommendation.RecommendationActivity
|
import com.healthjournal.ui.recommendation.RecommendationActivity
|
||||||
|
import com.healthjournal.ui.users.UsersInputActivity
|
||||||
import com.healthjournal.utils.NotificationUtils
|
import com.healthjournal.utils.NotificationUtils
|
||||||
import java.text.SimpleDateFormat
|
import java.text.SimpleDateFormat
|
||||||
import java.util.Calendar
|
import java.util.Calendar
|
||||||
@ -115,22 +119,28 @@ class MainActivity : AppCompatActivity() {
|
|||||||
|
|
||||||
val dateFormat = SimpleDateFormat("dd/MM/yyyy", Locale.getDefault())
|
val dateFormat = SimpleDateFormat("dd/MM/yyyy", Locale.getDefault())
|
||||||
|
|
||||||
|
// Set start of the week (Sunday)
|
||||||
today.set(Calendar.DAY_OF_WEEK, Calendar.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
|
val endDate = today.clone() as Calendar
|
||||||
endDate.add(Calendar.DAY_OF_WEEK, 6)
|
endDate.add(Calendar.DAY_OF_WEEK, 6)
|
||||||
val endDateString = dateFormat.format(endDate.time)
|
val endDateDate = endDate.time
|
||||||
|
|
||||||
database.getReference("users").child(userID).child("journal")
|
database.getReference("users").child(userID).child("journal").get()
|
||||||
.get()
|
|
||||||
.addOnCompleteListener { task ->
|
.addOnCompleteListener { task ->
|
||||||
if (task.isSuccessful) {
|
if (task.isSuccessful) {
|
||||||
count = task.result.children.count { snapshot ->
|
count = task.result.children.count { snapshot ->
|
||||||
val date = snapshot.child("date").value.toString()
|
val dateString = snapshot.child("date").value.toString()
|
||||||
date >= startDate && date <= endDateString
|
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"
|
binding.tvDailyCounter.text = "$count/7"
|
||||||
} else {
|
} else {
|
||||||
Log.e("error", task.exception?.message.toString())
|
Log.e("error", task.exception?.message.toString())
|
||||||
@ -139,6 +149,7 @@ class MainActivity : AppCompatActivity() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private fun setupListener(){
|
private fun setupListener(){
|
||||||
binding.btnRecomendation.setOnClickListener {
|
binding.btnRecomendation.setOnClickListener {
|
||||||
startActivity(Intent(this, RecommendationActivity::class.java))
|
startActivity(Intent(this, RecommendationActivity::class.java))
|
||||||
@ -190,22 +201,29 @@ class MainActivity : AppCompatActivity() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun userCheck() {
|
private fun userCheck() {
|
||||||
user = FirebaseAuth.getInstance()
|
val firebaseUser = user.currentUser
|
||||||
|
if (firebaseUser != null) {
|
||||||
if (user.currentUser == null) {
|
val userID = firebaseUser.uid
|
||||||
Toast.makeText(this, "Please Login to an account", Toast.LENGTH_SHORT).show()
|
val userRef = database.getReference("users").child(userID)
|
||||||
val intent = Intent(this, LoginActivity::class.java)
|
userRef.get().addOnCompleteListener { task ->
|
||||||
startActivity(intent)
|
if (task.isSuccessful) {
|
||||||
finish()
|
if (task.result.exists() && task.result.childrenCount > 0) {
|
||||||
} else {
|
Toast.makeText(this, "Selamat Kembali!", Toast.LENGTH_SHORT).show()
|
||||||
Toast.makeText(this, "Welcome back!", Toast.LENGTH_SHORT).show()
|
dailycheck()
|
||||||
dailycheck()
|
getWeekCount()
|
||||||
getWeekCount()
|
populateHistory()
|
||||||
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() {
|
private fun populateHistory() {
|
||||||
val userID = user.currentUser!!.uid
|
val userID = user.currentUser!!.uid
|
||||||
mainAdapter = MainAdapter(healthDataList)
|
mainAdapter = MainAdapter(healthDataList)
|
||||||
@ -215,32 +233,35 @@ class MainActivity : AppCompatActivity() {
|
|||||||
layoutManager = LinearLayoutManager(this@MainActivity)
|
layoutManager = LinearLayoutManager(this@MainActivity)
|
||||||
}
|
}
|
||||||
|
|
||||||
database.getReference("users").child(userID).child("journal").get()
|
val historyRef = database.getReference("users").child(userID).child("journal")
|
||||||
.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 resultData = ResultData(journalID, bloodSugar, diastolicBP, systolicBP, BMI, date, task)
|
historyRef.addValueEventListener(object : ValueEventListener {
|
||||||
healthDataList.add(resultData)
|
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())
|
val resultData = ResultData(journalID, bloodSugar, diastolicBP, systolicBP, BMI, date, task)
|
||||||
healthDataList.sortByDescending { it.date.let { date -> dateFormat.parse(date) } }
|
healthDataList.add(resultData)
|
||||||
|
|
||||||
mainAdapter.notifyDataSetChanged()
|
|
||||||
} else {
|
|
||||||
Log.d("error", task.exception?.message.toString())
|
|
||||||
Toast.makeText(this, task.exception?.message, Toast.LENGTH_SHORT).show()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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
|
val bmiValue = it.result.child("BMI").value.toString().toDoubleOrNull() ?: 0.0
|
||||||
binding.tvBloodsugarLevel.text = it.result.child("bloodSugar").value.toString() + " mg/dL"
|
binding.tvBloodsugarLevel.text = it.result.child("bloodSugar").value.toString() + " mg/dL"
|
||||||
binding.tvBloodsugarDesc.text = it.result.child("recommendation").child("bloodSugarAnalysis").value.toString()
|
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.tvBloodpressureDesc.text = it.result.child("recommendation").child("bloodPressureAnalysis").value.toString()
|
||||||
binding.tvBmiLevel.text = String.format(Locale.getDefault(), "%.2f BMI", bmiValue)
|
binding.tvBmiLevel.text = String.format(Locale.getDefault(), "%.2f BMI", bmiValue)
|
||||||
binding.tvBmiDesc.text = it.result.child("recommendation").child("BMIAnalysis").value.toString()
|
binding.tvBmiDesc.text = it.result.child("recommendation").child("BMIAnalysis").value.toString()
|
||||||
|
@ -97,7 +97,7 @@ class JournalInputActivity : AppCompatActivity() {
|
|||||||
if (weight != null && bloodPressureSYS.isNotEmpty() && bloodPressureDIA.isNotEmpty() && bloodSugar.isNotEmpty()) {
|
if (weight != null && bloodPressureSYS.isNotEmpty() && bloodPressureDIA.isNotEmpty() && bloodSugar.isNotEmpty()) {
|
||||||
database.getReference("users").child(userId).child("height").get().addOnSuccessListener { snapshot ->
|
database.getReference("users").child(userId).child("height").get().addOnSuccessListener { snapshot ->
|
||||||
val BMI = calculateBMI(weight, height)
|
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 recommendation = AlgoritmaKesehatan().recommendationOfTheDay(healthData)
|
||||||
|
|
||||||
val data = hashMapOf(
|
val data = hashMapOf(
|
||||||
|
@ -71,7 +71,7 @@ class ProfileActivity : AppCompatActivity() {
|
|||||||
if (it.isSuccessful) {
|
if (it.isSuccessful) {
|
||||||
binding.edtName.setText(it.result.child("name").value.toString())
|
binding.edtName.setText(it.result.child("name").value.toString())
|
||||||
binding.tvMyname.text = 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.edtDate.setText(it.result.child("date").value.toString())
|
||||||
binding.edtInputHeight.setText(it.result.child("height").value.toString())
|
binding.edtInputHeight.setText(it.result.child("height").value.toString())
|
||||||
binding.edtInputWeight.setText(it.result.child("weight").value.toString())
|
binding.edtInputWeight.setText(it.result.child("weight").value.toString())
|
||||||
|
@ -43,9 +43,9 @@ class RecommendationActivity : AppCompatActivity() {
|
|||||||
|
|
||||||
binding.tvBloodsugarLevel2.text = "${it.child("bloodSugar").value} mg/dL"
|
binding.tvBloodsugarLevel2.text = "${it.child("bloodSugar").value} mg/dL"
|
||||||
binding.tvBloodsugarDesc.text = it.child("recommendation").child("bloodSugarAnalysis").value.toString()
|
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.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()
|
binding.tvBMIDesc.text = it.child("recommendation").child("BMIAnalysis").value.toString()
|
||||||
|
|
||||||
val tasks = it.child("recommendation").child("tasks").value
|
val tasks = it.child("recommendation").child("tasks").value
|
||||||
|
BIN
app/src/main/res/drawable/logog.png
Normal file
BIN
app/src/main/res/drawable/logog.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 20 KiB |
Reference in New Issue
Block a user