• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
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 
17 package com.android.browser;
18 
19 import android.app.ActionBar;
20 import android.app.Activity;
21 import android.content.res.Resources;
22 import android.graphics.Bitmap;
23 import android.graphics.drawable.BitmapDrawable;
24 import android.graphics.drawable.Drawable;
25 import android.graphics.drawable.LayerDrawable;
26 import android.graphics.drawable.PaintDrawable;
27 import android.os.Bundle;
28 import android.os.Handler;
29 import android.util.Log;
30 import android.view.ActionMode;
31 import android.view.KeyEvent;
32 import android.view.Menu;
33 import android.view.MenuItem;
34 import android.webkit.WebView;
35 
36 import java.util.List;
37 
38 /**
39  * Ui for xlarge screen sizes
40  */
41 public class XLargeUi extends BaseUi {
42 
43     private static final String LOGTAG = "XLargeUi";
44 
45     private PaintDrawable mFaviconBackground;
46 
47     private ActionBar mActionBar;
48     private TabBar mTabBar;
49 
50     private NavigationBarTablet mNavBar;
51 
52     private Handler mHandler;
53 
54     /**
55      * @param browser
56      * @param controller
57      */
XLargeUi(Activity browser, UiController controller)58     public XLargeUi(Activity browser, UiController controller) {
59         super(browser, controller);
60         mHandler = new Handler();
61         mNavBar = (NavigationBarTablet) mTitleBar.getNavigationBar();
62         mTabBar = new TabBar(mActivity, mUiController, this);
63         mActionBar = mActivity.getActionBar();
64         setupActionBar();
65         setUseQuickControls(BrowserSettings.getInstance().useQuickControls());
66     }
67 
setupActionBar()68     private void setupActionBar() {
69         mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
70         mActionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
71         mActionBar.setCustomView(mTabBar);
72     }
73 
showComboView(ComboViews startWith, Bundle extras)74     public void showComboView(ComboViews startWith, Bundle extras) {
75         super.showComboView(startWith, extras);
76         if (mUseQuickControls) {
77             mActionBar.show();
78         }
79     }
80 
81     @Override
setUseQuickControls(boolean useQuickControls)82     public void setUseQuickControls(boolean useQuickControls) {
83         super.setUseQuickControls(useQuickControls);
84         checkHideActionBar();
85         if (!useQuickControls) {
86             mActionBar.show();
87         }
88         mTabBar.setUseQuickControls(mUseQuickControls);
89         // We need to update the tabs with this change
90         for (Tab t : mTabControl.getTabs()) {
91             t.updateShouldCaptureThumbnails();
92         }
93     }
94 
checkHideActionBar()95     private void checkHideActionBar() {
96         if (mUseQuickControls) {
97             mHandler.post(new Runnable() {
98                 public void run() {
99                     mActionBar.hide();
100                 }
101             });
102         }
103     }
104 
105     @Override
onResume()106     public void onResume() {
107         super.onResume();
108         mNavBar.clearCompletions();
109         checkHideActionBar();
110     }
111 
112     @Override
onDestroy()113     public void onDestroy() {
114         hideTitleBar();
115     }
116 
stopWebViewScrolling()117     void stopWebViewScrolling() {
118         BrowserWebView web = (BrowserWebView) mUiController.getCurrentWebView();
119     }
120 
121     @Override
onPrepareOptionsMenu(Menu menu)122     public boolean onPrepareOptionsMenu(Menu menu) {
123         MenuItem bm = menu.findItem(R.id.bookmarks_menu_id);
124         if (bm != null) {
125             bm.setVisible(false);
126         }
127         return true;
128     }
129 
130 
131     // WebView callbacks
132 
133     @Override
addTab(Tab tab)134     public void addTab(Tab tab) {
135         mTabBar.onNewTab(tab);
136     }
137 
onAddTabCompleted(Tab tab)138     protected void onAddTabCompleted(Tab tab) {
139         checkHideActionBar();
140     }
141 
142     @Override
setActiveTab(final Tab tab)143     public void setActiveTab(final Tab tab) {
144         mTitleBar.cancelTitleBarAnimation(true);
145         mTitleBar.setSkipTitleBarAnimations(true);
146         super.setActiveTab(tab);
147         BrowserWebView view = (BrowserWebView) tab.getWebView();
148         // TabControl.setCurrentTab has been called before this,
149         // so the tab is guaranteed to have a webview
150         if (view == null) {
151             Log.e(LOGTAG, "active tab with no webview detected");
152             return;
153         }
154         mTabBar.onSetActiveTab(tab);
155         updateLockIconToLatest(tab);
156         mTitleBar.setSkipTitleBarAnimations(false);
157     }
158 
159     @Override
updateTabs(List<Tab> tabs)160     public void updateTabs(List<Tab> tabs) {
161         mTabBar.updateTabs(tabs);
162         checkHideActionBar();
163     }
164 
165     @Override
removeTab(Tab tab)166     public void removeTab(Tab tab) {
167         mTitleBar.cancelTitleBarAnimation(true);
168         mTitleBar.setSkipTitleBarAnimations(true);
169         super.removeTab(tab);
170         mTabBar.onRemoveTab(tab);
171         mTitleBar.setSkipTitleBarAnimations(false);
172     }
173 
onRemoveTabCompleted(Tab tab)174     protected void onRemoveTabCompleted(Tab tab) {
175         checkHideActionBar();
176     }
177 
getContentWidth()178     int getContentWidth() {
179         if (mContentView != null) {
180             return mContentView.getWidth();
181         }
182         return 0;
183     }
184 
185     @Override
editUrl(boolean clearInput, boolean forceIME)186     public void editUrl(boolean clearInput, boolean forceIME) {
187         if (mUseQuickControls) {
188             mTitleBar.setShowProgressOnly(false);
189         }
190         super.editUrl(clearInput, forceIME);
191     }
192 
193     // action mode callbacks
194 
195     @Override
onActionModeStarted(ActionMode mode)196     public void onActionModeStarted(ActionMode mode) {
197         if (!mTitleBar.isEditingUrl()) {
198             // hide the title bar when CAB is shown
199             hideTitleBar();
200         }
201     }
202 
203     @Override
onActionModeFinished(boolean inLoad)204     public void onActionModeFinished(boolean inLoad) {
205         checkHideActionBar();
206         if (inLoad) {
207             // the titlebar was removed when the CAB was shown
208             // if the page is loading, show it again
209             if (mUseQuickControls) {
210                 mTitleBar.setShowProgressOnly(true);
211             }
212             showTitleBar();
213         }
214     }
215 
216     @Override
updateNavigationState(Tab tab)217     protected void updateNavigationState(Tab tab) {
218         mNavBar.updateNavigationState(tab);
219     }
220 
221     @Override
setUrlTitle(Tab tab)222     public void setUrlTitle(Tab tab) {
223         super.setUrlTitle(tab);
224         mTabBar.onUrlAndTitle(tab, tab.getUrl(), tab.getTitle());
225     }
226 
227     // Set the favicon in the title bar.
228     @Override
setFavicon(Tab tab)229     public void setFavicon(Tab tab) {
230         super.setFavicon(tab);
231         mTabBar.onFavicon(tab, tab.getFavicon());
232     }
233 
234     @Override
onHideCustomView()235     public void onHideCustomView() {
236         super.onHideCustomView();
237         checkHideActionBar();
238     }
239 
240     @Override
dispatchKey(int code, KeyEvent event)241     public boolean dispatchKey(int code, KeyEvent event) {
242         if (mActiveTab != null) {
243             WebView web = mActiveTab.getWebView();
244             if (event.getAction() == KeyEvent.ACTION_DOWN) {
245                 switch (code) {
246                     case KeyEvent.KEYCODE_TAB:
247                     case KeyEvent.KEYCODE_DPAD_UP:
248                     case KeyEvent.KEYCODE_DPAD_LEFT:
249                         if ((web != null) && web.hasFocus() && !mTitleBar.hasFocus()) {
250                             editUrl(false, false);
251                             return true;
252                         }
253                 }
254                 boolean ctrl = event.hasModifiers(KeyEvent.META_CTRL_ON);
255                 if (!ctrl && isTypingKey(event) && !mTitleBar.isEditingUrl()) {
256                     editUrl(true, false);
257                     return mContentView.dispatchKeyEvent(event);
258                 }
259             }
260         }
261         return false;
262     }
263 
isTypingKey(KeyEvent evt)264     private boolean isTypingKey(KeyEvent evt) {
265         return evt.getUnicodeChar() > 0;
266     }
267 
getTabBar()268     TabBar getTabBar() {
269         return mTabBar;
270     }
271 
272     @Override
shouldCaptureThumbnails()273     public boolean shouldCaptureThumbnails() {
274         return mUseQuickControls;
275     }
276 
getFaviconBackground()277     private Drawable getFaviconBackground() {
278         if (mFaviconBackground == null) {
279             mFaviconBackground = new PaintDrawable();
280             Resources res = mActivity.getResources();
281             mFaviconBackground.getPaint().setColor(
282                     res.getColor(R.color.tabFaviconBackground));
283             mFaviconBackground.setCornerRadius(
284                     res.getDimension(R.dimen.tab_favicon_corner_radius));
285         }
286         return mFaviconBackground;
287     }
288 
289     @Override
getFaviconDrawable(Bitmap icon)290     public Drawable getFaviconDrawable(Bitmap icon) {
291         Drawable[] array = new Drawable[2];
292         array[0] = getFaviconBackground();
293         if (icon == null) {
294             array[1] = mGenericFavicon;
295         } else {
296             array[1] = new BitmapDrawable(mActivity.getResources(), icon);
297         }
298         LayerDrawable d = new LayerDrawable(array);
299         d.setLayerInset(1, 2, 2, 2, 2);
300         return d;
301     }
302 
303 }
304