- Add method to update account balances.

- Create BalancesRepository to handle Balances related db operations.
This commit is contained in:
Severiano Jaramillo 2018-11-28 21:52:00 -06:00
parent 51363bdf00
commit fc98208c30
3 changed files with 97 additions and 2 deletions

View file

@ -2,23 +2,40 @@ package cy.agorise.bitsybitshareswallet.activities
import android.content.Intent
import android.os.Bundle
import android.preference.PreferenceManager
import android.util.Log
import android.view.Menu
import android.view.MenuItem
import android.widget.Toast
import androidx.collection.LongSparseArray
import com.google.android.material.bottomnavigation.BottomNavigationView
import cy.agorise.bitsybitshareswallet.R
import cy.agorise.bitsybitshareswallet.entities.Balance
import cy.agorise.bitsybitshareswallet.fragments.BalancesFragment
import cy.agorise.bitsybitshareswallet.fragments.MerchantsFragment
import cy.agorise.bitsybitshareswallet.processors.TransfersLoader
import cy.agorise.bitsybitshareswallet.repositories.BalanceRepository
import cy.agorise.bitsybitshareswallet.utils.Constants
import cy.agorise.graphenej.AssetAmount
import cy.agorise.graphenej.RPC
import cy.agorise.graphenej.UserAccount
import cy.agorise.graphenej.api.ApiAccess
import cy.agorise.graphenej.api.ConnectionStatusUpdate
import cy.agorise.graphenej.api.calls.GetAccountBalances
import cy.agorise.graphenej.models.JsonRpcResponse
import kotlinx.android.synthetic.main.activity_main.*
import java.util.ArrayList
class MainActivity : ConnectedActivity() {
private val TAG = this.javaClass.simpleName
private val requestMap = LongSparseArray<String>()
/* Current user account */
private var mCurrentAccount: UserAccount? = null
private var mBalanceRepository: BalanceRepository? = null
private val mOnNavigationItemSelectedListener = BottomNavigationView.OnNavigationItemSelectedListener { item ->
when (item.itemId) {
R.id.navigation_receive -> {
@ -47,6 +64,13 @@ class MainActivity : ConnectedActivity() {
navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener)
navigation.selectedItemId = R.id.navigation_balances
val userId = PreferenceManager.getDefaultSharedPreferences(this)
.getString(Constants.KEY_CURRENT_ACCOUNT_ID, "")
if (userId != "")
mCurrentAccount = UserAccount(userId)
mBalanceRepository = BalanceRepository(this)
}
private fun loadBalancesFragment() {
@ -79,7 +103,9 @@ class MainActivity : ConnectedActivity() {
}
override fun handleJsonRpcResponse(response: JsonRpcResponse<*>) {
if (requestMap.get(response.id) == RPC.CALL_GET_ACCOUNT_BALANCES) {
handleBalanceUpdate(response as JsonRpcResponse<List<AssetAmount>>)
}
}
/**
@ -100,8 +126,38 @@ class MainActivity : ConnectedActivity() {
Log.d(TAG, "ConnectionStatusUpdate: API_NETWORK_BROADCAST")
// Instantiating this loader is enough to kick-start the transfers loading procedure
TransfersLoader(this, lifecycle)
updateBalances()
}
}
}
}
private fun updateBalances() {
if (mNetworkService!!.isConnected) {
val id = mNetworkService!!.sendMessage(
GetAccountBalances(mCurrentAccount, ArrayList()),
GetAccountBalances.REQUIRED_API
)
requestMap.put(id, RPC.CALL_GET_ACCOUNT_BALANCES)
}
}
private fun handleBalanceUpdate(response: JsonRpcResponse<List<AssetAmount>>) {
Log.d(TAG, "handleBalanceUpdate")
val now = System.currentTimeMillis() / 1000
val assetBalances = response.result
val balances = ArrayList<Balance>()
for (assetBalance in assetBalances) {
val balance = Balance(
mCurrentAccount!!.objectId,
assetBalance.asset.objectId,
assetBalance.amount.toLong(),
now
)
balances.add(balance)
}
mBalanceRepository!!.insertAll(balances)
}
}

View file

@ -3,6 +3,7 @@ package cy.agorise.bitsybitshareswallet.daos
import androidx.lifecycle.LiveData
import androidx.room.Dao
import androidx.room.Insert
import androidx.room.OnConflictStrategy
import androidx.room.Query
import cy.agorise.bitsybitshareswallet.entities.Balance
@ -11,6 +12,9 @@ interface BalanceDao {
@Insert
fun insert(balance: Balance)
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insertAll(balances: List<Balance>)
@Query("SELECT * FROM balances")
fun getAllBalances(): LiveData<List<Balance>>
fun getAll(): LiveData<List<Balance>>
}

View file

@ -0,0 +1,35 @@
package cy.agorise.bitsybitshareswallet.repositories
import android.content.Context
import android.os.AsyncTask
import androidx.lifecycle.LiveData
import cy.agorise.bitsybitshareswallet.daos.BalanceDao
import cy.agorise.bitsybitshareswallet.daos.BitsyDatabase
import cy.agorise.bitsybitshareswallet.entities.Balance
class BalanceRepository internal constructor(context: Context) {
private val mBalanceDao: BalanceDao
init {
val db = BitsyDatabase.getDatabase(context)
mBalanceDao = db!!.balanceDao()
}
fun insertAll(balances: List<Balance>) {
insertAllAsyncTask(mBalanceDao).execute(balances)
}
fun getAll(): LiveData<List<Balance>> {
return mBalanceDao.getAll()
}
private class insertAllAsyncTask internal constructor(private val mAsyncTaskDao: BalanceDao) :
AsyncTask<List<Balance>, Void, Void>() {
override fun doInBackground(vararg transfers: List<Balance>): Void? {
mAsyncTaskDao.insertAll(transfers[0])
return null
}
}
}