Fix crash in draw listener

Bug: 8528246

Change-Id: Ie3600bed58dc393fcf71f735213a32b51551b52d
This commit is contained in:
Michael Jurka
2013-04-03 16:25:02 -07:00
committed by The Android Automerger
parent e04112a20c
commit 045d613fdd
2 changed files with 20 additions and 5 deletions
+9 -2
View File
@@ -1272,15 +1272,22 @@ public final class Launcher extends Activity
// layers on all the workspace pages, so that transitioning to Launcher from other
// apps is nice and speedy.
observer.addOnDrawListener(new ViewTreeObserver.OnDrawListener() {
private boolean mStarted = false;
public void onDraw() {
if (mStarted) return;
mStarted = true;
// We delay the layer building a bit in order to give
// other message processing a time to run. In particular
// this avoids a delay in hiding the IME if it was
// currently shown, because doing that may involve
// some communication back with the app.
mWorkspace.postDelayed(mBuildLayersRunnable, 500);
observer.removeOnDrawListener(this);
final ViewTreeObserver.OnDrawListener listener = this;
mWorkspace.post(new Runnable() {
public void run() {
mWorkspace.getViewTreeObserver().removeOnDrawListener(listener);
}
});
return;
}
});
@@ -52,15 +52,23 @@ public class LauncherAnimUtils {
// Helper method. Assumes a draw is pending, and that if the animation's duration is 0
// it should be cancelled
public static void startAnimationAfterNextDraw(final Animator animator, final View view) {
final ViewTreeObserver observer = view.getViewTreeObserver();
observer.addOnDrawListener(new ViewTreeObserver.OnDrawListener() {
view.getViewTreeObserver().addOnDrawListener(new ViewTreeObserver.OnDrawListener() {
private boolean mStarted = false;
public void onDraw() {
if (mStarted) return;
mStarted = true;
// Use this as a signal that the animation was cancelled
if (animator.getDuration() == 0) {
return;
}
animator.start();
view.getViewTreeObserver().removeOnDrawListener(this);
final ViewTreeObserver.OnDrawListener listener = this;
view.post(new Runnable() {
public void run() {
view.getViewTreeObserver().removeOnDrawListener(listener);
}
});
}
});
}