187e29f060b8fe7a1f8794955ded14617214af0edZheng Fu/* 287e29f060b8fe7a1f8794955ded14617214af0edZheng Fu * Copyright (C) 2012 The Android Open Source Project 387e29f060b8fe7a1f8794955ded14617214af0edZheng Fu * 487e29f060b8fe7a1f8794955ded14617214af0edZheng Fu * Licensed under the Apache License, Version 2.0 (the "License"); 587e29f060b8fe7a1f8794955ded14617214af0edZheng Fu * you may not use this file except in compliance with the License. 687e29f060b8fe7a1f8794955ded14617214af0edZheng Fu * You may obtain a copy of the License at 787e29f060b8fe7a1f8794955ded14617214af0edZheng Fu * 887e29f060b8fe7a1f8794955ded14617214af0edZheng Fu * http://www.apache.org/licenses/LICENSE-2.0 987e29f060b8fe7a1f8794955ded14617214af0edZheng Fu * 1087e29f060b8fe7a1f8794955ded14617214af0edZheng Fu * Unless required by applicable law or agreed to in writing, software 1187e29f060b8fe7a1f8794955ded14617214af0edZheng Fu * distributed under the License is distributed on an "AS IS" BASIS, 1287e29f060b8fe7a1f8794955ded14617214af0edZheng Fu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1387e29f060b8fe7a1f8794955ded14617214af0edZheng Fu * See the License for the specific language governing permissions and 1487e29f060b8fe7a1f8794955ded14617214af0edZheng Fu * limitations under the License. 1587e29f060b8fe7a1f8794955ded14617214af0edZheng Fu */ 1687e29f060b8fe7a1f8794955ded14617214af0edZheng Fu 1787e29f060b8fe7a1f8794955ded14617214af0edZheng Fupackage com.android.contacts.common.util; 1887e29f060b8fe7a1f8794955ded14617214af0edZheng Fu 1987e29f060b8fe7a1f8794955ded14617214af0edZheng Fuimport android.view.View; 2087e29f060b8fe7a1f8794955ded14617214af0edZheng Fuimport android.view.ViewTreeObserver.OnGlobalLayoutListener; 2187e29f060b8fe7a1f8794955ded14617214af0edZheng Fuimport android.view.ViewTreeObserver.OnPreDrawListener; 2287e29f060b8fe7a1f8794955ded14617214af0edZheng Fu 2387e29f060b8fe7a1f8794955ded14617214af0edZheng Fu/** Static methods that are useful for scheduling actions to occur at a later time. */ 2487e29f060b8fe7a1f8794955ded14617214af0edZheng Fupublic class SchedulingUtils { 2587e29f060b8fe7a1f8794955ded14617214af0edZheng Fu 2687e29f060b8fe7a1f8794955ded14617214af0edZheng Fu 2787e29f060b8fe7a1f8794955ded14617214af0edZheng Fu /** Runs a piece of code after the next layout run */ 2887e29f060b8fe7a1f8794955ded14617214af0edZheng Fu public static void doAfterLayout(final View view, final Runnable runnable) { 2987e29f060b8fe7a1f8794955ded14617214af0edZheng Fu final OnGlobalLayoutListener listener = new OnGlobalLayoutListener() { 3087e29f060b8fe7a1f8794955ded14617214af0edZheng Fu @Override 3187e29f060b8fe7a1f8794955ded14617214af0edZheng Fu public void onGlobalLayout() { 3287e29f060b8fe7a1f8794955ded14617214af0edZheng Fu // Layout pass done, unregister for further events 3387e29f060b8fe7a1f8794955ded14617214af0edZheng Fu view.getViewTreeObserver().removeOnGlobalLayoutListener(this); 3487e29f060b8fe7a1f8794955ded14617214af0edZheng Fu runnable.run(); 3587e29f060b8fe7a1f8794955ded14617214af0edZheng Fu } 3687e29f060b8fe7a1f8794955ded14617214af0edZheng Fu }; 3787e29f060b8fe7a1f8794955ded14617214af0edZheng Fu view.getViewTreeObserver().addOnGlobalLayoutListener(listener); 3887e29f060b8fe7a1f8794955ded14617214af0edZheng Fu } 3987e29f060b8fe7a1f8794955ded14617214af0edZheng Fu 4087e29f060b8fe7a1f8794955ded14617214af0edZheng Fu /** Runs a piece of code just before the next draw, after layout and measurement */ 4187e29f060b8fe7a1f8794955ded14617214af0edZheng Fu public static void doOnPreDraw(final View view, final boolean drawNextFrame, 4287e29f060b8fe7a1f8794955ded14617214af0edZheng Fu final Runnable runnable) { 4387e29f060b8fe7a1f8794955ded14617214af0edZheng Fu final OnPreDrawListener listener = new OnPreDrawListener() { 4487e29f060b8fe7a1f8794955ded14617214af0edZheng Fu @Override 4587e29f060b8fe7a1f8794955ded14617214af0edZheng Fu public boolean onPreDraw() { 4687e29f060b8fe7a1f8794955ded14617214af0edZheng Fu view.getViewTreeObserver().removeOnPreDrawListener(this); 4787e29f060b8fe7a1f8794955ded14617214af0edZheng Fu runnable.run(); 4887e29f060b8fe7a1f8794955ded14617214af0edZheng Fu return drawNextFrame; 4987e29f060b8fe7a1f8794955ded14617214af0edZheng Fu } 5087e29f060b8fe7a1f8794955ded14617214af0edZheng Fu }; 5187e29f060b8fe7a1f8794955ded14617214af0edZheng Fu view.getViewTreeObserver().addOnPreDrawListener(listener); 5287e29f060b8fe7a1f8794955ded14617214af0edZheng Fu } 5387e29f060b8fe7a1f8794955ded14617214af0edZheng Fu} 54