blob: 991798f79446e7eab2f80f2214d980ce35067111 [file] [log] [blame]
Michael Kolb66706532010-12-12 19:50:22 -08001/*
2 * Copyright (C) 2010 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.browser;
18
19import com.android.browser.ScrollWebView.ScrollListener;
20
John Recke5c21d92011-03-11 15:09:46 -080021import android.animation.Animator;
22import android.animation.Animator.AnimatorListener;
23import android.animation.ObjectAnimator;
Michael Kolb66706532010-12-12 19:50:22 -080024import android.app.ActionBar;
25import android.app.Activity;
Michael Kolb24915222011-02-24 11:38:49 -080026import android.content.pm.PackageManager;
Michael Kolbeb95db42011-03-03 10:38:40 -080027import android.graphics.Bitmap;
Michael Kolbac35bdc2011-01-17 17:06:04 -080028import android.os.Bundle;
Michael Kolbba238702011-03-08 10:40:50 -080029import android.os.Handler;
Michael Kolb376b5412010-12-15 11:52:57 -080030import android.util.Log;
Michael Kolb66706532010-12-12 19:50:22 -080031import android.view.ActionMode;
Michael Kolb376b5412010-12-15 11:52:57 -080032import android.view.Gravity;
Michael Kolba4183062011-01-16 10:43:21 -080033import android.view.KeyEvent;
Michael Kolb1acef692011-03-08 14:12:06 -080034import android.view.Menu;
John Reckd73c5a22010-12-22 10:22:50 -080035import android.view.View;
36import android.webkit.WebChromeClient.CustomViewCallback;
Michael Kolb66706532010-12-12 19:50:22 -080037import android.webkit.WebView;
Michael Kolb2a56eca2011-02-25 09:45:06 -080038import android.widget.FrameLayout;
Michael Kolb66706532010-12-12 19:50:22 -080039
40import java.util.List;
41
42/**
43 * Ui for xlarge screen sizes
44 */
45public class XLargeUi extends BaseUi implements ScrollListener {
46
47 private static final String LOGTAG = "XLargeUi";
48
Michael Kolb376b5412010-12-15 11:52:57 -080049 private ActionBar mActionBar;
Michael Kolb66706532010-12-12 19:50:22 -080050 private TabBar mTabBar;
51
52 private TitleBarXLarge mTitleBar;
John Recke5c21d92011-03-11 15:09:46 -080053 private Animator mTitleBarAnimator;
John Reck6e8d2e92011-03-14 11:29:56 -070054 private boolean mSkipTitleBarAnimations;
Michael Kolb66706532010-12-12 19:50:22 -080055
Michael Kolb376b5412010-12-15 11:52:57 -080056 private boolean mUseQuickControls;
57 private PieControl mPieControl;
Michael Kolbba238702011-03-08 10:40:50 -080058 private Handler mHandler;
Michael Kolb376b5412010-12-15 11:52:57 -080059
Michael Kolb66706532010-12-12 19:50:22 -080060 /**
61 * @param browser
62 * @param controller
63 */
64 public XLargeUi(Activity browser, UiController controller) {
65 super(browser, controller);
Michael Kolbba238702011-03-08 10:40:50 -080066 mHandler = new Handler();
Michael Kolb66706532010-12-12 19:50:22 -080067 mTitleBar = new TitleBarXLarge(mActivity, mUiController, this);
68 mTitleBar.setProgress(100);
Michael Kolb66706532010-12-12 19:50:22 -080069 mTabBar = new TabBar(mActivity, mUiController, this);
Michael Kolb376b5412010-12-15 11:52:57 -080070 mActionBar = mActivity.getActionBar();
John Reckb3417f02011-01-14 11:01:05 -080071 setupActionBar();
72 setUseQuickControls(BrowserSettings.getInstance().useQuickControls());
73 }
74
75 private void setupActionBar() {
76 mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
Michael Kolb376b5412010-12-15 11:52:57 -080077 mActionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
78 mActionBar.setCustomView(mTabBar);
John Reckb3417f02011-01-14 11:01:05 -080079 }
80
81 @Override
Michael Kolbac35bdc2011-01-17 17:06:04 -080082 public void showComboView(boolean startWithHistory, Bundle extras) {
83 super.showComboView(startWithHistory, extras);
84 if (mUseQuickControls) {
85 mActionBar.show();
86 }
87 }
88
89 @Override
John Reckb3417f02011-01-14 11:01:05 -080090 public void hideComboView() {
Michael Kolbba238702011-03-08 10:40:50 -080091 if (isComboViewShowing()) {
92 super.hideComboView();
93 // ComboView changes the action bar, set it back up to what we want
94 setupActionBar();
95 checkTabCount();
96 }
Michael Kolb376b5412010-12-15 11:52:57 -080097 }
98
99 private void setUseQuickControls(boolean useQuickControls) {
100 mUseQuickControls = useQuickControls;
Michael Kolb7cdc4902011-02-03 17:54:40 -0800101 mTitleBar.setUseQuickControls(mUseQuickControls);
Michael Kolb376b5412010-12-15 11:52:57 -0800102 if (useQuickControls) {
103 checkTabCount();
104 mPieControl = new PieControl(mActivity, mUiController, this);
105 mPieControl.attachToContainer(mContentView);
Michael Kolb7cdc4902011-02-03 17:54:40 -0800106 Tab tab = getActiveTab();
107 if ((tab != null) && (tab.getWebView() != null)) {
108 tab.getWebView().setEmbeddedTitleBar(null);
Michael Kolb376b5412010-12-15 11:52:57 -0800109 }
Michael Kolb7cdc4902011-02-03 17:54:40 -0800110 setTitleGravity(Gravity.BOTTOM);
Michael Kolb376b5412010-12-15 11:52:57 -0800111 } else {
112 mActivity.getActionBar().show();
113 if (mPieControl != null) {
114 mPieControl.removeFromContainer(mContentView);
115 }
Michael Kolb7cdc4902011-02-03 17:54:40 -0800116 setTitleGravity(Gravity.TOP);
Michael Kolb376b5412010-12-15 11:52:57 -0800117 WebView web = mTabControl.getCurrentWebView();
Michael Kolb7cdc4902011-02-03 17:54:40 -0800118 if (web != null) {
Michael Kolb376b5412010-12-15 11:52:57 -0800119 web.setEmbeddedTitleBar(mTitleBar);
120 }
121 }
122 mTabBar.setUseQuickControls(mUseQuickControls);
Michael Kolb376b5412010-12-15 11:52:57 -0800123 }
124
125 private void checkTabCount() {
126 if (mUseQuickControls) {
Michael Kolbeb95db42011-03-03 10:38:40 -0800127 mHandler.post(new Runnable() {
128 public void run() {
129 mActionBar.hide();
130 }
131 });
Michael Kolb376b5412010-12-15 11:52:57 -0800132 }
Michael Kolb66706532010-12-12 19:50:22 -0800133 }
134
135 @Override
Narayan Kamath67b8c1b2011-03-09 20:47:52 +0000136 public void onResume() {
137 super.onResume();
138 if (!BrowserSettings.getInstance().useInstant()) {
139 mTitleBar.clearCompletions();
140 }
141 }
142
143 @Override
Michael Kolb66706532010-12-12 19:50:22 -0800144 public void onDestroy() {
Michael Kolb7cdc4902011-02-03 17:54:40 -0800145 hideTitleBar();
Michael Kolb66706532010-12-12 19:50:22 -0800146 }
147
148 // webview factory
149
150 @Override
151 public WebView createWebView(boolean privateBrowsing) {
152 // Create a new WebView
153 ScrollWebView w = new ScrollWebView(mActivity, null,
154 android.R.attr.webViewStyle, privateBrowsing);
155 initWebViewSettings(w);
156 w.setScrollListener(this);
Michael Kolb24915222011-02-24 11:38:49 -0800157 boolean supportsMultiTouch = mActivity.getPackageManager()
158 .hasSystemFeature(PackageManager.FEATURE_TOUCHSCREEN_MULTITOUCH);
159 w.getSettings().setDisplayZoomControls(!supportsMultiTouch);
Dave Burke20b6f1f2011-02-01 12:59:04 +0000160 w.setExpandedTileBounds(true); // smoother scrolling
Michael Kolb66706532010-12-12 19:50:22 -0800161 return w;
162 }
163
164 @Override
165 public WebView createSubWebView(boolean privateBrowsing) {
166 ScrollWebView web = (ScrollWebView) createWebView(privateBrowsing);
167 // no scroll listener for subview
168 web.setScrollListener(null);
169 return web;
170 }
171
172 @Override
Michael Kolb5ee018e2011-02-18 15:47:21 -0800173 public void onScroll(int visibleTitleHeight, boolean userInitiated) {
174 mTabBar.onScroll(visibleTitleHeight, userInitiated);
Michael Kolb66706532010-12-12 19:50:22 -0800175 }
176
177 void stopWebViewScrolling() {
178 ScrollWebView web = (ScrollWebView) mUiController.getCurrentWebView();
179 if (web != null) {
180 web.stopScroll();
181 }
182 }
183
184 // WebView callbacks
185
186 @Override
John Reck30c714c2010-12-16 17:30:34 -0800187 public void onProgressChanged(Tab tab) {
188 int progress = tab.getLoadProgress();
Michael Kolb66706532010-12-12 19:50:22 -0800189 mTabBar.onProgress(tab, progress);
190 if (tab.inForeground()) {
Michael Kolb7cdc4902011-02-03 17:54:40 -0800191 mTitleBar.setProgress(progress);
Michael Kolb66706532010-12-12 19:50:22 -0800192 if (progress == 100) {
Michael Kolb7cdc4902011-02-03 17:54:40 -0800193 if (!mTitleBar.isEditingUrl()) {
194 hideTitleBar();
Michael Kolbbd018d42010-12-15 15:43:39 -0800195 if (mUseQuickControls) {
Michael Kolb7cdc4902011-02-03 17:54:40 -0800196 mTitleBar.setShowProgressOnly(false);
197 setTitleGravity(Gravity.BOTTOM);
Michael Kolbbd018d42010-12-15 15:43:39 -0800198 }
Michael Kolb376b5412010-12-15 11:52:57 -0800199 }
Michael Kolb66706532010-12-12 19:50:22 -0800200 } else {
Michael Kolb7cdc4902011-02-03 17:54:40 -0800201 if (!isTitleBarShowing()) {
202 if (mUseQuickControls && !mTitleBar.isEditingUrl()) {
203 mTitleBar.setShowProgressOnly(true);
204 setTitleGravity(Gravity.TOP);
Michael Kolb376b5412010-12-15 11:52:57 -0800205 }
Michael Kolb7cdc4902011-02-03 17:54:40 -0800206 showTitleBar();
Michael Kolb376b5412010-12-15 11:52:57 -0800207 }
Michael Kolb66706532010-12-12 19:50:22 -0800208 }
209 }
210 }
211
212 @Override
213 public boolean needsRestoreAllTabs() {
214 return true;
215 }
216
217 @Override
218 public void addTab(Tab tab) {
219 mTabBar.onNewTab(tab);
Michael Kolb8814d732011-01-26 11:22:30 -0800220 }
221
222 protected void onAddTabCompleted(Tab tab) {
Michael Kolb376b5412010-12-15 11:52:57 -0800223 checkTabCount();
Michael Kolb66706532010-12-12 19:50:22 -0800224 }
225
226 @Override
Michael Kolb377ea312011-02-17 14:36:56 -0800227 public void setActiveTab(final Tab tab) {
John Reck6e8d2e92011-03-14 11:29:56 -0700228 cancelTitleBarAnimation(true);
229 mSkipTitleBarAnimations = true;
Michael Kolbeb95db42011-03-03 10:38:40 -0800230 if (mUseQuickControls) {
231 if (mActiveTab != null) {
232 captureTab(mActiveTab);
233 }
234 }
Michael Kolbf2628922011-03-09 17:15:28 -0800235 super.setActiveTab(tab, true);
236 setActiveTab(tab, true);
John Reck6e8d2e92011-03-14 11:29:56 -0700237 mSkipTitleBarAnimations = false;
Michael Kolb377ea312011-02-17 14:36:56 -0800238 }
239
240 @Override
241 void setActiveTab(Tab tab, boolean needsAttaching) {
Michael Kolb376b5412010-12-15 11:52:57 -0800242 ScrollWebView view = (ScrollWebView) tab.getWebView();
243 // TabControl.setCurrentTab has been called before this,
244 // so the tab is guaranteed to have a webview
245 if (view == null) {
246 Log.e(LOGTAG, "active tab with no webview detected");
247 return;
248 }
249 // Request focus on the top window.
250 if (mUseQuickControls) {
251 mPieControl.forceToTop(mContentView);
252 view.setScrollListener(null);
253 mTabBar.showTitleBarIndicator(false);
254 } else {
Michael Kolb377ea312011-02-17 14:36:56 -0800255 // check if title bar is already attached by animation
256 if (mTitleBar.getParent() == null) {
257 view.setEmbeddedTitleBar(mTitleBar);
258 }
Michael Kolb376b5412010-12-15 11:52:57 -0800259 view.setScrollListener(this);
260 }
Michael Kolb66706532010-12-12 19:50:22 -0800261 mTabBar.onSetActiveTab(tab);
Michael Kolb376b5412010-12-15 11:52:57 -0800262 if (tab.isInVoiceSearchMode()) {
263 showVoiceTitleBar(tab.getVoiceDisplayTitle());
264 } else {
265 revertVoiceTitleBar(tab);
266 }
Michael Kolb376b5412010-12-15 11:52:57 -0800267 updateLockIconToLatest(tab);
268 tab.getTopWindow().requestFocus();
Michael Kolb66706532010-12-12 19:50:22 -0800269 }
270
Michael Kolbeb95db42011-03-03 10:38:40 -0800271 public void captureTab(final Tab tab) {
272 Bitmap sshot = Controller.createScreenshot(tab,
273 (int) mActivity.getResources()
274 .getDimension(R.dimen.qc_thumb_width),
275 (int) mActivity.getResources()
276 .getDimension(R.dimen.qc_thumb_height));
277 tab.setScreenshot(sshot);
278 }
279
Michael Kolb66706532010-12-12 19:50:22 -0800280 @Override
281 public void updateTabs(List<Tab> tabs) {
282 mTabBar.updateTabs(tabs);
Michael Kolb376b5412010-12-15 11:52:57 -0800283 checkTabCount();
Michael Kolb66706532010-12-12 19:50:22 -0800284 }
285
286 @Override
287 public void removeTab(Tab tab) {
John Reck6e8d2e92011-03-14 11:29:56 -0700288 cancelTitleBarAnimation(true);
289 mSkipTitleBarAnimations = true;
Michael Kolb66706532010-12-12 19:50:22 -0800290 super.removeTab(tab);
291 mTabBar.onRemoveTab(tab);
John Reck6e8d2e92011-03-14 11:29:56 -0700292 mSkipTitleBarAnimations = false;
Michael Kolb8814d732011-01-26 11:22:30 -0800293 }
294
295 protected void onRemoveTabCompleted(Tab tab) {
Michael Kolb376b5412010-12-15 11:52:57 -0800296 checkTabCount();
Michael Kolb66706532010-12-12 19:50:22 -0800297 }
298
Michael Kolb376b5412010-12-15 11:52:57 -0800299 int getContentWidth() {
300 if (mContentView != null) {
301 return mContentView.getWidth();
Michael Kolb66706532010-12-12 19:50:22 -0800302 }
303 return 0;
304 }
305
Michael Kolbdc2ee1b2011-02-14 14:34:40 -0800306 @Override
307 public void editUrl(boolean clearInput) {
Michael Kolbd72ea3b2011-01-09 15:56:37 -0800308 if (mUiController.isInCustomActionMode()) {
309 mUiController.endActionMode();
310 }
Michael Kolb7cdc4902011-02-03 17:54:40 -0800311 showTitleBar();
Michael Kolbdc2ee1b2011-02-14 14:34:40 -0800312 mTitleBar.startEditingUrl(clearInput);
Michael Kolb66706532010-12-12 19:50:22 -0800313 }
314
Michael Kolb7cdc4902011-02-03 17:54:40 -0800315 void showTitleBarAndEdit() {
316 mTitleBar.setShowProgressOnly(false);
317 showTitleBar();
Michael Kolbdc2ee1b2011-02-14 14:34:40 -0800318 mTitleBar.startEditingUrl(false);
Michael Kolb7cdc4902011-02-03 17:54:40 -0800319 }
320
321 void stopEditingUrl() {
322 mTitleBar.stopEditingUrl();
323 }
324
325 @Override
326 protected void showTitleBar() {
327 if (canShowTitleBar()) {
328 if (mUseQuickControls) {
Michael Kolb7cdc4902011-02-03 17:54:40 -0800329 mContentView.addView(mTitleBar);
330 } else {
John Reck6e8d2e92011-03-14 11:29:56 -0700331 if (!mSkipTitleBarAnimations) {
332 cancelTitleBarAnimation(false);
333 int visibleHeight = getVisibleTitleHeight();
334 float startPos = (-mTitleBar.getEmbeddedHeight() + visibleHeight);
335 if (mTitleBar.getTranslationY() != 0) {
336 startPos = Math.max(startPos, mTitleBar.getTranslationY());
337 }
338 mTitleBarAnimator = ObjectAnimator.ofFloat(mTitleBar,
339 "translationY",
340 startPos, 0);
341 mTitleBarAnimator.start();
John Recke5c21d92011-03-11 15:09:46 -0800342 }
Michael Kolb7cdc4902011-02-03 17:54:40 -0800343 setTitleGravity(Gravity.TOP);
344 }
345 super.showTitleBar();
346 mTabBar.onShowTitleBar();
Michael Kolb376b5412010-12-15 11:52:57 -0800347 }
Michael Kolb376b5412010-12-15 11:52:57 -0800348 }
349
Michael Kolb66706532010-12-12 19:50:22 -0800350 @Override
Michael Kolb7cdc4902011-02-03 17:54:40 -0800351 protected void hideTitleBar() {
352 if (isTitleBarShowing()) {
Michael Kolb66706532010-12-12 19:50:22 -0800353 mTabBar.onHideTitleBar();
Michael Kolb7cdc4902011-02-03 17:54:40 -0800354 if (mUseQuickControls) {
355 mContentView.removeView(mTitleBar);
Michael Kolb2a56eca2011-02-25 09:45:06 -0800356 } else {
John Reck6e8d2e92011-03-14 11:29:56 -0700357 if (!mSkipTitleBarAnimations) {
358 cancelTitleBarAnimation(false);
359 int visibleHeight = getVisibleTitleHeight();
360 mTitleBarAnimator = ObjectAnimator.ofFloat(mTitleBar,
361 "translationY", mTitleBar.getTranslationY(),
362 (-mTitleBar.getEmbeddedHeight() + visibleHeight));
363 mTitleBarAnimator.addListener(mHideTileBarAnimatorListener);
364 mTitleBarAnimator.start();
365 } else {
366 setTitleGravity(Gravity.NO_GRAVITY);
John Recke5c21d92011-03-11 15:09:46 -0800367 }
Michael Kolb7cdc4902011-02-03 17:54:40 -0800368 }
369 super.hideTitleBar();
Michael Kolb66706532010-12-12 19:50:22 -0800370 }
371 }
372
John Reck6e8d2e92011-03-14 11:29:56 -0700373 private void cancelTitleBarAnimation(boolean reset) {
374 if (mTitleBarAnimator != null) {
375 mTitleBarAnimator.cancel();
376 mTitleBarAnimator = null;
377 }
378 if (reset) {
379 mTitleBar.setTranslationY(0);
380 }
381 }
382
John Recke5c21d92011-03-11 15:09:46 -0800383 private int getVisibleTitleHeight() {
384 WebView webview = mActiveTab != null ? mActiveTab.getWebView() : null;
385 return webview != null ? webview.getVisibleTitleHeight() : 0;
386 }
387
388 private AnimatorListener mHideTileBarAnimatorListener = new AnimatorListener() {
389
390 boolean mWasCanceled;
391 @Override
392 public void onAnimationStart(Animator animation) {
393 mWasCanceled = false;
394 }
395
396 @Override
397 public void onAnimationRepeat(Animator animation) {
398 }
399
400 @Override
401 public void onAnimationEnd(Animator animation) {
402 if (!mWasCanceled) {
403 mTitleBar.setTranslationY(0);
John Recke5c21d92011-03-11 15:09:46 -0800404 }
John Reck6e8d2e92011-03-14 11:29:56 -0700405 setTitleGravity(Gravity.NO_GRAVITY);
John Recke5c21d92011-03-11 15:09:46 -0800406 }
407
408 @Override
409 public void onAnimationCancel(Animator animation) {
410 mWasCanceled = true;
411 }
412 };
413
Michael Kolb5ee018e2011-02-18 15:47:21 -0800414 public boolean isEditingUrl() {
415 return mTitleBar.isEditingUrl();
416 }
417
Michael Kolb66706532010-12-12 19:50:22 -0800418 @Override
Michael Kolb7cdc4902011-02-03 17:54:40 -0800419 protected TitleBarBase getTitleBar() {
Michael Kolb66706532010-12-12 19:50:22 -0800420 return mTitleBar;
421 }
422
Michael Kolb2a56eca2011-02-25 09:45:06 -0800423 @Override
424 protected void setTitleGravity(int gravity) {
425 if (mUseQuickControls) {
426 FrameLayout.LayoutParams lp =
427 (FrameLayout.LayoutParams) mTitleBar.getLayoutParams();
428 lp.gravity = gravity;
429 mTitleBar.setLayoutParams(lp);
430 } else {
431 super.setTitleGravity(gravity);
432 }
433 }
434
Michael Kolb66706532010-12-12 19:50:22 -0800435 // action mode callbacks
436
437 @Override
438 public void onActionModeStarted(ActionMode mode) {
Michael Kolb7cdc4902011-02-03 17:54:40 -0800439 if (!mTitleBar.isEditingUrl()) {
Michael Kolb66706532010-12-12 19:50:22 -0800440 // hide the fake title bar when CAB is shown
Michael Kolb7cdc4902011-02-03 17:54:40 -0800441 hideTitleBar();
Michael Kolb66706532010-12-12 19:50:22 -0800442 }
443 }
444
445 @Override
Michael Kolb376b5412010-12-15 11:52:57 -0800446 public void onActionModeFinished(boolean inLoad) {
447 checkTabCount();
448 if (inLoad) {
449 // the titlebar was removed when the CAB was shown
450 // if the page is loading, show it again
Michael Kolb1544f3b2011-03-10 09:06:10 -0800451 if (mUseQuickControls) {
452 mTitleBar.setShowProgressOnly(true);
453 if (!isTitleBarShowing()) {
454 setTitleGravity(Gravity.TOP);
455 }
Michael Kolb376b5412010-12-15 11:52:57 -0800456 }
Michael Kolb7cdc4902011-02-03 17:54:40 -0800457 showTitleBar();
Michael Kolb376b5412010-12-15 11:52:57 -0800458 }
459 }
460
461 @Override
Michael Kolb5a72f182011-01-13 20:35:06 -0800462 protected void updateNavigationState(Tab tab) {
463 mTitleBar.updateNavigationState(tab);
Michael Kolb5a72f182011-01-13 20:35:06 -0800464 }
465
466 @Override
John Reck30c714c2010-12-16 17:30:34 -0800467 public void setUrlTitle(Tab tab) {
468 super.setUrlTitle(tab);
469 mTabBar.onUrlAndTitle(tab, tab.getUrl(), tab.getTitle());
Michael Kolb66706532010-12-12 19:50:22 -0800470 }
471
472 // Set the favicon in the title bar.
473 @Override
John Reck30c714c2010-12-16 17:30:34 -0800474 public void setFavicon(Tab tab) {
475 super.setFavicon(tab);
476 mTabBar.onFavicon(tab, tab.getFavicon());
Michael Kolb66706532010-12-12 19:50:22 -0800477 }
478
Michael Kolbcfa3af52010-12-14 10:36:11 -0800479 @Override
480 public void showVoiceTitleBar(String title) {
481 List<String> vsresults = null;
482 if (getActiveTab() != null) {
483 vsresults = getActiveTab().getVoiceSearchResults();
484 }
Michael Kolb3a2a1642011-02-15 10:52:07 -0800485 mTitleBar.setInVoiceMode(true, vsresults);
Michael Kolbcfa3af52010-12-14 10:36:11 -0800486 mTitleBar.setDisplayTitle(title);
Michael Kolbcfa3af52010-12-14 10:36:11 -0800487 }
488
489 @Override
490 public void revertVoiceTitleBar(Tab tab) {
491 mTitleBar.setInVoiceMode(false, null);
John Reck30c714c2010-12-16 17:30:34 -0800492 String url = tab.getUrl();
Michael Kolbcfa3af52010-12-14 10:36:11 -0800493 mTitleBar.setDisplayTitle(url);
Michael Kolbcfa3af52010-12-14 10:36:11 -0800494 }
495
John Reckd73c5a22010-12-22 10:22:50 -0800496 @Override
497 public void showCustomView(View view, CustomViewCallback callback) {
498 super.showCustomView(view, callback);
499 mActivity.getActionBar().hide();
500 }
Michael Kolbcfa3af52010-12-14 10:36:11 -0800501
John Reckd73c5a22010-12-22 10:22:50 -0800502 @Override
503 public void onHideCustomView() {
504 super.onHideCustomView();
505 if (mUseQuickControls) {
506 checkTabCount();
507 } else {
508 mActivity.getActionBar().show();
509 }
510 }
Michael Kolba4183062011-01-16 10:43:21 -0800511
512 @Override
513 public boolean dispatchKey(int code, KeyEvent event) {
Michael Kolbdfe99a12011-03-08 11:45:40 -0800514 if (mActiveTab != null) {
515 WebView web = mActiveTab.getWebView();
516 if (event.getAction() == KeyEvent.ACTION_DOWN) {
517 switch (code) {
518 case KeyEvent.KEYCODE_TAB:
519 case KeyEvent.KEYCODE_DPAD_UP:
520 case KeyEvent.KEYCODE_DPAD_LEFT:
521 if ((web != null) && web.hasFocus() && !mTitleBar.hasFocus()) {
522 editUrl(false);
523 return true;
524 }
525 }
526 boolean ctrl = event.hasModifiers(KeyEvent.META_CTRL_ON);
527 if (!ctrl && isTypingKey(event) && !mTitleBar.isEditingUrl()) {
528 editUrl(true);
529 return mContentView.dispatchKeyEvent(event);
530 }
Michael Kolbdc2ee1b2011-02-14 14:34:40 -0800531 }
Michael Kolba4183062011-01-16 10:43:21 -0800532 }
533 return false;
534 }
535
Michael Kolbdc2ee1b2011-02-14 14:34:40 -0800536 private boolean isTypingKey(KeyEvent evt) {
537 return evt.getUnicodeChar() > 0;
538 }
539
540 TabBar getTabBar() {
541 return mTabBar;
542 }
543
Narayan Kamath5119edd2011-02-23 15:49:17 +0000544 @Override
545 public void registerDropdownChangeListener(DropdownChangeListener d) {
546 mTitleBar.registerDropdownChangeListener(d);
547 }
Michael Kolb0860d992011-03-07 15:26:33 -0800548
Michael Kolb1acef692011-03-08 14:12:06 -0800549 @Override
550 public boolean onPrepareOptionsMenu(Menu menu) {
551 if (mUseQuickControls) {
552 mPieControl.onMenuOpened(menu);
553 return false;
554 } else {
555 return true;
556 }
557 }
558
Michael Kolb66706532010-12-12 19:50:22 -0800559}