Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1909)

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/infobar/InfoBarContainer.java

Issue 2623493003: Refactor the view hierarchy of snackbars and infobars (Closed)
Patch Set: comments Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 018a0279e1087acd196b0a083b7dd348f28b007e..c09c62893aa6b8e09c0a83f43c63a5c85abf21ff 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
@@ -7,6 +7,7 @@ package org.chromium.chrome.browser.infobar;
import android.content.Context;
import android.view.Gravity;
import android.view.View;
+import android.view.ViewGroup;
import android.widget.FrameLayout;
import org.chromium.base.ObserverList;
@@ -15,7 +16,6 @@ import org.chromium.base.annotations.CalledByNative;
import org.chromium.chrome.browser.banners.SwipableOverlayView;
import org.chromium.chrome.browser.tab.EmptyTabObserver;
import org.chromium.chrome.browser.tab.Tab;
-import org.chromium.chrome.browser.tab.TabContentViewParent;
import org.chromium.chrome.browser.tab.TabObserver;
import org.chromium.content.browser.ContentViewCore;
import org.chromium.content_public.browser.WebContents;
@@ -93,6 +93,31 @@ public class InfoBarContainer extends SwipableOverlayView {
int statusCode) {
setIsObscuredByOtherView(false);
}
+
+ @Override
+ public void onContentChanged(Tab tab) {
+ if (mTabView == tab.getView()) return;
+ mTabView.removeOnAttachStateChangeListener(mAttachedStateListener);
+ mTabView = tab.getView();
+ mTabView.addOnAttachStateChangeListener(mAttachedStateListener);
+ }
+ };
+
+ /**
+ * Adds/removes the {@link InfoBarContainer} when the tab's view is attached/detached. This is
+ * mostly to ensure the infobars are not shown in tab switcher overview mode.
+ */
+ private final OnAttachStateChangeListener mAttachedStateListener =
+ new OnAttachStateChangeListener() {
+ @Override
+ public void onViewDetachedFromWindow(View v) {
+ removeFromParentView();
+ }
+
+ @Override
+ public void onViewAttachedToWindow(View v) {
+ addToParentView();
+ }
};
private final InfoBarContainerLayout mLayout;
@@ -106,11 +131,11 @@ public class InfoBarContainer extends SwipableOverlayView {
/** True when this container has been emptied and its native counterpart has been destroyed. */
private boolean mDestroyed;
- /** The id of the tab associated with us. Set to Tab.INVALID_TAB_ID if no tab is associated. */
- private int mTabId;
-
/** Parent view that contains the InfoBarContainerLayout. */
- private TabContentViewParent mParentView;
+ private ViewGroup mParentView;
+
+ /** The view that {@link Tab#getView()} returns. */
+ private View mTabView;
/** Whether or not another View is occupying the same space as this one. */
private boolean mIsObscured;
@@ -118,9 +143,10 @@ public class InfoBarContainer extends SwipableOverlayView {
private final ObserverList<InfoBarContainerObserver> mObservers =
new ObserverList<InfoBarContainerObserver>();
- public InfoBarContainer(Context context, int tabId, TabContentViewParent parentView, Tab tab) {
+ public InfoBarContainer(Context context, final ViewGroup parentView, Tab tab) {
super(context, null);
tab.addObserver(mTabObserver);
+ mTabView = tab.getView();
// TODO(newt): move this workaround into the infobar views if/when they're scrollable.
// Workaround for http://crbug.com/407149. See explanation in onMeasure() below.
@@ -133,7 +159,6 @@ public class InfoBarContainer extends SwipableOverlayView {
lp.topMargin = Math.round(topMarginDp * getResources().getDisplayMetrics().density);
setLayoutParams(lp);
- mTabId = tabId;
mParentView = parentView;
mLayout = new InfoBarContainerLayout(context);
@@ -169,6 +194,15 @@ public class InfoBarContainer extends SwipableOverlayView {
}
}
+ /**
+ * Sets the parent {@link ViewGroup} that contains the {@link InfoBarContainer}.
+ */
+ public void setParentView(ViewGroup parent) {
+ mParentView = parent;
+ removeFromParentView();
+ addToParentView();
+ }
+
@VisibleForTesting
public void setAnimationListener(InfoBarAnimationListener listener) {
mLayout.setAnimationListener(listener);
@@ -187,18 +221,6 @@ public class InfoBarContainer extends SwipableOverlayView {
}
/**
- * Called when the parent {@link android.view.ViewGroup} has changed for
- * this container.
- */
- public void onParentViewChanged(int tabId, TabContentViewParent parentView) {
- mTabId = tabId;
- mParentView = parentView;
-
- removeFromParentView();
- addToParentView();
- }
-
- /**
* Adds an InfoBar to the view hierarchy.
* @param infoBar InfoBar to add to the View hierarchy.
*/

Powered by Google App Engine
This is Rietveld 408576698