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 all 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 @@ -34,6 +34,13 @@ class GreenCertificateTestFragment : Fragment(R.layout.fragment_test_green_certi
ratScreen.setOnClickListener {
doNavigate(NavGraphDirections.actionSubmissionTestResultGreenCertificateFragment(RAPID_ANTIGEN))
}

detailsScreen.setOnClickListener {
doNavigate(
GreenCertificateTestFragmentDirections
.actionGreenCertificateTestFragmentToGreenCertificateDetailsFragment()
)
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,5 +29,11 @@
android:layout_height="wrap_content"
android:text="RAT screen" />

<com.google.android.material.button.MaterialButton
android:id="@+id/details_screen"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Details screen" />

</LinearLayout>
</androidx.core.widget.NestedScrollView>
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,5 @@

</androidx.constraintlayout.widget.ConstraintLayout>


</LinearLayout>
</androidx.core.widget.NestedScrollView>
Original file line number Diff line number Diff line change
Expand Up @@ -177,6 +177,7 @@
<action
android:id="@+id/action_vaccinationTestFragment_to_vaccinationDetailsFragment"
app:destination="@id/vaccinationDetailsFragment" />

</fragment>

<fragment
Expand All @@ -192,5 +193,15 @@
android:id="@+id/greenCertificateTestFragment"
android:name="de.rki.coronawarnapp.test.greencertificate.GreenCertificateTestFragment"
android:label="GreenCertificateTestFragment"
tools:layout="@layout/fragment_test_green_certificate" />
tools:layout="@layout/fragment_test_green_certificate" >
<action
android:id="@+id/action_greenCertificateTestFragment_to_greenCertificateDetailsFragment"
app:destination="@id/greenCertificateDetailsFragment" />
</fragment>
<fragment
android:id="@+id/greenCertificateDetailsFragment"
android:name="de.rki.coronawarnapp.greencertificate.ui.certificates.details.GreenCertificateDetailsFragment"
android:label="GreenCertificateDetailsFragment"
tools:layout="@layout/fragment_greencertificate_details" />

</navigation>
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,15 @@ 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.GreenCertificateDetailsFragment
import de.rki.coronawarnapp.greencertificate.ui.certificates.details.GreenCertificateDetailsModule

@Module
abstract class GreenCertificateUIModule {

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

@ContributesAndroidInjector(modules = [GreenCertificateDetailsModule::class])
abstract fun certificateDetailsFragment(): GreenCertificateDetailsFragment
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
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.FragmentGreencertificateDetailsBinding
import de.rki.coronawarnapp.ui.view.onOffsetChange
import de.rki.coronawarnapp.util.di.AutoInject
import de.rki.coronawarnapp.util.setUrl
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 javax.inject.Inject

class GreenCertificateDetailsFragment : Fragment(R.layout.fragment_greencertificate_details), AutoInject {

@Inject lateinit var viewModelFactory: CWAViewModelFactoryProvider.Factory
private val binding: FragmentGreencertificateDetailsBinding by viewBinding()
private val viewModel: GreenCertificateDetailsViewModel by cwaViewModels { viewModelFactory }

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

qrCodeCard.title.text = getString(R.string.detail_green_certificate_card_title)
qrCodeCard.subtitle.text = "Test durchgeführt am 12.05.21 18:01" // will be changed

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

if (travelNoticeGerman.text ==
requireContext().getString(R.string.green_certificate_attribute_certificate_travel_notice_german)
) {
travelNoticeGerman.setUrl(
R.string.green_certificate_attribute_certificate_travel_notice_german,
R.string.green_certificate_travel_notice_link_de,
R.string.green_certificate_travel_notice_link_de
)
}

if (travelNoticeEnglish.text ==
requireContext().getString(R.string.green_certificate_attribute_certificate_travel_notice_english)
) {
travelNoticeEnglish.setUrl(
R.string.green_certificate_attribute_certificate_travel_notice_english,
R.string.green_certificate_travel_notice_link_en,
R.string.green_certificate_travel_notice_link_en
)
}

setToolbarOverlay()

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

// TODO: Will in the future be called when the data is loaded from the database
viewModel.generateQrCode()
}

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) + 170
binding.subtitle.requestLayout()

val behavior: AppBarLayout.ScrollingViewBehavior = params.behavior as (AppBarLayout.ScrollingViewBehavior)
behavior.overlayTop = (width / 3) + 170
}
}
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 GreenCertificateDetailsModule {

@Binds
@IntoMap
@CWAViewModelKey(GreenCertificateDetailsViewModel::class)
abstract fun greenCertificateDetailsFragment(
factory: GreenCertificateDetailsViewModel.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 GreenCertificateDetailsNavigation {
object Back : GreenCertificateDetailsNavigation()
data class FullQrCode(val qrCodeText: String) : GreenCertificateDetailsNavigation()
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package de.rki.coronawarnapp.greencertificate.ui.certificates.details

import android.graphics.Bitmap
import androidx.lifecycle.asLiveData
import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject
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 kotlinx.coroutines.flow.MutableStateFlow
import timber.log.Timber

class GreenCertificateDetailsViewModel @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<GreenCertificateDetailsNavigation>()

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

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

/* TODO: Adapt to Green Certificate */
fun generateQrCode() = launch {
try {
mutableStateFlow.value = qrCodeGenerator.createQrCode("Sample String")
} catch (e: Exception) {
Timber.d(e, "generateQrCode failed for greenCertificate=%s", "Sample Certificate")
mutableStateFlow.value = null
}
}

@AssistedFactory
interface Factory : SimpleCWAViewModelFactory<GreenCertificateDetailsViewModel>
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package de.rki.coronawarnapp.vaccination.ui.list.adapter.viewholder
import android.graphics.Bitmap
import android.view.ViewGroup
import de.rki.coronawarnapp.R
import de.rki.coronawarnapp.databinding.VaccinationListQrcodeCardBinding
import de.rki.coronawarnapp.databinding.IncludeCertificateQrcodeCardBinding
import de.rki.coronawarnapp.util.TimeAndDateExtensions.toShortDayFormat
import de.rki.coronawarnapp.vaccination.ui.list.adapter.VaccinationListAdapter
import de.rki.coronawarnapp.vaccination.ui.list.adapter.VaccinationListItem
Expand All @@ -12,16 +12,16 @@ import org.joda.time.Instant
import org.joda.time.LocalDate

class VaccinationListQrCodeCardItemVH(parent: ViewGroup) :
VaccinationListAdapter.ItemVH<VaccinationListQrCodeCardItem, VaccinationListQrcodeCardBinding>(
layoutRes = R.layout.vaccination_list_qrcode_card,
VaccinationListAdapter.ItemVH<VaccinationListQrCodeCardItem, IncludeCertificateQrcodeCardBinding>(
layoutRes = R.layout.include_certificate_qrcode_card,
parent = parent
) {

override val viewBinding: Lazy<VaccinationListQrcodeCardBinding> = lazy {
VaccinationListQrcodeCardBinding.bind(itemView)
override val viewBinding: Lazy<IncludeCertificateQrcodeCardBinding> = lazy {
IncludeCertificateQrcodeCardBinding.bind(itemView)
}

override val onBindData: VaccinationListQrcodeCardBinding
override val onBindData: IncludeCertificateQrcodeCardBinding
.(item: VaccinationListQrCodeCardItem, payloads: List<Any>) -> Unit =
{ item, _ ->
image.setImageBitmap(item.qrCode)
Expand Down
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>