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() private val accounts = ArrayList() private val accountViewModels = ArrayList() 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) } }