Newer
Older
OverlayMultiCounter / app / src / main / kotlin / jackall / overlaymulticounter / viewmodel / OverlayCounterViewModel.kt
MatsumotoKeiju on 9 Nov 2017 2 KB [add] Overlay Counter
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
        }
    }
}