Skip to content
This repository has been archived by the owner on Jun 20, 2023. It is now read-only.

Basic Layout for Test Certificate Detail Screen (DEV) #3300

Merged
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
009fb12
add basic xml layout
axelherbstreith May 27, 2021
c6b9f89
added basic files
axelherbstreith May 27, 2021
0b57900
Merge branch 'release/2.4.x' into feature/dev-test-certificate-detail…
BMItr May 27, 2021
c41d719
refactoring + adding new strings
axelherbstreith May 28, 2021
64d0bdb
updated travel notice
axelherbstreith May 28, 2021
bd22706
fixed linting
axelherbstreith May 28, 2021
29bbaab
Merge branch 'release/2.4.x' into feature/dev-test-certificate-detail…
axelherbstreith May 28, 2021
f227311
connected screen to test_nav_graph
axelherbstreith May 28, 2021
2b9982a
lint
axelherbstreith May 28, 2021
f3f314b
Merge branch 'release/2.4.x' into feature/dev-test-certificate-detail…
axelherbstreith May 31, 2021
534f251
added to test_nav_graph
axelherbstreith May 31, 2021
920871a
linting
axelherbstreith May 31, 2021
1793983
updated styling
axelherbstreith May 31, 2021
4e89d4e
increased green card background
axelherbstreith May 31, 2021
b257940
Merge branch 'release/2.4.x' into feature/dev-test-certificate-detail…
axelherbstreith May 31, 2021
fa00122
lint
axelherbstreith May 31, 2021
23b73ee
renamed variables
axelherbstreith May 31, 2021
b5ce4a9
updated margins
axelherbstreith May 31, 2021
073fdc4
addressed comments
axelherbstreith May 31, 2021
2556067
addressed more comments
axelherbstreith May 31, 2021
5baf573
unified qr code cards
axelherbstreith May 31, 2021
9470b2a
added links
axelherbstreith May 31, 2021
f35b6a3
linting
axelherbstreith May 31, 2021
e18e55a
added missing space
axelherbstreith May 31, 2021
bca7c56
Try another device
mtwalli May 31, 2021
db53898
Revert "Try another device"
mtwalli May 31, 2021
f187d57
updated with new strings
axelherbstreith Jun 1, 2021
ed2efb0
Merge branch 'feature/dev-test-certificate-detail-fragment' of https:…
axelherbstreith Jun 1, 2021
1602dbf
Merge branch 'release/2.4.x' into feature/dev-test-certificate-detail…
axelherbstreith Jun 1, 2021
29909cf
Merge branch 'release/2.4.x' into feature/dev-test-certificate-detail…
mtwalli Jun 1, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,17 @@ import dagger.Module
import dagger.android.ContributesAndroidInjector
import de.rki.coronawarnapp.greencertificate.ui.certificates.CertificatesFragment
import de.rki.coronawarnapp.greencertificate.ui.certificates.CertificatesFragmentModule
import de.rki.coronawarnapp.greencertificate.ui.certificates.details.CertificateDetailsFragment
import de.rki.coronawarnapp.greencertificate.ui.certificates.details.CertificateDetailsModule
import de.rki.coronawarnapp.vaccination.ui.consent.VaccinationConsentFragment
import de.rki.coronawarnapp.vaccination.ui.consent.VaccinationConsentFragmentModule

@Module
abstract class GreenCertificateUIModule {

@ContributesAndroidInjector(modules = [CertificatesFragmentModule::class])
abstract fun certificatesFragment(): CertificatesFragment

@ContributesAndroidInjector(modules = [CertificateDetailsModule::class])
abstract fun certificateDetailsFragment(): CertificateDetailsFragment
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
package de.rki.coronawarnapp.greencertificate.ui.certificates.details

import android.os.Bundle
import android.view.View
import android.widget.LinearLayout
import androidx.coordinatorlayout.widget.CoordinatorLayout
import androidx.fragment.app.Fragment
import com.google.android.material.appbar.AppBarLayout
import de.rki.coronawarnapp.R
import de.rki.coronawarnapp.databinding.FragmentVaccinationDetailsBinding
import de.rki.coronawarnapp.ui.view.onOffsetChange
import de.rki.coronawarnapp.util.di.AutoInject
import de.rki.coronawarnapp.util.ui.popBackStack
import de.rki.coronawarnapp.util.ui.viewBinding
import de.rki.coronawarnapp.util.viewmodel.CWAViewModelFactoryProvider
import de.rki.coronawarnapp.util.viewmodel.cwaViewModels
import org.joda.time.format.DateTimeFormat
import javax.inject.Inject

class CertificateDetailsFragment : Fragment(R.layout.fragment_greencertificate_details), AutoInject {
axelherbstreith marked this conversation as resolved.
Show resolved Hide resolved

@Inject lateinit var viewModelFactory: CWAViewModelFactoryProvider.Factory

//private val args by navArgs<DetailsFra>()
private val binding: FragmentVaccinationDetailsBinding by viewBinding()

private val viewModel: CertificateDetailsViewModel by cwaViewModels { viewModelFactory }


override fun onViewCreated(view: View, savedInstanceState: Bundle?) =
with(binding) {
toolbar.setNavigationOnClickListener { popBackStack() }

appBarLayout.onOffsetChange { titleAlpha, subtitleAlpha ->
title.alpha = titleAlpha
subtitle.alpha = subtitleAlpha
}
setToolbarOverlay()

viewModel.qrCode.observe(viewLifecycleOwner) {
qrCodeCard.image.setImageBitmap(it)
it?.let {
qrCodeCard.image.setOnClickListener { viewModel.openFullScreen() }
qrCodeCard.progressBar.hide()
}
}
}

private fun setToolbarOverlay() {
val width = requireContext().resources.displayMetrics.widthPixels

val params: CoordinatorLayout.LayoutParams = binding.scrollView.layoutParams
as (CoordinatorLayout.LayoutParams)

val textParams = binding.subtitle.layoutParams as (LinearLayout.LayoutParams)
textParams.bottomMargin = (width / 3) - 24 /* 24 is space between screen border and QrCode */
binding.subtitle.requestLayout() /* 24 is space between screen border and QrCode */

val behavior: AppBarLayout.ScrollingViewBehavior = params.behavior as (AppBarLayout.ScrollingViewBehavior)
behavior.overlayTop = (width / 3) - 24
}

companion object {
private val format = DateTimeFormat.forPattern("dd.MM.yy")
axelherbstreith marked this conversation as resolved.
Show resolved Hide resolved
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package de.rki.coronawarnapp.greencertificate.ui.certificates.details

import dagger.Binds
import dagger.Module
import dagger.multibindings.IntoMap
import de.rki.coronawarnapp.util.viewmodel.CWAViewModel
import de.rki.coronawarnapp.util.viewmodel.CWAViewModelFactory
import de.rki.coronawarnapp.util.viewmodel.CWAViewModelKey

@Module
abstract class CertificateDetailsModule {

@Binds
@IntoMap
@CWAViewModelKey(CertificateDetailsViewModel::class)
abstract fun vaccinationDetailsFragment(
factory: CertificateDetailsViewModel.Factory
): CWAViewModelFactory<out CWAViewModel>
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package de.rki.coronawarnapp.greencertificate.ui.certificates.details

sealed class CertificateDetailsNavigation {
object Back : CertificateDetailsNavigation()
data class FullQrCode(val qrCodeText: String) : CertificateDetailsNavigation()
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package de.rki.coronawarnapp.greencertificate.ui.certificates.details

import android.graphics.Bitmap
import androidx.lifecycle.asLiveData
import dagger.assisted.Assisted
import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject
import de.rki.coronawarnapp.greencertificate.ui.certificates.details.CertificateDetailsNavigation
import de.rki.coronawarnapp.presencetracing.checkins.qrcode.QrCodeGenerator
import de.rki.coronawarnapp.util.coroutine.DispatcherProvider
import de.rki.coronawarnapp.util.ui.SingleLiveEvent
import de.rki.coronawarnapp.util.viewmodel.CWAViewModel
import de.rki.coronawarnapp.util.viewmodel.SimpleCWAViewModelFactory
import de.rki.coronawarnapp.vaccination.core.VaccinatedPerson
import de.rki.coronawarnapp.vaccination.core.VaccinationCertificate
import kotlinx.coroutines.flow.MutableStateFlow
import timber.log.Timber

class CertificateDetailsViewModel @AssistedInject constructor(
private val qrCodeGenerator: QrCodeGenerator,
dispatcherProvider: DispatcherProvider,
) : CWAViewModel(dispatcherProvider) {

private var qrCodeText: String? = null
private val mutableStateFlow = MutableStateFlow<Bitmap?>(null)
val qrCode = mutableStateFlow.asLiveData(dispatcherProvider.Default)

val events = SingleLiveEvent<CertificateDetailsNavigation>()

fun onClose() = events.postValue(CertificateDetailsNavigation.Back)

fun openFullScreen() = qrCodeText?.let { events.postValue(CertificateDetailsNavigation.FullQrCode(it)) }

private fun generateQrCode(certificate: VaccinationCertificate?) = launch {
try {
mutableStateFlow.value = certificate?.let {
qrCodeText = it.vaccinationQrCodeString
qrCodeGenerator.createQrCode(it.vaccinationQrCodeString)
}
} catch (e: Exception) {
Timber.d(e, "generateQrCode failed for vaccinationCertificate=%s", certificate)
mutableStateFlow.value = null
}
}

@AssistedFactory
interface Factory : SimpleCWAViewModelFactory<CertificateDetailsViewModel>

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<gradient
android:endColor="#35B55F"
android:startColor="#2E854B" />
</shape>