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

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

Issue 2774443002: chrome/android: Push EventFilters into the Layout implementations. (Closed)
Patch Set: fix for re-landing Created 3 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.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
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
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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698