From 397515fea94091ac2833278afdce6805ffc0c855 Mon Sep 17 00:00:00 2001 From: Severiano Jaramillo Date: Thu, 20 Dec 2018 13:57:47 -0600 Subject: [PATCH] Improve AutoSuggestAssetAdapter to use Bitsy's Asset model, which has a 'toString' method to automatically show the symbol of the AssetSelected in the AutoCompleteTextView. Also Add a variable to avoid clearing the QR code just after the user selects an Asset from the AutoComplete suggestions. --- .../adapters/AutoSuggestAssetAdapter.kt | 22 +-------- .../fragments/ReceiveTransactionFragment.kt | 45 ++++++++++++------- 2 files changed, 30 insertions(+), 37 deletions(-) diff --git a/app/src/main/java/cy/agorise/bitsybitshareswallet/adapters/AutoSuggestAssetAdapter.kt b/app/src/main/java/cy/agorise/bitsybitshareswallet/adapters/AutoSuggestAssetAdapter.kt index 0e2d78d..a80229b 100644 --- a/app/src/main/java/cy/agorise/bitsybitshareswallet/adapters/AutoSuggestAssetAdapter.kt +++ b/app/src/main/java/cy/agorise/bitsybitshareswallet/adapters/AutoSuggestAssetAdapter.kt @@ -1,12 +1,8 @@ package cy.agorise.bitsybitshareswallet.adapters import android.content.Context -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup import android.widget.ArrayAdapter -import android.widget.TextView -import cy.agorise.graphenej.Asset +import cy.agorise.bitsybitshareswallet.database.entities.Asset class AutoSuggestAssetAdapter(context: Context, resource: Int): ArrayAdapter(context, resource) { @@ -25,20 +21,4 @@ class AutoSuggestAssetAdapter(context: Context, resource: Int): override fun getItem(position: Int): Asset? { return mAssets[position] } - - override fun getView(position: Int, convertView: View?, parent: ViewGroup): View { - var cv = convertView - - if (cv == null) { - val inflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater - cv = inflater.inflate(android.R.layout.simple_spinner_dropdown_item, parent, false) - } - - val text: TextView = cv!!.findViewById(android.R.id.text1) - - val asset = getItem(position) - text.text = asset!!.symbol - - return cv - } } \ No newline at end of file diff --git a/app/src/main/java/cy/agorise/bitsybitshareswallet/fragments/ReceiveTransactionFragment.kt b/app/src/main/java/cy/agorise/bitsybitshareswallet/fragments/ReceiveTransactionFragment.kt index 1dc985a..23196d2 100644 --- a/app/src/main/java/cy/agorise/bitsybitshareswallet/fragments/ReceiveTransactionFragment.kt +++ b/app/src/main/java/cy/agorise/bitsybitshareswallet/fragments/ReceiveTransactionFragment.kt @@ -45,6 +45,7 @@ import java.text.DecimalFormat import java.text.DecimalFormatSymbols import java.util.* import java.util.concurrent.TimeUnit +import kotlin.collections.ArrayList class ReceiveTransactionFragment : Fragment(), ServiceConnection { private val TAG = this.javaClass.simpleName @@ -74,6 +75,9 @@ class ReceiveTransactionFragment : Fragment(), ServiceConnection { private var selectedAssetSymbol = "" + /** Used to avoid erasing the QR code when the user selects an item from the AutoComplete suggestions */ + private var selectedInAutoCompleteTextView = false + // Map used to keep track of request and response id pairs private val responseMap = HashMap() @@ -146,19 +150,6 @@ class ReceiveTransactionFragment : Fragment(), ServiceConnection { } } -// mAssetViewModel.getAll().observe(this, -// Observer> { assets -> -// val adapter = ArrayAdapter(context!!, -// android.R.layout.simple_dropdown_item_1line, assets) -// actvAsset.setAdapter(adapter) -// }) -// -// actvAsset.setOnItemClickListener { parent, _, position, _ -> -// val asset = parent.adapter.getItem(position) as cy.agorise.bitsybitshareswallet.database.entities.Asset -// mAsset = Asset(asset.id, asset.symbol, asset.precision) -// updateQR() -// } - // Use RxJava Debounce to create QR code only after the user stopped typing an amount mDisposables.add( RxTextView.textChanges(tietAmount) @@ -180,8 +171,11 @@ class ReceiveTransactionFragment : Fragment(), ServiceConnection { .map { it.toString().trim().toUpperCase() } .observeOn(AndroidSchedulers.mainThread()) .subscribe { - mAsset = null - updateQR() + if (!selectedInAutoCompleteTextView) { + mAsset = null + updateQR() + } + selectedInAutoCompleteTextView = false // Get a list of assets that match the already typed string by the user if (it.length > 1 && mNetworkService != null) { @@ -192,6 +186,13 @@ class ReceiveTransactionFragment : Fragment(), ServiceConnection { } ) + actvAsset.setOnItemClickListener { parent, _, position, _ -> + val asset = parent.adapter.getItem(position) as cy.agorise.bitsybitshareswallet.database.entities.Asset + mAsset = Asset(asset.id, asset.symbol, asset.precision) + selectedInAutoCompleteTextView = true + updateQR() + } + // Connect to the RxBus, which receives events from the NetworkService mDisposables.add( RxBus.getBusInstance() @@ -221,7 +222,19 @@ class ReceiveTransactionFragment : Fragment(), ServiceConnection { private fun handleListAssets(assetList: List) { Log.d(TAG, "handleListAssets") - mAutoSuggestAssetAdapter.setData(assetList) + val assets = ArrayList() + for (_asset in assetList) { + val asset = cy.agorise.bitsybitshareswallet.database.entities.Asset( + _asset.objectId, + _asset.symbol, + _asset.precision, + _asset.description ?: "", + _asset.bitassetId ?: "" + ) + + assets.add(asset) + } + mAutoSuggestAssetAdapter.setData(assets) mAutoSuggestAssetAdapter.notifyDataSetChanged() }