| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 } |
| OLD | NEW |