Skip to content

Commit f85fe17

Browse files
- add timer to dismiss screen after 15sec; (eu-digital-green-certificates#52)
1 parent 45e8342 commit f85fe17

File tree

2 files changed

+50
-32
lines changed

2 files changed

+50
-32
lines changed

app/src/main/java/dgca/verifier/app/android/verification/VerificationDialogFragment.kt

Lines changed: 28 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,14 @@ import com.google.android.material.bottomsheet.BottomSheetDialog
4040
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
4141
import com.google.android.material.button.MaterialButton
4242
import dagger.hilt.android.AndroidEntryPoint
43-
import dgca.verifier.app.android.*
43+
import dgca.verifier.app.android.FORMATTED_YEAR_MONTH_DAY
44+
import dgca.verifier.app.android.R
45+
import dgca.verifier.app.android.YEAR_MONTH_DAY
4446
import dgca.verifier.app.android.databinding.DialogFragmentVerificationBinding
47+
import dgca.verifier.app.android.dpToPx
4548
import dgca.verifier.app.android.model.CertificateData
4649
import dgca.verifier.app.android.model.CertificateModel
50+
import dgca.verifier.app.android.parseFromTo
4751

4852
@ExperimentalUnsignedTypes
4953
@AndroidEntryPoint
@@ -72,7 +76,13 @@ class VerificationDialogFragment : BottomSheetDialogFragment() {
7276

7377
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
7478
super.onViewCreated(view, savedInstanceState)
75-
setViewHeight()
79+
val displayMetrics = DisplayMetrics()
80+
requireActivity().windowManager.defaultDisplay.getMetrics(displayMetrics)
81+
val height = displayMetrics.heightPixels
82+
val params = binding.content.layoutParams as FrameLayout.LayoutParams
83+
params.height = height - TOP_MARGIN.dpToPx()
84+
85+
binding.timerView.translationX = -displayMetrics.widthPixels.toFloat()
7686

7787
dialog.expand()
7888

@@ -83,7 +93,6 @@ class VerificationDialogFragment : BottomSheetDialogFragment() {
8393

8494
viewModel.verificationResult.observe(viewLifecycleOwner, {
8595
setCertStatusUI(it.isValid())
86-
8796
setCertDataVisibility(it.isValid())
8897
})
8998
viewModel.verificationError.observe(viewLifecycleOwner, {
@@ -96,10 +105,12 @@ class VerificationDialogFragment : BottomSheetDialogFragment() {
96105

97106
val list = getCertificateListData(certificate)
98107
adapter.update(list)
108+
109+
startTimer()
99110
}
100111
})
101112
viewModel.inProgress.observe(viewLifecycleOwner, {
102-
binding.progressContainer.isVisible = it
113+
binding.progressBar.isVisible = it
103114
})
104115

105116
viewModel.init(args.qrCodeText)
@@ -110,14 +121,6 @@ class VerificationDialogFragment : BottomSheetDialogFragment() {
110121
_binding = null
111122
}
112123

113-
private fun setViewHeight() {
114-
val displayMetrics = DisplayMetrics()
115-
requireActivity().windowManager.defaultDisplay.getMetrics(displayMetrics)
116-
val height = displayMetrics.heightPixels
117-
val params = binding.content.layoutParams as FrameLayout.LayoutParams
118-
params.height = height - TOP_MARGIN.dpToPx()
119-
}
120-
121124
private fun setCertStatusUI(isValid: Boolean) {
122125
val text: String
123126
val imageId: Int
@@ -200,8 +203,21 @@ class VerificationDialogFragment : BottomSheetDialogFragment() {
200203
button.setTextColor(ContextCompat.getColor(requireContext(), R.color.black))
201204
}
202205

206+
private fun startTimer() {
207+
binding.timerView.animate()
208+
.setDuration(COLLAPSE_TIME)
209+
.translationX(0F)
210+
.withEndAction {
211+
if (isVisible) {
212+
dismiss()
213+
}
214+
}
215+
.start()
216+
}
217+
203218
companion object {
204219
private const val TOP_MARGIN = 50
220+
private const val COLLAPSE_TIME = 15000L // 15 sec
205221
}
206222
}
207223

app/src/main/res/layout/dialog_fragment_verification.xml

Lines changed: 22 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@
112112
android:layout_width="0dp"
113113
android:layout_height="0dp"
114114
android:background="@color/white"
115-
app:layout_constraintBottom_toTopOf="@id/bottom_container"
115+
app:layout_constraintBottom_toBottomOf="parent"
116116
app:layout_constraintEnd_toEndOf="parent"
117117
app:layout_constraintStart_toStartOf="parent"
118118
app:layout_constraintTop_toBottomOf="@id/verification_status_bg" />
@@ -126,7 +126,6 @@
126126
android:paddingStart="@dimen/default_margin"
127127
android:paddingEnd="@dimen/default_margin"
128128
android:text="@string/reason_for_invalidity"
129-
android:visibility="gone"
130129
app:layout_constraintEnd_toEndOf="parent"
131130
app:layout_constraintStart_toStartOf="parent"
132131
app:layout_constraintTop_toBottomOf="@+id/verification_status_bg" />
@@ -138,23 +137,24 @@
138137
android:layout_height="wrap_content"
139138
android:paddingStart="@dimen/default_margin"
140139
android:paddingEnd="@dimen/default_margin"
141-
android:visibility="gone"
142140
app:layout_constraintEnd_toEndOf="parent"
143141
app:layout_constraintStart_toStartOf="parent"
144142
app:layout_constraintTop_toBottomOf="@+id/reason_for_certificate_invalidity_title"
145-
tools:text="@string/cryptographic_signature_not_valid" />
143+
tools:text="Test error" />
146144

147145
<androidx.constraintlayout.widget.Group
148146
android:id="@+id/errorDetails"
149147
android:layout_width="0dp"
150148
android:layout_height="0dp"
149+
android:visibility="gone"
151150
app:constraint_referenced_ids="reason_for_certificate_invalidity_title, reason_for_certificate_invalidity_name" />
152151

153152
<androidx.core.widget.NestedScrollView
154153
android:id="@+id/nestedScrollView"
155154
android:layout_width="match_parent"
156155
android:layout_height="0dp"
157156
android:paddingHorizontal="@dimen/default_padding"
157+
android:visibility="gone"
158158
app:layout_constraintBottom_toTopOf="@+id/bottom_container"
159159
app:layout_constraintEnd_toEndOf="parent"
160160
app:layout_constraintStart_toStartOf="parent"
@@ -230,11 +230,20 @@
230230
app:layout_constraintEnd_toEndOf="parent"
231231
app:layout_constraintStart_toStartOf="parent" />
232232

233+
<View
234+
android:id="@+id/timer_view"
235+
android:layout_width="match_parent"
236+
android:layout_height="match_parent"
237+
android:background="@color/grey_transparent"
238+
app:layout_constraintEnd_toEndOf="parent"
239+
app:layout_constraintStart_toStartOf="parent"
240+
app:layout_constraintTop_toBottomOf="parent"
241+
app:layout_constraintTop_toTopOf="parent" />
242+
233243
<LinearLayout
234244
android:id="@+id/bottom_container"
235245
android:layout_width="0dp"
236246
android:layout_height="wrap_content"
237-
android:background="@color/white"
238247
android:gravity="center_horizontal"
239248
android:orientation="vertical"
240249
android:paddingBottom="@dimen/default_margin"
@@ -263,21 +272,14 @@
263272
android:src="@drawable/eu_logo_big" />
264273
</LinearLayout>
265274

266-
<LinearLayout
267-
android:id="@+id/progress_container"
268-
android:layout_width="match_parent"
269-
android:layout_height="0dp"
270-
android:layout_marginTop="20dp"
271-
android:background="@color/white"
272-
android:gravity="center"
275+
<ProgressBar
276+
android:id="@+id/progress_bar"
277+
android:layout_width="48dp"
278+
android:layout_height="48dp"
279+
android:indeterminateTint="@color/blue"
273280
app:layout_constraintBottom_toTopOf="@+id/bottom_container"
274-
app:layout_constraintTop_toTopOf="parent">
275-
276-
<ProgressBar
277-
android:id="@+id/progress_bar"
278-
android:layout_width="48dp"
279-
android:layout_height="48dp"
280-
android:indeterminateTint="@color/blue" />
281-
</LinearLayout>
281+
app:layout_constraintEnd_toEndOf="parent"
282+
app:layout_constraintStart_toStartOf="parent"
283+
app:layout_constraintTop_toTopOf="parent" />
282284

283285
</androidx.constraintlayout.widget.ConstraintLayout>

0 commit comments

Comments
 (0)