@@ -11,13 +11,16 @@ import android.content.Context
1111import android.content.SharedPreferences
1212import android.graphics.Typeface
1313import android.os.Bundle
14+ import android.widget.CheckBox
15+ import androidx.annotation.IdRes
1416import androidx.core.content.edit
1517import androidx.fragment.app.DialogFragment
1618import androidx.fragment.app.setFragmentResult
1719import androidx.lifecycle.lifecycleScope
1820import app.passwordstore.R
1921import app.passwordstore.databinding.FragmentPwgenDicewareBinding
2022import app.passwordstore.passgen.diceware.DicewarePassphraseGenerator
23+ import app.passwordstore.passgen.diceware.PasswordOption
2124import app.passwordstore.ui.crypto.PasswordCreationActivity
2225import app.passwordstore.util.crypto.AESEncryption
2326import app.passwordstore.util.crypto.AESEncryption.KeyType
@@ -30,6 +33,7 @@ import javax.inject.Inject
3033import kotlinx.coroutines.flow.merge
3134import kotlinx.coroutines.launch
3235import reactivecircus.flowbinding.android.widget.afterTextChanges
36+ import reactivecircus.flowbinding.android.widget.checkedChanges
3337
3438@AndroidEntryPoint
3539class DicewarePasswordGeneratorDialogFragment : DialogFragment () {
@@ -60,8 +64,13 @@ class DicewarePasswordGeneratorDialogFragment : DialogFragment() {
6064 )
6165 binding.passwordText.typeface = Typeface .MONOSPACE
6266
67+ binding.includeNumeral.isChecked = prefs.getBoolean(PasswordOption .Numeral .key, false )
68+ binding.capitalise.isChecked = prefs.getBoolean(PasswordOption .Capitalise .key, false )
69+
6370 lifecycleScope.launch {
6471 merge(
72+ binding.includeNumeral.checkedChanges().skipInitialValue(),
73+ binding.capitalise.checkedChanges().skipInitialValue(),
6574 binding.passwordLengthText.afterTextChanges(),
6675 binding.passwordSeparatorText.afterTextChanges(),
6776 )
@@ -93,11 +102,24 @@ class DicewarePasswordGeneratorDialogFragment : DialogFragment() {
93102 private fun generatePassword (binding : FragmentPwgenDicewareBinding ) {
94103 val length = binding.passwordLengthText.text?.toString()?.toIntOrNull() ? : 5
95104 val separator = binding.passwordSeparatorText.text?.toString()?.getOrNull(0 ) ? : ' -'
96- setPreferences(length, separator)
97- binding.passwordText.text = dicewareGenerator.generatePassphrase(length, separator)
105+ val includeNumeral = binding.includeNumeral.isChecked
106+ val capitalise = binding.capitalise.isChecked
107+
108+ setPreferences(length, separator, includeNumeral, capitalise)
109+ binding.passwordText.text =
110+ dicewareGenerator.generatePassphrase(length, separator, includeNumeral, capitalise)
111+ }
112+
113+ private fun isChecked (@IdRes id : Int ): Boolean {
114+ return requireDialog().findViewById<CheckBox >(id).isChecked
98115 }
99116
100- private fun setPreferences (length : Int , separator : Char ) {
117+ private fun setPreferences (
118+ length : Int ,
119+ separator : Char ,
120+ includeNumeral : Boolean ,
121+ capitalise : Boolean ,
122+ ) {
101123 prefs.edit {
102124 putString(
103125 DICEWARE_LENGTH ,
@@ -111,6 +133,8 @@ class DicewarePasswordGeneratorDialogFragment : DialogFragment() {
111133 String (it)
112134 },
113135 )
136+ putBoolean(PasswordOption .Numeral .key, includeNumeral)
137+ putBoolean(PasswordOption .Capitalise .key, capitalise)
114138 }
115139 }
116140}
0 commit comments