ContentObservable.java revision 86de0590b94bcce27e3038c27464bed510bb564a
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License.
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License.
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.database;
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
2086de0590b94bcce27e3038c27464bed510bb564aJeff Brown * A specialization of {@link Observable} for {@link ContentObserver}
2186de0590b94bcce27e3038c27464bed510bb564aJeff Brown * that provides methods for sending notifications to a list of
2286de0590b94bcce27e3038c27464bed510bb564aJeff Brown * {@link ContentObserver} objects.
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class ContentObservable extends Observable<ContentObserver> {
2586de0590b94bcce27e3038c27464bed510bb564aJeff Brown    // Even though the generic method defined in Observable would be perfectly
2686de0590b94bcce27e3038c27464bed510bb564aJeff Brown    // fine on its own, we can't delete this overridden method because it would
2786de0590b94bcce27e3038c27464bed510bb564aJeff Brown    // potentially break binary compatibility with existing applications.
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Override
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void registerObserver(ContentObserver observer) {
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        super.registerObserver(observer);
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3486de0590b94bcce27e3038c27464bed510bb564aJeff Brown     * Invokes {@link ContentObserver#dispatchChange} on each observer.
3586de0590b94bcce27e3038c27464bed510bb564aJeff Brown     *
3686de0590b94bcce27e3038c27464bed510bb564aJeff Brown     * If <code>selfChange</code> is true, only delivers the notification
3786de0590b94bcce27e3038c27464bed510bb564aJeff Brown     * to the observer if it has indicated that it wants to receive self-change
3886de0590b94bcce27e3038c27464bed510bb564aJeff Brown     * notifications by implementing {@link ContentObserver#deliverSelfNotifications}
3986de0590b94bcce27e3038c27464bed510bb564aJeff Brown     * to return true.
4086de0590b94bcce27e3038c27464bed510bb564aJeff Brown     *
4186de0590b94bcce27e3038c27464bed510bb564aJeff Brown     * @param selfChange True if this is a self-change notification.
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void dispatchChange(boolean selfChange) {
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        synchronized(mObservers) {
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            for (ContentObserver observer : mObservers) {
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                if (!selfChange || observer.deliverSelfNotifications()) {
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    observer.dispatchChange(selfChange);
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                }
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
5486de0590b94bcce27e3038c27464bed510bb564aJeff Brown     * Invokes {@link ContentObserver#onChange} on each observer.
5586de0590b94bcce27e3038c27464bed510bb564aJeff Brown     *
5686de0590b94bcce27e3038c27464bed510bb564aJeff Brown     * @param selfChange True if this is a self-change notification.
5786de0590b94bcce27e3038c27464bed510bb564aJeff Brown     *
5886de0590b94bcce27e3038c27464bed510bb564aJeff Brown     * @deprecated Use {@link #dispatchChange} instead.
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
6086de0590b94bcce27e3038c27464bed510bb564aJeff Brown    @Deprecated
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void notifyChange(boolean selfChange) {
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        synchronized(mObservers) {
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            for (ContentObserver observer : mObservers) {
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                observer.onChange(selfChange);
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
69