From b90bffa96e60cdd5869fa6b3b43cbdefea918190 Mon Sep 17 00:00:00 2001 From: aritra Date: Sat, 9 Mar 2024 21:28:02 +0530 Subject: [PATCH] Created Password Generator ViewModel --- .../account/PasswordGeneratorViewModel.kt | 85 +++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 app/src/main/java/com/geekymusketeers/uncrack/presentation/account/PasswordGeneratorViewModel.kt diff --git a/app/src/main/java/com/geekymusketeers/uncrack/presentation/account/PasswordGeneratorViewModel.kt b/app/src/main/java/com/geekymusketeers/uncrack/presentation/account/PasswordGeneratorViewModel.kt new file mode 100644 index 00000000..61da80af --- /dev/null +++ b/app/src/main/java/com/geekymusketeers/uncrack/presentation/account/PasswordGeneratorViewModel.kt @@ -0,0 +1,85 @@ +package com.geekymusketeers.uncrack.presentation.account + +import androidx.lifecycle.LiveData +import androidx.lifecycle.MutableLiveData +import androidx.lifecycle.ViewModel +import dagger.hilt.android.lifecycle.HiltViewModel + +@HiltViewModel +class PasswordGeneratorViewModel : ViewModel() { + + private val _password = MutableLiveData() + val password: LiveData = _password + + private val _passwordLength = MutableLiveData() + val passwordLength: LiveData = _passwordLength + + private val _includeUppercase = MutableLiveData() + val includeUppercase: LiveData = _includeUppercase + + private val _includeLowercase = MutableLiveData() + val includeLowercase: LiveData = _includeLowercase + + private val _includeNumbers = MutableLiveData() + val includeNumbers: LiveData = _includeNumbers + + private val _includeSpecialChars = MutableLiveData() + val includeSpecialChars: LiveData = _includeSpecialChars + + fun generatePassword() { + _password.value = generatePassword( + _passwordLength.value, + _includeUppercase.value, + _includeLowercase.value, + _includeNumbers.value, + _includeSpecialChars.value + ) + } + + fun updatePasswordLength(newLength: Int) { + _passwordLength.value = newLength + } + + fun updateIncludeUppercase(include: Boolean) { + _includeUppercase.value = include + } + + fun updateIncludeLowercase(include: Boolean) { + _includeLowercase.value = include + } + + fun updateIncludeNumbers(include: Boolean) { + _includeNumbers.value = include + } + + fun updateIncludeSpecialChars(include: Boolean) { + _includeSpecialChars.value = include + } + + private fun generatePassword( + length: Int?, + includeUppercase: Boolean?, + includeLowercase: Boolean?, + includeNumbers: Boolean?, + includeSpecialChars: Boolean? + ): String { + val charPool = buildString { + if (includeUppercase == true) { + append("ABCDEFGHIJKLMNOPQRSTUVWXYZ") + } + if (includeLowercase == true) { + append("abcdefghijklmnopqrstuvwxyz") + } + if (includeNumbers == true) { + append("0123456789") + } + if (includeSpecialChars == true) { + append("!@#$%^&*()_+") + } + } + + return (1..length!!) + .map { charPool.random() } + .joinToString("") + } +} \ No newline at end of file