diff options
Diffstat (limited to 'src/com/android/browser/PhoneUi.java')
-rw-r--r-- | src/com/android/browser/PhoneUi.java | 25 |
1 files changed, 21 insertions, 4 deletions
diff --git a/src/com/android/browser/PhoneUi.java b/src/com/android/browser/PhoneUi.java index 17cc632..063fcb9 100644 --- a/src/com/android/browser/PhoneUi.java +++ b/src/com/android/browser/PhoneUi.java @@ -46,6 +46,7 @@ public class PhoneUi extends BaseUi { boolean mExtendedMenuOpen; boolean mOptionsMenuOpen; + boolean mAnimating; /** * @param browser @@ -294,8 +295,18 @@ public class PhoneUi extends BaseUi { } void showNavScreen() { - captureTab(mActiveTab); + if (mAnimating) return; + mAnimating = true; mNavScreen = new NavScreen(mActivity, mUiController, this); + mNavScreen.startTask(new Runnable() { + public void run() { + BrowserWebView web = (BrowserWebView) getWebView(); + if (web != null) { + mActiveTab.setScreenshot(web.capture()); + } + mNavScreen.finishTask(); + } + }); WebView web = getWebView(); if (web != null) { int w = web.getWidth(); @@ -305,6 +316,7 @@ public class PhoneUi extends BaseUi { } // Add the custom view to its container. mCustomViewContainer.addView(mNavScreen, COVER_SCREEN_GRAVITY_CENTER); + mContentView.setLayerType(View.LAYER_TYPE_HARDWARE, null); ObjectAnimator animx = ObjectAnimator.ofFloat(mContentView, "scaleX", 1.0f, 0.85f); ObjectAnimator animy = ObjectAnimator.ofFloat(mContentView, @@ -315,7 +327,6 @@ public class PhoneUi extends BaseUi { @Override public void onAnimationCancel(Animator animation) { - finishShowNavScreen(); } @Override @@ -337,16 +348,21 @@ public class PhoneUi extends BaseUi { private void finishShowNavScreen() { // Hide the content view. + mContentView.setLayerType(View.LAYER_TYPE_NONE, null); mContentView.setVisibility(View.GONE); mContentView.setScaleX(1.0f); mContentView.setScaleY(1.0f); + mNavScreen.waitForTask(); // Finally show the custom view container. mCustomViewContainer.setVisibility(View.VISIBLE); mCustomViewContainer.bringToFront(); + mAnimating = false; } void hideNavScreen(boolean animateToPage) { - if (mNavScreen == null) return; + if (mAnimating || mNavScreen == null) return; + mAnimating = true; + mNavScreen.setLayerType(View.LAYER_TYPE_HARDWARE, null); if (animateToPage) { ObjectAnimator animx = ObjectAnimator.ofFloat(mNavScreen, "scaleX", 1.0f, 1.2f); @@ -358,7 +374,6 @@ public class PhoneUi extends BaseUi { @Override public void onAnimationCancel(Animator animation) { - finishHideNavScreen(); } @Override @@ -385,12 +400,14 @@ public class PhoneUi extends BaseUi { private void finishHideNavScreen() { // Hide the custom view. mNavScreen.setVisibility(View.GONE); + mNavScreen.setLayerType(View.LAYER_TYPE_NONE, null); // Remove the custom view from its container. mCustomViewContainer.removeView(mNavScreen); mNavScreen = null; mCustomViewContainer.setVisibility(View.GONE); // Show the content view. mContentView.setVisibility(View.VISIBLE); + mAnimating = false; } } |