package jackall.overlaymulticounter.viewmodel import android.databinding.BaseObservable import android.databinding.BindingAdapter import android.support.v7.widget.LinearLayoutManager import android.support.v7.widget.RecyclerView import io.realm.OrderedRealmCollectionChangeListener import io.realm.RealmResults import jackall.overlaymulticounter.App import jackall.overlaymulticounter.CounterAdapter import jackall.overlaymulticounter.contract.CounterContract import jackall.overlaymulticounter.db.CounterRealmHelper import jackall.overlaymulticounter.vo.Counter import java.util.* /** * Created by matsumoto_k on 2017/11/08. */ class OverlayCounterViewModel : BaseObservable(), CounterContract { var counterAdapter: CounterAdapter? = null var counterRealmHelper = CounterRealmHelper() var realmChangeListener: OrderedRealmCollectionChangeListener<RealmResults<Counter>> init { val items = ArrayList<CounterItemViewModel>() realmChangeListener = OrderedRealmCollectionChangeListener { results, changeSet -> changeSet.insertions.forEach { counterAdapter?.insert(CounterItemViewModel(results.get(it), this@OverlayCounterViewModel as CounterContract)) } changeSet.deletions.forEach { counterAdapter?.remove(it) } } counterRealmHelper.findAll().apply { forEachIndexed { index, counter -> items.add(CounterItemViewModel(counter, this@OverlayCounterViewModel as CounterContract)) } addChangeListener(realmChangeListener) } counterAdapter = CounterAdapter(App.get(), items) } override fun plus(id: Int) { counterRealmHelper.plus(id) } override fun minus(id: Int) { counterRealmHelper.minus(id) } override fun reset(id: Int) { counterRealmHelper.reset(id) } fun onDestory() { counterRealmHelper.close() } object Adapter { @JvmStatic @BindingAdapter("android:setCounterAdapter") fun setCounterAdapter(recyclerView: RecyclerView, counterAdapter: CounterAdapter?) { if (counterAdapter == null) return recyclerView.layoutManager = LinearLayoutManager(App.get()) recyclerView.adapter = counterAdapter } } }