From 49f920877af6bf50da81567be983ab7e29cf334c Mon Sep 17 00:00:00 2001 From: Severiano Jaramillo Date: Wed, 19 Dec 2018 20:25:58 -0600 Subject: [PATCH] Use the NetworkService's GetAssets call to obtain the information of missing Assets and store it into the database, this enables us to remove the DatabaseLoad Activity and new assets information is downloaded as needed. --- .../activities/ConnectedActivity.kt | 44 ++++++++++++++----- .../repositories/AssetRepository.kt | 6 +-- 2 files changed, 36 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/cy/agorise/bitsybitshareswallet/activities/ConnectedActivity.kt b/app/src/main/java/cy/agorise/bitsybitshareswallet/activities/ConnectedActivity.kt index c274d45..2045383 100644 --- a/app/src/main/java/cy/agorise/bitsybitshareswallet/activities/ConnectedActivity.kt +++ b/app/src/main/java/cy/agorise/bitsybitshareswallet/activities/ConnectedActivity.kt @@ -15,6 +15,7 @@ import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProviders import cy.agorise.bitsybitshareswallet.database.entities.Balance import cy.agorise.bitsybitshareswallet.processors.TransfersLoader +import cy.agorise.bitsybitshareswallet.repositories.AssetRepository import cy.agorise.bitsybitshareswallet.repositories.BalanceRepository import cy.agorise.bitsybitshareswallet.utils.Constants import cy.agorise.bitsybitshareswallet.viewmodels.BalanceViewModel @@ -25,16 +26,12 @@ import cy.agorise.graphenej.UserAccount import cy.agorise.graphenej.api.ConnectionStatusUpdate import cy.agorise.graphenej.api.android.NetworkService import cy.agorise.graphenej.api.android.RxBus -import cy.agorise.graphenej.api.calls.GetAccountBalances -import cy.agorise.graphenej.api.calls.GetAccounts -import cy.agorise.graphenej.api.calls.GetFullAccounts -import cy.agorise.graphenej.api.calls.GetObjects +import cy.agorise.graphenej.api.calls.* import cy.agorise.graphenej.models.AccountProperties import cy.agorise.graphenej.models.FullAccountDetails import cy.agorise.graphenej.models.JsonRpcResponse import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.disposables.Disposable -import java.util.* import kotlin.collections.ArrayList /** @@ -47,6 +44,7 @@ abstract class ConnectedActivity : AppCompatActivity(), ServiceConnection { private lateinit var mBalanceViewModel: BalanceViewModel private lateinit var mBalanceRepository: BalanceRepository + private lateinit var mAssetRepository: AssetRepository /* Current user account */ protected var mCurrentAccount: UserAccount? = null @@ -59,7 +57,7 @@ abstract class ConnectedActivity : AppCompatActivity(), ServiceConnection { private var storedOpCount: Long = -1 private var missingUserAccounts = ArrayList() - private var missingAssets = ArrayList() + private var missingAssets = ArrayList() /* Network service connection */ protected var mNetworkService: NetworkService? = null @@ -78,6 +76,7 @@ abstract class ConnectedActivity : AppCompatActivity(), ServiceConnection { mCurrentAccount = UserAccount(userId) mBalanceRepository = BalanceRepository(this) + mAssetRepository = AssetRepository(this) // Configure UserAccountViewModel to obtain the missing account ids mUserAccountViewModel = ViewModelProviders.of(this).get(UserAccountViewModel::class.java) @@ -98,7 +97,8 @@ abstract class ConnectedActivity : AppCompatActivity(), ServiceConnection { mBalanceViewModel.getMissingAssetIds().observe(this, Observer>{ assetIds -> if (assetIds.isNotEmpty()) { missingAssets.clear() - missingAssets.addAll(assetIds) + for (assetId in assetIds) + missingAssets.add(Asset(assetId)) mHandler.postDelayed(mRequestMissingAssetsTask, Constants.NETWORK_SERVICE_RETRY_PERIOD) } @@ -165,6 +165,10 @@ abstract class ConnectedActivity : AppCompatActivity(), ServiceConnection { } } + /** + * Receives a list of missing [AccountProperties] from which it extracts the required information to + * create a list of BiTSy's UserAccount objects and stores them into the database + */ private fun handleAccountProperties(accountPropertiesList: List) { val userAccounts = ArrayList() @@ -198,8 +202,27 @@ abstract class ConnectedActivity : AppCompatActivity(), ServiceConnection { mBalanceRepository.insertAll(balances) } - private fun handleAssets(assets: List) { - Log.d(TAG, "handleAssets") + /** + * Receives a list of missing [Asset] from which it extracts the required information to + * create a list of BiTSy's Asset objects and stores them into the database + */ + private fun handleAssets(_assets: List) { + val assets = ArrayList() + + for (_asset in _assets) { + val asset = cy.agorise.bitsybitshareswallet.database.entities.Asset( + _asset.objectId, + _asset.symbol, + _asset.precision, + _asset.description ?: "", + _asset.bitassetId ?: "" + ) + + assets.add(asset) + } + + mAssetRepository.insertAll(assets) + missingAssets.clear() } private fun updateBalances() { @@ -230,8 +253,7 @@ abstract class ConnectedActivity : AppCompatActivity(), ServiceConnection { private val mRequestMissingAssetsTask = object : Runnable { override fun run() { if (mNetworkService!!.isConnected) { - // TODO use GetAssets to obtain the missing assets and save them into the db - mNetworkService!!.sendMessage(GetObjects(missingAssets), GetAccounts.REQUIRED_API) + mNetworkService!!.sendMessage(GetAssets(missingAssets), GetAssets.REQUIRED_API) } else if (missingAssets.isNotEmpty()){ mHandler.postDelayed(this, Constants.NETWORK_SERVICE_RETRY_PERIOD) } diff --git a/app/src/main/java/cy/agorise/bitsybitshareswallet/repositories/AssetRepository.kt b/app/src/main/java/cy/agorise/bitsybitshareswallet/repositories/AssetRepository.kt index f69eb5a..60aa72d 100644 --- a/app/src/main/java/cy/agorise/bitsybitshareswallet/repositories/AssetRepository.kt +++ b/app/src/main/java/cy/agorise/bitsybitshareswallet/repositories/AssetRepository.kt @@ -1,18 +1,18 @@ package cy.agorise.bitsybitshareswallet.repositories -import android.app.Application +import android.content.Context import android.os.AsyncTask import androidx.lifecycle.LiveData import cy.agorise.bitsybitshareswallet.database.daos.AssetDao import cy.agorise.bitsybitshareswallet.database.BitsyDatabase import cy.agorise.bitsybitshareswallet.database.entities.Asset -class AssetRepository internal constructor(application: Application) { +class AssetRepository internal constructor(context: Context) { private val mAssetDao: AssetDao init { - val db = BitsyDatabase.getDatabase(application) + val db = BitsyDatabase.getDatabase(context) mAssetDao = db!!.assetDao() }