diff options
12 files changed, 393 insertions, 46 deletions
diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml index 26724fb..dfca6e5 100644 --- a/.idea/codeStyles/Project.xml +++ b/.idea/codeStyles/Project.xml @@ -1,6 +1,11 @@ <component name="ProjectCodeStyleConfiguration"> <code_scheme name="Project" version="173"> <JetCodeStyleSettings> + <option name="PACKAGES_TO_USE_STAR_IMPORTS"> + <value> + <package name="kotlinx.android.synthetic" withSubpackages="true" static="false" /> + </value> + </option> <option name="NAME_COUNT_TO_USE_STAR_IMPORT" value="2147483647" /> <option name="NAME_COUNT_TO_USE_STAR_IMPORT_FOR_MEMBERS" value="2147483647" /> <option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" /> 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<Boolean>() val smsChecked = MutableLiveData<Boolean>() val videoChecked = MutableLiveData<Boolean>() 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 <http://www.gnu.org/licenses/> + */ + +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 <http://www.gnu.org/licenses/> + */ + +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 @@ +<?xml version="1.0" encoding="utf-8"?><!-- + ~ 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 <http://www.gnu.org/licenses/> + --> + +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:padding="16dp" + android:orientation="vertical"> + + <com.google.android.material.textfield.TextInputLayout + android:id="@+id/idNumberInput" + style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.Dense" + android:layout_width="match_parent" + android:layout_height="wrap_content"> + + <com.google.android.material.textfield.TextInputEditText + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:hint="Passport number" + android:inputType="number" + android:maxLength="13" /> + + </com.google.android.material.textfield.TextInputLayout> + + <com.google.android.material.textfield.TextInputLayout + android:id="@+id/taxIdInput" + style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.Dense" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="16dp"> + + <com.google.android.material.textfield.TextInputEditText + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:hint="Krankenversicherungsnummer" + android:inputType="number" + android:maxLength="13" /> + + </com.google.android.material.textfield.TextInputLayout> + +</LinearLayout> 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 @@ +<?xml version="1.0" encoding="utf-8"?><!-- + ~ 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 <http://www.gnu.org/licenses/> + --> + +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical"> + + <com.google.android.material.textfield.TextInputLayout + android:id="@+id/idNumberInput" + style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.Dense" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_margin="16dp"> + + <com.google.android.material.textfield.TextInputEditText + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:hint="Aadhaar number" + android:inputType="number" + android:maxLength="13" /> + + </com.google.android.material.textfield.TextInputLayout> + +</LinearLayout> 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 @@ +<?xml version="1.0" encoding="utf-8"?><!-- + ~ 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 <http://www.gnu.org/licenses/> + --> + +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:padding="16dp" + android:orientation="vertical"> + + <com.google.android.material.textfield.TextInputLayout + android:id="@+id/idNumberInput" + style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.Dense" + android:layout_width="match_parent" + android:layout_height="wrap_content"> + + <com.google.android.material.textfield.TextInputEditText + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:hint="AHV number" + android:inputType="number" + android:maxLength="13" /> + + </com.google.android.material.textfield.TextInputLayout> + + <com.google.android.material.textfield.TextInputLayout + android:id="@+id/taxIdInput" + style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.Dense" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="16dp"> + + <com.google.android.material.textfield.TextInputEditText + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:hint="Krankenversicherungsnummer" + android:inputType="number" + android:maxLength="13" /> + + </com.google.android.material.textfield.TextInputLayout> + +</LinearLayout> 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 @@ +<?xml version="1.0" encoding="utf-8"?><!-- + ~ 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 <http://www.gnu.org/licenses/> + --> + +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical"> + + <com.google.android.material.textfield.TextInputLayout + android:id="@+id/idNumberInput" + style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.Dense" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_margin="16dp"> + + <com.google.android.material.textfield.TextInputEditText + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:hint="Social security number" + android:inputType="number" + android:maxLength="13" /> + + </com.google.android.material.textfield.TextInputLayout> + +</LinearLayout> 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 @@ +<?xml version="1.0" encoding="utf-8"?><!-- + ~ 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 <http://www.gnu.org/licenses/> + --> + +<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + android:layout_width="match_parent" + android:layout_height="match_parent"> + + <TextView + android:id="@+id/usaView" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_marginTop="16dp" + android:background="?selectableItemBackground" + android:padding="16dp" + android:text="United States" + android:textAppearance="@style/TextAppearance.AppCompat.Medium" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" /> + + <TextView + android:id="@+id/germanyView" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_marginTop="16dp" + android:background="?selectableItemBackground" + android:padding="16dp" + android:text="Germany" + android:textAppearance="@style/TextAppearance.AppCompat.Medium" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/usaView" /> + + <TextView + android:id="@+id/switzerlandView" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_marginTop="16dp" + android:background="?selectableItemBackground" + android:padding="16dp" + android:text="Switzerland" + android:textAppearance="@style/TextAppearance.AppCompat.Medium" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/germanyView" /> + + <TextView + android:id="@+id/indiaView" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_marginTop="16dp" + android:background="?selectableItemBackground" + android:padding="16dp" + android:text="India" + android:textAppearance="@style/TextAppearance.AppCompat.Medium" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/switzerlandView" /> + +</androidx.constraintlayout.widget.ConstraintLayout> 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 @@ <com.google.android.material.textfield.TextInputEditText android:layout_width="match_parent" android:layout_height="wrap_content" - android:inputType="textPersonName|textCapWords" - android:hint="Name" /> + android:hint="Name" + android:inputType="textPersonName|textCapWords" /> </com.google.android.material.textfield.TextInputLayout> @@ -105,8 +105,8 @@ <com.google.android.material.textfield.TextInputEditText android:layout_width="match_parent" android:layout_height="wrap_content" - android:inputType="text|textCapWords" - android:hint="Place of birth" /> + android:hint="Place of birth" + android:inputType="text|textCapWords" /> </com.google.android.material.textfield.TextInputLayout> @@ -129,46 +129,14 @@ </com.google.android.material.textfield.TextInputLayout> - <com.google.android.material.textfield.TextInputLayout - android:id="@+id/idNumberInput" - style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.Dense" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_margin="16dp" - app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@+id/birthDateInput" - app:layout_constraintVertical_bias="0.0"> - - <com.google.android.material.textfield.TextInputEditText - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:hint="AHV number" - android:inputType="number" - android:maxLength="13" /> - - </com.google.android.material.textfield.TextInputLayout> - - <com.google.android.material.textfield.TextInputLayout - android:id="@+id/taxIdInput" - style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.Dense" - android:layout_width="match_parent" + <ViewStub + android:id="@+id/stub" + android:layout_width="0dp" android:layout_height="wrap_content" - android:layout_margin="16dp" - app:layout_constraintBottom_toTopOf="@+id/createIdentifierButton" + android:layout="@layout/country_switzerland" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@+id/idNumberInput" - app:layout_constraintVertical_bias="0.0"> - - <com.google.android.material.textfield.TextInputEditText - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:hint="Tax ID number" - android:inputType="number" - android:maxLength="13" /> - - </com.google.android.material.textfield.TextInputLayout> + app:layout_constraintTop_toBottomOf="@+id/birthDateInput" /> <Button android:id="@+id/createIdentifierButton" diff --git a/anastasis-ui/src/main/res/navigation/anastasis.xml b/anastasis-ui/src/main/res/navigation/anastasis.xml index 1e151da..efdddca 100644 --- a/anastasis-ui/src/main/res/navigation/anastasis.xml +++ b/anastasis-ui/src/main/res/navigation/anastasis.xml @@ -46,9 +46,22 @@ app:exitAnim="@anim/slide_out_left" app:popEnterAnim="@android:anim/slide_in_left" app:popExitAnim="@android:anim/slide_out_right" /> + <action + android:id="@+id/action_nav_anastasis_identity_to_nav_change_location" + app:destination="@id/nav_change_location" + app:enterAnim="@anim/slide_in_right" + app:exitAnim="@anim/slide_out_left" + app:popEnterAnim="@android:anim/slide_in_left" + app:popExitAnim="@android:anim/slide_out_right" /> </fragment> <fragment + android:id="@+id/nav_change_location" + android:name="org.gnu.anastasis.ui.identity.ChangeLocationFragment" + android:label="Select country" + tools:layout="@layout/fragment_change_location"/> + + <fragment android:id="@+id/nav_anastasis_authentication" android:name="org.gnu.anastasis.ui.authentication.AuthenticationFragment" android:label="Choose authentication methods" |