15cd681c345db8f606d7d5a8662e20e059f21a86cGeorge Mount/* 25cd681c345db8f606d7d5a8662e20e059f21a86cGeorge Mount * Copyright (C) 2015 The Android Open Source Project 35cd681c345db8f606d7d5a8662e20e059f21a86cGeorge Mount * 45cd681c345db8f606d7d5a8662e20e059f21a86cGeorge Mount * Licensed under the Apache License, Version 2.0 (the "License"); 55cd681c345db8f606d7d5a8662e20e059f21a86cGeorge Mount * you may not use this file except in compliance with the License. 65cd681c345db8f606d7d5a8662e20e059f21a86cGeorge Mount * You may obtain a copy of the License at 75cd681c345db8f606d7d5a8662e20e059f21a86cGeorge Mount * 85cd681c345db8f606d7d5a8662e20e059f21a86cGeorge Mount * http://www.apache.org/licenses/LICENSE-2.0 95cd681c345db8f606d7d5a8662e20e059f21a86cGeorge Mount * 105cd681c345db8f606d7d5a8662e20e059f21a86cGeorge Mount * Unless required by applicable law or agreed to in writing, software 115cd681c345db8f606d7d5a8662e20e059f21a86cGeorge Mount * distributed under the License is distributed on an "AS IS" BASIS, 125cd681c345db8f606d7d5a8662e20e059f21a86cGeorge Mount * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 135cd681c345db8f606d7d5a8662e20e059f21a86cGeorge Mount * See the License for the specific language governing permissions and 145cd681c345db8f606d7d5a8662e20e059f21a86cGeorge Mount * limitations under the License. 155cd681c345db8f606d7d5a8662e20e059f21a86cGeorge Mount */ 16fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountpackage android.databinding; 175cd681c345db8f606d7d5a8662e20e059f21a86cGeorge Mount 185cd681c345db8f606d7d5a8662e20e059f21a86cGeorge Mountimport java.util.Map; 195cd681c345db8f606d7d5a8662e20e059f21a86cGeorge Mount 20722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount/** 21722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount * A {@link Map} that notifies when items change. This kind of Map may be data bound 22722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount * and have the UI update as the map changes. 23722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount * <p> 24722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount * Implementers must call {@link OnMapChangedCallback#onMapChanged(ObservableMap, Object)} whenever 25722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount * an item is added, changed, or removed. 26722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount * <p> 27722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount * ObservableArrayMap is a convenient implementation of ObservableMap. 28722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount * MapChangeRegistry may help other implementations manage the callbacks. 29722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount * @see Observable 30722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount * @see ObservableList 31722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount */ 325cd681c345db8f606d7d5a8662e20e059f21a86cGeorge Mountpublic interface ObservableMap<K, V> extends Map<K, V> { 33722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount 34722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount /** 35722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount * Adds a callback to listen for changes to the ObservableMap. 36722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount * @param callback The callback to start listening for events. 37722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount */ 38722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount void addOnMapChangedCallback( 39722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount OnMapChangedCallback<? extends ObservableMap<K, V>, K, V> callback); 40722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount 41722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount /** 42722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount * Removes a previously added callback. 43722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount * @param callback The callback that no longer needs to be notified of map changes. 44722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount */ 45722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount void removeOnMapChangedCallback( 46722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount OnMapChangedCallback<? extends ObservableMap<K, V>, K, V> callback); 47722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount 48722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount /** 49722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount * A callback receiving notifications when an ObservableMap changes. 50722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount */ 51722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount abstract class OnMapChangedCallback<T extends ObservableMap<K, V>, K, V> { 52722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount 53722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount /** 54722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount * Called whenever an ObservableMap changes, including values inserted, deleted, 55722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount * and changed. 56722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount * @param sender The changing map. 57722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount * @param key The key of the value inserted, removed, or changed. 58722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount */ 59722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount public abstract void onMapChanged(T sender, K key); 60722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount } 615cd681c345db8f606d7d5a8662e20e059f21a86cGeorge Mount} 62