diff options
author | Harsh Shandilya <me@msfjarvis.dev> | 2020-09-05 05:11:25 +0530 |
---|---|---|
committer | Harsh Shandilya <me@msfjarvis.dev> | 2020-09-05 22:49:02 +0530 |
commit | 9bc1d59dd225a4b482ad8177c80bef5af946a9f0 (patch) | |
tree | c3fee1e1addb798d5e536870d8266cb8991c0709 | |
parent | 85d1ef1ad1dc229e56291640b5459c77c9354f5b (diff) |
PasswordBuilder: use runCatching to replace exception handling
Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
-rw-r--r-- | app/src/main/java/com/zeapo/pwdstore/pwgenxkpwd/PasswordBuilder.kt | 32 | ||||
-rw-r--r-- | app/src/main/java/com/zeapo/pwdstore/ui/dialogs/XkPasswordGeneratorDialogFragment.kt | 51 |
2 files changed, 40 insertions, 43 deletions
diff --git a/app/src/main/java/com/zeapo/pwdstore/pwgenxkpwd/PasswordBuilder.kt b/app/src/main/java/com/zeapo/pwdstore/pwgenxkpwd/PasswordBuilder.kt index 587a5350..398a955d 100644 --- a/app/src/main/java/com/zeapo/pwdstore/pwgenxkpwd/PasswordBuilder.kt +++ b/app/src/main/java/com/zeapo/pwdstore/pwgenxkpwd/PasswordBuilder.kt @@ -5,12 +5,13 @@ package com.zeapo.pwdstore.pwgenxkpwd import android.content.Context +import com.github.michaelbull.result.Result +import com.github.michaelbull.result.runCatching import com.zeapo.pwdstore.R import com.zeapo.pwdstore.pwgen.PasswordGenerator.PasswordGeneratorException import com.zeapo.pwdstore.pwgen.secureRandomCharacter import com.zeapo.pwdstore.pwgen.secureRandomElement import com.zeapo.pwdstore.pwgen.secureRandomNumber -import java.io.IOException import java.util.Locale class PasswordBuilder(ctx: Context) { @@ -83,8 +84,7 @@ class PasswordBuilder(ctx: Context) { } @OptIn(ExperimentalStdlibApi::class) - @Throws(PasswordGeneratorException::class) - fun create(): String { + fun create(): Result<String, Throwable> { val wordBank = mutableListOf<String>() val password = StringBuilder() @@ -94,7 +94,7 @@ class PasswordBuilder(ctx: Context) { password.append(separator) } } - try { + return runCatching { val dictionary = XkpwdDictionary(context) val words = dictionary.words for (wordLength in minWordLength..maxWordLength) { @@ -119,22 +119,20 @@ class PasswordBuilder(ctx: Context) { password.append(separator) } } - } catch (e: IOException) { - throw PasswordGeneratorException("Failed generating password!") - } - if (numDigits != 0) { - if (isAppendNumberSeparator) { - password.append(separator) + if (numDigits != 0) { + if (isAppendNumberSeparator) { + password.append(separator) + } + password.append(generateRandomNumberSequence(numDigits)) } - password.append(generateRandomNumberSequence(numDigits)) - } - if (numSymbols != 0) { - if (isAppendSymbolsSeparator) { - password.append(separator) + if (numSymbols != 0) { + if (isAppendSymbolsSeparator) { + password.append(separator) + } + password.append(generateRandomSymbolSequence(numSymbols)) } - password.append(generateRandomSymbolSequence(numSymbols)) + password.toString() } - return password.toString() } companion object { diff --git a/app/src/main/java/com/zeapo/pwdstore/ui/dialogs/XkPasswordGeneratorDialogFragment.kt b/app/src/main/java/com/zeapo/pwdstore/ui/dialogs/XkPasswordGeneratorDialogFragment.kt index 527e4c6c..274330bb 100644 --- a/app/src/main/java/com/zeapo/pwdstore/ui/dialogs/XkPasswordGeneratorDialogFragment.kt +++ b/app/src/main/java/com/zeapo/pwdstore/ui/dialogs/XkPasswordGeneratorDialogFragment.kt @@ -16,12 +16,15 @@ import androidx.appcompat.widget.AppCompatTextView import androidx.core.content.edit import androidx.fragment.app.DialogFragment import com.github.ajalt.timberkt.Timber.tag +import com.github.michaelbull.result.fold +import com.github.michaelbull.result.getOr +import com.github.michaelbull.result.runCatching import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.zeapo.pwdstore.R import com.zeapo.pwdstore.databinding.FragmentXkpwgenBinding -import com.zeapo.pwdstore.pwgen.PasswordGenerator import com.zeapo.pwdstore.pwgenxkpwd.CapsType import com.zeapo.pwdstore.pwgenxkpwd.PasswordBuilder +import com.zeapo.pwdstore.utils.getString /** A placeholder fragment containing a simple view. */ class XkPasswordGeneratorDialogFragment : DialogFragment() { @@ -41,19 +44,13 @@ class XkPasswordGeneratorDialogFragment : DialogFragment() { prefs = callingActivity.getSharedPreferences("PasswordGenerator", Context.MODE_PRIVATE) - val previousStoredCapStyle: String = try { - prefs.getString(PREF_KEY_CAPITALS_STYLE, DEFAULT_CAPS_STYLE)!! - } catch (e: Exception) { - tag("xkpw").e(e) - DEFAULT_CAPS_STYLE - } + val previousStoredCapStyle: String = runCatching { + prefs.getString(PREF_KEY_CAPITALS_STYLE)!! + }.getOr(DEFAULT_CAPS_STYLE) - val lastCapitalsStyleIndex: Int = try { + val lastCapitalsStyleIndex: Int = runCatching { CapsType.valueOf(previousStoredCapStyle).ordinal - } catch (e: Exception) { - tag("xkpw").e(e) - DEFAULT_CAPS_INDEX - } + }.getOr(DEFAULT_CAPS_INDEX) binding.xkCapType.setSelection(lastCapitalsStyleIndex) binding.xkNumWords.setText(prefs.getString(PREF_KEY_NUM_WORDS, DEFAULT_NUMBER_OF_WORDS)) @@ -87,20 +84,22 @@ class XkPasswordGeneratorDialogFragment : DialogFragment() { } private fun makeAndSetPassword(passwordText: AppCompatTextView) { - try { - passwordText.text = PasswordBuilder(requireContext()) - .setNumberOfWords(Integer.valueOf(binding.xkNumWords.text.toString())) - .setMinimumWordLength(DEFAULT_MIN_WORD_LENGTH) - .setMaximumWordLength(DEFAULT_MAX_WORD_LENGTH) - .setSeparator(binding.xkSeparator.text.toString()) - .appendNumbers(binding.xkNumberSymbolMask.text!!.count { c -> c == EXTRA_CHAR_PLACEHOLDER_DIGIT }) - .appendSymbols(binding.xkNumberSymbolMask.text!!.count { c -> c == EXTRA_CHAR_PLACEHOLDER_SYMBOL }) - .setCapitalization(CapsType.valueOf(binding.xkCapType.selectedItem.toString())).create() - } catch (e: PasswordGenerator.PasswordGeneratorException) { - Toast.makeText(requireActivity(), e.message, Toast.LENGTH_SHORT).show() - tag("xkpw").e(e, "failure generating xkpasswd") - passwordText.text = FALLBACK_ERROR_PASS - } + PasswordBuilder(requireContext()) + .setNumberOfWords(Integer.valueOf(binding.xkNumWords.text.toString())) + .setMinimumWordLength(DEFAULT_MIN_WORD_LENGTH) + .setMaximumWordLength(DEFAULT_MAX_WORD_LENGTH) + .setSeparator(binding.xkSeparator.text.toString()) + .appendNumbers(binding.xkNumberSymbolMask.text!!.count { c -> c == EXTRA_CHAR_PLACEHOLDER_DIGIT }) + .appendSymbols(binding.xkNumberSymbolMask.text!!.count { c -> c == EXTRA_CHAR_PLACEHOLDER_SYMBOL }) + .setCapitalization(CapsType.valueOf(binding.xkCapType.selectedItem.toString())).create() + .fold( + success = { passwordText.text = it }, + failure = { e -> + Toast.makeText(requireActivity(), e.message, Toast.LENGTH_SHORT).show() + tag("xkpw").e(e, "failure generating xkpasswd") + passwordText.text = FALLBACK_ERROR_PASS + }, + ) } private fun setPreferences() { |