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