package jackall.overlaymulticounter.viewmodel
import android.databinding.BaseObservable
import android.databinding.BindingAdapter
import android.support.v7.widget.DividerItemDecoration
import android.support.v7.widget.LinearLayoutManager
import android.support.v7.widget.RecyclerView
import android.view.View
import io.realm.OrderedRealmCollectionChangeListener
import io.realm.RealmResults
import jackall.overlaymulticounter.App
import jackall.overlaymulticounter.CounterAdapter
import jackall.overlaymulticounter.R
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>>
var results: RealmResults<Counter>? = null
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)
}
}
results = counterRealmHelper.findAll()
results?.forEachIndexed { index, counter ->
items.add(CounterItemViewModel(counter, this@OverlayCounterViewModel as CounterContract))
}
results?.addChangeListener(realmChangeListener)
counterAdapter = CounterAdapter(App.get(), items)
}
fun onClickAdd(view: View) {
counterRealmHelper.insert(
Counter(
id = counterRealmHelper.getNextId(),
title = "Counter${counterRealmHelper.getNextId()}",
count = 0
)
)
}
fun onClickRemove(view: View) {
counterRealmHelper.removeLast()
}
fun onClickResetAll(view: View) {
counterRealmHelper.resetAll()
}
override fun plus(id: Int) {
counterRealmHelper.plus(id)
}
override fun minus(id: Int) {
counterRealmHelper.minus(id)
}
override fun reset(id: Int) {
counterRealmHelper.reset(id)
}
override fun editTitle(id: Int, title: String) {
counterRealmHelper.updateTitle(id, title)
}
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
val dividerItemDecoration = DividerItemDecoration(recyclerView.context, LinearLayoutManager.VERTICAL)
dividerItemDecoration.setDrawable(recyclerView.context.resources.getDrawable(R.drawable.divider))
recyclerView.addItemDecoration(dividerItemDecoration)
}
}
}