Add an active tabs page.
The active tabs page gives the user the ability to see all of their
open tabs in a list, and switch tabs, create a new one, or close
an old one.
Fix for http://b/issue?id=2101994
Change-Id: Id4c14dd437f769144dbdb02011144ea97d8fd030
diff --git a/src/com/android/browser/BrowserActivity.java b/src/com/android/browser/BrowserActivity.java
index 887f832..bff8d04 100644
--- a/src/com/android/browser/BrowserActivity.java
+++ b/src/com/android/browser/BrowserActivity.java
@@ -1251,15 +1251,17 @@
return true;
}
+ /* package */ TabControl.Tab openTabToHomePage() {
+ return openTabAndShow(mSettings.getHomePage(), false, null);
+ }
+
/* package */ void closeCurrentWindow() {
final TabControl.Tab current = mTabControl.getCurrentTab();
if (mTabControl.getTabCount() == 1) {
// This is the last tab. Open a new one, with the home
// page and close the current one.
- TabControl.Tab newTab = openTabAndShow(
- mSettings.getHomePage(), false, null);
+ TabControl.Tab newTab = openTabToHomePage();
closeTab(current);
- mTabControl.setCurrentTab(newTab);
return;
}
final TabControl.Tab parent = current.getParentTab();
@@ -1281,6 +1283,23 @@
}
}
+ private ActiveTabsPage mActiveTabsPage;
+
+ /**
+ * Remove the active tabs page.
+ * @param needToAttach If true, the active tabs page did not attach a tab
+ * to the content view, so we need to do that here.
+ */
+ /* package */ void removeActiveTabPage(boolean needToAttach) {
+ mContentView.removeView(mActiveTabsPage);
+ mActiveTabsPage = null;
+ mMenuState = R.id.MAIN_MENU;
+ if (needToAttach) {
+ attachTabToContentView(mTabControl.getCurrentTab());
+ }
+ getTopWindow().requestFocus();
+ }
+
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (!mCanChord) {
@@ -1301,13 +1320,21 @@
switch (item.getItemId()) {
// -- Main menu
case R.id.new_tab_menu_id:
- openTabAndShow(mSettings.getHomePage(), false, null);
+ openTabToHomePage();
break;
case R.id.goto_menu_id:
bookmarksOrHistoryPicker(false);
break;
+ case R.id.active_tabs_menu_id:
+ mActiveTabsPage = new ActiveTabsPage(this, mTabControl);
+ removeTabFromContentView(mTabControl.getCurrentTab());
+ mContentView.addView(mActiveTabsPage, COVER_SCREEN_PARAMS);
+ mActiveTabsPage.requestFocus();
+ mMenuState = EMPTY_MENU;
+ break;
+
case R.id.add_bookmark_menu_id:
Intent i = new Intent(BrowserActivity.this,
AddBookmarkPage.class);
@@ -1696,7 +1723,11 @@
if (CUSTOM_BROWSER_BAR) {
mTitleBar.addTab(webview, true);
}
- removeTabFromContentView(currentTab);
+ // If the last tab was removed from the active tabs page, currentTab
+ // will be null.
+ if (currentTab != null) {
+ removeTabFromContentView(currentTab);
+ }
attachTabToContentView(tab);
// We must set the new tab as the current tab to reflect the old
// animation behavior.
@@ -1956,13 +1987,20 @@
}
/**
- * Close the tab after removing its associated title bar.
+ * Close the tab, remove its associated title bar, and adjust mTabControl's
+ * current tab to a valid value.
*/
- private void closeTab(TabControl.Tab t) {
+ /* package */ void closeTab(TabControl.Tab t) {
+ int currentIndex = mTabControl.getCurrentIndex();
+ int removeIndex = mTabControl.getTabIndex(t);
if (CUSTOM_BROWSER_BAR) {
- mTitleBar.removeTab(mTabControl.getTabIndex(t));
+ mTitleBar.removeTab(removeIndex);
}
mTabControl.removeTab(t);
+ if (currentIndex >= removeIndex && currentIndex != 0) {
+ currentIndex--;
+ }
+ mTabControl.setCurrentTab(mTabControl.getTab(currentIndex));
}
private void goBackOnePageOrQuit() {
@@ -2012,6 +2050,9 @@
pauseWebViewTimers();
mActivityInPause = savedState;
removeTabFromContentView(current);
+ if (CUSTOM_BROWSER_BAR) {
+ mTitleBar.removeTab(mTabControl.getTabIndex(current));
+ }
mTabControl.removeTab(current);
}
/*