| 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.LayoutManager; | |
| 15 import org.chromium.chrome.browser.compositor.layouts.LayoutRenderHost; | 14 import org.chromium.chrome.browser.compositor.layouts.LayoutRenderHost; |
| 16 import org.chromium.chrome.browser.compositor.layouts.LayoutUpdateHost; | 15 import org.chromium.chrome.browser.compositor.layouts.LayoutUpdateHost; |
| 17 import org.chromium.chrome.browser.compositor.layouts.components.CompositorButto
n; | 16 import org.chromium.chrome.browser.compositor.layouts.components.CompositorButto
n; |
| 18 import org.chromium.chrome.browser.compositor.layouts.components.CompositorButto
n.CompositorOnClickHandler; | 17 import org.chromium.chrome.browser.compositor.layouts.components.CompositorButto
n.CompositorOnClickHandler; |
| 19 import org.chromium.chrome.browser.compositor.layouts.components.VirtualView; | 18 import org.chromium.chrome.browser.compositor.layouts.components.VirtualView; |
| 20 import org.chromium.chrome.browser.compositor.layouts.eventfilter.AreaGestureEve
ntFilter; | 19 import org.chromium.chrome.browser.compositor.layouts.eventfilter.AreaGestureEve
ntFilter; |
| 21 import org.chromium.chrome.browser.compositor.layouts.eventfilter.EventFilter; | 20 import org.chromium.chrome.browser.compositor.layouts.eventfilter.EventFilter; |
| 22 import org.chromium.chrome.browser.compositor.layouts.eventfilter.GestureHandler
; | |
| 23 import org.chromium.chrome.browser.compositor.overlays.SceneOverlay; | 21 import org.chromium.chrome.browser.compositor.overlays.SceneOverlay; |
| 24 import org.chromium.chrome.browser.compositor.scene_layer.SceneOverlayLayer; | 22 import org.chromium.chrome.browser.compositor.scene_layer.SceneOverlayLayer; |
| 25 import org.chromium.chrome.browser.compositor.scene_layer.TabStripSceneLayer; | 23 import org.chromium.chrome.browser.compositor.scene_layer.TabStripSceneLayer; |
| 26 import org.chromium.chrome.browser.tab.Tab; | 24 import org.chromium.chrome.browser.tab.Tab; |
| 27 import org.chromium.chrome.browser.tabmodel.TabCreatorManager; | 25 import org.chromium.chrome.browser.tabmodel.TabCreatorManager; |
| 28 import org.chromium.chrome.browser.tabmodel.TabModel; | 26 import org.chromium.chrome.browser.tabmodel.TabModel; |
| 29 import org.chromium.chrome.browser.tabmodel.TabModelSelector; | 27 import org.chromium.chrome.browser.tabmodel.TabModelSelector; |
| 30 import org.chromium.ui.base.LocalizationUtils; | 28 import org.chromium.ui.base.LocalizationUtils; |
| 31 import org.chromium.ui.resources.ResourceManager; | 29 import org.chromium.ui.resources.ResourceManager; |
| 32 | 30 |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 64 private final StripLayoutHelper mIncognitoHelper; | 62 private final StripLayoutHelper mIncognitoHelper; |
| 65 | 63 |
| 66 // UI State | 64 // UI State |
| 67 private float mWidth; // in dp units | 65 private float mWidth; // in dp units |
| 68 private final float mHeight; // in dp units | 66 private final float mHeight; // in dp units |
| 69 private int mOrientation; | 67 private int mOrientation; |
| 70 private final CompositorButton mModelSelectorButton; | 68 private final CompositorButton mModelSelectorButton; |
| 71 | 69 |
| 72 private TabStripSceneLayer mTabStripTreeProvider; | 70 private TabStripSceneLayer mTabStripTreeProvider; |
| 73 | 71 |
| 74 private TabStripEventHandler mTabStripEventHandler; | |
| 75 | |
| 76 private class TabStripEventHandler implements GestureHandler { | |
| 77 @Override | |
| 78 public void onDown(float x, float y, boolean fromMouse, int buttons) { | |
| 79 if (mModelSelectorButton.onDown(x, y)) return; | |
| 80 getActiveStripLayoutHelper().onDown(time(), x, y, fromMouse, buttons
); | |
| 81 } | |
| 82 | |
| 83 @Override | |
| 84 public void onUpOrCancel() { | |
| 85 if (mModelSelectorButton.onUpOrCancel() && mTabModelSelector != null
) { | |
| 86 getActiveStripLayoutHelper().finishAnimation(); | |
| 87 if (!mModelSelectorButton.isVisible()) return; | |
| 88 mTabModelSelector.selectModel(!mTabModelSelector.isIncognitoSele
cted()); | |
| 89 return; | |
| 90 } | |
| 91 getActiveStripLayoutHelper().onUpOrCancel(time()); | |
| 92 } | |
| 93 | |
| 94 @Override | |
| 95 public void drag(float x, float y, float dx, float dy, float tx, float t
y) { | |
| 96 mModelSelectorButton.drag(x, y); | |
| 97 getActiveStripLayoutHelper().drag(time(), x, y, dx, dy, tx, ty); | |
| 98 } | |
| 99 | |
| 100 @Override | |
| 101 public void click(float x, float y, boolean fromMouse, int buttons) { | |
| 102 long time = time(); | |
| 103 if (mModelSelectorButton.click(x, y)) { | |
| 104 mModelSelectorButton.handleClick(time); | |
| 105 return; | |
| 106 } | |
| 107 getActiveStripLayoutHelper().click(time(), x, y, fromMouse, buttons)
; | |
| 108 } | |
| 109 | |
| 110 @Override | |
| 111 public void fling(float x, float y, float velocityX, float velocityY) { | |
| 112 getActiveStripLayoutHelper().fling(time(), x, y, velocityX, velocity
Y); | |
| 113 } | |
| 114 | |
| 115 @Override | |
| 116 public void onLongPress(float x, float y) { | |
| 117 getActiveStripLayoutHelper().onLongPress(time(), x, y); | |
| 118 } | |
| 119 | |
| 120 @Override | |
| 121 public void onPinch(float x0, float y0, float x1, float y1, boolean firs
tEvent) { | |
| 122 // Not implemented. | |
| 123 } | |
| 124 | |
| 125 private long time() { | |
| 126 return LayoutManager.time(); | |
| 127 } | |
| 128 } | |
| 129 | |
| 130 /** | 72 /** |
| 131 * Creates an instance of the {@link StripLayoutHelperManager}. | 73 * Creates an instance of the {@link StripLayoutHelperManager}. |
| 132 * @param context The current Android {@link Context}. | 74 * @param context The current Android {@link Context}. |
| 133 * @param updateHost The parent {@link LayoutUpdateHost}. | 75 * @param updateHost The parent {@link LayoutUpdateHost}. |
| 134 * @param renderHost The {@link LayoutRenderHost}. | 76 * @param renderHost The {@link LayoutRenderHost}. |
| 135 */ | 77 */ |
| 136 public StripLayoutHelperManager( | 78 public StripLayoutHelperManager(Context context, LayoutUpdateHost updateHost
, |
| 137 Context context, LayoutUpdateHost updateHost, LayoutRenderHost rende
rHost) { | 79 LayoutRenderHost renderHost, AreaGestureEventFilter eventFilter) { |
| 138 mUpdateHost = updateHost; | 80 mUpdateHost = updateHost; |
| 139 mTabStripTreeProvider = new TabStripSceneLayer(context); | 81 mTabStripTreeProvider = new TabStripSceneLayer(context); |
| 140 mTabStripEventHandler = new TabStripEventHandler(); | 82 |
| 141 mEventFilter = new AreaGestureEventFilter(context, mTabStripEventHandler
, null); | 83 mEventFilter = eventFilter; |
| 142 | 84 |
| 143 mNormalHelper = new StripLayoutHelper(context, updateHost, renderHost, f
alse); | 85 mNormalHelper = new StripLayoutHelper(context, updateHost, renderHost, f
alse); |
| 144 mIncognitoHelper = new StripLayoutHelper(context, updateHost, renderHost
, true); | 86 mIncognitoHelper = new StripLayoutHelper(context, updateHost, renderHost
, true); |
| 145 | 87 |
| 146 CompositorOnClickHandler selectorClickHandler = new CompositorOnClickHan
dler() { | 88 CompositorOnClickHandler selectorClickHandler = new CompositorOnClickHan
dler() { |
| 147 @Override | 89 @Override |
| 148 public void onClick(long time) { | 90 public void onClick(long time) { |
| 149 handleModelSelectorButtonClick(); | 91 handleModelSelectorButtonClick(); |
| 150 } | 92 } |
| 151 }; | 93 }; |
| (...skipping 19 matching lines...) Expand all Loading... |
| 171 /** | 113 /** |
| 172 * Cleans up internal state. | 114 * Cleans up internal state. |
| 173 */ | 115 */ |
| 174 public void destroy() { | 116 public void destroy() { |
| 175 mTabStripTreeProvider.destroy(); | 117 mTabStripTreeProvider.destroy(); |
| 176 mTabStripTreeProvider = null; | 118 mTabStripTreeProvider = null; |
| 177 mIncognitoHelper.destroy(); | 119 mIncognitoHelper.destroy(); |
| 178 mNormalHelper.destroy(); | 120 mNormalHelper.destroy(); |
| 179 } | 121 } |
| 180 | 122 |
| 181 private void handleModelSelectorButtonClick() { | |
| 182 if (mTabModelSelector == null) return; | |
| 183 getActiveStripLayoutHelper().finishAnimation(); | |
| 184 if (!mModelSelectorButton.isVisible()) return; | |
| 185 mTabModelSelector.selectModel(!mTabModelSelector.isIncognitoSelected()); | |
| 186 } | |
| 187 | |
| 188 @VisibleForTesting | |
| 189 public void simulateClick(float x, float y, boolean fromMouse, int buttons)
{ | |
| 190 mTabStripEventHandler.click(x, y, fromMouse, buttons); | |
| 191 } | |
| 192 | |
| 193 @VisibleForTesting | |
| 194 public void simulateLongPress(float x, float y) { | |
| 195 mTabStripEventHandler.onLongPress(x, y); | |
| 196 } | |
| 197 | |
| 198 @Override | 123 @Override |
| 199 public SceneOverlayLayer getUpdatedSceneOverlayTree(RectF viewport, RectF vi
sibleViewport, | 124 public SceneOverlayLayer getUpdatedSceneOverlayTree(RectF viewport, RectF vi
sibleViewport, |
| 200 LayerTitleCache layerTitleCache, ResourceManager resourceManager, fl
oat yOffset) { | 125 LayerTitleCache layerTitleCache, ResourceManager resourceManager, fl
oat yOffset) { |
| 201 assert mTabStripTreeProvider != null; | 126 assert mTabStripTreeProvider != null; |
| 202 | 127 |
| 203 Tab selectedTab = mTabModelSelector.getCurrentModel().getTabAt( | 128 Tab selectedTab = mTabModelSelector.getCurrentModel().getTabAt( |
| 204 mTabModelSelector.getCurrentModel().index()); | 129 mTabModelSelector.getCurrentModel().index()); |
| 205 int selectedTabId = selectedTab == null ? TabModel.INVALID_TAB_INDEX : s
electedTab.getId(); | 130 int selectedTabId = selectedTab == null ? TabModel.INVALID_TAB_INDEX : s
electedTab.getId(); |
| 206 mTabStripTreeProvider.pushAndUpdateStrip(this, layerTitleCache, resource
Manager, | 131 mTabStripTreeProvider.pushAndUpdateStrip(this, layerTitleCache, resource
Manager, |
| 207 getActiveStripLayoutHelper().getStripLayoutTabsToRender(), yOffs
et, | 132 getActiveStripLayoutHelper().getStripLayoutTabsToRender(), yOffs
et, |
| (...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 429 public void tabLoadStarted(int id, boolean incognito) { | 354 public void tabLoadStarted(int id, boolean incognito) { |
| 430 getStripLayoutHelper(incognito).tabLoadStarted(id); | 355 getStripLayoutHelper(incognito).tabLoadStarted(id); |
| 431 } | 356 } |
| 432 | 357 |
| 433 @Override | 358 @Override |
| 434 public void tabLoadFinished(int id, boolean incognito) { | 359 public void tabLoadFinished(int id, boolean incognito) { |
| 435 getStripLayoutHelper(incognito).tabLoadFinished(id); | 360 getStripLayoutHelper(incognito).tabLoadFinished(id); |
| 436 } | 361 } |
| 437 | 362 |
| 438 /** | 363 /** |
| 364 * Called on touch drag event. |
| 365 * @param time The current time of the app in ms. |
| 366 * @param x The y coordinate of the end of the drag event. |
| 367 * @param y The y coordinate of the end of the drag event. |
| 368 * @param deltaX The number of pixels dragged in the x direction. |
| 369 * @param deltaY The number of pixels dragged in the y direction. |
| 370 * @param totalX The total delta x since the drag started. |
| 371 * @param totalY The total delta y since the drag started. |
| 372 */ |
| 373 public void drag( |
| 374 long time, float x, float y, float deltaX, float deltaY, float total
X, float totalY) { |
| 375 mModelSelectorButton.drag(x, y); |
| 376 getActiveStripLayoutHelper().drag(time, x, y, deltaX, deltaY, totalX, to
talY); |
| 377 } |
| 378 |
| 379 /** |
| 380 * Called on touch fling event. This is called before the onUpOrCancel event
. |
| 381 * @param time The current time of the app in ms. |
| 382 * @param x The y coordinate of the start of the fling event. |
| 383 * @param y The y coordinate of the start of the fling event. |
| 384 * @param velocityX The amount of velocity in the x direction. |
| 385 * @param velocityY The amount of velocity in the y direction. |
| 386 */ |
| 387 public void fling(long time, float x, float y, float velocityX, float veloci
tyY) { |
| 388 getActiveStripLayoutHelper().fling(time, x, y, velocityX, velocityY); |
| 389 } |
| 390 |
| 391 /** |
| 392 * Called on onDown event. |
| 393 * @param time The time stamp in millisecond of the event. |
| 394 * @param x The x position of the event. |
| 395 * @param y The y position of the event. |
| 396 * @param fromMouse Whether the event originates from a mouse. |
| 397 * @param buttons State of all buttons that are pressed. |
| 398 */ |
| 399 public void onDown(long time, float x, float y, boolean fromMouse, int butto
ns) { |
| 400 if (mModelSelectorButton.onDown(x, y)) return; |
| 401 getActiveStripLayoutHelper().onDown(time, x, y, fromMouse, buttons); |
| 402 } |
| 403 |
| 404 /** |
| 405 * Called on long press touch event. |
| 406 * @param time The current time of the app in ms. |
| 407 * @param x The x coordinate of the position of the press event. |
| 408 * @param y The y coordinate of the position of the press event. |
| 409 */ |
| 410 public void onLongPress(long time, float x, float y) { |
| 411 getActiveStripLayoutHelper().onLongPress(time, x, y); |
| 412 } |
| 413 |
| 414 private void handleModelSelectorButtonClick() { |
| 415 if (mTabModelSelector == null) return; |
| 416 getActiveStripLayoutHelper().finishAnimation(); |
| 417 if (!mModelSelectorButton.isVisible()) return; |
| 418 mTabModelSelector.selectModel(!mTabModelSelector.isIncognitoSelected()); |
| 419 } |
| 420 |
| 421 /** |
| 422 * Called on click. This is called before the onUpOrCancel event. |
| 423 * @param time The current time of the app in ms. |
| 424 * @param x The x coordinate of the position of the click. |
| 425 * @param y The y coordinate of the position of the click. |
| 426 * @param fromMouse Whether the event originates from a mouse. |
| 427 * @param buttons State of all buttons that were pressed when onDown was i
nvoked. |
| 428 */ |
| 429 public void click(long time, float x, float y, boolean fromMouse, int button
s) { |
| 430 if (mModelSelectorButton.click(x, y)) { |
| 431 mModelSelectorButton.handleClick(time); |
| 432 return; |
| 433 } |
| 434 getActiveStripLayoutHelper().click(time, x, y, fromMouse, buttons); |
| 435 } |
| 436 |
| 437 /** |
| 438 * Called on up or cancel touch events. This is called after the click and f
ling event if any. |
| 439 * @param time The current time of the app in ms. |
| 440 */ |
| 441 public void onUpOrCancel(long time) { |
| 442 if (mModelSelectorButton.onUpOrCancel() && mTabModelSelector != null) { |
| 443 getActiveStripLayoutHelper().finishAnimation(); |
| 444 if (!mModelSelectorButton.isVisible()) return; |
| 445 mTabModelSelector.selectModel(!mTabModelSelector.isIncognitoSelected
()); |
| 446 return; |
| 447 } |
| 448 getActiveStripLayoutHelper().onUpOrCancel(time); |
| 449 } |
| 450 |
| 451 /** |
| 439 * @param incognito Whether or not you want the incognito StripLayoutHelper | 452 * @param incognito Whether or not you want the incognito StripLayoutHelper |
| 440 * @return The requested StripLayoutHelper. | 453 * @return The requested StripLayoutHelper. |
| 441 */ | 454 */ |
| 442 @VisibleForTesting | 455 @VisibleForTesting |
| 443 public StripLayoutHelper getStripLayoutHelper(boolean incognito) { | 456 public StripLayoutHelper getStripLayoutHelper(boolean incognito) { |
| 444 return incognito ? mIncognitoHelper : mNormalHelper; | 457 return incognito ? mIncognitoHelper : mNormalHelper; |
| 445 } | 458 } |
| 446 | 459 |
| 447 /** | 460 /** |
| 448 * @return The currently visible strip layout helper. | 461 * @return The currently visible strip layout helper. |
| 449 */ | 462 */ |
| 450 @VisibleForTesting | 463 @VisibleForTesting |
| 451 public StripLayoutHelper getActiveStripLayoutHelper() { | 464 public StripLayoutHelper getActiveStripLayoutHelper() { |
| 452 return getStripLayoutHelper(mIsIncognito); | 465 return getStripLayoutHelper(mIsIncognito); |
| 453 } | 466 } |
| 454 | 467 |
| 455 private StripLayoutHelper getInactiveStripLayoutHelper() { | 468 private StripLayoutHelper getInactiveStripLayoutHelper() { |
| 456 return mIsIncognito ? mNormalHelper : mIncognitoHelper; | 469 return mIsIncognito ? mNormalHelper : mIncognitoHelper; |
| 457 } | 470 } |
| 458 } | 471 } |
| OLD | NEW |