Version 3.1(After Revision):

Added Lihat Laporan Button in dashboard to move into the new Chart
Added Indonesia Full Translation Full
This commit is contained in:
Diassdp
2025-07-11 15:30:41 +07:00
parent 1aa29f0e23
commit 7768210d64
11 changed files with 241 additions and 220 deletions

View File

@ -15,7 +15,7 @@
android:theme="@style/Theme.HealthJournal" android:theme="@style/Theme.HealthJournal"
tools:targetApi="31" > tools:targetApi="31" >
<activity <activity
android:name=".ui.laporan" android:name=".ui.laporan.laporan"
android:exported="false" /> android:exported="false" />
<activity <activity
android:name=".laporan" android:name=".laporan"

View File

@ -11,19 +11,17 @@ import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.recyclerview.widget.LinearLayoutManager 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.auth.FirebaseAuth import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.database.DataSnapshot import com.google.firebase.database.DataSnapshot
import com.google.firebase.database.DatabaseError 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.ValueEventListener
import com.google.firebase.database.database
import com.healthjournal.R import com.healthjournal.R
import com.healthjournal.data.ResultData import com.healthjournal.data.ResultData
import com.healthjournal.databinding.ActivityMainBinding import com.healthjournal.databinding.ActivityMainBinding
import com.healthjournal.receiver.ReminderReceiver import com.healthjournal.receiver.ReminderReceiver
import com.healthjournal.ui.journal.input.JournalInputActivity import com.healthjournal.ui.journal.input.JournalInputActivity
import com.healthjournal.ui.laporan import com.healthjournal.ui.laporan.laporan
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
@ -148,9 +146,15 @@ class MainActivity : AppCompatActivity() {
binding.btnRecomendation.setOnClickListener { binding.btnRecomendation.setOnClickListener {
startActivity(Intent(this, RecommendationActivity::class.java)) startActivity(Intent(this, RecommendationActivity::class.java))
} }
binding.btnInputData.setOnClickListener { binding.btnInputData.setOnClickListener {
startActivity(Intent(this, JournalInputActivity::class.java)) if (dailyReport) {
Toast.makeText(this, "Laporan harian sudah dibuat", Toast.LENGTH_SHORT).show()
} else {
startActivity(Intent(this, JournalInputActivity::class.java))
}
} }
binding.btnReport.setOnClickListener { binding.btnReport.setOnClickListener {
val intent = Intent(this, laporan::class.java) val intent = Intent(this, laporan::class.java)
intent.putExtra("healthDataList", ArrayList(healthDataList)) intent.putExtra("healthDataList", ArrayList(healthDataList))
@ -184,6 +188,7 @@ class MainActivity : AppCompatActivity() {
binding.clDailyReport1.visibility = View.INVISIBLE binding.clDailyReport1.visibility = View.INVISIBLE
binding.clDailyReport2.visibility = View.VISIBLE binding.clDailyReport2.visibility = View.VISIBLE
binding.btnRecomendation.visibility = View.VISIBLE binding.btnRecomendation.visibility = View.VISIBLE
binding.btnInputData.visibility = View.GONE
binding.ivCuboidIndicator1Green.visibility = View.VISIBLE binding.ivCuboidIndicator1Green.visibility = View.VISIBLE
binding.ivCuboidIndicator2Green.visibility = View.VISIBLE binding.ivCuboidIndicator2Green.visibility = View.VISIBLE
binding.ivCuboidIndicator1Orange.visibility = View.INVISIBLE binding.ivCuboidIndicator1Orange.visibility = View.INVISIBLE
@ -192,6 +197,7 @@ class MainActivity : AppCompatActivity() {
binding.clDailyReport1.visibility = View.VISIBLE binding.clDailyReport1.visibility = View.VISIBLE
binding.clDailyReport2.visibility = View.INVISIBLE binding.clDailyReport2.visibility = View.INVISIBLE
binding.btnRecomendation.visibility = View.GONE binding.btnRecomendation.visibility = View.GONE
binding.btnInputData.visibility = View.VISIBLE
binding.ivCuboidIndicator1Green.visibility = View.INVISIBLE binding.ivCuboidIndicator1Green.visibility = View.INVISIBLE
binding.ivCuboidIndicator2Green.visibility = View.INVISIBLE binding.ivCuboidIndicator2Green.visibility = View.INVISIBLE
binding.ivCuboidIndicator1Orange.visibility = View.VISIBLE binding.ivCuboidIndicator1Orange.visibility = View.VISIBLE

View File

@ -3,15 +3,10 @@ package com.healthjournal.ui.journal.detail
import android.os.Bundle import android.os.Bundle
import android.util.Log import android.util.Log
import android.widget.Toast import android.widget.Toast
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import com.google.firebase.Firebase
import com.google.firebase.auth.FirebaseAuth import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.database.database import com.google.firebase.database.ktx.database
import com.healthjournal.R import com.google.firebase.ktx.Firebase
import com.healthjournal.data.ResultData
import com.healthjournal.databinding.ActivityDetailJournalBinding import com.healthjournal.databinding.ActivityDetailJournalBinding
class DetailJournalActivity : AppCompatActivity() { class DetailJournalActivity : AppCompatActivity() {
@ -45,6 +40,7 @@ class DetailJournalActivity : AppCompatActivity() {
else -> "$completedGoals/$totalGoals goals completed" else -> "$completedGoals/$totalGoals goals completed"
} }
} }
private fun populateDetailJournal() { private fun populateDetailJournal() {
val userID = user.currentUser?.uid val userID = user.currentUser?.uid
val journalID = intent.getStringExtra("JOURNAL_KEY") val journalID = intent.getStringExtra("JOURNAL_KEY")
@ -56,18 +52,16 @@ class DetailJournalActivity : AppCompatActivity() {
val result = task.result val result = task.result
if (result.exists()) { if (result.exists()) {
val bmiValue = result.child("BMI").value.toString().toFloatOrNull() ?: 0f val bmiValue = result.child("BMI").value.toString().toFloatOrNull() ?: 0f
Log.d("debug", bmiValue.toString())
binding.tvBloodsugarLevel2.text = "${result.child("bloodSugar").value ?: "N/A"} mg/dL" binding.tvBloodsugarLevel2.text = "${result.child("bloodSugar").value ?: "N/A"} mg/dL"
binding.tvBloodsugarDesc.text = result.child("recommendation").child("bloodSugarAnalysis").value?.toString() ?: "No data" 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.tvBloodpressureLevel2.text = "${result.child("bloodPressureSYS").value ?: "N/A"}/${result.child("bloodPressureDIA").value ?: "N/A"} mm Hg"
binding.tvBloodpressureDesc.text = result.child("recommendation").child("bloodPressureAnalysis").value?.toString() ?: "No data" binding.tvBloodpressureDesc.text = result.child("recommendation").child("bloodPressureAnalysis").value?.toString() ?: "No data"
binding.tvBMILevel2.text = String.format("%.2f BMI", bmiValue) binding.tvBMILevel2.text = String.format("%.2f BMI", bmiValue)
binding.tvBMIDesc.text = result.child("recommendation").child("BMIAnalysis").value?.toString() ?: "No data" binding.tvBMIDesc.text = result.child("recommendation").child("BMIAnalysis").value?.toString() ?: "No data"
binding.tvJournalNote.text = result.child("note").value?.toString() ?: "No notes available" binding.tvJournalNote.text = result.child("note").value?.toString() ?: "No notes available"
val taskListSnapshot = result.child("recommendation").child("tasks") val taskListSnapshot = result.child("recommendation").child("tasks")
Log.d("debug", taskListSnapshot.toString())
val taskList = mutableListOf<Map<String, Any>>() val taskList = mutableListOf<Map<String, Any>>()
if (taskListSnapshot.exists()) { if (taskListSnapshot.exists()) {
for (taskSnapshot in taskListSnapshot.children) { for (taskSnapshot in taskListSnapshot.children) {
@ -90,28 +84,28 @@ class DetailJournalActivity : AppCompatActivity() {
} }
} }
private fun deleteHistory() { private fun deleteHistory() {
val userID = user.currentUser?.uid val userID = user.currentUser?.uid
val journalDate = intent.getStringExtra("JOURNAL_DATE") val journalID = intent.getStringExtra("JOURNAL_KEY")
if (userID != null && journalDate != null) { if (userID != null && journalID != null) {
database.getReference("users").child(userID).child("journal").child(journalDate) database.getReference("users").child(userID).child("journal").child(journalID)
.removeValue() .removeValue()
.addOnCompleteListener(DetailJournalActivity()) { .addOnCompleteListener(this) {
if (it.isSuccessful) { if (it.isSuccessful) {
Toast.makeText(this, "History deleted successfully", Toast.LENGTH_SHORT) Toast.makeText(this, "History deleted successfully", Toast.LENGTH_SHORT).show()
.show()
finish() finish()
} else { } else {
Toast.makeText(this, it.exception!!.message, Toast.LENGTH_SHORT).show() Toast.makeText(this, it.exception?.message, Toast.LENGTH_SHORT).show()
} }
} }
} else {
Toast.makeText(this, "Gagal menghapus: ID tidak ditemukan", Toast.LENGTH_SHORT).show()
} }
} }
private fun setupListener() { private fun setupListener() {
binding.btnDeleteHistory.setOnClickListener() { binding.btnDeleteHistory.setOnClickListener {
deleteHistory() deleteHistory()
} }
} }
} }

View File

@ -1,10 +1,9 @@
package com.healthjournal.ui package com.healthjournal.ui.laporan
import MyMarkerView import MyMarkerView
import android.content.Intent import android.content.Intent
import android.os.Bundle import android.os.Bundle
import android.view.MotionEvent import android.view.MotionEvent
import android.widget.ArrayAdapter
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import com.github.mikephil.charting.charts.LineChart import com.github.mikephil.charting.charts.LineChart
@ -16,7 +15,6 @@ import com.github.mikephil.charting.interfaces.datasets.ILineDataSet
import com.github.mikephil.charting.listener.ChartTouchListener import com.github.mikephil.charting.listener.ChartTouchListener
import com.github.mikephil.charting.listener.OnChartGestureListener import com.github.mikephil.charting.listener.OnChartGestureListener
import com.github.mikephil.charting.listener.OnChartValueSelectedListener import com.github.mikephil.charting.listener.OnChartValueSelectedListener
import com.google.android.material.textfield.MaterialAutoCompleteTextView
import com.healthjournal.R import com.healthjournal.R
import com.healthjournal.data.ResultData import com.healthjournal.data.ResultData
import com.healthjournal.ui.journal.detail.DetailJournalActivity import com.healthjournal.ui.journal.detail.DetailJournalActivity

View File

@ -1,5 +1,6 @@
package com.healthjournal.ui.profile package com.healthjournal.ui.profile
import android.app.DatePickerDialog
import android.content.Intent import android.content.Intent
import android.os.Bundle import android.os.Bundle
import android.util.Log import android.util.Log
@ -14,6 +15,7 @@ import com.google.firebase.database.database
import com.healthjournal.R import com.healthjournal.R
import com.healthjournal.databinding.ActivityProfileBinding import com.healthjournal.databinding.ActivityProfileBinding
import com.healthjournal.ui.login.LoginActivity import com.healthjournal.ui.login.LoginActivity
import java.util.Calendar
class ProfileActivity : AppCompatActivity() { class ProfileActivity : AppCompatActivity() {
private lateinit var binding: ActivityProfileBinding private lateinit var binding: ActivityProfileBinding
@ -36,15 +38,36 @@ class ProfileActivity : AppCompatActivity() {
binding.btnLogout.setOnClickListener { binding.btnLogout.setOnClickListener {
logout() logout()
} }
binding.btnUpdateData.setOnClickListener { binding.btnUpdateData.setOnClickListener {
updateData() updateData()
} }
binding.edtDate.setOnClickListener {
datepicker()
}
} }
private fun logout(){ private fun datepicker(){
val calendar = Calendar.getInstance()
val year = calendar.get(Calendar.YEAR)
val month = calendar.get(Calendar.MONTH)
val day = calendar.get(Calendar.DAY_OF_MONTH)
val datePickerDialog = DatePickerDialog(
this,
{ _, selectedYear, selectedMonth, selectedDay ->
val selectedDate = "$selectedDay/${selectedMonth + 1}/$selectedYear"
binding.edtDate.setText(selectedDate)
},
year, month, day
)
datePickerDialog.show()
}
private fun logout() {
user.signOut() user.signOut()
startActivity(Intent(this, LoginActivity::class.java)) val intent = Intent(this, LoginActivity::class.java)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
startActivity(intent)
finish() finish()
} }
@ -81,7 +104,4 @@ class ProfileActivity : AppCompatActivity() {
} }
} }
} }
} }

View File

@ -7,6 +7,7 @@ import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import com.google.firebase.auth.FirebaseAuth import com.google.firebase.auth.FirebaseAuth
import com.healthjournal.databinding.ActivityRegisterBinding import com.healthjournal.databinding.ActivityRegisterBinding
import com.healthjournal.ui.login.LoginActivity
import com.healthjournal.ui.users.UsersInputActivity import com.healthjournal.ui.users.UsersInputActivity
class RegisterActivity : AppCompatActivity() { class RegisterActivity : AppCompatActivity() {
@ -26,7 +27,8 @@ class RegisterActivity : AppCompatActivity() {
registerUser() registerUser()
} }
binding.btnLogin.setOnClickListener{ binding.btnLogin.setOnClickListener{
startActivity(Intent(this@RegisterActivity, LoginActivity::class.java))
finish()
} }
} }

View File

@ -26,7 +26,6 @@ class UsersInputActivity : AppCompatActivity() {
user = FirebaseAuth.getInstance() user = FirebaseAuth.getInstance()
val gender = arrayOf("Male", "Female", "Other") val gender = arrayOf("Male", "Female", "Other")
// Adapter for conditions
val conditionAdapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, gender) val conditionAdapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, gender)
binding.dropdownGender.setAdapter(conditionAdapter) binding.dropdownGender.setAdapter(conditionAdapter)

View File

@ -11,7 +11,7 @@
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/constraintLayout" android:id="@+id/constraintLayout"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="250dp" android:layout_height="265dp"
android:background="@drawable/bg_dashboard" android:background="@drawable/bg_dashboard"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
@ -41,7 +41,7 @@
android:textSize="16sp" android:textSize="16sp"
android:textStyle="bold" android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.375" app:layout_constraintHorizontal_bias="0.248"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tv_title" /> app:layout_constraintTop_toBottomOf="@id/tv_title" />
@ -161,25 +161,23 @@
android:textColor="@color/Primary_Dark" android:textColor="@color/Primary_Dark"
android:textSize="16sp" android:textSize="16sp"
android:textStyle="bold" android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="@+id/tv_title"
app:layout_constraintHorizontal_bias="0.0" app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="@+id/tv_BMI_level1" app:layout_constraintStart_toStartOf="@+id/tv_title"
app:layout_constraintTop_toBottomOf="@id/tv_BMI_desc" /> app:layout_constraintTop_toBottomOf="@id/tv_BMI_desc" />
<TextView <TextView
android:id="@+id/tv_goals2" android:id="@+id/tv_goals2"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:textColor="@color/Accent_Light_Red"
android:textStyle="bold"
android:layout_marginLeft="2dp" android:layout_marginLeft="2dp"
android:textColor="@color/Accent_Light_Red"
android:textSize="16sp" android:textSize="16sp"
app:layout_constraintBottom_toBottomOf="@+id/tv_goals1" android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="@+id/tv_goals1"
app:layout_constraintHorizontal_bias="0.0" app:layout_constraintStart_toStartOf="@+id/tv_goals1"
app:layout_constraintStart_toEndOf="@id/tv_goals1" app:layout_constraintTop_toBottomOf="@+id/tv_goals1"
app:layout_constraintTop_toTopOf="@+id/tv_goals1" tools:text="Goals Completed" />
tools:text="3" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
<TextView <TextView

View File

@ -203,18 +203,24 @@
<EditText <EditText
android:id="@+id/edt_gender" android:id="@+id/edt_gender"
android:visibility="gone" android:visibility="gone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" /> app:layout_constraintEnd_toEndOf="parent" />
<EditText <EditText
android:id="@+id/edt_age" android:id="@+id/edt_age"
android:visibility="gone" android:visibility="gone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" /> app:layout_constraintEnd_toEndOf="parent" />
<EditText <EditText
android:id="@+id/edt_height" android:id="@+id/edt_height"
android:visibility="gone" android:visibility="gone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" /> app:layout_constraintEnd_toEndOf="parent" />

View File

@ -240,7 +240,7 @@ z
android:textSize="12sp" android:textSize="12sp"
android:textStyle="bold" android:textStyle="bold"
android:layout_marginTop="10dp" android:layout_marginTop="10dp"
android:text="Blood Sugar Level : " android:text="Tingkat Gula Darah : "
android:textColor="@color/Primary_Light" android:textColor="@color/Primary_Light"
app:layout_constraintStart_toStartOf="@+id/tv_sub_title_2" app:layout_constraintStart_toStartOf="@+id/tv_sub_title_2"
app:layout_constraintTop_toBottomOf="@+id/tv_sub_title_2" /> app:layout_constraintTop_toBottomOf="@+id/tv_sub_title_2" />
@ -276,7 +276,7 @@ z
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:textColor="@color/Primary_Light" android:textColor="@color/Primary_Light"
android:layout_marginTop="10dp" android:layout_marginTop="10dp"
android:text="Blood Pressure Level : " android:text="Tingkat Tekanan Darah : "
android:textSize="12sp" android:textSize="12sp"
android:textStyle="bold" android:textStyle="bold"
app:layout_constraintStart_toStartOf="@+id/tv_sub_title_2" app:layout_constraintStart_toStartOf="@+id/tv_sub_title_2"
@ -312,7 +312,7 @@ z
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="12dp" android:layout_marginTop="12dp"
android:textColor="@color/Primary_Light" android:textColor="@color/Primary_Light"
android:text="BMI(Body Mass Index) : " android:text="BMI(Inkes Massa Tubuh) : "
android:textSize="12sp" android:textSize="12sp"
android:textStyle="bold" android:textStyle="bold"
app:layout_constraintEnd_toEndOf="@+id/tv_sub_title_2" app:layout_constraintEnd_toEndOf="@+id/tv_sub_title_2"
@ -470,18 +470,18 @@ z
android:layout_height="40dp" android:layout_height="40dp"
android:layout_marginTop="10dp" android:layout_marginTop="10dp"
android:background="@drawable/bg_button" android:background="@drawable/bg_button"
android:visibility="gone"
android:text="Rekomendasi Sekarang" android:text="Rekomendasi Sekarang"
android:textAllCaps="true" android:textAllCaps="true"
android:textColor="@color/white" android:textColor="@color/white"
android:textSize="14sp" android:textSize="14sp"
android:visibility="gone"
app:backgroundTint="@color/Primary_Light" app:backgroundTint="@color/Primary_Light"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="@+id/fl_daily_counter"
app:layout_constraintHorizontal_bias="0.496" app:layout_constraintHorizontal_bias="0.48"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="@+id/fl_daily_counter"
app:layout_constraintTop_toBottomOf="@+id/fl_daily_counter" app:layout_constraintTop_toBottomOf="@+id/fl_daily_counter"
app:layout_constraintVertical_bias="1.0" /> app:layout_constraintVertical_bias="0.0" />
<com.google.android.material.button.MaterialButton <com.google.android.material.button.MaterialButton
android:id="@+id/btn_report" android:id="@+id/btn_report"
@ -502,14 +502,12 @@ z
<androidx.recyclerview.widget.RecyclerView <androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_health_history" android:id="@+id/rv_health_history"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="0dp"
app:layout_constraintBottom_toTopOf="@id/nav_view"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.516"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/cl_Health_Report" app:layout_constraintTop_toBottomOf="@+id/cl_Health_Report"
app:layout_constraintVertical_bias="0.0" app:layout_constraintBottom_toTopOf="@id/nav_view"
tools:itemCount="1" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
tools:itemCount="2"
tools:listitem="@layout/item_health_history" /> tools:listitem="@layout/item_health_history" />
<ImageView <ImageView

View File

@ -1,180 +1,180 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" <androidx.core.widget.NestedScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main" android:id="@+id/nestedScrollView"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:fillViewport="true"
tools:context=".ui.recommendation.RecommendationActivity"> tools:context=".ui.recommendation.RecommendationActivity">
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/constraintLayout" android:id="@+id/main"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="255dp" android:layout_height="wrap_content">
android:background="@drawable/bg_dashboard"
app:layout_constraintEnd_toEndOf="parent" <androidx.constraintlayout.widget.ConstraintLayout
app:layout_constraintHorizontal_bias="0.0" android:id="@+id/constraintLayout"
app:layout_constraintStart_toStartOf="parent" android:layout_width="0dp"
app:layout_constraintTop_toTopOf="parent"> android:layout_height="250dp"
android:background="@drawable/bg_dashboard"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent">
<TextView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="TODAY HEALTH"
android:textAlignment="center"
android:textColor="@color/Primary_Dark"
android:textSize="20sp"
android:textStyle="bold"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent" />
<TextView
android:id="@+id/tv_bloodsugar_level1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="Tingkat Gula Darah :"
android:textColor="@color/Primary_Dark"
android:textSize="16sp"
android:textStyle="bold"
app:layout_constraintTop_toBottomOf="@id/tv_title"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.18" />
<TextView
android:id="@+id/tv_bloodsugar_level2"
android:layout_width="80dp"
android:layout_height="wrap_content"
android:textColor="@color/Accent_Light_Red"
android:textStyle="bold"
tools:text="100 mg/dL"
app:layout_constraintTop_toTopOf="@id/tv_bloodsugar_level1"
app:layout_constraintBottom_toBottomOf="@id/tv_bloodsugar_level1"
app:layout_constraintStart_toEndOf="@id/tv_bloodsugar_level1"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.02" />
<TextView
android:id="@+id/tv_bloodsugar_desc"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:textSize="12sp"
tools:text="Your blood sugar level is within the normal range. Maintain a balanced diet and regular exercise."
app:layout_constraintTop_toBottomOf="@id/tv_bloodsugar_level1"
app:layout_constraintStart_toStartOf="@id/tv_bloodsugar_level1"
app:layout_constraintEnd_toEndOf="@id/tv_bloodsugar_level2" />
<TextView
android:id="@+id/tv_bloodpressure_level1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:text="Tingkat Tekanan Darah :"
android:textColor="@color/Primary_Dark"
android:textSize="16sp"
android:textStyle="bold"
app:layout_constraintTop_toBottomOf="@id/tv_bloodsugar_desc"
app:layout_constraintStart_toStartOf="@id/tv_bloodsugar_level1"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0" />
<TextView
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"
tools:text="119/70 mm Hg"
app:layout_constraintTop_toTopOf="@id/tv_bloodpressure_level1"
app:layout_constraintBottom_toBottomOf="@id/tv_bloodpressure_level1"
app:layout_constraintStart_toEndOf="@id/tv_bloodpressure_level1"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.018" />
<TextView
android:id="@+id/tv_bloodpressure_desc"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:textSize="12sp"
tools:text="Your blood sugar level is within the normal range. Maintain a balanced diet and regular exercise."
app:layout_constraintTop_toBottomOf="@id/tv_bloodpressure_level1"
app:layout_constraintStart_toStartOf="@id/tv_bloodpressure_level1"
app:layout_constraintEnd_toEndOf="@id/tv_bloodpressure_level2" />
<TextView
android:id="@+id/tv_BMI_level1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:text="BMI (Indeks Massa Tubuh) :"
android:textColor="@color/Primary_Dark"
android:textSize="16sp"
android:textStyle="bold"
app:layout_constraintTop_toBottomOf="@id/tv_bloodpressure_desc"
app:layout_constraintStart_toStartOf="@id/tv_bloodpressure_level1"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0" />
<TextView
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:maxLength="9"
tools:text="22.03 BMI"
app:layout_constraintTop_toTopOf="@id/tv_BMI_level1"
app:layout_constraintBottom_toBottomOf="@id/tv_BMI_level1"
app:layout_constraintStart_toEndOf="@id/tv_BMI_level1"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.02" />
<TextView
android:id="@+id/tv_BMI_desc"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:textSize="12sp"
tools:text="This is still considered an acceptable range, and is associated with good health."
app:layout_constraintTop_toBottomOf="@id/tv_BMI_level1"
app:layout_constraintStart_toStartOf="@id/tv_BMI_level1"
app:layout_constraintEnd_toEndOf="@id/tv_BMI_level2" />
</androidx.constraintlayout.widget.ConstraintLayout>
<TextView <TextView
android:id="@+id/tv_title" android:id="@+id/tv_title_recommendation"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="10dp" android:layout_marginTop="16dp"
android:text="TODAY HEALTH" android:text="TODAY REKOMENDASI"
android:textAlignment="center" android:textAlignment="center"
android:textColor="@color/Primary_Dark" android:textColor="@color/Primary_Dark"
android:textSize="20sp" android:textSize="20sp"
android:textStyle="bold" android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toBottomOf="@id/constraintLayout"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintEnd_toEndOf="parent" />
<TextView
android:id="@+id/tv_bloodsugar_level1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="Blood Sugar Level :"
android:textColor="@color/Primary_Dark"
android:textSize="16sp"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.375"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tv_title" />
<TextView
android:id="@+id/tv_bloodsugar_level2"
android:layout_width="80dp"
android:layout_height="wrap_content"
android:textColor="@color/Accent_Light_Red"
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"
app:layout_constraintTop_toTopOf="@+id/tv_bloodsugar_level1"
tools:text="100 mg/dL" />
<TextView
android:id="@+id/tv_bloodsugar_desc"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:textSize="12sp"
app:layout_constraintEnd_toEndOf="@+id/tv_bloodsugar_level2"
app:layout_constraintStart_toStartOf="@+id/tv_bloodsugar_level1"
app:layout_constraintTop_toBottomOf="@id/tv_bloodsugar_level1"
tools:text="Your blood sugar level is within the normal range. Maintain a balanced diet and regular exercise." />
<TextView
android:id="@+id/tv_bloodpressure_level1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:text="Blood Pressure Level :"
android:textColor="@color/Primary_Dark"
android:textSize="16sp"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.408"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tv_bloodsugar_desc" />
<TextView
android:id="@+id/tv_bloodpressure_level2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:textColor="@color/Accent_Light_Red"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="@+id/tv_bloodpressure_level1"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.018"
app:layout_constraintStart_toEndOf="@id/tv_bloodpressure_level1"
app:layout_constraintTop_toBottomOf="@id/tv_bloodsugar_desc"
tools:text="119/70 mm Hg" />
<TextView
android:id="@+id/tv_bloodpressure_desc"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:textSize="12sp"
app:layout_constraintEnd_toEndOf="@+id/tv_bloodpressure_level2"
app:layout_constraintStart_toStartOf="@+id/tv_bloodpressure_level1"
app:layout_constraintTop_toBottomOf="@id/tv_bloodpressure_level1"
tools:text="Your blood sugar level is within the normal range. Maintain a balanced diet and regular exercise." />
<TextView
android:id="@+id/tv_BMI_level1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:text="BMI(Body Mass Index) :"
android:textColor="@color/Primary_Dark"
android:textSize="16sp"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.426"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tv_bloodpressure_desc" />
<TextView
android:id="@+id/tv_BMI_level2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxLength="9"
android:textColor="@color/Accent_Light_Red"
android:textStyle="bold"
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"
app:layout_constraintTop_toTopOf="@+id/tv_BMI_level1"
tools:text="22.03 BMI" />
<TextView
android:id="@+id/tv_BMI_desc"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:textSize="12sp"
app:layout_constraintEnd_toEndOf="@+id/tv_BMI_level2"
app:layout_constraintStart_toStartOf="@+id/tv_BMI_level1"
app:layout_constraintTop_toBottomOf="@id/tv_BMI_level1"
tools:text="This is still considered an acceptable range, and is associated with good health." />
</androidx.constraintlayout.widget.ConstraintLayout>
<TextView
android:id="@+id/tv_title_recommendation"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:text="TODAY RECOMMENDATION"
android:textAlignment="center"
android:textColor="@color/Primary_Dark"
android:textSize="20sp"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.498"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/constraintLayout" />
<ScrollView
android:id="@+id/sv_tasks"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_title_recommendation">
<androidx.recyclerview.widget.RecyclerView <androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_tasks" android:id="@+id/rv_tasks"
android:layout_width="match_parent" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
tools:itemCount="4" tools:listitem="@layout/item_goals_recommendation"
tools:listitem="@layout/item_goals_recommendation" /> app:layout_constraintTop_toBottomOf="@id/tv_title_recommendation"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:nestedScrollingEnabled="false"
android:paddingBottom="16dp" />
</ScrollView> </androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.core.widget.NestedScrollView>