Skip to content
Snippets Groups Projects
Commit 7b48c6d4 authored by Oliver Zimmerman's avatar Oliver Zimmerman
Browse files

Added UI State to ViewModel for TestResultSection formatting. Finalized...

Added UI State to ViewModel for TestResultSection formatting. Finalized fragment. Updated navigation
parent 38cc02d8
No related branches found
No related tags found
No related merge requests found
...@@ -7,7 +7,12 @@ import android.view.accessibility.AccessibilityEvent ...@@ -7,7 +7,12 @@ import android.view.accessibility.AccessibilityEvent
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import de.rki.coronawarnapp.R import de.rki.coronawarnapp.R
import de.rki.coronawarnapp.databinding.FragmentSubmissionTestResultConsentGivenBinding import de.rki.coronawarnapp.databinding.FragmentSubmissionTestResultConsentGivenBinding
import de.rki.coronawarnapp.exception.http.CwaClientError
import de.rki.coronawarnapp.exception.http.CwaServerError
import de.rki.coronawarnapp.exception.http.CwaWebException
import de.rki.coronawarnapp.ui.submission.viewmodel.SubmissionNavigationEvents import de.rki.coronawarnapp.ui.submission.viewmodel.SubmissionNavigationEvents
import de.rki.coronawarnapp.util.DialogHelper
import de.rki.coronawarnapp.util.NetworkRequestWrapper.Companion.withFailure
import de.rki.coronawarnapp.util.di.AutoInject import de.rki.coronawarnapp.util.di.AutoInject
import de.rki.coronawarnapp.util.ui.doNavigate import de.rki.coronawarnapp.util.ui.doNavigate
import de.rki.coronawarnapp.util.ui.observe2 import de.rki.coronawarnapp.util.ui.observe2
...@@ -23,9 +28,54 @@ class SubmissionTestResultConsentGivenFragment : Fragment(R.layout.fragment_subm ...@@ -23,9 +28,54 @@ class SubmissionTestResultConsentGivenFragment : Fragment(R.layout.fragment_subm
private val binding: FragmentSubmissionTestResultConsentGivenBinding by viewBindingLazy() private val binding: FragmentSubmissionTestResultConsentGivenBinding by viewBindingLazy()
private fun navigateToMainScreen() =
doNavigate(
SubmissionTestResultConsentGivenFragmentDirections.actionSubmissionTestResultConsentGivenFragmentToHomeFragment()
)
private fun buildErrorDialog(exception: CwaWebException): DialogHelper.DialogInstance {
return when (exception) {
is CwaClientError, is CwaServerError -> DialogHelper.DialogInstance(
requireActivity(),
R.string.submission_error_dialog_web_generic_error_title,
getString(
R.string.submission_error_dialog_web_generic_network_error_body,
exception.statusCode
),
R.string.submission_error_dialog_web_generic_error_button_positive,
null,
true,
::navigateToMainScreen
)
else -> DialogHelper.DialogInstance(
requireActivity(),
R.string.submission_error_dialog_web_generic_error_title,
R.string.submission_error_dialog_web_generic_error_body,
R.string.submission_error_dialog_web_generic_error_button_positive,
null,
true,
::navigateToMainScreen
)
}
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
viewModel.uiState.observe2(this) {
binding.uiState = it
with(binding) {
submissionTestResultSection
.setTestResultSection(uiState?.deviceUiState, uiState?.testResultReceivedDate)
}
it.deviceUiState.withFailure {
if (it is CwaWebException) {
DialogHelper.showDialog(buildErrorDialog(it))
}
}
}
setButtonOnClickListener() setButtonOnClickListener()
viewModel.showCancelDialog.observe2(this) { viewModel.showCancelDialog.observe2(this) {
...@@ -36,13 +86,13 @@ class SubmissionTestResultConsentGivenFragment : Fragment(R.layout.fragment_subm ...@@ -36,13 +86,13 @@ class SubmissionTestResultConsentGivenFragment : Fragment(R.layout.fragment_subm
when (it) { when (it) {
is SubmissionNavigationEvents.NavigateToSymptomIntroduction -> is SubmissionNavigationEvents.NavigateToSymptomIntroduction ->
doNavigate( doNavigate(
SubmissionTestResultFragmentConsentGivenDirections SubmissionTestResultConsentGivenFragmentDirections
.actionSubmissionResultFragmentToSubmissionSymptomIntroductionFragment() .actionSubmissionTestResultConsentGivenFragmentToSubmissionSymptomIntroductionFragment()
) )
is SubmissionNavigationEvents.NavigateToMainActivity -> is SubmissionNavigationEvents.NavigateToMainActivity ->
doNavigate( doNavigate(
SubmissionTestResultFragmentConsentGivenDirections SubmissionTestResultConsentGivenFragmentDirections
.actionSubmissionResultFragmentToSubmissionResultPositiveOtherWarningFragment() .actionSubmissionTestResultConsentGivenFragmentToHomeFragment()
) )
} }
......
package de.rki.coronawarnapp.ui.submission.testresult package de.rki.coronawarnapp.ui.submission.testresult
import androidx.lifecycle.LiveData
import androidx.lifecycle.asLiveData
import com.squareup.inject.assisted.AssistedInject import com.squareup.inject.assisted.AssistedInject
import de.rki.coronawarnapp.nearby.ENFClient
import de.rki.coronawarnapp.notification.TestResultNotificationService
import de.rki.coronawarnapp.storage.SubmissionRepository
import de.rki.coronawarnapp.ui.submission.viewmodel.SubmissionNavigationEvents import de.rki.coronawarnapp.ui.submission.viewmodel.SubmissionNavigationEvents
import de.rki.coronawarnapp.util.DeviceUIState
import de.rki.coronawarnapp.util.NetworkRequestWrapper.Companion.withSuccess
import de.rki.coronawarnapp.util.coroutine.DispatcherProvider
import de.rki.coronawarnapp.util.ui.SingleLiveEvent import de.rki.coronawarnapp.util.ui.SingleLiveEvent
import de.rki.coronawarnapp.util.viewmodel.CWAViewModel import de.rki.coronawarnapp.util.viewmodel.CWAViewModel
import de.rki.coronawarnapp.util.viewmodel.SimpleCWAViewModelFactory import de.rki.coronawarnapp.util.viewmodel.SimpleCWAViewModelFactory
import kotlinx.coroutines.flow.combineTransform
import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock
import timber.log.Timber import timber.log.Timber
class SubmissionTestResultConsentGivenViewModel @AssistedInject constructor() : CWAViewModel() { class SubmissionTestResultConsentGivenViewModel @AssistedInject constructor(
dispatcherProvider: DispatcherProvider,
private val submissionRepository: SubmissionRepository
) : CWAViewModel(dispatcherProvider = dispatcherProvider) {
private val showRedeemedTokenWarning = SingleLiveEvent<Unit>()
private var wasRedeemedTokenErrorShown = false
private val tokenErrorMutex = Mutex()
val uiState: LiveData<TestResultUIState> = combineTransform(
submissionRepository.deviceUIStateFlow,
submissionRepository.testResultReceivedDateFlow
) { deviceUiState, resultDate ->
tokenErrorMutex.withLock {
if (!wasRedeemedTokenErrorShown) {
deviceUiState.withSuccess {
if (it == DeviceUIState.PAIRED_REDEEMED) {
wasRedeemedTokenErrorShown = true
showRedeemedTokenWarning.postValue(Unit)
}
}
}
}
TestResultUIState(
deviceUiState = deviceUiState,
testResultReceivedDate = resultDate
).let { emit(it) }
}.asLiveData(context = dispatcherProvider.Default)
val routeToScreen: SingleLiveEvent<SubmissionNavigationEvents> = SingleLiveEvent() val routeToScreen: SingleLiveEvent<SubmissionNavigationEvents> = SingleLiveEvent()
......
...@@ -395,4 +395,16 @@ ...@@ -395,4 +395,16 @@
app:destination="@id/informationPrivacyFragment" /> app:destination="@id/informationPrivacyFragment" />
</fragment> </fragment>
<fragment
android:id="@+id/submissionTestResultConsentGivenFragment"
android:name="de.rki.coronawarnapp.ui.submission.testresult.SubmissionTestResultConsentGivenFragment"
android:label="SubmissionTestResultConsentFragment" >
<action
android:id="@+id/action_submissionTestResultConsentGivenFragment_to_homeFragment"
app:popUpTo="@id/mainFragment"
app:popUpToInclusive="false"/>
<action
android:id="@+id/action_submissionTestResultConsentGivenFragment_to_submissionSymptomIntroductionFragment"
app:destination="@id/submissionSymptomIntroductionFragment" />
</fragment>
</navigation> </navigation>
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