TitleBar.java revision d51bb570d4806d9e6b3c997bb0868d094f481bf2
10f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck/* 20f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck * Copyright (C) 2010 The Android Open Source Project 30f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck * 40f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck * Licensed under the Apache License, Version 2.0 (the "License"); 50f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck * you may not use this file except in compliance with the License. 60f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck * You may obtain a copy of the License at 70f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck * 80f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck * http://www.apache.org/licenses/LICENSE-2.0 90f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck * 100f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck * Unless required by applicable law or agreed to in writing, software 110f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck * distributed under the License is distributed on an "AS IS" BASIS, 120f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck * See the License for the specific language governing permissions and 140f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck * limitations under the License. 150f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck */ 160f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck 170f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reckpackage com.android.browser; 180f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck 190f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reckimport android.animation.Animator; 200f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reckimport android.animation.Animator.AnimatorListener; 210f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reckimport android.animation.ObjectAnimator; 220f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reckimport android.content.Context; 230f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reckimport android.content.res.Resources; 240f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reckimport android.view.Gravity; 250f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reckimport android.view.LayoutInflater; 260f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reckimport android.view.View; 270f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reckimport android.view.ViewGroup; 28d51bb570d4806d9e6b3c997bb0868d094f481bf2Ben Murdochimport android.view.ViewStub; 290f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reckimport android.view.animation.Animation; 300f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reckimport android.view.animation.Animation.AnimationListener; 310f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reckimport android.view.animation.AnimationUtils; 320f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reckimport android.view.animation.DecelerateInterpolator; 330f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reckimport android.webkit.WebView; 340f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reckimport android.widget.AbsoluteLayout; 350f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reckimport android.widget.FrameLayout; 360f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reckimport android.widget.RelativeLayout; 370f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck 380f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck 390f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck/** 400f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck * Base class for a title bar used by the browser. 410f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck */ 420f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reckpublic class TitleBar extends RelativeLayout { 430f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck 440f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck private static final int PROGRESS_MAX = 100; 450f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck private static final float ANIM_TITLEBAR_DECELERATE = 2.5f; 460f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck 470f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck private UiController mUiController; 480f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck private BaseUi mBaseUi; 490f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck private FrameLayout mParent; 500f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck private PageProgressView mProgress; 510f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck 520f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck private AutologinBar mAutoLogin; 530f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck private NavigationBarBase mNavBar; 540f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck private boolean mUseQuickControls; 55ef654f1dd80f55609060005342fc4f2cde62990cJohn Reck private SnapshotBar mSnapshotBar; 560f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck 570f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck //state 580f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck private boolean mShowing; 590f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck private boolean mInLoad; 600f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck private boolean mSkipTitleBarAnimations; 610f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck private Animator mTitleBarAnimator; 620f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck 630f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck public TitleBar(Context context, UiController controller, BaseUi ui, 640f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck FrameLayout parent) { 650f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck super(context, null); 660f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck mUiController = controller; 670f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck mBaseUi = ui; 680f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck mParent = parent; 690f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck initLayout(context); 700f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck } 710f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck 720f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck private void initLayout(Context context) { 730f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck LayoutInflater factory = LayoutInflater.from(context); 740f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck factory.inflate(R.layout.title_bar, this); 750f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck mProgress = (PageProgressView) findViewById(R.id.progress); 760f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck mNavBar = (NavigationBarBase) findViewById(R.id.taburlbar); 770f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck mNavBar.setTitleBar(this); 78d51bb570d4806d9e6b3c997bb0868d094f481bf2Ben Murdoch } 79d51bb570d4806d9e6b3c997bb0868d094f481bf2Ben Murdoch 80d51bb570d4806d9e6b3c997bb0868d094f481bf2Ben Murdoch private void inflateAutoLoginBar() { 81d51bb570d4806d9e6b3c997bb0868d094f481bf2Ben Murdoch if (mAutoLogin != null) { 82d51bb570d4806d9e6b3c997bb0868d094f481bf2Ben Murdoch return; 83d51bb570d4806d9e6b3c997bb0868d094f481bf2Ben Murdoch } 84d51bb570d4806d9e6b3c997bb0868d094f481bf2Ben Murdoch 85d51bb570d4806d9e6b3c997bb0868d094f481bf2Ben Murdoch ViewStub stub = (ViewStub) findViewById(R.id.autologin_stub); 86d51bb570d4806d9e6b3c997bb0868d094f481bf2Ben Murdoch mAutoLogin = (AutologinBar) stub.inflate(); 87d51bb570d4806d9e6b3c997bb0868d094f481bf2Ben Murdoch mAutoLogin.setTitleBar(this); 88d51bb570d4806d9e6b3c997bb0868d094f481bf2Ben Murdoch } 89d51bb570d4806d9e6b3c997bb0868d094f481bf2Ben Murdoch 90d51bb570d4806d9e6b3c997bb0868d094f481bf2Ben Murdoch private void inflateSnapshotBar() { 91d51bb570d4806d9e6b3c997bb0868d094f481bf2Ben Murdoch if (mSnapshotBar != null) { 92d51bb570d4806d9e6b3c997bb0868d094f481bf2Ben Murdoch return; 93d51bb570d4806d9e6b3c997bb0868d094f481bf2Ben Murdoch } 94d51bb570d4806d9e6b3c997bb0868d094f481bf2Ben Murdoch 95d51bb570d4806d9e6b3c997bb0868d094f481bf2Ben Murdoch ViewStub stub = (ViewStub) findViewById(R.id.snapshotbar_stub); 96d51bb570d4806d9e6b3c997bb0868d094f481bf2Ben Murdoch mSnapshotBar = (SnapshotBar) stub.inflate(); 97ef654f1dd80f55609060005342fc4f2cde62990cJohn Reck mSnapshotBar.setTitleBar(this); 980f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck } 990f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck 1000f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck public BaseUi getUi() { 1010f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck return mBaseUi; 1020f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck } 1030f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck 1040f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck public UiController getUiController() { 1050f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck return mUiController; 1060f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck } 1070f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck 1080f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck public void setUseQuickControls(boolean use) { 1090f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck mUseQuickControls = use; 1100f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck setLayoutParams(makeLayoutParams()); 1110f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck } 1120f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck 1130f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck void setShowProgressOnly(boolean progress) { 114ef654f1dd80f55609060005342fc4f2cde62990cJohn Reck if (progress && !wantsToBeVisible()) { 1150f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck mNavBar.setVisibility(View.GONE); 1160f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck } else { 1170f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck mNavBar.setVisibility(View.VISIBLE); 1180f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck } 1190f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck } 1200f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck 1210f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck void setSkipTitleBarAnimations(boolean skip) { 1220f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck mSkipTitleBarAnimations = skip; 1230f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck } 1240f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck 1250f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck void setupTitleBarAnimator(Animator animator) { 1260f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck Resources res = mContext.getResources(); 1270f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck int duration = res.getInteger(R.integer.titlebar_animation_duration); 1280f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck animator.setInterpolator(new DecelerateInterpolator( 1290f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck ANIM_TITLEBAR_DECELERATE)); 1300f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck animator.setDuration(duration); 1310f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck } 1320f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck 1330f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck void show() { 1340f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck if (mUseQuickControls) { 1350f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck mParent.addView(this); 1360f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck } else { 1370f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck if (!mSkipTitleBarAnimations) { 1380f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck cancelTitleBarAnimation(false); 1390f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck int visibleHeight = getVisibleTitleHeight(); 1400f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck float startPos = (-getEmbeddedHeight() + visibleHeight); 1410f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck if (getTranslationY() != 0) { 1420f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck startPos = Math.max(startPos, getTranslationY()); 1430f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck } 1440f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck mTitleBarAnimator = ObjectAnimator.ofFloat(this, 1450f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck "translationY", 1460f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck startPos, 0); 1470f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck setupTitleBarAnimator(mTitleBarAnimator); 1480f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck mTitleBarAnimator.start(); 1490f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck } 1500f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck mBaseUi.setTitleGravity(Gravity.TOP); 1510f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck } 1520f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck mShowing = true; 1530f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck } 1540f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck 1550f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck void hide() { 1560f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck if (mUseQuickControls) { 1570f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck mParent.removeView(this); 1580f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck } else { 1590f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck if (!mSkipTitleBarAnimations) { 1600f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck cancelTitleBarAnimation(false); 1610f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck int visibleHeight = getVisibleTitleHeight(); 1620f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck mTitleBarAnimator = ObjectAnimator.ofFloat(this, 1630f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck "translationY", getTranslationY(), 1640f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck (-getEmbeddedHeight() + visibleHeight)); 1650f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck mTitleBarAnimator.addListener(mHideTileBarAnimatorListener); 1660f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck setupTitleBarAnimator(mTitleBarAnimator); 1670f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck mTitleBarAnimator.start(); 1680f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck } else { 1690f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck mBaseUi.setTitleGravity(Gravity.NO_GRAVITY); 1700f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck } 1710f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck } 1720f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck mShowing = false; 1730f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck } 1740f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck 1750f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck boolean isShowing() { 1760f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck return mShowing; 1770f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck } 1780f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck 1790f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck void cancelTitleBarAnimation(boolean reset) { 1800f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck if (mTitleBarAnimator != null) { 1810f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck mTitleBarAnimator.cancel(); 1820f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck mTitleBarAnimator = null; 1830f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck } 1840f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck if (reset) { 1850f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck setTranslationY(0); 1860f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck } 1870f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck } 1880f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck 1890f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck private AnimatorListener mHideTileBarAnimatorListener = new AnimatorListener() { 1900f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck 1910f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck boolean mWasCanceled; 1920f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck @Override 1930f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck public void onAnimationStart(Animator animation) { 1940f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck mWasCanceled = false; 1950f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck } 1960f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck 1970f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck @Override 1980f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck public void onAnimationRepeat(Animator animation) { 1990f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck } 2000f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck 2010f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck @Override 2020f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck public void onAnimationEnd(Animator animation) { 2030f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck if (!mWasCanceled) { 2040f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck setTranslationY(0); 2050f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck } 2060f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck mBaseUi.setTitleGravity(Gravity.NO_GRAVITY); 2070f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck } 2080f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck 2090f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck @Override 2100f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck public void onAnimationCancel(Animator animation) { 2110f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck mWasCanceled = true; 2120f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck } 2130f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck }; 2140f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck 2150f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck private int getVisibleTitleHeight() { 2160f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck Tab tab = mBaseUi.getActiveTab(); 2170f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck WebView webview = tab != null ? tab.getWebView() : null; 2180f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck return webview != null ? webview.getVisibleTitleHeight() : 0; 2190f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck } 2200f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck 2210f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck /** 2220f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck * Update the progress, from 0 to 100. 2230f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck */ 2240f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck public void setProgress(int newProgress) { 2250f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck if (newProgress >= PROGRESS_MAX) { 2260f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck mProgress.setProgress(PageProgressView.MAX_PROGRESS); 2270f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck mProgress.setVisibility(View.GONE); 2280f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck mInLoad = false; 2290f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck mNavBar.onProgressStopped(); 2300f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck // check if needs to be hidden 231ef654f1dd80f55609060005342fc4f2cde62990cJohn Reck if (!isEditingUrl() && !wantsToBeVisible()) { 2320f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck hide(); 2330f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck if (mUseQuickControls) { 2340f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck setShowProgressOnly(false); 2350f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck } 2360f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck } 2370f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck } else { 2380f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck if (!mInLoad) { 2390f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck mProgress.setVisibility(View.VISIBLE); 2400f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck mInLoad = true; 2410f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck mNavBar.onProgressStarted(); 2420f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck } 2430f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck mProgress.setProgress(newProgress * PageProgressView.MAX_PROGRESS 2440f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck / PROGRESS_MAX); 2450f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck if (!mShowing) { 2460f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck if (mUseQuickControls && !isEditingUrl()) { 2470f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck setShowProgressOnly(true); 2480f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck } 2490f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck show(); 2500f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck } 2510f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck } 2520f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck } 2530f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck 2540f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck public int getEmbeddedHeight() { 2550f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck int height = mNavBar.getHeight(); 256d51bb570d4806d9e6b3c997bb0868d094f481bf2Ben Murdoch if (mAutoLogin != null && mAutoLogin.getVisibility() == View.VISIBLE) { 2570f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck height += mAutoLogin.getHeight(); 2580f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck } 2590f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck return height; 2600f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck } 2610f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck 2620f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck public void updateAutoLogin(Tab tab, boolean animate) { 263d51bb570d4806d9e6b3c997bb0868d094f481bf2Ben Murdoch if (mAutoLogin == null) { 264d51bb570d4806d9e6b3c997bb0868d094f481bf2Ben Murdoch if (tab.getDeviceAccountLogin() == null) { 265d51bb570d4806d9e6b3c997bb0868d094f481bf2Ben Murdoch return; 266d51bb570d4806d9e6b3c997bb0868d094f481bf2Ben Murdoch } 267d51bb570d4806d9e6b3c997bb0868d094f481bf2Ben Murdoch inflateAutoLoginBar(); 268d51bb570d4806d9e6b3c997bb0868d094f481bf2Ben Murdoch } 2690f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck mAutoLogin.updateAutoLogin(tab, animate); 2700f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck } 2710f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck 2720f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck public void showAutoLogin(boolean animate) { 2730f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck if (mUseQuickControls) { 2740f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck mBaseUi.showTitleBar(); 2750f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck } 276d51bb570d4806d9e6b3c997bb0868d094f481bf2Ben Murdoch if (mAutoLogin == null) { 277d51bb570d4806d9e6b3c997bb0868d094f481bf2Ben Murdoch inflateAutoLoginBar(); 278d51bb570d4806d9e6b3c997bb0868d094f481bf2Ben Murdoch } 2790f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck mAutoLogin.setVisibility(View.VISIBLE); 2800f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck if (animate) { 2810f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck mAutoLogin.startAnimation(AnimationUtils.loadAnimation( 2820f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck getContext(), R.anim.autologin_enter)); 2830f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck } 2840f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck } 2850f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck 2860f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck public void hideAutoLogin(boolean animate) { 2870f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck if (mUseQuickControls) { 2880f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck mBaseUi.hideTitleBar(); 2890f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck mAutoLogin.setVisibility(View.GONE); 2900f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck mBaseUi.refreshWebView(); 2910f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck } else { 2920f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck if (animate) { 2930f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck Animation anim = AnimationUtils.loadAnimation(getContext(), 2940f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck R.anim.autologin_exit); 2950f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck anim.setAnimationListener(new AnimationListener() { 2960f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck @Override 2970f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck public void onAnimationEnd(Animation a) { 2980f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck mAutoLogin.setVisibility(View.GONE); 2990f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck mBaseUi.refreshWebView(); 3000f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck } 3010f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck 3020f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck @Override 3030f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck public void onAnimationStart(Animation a) { 3040f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck } 3050f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck 3060f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck @Override 3070f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck public void onAnimationRepeat(Animation a) { 3080f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck } 3090f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck }); 3100f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck mAutoLogin.startAnimation(anim); 3110f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck } else if (mAutoLogin.getAnimation() == null) { 3120f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck mAutoLogin.setVisibility(View.GONE); 3130f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck mBaseUi.refreshWebView(); 3140f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck } 3150f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck } 3160f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck } 3170f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck 318ef654f1dd80f55609060005342fc4f2cde62990cJohn Reck public boolean wantsToBeVisible() { 319ef654f1dd80f55609060005342fc4f2cde62990cJohn Reck return inAutoLogin() 320d51bb570d4806d9e6b3c997bb0868d094f481bf2Ben Murdoch || (mSnapshotBar != null && mSnapshotBar.getVisibility() == View.VISIBLE 321ef654f1dd80f55609060005342fc4f2cde62990cJohn Reck && mSnapshotBar.isAnimating()); 322ef654f1dd80f55609060005342fc4f2cde62990cJohn Reck } 323ef654f1dd80f55609060005342fc4f2cde62990cJohn Reck 324ef654f1dd80f55609060005342fc4f2cde62990cJohn Reck private boolean inAutoLogin() { 325d51bb570d4806d9e6b3c997bb0868d094f481bf2Ben Murdoch return mAutoLogin != null && mAutoLogin.getVisibility() == View.VISIBLE; 3260f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck } 3270f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck 3280f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck public boolean isEditingUrl() { 3290f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck return mNavBar.isEditingUrl(); 3300f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck } 3310f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck 3320f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck public WebView getCurrentWebView() { 3330f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck Tab t = mBaseUi.getActiveTab(); 3340f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck if (t != null) { 3350f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck return t.getWebView(); 3360f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck } else { 3370f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck return null; 3380f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck } 3390f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck } 3400f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck 3410f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck public PageProgressView getProgressView() { 3420f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck return mProgress; 3430f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck } 3440f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck 3450f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck public NavigationBarBase getNavigationBar() { 3460f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck return mNavBar; 3470f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck } 3480f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck 3490f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck public boolean useQuickControls() { 3500f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck return mUseQuickControls; 3510f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck } 3520f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck 3530f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck public boolean isInLoad() { 3540f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck return mInLoad; 3550f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck } 3560f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck 3570f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck private ViewGroup.LayoutParams makeLayoutParams() { 3580f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck if (mUseQuickControls) { 3590f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck return new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT, 3600f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck LayoutParams.WRAP_CONTENT); 3610f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck } else { 3620f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck return new AbsoluteLayout.LayoutParams( 3630f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT, 3640f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck 0, 0); 3650f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck } 3660f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck } 3670f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck 3680f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck @Override 3690f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck public View focusSearch(View focused, int dir) { 3700f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck if (FOCUS_DOWN == dir && hasFocus()) { 3710f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck return getCurrentWebView(); 3720f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck } 3730f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck return super.focusSearch(focused, dir); 3740f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck } 3750f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck 376ef654f1dd80f55609060005342fc4f2cde62990cJohn Reck public void onTabDataChanged(Tab tab) { 377d51bb570d4806d9e6b3c997bb0868d094f481bf2Ben Murdoch if (mSnapshotBar != null) { 378d51bb570d4806d9e6b3c997bb0868d094f481bf2Ben Murdoch mSnapshotBar.onTabDataChanged(tab); 379d51bb570d4806d9e6b3c997bb0868d094f481bf2Ben Murdoch } 380d51bb570d4806d9e6b3c997bb0868d094f481bf2Ben Murdoch 381ef654f1dd80f55609060005342fc4f2cde62990cJohn Reck if (tab.isSnapshot()) { 382d51bb570d4806d9e6b3c997bb0868d094f481bf2Ben Murdoch inflateSnapshotBar(); 383ef654f1dd80f55609060005342fc4f2cde62990cJohn Reck mSnapshotBar.setVisibility(VISIBLE); 384ef654f1dd80f55609060005342fc4f2cde62990cJohn Reck mNavBar.setVisibility(GONE); 385ef654f1dd80f55609060005342fc4f2cde62990cJohn Reck } else { 386d51bb570d4806d9e6b3c997bb0868d094f481bf2Ben Murdoch if (mSnapshotBar != null) { 387d51bb570d4806d9e6b3c997bb0868d094f481bf2Ben Murdoch mSnapshotBar.setVisibility(GONE); 388d51bb570d4806d9e6b3c997bb0868d094f481bf2Ben Murdoch } 389ef654f1dd80f55609060005342fc4f2cde62990cJohn Reck mNavBar.setVisibility(VISIBLE); 390ef654f1dd80f55609060005342fc4f2cde62990cJohn Reck } 391ef654f1dd80f55609060005342fc4f2cde62990cJohn Reck } 392ef654f1dd80f55609060005342fc4f2cde62990cJohn Reck 3930f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck} 394