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