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

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

Issue 2840933003: Shows snackbar in translate infobar, after certain user actions. (Closed)
Patch Set: Created 3 years, 7 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 unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 package org.chromium.chrome.browser.infobar; 5 package org.chromium.chrome.browser.infobar;
6 6
7 import android.app.Activity;
7 import android.content.Context; 8 import android.content.Context;
8 import android.view.Gravity; 9 import android.view.Gravity;
9 import android.view.View; 10 import android.view.View;
10 import android.view.ViewGroup; 11 import android.view.ViewGroup;
11 import android.widget.FrameLayout; 12 import android.widget.FrameLayout;
12 13
13 import org.chromium.base.ObserverList; 14 import org.chromium.base.ObserverList;
14 import org.chromium.base.VisibleForTesting; 15 import org.chromium.base.VisibleForTesting;
15 import org.chromium.base.annotations.CalledByNative; 16 import org.chromium.base.annotations.CalledByNative;
16 import org.chromium.chrome.R; 17 import org.chromium.chrome.R;
18 import org.chromium.chrome.browser.ChromeActivity;
17 import org.chromium.chrome.browser.banners.SwipableOverlayView; 19 import org.chromium.chrome.browser.banners.SwipableOverlayView;
18 import org.chromium.chrome.browser.infobar.InfoBarContainerLayout.Item; 20 import org.chromium.chrome.browser.infobar.InfoBarContainerLayout.Item;
21 import org.chromium.chrome.browser.snackbar.SnackbarManager;
19 import org.chromium.chrome.browser.tab.EmptyTabObserver; 22 import org.chromium.chrome.browser.tab.EmptyTabObserver;
20 import org.chromium.chrome.browser.tab.Tab; 23 import org.chromium.chrome.browser.tab.Tab;
21 import org.chromium.chrome.browser.tab.TabObserver; 24 import org.chromium.chrome.browser.tab.TabObserver;
22 import org.chromium.content.browser.ContentViewCore; 25 import org.chromium.content.browser.ContentViewCore;
23 import org.chromium.content_public.browser.WebContents; 26 import org.chromium.content_public.browser.WebContents;
24 import org.chromium.ui.UiUtils; 27 import org.chromium.ui.UiUtils;
25 import org.chromium.ui.base.DeviceFormFactor; 28 import org.chromium.ui.base.DeviceFormFactor;
26 29
27 import java.util.ArrayList; 30 import java.util.ArrayList;
28 31
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
108 @Override 111 @Override
109 public void onContentChanged(Tab tab) { 112 public void onContentChanged(Tab tab) {
110 mTabView.removeOnAttachStateChangeListener(mAttachedStateListener); 113 mTabView.removeOnAttachStateChangeListener(mAttachedStateListener);
111 mTabView = tab.getView(); 114 mTabView = tab.getView();
112 mTabView.addOnAttachStateChangeListener(mAttachedStateListener); 115 mTabView.addOnAttachStateChangeListener(mAttachedStateListener);
113 } 116 }
114 117
115 @Override 118 @Override
116 public void onReparentingFinished(Tab tab) { 119 public void onReparentingFinished(Tab tab) {
117 setParentView((ViewGroup) tab.getActivity().findViewById(R.id.bottom _container)); 120 setParentView((ViewGroup) tab.getActivity().findViewById(R.id.bottom _container));
121 setSnackbarManagerFromTab(tab);
118 } 122 }
119 }; 123 };
120 124
125 private void setSnackbarManagerFromTab(Tab tab) {
126 Activity activity = tab.getActivity();
127 if (activity != null) {
128 mSnackbarManager = ((ChromeActivity) activity).getSnackbarManager();
129 } else {
130 mSnackbarManager = null;
131 }
132 }
133
121 /** 134 /**
122 * Adds/removes the {@link InfoBarContainer} when the tab's view is attached /detached. This is 135 * Adds/removes the {@link InfoBarContainer} when the tab's view is attached /detached. This is
123 * mostly to ensure the infobars are not shown in tab switcher overview mode . 136 * mostly to ensure the infobars are not shown in tab switcher overview mode .
124 */ 137 */
125 private final OnAttachStateChangeListener mAttachedStateListener = 138 private final OnAttachStateChangeListener mAttachedStateListener =
126 new OnAttachStateChangeListener() { 139 new OnAttachStateChangeListener() {
127 @Override 140 @Override
128 public void onViewDetachedFromWindow(View v) { 141 public void onViewDetachedFromWindow(View v) {
129 removeFromParentView(); 142 removeFromParentView();
130 } 143 }
(...skipping 23 matching lines...) Expand all
154 167
155 /** The view that {@link Tab#getView()} returns. */ 168 /** The view that {@link Tab#getView()} returns. */
156 private View mTabView; 169 private View mTabView;
157 170
158 /** Whether or not another View is occupying the same space as this one. */ 171 /** Whether or not another View is occupying the same space as this one. */
159 private boolean mIsObscured; 172 private boolean mIsObscured;
160 173
161 private final ObserverList<InfoBarContainerObserver> mObservers = 174 private final ObserverList<InfoBarContainerObserver> mObservers =
162 new ObserverList<InfoBarContainerObserver>(); 175 new ObserverList<InfoBarContainerObserver>();
163 176
177 /** The snackbar manager instance used by the activity that hosts this infob ar. */
178 private SnackbarManager mSnackbarManager;
179
164 public InfoBarContainer(Context context, final ViewGroup parentView, Tab tab ) { 180 public InfoBarContainer(Context context, final ViewGroup parentView, Tab tab ) {
165 super(context, null); 181 super(context, null);
166 tab.addObserver(mTabObserver); 182 tab.addObserver(mTabObserver);
167 mTabView = tab.getView(); 183 mTabView = tab.getView();
184 setSnackbarManagerFromTab(tab);
168 185
169 // TODO(newt): move this workaround into the infobar views if/when they' re scrollable. 186 // TODO(newt): move this workaround into the infobar views if/when they' re scrollable.
170 // Workaround for http://crbug.com/407149. See explanation in onMeasure( ) below. 187 // Workaround for http://crbug.com/407149. See explanation in onMeasure( ) below.
171 setVerticalScrollBarEnabled(false); 188 setVerticalScrollBarEnabled(false);
172 189
173 FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams( 190 FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(
174 LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT, Gravity.BO TTOM); 191 LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT, Gravity.BO TTOM);
175 int topMarginDp = DeviceFormFactor.isTablet(context) 192 int topMarginDp = DeviceFormFactor.isTablet(context)
176 ? TOP_MARGIN_TABLET_DP : TOP_MARGIN_PHONE_DP; 193 ? TOP_MARGIN_TABLET_DP : TOP_MARGIN_PHONE_DP;
177 lp.topMargin = Math.round(topMarginDp * getResources().getDisplayMetrics ().density); 194 lp.topMargin = Math.round(topMarginDp * getResources().getDisplayMetrics ().density);
178 setLayoutParams(lp); 195 setLayoutParams(lp);
179 196
180 mParentView = parentView; 197 mParentView = parentView;
181 198
182 mLayout = new InfoBarContainerLayout(context); 199 mLayout = new InfoBarContainerLayout(context);
183 addView(mLayout, new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT, 200 addView(mLayout, new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT,
184 LayoutParams.WRAP_CONTENT, Gravity.CENTER_HORIZONTAL)); 201 LayoutParams.WRAP_CONTENT, Gravity.CENTER_HORIZONTAL));
185 202
186 mIPHSupport = new IPHInfoBarSupport(context); 203 mIPHSupport = new IPHInfoBarSupport(context);
187 mLayout.addAnimationListener(mIPHSupport); 204 mLayout.addAnimationListener(mIPHSupport);
188 addObserver(mIPHSupport); 205 addObserver(mIPHSupport);
189 206
190 // Chromium's InfoBarContainer may add an InfoBar immediately during thi s initialization 207 // Chromium's InfoBarContainer may add an InfoBar immediately during thi s initialization
191 // call, so make sure everything in the InfoBarContainer is completely r eady beforehand. 208 // call, so make sure everything in the InfoBarContainer is completely r eady beforehand.
192 mNativeInfoBarContainer = nativeInit(); 209 mNativeInfoBarContainer = nativeInit();
193 } 210 }
194 211
212 public SnackbarManager getSnackbarManager() {
213 return mSnackbarManager;
214 }
215
195 /** 216 /**
196 * Adds an {@link InfoBarContainerObserver}. 217 * Adds an {@link InfoBarContainerObserver}.
197 * @param observer The {@link InfoBarContainerObserver} to add. 218 * @param observer The {@link InfoBarContainerObserver} to add.
198 */ 219 */
199 public void addObserver(InfoBarContainerObserver observer) { 220 public void addObserver(InfoBarContainerObserver observer) {
200 mObservers.addObserver(observer); 221 mObservers.addObserver(observer);
201 } 222 }
202 223
203 /** 224 /**
204 * Removes a {@link InfoBarContainerObserver}. 225 * Removes a {@link InfoBarContainerObserver}.
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after
407 } 428 }
408 429
409 super.onLayout(changed, l, t, r, b); 430 super.onLayout(changed, l, t, r, b);
410 } 431 }
411 432
412 private native long nativeInit(); 433 private native long nativeInit();
413 private native void nativeSetWebContents( 434 private native void nativeSetWebContents(
414 long nativeInfoBarContainerAndroid, WebContents webContents); 435 long nativeInfoBarContainerAndroid, WebContents webContents);
415 private native void nativeDestroy(long nativeInfoBarContainerAndroid); 436 private native void nativeDestroy(long nativeInfoBarContainerAndroid);
416 } 437 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698