Add Attestations entity, Dao, repository, viewModelFactory
This commit is contained in:
		| @@ -4,6 +4,7 @@ import android.content.Context | ||||
| import androidx.room.Database | ||||
| import androidx.room.Room | ||||
| import androidx.room.RoomDatabase | ||||
| import fr.sanchezm.attestationsCovid19.data.db.dao.AttestationDao | ||||
| import fr.sanchezm.attestationsCovid19.data.db.dao.ProfileDao | ||||
| import fr.sanchezm.attestationsCovid19.data.db.entity.Profile | ||||
|  | ||||
| @@ -14,6 +15,7 @@ import fr.sanchezm.attestationsCovid19.data.db.entity.Profile | ||||
| abstract class MyDatabase private constructor() : RoomDatabase() { | ||||
|  | ||||
|     abstract fun profileDao(): ProfileDao | ||||
|     abstract fun attestationDao(): AttestationDao | ||||
|  | ||||
|     companion object { | ||||
|         @Volatile | ||||
|   | ||||
| @@ -0,0 +1,20 @@ | ||||
| package fr.sanchezm.attestationsCovid19.data.db.dao | ||||
|  | ||||
| import androidx.lifecycle.LiveData | ||||
| import androidx.room.Dao | ||||
| import androidx.room.Insert | ||||
| import androidx.room.OnConflictStrategy | ||||
| import androidx.room.Query | ||||
| import fr.sanchezm.attestationsCovid19.data.db.entity.Attestation | ||||
| import fr.sanchezm.attestationsCovid19.data.db.entity.CURRENT_ATTESTATION_ID | ||||
| import fr.sanchezm.attestationsCovid19.data.db.entity.CURRENT_PROFILE_ID | ||||
| import fr.sanchezm.attestationsCovid19.data.db.entity.Profile | ||||
|  | ||||
| @Dao | ||||
| interface AttestationDao { | ||||
|     @Insert | ||||
|     fun insert(attestation: Attestation) | ||||
|  | ||||
|     @Query(value = "SELECT * FROM attestation WHERE id = $CURRENT_ATTESTATION_ID") | ||||
|     fun getAttestation(): LiveData<Attestation> | ||||
| } | ||||
| @@ -0,0 +1,40 @@ | ||||
| package fr.sanchezm.attestationsCovid19.data.db.entity | ||||
|  | ||||
| import androidx.room.Entity | ||||
| import androidx.room.PrimaryKey | ||||
| import java.lang.StringBuilder | ||||
|  | ||||
| const val CURRENT_ATTESTATION_ID = 0 | ||||
|  | ||||
| @Entity(tableName = "attestation") | ||||
| data class Attestation( | ||||
|     val profile: Profile, | ||||
|     val exitDate: String, | ||||
|     val exitHour: String, | ||||
|     val createAt: String, | ||||
|     val reasons: List<Int> | ||||
| ) { | ||||
|     @PrimaryKey | ||||
|     var id: Int = CURRENT_ATTESTATION_ID | ||||
|  | ||||
|     override fun toString(): String { | ||||
|         val motifs = StringBuilder() | ||||
|  | ||||
|         repeat(reasons.size) { motifs.append(getMotifText(it), "-") }.also { motifs.dropLast(1) } | ||||
|         return "Cree le: $createAt; $profile; Sortie: $exitDate a $exitHour; Motifs: $motifs" | ||||
|     } | ||||
|  | ||||
|     private fun getMotifText(i: Int): String { | ||||
|         return when (i) { | ||||
|             1 -> "travail" | ||||
|             2 -> "courses" | ||||
|             3 -> "sante" | ||||
|             4 -> "famille" | ||||
|             5 -> "sport" | ||||
|             6 -> "judiciare" | ||||
|             7 -> "missions" | ||||
|             else -> "" | ||||
|         } | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -19,11 +19,6 @@ data class Profile( | ||||
|     var id: Int = CURRENT_PROFILE_ID | ||||
|  | ||||
|     override fun toString(): String { | ||||
|         val builder = StringBuilder() | ||||
|         builder.append("Nom:", lastName, "; ") | ||||
|         builder.append("Prenom:", firstName, "; ") | ||||
|         builder.append("Naissance:", birthday, " a ", birthPlace, "; ") | ||||
|         builder.append("Adresse:", address, " ", postalCode, " ", city, "; ") | ||||
|         return builder.toString() | ||||
|         return "Nom: $firstName; Prenom: $lastName; Naissance: $birthday a $birthPlace; Adresse: $address $postalCode $city" | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,23 @@ | ||||
| package fr.sanchezm.attestationsCovid19.data.repository | ||||
|  | ||||
| import fr.sanchezm.attestationsCovid19.data.db.dao.AttestationDao | ||||
| import fr.sanchezm.attestationsCovid19.data.db.dao.ProfileDao | ||||
| import fr.sanchezm.attestationsCovid19.data.db.entity.Attestation | ||||
| import fr.sanchezm.attestationsCovid19.data.db.entity.Profile | ||||
|  | ||||
| class AttestationRepository private constructor(private val attestationDao: AttestationDao) { | ||||
|  | ||||
|     fun getProfile() = attestationDao.getAttestation() | ||||
|  | ||||
|     fun insertProfile(attestation: Attestation) = attestationDao.insert(attestation) | ||||
|  | ||||
|     companion object { | ||||
|         @Volatile | ||||
|         private var instance: AttestationRepository? = null | ||||
|  | ||||
|         fun getInstance(attestationDao: AttestationDao) = | ||||
|             instance ?: synchronized(this) { | ||||
|                 instance ?: AttestationRepository(attestationDao).also { instance = it } | ||||
|             } | ||||
|     } | ||||
| } | ||||
| @@ -4,28 +4,41 @@ import android.os.Bundle | ||||
| import android.view.LayoutInflater | ||||
| import android.view.View | ||||
| import android.view.ViewGroup | ||||
| import android.widget.TextView | ||||
| import androidx.databinding.DataBindingUtil | ||||
| import androidx.fragment.app.Fragment | ||||
| import androidx.lifecycle.Observer | ||||
| import androidx.lifecycle.ViewModelProviders | ||||
| import androidx.lifecycle.ViewModelProvider | ||||
| import fr.sanchezm.attestationsCovid19.R | ||||
| import fr.sanchezm.attestationsCovid19.databinding.FragmentAttestationsBinding | ||||
| import fr.sanchezm.attestationsCovid19.utilities.InjectorUtils | ||||
|  | ||||
| class AttestationsFragment : Fragment() { | ||||
|  | ||||
|     private lateinit var dashboardViewModel: AttestationsViewModel | ||||
|     private lateinit var attestationsViewModel: AttestationsViewModel | ||||
|  | ||||
|     override fun onCreateView( | ||||
|         inflater: LayoutInflater, | ||||
|         container: ViewGroup?, | ||||
|         savedInstanceState: Bundle? | ||||
|     ): View? { | ||||
|         dashboardViewModel = | ||||
|             ViewModelProviders.of(this).get(AttestationsViewModel::class.java) | ||||
|         val root = inflater.inflate(R.layout.fragment_attestations, container, false) | ||||
|         val textView: TextView = root.findViewById(R.id.text_dashboard) | ||||
|         dashboardViewModel.text.observe(viewLifecycleOwner, Observer { | ||||
|             textView.text = it | ||||
|         }) | ||||
|         return root | ||||
|         initializeUi() | ||||
|         val binding = DataBindingUtil.inflate<FragmentAttestationsBinding>( | ||||
|             inflater, | ||||
|             R.layout.fragment_add_attestation, | ||||
|             container, | ||||
|             false | ||||
|         ).apply { | ||||
|             this.lifecycleOwner = this@AttestationsFragment | ||||
|             this.viewModel = attestationsViewModel | ||||
|         } | ||||
|  | ||||
|         return binding.root | ||||
|     } | ||||
| } | ||||
|  | ||||
|     private fun initializeUi() { | ||||
|         val factory = context?.let { InjectorUtils.provideAddViewModelFactory(it) } | ||||
|         attestationsViewModel = factory?.let { | ||||
|             ViewModelProvider(this, it) | ||||
|                 .get(AttestationsViewModel::class.java) | ||||
|         }!! | ||||
|     } | ||||
| } | ||||
| @@ -3,8 +3,9 @@ package fr.sanchezm.attestationsCovid19.ui.attestations | ||||
| import androidx.lifecycle.LiveData | ||||
| import androidx.lifecycle.MutableLiveData | ||||
| import androidx.lifecycle.ViewModel | ||||
| import fr.sanchezm.attestationsCovid19.data.repository.AttestationRepository | ||||
|  | ||||
| class AttestationsViewModel : ViewModel() { | ||||
| class AttestationsViewModel(private val attestationRepository: AttestationRepository) : ViewModel() { | ||||
|  | ||||
|     private val _text = MutableLiveData<String>().apply { | ||||
|         value = "This is dashboard Fragment" | ||||
|   | ||||
| @@ -0,0 +1,15 @@ | ||||
| package fr.sanchezm.attestationsCovid19.ui.attestations | ||||
|  | ||||
| import androidx.lifecycle.ViewModel | ||||
| import androidx.lifecycle.ViewModelProvider | ||||
| import fr.sanchezm.attestationsCovid19.data.repository.AttestationRepository | ||||
| import fr.sanchezm.attestationsCovid19.data.repository.ProfileRepository | ||||
|  | ||||
| class AttestationsViewModelFactory(private val attestationRepository: AttestationRepository) : | ||||
|     ViewModelProvider.NewInstanceFactory() { | ||||
|  | ||||
|     @Suppress("UNCHECKED_CAST") | ||||
|     override fun <T : ViewModel?> create(modelClass: Class<T>): T { | ||||
|         return AttestationsViewModel(attestationRepository) as T | ||||
|     } | ||||
| } | ||||
| @@ -2,8 +2,10 @@ package fr.sanchezm.attestationsCovid19.utilities | ||||
|  | ||||
| import android.content.Context | ||||
| import fr.sanchezm.attestationsCovid19.data.db.MyDatabase | ||||
| import fr.sanchezm.attestationsCovid19.data.repository.AttestationRepository | ||||
| import fr.sanchezm.attestationsCovid19.data.repository.ProfileRepository | ||||
| import fr.sanchezm.attestationsCovid19.ui.add.AddViewModelFactory | ||||
| import fr.sanchezm.attestationsCovid19.ui.attestations.AttestationsViewModel | ||||
|  | ||||
| object InjectorUtils { | ||||
|  | ||||
| @@ -13,4 +15,10 @@ object InjectorUtils { | ||||
|  | ||||
|         return AddViewModelFactory(profileRepository = profileRepository) | ||||
|     } | ||||
|  | ||||
|     fun provideAttestationViewModel(context: Context): AttestationsViewModel { | ||||
|         val attestationRepository = AttestationRepository.getInstance(MyDatabase.invoke(context).attestationDao()) | ||||
|         return AttestationsViewModel(attestationRepository) | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -1,22 +1,33 @@ | ||||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" | ||||
| <layout xmlns:android="http://schemas.android.com/apk/res/android" | ||||
|     xmlns:app="http://schemas.android.com/apk/res-auto" | ||||
|     xmlns:tools="http://schemas.android.com/tools" | ||||
|     android:layout_width="match_parent" | ||||
|     android:layout_height="match_parent" | ||||
|     tools:context=".ui.attestations.AttestationsFragment"> | ||||
|     xmlns:tools="http://schemas.android.com/tools"> | ||||
|  | ||||
|     <TextView | ||||
|         android:id="@+id/text_dashboard" | ||||
|     <data> | ||||
|  | ||||
|         <variable | ||||
|             name="viewModel" | ||||
|             type="fr.sanchezm.attestationsCovid19.ui.attestations.AttestationsViewModel" /> | ||||
|     </data> | ||||
|  | ||||
|     <androidx.constraintlayout.widget.ConstraintLayout | ||||
|         android:layout_width="match_parent" | ||||
|         android:layout_height="wrap_content" | ||||
|         android:layout_marginStart="8dp" | ||||
|         android:layout_marginTop="8dp" | ||||
|         android:layout_marginEnd="8dp" | ||||
|         android:textAlignment="center" | ||||
|         android:textSize="20sp" | ||||
|         app:layout_constraintBottom_toBottomOf="parent" | ||||
|         app:layout_constraintEnd_toEndOf="parent" | ||||
|         app:layout_constraintStart_toStartOf="parent" | ||||
|         app:layout_constraintTop_toTopOf="parent" /> | ||||
| </androidx.constraintlayout.widget.ConstraintLayout> | ||||
|         android:layout_height="match_parent" | ||||
|         tools:context=".ui.attestations.AttestationsFragment"> | ||||
|  | ||||
|         <TextView | ||||
|             android:id="@+id/text_dashboard" | ||||
|             android:layout_width="match_parent" | ||||
|             android:layout_height="wrap_content" | ||||
|             android:layout_marginStart="8dp" | ||||
|             android:layout_marginTop="8dp" | ||||
|             android:layout_marginEnd="8dp" | ||||
|             android:textAlignment="center" | ||||
|             android:textSize="20sp" | ||||
|             app:layout_constraintBottom_toBottomOf="parent" | ||||
|             app:layout_constraintEnd_toEndOf="parent" | ||||
|             app:layout_constraintStart_toStartOf="parent" | ||||
|             app:layout_constraintTop_toTopOf="parent" /> | ||||
|     </androidx.constraintlayout.widget.ConstraintLayout> | ||||
|  | ||||
| </layout> | ||||
		Reference in New Issue
	
	Block a user