new navscreen ui
Change-Id: Iedbdf5af5d3ee2fbdd6944c1689f6551b3af8d46
diff --git a/src/com/android/browser/PhoneUi.java b/src/com/android/browser/PhoneUi.java
index 471a9e6..3415e39 100644
--- a/src/com/android/browser/PhoneUi.java
+++ b/src/com/android/browser/PhoneUi.java
@@ -16,17 +16,17 @@
package com.android.browser;
+import android.animation.Animator;
+import android.animation.Animator.AnimatorListener;
+import android.animation.AnimatorSet;
+import android.animation.ObjectAnimator;
import android.app.Activity;
-import android.content.Context;
-import android.graphics.PixelFormat;
import android.util.Log;
import android.view.ActionMode;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.Menu;
-import android.view.MotionEvent;
import android.view.View;
-import android.view.WindowManager;
import android.webkit.WebView;
import android.widget.FrameLayout;
@@ -36,12 +36,13 @@
public class PhoneUi extends BaseUi {
private static final String LOGTAG = "PhoneUi";
+ private static final float NAV_TAB_SCALE = 0.75f;
private TitleBarPhone mTitleBar;
private ActiveTabsPage mActiveTabsPage;
- private TouchProxy mTitleOverlay;
private boolean mUseQuickControls;
private PieControl mPieControl;
+ private NavScreen mNavScreen;
boolean mExtendedMenuOpen;
boolean mOptionsMenuOpen;
@@ -100,11 +101,31 @@
// if tab page is showing, hide it
mUiController.removeActiveTabsPage(true);
return true;
+ } else if (mNavScreen != null) {
+ mNavScreen.close();
+ return true;
}
return super.onBackKey();
}
@Override
+ public boolean dispatchKey(int code, KeyEvent event) {
+ if (!isComboViewShowing()) {
+ switch (code) {
+ case KeyEvent.KEYCODE_MENU:
+ if (mNavScreen == null) {
+ showNavScreen();
+ return true;
+ } else {
+ mNavScreen.close();
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ @Override
public void onProgressChanged(Tab tab) {
if (tab.inForeground()) {
int progress = tab.getLoadProgress();
@@ -198,46 +219,6 @@
// menu handling callbacks
@Override
- public void onOptionsMenuOpened() {
- if (!mUseQuickControls) {
- mOptionsMenuOpen = true;
- // options menu opened, show title bar
- showTitleBar();
- if (mTitleOverlay == null) {
- // This assumes that getTitleBar always returns the same View
- mTitleOverlay = new TouchProxy(mActivity, getTitleBar());
- }
- mActivity.getWindowManager().addView(mTitleOverlay,
- mTitleOverlay.getWindowLayoutParams());
- }
- }
-
- @Override
- public void onExtendedMenuOpened() {
- // Switching the menu to expanded view, so hide the
- // title bar.
- mExtendedMenuOpen = true;
- hideTitleBar();
- }
-
- @Override
- public void onOptionsMenuClosed(boolean inLoad) {
- mOptionsMenuOpen = false;
- mActivity.getWindowManager().removeView(mTitleOverlay);
- if (!inLoad && !getTitleBar().hasFocus()) {
- hideTitleBar();
- }
- }
-
- @Override
- public void onExtendedMenuClosed(boolean inLoad) {
- mExtendedMenuOpen = false;
- if (!mUseQuickControls) {
- showTitleBar();
- }
- }
-
- @Override
public void onContextMenuCreated(Menu menu) {
hideTitleBar();
}
@@ -268,40 +249,6 @@
}
@Override
- public boolean dispatchKey(int code, KeyEvent event) {
- return false;
- }
-
- static class TouchProxy extends View {
-
- View mTarget;
-
- TouchProxy(Context context, View target) {
- super(context);
- mTarget = target;
- }
-
- @Override
- public boolean dispatchTouchEvent(MotionEvent event) {
- return mTarget.dispatchTouchEvent(event);
- }
-
- WindowManager.LayoutParams getWindowLayoutParams() {
- WindowManager.LayoutParams params =
- new WindowManager.LayoutParams(
- mTarget.getWidth(),
- mTarget.getHeight(),
- WindowManager.LayoutParams.TYPE_APPLICATION,
- WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
- PixelFormat.TRANSPARENT);
- params.gravity = Gravity.TOP | Gravity.LEFT;
- params.y = mTarget.getTop();
- params.x = mTarget.getLeft();
- return params;
- }
- }
-
- @Override
protected void setTitleGravity(int gravity) {
if (mUseQuickControls) {
FrameLayout.LayoutParams lp =
@@ -337,12 +284,15 @@
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
+ menu.setGroupVisible(R.id.NAV_MENU, false);
if (mUseQuickControls) {
- menu.setGroupVisible(R.id.NAV_MENU, false);
mPieControl.onMenuOpened(menu);
return false;
} else {
- return true;
+ if (mNavScreen != null) {
+ mNavScreen.showMenu(menu);
+ }
+ return false;
}
}
@@ -353,9 +303,108 @@
} else {
captureTab(tab,
mActivity.getWindowManager().getDefaultDisplay().getWidth(),
- (int) mActivity.getResources()
- .getDimension(R.dimen.tab_view_thumbnail_height));
+ mActivity.getWindowManager().getDefaultDisplay().getHeight());
}
}
+ void showNavScreen() {
+ captureTab(mActiveTab);
+ mNavScreen = new NavScreen(mActivity, mUiController, this);
+ WebView web = getWebView();
+ if (web != null) {
+ int w = web.getWidth();
+ int h = web.getHeight();
+ mNavScreen.setTabDimensions((int) (w * NAV_TAB_SCALE),
+ (int) (h * NAV_TAB_SCALE));
+ }
+ // Add the custom view to its container.
+ mCustomViewContainer.addView(mNavScreen, COVER_SCREEN_GRAVITY_CENTER);
+ ObjectAnimator animx = ObjectAnimator.ofFloat(mContentView,
+ "scaleX", 1.0f, 0.85f);
+ ObjectAnimator animy = ObjectAnimator.ofFloat(mContentView,
+ "scaleY", 1.0f, 0.85f);
+ AnimatorSet anims = new AnimatorSet();
+ anims.setDuration(200);
+ anims.addListener(new AnimatorListener() {
+
+ @Override
+ public void onAnimationCancel(Animator animation) {
+ finishShowNavScreen();
+ }
+
+ @Override
+ public void onAnimationEnd(Animator animation) {
+ finishShowNavScreen();
+ }
+
+ @Override
+ public void onAnimationRepeat(Animator animation) {
+ }
+
+ @Override
+ public void onAnimationStart(Animator animation) {
+ }
+ });
+ anims.playTogether(animx, animy);
+ anims.start();
+ }
+
+ private void finishShowNavScreen() {
+ // Hide the content view.
+ mContentView.setVisibility(View.GONE);
+ mContentView.setScaleX(1.0f);
+ mContentView.setScaleY(1.0f);
+ // Finally show the custom view container.
+ mCustomViewContainer.setVisibility(View.VISIBLE);
+ mCustomViewContainer.bringToFront();
+ }
+
+ void hideNavScreen(boolean animateToPage) {
+ if (mNavScreen == null) return;
+ if (animateToPage) {
+ ObjectAnimator animx = ObjectAnimator.ofFloat(mNavScreen, "scaleX",
+ 1.0f, 1.2f);
+ ObjectAnimator animy = ObjectAnimator.ofFloat(mNavScreen, "scaleY",
+ 1.0f, 1.2f);
+ AnimatorSet anims = new AnimatorSet();
+ anims.setDuration(200);
+ anims.addListener(new AnimatorListener() {
+
+ @Override
+ public void onAnimationCancel(Animator animation) {
+ finishHideNavScreen();
+ }
+
+ @Override
+ public void onAnimationEnd(Animator animation) {
+ finishHideNavScreen();
+ }
+
+ @Override
+ public void onAnimationRepeat(Animator animation) {
+ }
+
+ @Override
+ public void onAnimationStart(Animator animation) {
+ }
+ });
+ anims.playTogether(animx, animy);
+ anims.start();
+ } else {
+ finishHideNavScreen();
+ }
+
+ }
+
+ private void finishHideNavScreen() {
+ // Hide the custom view.
+ mNavScreen.setVisibility(View.GONE);
+ // Remove the custom view from its container.
+ mCustomViewContainer.removeView(mNavScreen);
+ mNavScreen = null;
+ mCustomViewContainer.setVisibility(View.GONE);
+ // Show the content view.
+ mContentView.setVisibility(View.VISIBLE);
+ }
+
}