gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[taler-taler-android] branch master updated: [wallet] Improve Anastasis


From: gnunet
Subject: [taler-taler-android] branch master updated: [wallet] Improve Anastasis UI mockup
Date: Mon, 22 Jun 2020 20:04:32 +0200

This is an automated email from the git hooks/post-receive script.

torsten-grote pushed a commit to branch master
in repository taler-android.

The following commit(s) were added to refs/heads/master by this push:
     new 98d693d  [wallet] Improve Anastasis UI mockup
98d693d is described below

commit 98d693d48ad491b19d89e5d394c2e54a36731728
Author: Torsten Grote <t@grobox.de>
AuthorDate: Mon Jun 22 14:58:18 2020 -0300

    [wallet] Improve Anastasis UI mockup
---
 wallet/build.gradle                                |   2 +-
 .../main/java/net/taler/wallet/MainViewModel.kt    |   2 +
 .../settings/AnastasisAuthenticationFragment.kt    |  47 ++++++++-
 .../wallet/settings/AnastasisIdentityFragment.kt   |  14 ++-
 .../net/taler/wallet/settings/AnastasisManager.kt  |  27 +++++
 .../wallet/settings/SecurityQuestionFragment.kt    |  56 ++++++++++
 .../java/net/taler/wallet/settings/SmsFragment.kt  |  56 ++++++++++
 .../net/taler/wallet/settings/VideoFragment.kt     | 117 +++++++++++++++++++++
 wallet/src/main/res/drawable/ic_baseline_face.xml  |  26 +++++
 .../layout/fragment_anastasis_authentication.xml   |  11 +-
 .../res/layout/fragment_anastasis_identity.xml     |  26 ++++-
 .../main/res/layout/fragment_security_question.xml | 100 ++++++++++++++++++
 wallet/src/main/res/layout/fragment_sms.xml        |  51 +++++++++
 wallet/src/main/res/layout/fragment_video.xml      |  89 ++++++++++++++++
 wallet/src/main/res/navigation/nav_graph.xml       |  28 ++++-
 15 files changed, 637 insertions(+), 15 deletions(-)

diff --git a/wallet/build.gradle b/wallet/build.gradle
index b977f91..4a9111b 100644
--- a/wallet/build.gradle
+++ b/wallet/build.gradle
@@ -69,7 +69,7 @@ dependencies {
     implementation 'net.taler:akono:0.1'
 
     implementation 'androidx.preference:preference:1.1.1'
-    implementation 'com.google.android.material:material:1.1.0'
+    implementation 'com.google.android.material:material:1.2.0-beta01'
     implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
 
     // Lists and Selection
diff --git a/wallet/src/main/java/net/taler/wallet/MainViewModel.kt 
b/wallet/src/main/java/net/taler/wallet/MainViewModel.kt
index c69c31c..63d833a 100644
--- a/wallet/src/main/java/net/taler/wallet/MainViewModel.kt
+++ b/wallet/src/main/java/net/taler/wallet/MainViewModel.kt
@@ -37,6 +37,7 @@ import net.taler.wallet.history.DevHistoryManager
 import net.taler.wallet.payment.PaymentManager
 import net.taler.wallet.pending.PendingOperationsManager
 import net.taler.wallet.refund.RefundManager
+import net.taler.wallet.settings.AnastasisManager
 import net.taler.wallet.transactions.TransactionManager
 import net.taler.wallet.withdraw.WithdrawManager
 import org.json.JSONObject
@@ -102,6 +103,7 @@ class MainViewModel(val app: Application) : 
AndroidViewModel(app) {
     val transactionManager: TransactionManager =
         TransactionManager(walletBackendApi, viewModelScope, mapper)
     val refundManager = RefundManager(walletBackendApi)
+    val anastasisManager = AnastasisManager()
 
     private val mTransactionsEvent = MutableLiveData<Event<String>>()
     val transactionsEvent: LiveData<Event<String>> = mTransactionsEvent
diff --git 
a/wallet/src/main/java/net/taler/wallet/settings/AnastasisAuthenticationFragment.kt
 
b/wallet/src/main/java/net/taler/wallet/settings/AnastasisAuthenticationFragment.kt
index 96b0928..4421d46 100644
--- 
a/wallet/src/main/java/net/taler/wallet/settings/AnastasisAuthenticationFragment.kt
+++ 
b/wallet/src/main/java/net/taler/wallet/settings/AnastasisAuthenticationFragment.kt
@@ -23,8 +23,12 @@ import android.view.View
 import android.view.ViewGroup
 import android.widget.Toast
 import android.widget.Toast.LENGTH_SHORT
+import androidx.annotation.IdRes
 import androidx.fragment.app.Fragment
 import androidx.fragment.app.activityViewModels
+import androidx.lifecycle.Observer
+import androidx.navigation.fragment.FragmentNavigatorExtras
+import androidx.navigation.fragment.findNavController
 import com.google.android.material.card.MaterialCardView
 import kotlinx.android.synthetic.main.fragment_anastasis_authentication.*
 import net.taler.common.Amount
@@ -35,6 +39,7 @@ import net.taler.wallet.R
 class AnastasisAuthenticationFragment : Fragment() {
 
     private val model: MainViewModel by activityViewModels()
+    private val anastasisManager by lazy { model.anastasisManager }
 
     private var price: Amount = Amount.zero("KUDOS")
 
@@ -48,9 +53,10 @@ class AnastasisAuthenticationFragment : Fragment() {
     override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
         super.onViewCreated(view, savedInstanceState)
         passwordCard.setOnClickListener {
-            toggleCard(
+            showDialog(
+                
R.id.action_nav_anastasis_authentication_to_securityQuestionFragment,
                 passwordCard,
-                Amount.fromJSONString("KUDOS:0.5")
+                "question_card"
             )
         }
         postidentCard.setOnClickListener {
@@ -59,8 +65,41 @@ class AnastasisAuthenticationFragment : Fragment() {
                 Amount.fromJSONString("KUDOS:3.5")
             )
         }
-        smsCard.setOnClickListener { toggleCard(smsCard, 
Amount.fromJSONString("KUDOS:1.0")) }
-        videoCard.setOnClickListener { toggleCard(videoCard, 
Amount.fromJSONString("KUDOS:2.25")) }
+        smsCard.setOnClickListener {
+            showDialog(
+                R.id.action_nav_anastasis_authentication_to_smsFragment,
+                smsCard,
+                "sms_card"
+            )
+        }
+        videoCard.setOnClickListener {
+            showDialog(
+                R.id.action_nav_anastasis_authentication_to_videoFragment,
+                videoCard,
+                "video_card"
+            )
+        }
+
+        anastasisManager.securityQuestionChecked.observe(viewLifecycleOwner, 
Observer { checked ->
+            passwordCard.isChecked = checked
+            updatePrice(checked, Amount.fromJSONString("KUDOS:0.5"))
+            updateNextButtonState()
+        })
+        anastasisManager.smsChecked.observe(viewLifecycleOwner, Observer { 
checked ->
+            smsCard.isChecked = checked
+            updatePrice(checked, Amount.fromJSONString("KUDOS:1.0"))
+            updateNextButtonState()
+        })
+        anastasisManager.videoChecked.observe(viewLifecycleOwner, Observer { 
checked ->
+            videoCard.isChecked = checked
+            updatePrice(checked, Amount.fromJSONString("KUDOS:2.25"))
+            updateNextButtonState()
+        })
+    }
+
+    private fun showDialog(@IdRes resId: Int, view: View, transitionName: 
String) {
+        val extras = FragmentNavigatorExtras(view to transitionName)
+        findNavController().navigate(resId, null, null, extras)
     }
 
     private fun toggleCard(card: MaterialCardView, price: Amount) {
diff --git 
a/wallet/src/main/java/net/taler/wallet/settings/AnastasisIdentityFragment.kt 
b/wallet/src/main/java/net/taler/wallet/settings/AnastasisIdentityFragment.kt
index 562bcd0..6b84223 100644
--- 
a/wallet/src/main/java/net/taler/wallet/settings/AnastasisIdentityFragment.kt
+++ 
b/wallet/src/main/java/net/taler/wallet/settings/AnastasisIdentityFragment.kt
@@ -32,6 +32,9 @@ import 
kotlinx.android.synthetic.main.fragment_anastasis_identity.*
 import net.taler.wallet.MainViewModel
 import net.taler.wallet.R
 import java.util.*
+import java.util.concurrent.TimeUnit.DAYS
+
+private const val MIN_AGE = 18
 
 class AnastasisIdentityFragment : Fragment() {
 
@@ -53,6 +56,7 @@ class AnastasisIdentityFragment : Fragment() {
         }
         birthDateInput.editText?.setOnClickListener {
             val picker = DatePickerDialog(requireContext())
+            picker.datePicker.maxDate = System.currentTimeMillis() - 
DAYS.toMillis(365) * MIN_AGE
             picker.setOnDateSetListener { _, year, month, dayOfMonth ->
                 val calender = Calendar.getInstance().apply {
                     set(year, month, dayOfMonth)
@@ -70,9 +74,13 @@ class AnastasisIdentityFragment : Fragment() {
 
     private fun getCountryName(): String {
         val tm = 
requireContext().getSystemService(TelephonyManager::class.java)!!
-        val countryIso = if (tm.networkCountryIso.isNullOrEmpty())
-            tm.simCountryIso else tm.networkCountryIso
-        var countryName = "Unknown"
+        val countryIso = if (tm.networkCountryIso.isNullOrEmpty()) {
+            if (tm.simCountryIso.isNullOrEmpty()) {
+                if (Locale.getDefault().country.isNullOrEmpty()) "unknown"
+                else Locale.getDefault().country
+            } else tm.simCountryIso
+        } else tm.networkCountryIso
+        var countryName = countryIso
         for (locale in Locale.getAvailableLocales()) {
             @SuppressLint("DefaultLocale")
             if (locale.country.toLowerCase() == countryIso) {
diff --git a/wallet/src/main/java/net/taler/wallet/settings/AnastasisManager.kt 
b/wallet/src/main/java/net/taler/wallet/settings/AnastasisManager.kt
new file mode 100644
index 0000000..09c6a39
--- /dev/null
+++ b/wallet/src/main/java/net/taler/wallet/settings/AnastasisManager.kt
@@ -0,0 +1,27 @@
+/*
+ * 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 net.taler.wallet.settings
+
+import androidx.lifecycle.MutableLiveData
+
+class AnastasisManager {
+
+    val securityQuestionChecked = MutableLiveData<Boolean>()
+    val smsChecked = MutableLiveData<Boolean>()
+    val videoChecked = MutableLiveData<Boolean>()
+
+}
diff --git 
a/wallet/src/main/java/net/taler/wallet/settings/SecurityQuestionFragment.kt 
b/wallet/src/main/java/net/taler/wallet/settings/SecurityQuestionFragment.kt
new file mode 100644
index 0000000..0ca63b4
--- /dev/null
+++ b/wallet/src/main/java/net/taler/wallet/settings/SecurityQuestionFragment.kt
@@ -0,0 +1,56 @@
+/*
+ * 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 net.taler.wallet.settings
+
+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 com.google.android.material.transition.MaterialContainerTransform
+import 
com.google.android.material.transition.MaterialContainerTransform.FADE_MODE_CROSS
+import kotlinx.android.synthetic.main.fragment_security_question.*
+import net.taler.wallet.MainViewModel
+import net.taler.wallet.R
+
+class SecurityQuestionFragment : Fragment() {
+
+    private val model: MainViewModel by activityViewModels()
+    private val anastasisManager by lazy { model.anastasisManager }
+
+    override fun onCreateView(
+        inflater: LayoutInflater, container: ViewGroup?,
+        savedInstanceState: Bundle?
+    ): View? {
+        sharedElementEnterTransition = MaterialContainerTransform().apply {
+            fadeMode = FADE_MODE_CROSS
+        }
+        return inflater.inflate(R.layout.fragment_security_question, 
container, false).apply {
+            transitionName = "question_card"
+        }
+    }
+
+    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+        saveQuestionButton.setOnClickListener {
+            anastasisManager.securityQuestionChecked.value = true
+            findNavController().popBackStack()
+        }
+    }
+
+}
diff --git a/wallet/src/main/java/net/taler/wallet/settings/SmsFragment.kt 
b/wallet/src/main/java/net/taler/wallet/settings/SmsFragment.kt
new file mode 100644
index 0000000..6a617ac
--- /dev/null
+++ b/wallet/src/main/java/net/taler/wallet/settings/SmsFragment.kt
@@ -0,0 +1,56 @@
+/*
+ * 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 net.taler.wallet.settings
+
+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 com.google.android.material.transition.MaterialContainerTransform
+import 
com.google.android.material.transition.MaterialContainerTransform.FADE_MODE_CROSS
+import kotlinx.android.synthetic.main.fragment_sms.*
+import net.taler.wallet.MainViewModel
+import net.taler.wallet.R
+
+class SmsFragment : Fragment() {
+
+    private val model: MainViewModel by activityViewModels()
+    private val anastasisManager by lazy { model.anastasisManager }
+
+    override fun onCreateView(
+        inflater: LayoutInflater, container: ViewGroup?,
+        savedInstanceState: Bundle?
+    ): View? {
+        sharedElementEnterTransition = MaterialContainerTransform().apply {
+            fadeMode = FADE_MODE_CROSS
+        }
+        return inflater.inflate(R.layout.fragment_sms, container, false).apply 
{
+            transitionName = "sms_card"
+        }
+    }
+
+    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+        saveSmsButton.setOnClickListener {
+            anastasisManager.smsChecked.value = true
+            findNavController().popBackStack()
+        }
+    }
+
+}
diff --git a/wallet/src/main/java/net/taler/wallet/settings/VideoFragment.kt 
b/wallet/src/main/java/net/taler/wallet/settings/VideoFragment.kt
new file mode 100644
index 0000000..8a6477d
--- /dev/null
+++ b/wallet/src/main/java/net/taler/wallet/settings/VideoFragment.kt
@@ -0,0 +1,117 @@
+/*
+ * 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 net.taler.wallet.settings
+
+import android.app.Activity.RESULT_OK
+import android.content.Intent
+import android.graphics.Bitmap
+import android.graphics.BitmapFactory
+import android.net.Uri
+import android.os.Bundle
+import android.os.ParcelFileDescriptor
+import android.provider.MediaStore
+import android.view.LayoutInflater
+import android.view.View
+import android.view.View.GONE
+import android.view.View.VISIBLE
+import android.view.ViewGroup
+import androidx.fragment.app.Fragment
+import androidx.fragment.app.activityViewModels
+import androidx.navigation.fragment.findNavController
+import androidx.transition.TransitionManager.beginDelayedTransition
+import com.google.android.material.transition.MaterialContainerTransform
+import 
com.google.android.material.transition.MaterialContainerTransform.FADE_MODE_CROSS
+import kotlinx.android.synthetic.main.fragment_video.*
+import net.taler.wallet.MainViewModel
+import net.taler.wallet.R
+import java.io.FileDescriptor
+
+private const val REQUEST_IMAGE_CAPTURE = 1
+private const val REQUEST_IMAGE_OPEN = 2
+
+class VideoFragment : Fragment() {
+
+    private val model: MainViewModel by activityViewModels()
+    private val anastasisManager by lazy { model.anastasisManager }
+
+    override fun onCreateView(
+        inflater: LayoutInflater, container: ViewGroup?,
+        savedInstanceState: Bundle?
+    ): View? {
+        sharedElementEnterTransition = MaterialContainerTransform().apply {
+            fadeMode = FADE_MODE_CROSS
+        }
+        return inflater.inflate(R.layout.fragment_video, container, 
false).apply {
+            transitionName = "video_card"
+        }
+    }
+
+    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+        takePhotoButton.setOnClickListener {
+            val pm = requireContext().packageManager
+            Intent(MediaStore.ACTION_IMAGE_CAPTURE).also { takePictureIntent ->
+                takePictureIntent.resolveActivity(pm)?.also {
+                    startActivityForResult(takePictureIntent, 
REQUEST_IMAGE_CAPTURE)
+                }
+            }
+        }
+        choosePhotoButton.setOnClickListener {
+            val intent = Intent(Intent.ACTION_OPEN_DOCUMENT).apply {
+                addCategory(Intent.CATEGORY_OPENABLE)
+                type = "image/*"
+            }
+            startActivityForResult(intent, REQUEST_IMAGE_OPEN)
+        }
+
+        saveVideoButton.setOnClickListener {
+            anastasisManager.videoChecked.value = true
+            findNavController().popBackStack()
+        }
+    }
+
+    override fun onActivityResult(requestCode: Int, resultCode: Int, data: 
Intent?) {
+        if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
+            val imageBitmap = data!!.extras!!.get("data") as Bitmap
+            showImage(imageBitmap)
+        } else if (requestCode == REQUEST_IMAGE_OPEN && resultCode == 
RESULT_OK) {
+            data?.data?.also { uri ->
+                val imageBitmap = getBitmapFromUri(uri)
+                showImage(imageBitmap)
+            }
+        }
+    }
+
+    private fun showImage(bitmap: Bitmap) {
+        photoView.setImageBitmap(bitmap)
+        beginDelayedTransition(view as ViewGroup)
+        photoView.visibility = VISIBLE
+        takePhotoButton.visibility = GONE
+        choosePhotoButton.visibility = GONE
+        saveVideoButton.isEnabled = true
+    }
+
+    private fun getBitmapFromUri(uri: Uri): Bitmap {
+        val contentResolver = requireContext().contentResolver
+        val parcelFileDescriptor: ParcelFileDescriptor =
+            contentResolver.openFileDescriptor(uri, "r")!!
+        val fileDescriptor: FileDescriptor = 
parcelFileDescriptor.fileDescriptor
+        val image: Bitmap = BitmapFactory.decodeFileDescriptor(fileDescriptor)
+        parcelFileDescriptor.close()
+        return image
+    }
+
+}
diff --git a/wallet/src/main/res/drawable/ic_baseline_face.xml 
b/wallet/src/main/res/drawable/ic_baseline_face.xml
new file mode 100644
index 0000000..4d55e34
--- /dev/null
+++ b/wallet/src/main/res/drawable/ic_baseline_face.xml
@@ -0,0 +1,26 @@
+<!--
+  ~ 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/>
+  -->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android";
+    android:width="24dp"
+    android:height="24dp"
+    android:viewportWidth="24"
+    android:viewportHeight="24"
+    android:tint="?attr/colorControlNormal">
+  <path
+      android:fillColor="@android:color/white"
+      android:pathData="M9,11.75c-0.69,0 -1.25,0.56 -1.25,1.25s0.56,1.25 
1.25,1.25 1.25,-0.56 1.25,-1.25 -0.56,-1.25 -1.25,-1.25zM15,11.75c-0.69,0 
-1.25,0.56 -1.25,1.25s0.56,1.25 1.25,1.25 1.25,-0.56 1.25,-1.25 -0.56,-1.25 
-1.25,-1.25zM12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 
12,2zM12,20c-4.41,0 -8,-3.59 -8,-8 0,-0.29 0.02,-0.58 0.05,-0.86 2.36,-1.05 
4.23,-2.98 5.21,-5.37C11.07,8.33 14.05,10 17.42,10c0.78,0 1.53,-0.09 2.25,-0.26 
0.21,0.71 0.33,1.47 0.33,2.26 0,4.41 - [...]
+</vector>
diff --git a/wallet/src/main/res/layout/fragment_anastasis_authentication.xml 
b/wallet/src/main/res/layout/fragment_anastasis_authentication.xml
index f8d1213..a83871a 100644
--- a/wallet/src/main/res/layout/fragment_anastasis_authentication.xml
+++ b/wallet/src/main/res/layout/fragment_anastasis_authentication.xml
@@ -42,6 +42,7 @@
                 android:checkable="true"
                 android:clickable="true"
                 android:focusable="true"
+                android:transitionName="question_card"
                 app:cardElevation="4dp"
                 app:cardUseCompatPadding="true"
                 app:checkedIcon="@drawable/ic_baseline_check"
@@ -56,7 +57,7 @@
                         android:id="@+id/passwordHeadline"
                         android:layout_width="0dp"
                         android:layout_height="wrap_content"
-                        android:text="Password"
+                        android:text="Security question"
                         
android:textAppearance="@style/TextAppearance.MaterialComponents.Headline5"
                         app:layout_constraintEnd_toEndOf="parent"
                         app:layout_constraintStart_toStartOf="parent"
@@ -67,7 +68,7 @@
                         android:layout_width="0dp"
                         android:layout_height="wrap_content"
                         android:layout_marginTop="8dp"
-                        android:text="Provide your own password that you will 
need to enter to authenticate when recovering your backup."
+                        android:text="Provide your own security question (and 
answer) that you will need to answer to authenticate when recovering your 
backup."
                         app:layout_constraintBottom_toBottomOf="parent"
                         app:layout_constraintEnd_toEndOf="parent"
                         app:layout_constraintStart_toStartOf="parent"
@@ -99,7 +100,7 @@
                         android:id="@+id/postidentHeadline"
                         android:layout_width="0dp"
                         android:layout_height="wrap_content"
-                        android:text="Postident Verfahren"
+                        android:text="Identification by mail"
                         
android:textAppearance="@style/TextAppearance.MaterialComponents.Headline5"
                         app:layout_constraintEnd_toEndOf="parent"
                         app:layout_constraintStart_toStartOf="parent"
@@ -110,7 +111,7 @@
                         android:layout_width="0dp"
                         android:layout_height="wrap_content"
                         android:layout_marginTop="8dp"
-                        android:text="Die Postident-Verfahren sind Methoden 
der persönlichen Identifikation von Personen, die durch die Mitarbeiter der 
Deutschen Post AG vorgenommen werden. Man spricht beim Postident-Verfahren auch 
von einer unpersönlichen Legitimationsprüfung. "
+                        android:text="Die Postident-Verfahren sind Methoden 
der persönlichen Identifikation von Personen, die durch die Mitarbeiter der 
Post vorgenommen werden. Man spricht beim Postident-Verfahren auch von einer 
unpersönlichen Legitimationsprüfung. "
                         app:layout_constraintBottom_toBottomOf="parent"
                         app:layout_constraintEnd_toEndOf="parent"
                         app:layout_constraintStart_toStartOf="parent"
@@ -129,6 +130,7 @@
                 android:checkable="true"
                 android:clickable="true"
                 android:focusable="true"
+                android:transitionName="sms_card"
                 app:cardElevation="4dp"
                 app:cardUseCompatPadding="true"
                 app:checkedIcon="@drawable/ic_baseline_check"
@@ -171,6 +173,7 @@
                 android:checkable="true"
                 android:clickable="true"
                 android:focusable="true"
+                android:transitionName="video_card"
                 app:cardElevation="4dp"
                 app:cardUseCompatPadding="true"
                 app:checkedIcon="@drawable/ic_baseline_check"
diff --git a/wallet/src/main/res/layout/fragment_anastasis_identity.xml 
b/wallet/src/main/res/layout/fragment_anastasis_identity.xml
index 542a821..e24be31 100644
--- a/wallet/src/main/res/layout/fragment_anastasis_identity.xml
+++ b/wallet/src/main/res/layout/fragment_anastasis_identity.xml
@@ -39,7 +39,7 @@
             android:layout_height="wrap_content"
             android:layout_margin="16dp"
             android:layout_marginTop="24dp"
-            android:text="To find your secret later, we create an anonymous 
identifier from unforgettable information about you.\n\nFeel free to lie as 
long as you will be able to provide exactly the same information when needing 
to restore."
+            android:text="To find your secret later, we create an anonymous 
identifier from unforgettable information about you.\n\nThis information will 
not be stored and not shared with anybody.\n\nFeel free to lie as long as you 
will be able to provide exactly the same information when needing to restore."
             app:layout_constraintEnd_toEndOf="parent"
             app:layout_constraintStart_toEndOf="@+id/imageView2"
             app:layout_constraintTop_toTopOf="parent" />
@@ -87,6 +87,7 @@
             <com.google.android.material.textfield.TextInputEditText
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
+                android:inputType="textPersonName|textCapWords"
                 android:hint="Name" />
 
         </com.google.android.material.textfield.TextInputLayout>
@@ -104,6 +105,7 @@
             <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" />
 
         </com.google.android.material.textfield.TextInputLayout>
@@ -133,7 +135,6 @@
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:layout_margin="16dp"
-            app:layout_constraintBottom_toTopOf="@+id/createIdentifierButton"
             app:layout_constraintEnd_toEndOf="parent"
             app:layout_constraintStart_toStartOf="parent"
             app:layout_constraintTop_toBottomOf="@+id/birthDateInput"
@@ -148,6 +149,27 @@
 
         </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_margin="16dp"
+            app:layout_constraintBottom_toTopOf="@+id/createIdentifierButton"
+            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>
+
         <Button
             android:id="@+id/createIdentifierButton"
             android:layout_width="wrap_content"
diff --git a/wallet/src/main/res/layout/fragment_security_question.xml 
b/wallet/src/main/res/layout/fragment_security_question.xml
new file mode 100644
index 0000000..4df4f97
--- /dev/null
+++ b/wallet/src/main/res/layout/fragment_security_question.xml
@@ -0,0 +1,100 @@
+<?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">
+
+    <com.google.android.material.card.MaterialCardView
+        android:id="@+id/questionCard"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="16dp"
+        android:layout_marginTop="16dp"
+        android:layout_marginEnd="16dp"
+        app:cardElevation="4dp"
+        app:cardUseCompatPadding="true"
+        app:contentPadding="8dp"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent">
+
+        <androidx.constraintlayout.widget.ConstraintLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content">
+
+            <com.google.android.material.textfield.TextInputLayout
+                android:id="@+id/questionView"
+                
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.Dense"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toTopOf="parent">
+
+                <com.google.android.material.textfield.TextInputEditText
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:hint="Question"
+                    android:inputType="text|textCapSentences" />
+
+            </com.google.android.material.textfield.TextInputLayout>
+
+            <com.google.android.material.textfield.TextInputLayout
+                android:id="@+id/answerView"
+                
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.Dense"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="8dp"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toBottomOf="@+id/questionView">
+
+                <com.google.android.material.textfield.TextInputEditText
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:hint="Answer"
+                    android:inputType="text" />
+
+            </com.google.android.material.textfield.TextInputLayout>
+
+        </androidx.constraintlayout.widget.ConstraintLayout>
+    </com.google.android.material.card.MaterialCardView>
+
+    <ImageButton
+        android:id="@+id/addQuestionButton"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_margin="16dp"
+        android:background="?attr/selectableItemBackground"
+        android:drawableTint="?attr/colorOnPrimarySurface"
+        android:src="@drawable/ic_add_circle"
+        android:text="Save"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/questionCard" />
+
+    <Button
+        android:id="@+id/saveQuestionButton"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_margin="16dp"
+        android:backgroundTint="@color/green"
+        android:drawableTint="?attr/colorOnPrimarySurface"
+        android:text="Save"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent" />
+
+</androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/wallet/src/main/res/layout/fragment_sms.xml 
b/wallet/src/main/res/layout/fragment_sms.xml
new file mode 100644
index 0000000..f855d38
--- /dev/null
+++ b/wallet/src/main/res/layout/fragment_sms.xml
@@ -0,0 +1,51 @@
+<?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">
+
+    <com.google.android.material.textfield.TextInputLayout
+        android:id="@+id/smsView"
+        
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_toTopOf="parent">
+
+        <com.google.android.material.textfield.TextInputEditText
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:hint="Phone Number"
+            android:inputType="phone" />
+
+    </com.google.android.material.textfield.TextInputLayout>
+
+    <Button
+        android:id="@+id/saveSmsButton"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_margin="16dp"
+        android:backgroundTint="@color/green"
+        android:drawableTint="?attr/colorOnPrimarySurface"
+        android:text="Save"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent" />
+
+</androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/wallet/src/main/res/layout/fragment_video.xml 
b/wallet/src/main/res/layout/fragment_video.xml
new file mode 100644
index 0000000..c08e269
--- /dev/null
+++ b/wallet/src/main/res/layout/fragment_video.xml
@@ -0,0 +1,89 @@
+<?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";
+    xmlns:tools="http://schemas.android.com/tools";
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+    <ImageView
+        android:id="@+id/imageView2"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_margin="16dp"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent"
+        app:srcCompat="@drawable/ic_baseline_face" />
+
+    <TextView
+        android:id="@+id/videoIntro"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:layout_margin="16dp"
+        android:layout_marginTop="24dp"
+        android:text="Provide a photo of you that will be used when restoring 
to confirm your identity via a video call."
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toEndOf="@+id/imageView2"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <ImageView
+        android:id="@+id/photoView"
+        android:layout_width="0dp"
+        android:layout_height="0dp"
+        android:layout_margin="16dp"
+        android:scaleType="fitCenter"
+        android:visibility="gone"
+        tools:visibility="visible"
+        app:layout_constraintBottom_toTopOf="@+id/saveVideoButton"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/videoIntro"
+        tools:srcCompat="@tools:sample/avatars" />
+
+    <Button
+        android:id="@+id/takePhotoButton"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="Take Photo"
+        app:layout_constraintBottom_toTopOf="@+id/choosePhotoButton"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/videoIntro" />
+
+    <Button
+        android:id="@+id/choosePhotoButton"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="Choose from Gallery"
+        app:layout_constraintBottom_toTopOf="@+id/saveVideoButton"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/takePhotoButton" />
+
+    <Button
+        android:id="@+id/saveVideoButton"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_margin="16dp"
+        android:backgroundTint="@color/green"
+        android:drawableTint="?attr/colorOnPrimarySurface"
+        android:enabled="false"
+        android:text="Save"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent" />
+
+</androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/wallet/src/main/res/navigation/nav_graph.xml 
b/wallet/src/main/res/navigation/nav_graph.xml
index bcfbe51..7ce7b02 100644
--- a/wallet/src/main/res/navigation/nav_graph.xml
+++ b/wallet/src/main/res/navigation/nav_graph.xml
@@ -108,7 +108,33 @@
         android:id="@+id/nav_anastasis_authentication"
         
android:name="net.taler.wallet.settings.AnastasisAuthenticationFragment"
         android:label="Choose authentication methods"
-        tools:layout="@layout/fragment_anastasis_authentication"/>
+        tools:layout="@layout/fragment_anastasis_authentication">
+        <action
+            
android:id="@+id/action_nav_anastasis_authentication_to_securityQuestionFragment"
+            app:destination="@id/securityQuestionFragment" />
+        <action
+            
android:id="@+id/action_nav_anastasis_authentication_to_smsFragment"
+            app:destination="@id/smsFragment" />
+        <action
+            
android:id="@+id/action_nav_anastasis_authentication_to_videoFragment"
+            app:destination="@id/videoFragment" />
+    </fragment>
+
+    <fragment
+        android:id="@+id/securityQuestionFragment"
+        android:name="net.taler.wallet.settings.SecurityQuestionFragment"
+        android:label="Security question"
+        tools:layout="@layout/fragment_security_question" />
+    <fragment
+        android:id="@+id/smsFragment"
+        android:name="net.taler.wallet.settings.SmsFragment"
+        android:label="SMS"
+        tools:layout="@layout/fragment_sms" />
+    <fragment
+        android:id="@+id/videoFragment"
+        android:name="net.taler.wallet.settings.VideoFragment"
+        android:label="Video identification"
+        tools:layout="@layout/fragment_video" />
 
     <fragment
         android:id="@+id/nav_transactions"

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]