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

Side by Side Diff: chrome/android/java_staging/src/org/chromium/chrome/browser/compositor/layouts/LayoutManagerChromeTablet.java

Issue 1141283003: Upstream oodles of Chrome for Android code into Chromium. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: final patch? Created 5 years, 7 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
(Empty)
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
3 // found in the LICENSE file.
4
5 package org.chromium.chrome.browser.compositor.layouts;
6
7 import android.content.Context;
8 import android.text.TextUtils;
9 import android.view.ViewGroup;
10
11 import com.google.android.apps.chrome.R;
12
13 import org.chromium.chrome.browser.Tab;
14 import org.chromium.chrome.browser.compositor.layouts.content.TabContentManager;
15 import org.chromium.chrome.browser.compositor.layouts.eventfilter.AreaGestureEve ntFilter;
16 import org.chromium.chrome.browser.compositor.layouts.eventfilter.EdgeSwipeEvent Filter.ScrollDirection;
17 import org.chromium.chrome.browser.compositor.layouts.eventfilter.GestureHandler ;
18 import org.chromium.chrome.browser.compositor.overlays.strip.StripLayoutHelperMa nager;
19 import org.chromium.chrome.browser.contextualsearch.ContextualSearchManagementDe legate;
20 import org.chromium.chrome.browser.tabmodel.TabCreatorManager;
21 import org.chromium.chrome.browser.tabmodel.TabModel;
22 import org.chromium.chrome.browser.tabmodel.TabModel.TabLaunchType;
23 import org.chromium.chrome.browser.tabmodel.TabModelSelector;
24 import org.chromium.chrome.browser.tabmodel.TabModelSelectorTabObserver;
25 import org.chromium.ui.resources.dynamics.DynamicResourceLoader;
26
27 import java.util.List;
28
29 /**
30 * {@link LayoutManagerChromeTablet} is the specialization of {@link LayoutManag erChrome} for
31 * the tablet.
32 */
33 public class LayoutManagerChromeTablet extends LayoutManagerChrome {
34 // Event Filters
35 private final AreaGestureEventFilter mTabStripFilter;
36
37 // Internal State
38 private final String mDefaultTitle;
39
40 private StripLayoutHelperManager mTabStripLayoutHelperManager;
41 private TabModelSelectorTabObserver mTabObserver;
42
43 /**
44 * Creates an instance of a {@link LayoutManagerChromePhone}.
45 * @param host A {@link LayoutManagerHost} instance.
46 * @param overviewLayoutFactoryDelegate A {@link OverviewLayoutFactoryDelega te} instance.
47 */
48 public LayoutManagerChromeTablet(
49 LayoutManagerHost host, OverviewLayoutFactoryDelegate overviewLayout FactoryDelegate) {
50 super(host, overviewLayoutFactoryDelegate);
51 Context context = host.getContext();
52
53 // Build Event Filters
54 mTabStripFilter = new AreaGestureEventFilter(
55 context, this, new TabStripEventHandler(), null, false, false);
56
57 mTabStripLayoutHelperManager = new StripLayoutHelperManager(
58 context, this, mHost.getLayoutRenderHost(), mTabStripFilter);
59
60 // Set up state
61 mDefaultTitle = context.getString(R.string.tab_loading_default_title);
62
63 addGlobalSceneOverlay(mTabStripLayoutHelperManager);
64
65 setNextLayout(null);
66 }
67
68 @Override
69 public void destroy() {
70 super.destroy();
71
72 if (mTabStripLayoutHelperManager != null) {
73 mTabStripLayoutHelperManager.destroy();
74 mTabStripLayoutHelperManager = null;
75 }
76
77 if (mTabObserver != null) {
78 mTabObserver.destroy();
79 mTabObserver = null;
80 }
81 }
82
83 @Override
84 protected ToolbarSwipeHandler createToolbarSwipeHandler(LayoutProvider provi der) {
85 return new TabletToolbarSwipeHandler(provider);
86 }
87
88 @Override
89 public void tabSelected(int tabId, int prevId, boolean incognito) {
90 if (getActiveLayout() == mStaticLayout || getActiveLayout() == mOverview ListLayout) {
91 super.tabSelected(tabId, prevId, incognito);
92 } else {
93 startShowing(mStaticLayout, false);
94 // TODO(dtrainor, jscholler): This is hacky because we're relying on it to set the
95 // internal tab to show and not start hiding until we're done callin g finalizeShowing().
96 // This prevents a flicker because we properly build and set the int ernal
97 // {@link LayoutTab} before actually showing the {@link TabView}.
98 if (getActiveLayout() != null) {
99 getActiveLayout().onTabSelected(time(), tabId, prevId, incognito );
100 }
101 if (getActiveLayout() != null) getActiveLayout().onTabSelecting(time (), tabId);
102 }
103 }
104
105 @Override
106 protected void tabCreated(int id, int sourceId, TabLaunchType launchType, bo olean incognito,
107 boolean willBeSelected, float originX, float originY) {
108 if (getFullscreenManager() != null) getFullscreenManager().showControlsT ransient();
109 super.tabCreated(id, sourceId, launchType, incognito, willBeSelected, or iginX, originY);
110 }
111
112 @Override
113 protected void tabClosed(int id, int nextId, boolean incognito) {
114 super.tabClosed(id, nextId, incognito);
115 }
116
117 @Override
118 protected void tabClosureCommitted(int id, boolean incognito) {
119 super.tabClosureCommitted(id, incognito);
120 if (mTitleCache != null) mTitleCache.remove(id);
121 }
122
123 @Override
124 public void init(TabModelSelector selector, TabCreatorManager creator,
125 TabContentManager content, ViewGroup androidContentContainer,
126 ContextualSearchManagementDelegate contextualSearchDelegate,
127 DynamicResourceLoader dynamicResourceLoader) {
128 if (mTabStripLayoutHelperManager != null) {
129 mTabStripLayoutHelperManager.setTabModelSelector(selector, creator, content);
130 }
131
132 super.init(selector, creator, content, androidContentContainer, contextu alSearchDelegate,
133 dynamicResourceLoader);
134
135 mTabObserver = new TabModelSelectorTabObserver(selector) {
136 @Override
137 public void onFaviconUpdated(Tab tab) {
138 updateTitle(tab);
139 }
140
141 @Override
142 public void onTitleUpdated(Tab tab) {
143 updateTitle(tab);
144 }
145 };
146
147 // Make sure any tabs already restored get loaded into the title cache.
148 List<TabModel> models = selector.getModels();
149 for (int i = 0; i < models.size(); i++) {
150 TabModel model = models.get(i);
151 for (int j = 0; j < model.getCount(); j++) {
152 Tab tab = model.getTabAt(j);
153 if (tab != null && mTitleCache != null) {
154 mTitleCache.put(tab.getId(), getTitleBitmap(tab), getFavicon Bitmap(tab),
155 tab.isIncognito(), tab.isTitleDirectionRtl());
156 }
157 }
158 }
159 }
160
161 @Override
162 protected LayoutManagerTabModelObserver createTabModelObserver() {
163 return new LayoutManagerTabModelObserver() {
164 @Override
165 public void didAddTab(Tab tab, TabLaunchType launchType) {
166 super.didAddTab(tab, launchType);
167 updateTitle(getTabById(tab.getId()));
168 }
169 };
170 }
171
172 @Override
173 protected String getTitleForTab(Tab tab) {
174 String title = super.getTitleForTab(tab);
175 if (TextUtils.isEmpty(title)) title = mDefaultTitle;
176 return title;
177 }
178
179 @Override
180 public StripLayoutHelperManager getStripLayoutHelperManager() {
181 return mTabStripLayoutHelperManager;
182 }
183
184 private void updateTitle(Tab tab) {
185 if (tab != null && mTitleCache != null) {
186 mTitleCache.put(tab.getId(), getTitleBitmap(tab), getFaviconBitmap(t ab),
187 tab.isIncognito(), tab.isTitleDirectionRtl());
188
189 getActiveLayout().tabTitleChanged(tab.getId(), getTitleForTab(tab));
190 }
191 }
192
193 private class TabletToolbarSwipeHandler extends ToolbarSwipeHandler {
194 public TabletToolbarSwipeHandler(LayoutProvider provider) {
195 super(provider);
196 }
197
198 @Override
199 public boolean isSwipeEnabled(ScrollDirection direction) {
200 if ((direction == ScrollDirection.LEFT || direction == ScrollDirecti on.RIGHT)
201 && (getTabModelSelector() == null
202 || getTabModelSelector().getCurrentModel().getCou nt() <= 1)) {
203 return false;
204 }
205
206 return super.isSwipeEnabled(direction);
207 }
208 }
209
210 private class TabStripEventHandler implements GestureHandler {
211 @Override
212 public void onDown(float x, float y) {
213 mTabStripLayoutHelperManager.onDown(time(), x, y);
214 }
215
216 @Override
217 public void onUpOrCancel() {
218 mTabStripLayoutHelperManager.onUpOrCancel(time());
219 }
220
221 @Override
222 public void drag(float x, float y, float dx, float dy, float tx, float t y) {
223 mTabStripLayoutHelperManager.drag(time(), x, y, dx, dy, tx, ty);
224 }
225
226 @Override
227 public void click(float x, float y) {
228 mTabStripLayoutHelperManager.click(time(), x, y);
229 }
230
231 @Override
232 public void fling(float x, float y, float velocityX, float velocityY) {
233 mTabStripLayoutHelperManager.fling(time(), x, y, velocityX, velocity Y);
234 }
235
236 @Override
237 public void onLongPress(float x, float y) {
238 mTabStripLayoutHelperManager.onLongPress(time(), x, y);
239 }
240
241 @Override
242 public void onPinch(float x0, float y0, float x1, float y1, boolean firs tEvent) {
243 // Not implemented.
244 }
245 }
246 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698