MrOzOn 5 lat temu
rodzic
commit
58cc65545d

+ 10 - 0
feature_measure/src/main/java/com/mrozon/feature_measure/data/MeasureRepository.kt

@@ -0,0 +1,10 @@
+package com.mrozon.feature_measure.data
+
+import com.mrozon.core_api.entity.Person
+import com.mrozon.utils.network.Result
+import kotlinx.coroutines.flow.Flow
+
+interface MeasureRepository {
+
+    fun getPerson(id: Long): Flow<Result<Person>>
+}

+ 32 - 0
feature_measure/src/main/java/com/mrozon/feature_measure/data/MeasureRepositoryImpl.kt

@@ -0,0 +1,32 @@
+package com.mrozon.feature_measure.data
+
+import com.mrozon.core_api.db.HealthDiaryDao
+import com.mrozon.core_api.entity.Person
+import com.mrozon.core_api.mapper.PersonToPersonDbMapper
+import com.mrozon.utils.network.Result
+import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.flow
+import javax.inject.Inject
+import javax.inject.Singleton
+
+@Singleton
+class MeasureRepositoryImpl @Inject constructor(
+    private val dao: HealthDiaryDao,
+    private val mapper: PersonToPersonDbMapper
+): MeasureRepository {
+
+    override fun getPerson(id: Long): Flow<Result<Person>> {
+        return flow {
+            emit(Result.loading())
+            try {
+                val response = dao.getPerson(id)
+                emit(Result.success(mapper.reverseMap(response)!!))
+            }
+            catch (e: Exception){
+                emit(Result.error(e.message!!))
+            }
+        }
+    }
+
+
+}

+ 5 - 0
feature_measure/src/main/java/com/mrozon/feature_measure/di/TabMeasureFragmentModule.kt

@@ -3,6 +3,8 @@ package com.mrozon.feature_measure.di
 import androidx.lifecycle.ViewModel
 import androidx.lifecycle.ViewModelProvider
 import com.mrozon.core_api.viewmodel.ViewModelKey
+import com.mrozon.feature_measure.data.MeasureRepository
+import com.mrozon.feature_measure.data.MeasureRepositoryImpl
 import com.mrozon.feature_measure.presentation.TabMeasureFragmentViewModel
 import dagger.Binds
 import dagger.Module
@@ -17,4 +19,7 @@ interface TabMeasureFragmentModule {
 
     @Binds
     fun viewModelFactory(factory: DaggerViewModelFactory): ViewModelProvider.Factory
+
+    @Binds
+    fun providePersonRepository(repository: MeasureRepositoryImpl): MeasureRepository
 }

+ 38 - 0
feature_measure/src/main/java/com/mrozon/feature_measure/presentation/TabMeasureFragment.kt

@@ -1,13 +1,22 @@
 package com.mrozon.feature_measure.presentation
 
 import android.content.Context
+import android.os.Bundle
+import android.view.View
+import androidx.core.app.ActivityCompat
 import androidx.fragment.app.viewModels
+import androidx.lifecycle.Observer
 import androidx.lifecycle.ViewModelProvider
+import androidx.lifecycle.observe
+import com.mrozon.core_api.entity.Gender
 import com.mrozon.feature_measure.R
 import com.mrozon.feature_measure.databinding.FragmentTabMeasureBinding
 import com.mrozon.feature_measure.di.TabMeasureFragmentComponent
 import com.mrozon.utils.base.BaseFragment
+import com.mrozon.utils.extension.visible
+import com.mrozon.utils.network.Result
 import timber.log.Timber
+import java.util.*
 import javax.inject.Inject
 
 class TabMeasureFragment: BaseFragment<FragmentTabMeasureBinding>() {
@@ -25,7 +34,36 @@ class TabMeasureFragment: BaseFragment<FragmentTabMeasureBinding>() {
         Timber.d("onAttach")
     }
 
+    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+        super.onViewCreated(view, savedInstanceState)
+
+        val id = arguments?.getLong("id", 0)?:0
+        if(id>0){
+            viewModel.loadProfilePerson(id)
+        }
+    }
+
     override fun subscribeUi() {
+        viewModel.selectedPerson.observe(viewLifecycleOwner, Observer { event ->
+            event.getContentIfNotHandled()?.let { result ->
+                when (result.status) {
+                    Result.Status.LOADING -> {
+                        binding?.progressBar?.visible(true)
+                    }
+                    Result.Status.SUCCESS -> {
+                        if(arguments?.containsKey("id") == true)
+                            arguments?.remove("id")
+                        binding?.progressBar?.visible(false)
+                        show(result.data?.name!!)
+                        //TODO logic for show selected person and prepare tab items
 
+                    }
+                    Result.Status.ERROR -> {
+                        binding?.progressBar?.visible(false)
+                        showError(result.message!!)
+                    }
+                }
+            }
+        })
     }
 }

+ 27 - 1
feature_measure/src/main/java/com/mrozon/feature_measure/presentation/TabMeasureFragmentViewModel.kt

@@ -1,9 +1,35 @@
 package com.mrozon.feature_measure.presentation
 
+import androidx.lifecycle.LiveData
+import androidx.lifecycle.MutableLiveData
+import androidx.lifecycle.viewModelScope
+import com.mrozon.core_api.entity.Person
+import com.mrozon.core_api.providers.CoroutineContextProvider
+import com.mrozon.feature_measure.data.MeasureRepository
+import com.mrozon.utils.Event
 import com.mrozon.utils.base.BaseViewModel
+import com.mrozon.utils.network.Result
+import kotlinx.coroutines.flow.collect
+import kotlinx.coroutines.launch
+import kotlinx.coroutines.withContext
 import javax.inject.Inject
 
 class TabMeasureFragmentViewModel @Inject constructor(
-
+    private val repository: MeasureRepository,
+    private val coroutineContextProvider: CoroutineContextProvider
 ): BaseViewModel() {
+
+    private var _selectedPerson = MutableLiveData<Event<Result<Person>>>()
+    val selectedPerson: LiveData<Event<Result<Person>>>
+        get() = _selectedPerson
+
+    fun loadProfilePerson(id: Long) {
+            viewModelScope.launch(coroutineContextProvider.IO) {
+                repository.getPerson(id).collect {
+                    withContext(coroutineContextProvider.Main) {
+                        _selectedPerson.value = Event(it)
+                    }
+                }
+            }
+    }
 }

+ 15 - 1
feature_measure/src/main/res/layout/fragment_tab_measure.xml

@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <layout xmlns:app="http://schemas.android.com/apk/res-auto"
-    xmlns:android="http://schemas.android.com/apk/res/android">
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools">
 
     <data>
 
@@ -34,6 +35,19 @@
                 android:text="Wednesday" />
         </com.google.android.material.tabs.TabLayout>
 
+        <ProgressBar
+            android:id="@+id/progressBar"
+            style="?android:attr/progressBarStyle"
+            android:layout_width="128dp"
+            android:layout_height="128dp"
+            android:indeterminate="true"
+            android:visibility="invisible"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent"
+            tools:visibility="visible" />
+
     </androidx.constraintlayout.widget.ConstraintLayout>
 
 </layout>