1ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski/*
2ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski * Copyright (C) 2010 The Android Open Source Project
3ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski *
4ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski * Licensed under the Apache License, Version 2.0 (the "License");
5ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski * you may not use this file except in compliance with the License.
6ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski * You may obtain a copy of the License at
7ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski *
8ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski *      http://www.apache.org/licenses/LICENSE-2.0
9ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski *
10ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski * Unless required by applicable law or agreed to in writing, software
11ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski * distributed under the License is distributed on an "AS IS" BASIS,
12ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski * See the License for the specific language governing permissions and
14ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski * limitations under the License.
15ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski */
16ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski
17ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinskipackage android.os;
18ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski
19ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinskiimport com.android.tools.layoutlib.annotations.LayoutlibDelegate;
20ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski
21ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski
22ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski/**
23ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski * Delegate overriding selected methods of android.os.Handler
24ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski *
25ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski * Through the layoutlib_create tool, selected methods of Handler have been replaced
26ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski * by calls to methods of the same name in this delegate class.
27ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski *
28ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski *
29ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski */
30ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinskipublic class Handler_Delegate {
31ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski
32ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski    // -------- Delegate methods
33ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski
34ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski    @LayoutlibDelegate
35ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski    /*package*/ static boolean sendMessageAtTime(Handler handler, Message msg, long uptimeMillis) {
36ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski        // get the callback
37ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski        IHandlerCallback callback = sCallbacks.get();
38ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski        if (callback != null) {
39ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski            callback.sendMessageAtTime(handler, msg, uptimeMillis);
40ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski        }
41ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski        return true;
42ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski    }
43ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski
44ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski    // -------- Delegate implementation
45ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski
46ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski    public interface IHandlerCallback {
47ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski        void sendMessageAtTime(Handler handler, Message msg, long uptimeMillis);
48ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski    }
49ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski
50ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski    private final static ThreadLocal<IHandlerCallback> sCallbacks =
51ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski        new ThreadLocal<IHandlerCallback>();
52ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski
53ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski    public static void setCallback(IHandlerCallback callback) {
54ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski        sCallbacks.set(callback);
55ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski    }
56ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski
57ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski}
58