Split UI based on screen size

      Different UI implementation for normal and xlarge screens

Change-Id: I8217ffd16e1f87b248a22426b17fa34b3a4f89df
diff --git a/src/com/android/browser/XLargeUi.java b/src/com/android/browser/XLargeUi.java
new file mode 100644
index 0000000..30180aa
--- /dev/null
+++ b/src/com/android/browser/XLargeUi.java
@@ -0,0 +1,221 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.browser;
+
+import com.android.browser.ScrollWebView.ScrollListener;
+
+import android.app.ActionBar;
+import android.app.Activity;
+import android.graphics.Bitmap;
+import android.view.ActionMode;
+import android.webkit.WebView;
+
+import java.util.List;
+
+/**
+ * Ui for xlarge screen sizes
+ */
+public class XLargeUi extends BaseUi implements ScrollListener {
+
+    private static final String LOGTAG = "XLargeUi";
+
+    private TabBar mTabBar;
+
+    private TitleBarXLarge mTitleBar;
+    private TitleBarXLarge mFakeTitleBar;
+
+    /**
+     * @param browser
+     * @param controller
+     */
+    public XLargeUi(Activity browser, UiController controller) {
+        super(browser, controller);
+        mTitleBar = new TitleBarXLarge(mActivity, mUiController, this);
+        mTitleBar.setProgress(100);
+        mFakeTitleBar = new TitleBarXLarge(mActivity, mUiController, this);
+        ActionBar actionBar = mActivity.getActionBar();
+        mTabBar = new TabBar(mActivity, mUiController, this);
+        actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
+        actionBar.setCustomView(mTabBar);
+    }
+
+    @Override
+    public void onDestroy() {
+        hideFakeTitleBar();
+    }
+
+    // webview factory
+
+    @Override
+    public WebView createWebView(boolean privateBrowsing) {
+        // Create a new WebView
+        ScrollWebView w = new ScrollWebView(mActivity, null,
+                android.R.attr.webViewStyle, privateBrowsing);
+        initWebViewSettings(w);
+        w.setScrollListener(this);
+        w.getSettings().setDisplayZoomControls(false);
+        return w;
+    }
+
+    @Override
+    public WebView createSubWebView(boolean privateBrowsing) {
+        ScrollWebView web = (ScrollWebView) createWebView(privateBrowsing);
+        // no scroll listener for subview
+        web.setScrollListener(null);
+        return web;
+    }
+
+    @Override
+    public void onScroll(int visibleTitleHeight) {
+        mTabBar.onScroll(visibleTitleHeight);
+    }
+
+    void stopWebViewScrolling() {
+        ScrollWebView web = (ScrollWebView) mUiController.getCurrentWebView();
+        if (web != null) {
+            web.stopScroll();
+        }
+    }
+
+    // WebView callbacks
+
+    @Override
+    public void onPageStarted(Tab tab, String url, Bitmap favicon) {
+        super.onPageStarted(tab, url, favicon);
+        mTabBar.onPageStarted(tab, url, favicon);
+    }
+
+    @Override
+    public void bookmarkedStatusHasChanged(Tab tab) {
+        if (tab.inForeground()) {
+            boolean isBookmark = tab.isBookmarkedSite();
+            mTitleBar.setCurrentUrlIsBookmark(isBookmark);
+            mFakeTitleBar.setCurrentUrlIsBookmark(isBookmark);
+        }
+    }
+
+    @Override
+    public void onPageFinished(Tab tab, String url) {
+        mTabBar.onPageFinished(tab);
+        super.onPageFinished(tab, url);
+    }
+
+    @Override
+    public void onProgressChanged(Tab tab, int progress) {
+        mTabBar.onProgress(tab, progress);
+        if (tab.inForeground()) {
+            mFakeTitleBar.setProgress(progress);
+            if (progress == 100) {
+                hideFakeTitleBar();
+            } else {
+                showFakeTitleBar();
+            }
+        }
+    }
+
+    @Override
+    public boolean needsRestoreAllTabs() {
+        return true;
+    }
+
+    @Override
+    public void addTab(Tab tab) {
+        mTabBar.onNewTab(tab);
+    }
+
+    @Override
+    public void setActiveTab(Tab tab) {
+        super.setActiveTab(tab);
+        mTabBar.onSetActiveTab(tab);
+    }
+
+    @Override
+    public void updateTabs(List<Tab> tabs) {
+        mTabBar.updateTabs(tabs);
+    }
+
+    @Override
+    public void removeTab(Tab tab) {
+        super.removeTab(tab);
+        mTabBar.onRemoveTab(tab);
+    }
+
+    int getTitleBarWidth() {
+        if (mTitleBar != null) {
+            return mTitleBar.getWidth();
+        }
+        return 0;
+    }
+
+    void editUrl(boolean clearInput) {
+        showFakeTitleBar();
+        mFakeTitleBar.onEditUrl(clearInput);
+    }
+
+    @Override
+    protected void attachFakeTitleBar(WebView mainView) {
+        mContentView.addView(mFakeTitleBar);
+        mTabBar.onShowTitleBar();
+    }
+
+    @Override
+    protected void hideFakeTitleBar() {
+        if (isFakeTitleBarShowing()) {
+            mContentView.removeView(mFakeTitleBar);
+            mTabBar.onHideTitleBar();
+        }
+    }
+
+    @Override
+    protected boolean isFakeTitleBarShowing() {
+        return (mFakeTitleBar.getParent() != null);
+    }
+
+    @Override
+    protected TitleBarBase getFakeTitleBar() {
+        return mFakeTitleBar;
+    }
+
+    @Override
+    protected TitleBarBase getEmbeddedTitleBar() {
+        return mTitleBar;
+    }
+
+    // action mode callbacks
+
+    @Override
+    public void onActionModeStarted(ActionMode mode) {
+        if (mFakeTitleBar.isEditingUrl()) {
+            // hide the fake title bar when CAB is shown
+            hideFakeTitleBar();
+        }
+    }
+
+    @Override
+    public void setUrlTitle(Tab tab, String url, String title) {
+        super.setUrlTitle(tab, url, title);
+        mTabBar.onUrlAndTitle(tab, url, title);
+    }
+
+    // Set the favicon in the title bar.
+    @Override
+    public void setFavicon(Tab tab, Bitmap icon) {
+        super.setFavicon(tab, icon);
+        mTabBar.onFavicon(tab, icon);
+    }
+
+}