| Index: chrome/android/java/src/org/chromium/chrome/browser/infobar/InfoBarContainer.java
|
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/infobar/InfoBarContainer.java b/chrome/android/java/src/org/chromium/chrome/browser/infobar/InfoBarContainer.java
|
| index 933d7707bfa653c8ba4e4ef2fa43cc2ea2c172a6..b636846f12b9821a38ffb33e7bfd07c230c91654 100644
|
| --- a/chrome/android/java/src/org/chromium/chrome/browser/infobar/InfoBarContainer.java
|
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/infobar/InfoBarContainer.java
|
| @@ -4,7 +4,6 @@
|
|
|
| package org.chromium.chrome.browser.infobar;
|
|
|
| -import android.animation.ObjectAnimator;
|
| import android.content.Context;
|
| import android.graphics.Canvas;
|
| import android.graphics.Paint;
|
| @@ -14,16 +13,14 @@ import android.view.View;
|
| import android.view.ViewGroup;
|
| import android.widget.FrameLayout;
|
| import android.widget.LinearLayout;
|
| -import android.widget.ScrollView;
|
|
|
| import org.chromium.base.CalledByNative;
|
| import org.chromium.base.VisibleForTesting;
|
| import org.chromium.chrome.R;
|
| -import org.chromium.chrome.browser.EmptyTabObserver;
|
| import org.chromium.chrome.browser.Tab;
|
| import org.chromium.chrome.browser.TabObserver;
|
| +import org.chromium.chrome.browser.banners.SwipableOverlayView;
|
| import org.chromium.content_public.browser.WebContents;
|
| -import org.chromium.ui.UiUtils;
|
| import org.chromium.ui.base.DeviceFormFactor;
|
|
|
| import java.util.ArrayDeque;
|
| @@ -38,9 +35,8 @@ import java.util.LinkedList;
|
| * When initiated from native code, special code is needed to keep the Java and native infobar in
|
| * sync, see NativeInfoBar.
|
| */
|
| -public class InfoBarContainer extends ScrollView {
|
| +public class InfoBarContainer extends SwipableOverlayView {
|
| private static final String TAG = "InfoBarContainer";
|
| - private static final long REATTACH_FADE_IN_MS = 250;
|
| private static final int TAB_STRIP_AND_TOOLBAR_HEIGHT_PHONE_DP = 56;
|
| private static final int TAB_STRIP_AND_TOOLBAR_HEIGHT_TABLET_DP = 96;
|
|
|
| @@ -111,13 +107,11 @@ public class InfoBarContainer extends ScrollView {
|
|
|
| private Paint mTopBorderPaint;
|
|
|
| - // Keeps the infobars from becoming visible when they normally would.
|
| - private boolean mDoStayInvisible;
|
| - private TabObserver mTabObserver;
|
| -
|
| - public InfoBarContainer(Context context, int tabId, ViewGroup parentView,
|
| - WebContents webContents) {
|
| - super(context);
|
| + public InfoBarContainer(
|
| + Context context, int tabId, ViewGroup parentView, WebContents webContents, Tab tab) {
|
| + super(context, null);
|
| + tab.addObserver(getTabObserver());
|
| + setIsSwipable(false);
|
|
|
| // Workaround for http://crbug.com/407149. See explanation in onMeasure() below.
|
| setVerticalScrollBarEnabled(false);
|
| @@ -202,16 +196,8 @@ public class InfoBarContainer extends ScrollView {
|
| return true;
|
| }
|
|
|
| - private void addToParentView() {
|
| - if (mParentView != null && mParentView.indexOfChild(this) == -1) {
|
| - mParentView.addView(this);
|
| - }
|
| - }
|
| -
|
| - public void removeFromParentView() {
|
| - if (getParent() != null) {
|
| - ((ViewGroup) getParent()).removeView(this);
|
| - }
|
| + protected void addToParentView() {
|
| + super.addToParentView(mParentView);
|
| }
|
|
|
| /**
|
| @@ -226,50 +212,17 @@ public class InfoBarContainer extends ScrollView {
|
| addToParentView();
|
| }
|
|
|
| - /**
|
| - * Call with {@code true} when a higher priority bottom element is visible to keep the infobars
|
| - * from ever becoming visible. Call with {@code false} to restore normal visibility behavior.
|
| - * @param doStayInvisible Whether the infobars should stay invisible even when they would
|
| - * normally become visible.
|
| - * @param tab The current Tab.
|
| - */
|
| - public void setDoStayInvisible(boolean doStayInvisible, Tab tab) {
|
| - mDoStayInvisible = doStayInvisible;
|
| - if (mTabObserver == null) mTabObserver = createTabObserver();
|
| - if (doStayInvisible) {
|
| - tab.addObserver(mTabObserver);
|
| - } else {
|
| - tab.removeObserver(mTabObserver);
|
| - }
|
| - }
|
| -
|
| - /**
|
| - * Creates a TabObserver for monitoring a Tab, used to reset internal settings when a
|
| - * navigation is done.
|
| - * @return TabObserver that can be used to monitor a Tab.
|
| - */
|
| - private TabObserver createTabObserver() {
|
| - return new EmptyTabObserver() {
|
| + @Override
|
| + protected TabObserver createTabObserver() {
|
| + return new SwipableOverlayViewTabObserver() {
|
| @Override
|
| - public void onDidNavigateMainFrame(Tab tab, String url, String baseUrl,
|
| - boolean isNavigationToDifferentPage, boolean isFragmentNavigation,
|
| - int statusCode) {
|
| - setDoStayInvisible(false, tab);
|
| + public void onPageLoadStarted(Tab tab) {
|
| + onPageStarted();
|
| }
|
| };
|
| }
|
|
|
| @Override
|
| - protected void onAttachedToWindow() {
|
| - super.onAttachedToWindow();
|
| - if (!mDoStayInvisible) {
|
| - ObjectAnimator.ofFloat(this, "alpha", 0.f, 1.f).setDuration(REATTACH_FADE_IN_MS)
|
| - .start();
|
| - setVisibility(VISIBLE);
|
| - }
|
| - }
|
| -
|
| - @Override
|
| protected void onDetachedFromWindow() {
|
| super.onDetachedFromWindow();
|
| setVisibility(INVISIBLE);
|
| @@ -383,17 +336,6 @@ public class InfoBarContainer extends ScrollView {
|
|
|
| @Override
|
| protected void onLayout(boolean changed, int l, int t, int r, int b) {
|
| - // Hide the infobars when the keyboard is showing.
|
| - boolean isShowing = (getVisibility() == View.VISIBLE);
|
| - if (UiUtils.isKeyboardShowing(mContext, this)) {
|
| - if (isShowing) {
|
| - setVisibility(View.INVISIBLE);
|
| - }
|
| - } else {
|
| - if (!isShowing && !mDoStayInvisible) {
|
| - setVisibility(View.VISIBLE);
|
| - }
|
| - }
|
| super.onLayout(changed, l, t, r, b);
|
|
|
| // Keep the infobars fixed to the bottom of the screen when infobars are added or removed.
|
| @@ -578,6 +520,21 @@ public class InfoBarContainer extends ScrollView {
|
| return mNativeInfoBarContainer;
|
| }
|
|
|
| + @Override
|
| + protected void onViewSwipedAway() {
|
| + assert false;
|
| + }
|
| +
|
| + @Override
|
| + protected void onViewClicked() {
|
| + assert false;
|
| + }
|
| +
|
| + @Override
|
| + protected void onViewPressed(MotionEvent event) {
|
| + assert false;
|
| + }
|
| +
|
| private native long nativeInit(WebContents webContents);
|
| private native void nativeDestroy(long nativeInfoBarContainerAndroid);
|
| }
|
|
|