• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2012 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.contacts.util;
18 
19 import android.view.View;
20 import android.view.ViewTreeObserver.OnDrawListener;
21 import android.view.ViewTreeObserver.OnGlobalLayoutListener;
22 import android.view.ViewTreeObserver.OnPreDrawListener;
23 
24 /** Static methods that are useful for scheduling actions to occur at a later time. */
25 public class SchedulingUtils {
26 
27 
28     /** Runs a piece of code after the next layout run */
doAfterLayout(final View view, final Runnable runnable)29     public static void doAfterLayout(final View view, final Runnable runnable) {
30         final OnGlobalLayoutListener listener = new OnGlobalLayoutListener() {
31             @Override
32             public void onGlobalLayout() {
33                 // Layout pass done, unregister for further events
34                 view.getViewTreeObserver().removeOnGlobalLayoutListener(this);
35                 runnable.run();
36             }
37         };
38         view.getViewTreeObserver().addOnGlobalLayoutListener(listener);
39     }
40 
41     /** Runs a piece of code just before the next draw, after layout and measurement */
doOnPreDraw(final View view, final boolean drawNextFrame, final Runnable runnable)42     public static void doOnPreDraw(final View view, final boolean drawNextFrame,
43             final Runnable runnable) {
44         final OnPreDrawListener listener = new OnPreDrawListener() {
45             @Override
46             public boolean onPreDraw() {
47                 view.getViewTreeObserver().removeOnPreDrawListener(this);
48                 runnable.run();
49                 return drawNextFrame;
50             }
51         };
52         view.getViewTreeObserver().addOnPreDrawListener(listener);
53     }
54 }
55