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; |
14 import org.chromium.chrome.browser.compositor.layouts.LayoutRenderHost; | 15 import org.chromium.chrome.browser.compositor.layouts.LayoutRenderHost; |
15 import org.chromium.chrome.browser.compositor.layouts.LayoutUpdateHost; | 16 import org.chromium.chrome.browser.compositor.layouts.LayoutUpdateHost; |
16 import org.chromium.chrome.browser.compositor.layouts.components.CompositorButto
n; | 17 import org.chromium.chrome.browser.compositor.layouts.components.CompositorButto
n; |
17 import org.chromium.chrome.browser.compositor.layouts.components.CompositorButto
n.CompositorOnClickHandler; | 18 import org.chromium.chrome.browser.compositor.layouts.components.CompositorButto
n.CompositorOnClickHandler; |
18 import org.chromium.chrome.browser.compositor.layouts.components.VirtualView; | 19 import org.chromium.chrome.browser.compositor.layouts.components.VirtualView; |
19 import org.chromium.chrome.browser.compositor.layouts.eventfilter.AreaGestureEve
ntFilter; | 20 import org.chromium.chrome.browser.compositor.layouts.eventfilter.AreaGestureEve
ntFilter; |
20 import org.chromium.chrome.browser.compositor.layouts.eventfilter.EventFilter; | 21 import org.chromium.chrome.browser.compositor.layouts.eventfilter.EventFilter; |
| 22 import org.chromium.chrome.browser.compositor.layouts.eventfilter.GestureHandler
; |
21 import org.chromium.chrome.browser.compositor.overlays.SceneOverlay; | 23 import org.chromium.chrome.browser.compositor.overlays.SceneOverlay; |
22 import org.chromium.chrome.browser.compositor.scene_layer.SceneOverlayLayer; | 24 import org.chromium.chrome.browser.compositor.scene_layer.SceneOverlayLayer; |
23 import org.chromium.chrome.browser.compositor.scene_layer.TabStripSceneLayer; | 25 import org.chromium.chrome.browser.compositor.scene_layer.TabStripSceneLayer; |
24 import org.chromium.chrome.browser.tab.Tab; | 26 import org.chromium.chrome.browser.tab.Tab; |
25 import org.chromium.chrome.browser.tabmodel.TabCreatorManager; | 27 import org.chromium.chrome.browser.tabmodel.TabCreatorManager; |
26 import org.chromium.chrome.browser.tabmodel.TabModel; | 28 import org.chromium.chrome.browser.tabmodel.TabModel; |
27 import org.chromium.chrome.browser.tabmodel.TabModelSelector; | 29 import org.chromium.chrome.browser.tabmodel.TabModelSelector; |
28 import org.chromium.ui.base.LocalizationUtils; | 30 import org.chromium.ui.base.LocalizationUtils; |
29 import org.chromium.ui.resources.ResourceManager; | 31 import org.chromium.ui.resources.ResourceManager; |
30 | 32 |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
62 private final StripLayoutHelper mIncognitoHelper; | 64 private final StripLayoutHelper mIncognitoHelper; |
63 | 65 |
64 // UI State | 66 // UI State |
65 private float mWidth; // in dp units | 67 private float mWidth; // in dp units |
66 private final float mHeight; // in dp units | 68 private final float mHeight; // in dp units |
67 private int mOrientation; | 69 private int mOrientation; |
68 private final CompositorButton mModelSelectorButton; | 70 private final CompositorButton mModelSelectorButton; |
69 | 71 |
70 private TabStripSceneLayer mTabStripTreeProvider; | 72 private TabStripSceneLayer mTabStripTreeProvider; |
71 | 73 |
| 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 |
72 /** | 130 /** |
73 * Creates an instance of the {@link StripLayoutHelperManager}. | 131 * Creates an instance of the {@link StripLayoutHelperManager}. |
74 * @param context The current Android {@link Context}. | 132 * @param context The current Android {@link Context}. |
75 * @param updateHost The parent {@link LayoutUpdateHost}. | 133 * @param updateHost The parent {@link LayoutUpdateHost}. |
76 * @param renderHost The {@link LayoutRenderHost}. | 134 * @param renderHost The {@link LayoutRenderHost}. |
77 */ | 135 */ |
78 public StripLayoutHelperManager(Context context, LayoutUpdateHost updateHost
, | 136 public StripLayoutHelperManager( |
79 LayoutRenderHost renderHost, AreaGestureEventFilter eventFilter) { | 137 Context context, LayoutUpdateHost updateHost, LayoutRenderHost rende
rHost) { |
80 mUpdateHost = updateHost; | 138 mUpdateHost = updateHost; |
81 mTabStripTreeProvider = new TabStripSceneLayer(context); | 139 mTabStripTreeProvider = new TabStripSceneLayer(context); |
82 | 140 mTabStripEventHandler = new TabStripEventHandler(); |
83 mEventFilter = eventFilter; | 141 mEventFilter = |
| 142 new AreaGestureEventFilter(context, mTabStripEventHandler, null,
false, false); |
84 | 143 |
85 mNormalHelper = new StripLayoutHelper(context, updateHost, renderHost, f
alse); | 144 mNormalHelper = new StripLayoutHelper(context, updateHost, renderHost, f
alse); |
86 mIncognitoHelper = new StripLayoutHelper(context, updateHost, renderHost
, true); | 145 mIncognitoHelper = new StripLayoutHelper(context, updateHost, renderHost
, true); |
87 | 146 |
88 CompositorOnClickHandler selectorClickHandler = new CompositorOnClickHan
dler() { | 147 CompositorOnClickHandler selectorClickHandler = new CompositorOnClickHan
dler() { |
89 @Override | 148 @Override |
90 public void onClick(long time) { | 149 public void onClick(long time) { |
91 handleModelSelectorButtonClick(); | 150 handleModelSelectorButtonClick(); |
92 } | 151 } |
93 }; | 152 }; |
(...skipping 19 matching lines...) Expand all Loading... |
113 /** | 172 /** |
114 * Cleans up internal state. | 173 * Cleans up internal state. |
115 */ | 174 */ |
116 public void destroy() { | 175 public void destroy() { |
117 mTabStripTreeProvider.destroy(); | 176 mTabStripTreeProvider.destroy(); |
118 mTabStripTreeProvider = null; | 177 mTabStripTreeProvider = null; |
119 mIncognitoHelper.destroy(); | 178 mIncognitoHelper.destroy(); |
120 mNormalHelper.destroy(); | 179 mNormalHelper.destroy(); |
121 } | 180 } |
122 | 181 |
| 182 private void handleModelSelectorButtonClick() { |
| 183 if (mTabModelSelector == null) return; |
| 184 getActiveStripLayoutHelper().finishAnimation(); |
| 185 if (!mModelSelectorButton.isVisible()) return; |
| 186 mTabModelSelector.selectModel(!mTabModelSelector.isIncognitoSelected()); |
| 187 } |
| 188 |
| 189 @VisibleForTesting |
| 190 public void simulateClick(float x, float y, boolean fromMouse, int buttons)
{ |
| 191 mTabStripEventHandler.click(x, y, fromMouse, buttons); |
| 192 } |
| 193 |
| 194 @VisibleForTesting |
| 195 public void simulateLongPress(float x, float y) { |
| 196 mTabStripEventHandler.onLongPress(x, y); |
| 197 } |
| 198 |
123 @Override | 199 @Override |
124 public SceneOverlayLayer getUpdatedSceneOverlayTree(RectF viewport, RectF vi
sibleViewport, | 200 public SceneOverlayLayer getUpdatedSceneOverlayTree(RectF viewport, RectF vi
sibleViewport, |
125 LayerTitleCache layerTitleCache, ResourceManager resourceManager, fl
oat yOffset) { | 201 LayerTitleCache layerTitleCache, ResourceManager resourceManager, fl
oat yOffset) { |
126 assert mTabStripTreeProvider != null; | 202 assert mTabStripTreeProvider != null; |
127 | 203 |
128 Tab selectedTab = mTabModelSelector.getCurrentModel().getTabAt( | 204 Tab selectedTab = mTabModelSelector.getCurrentModel().getTabAt( |
129 mTabModelSelector.getCurrentModel().index()); | 205 mTabModelSelector.getCurrentModel().index()); |
130 int selectedTabId = selectedTab == null ? TabModel.INVALID_TAB_INDEX : s
electedTab.getId(); | 206 int selectedTabId = selectedTab == null ? TabModel.INVALID_TAB_INDEX : s
electedTab.getId(); |
131 mTabStripTreeProvider.pushAndUpdateStrip(this, layerTitleCache, resource
Manager, | 207 mTabStripTreeProvider.pushAndUpdateStrip(this, layerTitleCache, resource
Manager, |
132 getActiveStripLayoutHelper().getStripLayoutTabsToRender(), yOffs
et, | 208 getActiveStripLayoutHelper().getStripLayoutTabsToRender(), yOffs
et, |
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
354 public void tabLoadStarted(int id, boolean incognito) { | 430 public void tabLoadStarted(int id, boolean incognito) { |
355 getStripLayoutHelper(incognito).tabLoadStarted(id); | 431 getStripLayoutHelper(incognito).tabLoadStarted(id); |
356 } | 432 } |
357 | 433 |
358 @Override | 434 @Override |
359 public void tabLoadFinished(int id, boolean incognito) { | 435 public void tabLoadFinished(int id, boolean incognito) { |
360 getStripLayoutHelper(incognito).tabLoadFinished(id); | 436 getStripLayoutHelper(incognito).tabLoadFinished(id); |
361 } | 437 } |
362 | 438 |
363 /** | 439 /** |
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 /** | |
452 * @param incognito Whether or not you want the incognito StripLayoutHelper | 440 * @param incognito Whether or not you want the incognito StripLayoutHelper |
453 * @return The requested StripLayoutHelper. | 441 * @return The requested StripLayoutHelper. |
454 */ | 442 */ |
455 @VisibleForTesting | 443 @VisibleForTesting |
456 public StripLayoutHelper getStripLayoutHelper(boolean incognito) { | 444 public StripLayoutHelper getStripLayoutHelper(boolean incognito) { |
457 return incognito ? mIncognitoHelper : mNormalHelper; | 445 return incognito ? mIncognitoHelper : mNormalHelper; |
458 } | 446 } |
459 | 447 |
460 /** | 448 /** |
461 * @return The currently visible strip layout helper. | 449 * @return The currently visible strip layout helper. |
462 */ | 450 */ |
463 @VisibleForTesting | 451 @VisibleForTesting |
464 public StripLayoutHelper getActiveStripLayoutHelper() { | 452 public StripLayoutHelper getActiveStripLayoutHelper() { |
465 return getStripLayoutHelper(mIsIncognito); | 453 return getStripLayoutHelper(mIsIncognito); |
466 } | 454 } |
467 | 455 |
468 private StripLayoutHelper getInactiveStripLayoutHelper() { | 456 private StripLayoutHelper getInactiveStripLayoutHelper() { |
469 return mIsIncognito ? mNormalHelper : mIncognitoHelper; | 457 return mIsIncognito ? mNormalHelper : mIncognitoHelper; |
470 } | 458 } |
471 } | 459 } |
OLD | NEW |