16859aead3af0680b2c9dc326244aa89835c2c852Bjorn Bringert/* 26859aead3af0680b2c9dc326244aa89835c2c852Bjorn Bringert * Copyright (C) 2010 The Android Open Source Project 36859aead3af0680b2c9dc326244aa89835c2c852Bjorn Bringert * 46859aead3af0680b2c9dc326244aa89835c2c852Bjorn Bringert * Licensed under the Apache License, Version 2.0 (the "License"); 56859aead3af0680b2c9dc326244aa89835c2c852Bjorn Bringert * you may not use this file except in compliance with the License. 66859aead3af0680b2c9dc326244aa89835c2c852Bjorn Bringert * You may obtain a copy of the License at 76859aead3af0680b2c9dc326244aa89835c2c852Bjorn Bringert * 86859aead3af0680b2c9dc326244aa89835c2c852Bjorn Bringert * http://www.apache.org/licenses/LICENSE-2.0 96859aead3af0680b2c9dc326244aa89835c2c852Bjorn Bringert * 106859aead3af0680b2c9dc326244aa89835c2c852Bjorn Bringert * Unless required by applicable law or agreed to in writing, software 116859aead3af0680b2c9dc326244aa89835c2c852Bjorn Bringert * distributed under the License is distributed on an "AS IS" BASIS, 126859aead3af0680b2c9dc326244aa89835c2c852Bjorn Bringert * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136859aead3af0680b2c9dc326244aa89835c2c852Bjorn Bringert * See the License for the specific language governing permissions and 146859aead3af0680b2c9dc326244aa89835c2c852Bjorn Bringert * limitations under the License. 156859aead3af0680b2c9dc326244aa89835c2c852Bjorn Bringert */ 166859aead3af0680b2c9dc326244aa89835c2c852Bjorn Bringert 176859aead3af0680b2c9dc326244aa89835c2c852Bjorn Bringertpackage com.android.quicksearchbox.util; 186859aead3af0680b2c9dc326244aa89835c2c852Bjorn Bringert 196859aead3af0680b2c9dc326244aa89835c2c852Bjorn Bringertimport android.database.DataSetObservable; 206859aead3af0680b2c9dc326244aa89835c2c852Bjorn Bringertimport android.os.Handler; 216859aead3af0680b2c9dc326244aa89835c2c852Bjorn Bringert 226859aead3af0680b2c9dc326244aa89835c2c852Bjorn Bringert/** 236859aead3af0680b2c9dc326244aa89835c2c852Bjorn Bringert * A version of {@link DataSetObservable} that performs callbacks on given {@link Handler}. 246859aead3af0680b2c9dc326244aa89835c2c852Bjorn Bringert */ 256859aead3af0680b2c9dc326244aa89835c2c852Bjorn Bringertpublic class AsyncDataSetObservable extends DataSetObservable { 266859aead3af0680b2c9dc326244aa89835c2c852Bjorn Bringert 276859aead3af0680b2c9dc326244aa89835c2c852Bjorn Bringert private final Handler mHandler; 286859aead3af0680b2c9dc326244aa89835c2c852Bjorn Bringert 296859aead3af0680b2c9dc326244aa89835c2c852Bjorn Bringert private final Runnable mChangedRunnable = new Runnable() { 306859aead3af0680b2c9dc326244aa89835c2c852Bjorn Bringert public void run() { 316859aead3af0680b2c9dc326244aa89835c2c852Bjorn Bringert AsyncDataSetObservable.super.notifyChanged(); 326859aead3af0680b2c9dc326244aa89835c2c852Bjorn Bringert } 336859aead3af0680b2c9dc326244aa89835c2c852Bjorn Bringert }; 346859aead3af0680b2c9dc326244aa89835c2c852Bjorn Bringert 356859aead3af0680b2c9dc326244aa89835c2c852Bjorn Bringert private final Runnable mInvalidatedRunnable = new Runnable() { 366859aead3af0680b2c9dc326244aa89835c2c852Bjorn Bringert public void run() { 376859aead3af0680b2c9dc326244aa89835c2c852Bjorn Bringert AsyncDataSetObservable.super.notifyInvalidated(); 386859aead3af0680b2c9dc326244aa89835c2c852Bjorn Bringert } 396859aead3af0680b2c9dc326244aa89835c2c852Bjorn Bringert }; 406859aead3af0680b2c9dc326244aa89835c2c852Bjorn Bringert 416859aead3af0680b2c9dc326244aa89835c2c852Bjorn Bringert /** 426859aead3af0680b2c9dc326244aa89835c2c852Bjorn Bringert * @param handler Handler to run callbacks on. 436859aead3af0680b2c9dc326244aa89835c2c852Bjorn Bringert */ 446859aead3af0680b2c9dc326244aa89835c2c852Bjorn Bringert public AsyncDataSetObservable(Handler handler) { 456859aead3af0680b2c9dc326244aa89835c2c852Bjorn Bringert mHandler = handler; 466859aead3af0680b2c9dc326244aa89835c2c852Bjorn Bringert } 476859aead3af0680b2c9dc326244aa89835c2c852Bjorn Bringert 486859aead3af0680b2c9dc326244aa89835c2c852Bjorn Bringert @Override 496859aead3af0680b2c9dc326244aa89835c2c852Bjorn Bringert public void notifyChanged() { 506859aead3af0680b2c9dc326244aa89835c2c852Bjorn Bringert if (mHandler == null) { 516859aead3af0680b2c9dc326244aa89835c2c852Bjorn Bringert super.notifyChanged(); 526859aead3af0680b2c9dc326244aa89835c2c852Bjorn Bringert } else { 536859aead3af0680b2c9dc326244aa89835c2c852Bjorn Bringert mHandler.post(mChangedRunnable); 546859aead3af0680b2c9dc326244aa89835c2c852Bjorn Bringert } 556859aead3af0680b2c9dc326244aa89835c2c852Bjorn Bringert } 566859aead3af0680b2c9dc326244aa89835c2c852Bjorn Bringert 576859aead3af0680b2c9dc326244aa89835c2c852Bjorn Bringert @Override 586859aead3af0680b2c9dc326244aa89835c2c852Bjorn Bringert public void notifyInvalidated() { 596859aead3af0680b2c9dc326244aa89835c2c852Bjorn Bringert if (mHandler == null) { 606859aead3af0680b2c9dc326244aa89835c2c852Bjorn Bringert super.notifyInvalidated(); 616859aead3af0680b2c9dc326244aa89835c2c852Bjorn Bringert } else { 626859aead3af0680b2c9dc326244aa89835c2c852Bjorn Bringert mHandler.post(mInvalidatedRunnable); 636859aead3af0680b2c9dc326244aa89835c2c852Bjorn Bringert } 646859aead3af0680b2c9dc326244aa89835c2c852Bjorn Bringert } 656859aead3af0680b2c9dc326244aa89835c2c852Bjorn Bringert 666859aead3af0680b2c9dc326244aa89835c2c852Bjorn Bringert} 67