From c7a0917e291a7c7e4fa6b2ab481df908cfd4b370 Mon Sep 17 00:00:00 2001 From: Avior Date: Sun, 8 Jan 2023 00:13:49 +0100 Subject: [PATCH] misc: Started cleaning up UI --- .../openhealth/ui/about/AboutFragment.kt | 10 +++++++++ .../ui/activity/ActivityFragment.kt | 3 +++ .../openhealth/ui/browse/BrowseFragment.kt | 21 +++++++++++++------ .../openhealth/ui/browse/BrowseViewModel.kt | 6 +----- .../dzeio/openhealth/ui/food/FoodDialog.kt | 3 +++ 5 files changed, 32 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/com/dzeio/openhealth/ui/about/AboutFragment.kt b/app/src/main/java/com/dzeio/openhealth/ui/about/AboutFragment.kt index 8726f0b..8e9d2b9 100644 --- a/app/src/main/java/com/dzeio/openhealth/ui/about/AboutFragment.kt +++ b/app/src/main/java/com/dzeio/openhealth/ui/about/AboutFragment.kt @@ -15,6 +15,9 @@ import com.dzeio.openhealth.core.BaseStaticFragment import com.dzeio.openhealth.databinding.FragmentAboutBinding import com.google.android.gms.oss.licenses.OssLicensesMenuActivity +/** + * Fragment for the About page + */ class AboutFragment : BaseStaticFragment() { override val bindingInflater: (LayoutInflater, ViewGroup?, Boolean) -> FragmentAboutBinding get() = FragmentAboutBinding::inflate @@ -23,22 +26,29 @@ class AboutFragment : BaseStaticFragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + // set the version number binding.version.text = resources.getString(R.string.version_number, BuildConfig.VERSION_NAME) + // handle contact US button binding.contactUs.setOnClickListener { openLink("mailto:contact.openhealth@dze.io") } + // handle Github button binding.github.setOnClickListener { openLink("https://github.com/dzeiocom/OpenHealth") } + // send the user to the Google OSS licenses page when clicked binding.licenses.setOnClickListener { startActivity(Intent(requireContext(), OssLicensesMenuActivity::class.java)) } } + /** + * simple function that try to open a link. + */ private fun openLink(url: String) { try { val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url)) diff --git a/app/src/main/java/com/dzeio/openhealth/ui/activity/ActivityFragment.kt b/app/src/main/java/com/dzeio/openhealth/ui/activity/ActivityFragment.kt index 5b20b54..c50a589 100644 --- a/app/src/main/java/com/dzeio/openhealth/ui/activity/ActivityFragment.kt +++ b/app/src/main/java/com/dzeio/openhealth/ui/activity/ActivityFragment.kt @@ -10,6 +10,9 @@ import com.dzeio.openhealth.core.BaseFragment import com.dzeio.openhealth.databinding.FragmentActivityBinding import dagger.hilt.android.AndroidEntryPoint +/** + * Fragment for the Activity page + */ @AndroidEntryPoint class ActivityFragment : BaseFragment(ActivityViewModel::class.java) { diff --git a/app/src/main/java/com/dzeio/openhealth/ui/browse/BrowseFragment.kt b/app/src/main/java/com/dzeio/openhealth/ui/browse/BrowseFragment.kt index 8a4782d..83e6a6d 100644 --- a/app/src/main/java/com/dzeio/openhealth/ui/browse/BrowseFragment.kt +++ b/app/src/main/java/com/dzeio/openhealth/ui/browse/BrowseFragment.kt @@ -1,7 +1,6 @@ package com.dzeio.openhealth.ui.browse import android.Manifest -import android.content.SharedPreferences import android.os.Build import android.os.Bundle import android.view.LayoutInflater @@ -10,7 +9,6 @@ import android.view.ViewGroup import android.widget.Toast import androidx.activity.result.contract.ActivityResultContracts import androidx.navigation.fragment.findNavController -import androidx.preference.PreferenceManager import com.dzeio.openhealth.R import com.dzeio.openhealth.core.BaseFragment import com.dzeio.openhealth.databinding.FragmentBrowseBinding @@ -25,10 +23,6 @@ class BrowseFragment : override val bindingInflater: (LayoutInflater, ViewGroup?, Boolean) -> FragmentBrowseBinding get() = FragmentBrowseBinding::inflate - private val settings: SharedPreferences by lazy { - PreferenceManager.getDefaultSharedPreferences(requireContext()) - } - private lateinit var button: MaterialCardView private val activityResult = registerForActivityResult( ActivityResultContracts.RequestMultiplePermissions() @@ -45,25 +39,32 @@ class BrowseFragment : override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + // handle clicking on the weight card binding.weight.setOnClickListener { findNavController().navigate(BrowseFragmentDirections.actionNavBrowseToNavListWeight()) } + // handle clicking on the water intake card binding.waterIntake.setOnClickListener { findNavController().navigate(BrowseFragmentDirections.actionNavBrowseToNavWaterHome()) } + // handle clicking on the food calories card binding.foodCalories.setOnClickListener { findNavController().navigate(BrowseFragmentDirections.actionNavBrowseToFoodHomeFragment()) } + // handle clicking on the steps card binding.steps.setOnClickListener { + // since Android Q We need additionnal permissions if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + // check for activity permission val activityPermission = PermissionsManager.hasPermission( requireContext(), Manifest.permission.ACTIVITY_RECOGNITION ) + // check for notification permission val notificationPermission = Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU && PermissionsManager.hasPermission( requireContext(), @@ -72,33 +73,41 @@ class BrowseFragment : val permissionsToAsk = arrayListOf() + // add missing permission to list if (!activityPermission) { permissionsToAsk.add(Manifest.permission.ACTIVITY_RECOGNITION) } + // add missing permission to list only if necessary if (!notificationPermission && Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { permissionsToAsk.add(Manifest.permission.POST_NOTIFICATIONS) } + // ask for permissions if (permissionsToAsk.isNotEmpty()) { button = binding.steps activityResult.launch(permissionsToAsk.toTypedArray()) return@setOnClickListener } } + + // navigate user to the Steps home fragment findNavController().navigate( BrowseFragmentDirections.actionNavBrowseToStepsHomeFragment() ) } + // display the number of steps the user made today viewModel.steps.observe(viewLifecycleOwner) { updateStepsText(it, viewModel.stepsGoal.value) } + // display the number of steps the user should do today viewModel.stepsGoal.observe(viewLifecycleOwner) { updateStepsText(viewModel.steps.value, it) } + // display the current user's weight viewModel.weight.observe(viewLifecycleOwner) { binding.weightText.setText( String.format( diff --git a/app/src/main/java/com/dzeio/openhealth/ui/browse/BrowseViewModel.kt b/app/src/main/java/com/dzeio/openhealth/ui/browse/BrowseViewModel.kt index 8b8eab9..6ab13ab 100644 --- a/app/src/main/java/com/dzeio/openhealth/ui/browse/BrowseViewModel.kt +++ b/app/src/main/java/com/dzeio/openhealth/ui/browse/BrowseViewModel.kt @@ -23,8 +23,7 @@ class BrowseViewModel @Inject internal constructor( private val _steps = MutableLiveData(0) val steps: LiveData = _steps - private val _stepsGoal: MutableLiveData = MutableLiveData() - val stepsGoal: LiveData = _stepsGoal + val stepsGoal = config.getInt(Settings.STEPS_GOAL).toLiveData() private val _weight = MutableLiveData(0f) val weight: LiveData = _weight @@ -43,8 +42,5 @@ class BrowseViewModel @Inject internal constructor( } } - this._stepsGoal.postValue( - config.getInt(Settings.STEPS_GOAL).value - ) } } diff --git a/app/src/main/java/com/dzeio/openhealth/ui/food/FoodDialog.kt b/app/src/main/java/com/dzeio/openhealth/ui/food/FoodDialog.kt index bbb54ef..2a4dfa7 100644 --- a/app/src/main/java/com/dzeio/openhealth/ui/food/FoodDialog.kt +++ b/app/src/main/java/com/dzeio/openhealth/ui/food/FoodDialog.kt @@ -11,6 +11,9 @@ import com.dzeio.openhealth.utils.DownloadImageTask import com.google.android.material.dialog.MaterialAlertDialogBuilder import dagger.hilt.android.AndroidEntryPoint +/** + * Dialog that display to the user a spcific product and it's consumption + */ @AndroidEntryPoint class FoodDialog : BaseDialog(FoodDialogViewModel::class.java) {