srctree

Robin Linden parent fedcfa3a 71cbc6e8
Add support for changing the password

inlinesplit
atox/src/main/kotlin/ui/settings/SettingsFragment.kt added: 165, removed: 4, total 161
@@ -202,6 +202,32 @@ class SettingsFragment : BaseFragment<FragmentSettingsBinding>(FragmentSettingsB
}
}
 
fun onPasswordEdit() {
passwordCurrent.error = if (vm.isCurrentPassword(passwordCurrent.text.toString())) {
null
} else {
getString(R.string.incorrect_password)
}
 
passwordNewConfirm.error = if (passwordNew.text.toString() == passwordNewConfirm.text.toString()) {
null
} else {
getString(R.string.passwords_must_match)
}
 
passwordConfirm.isEnabled = passwordCurrent.error == null && passwordNewConfirm.error == null
}
onPasswordEdit()
 
passwordCurrent.doAfterTextChanged { onPasswordEdit() }
passwordNew.doAfterTextChanged { onPasswordEdit() }
passwordNewConfirm.doAfterTextChanged { onPasswordEdit() }
passwordConfirm.setOnClickListener {
passwordConfirm.isEnabled = false
vm.setPassword(passwordNewConfirm.text.toString())
Toast.makeText(requireContext(), getString(R.string.password_updated), Toast.LENGTH_LONG).show()
}
 
nospam.setText("%08X".format(vm.getNospam()))
nospam.doAfterTextChanged {
saveNospam.isEnabled =
 
atox/src/main/kotlin/ui/settings/SettingsViewModel.kt added: 165, removed: 4, total 161
@@ -167,6 +167,15 @@ class SettingsViewModel @Inject constructor(
}
}
 
fun isCurrentPassword(maybeCurrentPassword: String) =
if (maybeCurrentPassword.isEmpty())
tox.password == null
else
tox.password == maybeCurrentPassword
 
fun setPassword(newPassword: String) =
tox.changePassword(if (newPassword.isEmpty()) null else newPassword)
 
fun getBootstrapNodeSource(): BootstrapNodeSource = settings.bootstrapNodeSource
fun setBootstrapNodeSource(source: BootstrapNodeSource) {
settings.bootstrapNodeSource = source
 
atox/src/main/res/layout/fragment_settings.xml added: 165, removed: 4, total 161
@@ -301,6 +301,126 @@
</LinearLayout>
</androidx.cardview.widget.CardView>
 
<androidx.cardview.widget.CardView style="@style/OptionGroup">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="16dp"
android:text="@string/pref_heading_change_password"
android:textSize="16sp"/>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/dividerColor"/>
<androidx.constraintlayout.widget.ConstraintLayout
style="@style/OptionRow"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
style="@style/OptionItemText"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:labelFor="@id/password_current"
android:text="@string/pref_current_password"
app:layout_constraintEnd_toStartOf="@id/password_current"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
<EditText android:id="@+id/password_current"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
android:importantForAutofill="no"
android:inputType="textPassword"
android:minWidth="64dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/dividerColor"/>
<androidx.constraintlayout.widget.ConstraintLayout
style="@style/OptionRow"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
style="@style/OptionItemText"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:labelFor="@id/password_new"
android:text="@string/pref_new_password"
app:layout_constraintEnd_toStartOf="@id/password_new"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
<EditText android:id="@+id/password_new"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
android:importantForAutofill="no"
android:inputType="textPassword"
android:minWidth="64dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/dividerColor"/>
<androidx.constraintlayout.widget.ConstraintLayout
style="@style/OptionRow"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
style="@style/OptionItemText"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:labelFor="@id/password_new_confirm"
android:text="@string/pref_confirm_password"
app:layout_constraintEnd_toStartOf="@id/password_new_confirm"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
<EditText android:id="@+id/password_new_confirm"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
android:importantForAutofill="no"
android:inputType="textPassword"
android:minWidth="64dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/dividerColor"/>
<androidx.constraintlayout.widget.ConstraintLayout
style="@style/OptionRow"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button android:id="@+id/password_confirm"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
android:importantForAutofill="no"
android:text="@string/confirm"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout>
</androidx.cardview.widget.CardView>
 
<androidx.cardview.widget.CardView style="@style/OptionGroup">
<LinearLayout
android:layout_width="match_parent"
 
atox/src/main/res/values/strings.xml added: 165, removed: 4, total 161
@@ -167,4 +167,10 @@
<string name="password">Password</string>
<string name="incorrect_password">Incorrect password</string>
<string name="unlock_profile">Unlock profile</string>
<string name="pref_heading_change_password">Change password</string>
<string name="pref_current_password">Current password</string>
<string name="pref_new_password">New password</string>
<string name="pref_confirm_password">Confirm new password</string>
<string name="password_updated">Password updated</string>
<string name="passwords_must_match">The passwords must match</string>
</resources>
No newline at end of file