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