Skip to content
Snippets Groups Projects
Unverified Commit a87b44db authored by BMItter's avatar BMItter Committed by GitHub
Browse files

Code smells diary (EXPOSUREAPP-4152) (#1943)

* move companions object to the end of ContactDiaryActivity

* format clean

* Init contact diary database lazily in repo, Added fun clear to contact diary repo, Use repo clear in data reset

* Use unified string for date

* Corrected date format

* clean
parent 4765d1c5
No related branches found
No related tags found
No related merge requests found
Showing
with 58 additions and 54 deletions
...@@ -2,36 +2,12 @@ package de.rki.coronawarnapp.contactdiary.storage ...@@ -2,36 +2,12 @@ package de.rki.coronawarnapp.contactdiary.storage
import dagger.Module import dagger.Module
import dagger.Provides import dagger.Provides
import de.rki.coronawarnapp.contactdiary.storage.dao.ContactDiaryLocationDao
import de.rki.coronawarnapp.contactdiary.storage.dao.ContactDiaryLocationVisitDao
import de.rki.coronawarnapp.contactdiary.storage.dao.ContactDiaryPersonDao
import de.rki.coronawarnapp.contactdiary.storage.dao.ContactDiaryPersonEncounterDao
import de.rki.coronawarnapp.contactdiary.storage.repo.ContactDiaryRepository import de.rki.coronawarnapp.contactdiary.storage.repo.ContactDiaryRepository
import de.rki.coronawarnapp.contactdiary.storage.repo.DefaultContactDiaryRepository import de.rki.coronawarnapp.contactdiary.storage.repo.DefaultContactDiaryRepository
import javax.inject.Singleton import javax.inject.Singleton
@Module @Module
class ContactDiaryStorageModule { class ContactDiaryStorageModule {
@Singleton
@Provides
fun contactDiaryDatabase(contactDiaryDatabaseFactory: ContactDiaryDatabase.Factory): ContactDiaryDatabase =
contactDiaryDatabaseFactory.create()
@Provides
fun locationDao(contactDiaryDatabase: ContactDiaryDatabase): ContactDiaryLocationDao =
contactDiaryDatabase.locationDao()
@Provides
fun locationVisitDao(contactDiaryDatabase: ContactDiaryDatabase): ContactDiaryLocationVisitDao =
contactDiaryDatabase.locationVisitDao()
@Provides
fun personDao(contactDiaryDatabase: ContactDiaryDatabase): ContactDiaryPersonDao =
contactDiaryDatabase.personDao()
@Provides
fun personEncounterDao(contactDiaryDatabase: ContactDiaryDatabase): ContactDiaryPersonEncounterDao =
contactDiaryDatabase.personEncounterDao()
@Singleton @Singleton
@Provides @Provides
......
...@@ -41,4 +41,7 @@ interface ContactDiaryRepository { ...@@ -41,4 +41,7 @@ interface ContactDiaryRepository {
suspend fun deletePersonEncounter(contactDiaryPersonEncounter: ContactDiaryPersonEncounter) suspend fun deletePersonEncounter(contactDiaryPersonEncounter: ContactDiaryPersonEncounter)
suspend fun deletePersonEncounters(contactDiaryPersonEncounters: List<ContactDiaryPersonEncounter>) suspend fun deletePersonEncounters(contactDiaryPersonEncounters: List<ContactDiaryPersonEncounter>)
suspend fun deleteAllPersonEncounters() suspend fun deleteAllPersonEncounters()
// Clean
suspend fun clear()
} }
...@@ -5,6 +5,7 @@ import de.rki.coronawarnapp.contactdiary.model.ContactDiaryLocationVisit ...@@ -5,6 +5,7 @@ import de.rki.coronawarnapp.contactdiary.model.ContactDiaryLocationVisit
import de.rki.coronawarnapp.contactdiary.model.ContactDiaryPerson import de.rki.coronawarnapp.contactdiary.model.ContactDiaryPerson
import de.rki.coronawarnapp.contactdiary.model.ContactDiaryPersonEncounter import de.rki.coronawarnapp.contactdiary.model.ContactDiaryPersonEncounter
import de.rki.coronawarnapp.contactdiary.model.sortByNameAndIdASC import de.rki.coronawarnapp.contactdiary.model.sortByNameAndIdASC
import de.rki.coronawarnapp.contactdiary.storage.ContactDiaryDatabase
import de.rki.coronawarnapp.contactdiary.storage.dao.ContactDiaryLocationDao import de.rki.coronawarnapp.contactdiary.storage.dao.ContactDiaryLocationDao
import de.rki.coronawarnapp.contactdiary.storage.dao.ContactDiaryLocationVisitDao import de.rki.coronawarnapp.contactdiary.storage.dao.ContactDiaryLocationVisitDao
import de.rki.coronawarnapp.contactdiary.storage.dao.ContactDiaryPersonDao import de.rki.coronawarnapp.contactdiary.storage.dao.ContactDiaryPersonDao
...@@ -25,16 +26,31 @@ import javax.inject.Singleton ...@@ -25,16 +26,31 @@ import javax.inject.Singleton
@Singleton @Singleton
@Suppress("TooManyFunctions") @Suppress("TooManyFunctions")
class DefaultContactDiaryRepository @Inject constructor( class DefaultContactDiaryRepository @Inject constructor(
private val contactDiaryLocationDao: ContactDiaryLocationDao, contactDiaryDatabaseFactory: ContactDiaryDatabase.Factory
private val contactDiaryLocationVisitDao: ContactDiaryLocationVisitDao,
private val contactDiaryPersonDao: ContactDiaryPersonDao,
private val contactDiaryPersonEncounterDao: ContactDiaryPersonEncounterDao
) : ContactDiaryRepository { ) : ContactDiaryRepository {
private val contactDiaryDatabase: ContactDiaryDatabase by lazy {
contactDiaryDatabaseFactory.create()
}
private val contactDiaryLocationDao: ContactDiaryLocationDao by lazy {
contactDiaryDatabase.locationDao()
}
private val contactDiaryLocationVisitDao: ContactDiaryLocationVisitDao by lazy {
contactDiaryDatabase.locationVisitDao()
}
private val contactDiaryPersonDao: ContactDiaryPersonDao by lazy {
contactDiaryDatabase.personDao()
}
private val contactDiaryPersonEncounterDao: ContactDiaryPersonEncounterDao by lazy {
contactDiaryDatabase.personEncounterDao()
}
// Location // Location
override val locations: Flow<List<ContactDiaryLocation>> = contactDiaryLocationDao override val locations: Flow<List<ContactDiaryLocation>> by lazy {
.allEntries() contactDiaryLocationDao
.map { it.sortByNameAndIdASC() } .allEntries()
.map { it.sortByNameAndIdASC() }
}
override suspend fun addLocation(contactDiaryLocation: ContactDiaryLocation) { override suspend fun addLocation(contactDiaryLocation: ContactDiaryLocation) {
Timber.d("Adding location $contactDiaryLocation") Timber.d("Adding location $contactDiaryLocation")
...@@ -74,10 +90,11 @@ class DefaultContactDiaryRepository @Inject constructor( ...@@ -74,10 +90,11 @@ class DefaultContactDiaryRepository @Inject constructor(
} }
// Location visit // Location visit
override val locationVisits: Flow<List<ContactDiaryLocationVisit>> = override val locationVisits: Flow<List<ContactDiaryLocationVisit>> by lazy {
contactDiaryLocationVisitDao contactDiaryLocationVisitDao
.allEntries() .allEntries()
.map { it.toContactDiaryLocationVisitSortedList() } .map { it.toContactDiaryLocationVisitSortedList() }
}
override fun locationVisitsForDate(date: LocalDate): Flow<List<ContactDiaryLocationVisit>> = override fun locationVisitsForDate(date: LocalDate): Flow<List<ContactDiaryLocationVisit>> =
contactDiaryLocationVisitDao contactDiaryLocationVisitDao
...@@ -115,9 +132,11 @@ class DefaultContactDiaryRepository @Inject constructor( ...@@ -115,9 +132,11 @@ class DefaultContactDiaryRepository @Inject constructor(
} }
// Person // Person
override val people: Flow<List<ContactDiaryPerson>> = contactDiaryPersonDao override val people: Flow<List<ContactDiaryPerson>> by lazy {
.allEntries() contactDiaryPersonDao
.map { it.sortByNameAndIdASC() } .allEntries()
.map { it.sortByNameAndIdASC() }
}
override suspend fun addPerson(contactDiaryPerson: ContactDiaryPerson) { override suspend fun addPerson(contactDiaryPerson: ContactDiaryPerson) {
Timber.d("Adding person $contactDiaryPerson") Timber.d("Adding person $contactDiaryPerson")
...@@ -157,10 +176,11 @@ class DefaultContactDiaryRepository @Inject constructor( ...@@ -157,10 +176,11 @@ class DefaultContactDiaryRepository @Inject constructor(
} }
// Person encounter // Person encounter
override val personEncounters: Flow<List<ContactDiaryPersonEncounter>> = override val personEncounters: Flow<List<ContactDiaryPersonEncounter>> by lazy {
contactDiaryPersonEncounterDao contactDiaryPersonEncounterDao
.allEntries() .allEntries()
.map { it.toContactDiaryPersonEncounterSortedList() } .map { it.toContactDiaryPersonEncounterSortedList() }
}
override fun personEncountersForDate(date: LocalDate): Flow<List<ContactDiaryPersonEncounter>> = override fun personEncountersForDate(date: LocalDate): Flow<List<ContactDiaryPersonEncounter>> =
contactDiaryPersonEncounterDao contactDiaryPersonEncounterDao
...@@ -204,4 +224,9 @@ class DefaultContactDiaryRepository @Inject constructor( ...@@ -204,4 +224,9 @@ class DefaultContactDiaryRepository @Inject constructor(
throw IllegalArgumentException("Entity has default id") throw IllegalArgumentException("Entity has default id")
} }
} }
override suspend fun clear() {
Timber.d("Clearing contact diary database")
contactDiaryDatabase.clearAllTables()
}
} }
...@@ -18,11 +18,6 @@ import javax.inject.Inject ...@@ -18,11 +18,6 @@ import javax.inject.Inject
* This activity holds all the contact diary fragments * This activity holds all the contact diary fragments
*/ */
class ContactDiaryActivity : AppCompatActivity(), HasAndroidInjector { class ContactDiaryActivity : AppCompatActivity(), HasAndroidInjector {
companion object {
fun start(context: Context) {
context.startActivity(Intent(context, ContactDiaryActivity::class.java))
}
}
@Inject lateinit var settings: ContactDiarySettings @Inject lateinit var settings: ContactDiarySettings
@Inject lateinit var dispatchingAndroidInjector: DispatchingAndroidInjector<Any> @Inject lateinit var dispatchingAndroidInjector: DispatchingAndroidInjector<Any>
...@@ -59,4 +54,10 @@ class ContactDiaryActivity : AppCompatActivity(), HasAndroidInjector { ...@@ -59,4 +54,10 @@ class ContactDiaryActivity : AppCompatActivity(), HasAndroidInjector {
data data
) )
} }
companion object {
fun start(context: Context) {
context.startActivity(Intent(context, ContactDiaryActivity::class.java))
}
}
} }
...@@ -9,9 +9,7 @@ import javax.inject.Singleton ...@@ -9,9 +9,7 @@ import javax.inject.Singleton
@Singleton @Singleton
class ContactDiarySettings @Inject constructor( class ContactDiarySettings @Inject constructor(
@AppContext val context: Context @AppContext val context: Context
) { ) {
private val prefs by lazy { private val prefs by lazy {
......
...@@ -4,6 +4,7 @@ import androidx.lifecycle.asLiveData ...@@ -4,6 +4,7 @@ import androidx.lifecycle.asLiveData
import com.squareup.inject.assisted.Assisted import com.squareup.inject.assisted.Assisted
import com.squareup.inject.assisted.AssistedInject import com.squareup.inject.assisted.AssistedInject
import de.rki.coronawarnapp.contactdiary.ui.day.tabs.ContactDiaryDayTab import de.rki.coronawarnapp.contactdiary.ui.day.tabs.ContactDiaryDayTab
import de.rki.coronawarnapp.contactdiary.util.toFormattedDay
import de.rki.coronawarnapp.ui.SingleLiveEvent import de.rki.coronawarnapp.ui.SingleLiveEvent
import de.rki.coronawarnapp.util.coroutine.DispatcherProvider import de.rki.coronawarnapp.util.coroutine.DispatcherProvider
import de.rki.coronawarnapp.util.viewmodel.CWAViewModel import de.rki.coronawarnapp.util.viewmodel.CWAViewModel
...@@ -11,22 +12,17 @@ import de.rki.coronawarnapp.util.viewmodel.CWAViewModelFactory ...@@ -11,22 +12,17 @@ import de.rki.coronawarnapp.util.viewmodel.CWAViewModelFactory
import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.map
import org.joda.time.LocalDate import org.joda.time.LocalDate
import org.joda.time.format.DateTimeFormat
class ContactDiaryDayViewModel @AssistedInject constructor( class ContactDiaryDayViewModel @AssistedInject constructor(
dispatcherProvider: DispatcherProvider, dispatcherProvider: DispatcherProvider,
@Assisted selectedDay: String @Assisted selectedDay: String
) : CWAViewModel(dispatcherProvider = dispatcherProvider) { ) : CWAViewModel(dispatcherProvider = dispatcherProvider) {
private val dateFormat by lazy {
DateTimeFormat.forPattern("EEEE, dd.MM.yy")
}
private val displayedDay = MutableStateFlow(LocalDate.parse(selectedDay)) private val displayedDay = MutableStateFlow(LocalDate.parse(selectedDay))
val routeToScreen: SingleLiveEvent<ContactDiaryDayNavigationEvents> = SingleLiveEvent() val routeToScreen: SingleLiveEvent<ContactDiaryDayNavigationEvents> = SingleLiveEvent()
val uiState = displayedDay.map { day -> val uiState = displayedDay.map { day ->
UIState(dayText = day.toString(dateFormat)) UIState(dayText = day.toFormattedDay())
}.asLiveData() }.asLiveData()
fun onCreateButtonClicked(activeTab: ContactDiaryDayTab) { fun onCreateButtonClicked(activeTab: ContactDiaryDayTab) {
......
...@@ -4,8 +4,8 @@ import android.view.LayoutInflater ...@@ -4,8 +4,8 @@ import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import de.rki.coronawarnapp.contactdiary.util.toFormattedDay
import de.rki.coronawarnapp.databinding.IncludeContactDiaryOverviewItemBinding import de.rki.coronawarnapp.databinding.IncludeContactDiaryOverviewItemBinding
import java.util.Locale
class ContactDiaryOverviewAdapter(private val onItemSelectionListener: (ListItem) -> Unit) : class ContactDiaryOverviewAdapter(private val onItemSelectionListener: (ListItem) -> Unit) :
RecyclerView.Adapter<ContactDiaryOverviewAdapter.OverviewElementHolder>() { RecyclerView.Adapter<ContactDiaryOverviewAdapter.OverviewElementHolder>() {
...@@ -47,7 +47,7 @@ class ContactDiaryOverviewAdapter(private val onItemSelectionListener: (ListItem ...@@ -47,7 +47,7 @@ class ContactDiaryOverviewAdapter(private val onItemSelectionListener: (ListItem
onElementSelectionListener: (ListItem) -> Unit onElementSelectionListener: (ListItem) -> Unit
) { ) {
viewDataBinding.contactDiaryOverviewElementName.text = viewDataBinding.contactDiaryOverviewElementName.text =
item.date.toString("EEEE, dd.MM.yyyy", Locale.getDefault()) item.date.toFormattedDay()
viewDataBinding.contactDiaryOverviewElementBody.setOnClickListener { onElementSelectionListener(item) } viewDataBinding.contactDiaryOverviewElementBody.setOnClickListener { onElementSelectionListener(item) }
......
...@@ -5,6 +5,8 @@ import android.view.inputmethod.InputMethodManager ...@@ -5,6 +5,8 @@ import android.view.inputmethod.InputMethodManager
import android.widget.EditText import android.widget.EditText
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.viewpager2.widget.ViewPager2 import androidx.viewpager2.widget.ViewPager2
import org.joda.time.LocalDate
import java.util.Locale
fun ViewPager2.registerOnPageChangeCallback(cb: (position: Int) -> Unit) { fun ViewPager2.registerOnPageChangeCallback(cb: (position: Int) -> Unit) {
this.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() { this.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
...@@ -14,6 +16,9 @@ fun ViewPager2.registerOnPageChangeCallback(cb: (position: Int) -> Unit) { ...@@ -14,6 +16,9 @@ fun ViewPager2.registerOnPageChangeCallback(cb: (position: Int) -> Unit) {
}) })
} }
// According to tech spec german locale only
fun LocalDate.toFormattedDay(): String = toString("EEEE, dd.MM.yy", Locale.GERMAN)
fun EditText.showKeyboard() = post { fun EditText.showKeyboard() = post {
if (requestFocus()) context.inputMethodManager.showSoftInput(this, InputMethodManager.SHOW_IMPLICIT) if (requestFocus()) context.inputMethodManager.showSoftInput(this, InputMethodManager.SHOW_IMPLICIT)
} }
......
...@@ -22,7 +22,7 @@ package de.rki.coronawarnapp.util ...@@ -22,7 +22,7 @@ package de.rki.coronawarnapp.util
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.content.Context import android.content.Context
import de.rki.coronawarnapp.appconfig.AppConfigProvider import de.rki.coronawarnapp.appconfig.AppConfigProvider
import de.rki.coronawarnapp.contactdiary.storage.ContactDiaryDatabase import de.rki.coronawarnapp.contactdiary.storage.repo.ContactDiaryRepository
import de.rki.coronawarnapp.contactdiary.ui.ContactDiarySettings import de.rki.coronawarnapp.contactdiary.ui.ContactDiarySettings
import de.rki.coronawarnapp.diagnosiskeys.download.DownloadDiagnosisKeysSettings import de.rki.coronawarnapp.diagnosiskeys.download.DownloadDiagnosisKeysSettings
import de.rki.coronawarnapp.diagnosiskeys.storage.KeyCacheRepository import de.rki.coronawarnapp.diagnosiskeys.storage.KeyCacheRepository
...@@ -51,7 +51,7 @@ class DataReset @Inject constructor( ...@@ -51,7 +51,7 @@ class DataReset @Inject constructor(
private val exposureDetectionTracker: ExposureDetectionTracker, private val exposureDetectionTracker: ExposureDetectionTracker,
private val downloadDiagnosisKeysSettings: DownloadDiagnosisKeysSettings, private val downloadDiagnosisKeysSettings: DownloadDiagnosisKeysSettings,
private val riskLevelStorage: RiskLevelStorage, private val riskLevelStorage: RiskLevelStorage,
private val contactDiaryDatabase: ContactDiaryDatabase, private val contactDiaryRepository: ContactDiaryRepository,
private var contactDiarySettings: ContactDiarySettings private var contactDiarySettings: ContactDiarySettings
) { ) {
...@@ -81,7 +81,7 @@ class DataReset @Inject constructor( ...@@ -81,7 +81,7 @@ class DataReset @Inject constructor(
contactDiarySettings.clear() contactDiarySettings.clear()
// Clear contact diary database // Clear contact diary database
contactDiaryDatabase.clearAllTables() contactDiaryRepository.clear()
Timber.w("CWA LOCAL DATA DELETION COMPLETED.") Timber.w("CWA LOCAL DATA DELETION COMPLETED.")
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment