Implement ComboView for Bookmarks, History and SavedPages

 - Replaces ComboViewActivity for PhoneUi.
 - Lives as part of the BrowserActivity's ViewTree.
 - Avoids construction of ComboViewActivity everytime the bookmarks screen is opened.

Change-Id: Ic7042de731a4cc2107a297c9f7d4356bc2c30f2e
diff --git a/src/com/android/browser/ComboTabsAdapter.java b/src/com/android/browser/ComboTabsAdapter.java
index 5ce20fc..f73a88c 100644
--- a/src/com/android/browser/ComboTabsAdapter.java
+++ b/src/com/android/browser/ComboTabsAdapter.java
@@ -1,4 +1,5 @@
 /*
+ * Copyright (c) 2015, The Linux Foundation. All rights reserved.
  * Copyright (C) 2011 The Android Open Source Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -13,6 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+
 package com.android.browser;
 
 import android.app.ActionBar;
@@ -20,147 +22,25 @@
 import android.app.Fragment;
 import android.app.FragmentTransaction;
 import android.content.Context;
-import android.content.Intent;
-import android.net.Uri;
 import android.os.Bundle;
 import android.support.v13.app.FragmentPagerAdapter;
 import android.support.v4.view.ViewPager;
-import android.view.Menu;
-import android.view.MenuItem;
-
-import com.android.browser.UI.ComboViews;
 
 import java.util.ArrayList;
 
-public class ComboViewActivity extends Activity implements CombinedBookmarksCallbacks {
-
-    private static final String STATE_SELECTED_TAB = "tab";
-    public static final String EXTRA_COMBO_ARGS = "combo_args";
-    public static final String EXTRA_INITIAL_VIEW = "initial_view";
-
-    public static final String EXTRA_OPEN_SNAPSHOT = "snapshot_id";
-    public static final String EXTRA_OPEN_ALL = "open_all";
-    public static final String EXTRA_CURRENT_URL = "url";
-    private ViewPager mViewPager;
-    private TabsAdapter mTabsAdapter;
-
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setResult(RESULT_CANCELED);
-        Bundle extras = getIntent().getExtras();
-        Bundle args = extras.getBundle(EXTRA_COMBO_ARGS);
-        String svStr = extras.getString(EXTRA_INITIAL_VIEW, null);
-        ComboViews startingView = svStr != null
-                ? ComboViews.valueOf(svStr)
-                : ComboViews.Bookmarks;
-        mViewPager = new ViewPager(this);
-        mViewPager.setId(R.id.tab_view);
-        setContentView(mViewPager);
-
-        final ActionBar bar = getActionBar();
-        bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
-        if (BrowserActivity.isTablet(this)) {
-            bar.setDisplayOptions(ActionBar.DISPLAY_SHOW_HOME
-                    | ActionBar.DISPLAY_USE_LOGO);
-            bar.setHomeButtonEnabled(true);
-        } else {
-            bar.setDisplayOptions(0);
-        }
-
-        mTabsAdapter = new TabsAdapter(this, mViewPager);
-        mTabsAdapter.addTab(bar.newTab().setText(R.string.tab_bookmarks),
-                BrowserBookmarksPage.class, args);
-        mTabsAdapter.addTab(bar.newTab().setText(R.string.tab_history),
-                BrowserHistoryPage.class, args);
-        mTabsAdapter.addTab(bar.newTab().setText(R.string.tab_snapshots),
-                BrowserSnapshotPage.class, args);
-
-        if (savedInstanceState != null) {
-            bar.setSelectedNavigationItem(
-                    savedInstanceState.getInt(STATE_SELECTED_TAB, 0));
-        } else {
-            switch (startingView) {
-            case Bookmarks:
-                mViewPager.setCurrentItem(0);
-                break;
-            case History:
-                mViewPager.setCurrentItem(1);
-                break;
-            case Snapshots:
-                mViewPager.setCurrentItem(2);
-                break;
-            }
-        }
-    }
-
-    @Override
-    protected void onSaveInstanceState(Bundle outState) {
-        super.onSaveInstanceState(outState);
-        outState.putInt(STATE_SELECTED_TAB,
-                getActionBar().getSelectedNavigationIndex());
-    }
-
-    @Override
-    public void openUrl(String url) {
-        Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
-        setResult(RESULT_OK, i);
-        finish();
-    }
-
-    @Override
-    public void openInNewTab(String... urls) {
-        Intent i = new Intent();
-        i.putExtra(EXTRA_OPEN_ALL, urls);
-        setResult(RESULT_OK, i);
-        finish();
-    }
-
-    @Override
-    public void close() {
-        finish();
-    }
-
-    @Override
-    public void openSnapshot(long id) {
-        Intent i = new Intent();
-        i.putExtra(EXTRA_OPEN_SNAPSHOT, id);
-        setResult(RESULT_OK, i);
-        finish();
-    }
-
-    @Override
-    public boolean onCreateOptionsMenu(Menu menu) {
-        getMenuInflater().inflate(R.menu.combined, menu);
-        return super.onCreateOptionsMenu(menu);
-    }
-
-    @Override
-    public boolean onOptionsItemSelected(MenuItem item) {
-        if (item.getItemId() == android.R.id.home) {
-            finish();
-            return true;
-        } else if (item.getItemId() == R.id.preferences_menu_id) {
-            String url = getIntent().getStringExtra(EXTRA_CURRENT_URL);
-            BrowserPreferencesPage.startPreferencesForResult(this, url, Controller.PREFERENCES_PAGE);
-            return true;
-        }
-        return super.onOptionsItemSelected(item);
-    }
-
-    /**
-     * This is a helper class that implements the management of tabs and all
-     * details of connecting a ViewPager with associated TabHost.  It relies on a
-     * trick.  Normally a tab host has a simple API for supplying a View or
-     * Intent that each tab will show.  This is not sufficient for switching
-     * between pages.  So instead we make the content part of the tab host
-     * 0dp high (it is not shown) and the TabsAdapter supplies its own dummy
-     * view to show as the tab content.  It listens to changes in tabs, and takes
-     * care of switch to the correct page in the ViewPager whenever the selected
-     * tab changes.
-     */
-    public static class TabsAdapter extends FragmentPagerAdapter
-            implements ActionBar.TabListener, ViewPager.OnPageChangeListener {
+/**
+ * This is a helper class that implements the management of tabs and all
+ * details of connecting a ViewPager with associated TabHost.  It relies on a
+ * trick.  Normally a tab host has a simple API for supplying a View or
+ * Intent that each tab will show.  This is not sufficient for switching
+ * between pages.  So instead we make the content part of the tab host
+ * 0dp high (it is not shown) and the TabsAdapter supplies its own dummy
+ * view to show as the tab content.  It listens to changes in tabs, and takes
+ * care of switch to the correct page in the ViewPager whenever the selected
+ * tab changes.
+ */
+public class ComboTabsAdapter extends FragmentPagerAdapter
+    implements ActionBar.TabListener, ViewPager.OnPageChangeListener {
         private final Context mContext;
         private final ActionBar mActionBar;
         private final ViewPager mViewPager;
@@ -176,7 +56,7 @@
             }
         }
 
-        public TabsAdapter(Activity activity, ViewPager pager) {
+        public ComboTabsAdapter(Activity activity, ViewPager pager) {
             super(activity.getFragmentManager());
             mContext = activity;
             mActionBar = activity.getActionBar();
@@ -185,63 +65,58 @@
             mViewPager.setOnPageChangeListener(this);
         }
 
-        public void addTab(ActionBar.Tab tab, Class<?> clss, Bundle args) {
-            TabInfo info = new TabInfo(clss, args);
-            tab.setTag(info);
-            tab.setTabListener(this);
-            mTabs.add(info);
-            mActionBar.addTab(tab);
-            notifyDataSetChanged();
-        }
+    public void addTab(ActionBar.Tab tab, Class<?> clss, Bundle args) {
+        TabInfo info = new TabInfo(clss, args);
+        tab.setTag(info);
+        tab.setTabListener(this);
+        mTabs.add(info);
+        mActionBar.addTab(tab);
+        notifyDataSetChanged();
+    }
 
-        @Override
-        public int getCount() {
-            return mTabs.size();
-        }
+    @Override
+    public int getCount() {
+        return mTabs.size();
+    }
 
-        @Override
-        public Fragment getItem(int position) {
-            TabInfo info = mTabs.get(position);
-            return Fragment.instantiate(mContext, info.clss.getName(), info.args);
-        }
+    @Override
+    public Fragment getItem(int position) {
+        TabInfo info = mTabs.get(position);
+        return Fragment.instantiate(mContext, info.clss.getName(), info.args);
+    }
 
-        @Override
-        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
-        }
+    @Override
+    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
+    }
 
-        @Override
-        public void onPageSelected(int position) {
-            mActionBar.setSelectedNavigationItem(position);
-        }
+    @Override
+    public void onPageSelected(int position) {
+        mActionBar.setSelectedNavigationItem(position);
+    }
 
-        @Override
-        public void onPageScrollStateChanged(int state) {
-        }
+    @Override
+    public void onPageScrollStateChanged(int state) {
+    }
 
-        @Override
-        public void onTabSelected(android.app.ActionBar.Tab tab,
-                FragmentTransaction ft) {
-            Object tag = tab.getTag();
-            for (int i=0; i<mTabs.size(); i++) {
-                if (mTabs.get(i) == tag) {
-                    mViewPager.setCurrentItem(i);
-                }
+    @Override
+    public void onTabSelected(android.app.ActionBar.Tab tab,
+                              FragmentTransaction ft) {
+        Object tag = tab.getTag();
+        for (int i=0; i<mTabs.size(); i++) {
+            if (mTabs.get(i) == tag) {
+                mViewPager.setCurrentItem(i);
             }
         }
-
-        @Override
-        public void onTabUnselected(android.app.ActionBar.Tab tab,
-                FragmentTransaction ft) {
-        }
-
-        @Override
-        public void onTabReselected(android.app.ActionBar.Tab tab,
-                FragmentTransaction ft) {
-        }
     }
 
-    private static String makeFragmentName(int viewId, int index) {
-        return "android:switcher:" + viewId + ":" + index;
+    @Override
+    public void onTabUnselected(android.app.ActionBar.Tab tab,
+                                FragmentTransaction ft) {
     }
 
+    @Override
+    public void onTabReselected(android.app.ActionBar.Tab tab,
+                                FragmentTransaction ft) {
+    }
 }
+