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