12eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet/*
22eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet * Copyright (C) 2010 The Android Open Source Project
32eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet *
42eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet * Licensed under the Apache License, Version 2.0 (the "License");
52eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet * you may not use this file except in compliance with the License.
62eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet * You may obtain a copy of the License at
72eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet *
82eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet *      http://www.apache.org/licenses/LICENSE-2.0
92eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet *
102eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet * Unless required by applicable law or agreed to in writing, software
112eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet * distributed under the License is distributed on an "AS IS" BASIS,
122eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
132eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet * See the License for the specific language governing permissions and
142eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet * limitations under the License.
152eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet */
162eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet
172eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohetpackage android.os;
182eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet
199a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohetimport com.android.tools.layoutlib.annotations.LayoutlibDelegate;
209a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet
212eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet
222eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet/**
232eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet * Delegate overriding selected methods of android.os.Handler
242eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet *
252eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet * Through the layoutlib_create tool, selected methods of Handler have been replaced
262eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet * by calls to methods of the same name in this delegate class.
272eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet *
282eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet *
292eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet */
302eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohetpublic class Handler_Delegate {
312eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet
322eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet    // -------- Delegate methods
332eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet
349a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet    @LayoutlibDelegate
352eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet    /*package*/ static boolean sendMessageAtTime(Handler handler, Message msg, long uptimeMillis) {
362eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet        // get the callback
372eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet        IHandlerCallback callback = sCallbacks.get();
382eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet        if (callback != null) {
392eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet            callback.sendMessageAtTime(handler, msg, uptimeMillis);
402eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet        }
412eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet        return true;
422eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet    }
432eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet
442eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet    // -------- Delegate implementation
452eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet
462eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet    public interface IHandlerCallback {
472eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet        void sendMessageAtTime(Handler handler, Message msg, long uptimeMillis);
482eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet    }
492eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet
502eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet    private final static ThreadLocal<IHandlerCallback> sCallbacks =
512eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet        new ThreadLocal<IHandlerCallback>();
522eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet
532eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet    public static void setCallback(IHandlerCallback callback) {
542eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet        sCallbacks.set(callback);
552eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet    }
562eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet
572eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet}
58