From 8043aee777b0e8b6abf3d065062689f163a9442e Mon Sep 17 00:00:00 2001 From: Mykhailo Nester Date: Mon, 30 Aug 2021 16:25:52 +0300 Subject: [PATCH] - add new resources and update UI; (#103) - clean up code; --- .idea/codeStyles/Project.xml | 16 - .idea/gradle.xml | 3 +- .idea/misc.xml | 5 + .../wallet/app/android/LicensesActivity.kt | 5 +- .../dgca/wallet/app/android/MainActivity.kt | 4 +- .../certificate/CertificatesFragment.kt | 2 +- .../certificate/CertificatesViewModel.kt | 7 +- .../certificate/claim/TestViewHolder.kt | 6 +- .../certificate/ViewCertificateFragment.kt | 23 +- .../validity/CertificateValidityFragment.kt | 4 +- .../validity/rules/RulesValidationFragment.kt | 1 - .../rules/RulesValidationViewModel.kt | 2 +- .../wallet/app/android/nfc/DCCApduService.kt | 2 - app/src/main/res/drawable/ic_import_image.xml | 12 + app/src/main/res/drawable/ic_import_pdf.xml | 9 + app/src/main/res/drawable/ic_nfc.xml | 9 + app/src/main/res/drawable/ic_scan.xml | 33 +++ .../main/res/layout/certificate_card_file.xml | 4 +- .../res/layout/certificate_card_header.xml | 11 +- .../main/res/layout/certificate_card_view.xml | 5 +- .../res/layout/dialog_fragment_add_new.xml | 14 +- .../res/layout/fragment_certificate_claim.xml | 42 ++- .../res/layout/fragment_certificate_view.xml | 279 +++++++++--------- .../main/res/layout/fragment_certificates.xml | 35 +-- app/src/main/res/values/strings.xml | 9 +- app/src/main/res/values/themes.xml | 1 + app/src/main/res/xml/provider_paths.xml | 5 +- 27 files changed, 290 insertions(+), 258 deletions(-) create mode 100644 app/src/main/res/drawable/ic_import_image.xml create mode 100644 app/src/main/res/drawable/ic_import_pdf.xml create mode 100644 app/src/main/res/drawable/ic_nfc.xml create mode 100644 app/src/main/res/drawable/ic_scan.xml diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml index 992af513..3b523f57 100644 --- a/.idea/codeStyles/Project.xml +++ b/.idea/codeStyles/Project.xml @@ -1,22 +1,6 @@ - - diff --git a/.idea/gradle.xml b/.idea/gradle.xml index f13a50dd..192f0c29 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -4,7 +4,7 @@ diff --git a/.idea/misc.xml b/.idea/misc.xml index c2ba1a9b..841b2d93 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -3,12 +3,17 @@ diff --git a/app/src/main/java/dgca/wallet/app/android/LicensesActivity.kt b/app/src/main/java/dgca/wallet/app/android/LicensesActivity.kt index e06acecf..20237c2c 100644 --- a/app/src/main/java/dgca/wallet/app/android/LicensesActivity.kt +++ b/app/src/main/java/dgca/wallet/app/android/LicensesActivity.kt @@ -13,23 +13,22 @@ * Created by Matthieu De Beule on 11/06/2021, 08:39 */ -package dgca.wallet.app.android; +package dgca.wallet.app.android import android.graphics.Typeface import android.os.Bundle import android.text.util.Linkify import android.widget.ArrayAdapter -import android.widget.ListView import android.widget.TextView import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AppCompatActivity import dgca.wallet.app.android.databinding.ActivityLicensesBinding -import dgca.wallet.app.android.databinding.FragmentSettingsBinding import java.nio.charset.Charset import java.util.* //Largely inspired by https://github.com/mozilla-mobile/fenix/pull/13767/ class LicensesActivity : AppCompatActivity() { + private lateinit var binding: ActivityLicensesBinding override fun onCreate(savedInstanceState: Bundle?) { diff --git a/app/src/main/java/dgca/wallet/app/android/MainActivity.kt b/app/src/main/java/dgca/wallet/app/android/MainActivity.kt index 5aa7da7e..28f89652 100644 --- a/app/src/main/java/dgca/wallet/app/android/MainActivity.kt +++ b/app/src/main/java/dgca/wallet/app/android/MainActivity.kt @@ -50,7 +50,9 @@ class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - window.setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE) + if (!BuildConfig.DEBUG) { + window.setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE) + } binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) diff --git a/app/src/main/java/dgca/wallet/app/android/certificate/CertificatesFragment.kt b/app/src/main/java/dgca/wallet/app/android/certificate/CertificatesFragment.kt index 459740bb..518a039b 100644 --- a/app/src/main/java/dgca/wallet/app/android/certificate/CertificatesFragment.kt +++ b/app/src/main/java/dgca/wallet/app/android/certificate/CertificatesFragment.kt @@ -65,7 +65,7 @@ class CertificatesFragment : BindingFragment(), viewModel.certificates.observe(viewLifecycleOwner, { setCertificateCards(it) }) viewModel.inProgress.observe(viewLifecycleOwner, { binding.progressView.isVisible = it }) - viewModel.fetchCertificates() + viewModel.fetchCertificates(requireContext().filesDir) setFragmentResultListener(AddNewBottomDialogFragment.REQUEST_KEY) { key, bundle -> findNavController().navigateUp() diff --git a/app/src/main/java/dgca/wallet/app/android/certificate/CertificatesViewModel.kt b/app/src/main/java/dgca/wallet/app/android/certificate/CertificatesViewModel.kt index 4be773c4..bf02b75d 100644 --- a/app/src/main/java/dgca/wallet/app/android/certificate/CertificatesViewModel.kt +++ b/app/src/main/java/dgca/wallet/app/android/certificate/CertificatesViewModel.kt @@ -22,13 +22,11 @@ package dgca.wallet.app.android.certificate -import android.content.Context import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel -import dagger.hilt.android.qualifiers.ApplicationContext import dgca.wallet.app.android.data.WalletRepository import kotlinx.coroutines.launch import java.io.File @@ -36,7 +34,6 @@ import javax.inject.Inject @HiltViewModel class CertificatesViewModel @Inject constructor( - @ApplicationContext private val context: Context, private val walletRepository: WalletRepository ) : ViewModel() { @@ -46,7 +43,7 @@ class CertificatesViewModel @Inject constructor( private val _inProgress = MutableLiveData() val inProgress: LiveData = _inProgress - fun fetchCertificates() { + fun fetchCertificates(filesDir: File) { _inProgress.value = true viewModelScope.launch { val certificateCards = walletRepository.getCertificates() @@ -56,7 +53,7 @@ class CertificatesViewModel @Inject constructor( certificatesCards.addAll(certificateCards) } - val imagesDir = File(context.filesDir, "images") + val imagesDir = File(filesDir, "images") val imageFileCards = mutableListOf() val pdfFileCards = mutableListOf() imagesDir.listFiles()?.reversed()?.forEach { file -> diff --git a/app/src/main/java/dgca/wallet/app/android/certificate/claim/TestViewHolder.kt b/app/src/main/java/dgca/wallet/app/android/certificate/claim/TestViewHolder.kt index 29faae9d..552f912c 100644 --- a/app/src/main/java/dgca/wallet/app/android/certificate/claim/TestViewHolder.kt +++ b/app/src/main/java/dgca/wallet/app/android/certificate/claim/TestViewHolder.kt @@ -23,7 +23,6 @@ package dgca.wallet.app.android.certificate.claim import android.view.LayoutInflater -import android.view.View import android.view.ViewGroup import androidx.recyclerview.widget.RecyclerView import dgca.wallet.app.android.data.TestModel @@ -35,7 +34,10 @@ class TestViewHolder(private val binding: ItemTestBinding) : RecyclerView.ViewHo fun bind(data: TestModel) { binding.testResultValue.text = data.resultType.value binding.dateOfCollectionValue.text = data.dateTimeOfCollection.toFormattedDateTime() - (data.dateTimeOfTestResult?.toFormattedDateTime() ?: "").bindText(binding.dateOfTestResultTitle, binding.dateOfTestResultValue) + (data.dateTimeOfTestResult?.toFormattedDateTime() ?: "").bindText( + binding.dateOfTestResultTitle, + binding.dateOfTestResultValue + ) binding.diseaseValue.text = data.disease.value binding.typeOfTestValue.text = data.typeOfTest.value diff --git a/app/src/main/java/dgca/wallet/app/android/certificate/view/certificate/ViewCertificateFragment.kt b/app/src/main/java/dgca/wallet/app/android/certificate/view/certificate/ViewCertificateFragment.kt index b55f28b1..c99fabab 100644 --- a/app/src/main/java/dgca/wallet/app/android/certificate/view/certificate/ViewCertificateFragment.kt +++ b/app/src/main/java/dgca/wallet/app/android/certificate/view/certificate/ViewCertificateFragment.kt @@ -41,8 +41,6 @@ import dagger.hilt.android.AndroidEntryPoint import dgca.wallet.app.android.R import dgca.wallet.app.android.base.BindingFragment import dgca.wallet.app.android.certificate.claim.CertListAdapter -import dgca.wallet.app.android.certificate.claim.bindText -import dgca.wallet.app.android.data.CertificateModel import dgca.wallet.app.android.data.getCertificateListData import dgca.wallet.app.android.databinding.FragmentCertificateViewBinding import dgca.wallet.app.android.nfc.DCCApduService @@ -101,7 +99,7 @@ class ViewCertificateFragment : BindingFragment( binding.qrCode.setImageBitmap(it.qrCode) binding.tan.text = getString(R.string.tan_placeholder, it.certificatesCard.tan) - showUserData(certificate) + binding.personFullName.text = certificate.getFullName() adapter.update(certificate.getCertificateListData()) }) viewModel.event.observe(viewLifecycleOwner) { event -> @@ -129,8 +127,10 @@ class ViewCertificateFragment : BindingFragment( binding.nfcAction.setOnCheckedChangeListener { _, isChecked -> if (isChecked) { initNFCFunction() + binding.nfcSwitchText.text = getString(R.string.nfc_on) } else { stopNfcService() + binding.nfcSwitchText.text = getString(R.string.nfc_off) } } } @@ -172,21 +172,6 @@ class ViewCertificateFragment : BindingFragment( Toast.makeText(requireContext(), R.string.file_preparation_error, Toast.LENGTH_SHORT).show() } - private fun showUserData(certificate: CertificateModel) { - certificate.getFullName().bindText(binding.nameTitle, binding.personFullName) - -// val dateOfBirthday = certificate.dateOfBirth.parseFromTo(YEAR_MONTH_DAY, FORMATTED_YEAR_MONTH_DAY) -// if (dateOfBirthday.isNotBlank()) { -// binding.dateOfBirth.text = dateOfBirthday -// View.VISIBLE -// } else { -// View.GONE -// }.apply { -// binding.dateOfBirthTitle.visibility = this -// binding.dateOfBirth.visibility = this -// } - } - private fun onViewModelEvent(event: ViewCertificateViewModel.ViewCertEvent) { when (event) { is ViewCertificateViewModel.ViewCertEvent.OnCertDeleted -> findNavController().popBackStack() @@ -195,7 +180,7 @@ class ViewCertificateFragment : BindingFragment( private fun initNFCFunction() { if (!requireActivity().packageManager.hasSystemFeature(PackageManager.FEATURE_NFC_HOST_CARD_EMULATION)) { - binding.nfcStatus.text = getString(R.string.no_nfc) + binding.nfcGroup.isVisible = false return } diff --git a/app/src/main/java/dgca/wallet/app/android/certificate/view/certificate/validity/CertificateValidityFragment.kt b/app/src/main/java/dgca/wallet/app/android/certificate/view/certificate/validity/CertificateValidityFragment.kt index 7265f9bf..53511e2b 100644 --- a/app/src/main/java/dgca/wallet/app/android/certificate/view/certificate/validity/CertificateValidityFragment.kt +++ b/app/src/main/java/dgca/wallet/app/android/certificate/view/certificate/validity/CertificateValidityFragment.kt @@ -34,8 +34,6 @@ import androidx.navigation.fragment.navArgs import dagger.hilt.android.AndroidEntryPoint import dgca.verifier.app.engine.UTC_ZONE_ID import dgca.verifier.app.engine.data.source.countries.COUNTRIES_MAP -import dgca.wallet.app.android.certificate.view.certificate.validity.CertificateValidityFragmentArgs -import dgca.wallet.app.android.certificate.view.certificate.validity.CertificateValidityFragmentDirections import dgca.wallet.app.android.data.local.rules.Converters import dgca.wallet.app.android.databinding.FragmentValidityCertificateBinding import java.time.LocalDate @@ -51,7 +49,7 @@ class CertificateValidityFragment : Fragment() { private val viewModel by viewModels() - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { _binding = FragmentValidityCertificateBinding.inflate(inflater, container, false) return binding.root } diff --git a/app/src/main/java/dgca/wallet/app/android/certificate/view/certificate/validity/rules/RulesValidationFragment.kt b/app/src/main/java/dgca/wallet/app/android/certificate/view/certificate/validity/rules/RulesValidationFragment.kt index 28198461..e02fcdb6 100644 --- a/app/src/main/java/dgca/wallet/app/android/certificate/view/certificate/validity/rules/RulesValidationFragment.kt +++ b/app/src/main/java/dgca/wallet/app/android/certificate/view/certificate/validity/rules/RulesValidationFragment.kt @@ -35,7 +35,6 @@ import androidx.recyclerview.widget.LinearLayoutManager import dagger.hilt.android.AndroidEntryPoint import dgca.verifier.app.engine.Result import dgca.wallet.app.android.R -import dgca.wallet.app.android.certificate.view.certificate.validity.rules.RulesValidationFragmentArgs import dgca.wallet.app.android.data.local.rules.Converters import dgca.wallet.app.android.databinding.FragmentRulesValidatationBinding diff --git a/app/src/main/java/dgca/wallet/app/android/certificate/view/certificate/validity/rules/RulesValidationViewModel.kt b/app/src/main/java/dgca/wallet/app/android/certificate/view/certificate/validity/rules/RulesValidationViewModel.kt index 262fa983..7848b8e0 100644 --- a/app/src/main/java/dgca/wallet/app/android/certificate/view/certificate/validity/rules/RulesValidationViewModel.kt +++ b/app/src/main/java/dgca/wallet/app/android/certificate/view/certificate/validity/rules/RulesValidationViewModel.kt @@ -65,7 +65,7 @@ class RulesValidationViewModel @Inject constructor( private val _validationResults = MutableLiveData?>() val validationResults: LiveData?> = _validationResults - private val _inProgress = MutableLiveData(true) + private val _inProgress = MutableLiveData(true) val inProgress: LiveData = _inProgress fun validate(qrCodeText: String, selectedCountry: String, zonedDateTime: ZonedDateTime) { diff --git a/app/src/main/java/dgca/wallet/app/android/nfc/DCCApduService.kt b/app/src/main/java/dgca/wallet/app/android/nfc/DCCApduService.kt index 8a3e160a..2ed1267d 100644 --- a/app/src/main/java/dgca/wallet/app/android/nfc/DCCApduService.kt +++ b/app/src/main/java/dgca/wallet/app/android/nfc/DCCApduService.kt @@ -284,7 +284,5 @@ class DCCApduService : HostApduService() { companion object { const val NFC_NDEF_KEY = "ndefMessage" - const val NFC_TAG_DCC = "DCC:" - const val NFC_TAG_TAN = "TAN:" } } \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_import_image.xml b/app/src/main/res/drawable/ic_import_image.xml new file mode 100644 index 00000000..6e249d2c --- /dev/null +++ b/app/src/main/res/drawable/ic_import_image.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_import_pdf.xml b/app/src/main/res/drawable/ic_import_pdf.xml new file mode 100644 index 00000000..ab693469 --- /dev/null +++ b/app/src/main/res/drawable/ic_import_pdf.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_nfc.xml b/app/src/main/res/drawable/ic_nfc.xml new file mode 100644 index 00000000..e9261f7b --- /dev/null +++ b/app/src/main/res/drawable/ic_nfc.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_scan.xml b/app/src/main/res/drawable/ic_scan.xml new file mode 100644 index 00000000..a5cbc2cd --- /dev/null +++ b/app/src/main/res/drawable/ic_scan.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/certificate_card_file.xml b/app/src/main/res/layout/certificate_card_file.xml index d99a4e22..89a841e0 100644 --- a/app/src/main/res/layout/certificate_card_file.xml +++ b/app/src/main/res/layout/certificate_card_file.xml @@ -36,7 +36,7 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginStart="16dp" - android:layout_marginTop="16dp" + android:layout_marginTop="8dp" android:layout_marginEnd="16dp" android:ellipsize="end" android:lines="1" @@ -51,7 +51,7 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginTop="5dp" - android:layout_marginBottom="16dp" + android:layout_marginBottom="8dp" android:ellipsize="end" android:lines="1" android:textColor="@color/blue" diff --git a/app/src/main/res/layout/certificate_card_header.xml b/app/src/main/res/layout/certificate_card_header.xml index 4ffb48ef..19b102eb 100644 --- a/app/src/main/res/layout/certificate_card_header.xml +++ b/app/src/main/res/layout/certificate_card_header.xml @@ -21,10 +21,11 @@ --> \ No newline at end of file + android:layout_height="wrap_content" + android:paddingHorizontal="@dimen/default_padding" + android:paddingVertical="4dp" + android:textSize="20sp" + tools:text="Certificates" /> \ No newline at end of file diff --git a/app/src/main/res/layout/certificate_card_view.xml b/app/src/main/res/layout/certificate_card_view.xml index 4cfc7832..f2dd2ae0 100644 --- a/app/src/main/res/layout/certificate_card_view.xml +++ b/app/src/main/res/layout/certificate_card_view.xml @@ -36,7 +36,7 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginStart="16dp" - android:layout_marginTop="16dp" + android:layout_marginTop="8dp" android:layout_marginEnd="16dp" android:ellipsize="end" android:lines="1" @@ -69,7 +69,7 @@ android:layout_marginStart="16dp" android:layout_marginTop="5dp" android:layout_marginEnd="16dp" - android:layout_marginBottom="16dp" + android:layout_marginBottom="8dp" android:maxLines="2" android:textColor="@color/black" android:textSize="16sp" @@ -98,4 +98,5 @@ app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/nameView" /> + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_fragment_add_new.xml b/app/src/main/res/layout/dialog_fragment_add_new.xml index 3f22df05..bfdc6bd9 100644 --- a/app/src/main/res/layout/dialog_fragment_add_new.xml +++ b/app/src/main/res/layout/dialog_fragment_add_new.xml @@ -22,17 +22,21 @@ + android:layout_height="wrap_content" + android:paddingVertical="@dimen/default_padding" + tools:background="@color/white"> @@ -40,10 +44,11 @@ @@ -51,10 +56,11 @@ diff --git a/app/src/main/res/layout/fragment_certificate_claim.xml b/app/src/main/res/layout/fragment_certificate_claim.xml index 9b512896..2cc26db3 100644 --- a/app/src/main/res/layout/fragment_certificate_claim.xml +++ b/app/src/main/res/layout/fragment_certificate_claim.xml @@ -135,38 +135,36 @@ - - + +