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