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
19655e66bceba7595a2b80e7a328433e6ed5dc28a9Jeff Brownimport android.net.Uri;
20655e66bceba7595a2b80e7a328433e6ed5dc28a9Jeff Brown
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
2286de0590b94bcce27e3038c27464bed510bb564aJeff Brown * A specialization of {@link Observable} for {@link ContentObserver}
2386de0590b94bcce27e3038c27464bed510bb564aJeff Brown * that provides methods for sending notifications to a list of
2486de0590b94bcce27e3038c27464bed510bb564aJeff Brown * {@link ContentObserver} objects.
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class ContentObservable extends Observable<ContentObserver> {
2786de0590b94bcce27e3038c27464bed510bb564aJeff Brown    // Even though the generic method defined in Observable would be perfectly
2886de0590b94bcce27e3038c27464bed510bb564aJeff Brown    // fine on its own, we can't delete this overridden method because it would
2986de0590b94bcce27e3038c27464bed510bb564aJeff Brown    // potentially break binary compatibility with existing applications.
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Override
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void registerObserver(ContentObserver observer) {
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        super.registerObserver(observer);
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
36655e66bceba7595a2b80e7a328433e6ed5dc28a9Jeff Brown     * Invokes {@link ContentObserver#dispatchChange(boolean)} on each observer.
37655e66bceba7595a2b80e7a328433e6ed5dc28a9Jeff Brown     * <p>
3886de0590b94bcce27e3038c27464bed510bb564aJeff Brown     * If <code>selfChange</code> is true, only delivers the notification
3986de0590b94bcce27e3038c27464bed510bb564aJeff Brown     * to the observer if it has indicated that it wants to receive self-change
4086de0590b94bcce27e3038c27464bed510bb564aJeff Brown     * notifications by implementing {@link ContentObserver#deliverSelfNotifications}
4186de0590b94bcce27e3038c27464bed510bb564aJeff Brown     * to return true.
42655e66bceba7595a2b80e7a328433e6ed5dc28a9Jeff Brown     * </p>
4386de0590b94bcce27e3038c27464bed510bb564aJeff Brown     *
4486de0590b94bcce27e3038c27464bed510bb564aJeff Brown     * @param selfChange True if this is a self-change notification.
45655e66bceba7595a2b80e7a328433e6ed5dc28a9Jeff Brown     *
46655e66bceba7595a2b80e7a328433e6ed5dc28a9Jeff Brown     * @deprecated Use {@link #dispatchChange(boolean, Uri)} instead.
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
48655e66bceba7595a2b80e7a328433e6ed5dc28a9Jeff Brown    @Deprecated
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void dispatchChange(boolean selfChange) {
50655e66bceba7595a2b80e7a328433e6ed5dc28a9Jeff Brown        dispatchChange(selfChange, null);
51655e66bceba7595a2b80e7a328433e6ed5dc28a9Jeff Brown    }
52655e66bceba7595a2b80e7a328433e6ed5dc28a9Jeff Brown
53655e66bceba7595a2b80e7a328433e6ed5dc28a9Jeff Brown    /**
54655e66bceba7595a2b80e7a328433e6ed5dc28a9Jeff Brown     * Invokes {@link ContentObserver#dispatchChange(boolean, Uri)} on each observer.
55655e66bceba7595a2b80e7a328433e6ed5dc28a9Jeff Brown     * Includes the changed content Uri when available.
56655e66bceba7595a2b80e7a328433e6ed5dc28a9Jeff Brown     * <p>
57655e66bceba7595a2b80e7a328433e6ed5dc28a9Jeff Brown     * If <code>selfChange</code> is true, only delivers the notification
58655e66bceba7595a2b80e7a328433e6ed5dc28a9Jeff Brown     * to the observer if it has indicated that it wants to receive self-change
59655e66bceba7595a2b80e7a328433e6ed5dc28a9Jeff Brown     * notifications by implementing {@link ContentObserver#deliverSelfNotifications}
60655e66bceba7595a2b80e7a328433e6ed5dc28a9Jeff Brown     * to return true.
61655e66bceba7595a2b80e7a328433e6ed5dc28a9Jeff Brown     * </p>
62655e66bceba7595a2b80e7a328433e6ed5dc28a9Jeff Brown     *
63655e66bceba7595a2b80e7a328433e6ed5dc28a9Jeff Brown     * @param selfChange True if this is a self-change notification.
64655e66bceba7595a2b80e7a328433e6ed5dc28a9Jeff Brown     * @param uri The Uri of the changed content, or null if unknown.
65655e66bceba7595a2b80e7a328433e6ed5dc28a9Jeff Brown     */
66655e66bceba7595a2b80e7a328433e6ed5dc28a9Jeff Brown    public void dispatchChange(boolean selfChange, Uri uri) {
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        synchronized(mObservers) {
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            for (ContentObserver observer : mObservers) {
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                if (!selfChange || observer.deliverSelfNotifications()) {
70655e66bceba7595a2b80e7a328433e6ed5dc28a9Jeff Brown                    observer.dispatchChange(selfChange, uri);
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                }
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
7786de0590b94bcce27e3038c27464bed510bb564aJeff Brown     * Invokes {@link ContentObserver#onChange} on each observer.
7886de0590b94bcce27e3038c27464bed510bb564aJeff Brown     *
7986de0590b94bcce27e3038c27464bed510bb564aJeff Brown     * @param selfChange True if this is a self-change notification.
8086de0590b94bcce27e3038c27464bed510bb564aJeff Brown     *
8186de0590b94bcce27e3038c27464bed510bb564aJeff Brown     * @deprecated Use {@link #dispatchChange} instead.
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
8386de0590b94bcce27e3038c27464bed510bb564aJeff Brown    @Deprecated
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void notifyChange(boolean selfChange) {
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        synchronized(mObservers) {
869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            for (ContentObserver observer : mObservers) {
87655e66bceba7595a2b80e7a328433e6ed5dc28a9Jeff Brown                observer.onChange(selfChange, null);
889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
92