From efd1c5519acf1ba081c2546ebbf1243d360bd94c Mon Sep 17 00:00:00 2001 From: Kamal Bramwell <kamal@elixxir.io> Date: Fri, 2 Dec 2022 14:50:19 -0500 Subject: [PATCH] Added privacy on TextInputDialogs --- .../ui/dialog/textinput/TextInputDialog.kt | 19 +++- .../component_sensitive_textinput_dialog.xml | 94 +++++++++++++++++++ 2 files changed, 111 insertions(+), 2 deletions(-) create mode 100644 app/src/main/res/layout/component_sensitive_textinput_dialog.xml diff --git a/app/src/main/java/io/xxlabs/messenger/ui/dialog/textinput/TextInputDialog.kt b/app/src/main/java/io/xxlabs/messenger/ui/dialog/textinput/TextInputDialog.kt index 41bb6bd0..74f894a4 100644 --- a/app/src/main/java/io/xxlabs/messenger/ui/dialog/textinput/TextInputDialog.kt +++ b/app/src/main/java/io/xxlabs/messenger/ui/dialog/textinput/TextInputDialog.kt @@ -2,6 +2,7 @@ package io.xxlabs.messenger.ui.dialog.textinput import android.content.DialogInterface import android.os.Bundle +import android.text.InputType import android.text.Spannable import android.text.SpannableStringBuilder import android.text.method.LinkMovementMethod @@ -24,12 +25,16 @@ class TextInputDialog : XxBottomSheetDialog() { private val dialogUI: TextInputDialogUI by lazy { requireArguments().get(ARG_UI) as TextInputDialogUI } + private val isSensitive: Boolean by lazy { + requireArguments().getBoolean(ARG_SENSITIVE) + } override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View { + binding = DataBindingUtil.inflate( inflater, R.layout.component_textinput_dialog, @@ -45,11 +50,20 @@ class TextInputDialog : XxBottomSheetDialog() { } initClickListeners() + setInputPrivacy() binding.lifecycleOwner = viewLifecycleOwner binding.ui = dialogUI return binding.root } + private fun setInputPrivacy() { + if (isSensitive) { + binding.edittextDialogTextInput.editText?.apply { + inputType = InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_VARIATION_PASSWORD + } + } + } + private fun initClickListeners() { binding.edittextDialogPositiveButton.setOnClickListener { dismiss() @@ -98,11 +112,12 @@ class TextInputDialog : XxBottomSheetDialog() { companion object Factory { private const val ARG_UI: String = "ui" - - fun newInstance(dialogUI: TextInputDialogUI): TextInputDialog = + private const val ARG_SENSITIVE: String = "sensitive" + fun newInstance(dialogUI: TextInputDialogUI, isSensitive: Boolean = false): TextInputDialog = TextInputDialog().apply { arguments = Bundle().apply { putSerializable(ARG_UI, dialogUI) + putBoolean(ARG_SENSITIVE, isSensitive) } } } diff --git a/app/src/main/res/layout/component_sensitive_textinput_dialog.xml b/app/src/main/res/layout/component_sensitive_textinput_dialog.xml new file mode 100644 index 00000000..4e0a8e43 --- /dev/null +++ b/app/src/main/res/layout/component_sensitive_textinput_dialog.xml @@ -0,0 +1,94 @@ +<layout + 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"> + + <data> + <variable + name="ui" + type="io.xxlabs.messenger.ui.dialog.textinput.TextInputDialogUI" /> + </data> + + <androidx.cardview.widget.CardView + android:id="@+id/infoDialogRoot" + android:layout_width="match_parent" + android:layout_height="wrap_content" + app:cardCornerRadius="@dimen/bottom_sheet_dialog_corner_radius"> + + <androidx.constraintlayout.widget.ConstraintLayout + android:layout_width="match_parent" + android:layout_height="wrap_content"> + + <TextView + android:id="@+id/edittext_dialog_title" + android:text="@{ui.title}" + android:layout_marginBottom="@dimen/registration_body_vertical_margin" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintBottom_toTopOf="@+id/edittext_dialog_body" + style="@style/dialog_title" + tools:text="@string/registration_username_info_title"/> + + <TextView + android:id="@+id/edittext_dialog_body" + android:layout_marginBottom="@dimen/registration_body_vertical_margin" + app:layout_constraintTop_toBottomOf="@id/edittext_dialog_title" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintBottom_toTopOf="@+id/edittext_dialog_text_input" + tools:text="@string/registration_username_info_body" + style="@style/dialog_body" /> + + <com.google.android.material.textfield.TextInputLayout + android:id="@+id/edittext_dialog_text_input" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:hint="@{ui.inputHint}" + android:error="@{ui.inputError}" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintTop_toBottomOf="@id/edittext_dialog_body" + app:layout_constraintBottom_toTopOf="@+id/edittext_dialog_positive_button" + tools:hint="Enter text here" + style="@style/registration_text_input"> + + <com.google.android.material.textfield.TextInputEditText + style="@style/registration_text_input_edittext" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:imeOptions="actionDone" + android:inputType="textPassword" + android:maxLength="@{ui.maxInputLength}" + android:afterTextChanged="@{ui::onTextInput}"/> + </com.google.android.material.textfield.TextInputLayout> + + <io.xxlabs.messenger.support.view.SingleClickButton + android:id="@+id/edittext_dialog_positive_button" + style="@style/dialog_button" + android:layout_marginTop="@dimen/registration_body_vertical_margin" + android:text="@{ui.positiveLabel}" + android:textColor="@color/neutral_white" + android:background="@drawable/bg_btn_white" + android:backgroundTint="@color/brand_default" + android:layout_marginStart="@dimen/registration_horizontal_margin" + android:enabled="@{ui.positiveButtonEnabled}" + app:layout_constraintHorizontal_chainStyle="packed" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toStartOf="@id/edittext_dialog_negative_button" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@id/edittext_dialog_text_input" /> + + <io.xxlabs.messenger.support.view.SingleClickButton + android:id="@+id/edittext_dialog_negative_button" + android:text="@{ui.negativeLabel}" + android:layout_marginTop="@dimen/registration_body_vertical_margin" + android:layout_marginEnd="@dimen/registration_horizontal_margin" + android:layout_marginStart="0dp" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintStart_toEndOf="@id/edittext_dialog_positive_button" + app:layout_constraintEnd_toEndOf="parent" + style="@style/dialog_button" /> + </androidx.constraintlayout.widget.ConstraintLayout> + </androidx.cardview.widget.CardView> +</layout> \ No newline at end of file -- GitLab