1234567891011121314151617181920212223242526272829303132333435363738394041 |
- package com.chameth.yaotp.viewmodel
-
- import androidx.lifecycle.ViewModel
- import com.chameth.yaotp.accounts.Account
- import java.util.concurrent.CopyOnWriteArrayList
-
- class OtpListViewModel : ViewModel() {
-
- private val observers = CopyOnWriteArrayList<AccountObserver>()
- private val accounts = ArrayList<Account>()
- private val accountViewModels = ArrayList<OtpItemViewModel>()
-
- val numberOfAccounts: Int
- get() = accounts.size
-
- fun getViewModelForAccount(accountId: Int) = accountViewModels[accountId]
-
- fun addAccount(account: Account) {
- accounts.add(account)
- accountViewModels.add(OtpItemViewModel().also { it.account = account })
- observers.forEach { it.accountAdded(accounts.size - 1) }
- }
-
- fun removeAccount(account: Account) {
- val index = accounts.indexOf(account)
- if (index >= 0) {
- accounts.removeAt(index)
- accountViewModels.removeAt(index)
- observers.forEach { it.accountRemoved(index) }
- }
- }
-
- fun addObserver(observer: AccountObserver) = observers.add(observer)
- fun removeObserver(observer: AccountObserver) = observers.remove(observer)
-
- interface AccountObserver {
- fun accountAdded(position: Int)
- fun accountRemoved(position: Int)
- }
-
- }
|