13d4bdfeeb2ffd1b2ec8a26abd1f4306295a66a43Yigit Boyar/* 23d4bdfeeb2ffd1b2ec8a26abd1f4306295a66a43Yigit Boyar * Copyright (C) 2014 The Android Open Source Project 33d4bdfeeb2ffd1b2ec8a26abd1f4306295a66a43Yigit Boyar * 43d4bdfeeb2ffd1b2ec8a26abd1f4306295a66a43Yigit Boyar * Licensed under the Apache License, Version 2.0 (the "License"); 53d4bdfeeb2ffd1b2ec8a26abd1f4306295a66a43Yigit Boyar * you may not use this file except in compliance with the License. 63d4bdfeeb2ffd1b2ec8a26abd1f4306295a66a43Yigit Boyar * You may obtain a copy of the License at 73d4bdfeeb2ffd1b2ec8a26abd1f4306295a66a43Yigit Boyar * 83d4bdfeeb2ffd1b2ec8a26abd1f4306295a66a43Yigit Boyar * http://www.apache.org/licenses/LICENSE-2.0 93d4bdfeeb2ffd1b2ec8a26abd1f4306295a66a43Yigit Boyar * 103d4bdfeeb2ffd1b2ec8a26abd1f4306295a66a43Yigit Boyar * Unless required by applicable law or agreed to in writing, software 113d4bdfeeb2ffd1b2ec8a26abd1f4306295a66a43Yigit Boyar * distributed under the License is distributed on an "AS IS" BASIS, 123d4bdfeeb2ffd1b2ec8a26abd1f4306295a66a43Yigit Boyar * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 133d4bdfeeb2ffd1b2ec8a26abd1f4306295a66a43Yigit Boyar * See the License for the specific language governing permissions and 143d4bdfeeb2ffd1b2ec8a26abd1f4306295a66a43Yigit Boyar * limitations under the License. 153d4bdfeeb2ffd1b2ec8a26abd1f4306295a66a43Yigit Boyar */ 163d4bdfeeb2ffd1b2ec8a26abd1f4306295a66a43Yigit Boyar 17fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountpackage android.databinding; 18085724fd84795ae1631747443c43f77c08e11a28Yigit Boyar 19722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount/** 20722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount * Observable classes provide a way in which data bound UI can be notified of changes. 21722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount * {@link ObservableList} and {@link ObservableMap} also provide the ability to notify when 22d37b47419005587c52ca4c099432327b7f06478dYigit Boyar * changes occur. ObservableField, ObservableParcelable, ObservableBoolean, ObservableByte, 23d37b47419005587c52ca4c099432327b7f06478dYigit Boyar * ObservableShort, ObservableInt, ObservableLong, ObservableFloat, and ObservableDouble provide 24722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount * a means by which properties may be notified without implementing Observable. 25722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount * <p> 26722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount * An Observable object should notify the {@link OnPropertyChangedCallback} whenever 27722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount * an observed property of the class changes. 28722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount * <p> 29722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount * The getter for an observable property should be annotated with {@link Bindable}. 30722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount * <p> 31722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount * Convenience class BaseObservable implements this interface and PropertyChangeRegistry 32722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount * can help classes that don't extend BaseObservable to implement the listener registry. 33722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount */ 34085724fd84795ae1631747443c43f77c08e11a28Yigit Boyarpublic interface Observable { 352c86cdbaf189e2b1774af7f64a2974de9321673fGeorge Mount 36722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount /** 37722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount * Adds a callback to listen for changes to the Observable. 38722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount * @param callback The callback to start listening. 39722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount */ 40722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount void addOnPropertyChangedCallback(OnPropertyChangedCallback callback); 41722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount 42722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount /** 43722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount * Removes a callback from those listening for changes. 44722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount * @param callback The callback that should stop listening. 45722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount */ 46722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount void removeOnPropertyChangedCallback(OnPropertyChangedCallback callback); 47722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount 48722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount /** 49722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount * The callback that is called by Observable when an observable property has changed. 50722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount */ 51722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount abstract class OnPropertyChangedCallback { 522c86cdbaf189e2b1774af7f64a2974de9321673fGeorge Mount 53722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount /** 54722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount * Called by an Observable whenever an observable property changes. 55722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount * @param sender The Observable that is changing. 56722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount * @param propertyId The BR identifier of the property that has changed. The getter 57722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount * for this property should be annotated with {@link Bindable}. 58722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount */ 59722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount public abstract void onPropertyChanged(Observable sender, int propertyId); 60722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount } 61085724fd84795ae1631747443c43f77c08e11a28Yigit Boyar} 62