Create method to validate if the suggested user account given by the user is an available account name or not and display a message to the user with the result, in CreateAccountFragment.

master
Severiano Jaramillo 2019-01-07 20:35:29 -06:00
parent e530dc531e
commit 64d30f42ab
2 changed files with 40 additions and 3 deletions

View File

@ -15,6 +15,8 @@ import cy.agorise.bitsybitshareswallet.utils.toast
import cy.agorise.graphenej.Address
import cy.agorise.graphenej.BrainKey
import cy.agorise.graphenej.api.ConnectionStatusUpdate
import cy.agorise.graphenej.api.calls.GetAccountByName
import cy.agorise.graphenej.models.AccountProperties
import cy.agorise.graphenej.models.JsonRpcResponse
import io.reactivex.android.schedulers.AndroidSchedulers
import kotlinx.android.synthetic.main.fragment_create_account.*
@ -31,6 +33,8 @@ class CreateAccountFragment : ConnectedFragment() {
private const val BRAINKEY_FILE = "brainkeydict.txt"
private const val MIN_ACCOUNT_NAME_LENGTH = 8
private const val RESPONSE_GET_ACCOUNT_BY_NAME = 1
}
private lateinit var mBrainKey: BrainKey
@ -41,6 +45,9 @@ class CreateAccountFragment : ConnectedFragment() {
private var isPINConfirmationValid = false
private var isAccountValidAndAvailable = false
// Map used to keep track of request and response id pairs
private val responseMap = HashMap<Long, Int>()
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
setHasOptionsMenu(true)
@ -54,7 +61,7 @@ class CreateAccountFragment : ConnectedFragment() {
mDisposables.add(
tietAccountName.textChanges()
.skipInitialValue()
.debounce(500, TimeUnit.MILLISECONDS)
.debounce(800, TimeUnit.MILLISECONDS)
.observeOn(AndroidSchedulers.mainThread())
.subscribe { validateAccountName(it.toString()) }
)
@ -89,11 +96,15 @@ class CreateAccountFragment : ConnectedFragment() {
isAccountValidAndAvailable = false
if ( !isAccountNameValid(accountName) ) {
tilAccountName.error = getString(R.string.error__invalid_account_name)
tilAccountName.helperText = ""
tilAccountName.error = getString(R.string.error__invalid_account_name)
} else {
tilAccountName.isErrorEnabled = false
tilAccountName.helperText = getString(R.string.text__verifying_account_availability)
val id = mNetworkService?.sendMessage(GetAccountByName(accountName), GetAccountByName.REQUIRED_API)
if (id != null)
responseMap[id] = RESPONSE_GET_ACCOUNT_BY_NAME
}
enableDisableCreateButton()
@ -143,13 +154,37 @@ class CreateAccountFragment : ConnectedFragment() {
}
override fun handleJsonRpcResponse(response: JsonRpcResponse<*>) {
// TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
if (responseMap.containsKey(response.id)) {
val responseType = responseMap[response.id]
when (responseType) {
RESPONSE_GET_ACCOUNT_BY_NAME -> handleAccountName(response.result)
}
responseMap.remove(response.id)
}
}
override fun handleConnectionStatusUpdate(connectionStatusUpdate: ConnectionStatusUpdate) {
// TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
/**
* Handles the response from the NetworkService's GetAccountByName call to decide if the user's suggested
* account is available or not.
*/
private fun handleAccountName(result: Any?) {
if (result is AccountProperties) {
tilAccountName.helperText = ""
tilAccountName.error = getString(R.string.error__account_not_available)
isAccountValidAndAvailable = false
} else {
tilAccountName.isErrorEnabled = false
tilAccountName.helperText = getString(R.string.text__account_is_available)
isAccountValidAndAvailable = true
}
enableDisableCreateButton()
}
/**
* Method that generates a fresh key that will be controlling the newly created account.
*/

View File

@ -30,6 +30,8 @@
<string name="error__read_dict_file">Error reading dictionary file</string>
<string name="error__invalid_account_name">The account name has to either have more than 8 characters, contain a number or have no vowels. The underscore character is also not allowed. </string>
<string name="text__verifying_account_availability">Verifying account availability…</string>
<string name="error__account_not_available">Account not available</string>
<string name="text__account_is_available">Account is available</string>
<!-- Home -->
<string name="title_transactions">Transactions</string>