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

Side by Side Diff: chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelperManager.java

Issue 1836453003: Use a scrollable tab strip on tablets at small widths (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Tiny bit of clean up Created 4 years, 8 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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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.compositor.overlays.strip; 5 package org.chromium.chrome.browser.compositor.overlays.strip;
6 6
7 import android.content.Context; 7 import android.content.Context;
8 import android.content.res.Resources; 8 import android.content.res.Resources;
9 import android.graphics.RectF; 9 import android.graphics.RectF;
10 10
11 import org.chromium.base.VisibleForTesting; 11 import org.chromium.base.VisibleForTesting;
12 import org.chromium.chrome.R; 12 import org.chromium.chrome.R;
13 import org.chromium.chrome.browser.compositor.LayerTitleCache; 13 import org.chromium.chrome.browser.compositor.LayerTitleCache;
14 import org.chromium.chrome.browser.compositor.layouts.LayoutRenderHost; 14 import org.chromium.chrome.browser.compositor.layouts.LayoutRenderHost;
15 import org.chromium.chrome.browser.compositor.layouts.LayoutUpdateHost; 15 import org.chromium.chrome.browser.compositor.layouts.LayoutUpdateHost;
16 import org.chromium.chrome.browser.compositor.layouts.components.CompositorButto n; 16 import org.chromium.chrome.browser.compositor.layouts.components.CompositorButto n;
17 import org.chromium.chrome.browser.compositor.layouts.components.VirtualView; 17 import org.chromium.chrome.browser.compositor.layouts.components.VirtualView;
18 import org.chromium.chrome.browser.compositor.layouts.content.TabContentManager;
19 import org.chromium.chrome.browser.compositor.layouts.eventfilter.AreaGestureEve ntFilter; 18 import org.chromium.chrome.browser.compositor.layouts.eventfilter.AreaGestureEve ntFilter;
20 import org.chromium.chrome.browser.compositor.layouts.eventfilter.EventFilter; 19 import org.chromium.chrome.browser.compositor.layouts.eventfilter.EventFilter;
21 import org.chromium.chrome.browser.compositor.overlays.SceneOverlay; 20 import org.chromium.chrome.browser.compositor.overlays.SceneOverlay;
22 import org.chromium.chrome.browser.compositor.scene_layer.SceneOverlayLayer; 21 import org.chromium.chrome.browser.compositor.scene_layer.SceneOverlayLayer;
23 import org.chromium.chrome.browser.compositor.scene_layer.TabStripSceneLayer; 22 import org.chromium.chrome.browser.compositor.scene_layer.TabStripSceneLayer;
23 import org.chromium.chrome.browser.tab.Tab;
24 import org.chromium.chrome.browser.tabmodel.TabCreatorManager; 24 import org.chromium.chrome.browser.tabmodel.TabCreatorManager;
25 import org.chromium.chrome.browser.tabmodel.TabModel;
25 import org.chromium.chrome.browser.tabmodel.TabModelSelector; 26 import org.chromium.chrome.browser.tabmodel.TabModelSelector;
27 import org.chromium.ui.base.LocalizationUtils;
26 import org.chromium.ui.resources.ResourceManager; 28 import org.chromium.ui.resources.ResourceManager;
27 29
28 import java.util.List; 30 import java.util.List;
29 31
30 /** 32 /**
31 * This class handles managing which {@link StripLayoutHelper} is currently acti ve and dispatches 33 * This class handles managing which {@link StripLayoutHelper} is currently acti ve and dispatches
32 * all input and model events to the proper destination. 34 * all input and model events to the proper destination.
33 */ 35 */
34 public class StripLayoutHelperManager implements SceneOverlay { 36 public class StripLayoutHelperManager implements SceneOverlay {
35 // Caching Variables 37 // Caching Variables
36 private final RectF mStripFilterArea = new RectF(); 38 private final RectF mStripFilterArea = new RectF();
37 39
38 // 1px border colors 40 // 1px border colors
39 private static final float BORDER_OPACITY = 0.2f; 41 private static final float BORDER_OPACITY = 0.2f;
40 private static final float BORDER_OPACITY_INCOGNITO = 0.4f; 42 private static final float BORDER_OPACITY_INCOGNITO = 0.4f;
41 43
42 // Model selector buttons constants. 44 // Model selector buttons constants.
43 private static final float MODEL_SELECTOR_BUTTON_Y_OFFSET_DP = 10.f; 45 private static final float MODEL_SELECTOR_BUTTON_Y_OFFSET_DP = 10.f;
44 private static final float MODEL_SELECTOR_BUTTON_RIGHT_PADDING_DP = 6.f; 46 private static final float MODEL_SELECTOR_BUTTON_END_PADDING_DP = 6.f;
45 private static final float MODEL_SELECTOR_BUTTON_LEFT_PADDING_DP = 3.f; 47 private static final float MODEL_SELECTOR_BUTTON_START_PADDING_DP = 3.f;
46 private static final float MODEL_SELECTOR_BUTTON_WIDTH_DP = 24.f; 48 private static final float MODEL_SELECTOR_BUTTON_WIDTH_DP = 24.f;
47 private static final float MODEL_SELECTOR_BUTTON_HEIGHT_DP = 24.f; 49 private static final float MODEL_SELECTOR_BUTTON_HEIGHT_DP = 24.f;
48 50
49 // External influences 51 // External influences
50 private TabModelSelector mTabModelSelector; 52 private TabModelSelector mTabModelSelector;
51 private final LayoutUpdateHost mUpdateHost; 53 private final LayoutUpdateHost mUpdateHost;
52 private final LayoutRenderHost mRenderHost;
53 54
54 // Event Filters 55 // Event Filters
55 private final AreaGestureEventFilter mEventFilter; 56 private final AreaGestureEventFilter mEventFilter;
56 57
57 // Internal state 58 // Internal state
58 private boolean mIsIncognito; 59 private boolean mIsIncognito;
59 private final StripLayoutHelper mNormalHelper; 60 private final StripLayoutHelper mNormalHelper;
60 private final StripLayoutHelper mIncognitoHelper; 61 private final StripLayoutHelper mIncognitoHelper;
61 62
62 // UI State 63 // UI State
63 private float mWidth; // in dp units 64 private float mWidth; // in dp units
64 private final float mHeight; // in dp units 65 private final float mHeight; // in dp units
65 private int mOrientation; 66 private int mOrientation;
66 private final CompositorButton mModelSelectorButton; 67 private final CompositorButton mModelSelectorButton;
67 68
68 private TabStripSceneLayer mTabStripTreeProvider; 69 private TabStripSceneLayer mTabStripTreeProvider;
69 70
70 /** 71 /**
71 * Creates an instance of the {@link StripLayoutHelperManager}. 72 * Creates an instance of the {@link StripLayoutHelperManager}.
72 * @param context The current Android {@link Context}. 73 * @param context The current Android {@link Context}.
73 * @param updateHost The parent {@link LayoutUpdateHost}. 74 * @param updateHost The parent {@link LayoutUpdateHost}.
74 * @param renderHost The {@link LayoutRenderHost}. 75 * @param renderHost The {@link LayoutRenderHost}.
75 */ 76 */
76 public StripLayoutHelperManager(Context context, LayoutUpdateHost updateHost , 77 public StripLayoutHelperManager(Context context, LayoutUpdateHost updateHost ,
77 LayoutRenderHost renderHost, AreaGestureEventFilter eventFilter) { 78 LayoutRenderHost renderHost, AreaGestureEventFilter eventFilter) {
78 mUpdateHost = updateHost; 79 mUpdateHost = updateHost;
79 mRenderHost = renderHost;
80 mTabStripTreeProvider = new TabStripSceneLayer(context); 80 mTabStripTreeProvider = new TabStripSceneLayer(context);
81 81
82 mEventFilter = eventFilter; 82 mEventFilter = eventFilter;
83 83
84 mNormalHelper = new StripLayoutHelper(context, updateHost, renderHost, f alse); 84 mNormalHelper = new StripLayoutHelper(context, updateHost, renderHost, f alse);
85 mIncognitoHelper = new StripLayoutHelper(context, updateHost, renderHost , true); 85 mIncognitoHelper = new StripLayoutHelper(context, updateHost, renderHost , true);
86 86
87 mModelSelectorButton = new CompositorButton( 87 mModelSelectorButton = new CompositorButton(
88 context, MODEL_SELECTOR_BUTTON_WIDTH_DP, MODEL_SELECTOR_BUTTON_H EIGHT_DP); 88 context, MODEL_SELECTOR_BUTTON_WIDTH_DP, MODEL_SELECTOR_BUTTON_H EIGHT_DP);
89 mModelSelectorButton.setIncognito(false); 89 mModelSelectorButton.setIncognito(false);
(...skipping 19 matching lines...) Expand all
109 public void destroy() { 109 public void destroy() {
110 mTabStripTreeProvider.destroy(); 110 mTabStripTreeProvider.destroy();
111 mTabStripTreeProvider = null; 111 mTabStripTreeProvider = null;
112 } 112 }
113 113
114 @Override 114 @Override
115 public SceneOverlayLayer getUpdatedSceneOverlayTree(LayerTitleCache layerTit leCache, 115 public SceneOverlayLayer getUpdatedSceneOverlayTree(LayerTitleCache layerTit leCache,
116 ResourceManager resourceManager, float yOffset) { 116 ResourceManager resourceManager, float yOffset) {
117 assert mTabStripTreeProvider != null; 117 assert mTabStripTreeProvider != null;
118 118
119 Tab selectedTab = mTabModelSelector.getCurrentModel().getTabAt(
120 mTabModelSelector.getCurrentModel().index());
121 int selectedTabId = selectedTab == null ? TabModel.INVALID_TAB_INDEX : s electedTab.getId();
119 mTabStripTreeProvider.pushAndUpdateStrip(this, layerTitleCache, resource Manager, 122 mTabStripTreeProvider.pushAndUpdateStrip(this, layerTitleCache, resource Manager,
120 getActiveStripLayoutHelper().getStripLayoutTabsToRender(), yOffs et); 123 getActiveStripLayoutHelper().getStripLayoutTabsToRender(), yOffs et,
124 selectedTabId);
121 return mTabStripTreeProvider; 125 return mTabStripTreeProvider;
122 } 126 }
123 127
124 @Override 128 @Override
125 public EventFilter getEventFilter() { 129 public EventFilter getEventFilter() {
126 return mEventFilter; 130 return mEventFilter;
127 } 131 }
128 132
129 @Override 133 @Override
130 public void onSizeChanged( 134 public void onSizeChanged(
131 float width, float height, float visibleViewportOffsetY, int orienta tion) { 135 float width, float height, float visibleViewportOffsetY, int orienta tion) {
132 mWidth = width; 136 mWidth = width;
133 mOrientation = orientation; 137 mOrientation = orientation;
134 mModelSelectorButton.setX( 138 if (!LocalizationUtils.isLayoutRtl()) {
135 mWidth - MODEL_SELECTOR_BUTTON_WIDTH_DP - MODEL_SELECTOR_BUTTON_ RIGHT_PADDING_DP); 139 mModelSelectorButton.setX(
140 mWidth - MODEL_SELECTOR_BUTTON_WIDTH_DP - MODEL_SELECTOR_BUT TON_END_PADDING_DP);
141 } else {
142 mModelSelectorButton.setX(MODEL_SELECTOR_BUTTON_END_PADDING_DP);
143 }
144
136 mNormalHelper.onSizeChanged(mWidth, mHeight); 145 mNormalHelper.onSizeChanged(mWidth, mHeight);
137 mIncognitoHelper.onSizeChanged(mWidth, mHeight); 146 mIncognitoHelper.onSizeChanged(mWidth, mHeight);
138 147
139 mStripFilterArea.set(0, 0, mWidth, Math.min(getHeight(), visibleViewport OffsetY)); 148 mStripFilterArea.set(0, 0, mWidth, Math.min(getHeight(), visibleViewport OffsetY));
140 mEventFilter.setEventArea(mStripFilterArea); 149 mEventFilter.setEventArea(mStripFilterArea);
141 } 150 }
142 151
143 public CompositorButton getNewTabButton() { 152 public CompositorButton getNewTabButton() {
144 return getActiveStripLayoutHelper().getNewTabButton(); 153 return getActiveStripLayoutHelper().getNewTabButton();
145 } 154 }
146 155
147 public CompositorButton getModelSelectorButton() { 156 public CompositorButton getModelSelectorButton() {
148 return mModelSelectorButton; 157 return mModelSelectorButton;
149 } 158 }
150 159
151 @Override 160 @Override
152 public void getVirtualViews(List<VirtualView> views) { 161 public void getVirtualViews(List<VirtualView> views) {
153 if (mModelSelectorButton.isVisible()) views.add(mModelSelectorButton); 162 if (mModelSelectorButton.isVisible()) views.add(mModelSelectorButton);
154 getActiveStripLayoutHelper().getVirtualViews(views); 163 getActiveStripLayoutHelper().getVirtualViews(views);
155 } 164 }
156 165
157 @Override 166 @Override
158 public boolean shouldHideAndroidTopControls() { 167 public boolean shouldHideAndroidTopControls() {
159 return false; 168 return false;
160 } 169 }
161 170
162 /** 171 /**
172 * @return The opacity to use for the fade on the left side of the tab strip .
173 */
174 public float getLeftFadeOpacity() {
175 return getActiveStripLayoutHelper().getLeftFadeOpacity();
176 }
177
178 /**
179 * @return The opacity to use for the fade on the right side of the tab stri p.
180 */
181 public float getRightFadeOpacity() {
182 return getActiveStripLayoutHelper().getRightFadeOpacity();
183 }
184
185 /**
163 * @return The brightness of background tabs in the tabstrip. 186 * @return The brightness of background tabs in the tabstrip.
164 */ 187 */
165 public float getBackgroundTabBrightness() { 188 public float getBackgroundTabBrightness() {
166 return getActiveStripLayoutHelper().getBackgroundTabBrightness(); 189 return getActiveStripLayoutHelper().getBackgroundTabBrightness();
167 } 190 }
168 191
169 /** 192 /**
170 * @param brightness Sets the brightness for the entire tabstrip. 193 * @param brightness Sets the brightness for the entire tabstrip.
171 */ 194 */
172 public void setBrightness(float brightness) { 195 public void setBrightness(float brightness) {
173 getActiveStripLayoutHelper().setBrightness(brightness); 196 getActiveStripLayoutHelper().setBrightness(brightness);
174 } 197 }
175 198
176 /** 199 /**
177 * @return The brightness of the entire tabstrip. 200 * @return The brightness of the entire tabstrip.
178 */ 201 */
179 public float getBrightness() { 202 public float getBrightness() {
180 return getActiveStripLayoutHelper().getBrightness(); 203 return getActiveStripLayoutHelper().getBrightness();
181 } 204 }
182 205
183 /** 206 /**
184 * Sets the {@link TabModelSelector} that this {@link StripLayoutHelperManag er} will visually 207 * Sets the {@link TabModelSelector} that this {@link StripLayoutHelperManag er} will visually
185 * represent, and various objects associated with it. 208 * represent, and various objects associated with it.
186 * @param modelSelector The {@link TabModelSelector} to visually represent. 209 * @param modelSelector The {@link TabModelSelector} to visually represent.
187 * @param tabCreatorManager The {@link TabCreatorManager}, used to create ne w tabs. 210 * @param tabCreatorManager The {@link TabCreatorManager}, used to create ne w tabs.
188 * @param tabContentManager The {@link TabContentManager}, used to provide d isplay content for
189 * tabs.
190 */ 211 */
191 public void setTabModelSelector(TabModelSelector modelSelector, 212 public void setTabModelSelector(TabModelSelector modelSelector,
192 TabCreatorManager tabCreatorManager, TabContentManager tabContentMan ager) { 213 TabCreatorManager tabCreatorManager) {
193 if (mTabModelSelector == modelSelector) return; 214 if (mTabModelSelector == modelSelector) return;
194 mTabModelSelector = modelSelector; 215 mTabModelSelector = modelSelector;
195 mNormalHelper.setTabModel(mTabModelSelector.getModel(false), tabContentM anager, 216 mNormalHelper.setTabModel(mTabModelSelector.getModel(false),
196 tabCreatorManager.getTabCreator(false)); 217 tabCreatorManager.getTabCreator(false));
197 mIncognitoHelper.setTabModel(mTabModelSelector.getModel(true), tabConten tManager, 218 mIncognitoHelper.setTabModel(mTabModelSelector.getModel(true),
198 tabCreatorManager.getTabCreator(true)); 219 tabCreatorManager.getTabCreator(true));
199 tabModelSwitched(mTabModelSelector.isIncognitoSelected()); 220 tabModelSwitched(mTabModelSelector.isIncognitoSelected());
200 } 221 }
201 222
202 @Override 223 @Override
203 public void tabTitleChanged(int tabId, String title) { 224 public void tabTitleChanged(int tabId, String title) {
204 getActiveStripLayoutHelper().tabTitleChanged(tabId, title); 225 getActiveStripLayoutHelper().tabTitleChanged(tabId, title);
205 } 226 }
206 227
207 public float getHeight() { 228 public float getHeight() {
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
249 270
250 mUpdateHost.requestUpdate(); 271 mUpdateHost.requestUpdate();
251 } 272 }
252 273
253 private void updateModelSwitcherButton() { 274 private void updateModelSwitcherButton() {
254 mModelSelectorButton.setIncognito(mIsIncognito); 275 mModelSelectorButton.setIncognito(mIsIncognito);
255 if (mTabModelSelector != null) { 276 if (mTabModelSelector != null) {
256 boolean isVisible = mTabModelSelector.getModel(true).getCount() != 0 ; 277 boolean isVisible = mTabModelSelector.getModel(true).getCount() != 0 ;
257 mModelSelectorButton.setVisible(isVisible); 278 mModelSelectorButton.setVisible(isVisible);
258 279
259 float rightMargin = isVisible 280 float endMargin = isVisible
260 ? MODEL_SELECTOR_BUTTON_WIDTH_DP + MODEL_SELECTOR_BUTTON_RIG HT_PADDING_DP 281 ? MODEL_SELECTOR_BUTTON_WIDTH_DP + MODEL_SELECTOR_BUTTON_END _PADDING_DP
261 + MODEL_SELECTOR_BUTTON_LEFT_PADDING_DP 282 + MODEL_SELECTOR_BUTTON_START_PADDING_DP
262 : 0.0f; 283 : 0.0f;
263 mNormalHelper.setRightMargin(rightMargin); 284
264 mIncognitoHelper.setRightMargin(rightMargin); 285 mNormalHelper.setEndMargin(endMargin);
286 mIncognitoHelper.setEndMargin(endMargin);
265 } 287 }
266 } 288 }
267 289
268 @Override 290 @Override
269 public void tabSelected(long time, boolean incognito, int id, int prevId) { 291 public void tabSelected(long time, boolean incognito, int id, int prevId) {
270 getStripLayoutHelper(incognito).tabSelected(time, id, prevId); 292 getStripLayoutHelper(incognito).tabSelected(time, id, prevId);
271 } 293 }
272 294
273 @Override 295 @Override
274 public void tabMoved(long time, boolean incognito, int id, int oldIndex, int newIndex) { 296 public void tabMoved(long time, boolean incognito, int id, int oldIndex, int newIndex) {
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
409 */ 431 */
410 @VisibleForTesting 432 @VisibleForTesting
411 public StripLayoutHelper getActiveStripLayoutHelper() { 433 public StripLayoutHelper getActiveStripLayoutHelper() {
412 return getStripLayoutHelper(mIsIncognito); 434 return getStripLayoutHelper(mIsIncognito);
413 } 435 }
414 436
415 private StripLayoutHelper getInactiveStripLayoutHelper() { 437 private StripLayoutHelper getInactiveStripLayoutHelper() {
416 return mIsIncognito ? mNormalHelper : mIncognitoHelper; 438 return mIsIncognito ? mNormalHelper : mIncognitoHelper;
417 } 439 }
418 } 440 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698