From 9cbb35ccc65db7b5d8ce1afe4b3c5feae30be1eb Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Fri, 26 Jun 2020 11:25:48 -0300 Subject: [anastasis] add more countries and allow switching between them --- .../java/org/gnu/anastasis/ui/MainViewModel.kt | 3 + .../ui/identity/ChangeLocationFragment.kt | 62 ++++++++++++++++++ .../gnu/anastasis/ui/identity/IdentityFragment.kt | 17 +++-- .../org/gnu/anastasis/ui/identity/Locations.kt | 29 +++++++++ .../src/main/res/layout/country_germany.xml | 54 ++++++++++++++++ anastasis-ui/src/main/res/layout/country_india.xml | 38 +++++++++++ .../src/main/res/layout/country_switzerland.xml | 54 ++++++++++++++++ anastasis-ui/src/main/res/layout/country_usa.xml | 38 +++++++++++ .../main/res/layout/fragment_change_location.xml | 74 ++++++++++++++++++++++ .../src/main/res/layout/fragment_identity.xml | 52 +++------------ anastasis-ui/src/main/res/navigation/anastasis.xml | 13 ++++ 11 files changed, 388 insertions(+), 46 deletions(-) create mode 100644 anastasis-ui/src/main/java/org/gnu/anastasis/ui/identity/ChangeLocationFragment.kt create mode 100644 anastasis-ui/src/main/java/org/gnu/anastasis/ui/identity/Locations.kt create mode 100644 anastasis-ui/src/main/res/layout/country_germany.xml create mode 100644 anastasis-ui/src/main/res/layout/country_india.xml create mode 100644 anastasis-ui/src/main/res/layout/country_switzerland.xml create mode 100644 anastasis-ui/src/main/res/layout/country_usa.xml create mode 100644 anastasis-ui/src/main/res/layout/fragment_change_location.xml (limited to 'anastasis-ui/src') diff --git a/anastasis-ui/src/main/java/org/gnu/anastasis/ui/MainViewModel.kt b/anastasis-ui/src/main/java/org/gnu/anastasis/ui/MainViewModel.kt index 7bcfc19..3b97578 100644 --- a/anastasis-ui/src/main/java/org/gnu/anastasis/ui/MainViewModel.kt +++ b/anastasis-ui/src/main/java/org/gnu/anastasis/ui/MainViewModel.kt @@ -19,9 +19,12 @@ package org.gnu.anastasis.ui import android.app.Application import androidx.lifecycle.AndroidViewModel import androidx.lifecycle.MutableLiveData +import org.gnu.anastasis.ui.identity.LOCATIONS class MainViewModel(private val app: Application) : AndroidViewModel(app) { + val currentCountry = MutableLiveData(LOCATIONS[0]) + val securityQuestionChecked = MutableLiveData() val smsChecked = MutableLiveData() val videoChecked = MutableLiveData() diff --git a/anastasis-ui/src/main/java/org/gnu/anastasis/ui/identity/ChangeLocationFragment.kt b/anastasis-ui/src/main/java/org/gnu/anastasis/ui/identity/ChangeLocationFragment.kt new file mode 100644 index 0000000..5b68d36 --- /dev/null +++ b/anastasis-ui/src/main/java/org/gnu/anastasis/ui/identity/ChangeLocationFragment.kt @@ -0,0 +1,62 @@ +/* + * This file is part of GNU Taler + * (C) 2020 Taler Systems S.A. + * + * GNU Taler is free software; you can redistribute it and/or modify it under the + * terms of the GNU General Public License as published by the Free Software + * Foundation; either version 3, or (at your option) any later version. + * + * GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with + * GNU Taler; see the file COPYING. If not, see + */ + +package org.gnu.anastasis.ui.identity + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.Fragment +import androidx.fragment.app.activityViewModels +import androidx.navigation.fragment.findNavController +import kotlinx.android.synthetic.main.fragment_change_location.* +import org.gnu.anastasis.ui.MainViewModel +import org.gnu.anastasis.ui.R + +class ChangeLocationFragment : Fragment() { + + private val viewModel: MainViewModel by activityViewModels() + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + return inflater.inflate(R.layout.fragment_change_location, container, false) + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + switzerlandView.setOnClickListener { + changeCountry(LOCATIONS[0]) + } + germanyView.setOnClickListener { + changeCountry(LOCATIONS[1]) + } + usaView.setOnClickListener { + changeCountry(LOCATIONS[2]) + } + indiaView.setOnClickListener { + changeCountry(LOCATIONS[3]) + } + } + + private fun changeCountry(location: Location) { + viewModel.currentCountry.value = location + findNavController().popBackStack() + } + +} diff --git a/anastasis-ui/src/main/java/org/gnu/anastasis/ui/identity/IdentityFragment.kt b/anastasis-ui/src/main/java/org/gnu/anastasis/ui/identity/IdentityFragment.kt index d391c5d..40fa477 100644 --- a/anastasis-ui/src/main/java/org/gnu/anastasis/ui/identity/IdentityFragment.kt +++ b/anastasis-ui/src/main/java/org/gnu/anastasis/ui/identity/IdentityFragment.kt @@ -26,12 +26,14 @@ import android.view.View import android.view.ViewGroup import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels +import androidx.lifecycle.Observer import androidx.navigation.fragment.findNavController -import com.google.android.material.snackbar.Snackbar import kotlinx.android.synthetic.main.fragment_identity.* import org.gnu.anastasis.ui.MainViewModel import org.gnu.anastasis.ui.R -import java.util.* +import java.util.Calendar +import java.util.Date +import java.util.Locale import java.util.concurrent.TimeUnit.DAYS private const val MIN_AGE = 18 @@ -50,9 +52,15 @@ class AnastasisIdentityFragment : Fragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - countryView.text = getCountryName() + model.currentCountry.observe(viewLifecycleOwner, Observer { country -> + countryView.text = country.name + if (stub != null) { + stub.layoutResource = country.layoutRes + stub.inflate() + } + }) changeCountryView.setOnClickListener { - Snackbar.make(view, "Not implemented", Snackbar.LENGTH_SHORT).show() + findNavController().navigate(R.id.action_nav_anastasis_identity_to_nav_change_location) } birthDateInput.editText?.setOnClickListener { val picker = DatePickerDialog(requireContext()) @@ -72,6 +80,7 @@ class AnastasisIdentityFragment : Fragment() { } } + @Suppress("unused") private fun getCountryName(): String { val tm = requireContext().getSystemService(TelephonyManager::class.java)!! val countryIso = if (tm.networkCountryIso.isNullOrEmpty()) { diff --git a/anastasis-ui/src/main/java/org/gnu/anastasis/ui/identity/Locations.kt b/anastasis-ui/src/main/java/org/gnu/anastasis/ui/identity/Locations.kt new file mode 100644 index 0000000..13658d2 --- /dev/null +++ b/anastasis-ui/src/main/java/org/gnu/anastasis/ui/identity/Locations.kt @@ -0,0 +1,29 @@ +/* + * This file is part of GNU Taler + * (C) 2020 Taler Systems S.A. + * + * GNU Taler is free software; you can redistribute it and/or modify it under the + * terms of the GNU General Public License as published by the Free Software + * Foundation; either version 3, or (at your option) any later version. + * + * GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with + * GNU Taler; see the file COPYING. If not, see + */ + +package org.gnu.anastasis.ui.identity + +import androidx.annotation.LayoutRes +import org.gnu.anastasis.ui.R + +data class Location(val name: String, @LayoutRes val layoutRes: Int) + +val LOCATIONS = listOf( + Location("Switzerland", R.layout.country_switzerland), + Location("Germany", R.layout.country_germany), + Location("Unites States", R.layout.country_usa), + Location("India", R.layout.country_india) +) diff --git a/anastasis-ui/src/main/res/layout/country_germany.xml b/anastasis-ui/src/main/res/layout/country_germany.xml new file mode 100644 index 0000000..5b54843 --- /dev/null +++ b/anastasis-ui/src/main/res/layout/country_germany.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + diff --git a/anastasis-ui/src/main/res/layout/country_india.xml b/anastasis-ui/src/main/res/layout/country_india.xml new file mode 100644 index 0000000..a12616e --- /dev/null +++ b/anastasis-ui/src/main/res/layout/country_india.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + diff --git a/anastasis-ui/src/main/res/layout/country_switzerland.xml b/anastasis-ui/src/main/res/layout/country_switzerland.xml new file mode 100644 index 0000000..0fc71fc --- /dev/null +++ b/anastasis-ui/src/main/res/layout/country_switzerland.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + diff --git a/anastasis-ui/src/main/res/layout/country_usa.xml b/anastasis-ui/src/main/res/layout/country_usa.xml new file mode 100644 index 0000000..f9762e6 --- /dev/null +++ b/anastasis-ui/src/main/res/layout/country_usa.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + diff --git a/anastasis-ui/src/main/res/layout/fragment_change_location.xml b/anastasis-ui/src/main/res/layout/fragment_change_location.xml new file mode 100644 index 0000000..93c919f --- /dev/null +++ b/anastasis-ui/src/main/res/layout/fragment_change_location.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + + + diff --git a/anastasis-ui/src/main/res/layout/fragment_identity.xml b/anastasis-ui/src/main/res/layout/fragment_identity.xml index e24be31..072414d 100644 --- a/anastasis-ui/src/main/res/layout/fragment_identity.xml +++ b/anastasis-ui/src/main/res/layout/fragment_identity.xml @@ -49,7 +49,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="16dp" - android:text="Detected Country:" + android:text="Country:" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/identityIntro" /> @@ -87,8 +87,8 @@ + android:hint="Name" + android:inputType="textPersonName|textCapWords" /> @@ -105,8 +105,8 @@ + android:hint="Place of birth" + android:inputType="text|textCapWords" /> @@ -129,46 +129,14 @@ - - - - - - - - - - - + app:layout_constraintTop_toBottomOf="@+id/birthDateInput" />