diff --git a/app/src/main/java/cy/agorise/bitsybitshareswallet/adapters/BalancesAdapter.kt b/app/src/main/java/cy/agorise/bitsybitshareswallet/adapters/BalancesAdapter.kt index 47a1d57..c1df98f 100644 --- a/app/src/main/java/cy/agorise/bitsybitshareswallet/adapters/BalancesAdapter.kt +++ b/app/src/main/java/cy/agorise/bitsybitshareswallet/adapters/BalancesAdapter.kt @@ -8,16 +8,16 @@ import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.SortedList import cy.agorise.bitsybitshareswallet.R -import cy.agorise.bitsybitshareswallet.database.entities.Balance +import cy.agorise.bitsybitshareswallet.database.joins.BalanceDetail class BalancesAdapter(private val context: Context) : RecyclerView.Adapter() { private val mComparator = - Comparator { a, b -> a.assetId.compareTo(b.assetId) } + Comparator { a, b -> a.symbol.compareTo(b.symbol) } private val mSortedList = - SortedList(Balance::class.java, object : SortedList.Callback() { + SortedList(BalanceDetail::class.java, object : SortedList.Callback() { override fun onInserted(position: Int, count: Int) { notifyItemRangeInserted(position, count) } @@ -34,16 +34,16 @@ class BalancesAdapter(private val context: Context) : notifyItemRangeChanged(position, count) } - override fun compare(a: Balance, b: Balance): Int { + override fun compare(a: BalanceDetail, b: BalanceDetail): Int { return mComparator.compare(a, b) } - override fun areContentsTheSame(oldItem: Balance, newItem: Balance): Boolean { + override fun areContentsTheSame(oldItem: BalanceDetail, newItem: BalanceDetail): Boolean { return oldItem == newItem } - override fun areItemsTheSame(item1: Balance, item2: Balance): Boolean { - return item1.assetId == item2.assetId + override fun areItemsTheSame(item1: BalanceDetail, item2: BalanceDetail): Boolean { + return item1.id == item2.id } }) @@ -62,23 +62,25 @@ class BalancesAdapter(private val context: Context) : override fun onBindViewHolder(viewHolder: ViewHolder, position: Int) { val balance = mSortedList.get(position) - val amount = "${balance.assetAmount} ${balance.assetId}" - viewHolder.tvBalance.text = amount + val amount = balance.amount.toDouble() / Math.pow(10.0, balance.precision.toDouble()) + + viewHolder.tvBalance.text = + String.format("%." + Math.min(balance.precision, 8) + "f %s", amount, balance.symbol) } - fun add(balance: Balance) { + fun add(balance: BalanceDetail) { mSortedList.add(balance) } - fun remove(balance: Balance) { + fun remove(balance: BalanceDetail) { mSortedList.remove(balance) } - fun add(balances: List) { + fun add(balances: List) { mSortedList.addAll(balances) } - fun remove(balances: List) { + fun remove(balances: List) { mSortedList.beginBatchedUpdates() for (balance in balances) { mSortedList.remove(balance) @@ -86,7 +88,7 @@ class BalancesAdapter(private val context: Context) : mSortedList.endBatchedUpdates() } - fun replaceAll(balances: List) { + fun replaceAll(balances: List) { mSortedList.beginBatchedUpdates() for (i in mSortedList.size() - 1 downTo 0) { val balance = mSortedList.get(i) diff --git a/app/src/main/java/cy/agorise/bitsybitshareswallet/database/BitsyDatabase.kt b/app/src/main/java/cy/agorise/bitsybitshareswallet/database/BitsyDatabase.kt index fc5205a..63078a8 100644 --- a/app/src/main/java/cy/agorise/bitsybitshareswallet/database/BitsyDatabase.kt +++ b/app/src/main/java/cy/agorise/bitsybitshareswallet/database/BitsyDatabase.kt @@ -6,6 +6,8 @@ import androidx.room.Room import androidx.room.RoomDatabase import cy.agorise.bitsybitshareswallet.database.daos.* import cy.agorise.bitsybitshareswallet.database.entities.* +import cy.agorise.bitsybitshareswallet.database.joins.BalanceDetail +import cy.agorise.bitsybitshareswallet.database.joins.BalanceDetailDao @Database(entities = [ Asset::class, @@ -24,6 +26,7 @@ abstract class BitsyDatabase : RoomDatabase() { abstract fun equivalentValueDao(): EquivalentValueDao abstract fun transferDao(): TransferDao abstract fun userAccountDao(): UserAccountDao + abstract fun balanceDetailDao(): BalanceDetailDao companion object { diff --git a/app/src/main/java/cy/agorise/bitsybitshareswallet/database/joins/BalanceDetail.kt b/app/src/main/java/cy/agorise/bitsybitshareswallet/database/joins/BalanceDetail.kt new file mode 100644 index 0000000..ab9e2f9 --- /dev/null +++ b/app/src/main/java/cy/agorise/bitsybitshareswallet/database/joins/BalanceDetail.kt @@ -0,0 +1,8 @@ +package cy.agorise.bitsybitshareswallet.database.joins + +data class BalanceDetail( + val id: String, + val amount: Long, + val precision: Int, + val symbol: String +) \ No newline at end of file diff --git a/app/src/main/java/cy/agorise/bitsybitshareswallet/database/joins/BalanceDetailDao.kt b/app/src/main/java/cy/agorise/bitsybitshareswallet/database/joins/BalanceDetailDao.kt new file mode 100644 index 0000000..dd7ec5d --- /dev/null +++ b/app/src/main/java/cy/agorise/bitsybitshareswallet/database/joins/BalanceDetailDao.kt @@ -0,0 +1,12 @@ +package cy.agorise.bitsybitshareswallet.database.joins + +import androidx.lifecycle.LiveData +import androidx.room.Dao +import androidx.room.Query + +@Dao +interface BalanceDetailDao { + @Query("SELECT assets.id AS id, balances.asset_amount AS amount, assets.precision, assets.symbol " + + "FROM balances INNER JOIN assets on balances.asset_id = assets.id") + fun getAll(): LiveData> +} \ No newline at end of file diff --git a/app/src/main/java/cy/agorise/bitsybitshareswallet/fragments/BalancesFragment.kt b/app/src/main/java/cy/agorise/bitsybitshareswallet/fragments/BalancesFragment.kt index 0a3a5f7..08fe51d 100644 --- a/app/src/main/java/cy/agorise/bitsybitshareswallet/fragments/BalancesFragment.kt +++ b/app/src/main/java/cy/agorise/bitsybitshareswallet/fragments/BalancesFragment.kt @@ -14,11 +14,11 @@ import androidx.recyclerview.widget.LinearLayoutManager import cy.agorise.bitsybitshareswallet.R import cy.agorise.bitsybitshareswallet.adapters.BalancesAdapter import cy.agorise.bitsybitshareswallet.adapters.TransactionsAdapter -import cy.agorise.bitsybitshareswallet.database.entities.Balance import cy.agorise.bitsybitshareswallet.database.entities.Transfer import cy.agorise.bitsybitshareswallet.database.entities.UserAccount +import cy.agorise.bitsybitshareswallet.database.joins.BalanceDetail import cy.agorise.bitsybitshareswallet.utils.Constants -import cy.agorise.bitsybitshareswallet.viewmodels.BalanceViewModel +import cy.agorise.bitsybitshareswallet.viewmodels.BalanceDetailViewModel import cy.agorise.bitsybitshareswallet.viewmodels.TransactionViewModel import cy.agorise.bitsybitshareswallet.viewmodels.UserAccountViewModel import kotlinx.android.synthetic.main.fragment_balances.* @@ -26,7 +26,7 @@ import kotlinx.android.synthetic.main.fragment_balances.* class BalancesFragment : Fragment() { private lateinit var mUserAccountViewModel: UserAccountViewModel - private lateinit var mBalanceViewModel: BalanceViewModel + private lateinit var mBalanceDetailViewModel: BalanceDetailViewModel private lateinit var mTransactionViewModel: TransactionViewModel override fun onCreateView( @@ -49,15 +49,15 @@ class BalancesFragment : Fragment() { tvAccountName.text = user.name }) - // Configure BalanceViewModel to show the current balances - mBalanceViewModel = ViewModelProviders.of(this).get(BalanceViewModel::class.java) + // Configure BalanceDetailViewModel to show the current balances + mBalanceDetailViewModel = ViewModelProviders.of(this).get(BalanceDetailViewModel::class.java) val balancesAdapter = BalancesAdapter(context!!) rvBalances.adapter = balancesAdapter rvBalances.layoutManager = GridLayoutManager(context, 2) - mBalanceViewModel.getAll().observe(this, Observer> { balances -> - balancesAdapter.replaceAll(balances) + mBalanceDetailViewModel.getAll().observe(this, Observer> { balancesDetails -> + balancesAdapter.replaceAll(balancesDetails) }) // Configure TransactionViewModel to show the transaction history diff --git a/app/src/main/java/cy/agorise/bitsybitshareswallet/repositories/BalanceDetailRepository.kt b/app/src/main/java/cy/agorise/bitsybitshareswallet/repositories/BalanceDetailRepository.kt new file mode 100644 index 0000000..28c8772 --- /dev/null +++ b/app/src/main/java/cy/agorise/bitsybitshareswallet/repositories/BalanceDetailRepository.kt @@ -0,0 +1,22 @@ +package cy.agorise.bitsybitshareswallet.repositories + +import android.content.Context +import androidx.lifecycle.LiveData +import cy.agorise.bitsybitshareswallet.database.BitsyDatabase +import cy.agorise.bitsybitshareswallet.database.joins.BalanceDetail +import cy.agorise.bitsybitshareswallet.database.joins.BalanceDetailDao + +class BalanceDetailRepository internal constructor(context: Context) { + + private val mBalanceDetailDao: BalanceDetailDao + + init { + val db = BitsyDatabase.getDatabase(context) + mBalanceDetailDao = db!!.balanceDetailDao() + } + + fun getAll(): LiveData> { + return mBalanceDetailDao.getAll() + } + +} \ No newline at end of file diff --git a/app/src/main/java/cy/agorise/bitsybitshareswallet/viewmodels/BalanceDetailViewModel.kt b/app/src/main/java/cy/agorise/bitsybitshareswallet/viewmodels/BalanceDetailViewModel.kt new file mode 100644 index 0000000..93fcdfe --- /dev/null +++ b/app/src/main/java/cy/agorise/bitsybitshareswallet/viewmodels/BalanceDetailViewModel.kt @@ -0,0 +1,16 @@ +package cy.agorise.bitsybitshareswallet.viewmodels + +import android.app.Application +import androidx.lifecycle.AndroidViewModel +import androidx.lifecycle.LiveData +import cy.agorise.bitsybitshareswallet.database.joins.BalanceDetail +import cy.agorise.bitsybitshareswallet.repositories.BalanceDetailRepository + + +class BalanceDetailViewModel(application: Application) : AndroidViewModel(application) { + private var mRepository = BalanceDetailRepository(application) + + internal fun getAll(): LiveData> { + return mRepository.getAll() + } +} \ No newline at end of file diff --git a/app/src/main/java/cy/agorise/bitsybitshareswallet/viewmodels/BalanceViewModel.kt b/app/src/main/java/cy/agorise/bitsybitshareswallet/viewmodels/BalanceViewModel.kt deleted file mode 100644 index 5c4a0b8..0000000 --- a/app/src/main/java/cy/agorise/bitsybitshareswallet/viewmodels/BalanceViewModel.kt +++ /dev/null @@ -1,16 +0,0 @@ -package cy.agorise.bitsybitshareswallet.viewmodels - -import android.app.Application -import androidx.lifecycle.AndroidViewModel -import androidx.lifecycle.LiveData -import cy.agorise.bitsybitshareswallet.database.entities.Balance -import cy.agorise.bitsybitshareswallet.repositories.BalanceRepository - - -class BalanceViewModel(application: Application) : AndroidViewModel(application) { - private var mRepository = BalanceRepository(application) - - internal fun getAll(): LiveData> { - return mRepository.getAll() - } -} \ No newline at end of file