From b1f05c0d1c5b3620584cd1b4fe54fcf0315f2891 Mon Sep 17 00:00:00 2001
From: Diassdp <149257568+Diassdp@users.noreply.github.com>
Date: Sun, 2 Feb 2025 00:12:52 +0700
Subject: [PATCH] Second Commit: Version 1.5 [Partialy Optimized Version] [UI
Fixes And Improvment] Todo: Optimized the Code Add String Theolgy
---
.idea/deploymentTargetSelector.xml | 8 +
app/src/main/AndroidManifest.xml | 2 +
.../com/healthjournal/algorithm/Algorithm.kt | 68 +++--
.../main/java/com/healthjournal/data/Data.kt | 4 +-
.../notification/NotificationUtils.kt | 27 ++
.../notification/ReminderReceiver.kt | 39 +++
.../ui/dashboard/MainActivity.kt | 115 ++++++---
.../healthjournal/ui/dashboard/MainAdapter.kt | 20 +-
.../journal/detail/DetailJournalActivity.kt | 83 +++---
.../ui/profile/ProfileActivity.kt | 22 +-
.../res/drawable/baseline_add_circle_24.xml | 5 +
app/src/main/res/drawable/bg_dashboard.xml | 11 +
app/src/main/res/drawable/bg_input_box.xml | 12 +
app/src/main/res/drawable/ic_add.png | Bin 9015 -> 0 bytes
app/src/main/res/drawable/ic_home.png | Bin 3322 -> 0 bytes
app/src/main/res/drawable/ic_home.xml | 9 +
.../main/res/drawable/ic_notifications.xml | 5 +
app/src/main/res/drawable/ic_profile.png | Bin 4083 -> 0 bytes
app/src/main/res/drawable/ic_profile.xml | 9 +
.../res/layout/activity_detail_journal.xml | 67 ++---
.../res/layout/activity_journal_input.xml | 237 ++++++++----------
app/src/main/res/layout/activity_main.xml | 201 +++++++++++----
app/src/main/res/layout/activity_profile.xml | 189 +++++++-------
app/src/main/res/layout/activity_register.xml | 2 +-
.../main/res/layout/activity_users_input.xml | 67 +++--
.../main/res/layout/item_health_history.xml | 23 +-
app/src/main/res/menu/bottom_nav_menu.xml | 2 +-
app/src/main/res/values/strings.xml | 12 +
app/src/main/res/values/themes.xml | 34 ++-
29 files changed, 825 insertions(+), 448 deletions(-)
create mode 100644 app/src/main/java/com/healthjournal/notification/NotificationUtils.kt
create mode 100644 app/src/main/java/com/healthjournal/notification/ReminderReceiver.kt
create mode 100644 app/src/main/res/drawable/baseline_add_circle_24.xml
create mode 100644 app/src/main/res/drawable/bg_dashboard.xml
create mode 100644 app/src/main/res/drawable/bg_input_box.xml
delete mode 100644 app/src/main/res/drawable/ic_add.png
delete mode 100644 app/src/main/res/drawable/ic_home.png
create mode 100644 app/src/main/res/drawable/ic_home.xml
create mode 100644 app/src/main/res/drawable/ic_notifications.xml
delete mode 100644 app/src/main/res/drawable/ic_profile.png
create mode 100644 app/src/main/res/drawable/ic_profile.xml
diff --git a/.idea/deploymentTargetSelector.xml b/.idea/deploymentTargetSelector.xml
index b268ef3..3626cfe 100644
--- a/.idea/deploymentTargetSelector.xml
+++ b/.idea/deploymentTargetSelector.xml
@@ -4,6 +4,14 @@
+
+
+
+
+
+
+
+
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 7be2c74..0bae317 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -2,6 +2,8 @@
+
+
>()
// Task for Blood Sugar Control
- if (healthData.bloodSugar > 140) {
- tasks.add(mapOf("task" to "Cek kadar gula darah 2 kali sehari.", "completed" to false))
- tasks.add(mapOf("task" to "Kurangi konsumsi makanan tinggi gula.", "completed" to false))
- } else if (healthData.bloodSugar < 70) {
- tasks.add(mapOf("task" to "Sediakan camilan sehat seperti buah atau kacang.", "completed" to false))
+ when {
+ healthData.bloodSugar > 140 -> {
+ tasks.add(mapOf("task" to "Kurangi konsumsi makanan tinggi gula dan karbohidrat olahan.", "completed" to false))
+ tasks.add(mapOf("task" to "Perbanyak konsumsi makanan berserat seperti sayuran dan biji-bijian.", "completed" to false))
+ tasks.add(mapOf("task" to "Lakukan olahraga ringan setelah makan untuk membantu mengontrol gula darah.", "completed" to false))
+ }
+ healthData.bloodSugar < 70 -> {
+ tasks.add(mapOf("task" to "Sediakan camilan sehat seperti buah atau kacang.", "completed" to false))
+ tasks.add(mapOf("task" to "Jangan melewatkan makan, usahakan makan dalam porsi kecil tapi sering.", "completed" to false))
+ tasks.add(mapOf("task" to "Konsumsi sumber karbohidrat kompleks untuk menjaga kadar gula tetap stabil.", "completed" to false))
+ }
+ else -> {
+ tasks.add(mapOf("task" to "Pertahankan pola makan sehat dan seimbang untuk menjaga kadar gula darah stabil.", "completed" to false))
+ }
}
// Task for Blood Pressure Control
- if (healthData.systolicBP > 120 || healthData.diastolicBP > 80) {
- tasks.add(mapOf("task" to "Lakukan olahraga ringan seperti jalan kaki selama 30 menit.", "completed" to false))
- tasks.add(mapOf("task" to "Kurangi makanan asin dan berlemak.", "completed" to false))
- } else if (healthData.systolicBP < 90) {
- tasks.add(mapOf("task" to "Perbanyak minum air putih dan istirahat.", "completed" to false))
+ when {
+ healthData.systolicBP > 120 || healthData.diastolicBP > 80 -> {
+ tasks.add(mapOf("task" to "Lakukan olahraga ringan seperti jalan kaki selama 30 menit.", "completed" to false))
+ tasks.add(mapOf("task" to "Kurangi konsumsi garam dan makanan berlemak.", "completed" to false))
+ tasks.add(mapOf("task" to "Konsumsi lebih banyak makanan tinggi kalium seperti pisang dan bayam.", "completed" to false))
+ }
+ healthData.systolicBP < 90 -> {
+ tasks.add(mapOf("task" to "Perbanyak minum air putih dan istirahat cukup.", "completed" to false))
+ tasks.add(mapOf("task" to "Konsumsi makanan bergizi yang bisa membantu menaikkan tekanan darah.", "completed" to false))
+ }
+ else -> {
+ tasks.add(mapOf("task" to "Jaga pola hidup sehat agar tekanan darah tetap stabil.", "completed" to false))
+ }
}
// Task for BMI Control
- if (healthData.BMI > 25) {
- tasks.add(mapOf("task" to "Lakukan olahraga rutin minimal 3 kali seminggu.", "completed" to false))
- tasks.add(mapOf("task" to "Konsumsi lebih banyak sayuran dan serat.", "completed" to false))
- } else if (healthData.BMI < 18.5) {
- tasks.add(mapOf("task" to "Tambahkan makanan tinggi kalori seperti kacang dan susu.", "completed" to false))
+ when {
+ healthData.BMI > 25 -> {
+ tasks.add(mapOf("task" to "Lakukan olahraga rutin minimal 3 kali seminggu.", "completed" to false))
+ tasks.add(mapOf("task" to "Konsumsi lebih banyak sayuran dan serat.", "completed" to false))
+ tasks.add(mapOf("task" to "Kurangi makanan tinggi lemak dan gula.", "completed" to false))
+ }
+ healthData.BMI < 18.5 -> {
+ tasks.add(mapOf("task" to "Tambahkan makanan tinggi kalori seperti kacang dan susu.", "completed" to false))
+ tasks.add(mapOf("task" to "Pastikan asupan protein dan karbohidrat mencukupi.", "completed" to false))
+ }
+ else -> {
+ tasks.add(mapOf("task" to "Pertahankan berat badan ideal dengan pola makan dan olahraga seimbang.", "completed" to false))
+ }
}
// Age and Gender Specific Tasks
if (healthData.age > 50) {
tasks.add(mapOf("task" to "Lakukan pemeriksaan kesehatan rutin setiap bulan.", "completed" to false))
+ tasks.add(mapOf("task" to "Jaga kesehatan tulang dengan konsumsi kalsium dan vitamin D.", "completed" to false))
}
- if (healthData.gender == "Female" || healthData.gender == "Other") {
- tasks.add(mapOf("task" to "Perhatikan kebutuhan kalsium dan zat besi.", "completed" to false))
+
+ when (healthData.gender) {
+ "Female", "Other" -> {
+ tasks.add(mapOf("task" to "Perhatikan kebutuhan kalsium dan zat besi, terutama saat menstruasi atau menopause.", "completed" to false))
+ tasks.add(mapOf("task" to "Pastikan mendapatkan asupan vitamin D yang cukup.", "completed" to false))
+ }
+ "Male" -> {
+ tasks.add(mapOf("task" to "Perhatikan kesehatan prostat dengan pola makan sehat.", "completed" to false))
+ tasks.add(mapOf("task" to "Jaga kesehatan jantung dengan olahraga teratur.", "completed" to false))
+ }
}
return tasks
diff --git a/app/src/main/java/com/healthjournal/data/Data.kt b/app/src/main/java/com/healthjournal/data/Data.kt
index 5221a19..9ec5412 100644
--- a/app/src/main/java/com/healthjournal/data/Data.kt
+++ b/app/src/main/java/com/healthjournal/data/Data.kt
@@ -1,5 +1,6 @@
package com.healthjournal.data
+import com.google.android.gms.tasks.Task
import java.io.Serializable
@@ -18,6 +19,7 @@ data class ResultData(
val diastolicBP: Int,
val systolicBP: Int,
val BMI: Float,
- val date: String
+ val date: String,
+ val task: List>
) : Serializable
diff --git a/app/src/main/java/com/healthjournal/notification/NotificationUtils.kt b/app/src/main/java/com/healthjournal/notification/NotificationUtils.kt
new file mode 100644
index 0000000..e99d160
--- /dev/null
+++ b/app/src/main/java/com/healthjournal/notification/NotificationUtils.kt
@@ -0,0 +1,27 @@
+package com.healthjournal.utils
+
+import android.app.NotificationChannel
+import android.app.NotificationManager
+import android.content.Context
+import android.os.Build
+
+object NotificationUtils {
+ private const val CHANNEL_ID = "health_reminder_channel"
+ private const val CHANNEL_NAME = "Health Reminders"
+
+ fun createNotificationChannel(context: Context) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+ val channel = NotificationChannel(
+ CHANNEL_ID,
+ CHANNEL_NAME,
+ NotificationManager.IMPORTANCE_HIGH
+ ).apply {
+ description = "Reminders to check blood pressure and blood sugar"
+ }
+
+ val notificationManager: NotificationManager =
+ context.getSystemService(NotificationManager::class.java)
+ notificationManager.createNotificationChannel(channel)
+ }
+ }
+}
diff --git a/app/src/main/java/com/healthjournal/notification/ReminderReceiver.kt b/app/src/main/java/com/healthjournal/notification/ReminderReceiver.kt
new file mode 100644
index 0000000..d7a9b3e
--- /dev/null
+++ b/app/src/main/java/com/healthjournal/notification/ReminderReceiver.kt
@@ -0,0 +1,39 @@
+package com.healthjournal.receiver
+
+import android.app.NotificationManager
+import android.app.PendingIntent
+import android.content.BroadcastReceiver
+import android.content.Context
+import android.content.Intent
+import androidx.core.app.NotificationCompat
+import com.healthjournal.R
+import com.healthjournal.ui.dashboard.MainActivity
+
+class ReminderReceiver : BroadcastReceiver() {
+ override fun onReceive(context: Context?, intent: Intent?) {
+ if (context != null) {
+ sendNotification(context)
+ }
+ }
+
+ private fun sendNotification(context: Context) {
+ val notificationManager =
+ context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
+
+ val intent = Intent(context, MainActivity::class.java)
+ val pendingIntent = PendingIntent.getActivity(
+ context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
+ )
+
+ val notification = NotificationCompat.Builder(context, "health_reminder_channel")
+ .setSmallIcon(R.drawable.ic_notifications)
+ .setContentTitle("Health Check Reminder")
+ .setContentText("Don't forget to check your blood pressure and sugar today!")
+ .setAutoCancel(true)
+ .setContentIntent(pendingIntent)
+ .setPriority(NotificationCompat.PRIORITY_HIGH)
+ .build()
+
+ notificationManager.notify(1001, notification)
+ }
+}
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 92f8c50..c373134 100644
--- a/app/src/main/java/com/healthjournal/ui/dashboard/MainActivity.kt
+++ b/app/src/main/java/com/healthjournal/ui/dashboard/MainActivity.kt
@@ -1,5 +1,8 @@
package com.healthjournal.ui.dashboard
+import android.app.AlarmManager
+import android.app.PendingIntent
+import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.util.Log
@@ -7,6 +10,7 @@ import android.view.View
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
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.FirebaseDatabase
@@ -14,46 +18,98 @@ import com.google.firebase.database.database
import com.healthjournal.R
import com.healthjournal.data.ResultData
import com.healthjournal.databinding.ActivityMainBinding
+import com.healthjournal.receiver.ReminderReceiver
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.utils.NotificationUtils
import java.text.SimpleDateFormat
import java.util.Calendar
import java.util.Locale
-
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
private lateinit var user: FirebaseAuth
private lateinit var mainAdapter: MainAdapter
+ private lateinit var database: FirebaseDatabase
private val healthDataList: MutableList = mutableListOf()
- private val database = Firebase.database
private var dailyReport = false
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
+ // Create notification channel
+ NotificationUtils.createNotificationChannel(this)
+
+ // Schedule reminders
+ scheduleHealthReminders(this)
+
setContentView(binding.root)
user = FirebaseAuth.getInstance()
-
+ database = FirebaseDatabase.getInstance()
userCheck()
setupListener()
populateHistory()
navigationBottomBar()
}
- private fun navigationBottomBar(){
- binding.bottomNavigation.setOnItemSelectedListener {
- when(it.itemId){
- R.id.nav_add -> addJournal()
- R.id.nav_home -> home()
- R.id.nav_profile -> profile()
+ private fun scheduleHealthReminders(context: Context) {
+ val alarmManager = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager
+
+ val daysOfWeek = listOf(Calendar.MONDAY, Calendar.WEDNESDAY, Calendar.FRIDAY)
+ for (day in daysOfWeek.shuffled().take(3)) {
+ val calendar = Calendar.getInstance().apply {
+ set(Calendar.DAY_OF_WEEK, day)
+ set(Calendar.HOUR_OF_DAY, 9) // Set reminder at 9 AM
+ set(Calendar.MINUTE, 0)
+ set(Calendar.SECOND, 0)
}
- true
+
+ val intent = Intent(context, ReminderReceiver::class.java)
+ val pendingIntent = PendingIntent.getBroadcast(
+ context, day, intent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
+ )
+
+ alarmManager.setRepeating(
+ AlarmManager.RTC_WAKEUP,
+ calendar.timeInMillis,
+ AlarmManager.INTERVAL_DAY * 7, // Repeat every week
+ pendingIntent
+ )
}
}
+
+ private fun navigationBottomBar() {
+ val bottomNav = findViewById(R.id.nav_view)
+
+ bottomNav.setOnItemSelectedListener { item ->
+ when (item.itemId) {
+ R.id.nav_home -> {
+ finish()
+ startActivity(intent)
+ overridePendingTransition(0, 0)
+ true
+ }
+ R.id.nav_profile -> {
+ startActivity(Intent(this, ProfileActivity::class.java))
+ true
+ }
+ else -> false
+ }
+ }
+
+ binding.ivAdd.setOnClickListener {
+ if (dailyReport) {
+ Toast.makeText(this, "Daily Report Already Created", Toast.LENGTH_SHORT).show()
+ } else {
+ startActivity(Intent(this, JournalInputActivity::class.java))
+ }
+ }
+ }
+
+
private fun getWeekCount() {
val today = Calendar.getInstance()
val userID = user.currentUser!!.uid
@@ -116,6 +172,7 @@ class MainActivity : AppCompatActivity() {
}
private fun dailycheck() {
+ getWeekCount()
val today = SimpleDateFormat("dd/MM/yyyy", Locale.getDefault()).format(android.icu.util.Calendar.getInstance().time).toString()
val userID = user.currentUser!!.uid
database.getReference("users").child(userID).child("journal").get().addOnCompleteListener { task ->
@@ -124,7 +181,8 @@ class MainActivity : AppCompatActivity() {
if (it.child("date").value.toString() == today) {
dailyReport = true
switchLayout()
- populateTodayReport()
+ val referencePath = it.key ?: return@forEach
+ populateTodayReport(referencePath)
}
}
} else {
@@ -158,9 +216,12 @@ class MainActivity : AppCompatActivity() {
val user = FirebaseAuth.getInstance().currentUser
if (user == null) {
Toast.makeText(this, "Please Login to an account", Toast.LENGTH_SHORT).show()
+
+ // Redirect to LoginActivity
val intent = Intent(this, LoginActivity::class.java)
startActivity(intent)
finish()
+
} else {
Toast.makeText(this, "Welcome back!", Toast.LENGTH_SHORT).show()
dailycheck()
@@ -183,14 +244,15 @@ class MainActivity : AppCompatActivity() {
if (task.isSuccessful) {
healthDataList.clear()
task.result.children.forEach { snapshot ->
- val journalID = snapshot.child("date").value.toString()
+ 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("task").value as? List> ?: emptyList()
- val resultData = ResultData(journalID, bloodSugar, diastolicBP, systolicBP, BMI, date)
+ val resultData = ResultData(journalID, bloodSugar, diastolicBP, systolicBP, BMI, date, task)
healthDataList.add(resultData)
}
mainAdapter.notifyDataSetChanged()
@@ -202,24 +264,19 @@ class MainActivity : AppCompatActivity() {
}
- private fun populateTodayReport(){
- val today = SimpleDateFormat("dd/MM/yyyy", Locale.getDefault()).format(android.icu.util.Calendar.getInstance().time).toString()
+ private fun populateTodayReport(referencePath: String){
val userID = user.currentUser!!.uid
- database.getReference("users").child(userID).child("journal").get().addOnCompleteListener { task ->
- if (task.isSuccessful) {
- task.result.children.forEach {
- if (it.child("date").value.toString() == today) {
- binding.tvBloodsugarLevel.text = it.child("bloodSugar").value.toString()+" mg/dL"
- binding.tvBloodsugarDesc.text = it.child("recommendation").child("bloodSugarAnalysis").value.toString()
- binding.tvBloodpressureLevel.text = it.child("bloodPressureDIA").value.toString()+"/"+it.child("bloodPressureSYS").value.toString()+" mm Hg"
- binding.tvBloodpressureDesc.text = it.child("recommendation").child("bloodPressureAnalysis").value.toString()
- binding.tvBmiLevel.text = it.child("BMI").value.toString() +" BMI"
- binding.tvBmiDesc.text = it.child("recommendation").child("BMIAnalysis").value.toString()
- }
- }
+ database.getReference("users").child(userID).child("journal").child(referencePath).get().addOnCompleteListener {
+ if (it.isSuccessful) {
+ 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.tvBloodpressureDesc.text = it.result.child("recommendation").child("bloodPressureAnalysis").value.toString()
+ binding.tvBmiLevel.text = it.result.child("BMI").value.toString() +" BMI"
+ binding.tvBmiDesc.text = it.result.child("recommendation").child("BMIAnalysis").value.toString()
} else {
- Log.d("error", task.exception!!.message.toString())
- Toast.makeText(this, task.exception!!.message, Toast.LENGTH_SHORT).show()
+ Log.d("error", it.exception!!.message.toString())
+ Toast.makeText(this, it.exception!!.message, Toast.LENGTH_SHORT).show()
}
}
}
diff --git a/app/src/main/java/com/healthjournal/ui/dashboard/MainAdapter.kt b/app/src/main/java/com/healthjournal/ui/dashboard/MainAdapter.kt
index da81314..0f6e982 100644
--- a/app/src/main/java/com/healthjournal/ui/dashboard/MainAdapter.kt
+++ b/app/src/main/java/com/healthjournal/ui/dashboard/MainAdapter.kt
@@ -19,6 +19,7 @@ class MainAdapter(private val healthDataList: MutableList) : Recycle
val tvDate: TextView = view.findViewById(R.id.tv_date)
val tvBloodSugar: TextView = view.findViewById(R.id.tv_BS_Level)
val tvBloodPressure: TextView = view.findViewById(R.id.tv_BP_Level)
+ val tvGoals: TextView = view.findViewById(R.id.tv_goals_count)
}
// Function to update the list and notify the adapter
@@ -48,8 +49,19 @@ class MainAdapter(private val healthDataList: MutableList) : Recycle
}
}
- private fun countGoals (){
-
+ private fun countGoals (list: List>): String {
+ var completedGoals = 0
+ var goalsCount = 0
+ for (item in list) {
+ if (item["completed"] == true) {
+ completedGoals++
+ }
+ goalsCount++
+ }
+ if (completedGoals == 0) {
+ return "No goals completed"
+ }
+ return "$completedGoals/$goalsCount goals completed"
}
override fun onBindViewHolder(holder: HealthViewHolder, position: Int) {
@@ -59,11 +71,11 @@ class MainAdapter(private val healthDataList: MutableList) : Recycle
holder.tvDate.text = healthData.date
holder.tvBloodSugar.text = "${healthData.bloodSugar} mg/dL"
holder.tvBloodPressure.text = "${healthData.diastolicBP}/${healthData.systolicBP} mm Hg"
-
+ holder.tvGoals.text = countGoals(healthData.task)
holder.itemView.setOnClickListener {
val context = holder.itemView.context
val intent = Intent(context, DetailJournalActivity::class.java).apply {
- putExtra("HEALTH_DATA", healthData)
+ putExtra("JOURNAL_KEY", healthData.journalID)
}
context.startActivity(intent)
}
diff --git a/app/src/main/java/com/healthjournal/ui/journal/detail/DetailJournalActivity.kt b/app/src/main/java/com/healthjournal/ui/journal/detail/DetailJournalActivity.kt
index 33938d5..67bb855 100644
--- a/app/src/main/java/com/healthjournal/ui/journal/detail/DetailJournalActivity.kt
+++ b/app/src/main/java/com/healthjournal/ui/journal/detail/DetailJournalActivity.kt
@@ -23,47 +23,70 @@ class DetailJournalActivity : AppCompatActivity() {
super.onCreate(savedInstanceState)
binding = ActivityDetailJournalBinding.inflate(layoutInflater)
setContentView(binding.root)
- val healthData = intent.getSerializableExtra("HEALTH_DATA") as? ResultData
-
+ user = FirebaseAuth.getInstance()
+ setupListener()
+ populateDetailJournal()
}
+ private fun countGoals(taskList: List>): String {
+ var completedGoals = 0
+ val totalGoals = taskList.size
+
+ for (task in taskList) {
+ val isCompleted = task["completed"] as? Boolean ?: false
+ if (isCompleted) {
+ completedGoals++
+ }
+ }
+
+ return when {
+ totalGoals == 0 -> "No goals available"
+ completedGoals == 0 -> "No goals completed"
+ else -> "$completedGoals/$totalGoals goals completed"
+ }
+ }
private fun populateDetailJournal() {
val userID = user.currentUser?.uid
- val journalDate = intent.getStringExtra("JOURNAL_DATE")
- if (userID != null && journalDate != null) {
- database.getReference("users").child(userID).child("journal").child(journalDate).get()
- .addOnCompleteListener(DetailJournalActivity()) {
- if (it.isSuccessful) {
- val data = it.result
- if (data != null) {
-/*
- binding.tvBloodsugarLevel2.text = data.bloodSugarLevel
- binding.tvBloodsugarDesc.text = data.bloodSugarDesc
- binding.tvBloodpressureLevel2.text = data.bloodPressureLevel
- binding.tvBloodpressureDesc.text = data.bloodPressureDesc
- binding.tvBMILevel2.text = data.bmiLevel
- binding.tvBMIDesc.text = data.bmiDesc
- binding.tvGoals2.text = countGoalsCompleted(data.goalsCompleted)
- binding.tvJournalNote.text = data.journalNote
-*/
+ val journalID = intent.getStringExtra("JOURNAL_KEY")
+
+ if (userID != null && journalID != null) {
+ database.getReference("users").child(userID).child("journal").child(journalID).get()
+ .addOnCompleteListener(this) { task ->
+ if (task.isSuccessful) {
+ val result = task.result
+ if (result.exists()) {
+ binding.tvBloodsugarLevel2.text = "${result.child("bloodSugar").value ?: "N/A"} mg/dL"
+ binding.tvBloodsugarDesc.text = result.child("recommendation").child("bloodSugarAnalysis").value?.toString() ?: "No data"
+ binding.tvBloodpressureLevel2.text = "${result.child("bloodPressureDIA").value ?: "N/A"}/${result.child("bloodPressureSYS").value ?: "N/A"} mm Hg"
+ binding.tvBloodpressureDesc.text = result.child("recommendation").child("bloodPressureAnalysis").value?.toString() ?: "No data"
+ binding.tvBMILevel2.text = "${result.child("BMI").value ?: "N/A"} BMI"
+ binding.tvBMIDesc.text = result.child("recommendation").child("BMIAnalysis").value?.toString() ?: "No data"
+ binding.tvJournalNote.text = result.child("note").value?.toString() ?: "No notes available"
+
+ val taskListSnapshot = result.child("recommendation").child("tasks")
+ Log.d("debug", taskListSnapshot.toString())
+ val taskList = mutableListOf>()
+ if (taskListSnapshot.exists()) {
+ for (taskSnapshot in taskListSnapshot.children) {
+ val taskMap = taskSnapshot.value as? Map
+ if (taskMap != null) {
+ taskList.add(taskMap)
+ }
+ }
+ }
+
+ binding.tvGoals2.text = countGoals(taskList)
+ } else {
+ Toast.makeText(this, "No journal entry found.", Toast.LENGTH_SHORT).show()
}
} else {
- Toast.makeText(this, it.exception!!.message, Toast.LENGTH_SHORT).show()
- Log.d("error", it.exception!!.message.toString())
+ Toast.makeText(this, task.exception?.message ?: "Error fetching data", Toast.LENGTH_SHORT).show()
+ Log.d("error", task.exception?.message.toString())
}
}
}
}
- private fun countGoalsCompleted(goalsCompleted: List): String {
- var count = 0
- for (completed in goalsCompleted) {
- if (completed) {
- count++
- }
- }
- return count.toString()
- }
private fun deleteHistory() {
val userID = user.currentUser?.uid
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 b9c924b..396c6f4 100644
--- a/app/src/main/java/com/healthjournal/ui/profile/ProfileActivity.kt
+++ b/app/src/main/java/com/healthjournal/ui/profile/ProfileActivity.kt
@@ -24,10 +24,14 @@ class ProfileActivity : AppCompatActivity() {
super.onCreate(savedInstanceState)
binding = ActivityProfileBinding.inflate(layoutInflater)
setContentView(binding.root)
+
+ user = FirebaseAuth.getInstance()
+
setupListener()
populateData()
}
+
private fun setupListener() {
binding.btnLogout.setOnClickListener {
logout()
@@ -47,13 +51,11 @@ class ProfileActivity : AppCompatActivity() {
private fun updateData(){
val userID = user.currentUser?.uid
val name = binding.edtName.text.toString()
- val email = binding.edtEmail.text.toString()
- val date = binding.edtDates.text.toString()
+ val date = binding.edtDate.text.toString()
val weight = binding.edtInputWeight.text.toString()
val height = binding.edtInputHeight.text.toString()
val userRef = database.getReference("users").child(userID!!)
userRef.child("name").setValue(name)
- userRef.child("email").setValue(email)
userRef.child("date").setValue(date)
userRef.child("weight").setValue(weight)
userRef.child("height").setValue(height)
@@ -61,13 +63,14 @@ class ProfileActivity : AppCompatActivity() {
populateData()
}
- private fun populateData(){
- val userID = user.currentUser?.uid
- val userRef = database.getReference("users").child(userID!!)
- userRef.get().addOnCompleteListener(ProfileActivity()){
- if (it.isSuccessful){
+ private fun populateData() {
+ val userID = user.currentUser?.uid ?: return
+ val userRef = database.getReference("users").child(userID)
+
+ userRef.get().addOnCompleteListener(this) {
+ if (it.isSuccessful) {
binding.edtName.setText(it.result.child("name").value.toString())
- binding.edtDates.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.edtInputWeight.setText(it.result.child("weight").value.toString())
} else {
@@ -78,4 +81,5 @@ class ProfileActivity : AppCompatActivity() {
}
+
}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/baseline_add_circle_24.xml b/app/src/main/res/drawable/baseline_add_circle_24.xml
new file mode 100644
index 0000000..139c787
--- /dev/null
+++ b/app/src/main/res/drawable/baseline_add_circle_24.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/app/src/main/res/drawable/bg_dashboard.xml b/app/src/main/res/drawable/bg_dashboard.xml
new file mode 100644
index 0000000..f4b7464
--- /dev/null
+++ b/app/src/main/res/drawable/bg_dashboard.xml
@@ -0,0 +1,11 @@
+
+
+ -
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_input_box.xml b/app/src/main/res/drawable/bg_input_box.xml
new file mode 100644
index 0000000..4efcf5f
--- /dev/null
+++ b/app/src/main/res/drawable/bg_input_box.xml
@@ -0,0 +1,12 @@
+
+
+ -
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_add.png b/app/src/main/res/drawable/ic_add.png
deleted file mode 100644
index dbc2569120f0adc3609fcaa9d86e7107708d4d20..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 9015
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
+
+
diff --git a/app/src/main/res/drawable/ic_notifications.xml b/app/src/main/res/drawable/ic_notifications.xml
new file mode 100644
index 0000000..fd1545f
--- /dev/null
+++ b/app/src/main/res/drawable/ic_notifications.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_profile.png b/app/src/main/res/drawable/ic_profile.png
deleted file mode 100644
index d5b5249219f7eea230104417529717c347fb3568..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 4083
zcmV005u}1^@s6i_d2*00009a7bBm001mY
z001mY0i`{bsQ>@~0drDELIAGL9O(c600d`2O+f$vv5yP0^jIUd
zdI{hhETfk=0g|`~ke359&7+4j5QADdH5T)*M_A57(m+^-
z8SE?mB$Y2l(*wOI+Talw0ixidq5LSJq5S~HD0n6|yO1#`B&GCm?n0CNX%gfj#lI+*ieRKvcH7Dca6XqyP=g-kq8kI@tX!KA$naS5ZB|&D
zRLwFfAwYDmu}E$VfF1<-EM2Rl7_bX{@z@k7fYbtn`A;WMD!t+SvI
z@3IlmtRV$~_;H21+emmCwD_Ed0mjj@_%{ZD5W)hQNk$iai`VmpK;u3FSwr6~AjWz$
zLZ-F&JcL_A8llrSvU%T=JKrpz&Tz$mTcEQmh3*NzmV@~sK<#n`!$+6wxeGRzNNJZV
z7MP%Pkt;uBv!0(5PX%~0clR)FrCrgrJpth&3`5xSxX?2JnkAMsV+u5)bH>Y3jVCc6
zejr|r9|w&za8EV9YfJY8xQy!pyqV3P(V4ECcp*Yp1^8oj^*jS}X}m^Ka6!Yac=r)-
z3D;sk)9q^UNe`Yw^kU!=t_V=ad}@Iqlv|03<1Sc>PhH%I2^|$6_H_*d&Voi+Xo!yO
zjCEZAhj2`Q<#l}1pctQD`v$JgUFY}LU}pY0+{)!)IiEA%+ZK(%&v*2~eLXv1Uw=P5
zviE-TraIiijr47erN99k5n!peORiuw9TedE#YMRIj4B!n;K%XMH8a+86LigQ9(_SY
zYj|>ZJleJf+7_U>Ek=Y)%e=DX>f9V0`NtF&;R1L8itzmNW3aEUA5@{!c(82&-dM@c
z${hEh_?|iUiYqR+5!+%h(-NvALW~D@$GeB24ch92m{oBtzP4D-<;>rGb$$-ifep>y
z&W%GGv}^&(+hojwq+rbV#N^Aqh_4c~gdZJyQK^`)2*u%6H`8p{0-E(cNkQ@XW%;VH
zETIU;;uK*Bx4dYfB>~Q7b7L~QUaawXm2lVrkLB3w7eOJCtuE=eEkM)tmbONd66|a^
zRbY0K_rAVr9-AugtoRf*C+z;bZ2{5|YR1mb+7h5?{UoKdus}T5Tg|!8K2a(mDQ_s+l%@hy!TQO7
zYF3bw#7zjA{ZLZ@YU}46%2`1hNozv^%5MEWzxF?ni6C0Rh60q?`XMr&Ot)9%cug}a
zSXY3uTR(KaGZOY&QGj^t3XyD-5!V%c`?nq4m%HH!uWIle#K>+zFdP0(tvC=l
zSnI`20xSoNNst&^a4I|hR?H1^l8cP(seW;j07;lhe}&r*0{4CGB69D#UGmxdrd_r+
zyI@Ldno5~aVY&Nv3(C1*AarwRw?TkEEZ!Yb;R5qpIr#&48EcqL;o7S1jBF5KI8sc4
z0;rThDoC>ONtFwh-~A#gbP`mI0TJGsd%W`bx&T$kel=2%tSm~e3(yD|dT@-!6QYs)
zsP%YVfMFU|!u@K*hcU8l?A8Uy+a=0aK-@S|cJRV=RiX5!u81kX*~LZl$;t?Ddn^jF
zvt5BNQC)aB#)<0Y<}7rQ$yoETF2pt6JO>x|76v%LOMvA#lHD*-_z3)Chx6)99H3
zBtZ9rLf}4pvZKP6s1a7qQL=!9B|sqt6*zf=O6?!G8A?k=&vL;^#enYv#lQew<{)17>iHvq>hs!xH$j%d%wXRVY{&%|%tRmA`+zxD&gs!!M<0F6
ztn;A=H5)OQaf{rzedjC?dK@$+rP;!r2@%DHi%L;=L9X#N!(cE;Ze;JA;K}eA&};yO
zh_mKUh<0|}N73PxY)?Np2+uwIOKtJ&agtnLUKtJ1&|4rWrIB3M&24${F}gfAT5h=W
z{`X4@@cqI9Ea&s)Ybdhqu^0^Y-RsJQLMK_4kFY&(F9?-Iju%7s8VXdT*F~i;+j}kNey^+n&^1B2G2)e$%ymP7L
z=|{4PuodxDf=EqbwGY3opGZ9vvCkyec>f0)Z#u^oQ@8Q^eZ^V8+E$H4ds1OiXQ6O%7@B)-!BvtXW38D_`f
zF?K3GGRdt&m8@RI^~A2?mQ=ZKUEDwAhnF16g5y6_<@i$%rw-C)Gw;SKKf~a4-T%o&npqDJI_u%|aMBEl%B^W0iee~D9
z3DK(WxncEcftMrTXBGu30VzK&;b%(@Ey0t2e;K?4t)W%I@Jfi5@UWcZ^*AxK{Gya<
zc>FiDE8cyi^tjCYa&C-JavnU!iOjDPP>7H0-Ro-K7QbK^+xj6q3*7YRqhl`$5q@9?
zWY@MWZ<~*;7yXI@(d|0D0;OF_mv8b8!~GAyz7Ds@#V;0iY~K5NMwl!dKOb5`zhMP7
z(AOKw;NuPJuy`DJ1w7m_|KgWlZ~R
zx;1_wKs=b@9gq?0Nx1SIo*I8l2uXrRoWA@ahzf=Tcth8z5`W`~55~Se7OF2*KB>MY
zBn2LU)=$-uq$0D-tu)4>eo=&Cs`B{;0b*egJi1CwWb3Co*kST1M9AD1kEbhN*mPAK
zcf%LJWwiD47qo((edB#%WU!6y7ukGSW)Y^qWmJo+WaQP)ym!N-$j(;3wn>2H^f(1B
zfu{f6nHkXd%hmZguibFUD!o)v=fZU361W5wWi|eTZrICn!Ju|%S5ttw!s--p>3U%q
zmPQ2y4@03$UpzKd>y4TM9O&&`G8mf#7r+aMG-B}Gf;WvX-uq3}d$0c9FfJt{UVUgy
zb7tnfaluBxn5g$&T>-k4jEKHcSK}+B
zmOCRU&}iDAne{`O?hojO71RWSX4VgBDnM-oHSJ)>`XRPl!uw(rYTLLtd
z%nVoRf*SR(YyA-0dqn4otK%f#yQykyk+Ez25ZeO8?#LQ|PDnHj;XU68yVehBX_x%|
zcodh@q(GyoP2HYvJz5^qK%saNG@2UlWOby~f77x6cgEvsT^rO?gPLf?^;)zwsD{@D
z$N60vG@25bvL;%l?MX@8+#b?du?C0DwBvd$+7=+1Tb&ha7=gB2uSLfbYV@3u;DU2L
z`nN_;KnHX@tPl&-pyRF4K
za5M(21`k}vgz|!gW;ex$xGF#dO}7@IeBe3jw98=!S6y%=Ix&$4H)FnPJQE-?m(8Ex
zCie_zgoOb+((0<_PViKK$jxka$bc{oMofT47;ssY0qjuuI&klPFZclVj!DF9+a*9F
z03^){#vvzqyRG7S5>gBNpt(YBSYK=GKbYy}3SA?9h!63_0#<@?VF=)qUP;()Ffx=(3ALHDo-;zNY6fR$)#=o%?nC_1{7
z$_a!Mpv8PPH%7oLTqi)&HloCO^$@}Z*8+>7xa=F7;h<>?%y91%y9Y!SA0n&;tOVUM
zgkW5+tg%fB_jD8`&TE7e0<_RVY)Y!!$4!AGNF_iEEyPVoCp-%&1!z$r#K$3E$x69*
zJBb5@WN@|hkXnG1l(S~Eh)GbJ6b_Tj6=G8Zy+r!Gd6W^L1zJTGCMPI?gP@L8%$S43
z!`#}%lAl$L(cB(FB17?U6u7}tG__cF$Ic2Qb@m7rxbLdFmUI?7|l{rsgN
z5Q_|sv?q+E^J~$!RdBC%2#f%$nO$T((QqC`n50~gjG6A*D^X?$fwW<;uMB3S@2=gG
z3X0&W39JC?fo{8CkVJ@*guy7khdo@JxKzx%@$9pQx3=mn9m|yOQA|sOkj$FFZc$?3
leI`O#W~Hzt6I8L);{TFm2k$qXai{
+
+
diff --git a/app/src/main/res/layout/activity_detail_journal.xml b/app/src/main/res/layout/activity_detail_journal.xml
index 6fa8ebf..617a743 100644
--- a/app/src/main/res/layout/activity_detail_journal.xml
+++ b/app/src/main/res/layout/activity_detail_journal.xml
@@ -49,10 +49,11 @@
android:id="@+id/tv_bloodsugar_level2"
android:layout_width="80dp"
android:layout_height="wrap_content"
- android:textColor="@color/Accent_Light_Red"
- android:textStyle="bold"
android:layout_marginTop="10dp"
-
+ android:textColor="@color/Accent_Light_Red"
+ android:textSize="16sp"
+ android:textStyle="bold"
+ app:layout_constraintBottom_toBottomOf="@+id/tv_bloodsugar_level1"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.02"
app:layout_constraintStart_toEndOf="@id/tv_bloodsugar_level1"
@@ -64,7 +65,7 @@
android:id="@+id/tv_bloodsugar_desc"
android:layout_width="0dp"
android:layout_height="wrap_content"
- android:textSize="8sp"
+ android:textSize="10sp"
app:layout_constraintEnd_toEndOf="@+id/tv_bloodsugar_level2"
app:layout_constraintStart_toStartOf="@+id/tv_bloodsugar_level1"
app:layout_constraintTop_toBottomOf="@id/tv_bloodsugar_level1"
@@ -88,9 +89,11 @@
android:id="@+id/tv_bloodpressure_level2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:textColor="@color/Accent_Light_Red"
- android:textStyle="bold"
android:layout_marginTop="10dp"
+ android:textColor="@color/Accent_Light_Red"
+ android:textSize="16sp"
+ android:textStyle="bold"
+ app:layout_constraintBottom_toBottomOf="@+id/tv_bloodpressure_level1"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.02"
app:layout_constraintStart_toEndOf="@id/tv_bloodpressure_level1"
@@ -102,7 +105,7 @@
android:id="@+id/tv_bloodpressure_desc"
android:layout_width="0dp"
android:layout_height="wrap_content"
- android:textSize="8sp"
+ android:textSize="10sp"
app:layout_constraintEnd_toEndOf="@+id/tv_bloodpressure_level2"
app:layout_constraintStart_toStartOf="@+id/tv_bloodpressure_level1"
app:layout_constraintTop_toBottomOf="@id/tv_bloodpressure_level1"
@@ -126,9 +129,12 @@
android:id="@+id/tv_BMI_level2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:textColor="@color/Accent_Light_Red"
- android:textStyle="bold"
android:layout_marginTop="10dp"
+ android:textColor="@color/Accent_Light_Red"
+ android:textSize="16sp"
+ android:textStyle="bold"
+ android:maxLength="9"
+ app:layout_constraintBottom_toBottomOf="@+id/tv_BMI_level1"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.02"
app:layout_constraintStart_toEndOf="@id/tv_BMI_level1"
@@ -140,7 +146,7 @@
android:id="@+id/tv_BMI_desc"
android:layout_width="0dp"
android:layout_height="wrap_content"
- android:textSize="8sp"
+ android:textSize="10sp"
app:layout_constraintEnd_toEndOf="@+id/tv_BMI_level2"
app:layout_constraintStart_toStartOf="@+id/tv_BMI_level1"
app:layout_constraintTop_toBottomOf="@id/tv_BMI_level1"
@@ -150,14 +156,14 @@
android:id="@+id/tv_goals1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:text="Recommend Goals Completed :"
+ android:layout_marginTop="8dp"
+ android:text="Goals Completed :"
android:textColor="@color/Primary_Dark"
android:textSize="16sp"
android:textStyle="bold"
- android:layout_marginTop="10dp"
app:layout_constraintEnd_toEndOf="parent"
- app:layout_constraintHorizontal_bias="0.554"
- app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintHorizontal_bias="0.0"
+ app:layout_constraintStart_toStartOf="@+id/tv_BMI_level1"
app:layout_constraintTop_toBottomOf="@id/tv_BMI_desc" />
@@ -178,7 +186,7 @@
android:id="@+id/tv_title_note"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_marginTop="4dp"
+ android:layout_marginTop="5dp"
android:text="JOURNAL NOTES"
android:textAlignment="center"
android:textColor="@color/Primary_Dark"
@@ -189,26 +197,19 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/constraintLayout" />
-
+ tools:text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras vehicula quam et diam consequat, et vestibulum odio consequat. Curabitur sit amet ex auctor ex pharetra placerat a lacinia sapien. In semper nisl eu elit elementum ultrices. Ut hendrerit urna lacinia efficitur euismod. In hac habitasse platea dictumst. Phasellus id tellus sed justo scelerisque vestibulum sit amet commodo tellus. Proin commodo magna purus, non ullamcorper mi blandit sed. Curabitur scelerisque eros nisi, vitae bibendum quam malesuada et. Suspendisse potenti. Vestibulum eu dui a odio posuere laoreet sed ut lectus. Vivamus ultrices sem sit amet enim dictum rhoncus. Nullam pharetra, purus sed bibendum volutpat, diam nibh blandit nunc, ut gravida velit sem eget eros. Maecenas in arcu accumsan, maximus enim id, ullamcorper metus. Morbi blandit nisi non justo hendrerit, in semper velit feugiat. Vestibulum vestibulum nisl sit amet facilisis ullamcorper." />
-
-
+ app:layout_constraintTop_toBottomOf="@+id/tv_journal_note" />
diff --git a/app/src/main/res/layout/activity_journal_input.xml b/app/src/main/res/layout/activity_journal_input.xml
index d47095d..8028e78 100644
--- a/app/src/main/res/layout/activity_journal_input.xml
+++ b/app/src/main/res/layout/activity_journal_input.xml
@@ -5,7 +5,7 @@
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:background="@color/Secondary_Light"
+ android:background="@drawable/bg_login"
tools:context=".ui.journal.input.JournalInputActivity">
-
-
+ app:layout_constraintHorizontal_bias="0.0"
+ app:layout_constraintStart_toStartOf="@+id/cl_input_note"
+ app:layout_constraintTop_toBottomOf="@+id/tv_title_journal"
+ app:layout_constraintVertical_bias="0.03">
-
+ app:layout_constraintEnd_toEndOf="@+id/tv_input_blood_pressure_SYS"
+ app:layout_constraintStart_toStartOf="@+id/tv_input_blood_pressure_SYS"
+ app:layout_constraintTop_toBottomOf="@id/tv_input_blood_pressure_SYS" />
-
-
-
+ app:layout_constraintTop_toTopOf="@+id/cl_input_blood_pressure_SYS">
-
+ app:layout_constraintEnd_toEndOf="@+id/tv_input_blood_pressure_DIA"
+ app:layout_constraintStart_toStartOf="@+id/tv_input_blood_pressure_DIA"
+ app:layout_constraintTop_toBottomOf="@+id/tv_input_blood_pressure_DIA" />
-
-
-
-
-
-
-
-
+ app:layout_constraintEnd_toEndOf="@+id/tv_input_blood_sugar"
+ app:layout_constraintStart_toStartOf="@+id/tv_input_blood_sugar"
+ app:layout_constraintTop_toBottomOf="@+id/tv_input_blood_sugar" />
+ app:layout_constraintVertical_bias="0.048">
-
+
+
+ app:layout_constraintStart_toStartOf="parent" />
-
-
-
+ android:id="@+id/edt_age"
+ android:layout_width="match_parent"
+ android:layout_height="20dp"
+ android:background="@color/white"
+ android:visibility="gone"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent" />
+
+ android:id="@+id/edt_height"
+ android:layout_width="match_parent"
+ android:layout_height="20dp"
+ android:background="@color/white"
+ android:visibility="gone"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent" />
-
-
-
-
-
+ app:layout_constraintTop_toBottomOf="@+id/tv_input_note" />
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index fa4f3ca..744b5b2 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -12,7 +12,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="20dp"
- android:background="@color/Accent_Dark_Gray"
+ android:background="@drawable/bg_dashboard"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
@@ -25,7 +25,7 @@
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
-
+z
+
+
+
-
+
+
+
+
-
+
+
+
+
-
+
+
+
+
-
+
+
@@ -253,8 +350,8 @@
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintTop_toTopOf="parent"
- app:layout_constraintVertical_bias="0.700" />
+ app:layout_constraintTop_toBottomOf="@id/cl_Daily_Report_1"
+ app:layout_constraintVertical_bias="0.0" />
+
+
+ app:menu="@menu/bottom_nav_menu" />
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_profile.xml b/app/src/main/res/layout/activity_profile.xml
index fd5165f..e10ae0a 100644
--- a/app/src/main/res/layout/activity_profile.xml
+++ b/app/src/main/res/layout/activity_profile.xml
@@ -85,7 +85,7 @@
android:layout_marginStart="32dp"
android:layout_marginTop="10dp"
android:fontFamily="@font/poppins_regular"
- android:text="Name"
+ android:text="Nama"
android:textColor="@color/Primary_Dark"
android:textSize="12sp"
android:textStyle="bold"
@@ -102,49 +102,50 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tv_name">
-
+
+ app:layout_constraintTop_toBottomOf="@+id/tl_name" />
+ app:layout_constraintTop_toBottomOf="@+id/tv_date">
+ android:layout_height="wrap_content"
+ android:inputType="none"
+ android:focusable="false"
+ android:clickable="true"
+ android:background="@drawable/bg_input_box"
+ android:textColor="@color/black" />
+ app:layout_constraintTop_toTopOf="@+id/cl_input_weight">
-
-
-
-
+ app:layout_constraintTop_toBottomOf="@+id/tv_input_height" />
+ app:layout_constraintTop_toBottomOf="@+id/tl_date_of_birth"
+ app:layout_constraintVertical_bias="0.167">
-
-
-
-
-
+
+ app:layout_constraintTop_toBottomOf="@+id/cl_input_weight" />
-
-
+ android:layout_width="60dp"
+ android:layout_height="30dp"
+ android:background="@drawable/bg_input_box"
+ android:textColor="@color/black"
+ android:textAlignment="center"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@+id/tv_input_weight"
+ android:inputType="number"/>
-
@@ -152,7 +148,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/poppins_regular"
- android:text="Tinggi\nBadan"
+ android:text="Tinggi Badan\n(CM)"
android:textAlignment="center"
android:textColor="@color/Primary_Dark"
android:textSize="12sp"
@@ -161,24 +157,17 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
-
-
-
-
+ android:layout_width="60dp"
+ android:layout_height="30dp"
+ android:background="@drawable/bg_input_box"
+ android:textColor="@color/black"
+ android:textAlignment="center"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@+id/tv_input_height"/>
+ app:layout_constraintTop_toBottomOf="@id/cl_input_height" />
+
+ android:padding="5dp"
+ android:layout_width="360dp"
+ android:layout_height="130dp">
+ app:layout_constraintVertical_bias="0.0" />
+ app:layout_constraintVertical_bias="0.647" />
@@ -82,7 +84,7 @@
android:text="Blood Pressure Level :"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
- app:layout_constraintHorizontal_bias="0.342"
+ app:layout_constraintHorizontal_bias="0.604"
app:layout_constraintStart_toEndOf="@+id/iv_user"
app:layout_constraintTop_toBottomOf="@+id/tv_sub_BSL"
app:layout_constraintVertical_bias="0.042" />
@@ -108,12 +110,13 @@
android:text="Recommended goals completed"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
- app:layout_constraintHorizontal_bias="0.387"
+ app:layout_constraintHorizontal_bias="0.666"
app:layout_constraintStart_toEndOf="@+id/iv_user"
app:layout_constraintTop_toBottomOf="@+id/tv_sub_BPL"
- app:layout_constraintVertical_bias="0.0" />
+ app:layout_constraintVertical_bias="0.038" />
- Kolom ini tidak boleh kurang dari 8 karakter!
Kolom ini tidak boleh kosong!
This field is required!
+
+ // Activity Login
+
+ // Activity Register
+
+ // Activity Detail Journal
+
+ // Activity Journal Input
+
+ // Activity Recommendation
+
+ // Activity S
\ No newline at end of file
diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml
index 18d9972..32469a9 100644
--- a/app/src/main/res/values/themes.xml
+++ b/app/src/main/res/values/themes.xml
@@ -1,9 +1,39 @@
-
+
+
+
+
+
\ No newline at end of file