/* * Copyright (C) 2018 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.jephtecolin.kwii.util import androidx.lifecycle.ViewModel import androidx.databinding.Bindable import androidx.databinding.Observable import androidx.databinding.PropertyChangeRegistry /** * An [Observable] [ViewModel] for Data Binding. */ open class ObservableViewModel : ViewModel(), Observable { private val callbacks: PropertyChangeRegistry by lazy { PropertyChangeRegistry() } override fun addOnPropertyChangedCallback(callback: Observable.OnPropertyChangedCallback) { callbacks.add(callback) } override fun removeOnPropertyChangedCallback(callback: Observable.OnPropertyChangedCallback) { callbacks.remove(callback) } /** * Notifies listeners that all properties of this instance have changed. */ @Suppress("unused") fun notifyChange() { callbacks.notifyCallbacks(this, 0, null) } /** * Notifies listeners that a specific property has changed. The getter for the property * that changes should be marked with [Bindable] to generate a field in * `BR` to be used as `fieldId`. * * @param fieldId The generated BR id for the Bindable field. */ fun notifyPropertyChanged(fieldId: Int) { callbacks.notifyCallbacks(this, fieldId, null) } }