summaryrefslogtreecommitdiffstats
path: root/src/com/android/browser
diff options
context:
space:
mode:
authorMichael Kolb <kolby@google.com>2010-11-19 12:55:12 -0800
committerMichael Kolb <kolby@google.com>2010-11-19 13:58:17 -0800
commit1bf231334fd4bda8dbde5b9a0345c756a213b3a2 (patch)
tree412e2abc22e50b45a1d74ada226f84955ed2419e /src/com/android/browser
parent63c0266b5d1fca4df859fe4fa3a9555d0783a2b6 (diff)
downloadpackages_apps_Browser-1bf231334fd4bda8dbde5b9a0345c756a213b3a2.tar.gz
packages_apps_Browser-1bf231334fd4bda8dbde5b9a0345c756a213b3a2.tar.bz2
packages_apps_Browser-1bf231334fd4bda8dbde5b9a0345c756a213b3a2.zip
restore all tabs on demand
Bug: 3214151 introduced new flag to determine if all tabs should be restored controlled by the Ui implementation Change-Id: I3e296f87a93fae54693bca186bb06ecd6db11d02
Diffstat (limited to 'src/com/android/browser')
-rw-r--r--src/com/android/browser/BaseUi.java14
-rw-r--r--src/com/android/browser/Controller.java16
-rw-r--r--src/com/android/browser/TabBar.java22
-rw-r--r--src/com/android/browser/TabControl.java24
-rw-r--r--src/com/android/browser/UI.java6
-rw-r--r--src/com/android/browser/UiController.java4
6 files changed, 68 insertions, 18 deletions
diff --git a/src/com/android/browser/BaseUi.java b/src/com/android/browser/BaseUi.java
index 052c9c58f..832b0b39b 100644
--- a/src/com/android/browser/BaseUi.java
+++ b/src/com/android/browser/BaseUi.java
@@ -43,6 +43,8 @@ import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.Toast;
+import java.util.List;
+
/**
* UI interface definitions
*/
@@ -280,6 +282,11 @@ public class BaseUi implements UI, WebViewFactory {
}
@Override
+ public boolean needsRestoreAllTabs() {
+ return mXLargeScreenSize;
+ }
+
+ @Override
public void addTab(Tab tab) {
if (mXLargeScreenSize) {
mTabBar.onNewTab(tab);
@@ -313,6 +320,13 @@ public class BaseUi implements UI, WebViewFactory {
}
@Override
+ public void updateTabs(List<Tab> tabs) {
+ if (mXLargeScreenSize) {
+ mTabBar.updateTabs(tabs);
+ }
+ }
+
+ @Override
public void removeTab(Tab tab) {
if (mTabControl.getCurrentTab() == tab) {
removeTabFromContentView(tab);
diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java
index 63f104a17..79fff3dca 100644
--- a/src/com/android/browser/Controller.java
+++ b/src/com/android/browser/Controller.java
@@ -83,6 +83,7 @@ import java.io.File;
import java.net.URLEncoder;
import java.util.Calendar;
import java.util.HashMap;
+import java.util.List;
/**
* Controller for browser
@@ -239,11 +240,12 @@ public class Controller
Calendar yesterday = Calendar.getInstance();
yesterday.add(Calendar.DATE, -1);
- boolean dontRestoreIncognitoTabs = lastActiveDate == null
+ boolean restoreIncognitoTabs = !(lastActiveDate == null
|| lastActiveDate.before(yesterday)
- || lastActiveDate.after(today);
+ || lastActiveDate.after(today));
- if (!mTabControl.restoreState(icicle, dontRestoreIncognitoTabs)) {
+ if (!mTabControl.restoreState(icicle, restoreIncognitoTabs,
+ mUi.needsRestoreAllTabs())) {
// there is no quit on Android. But if we can't restore the state,
// we can treat it as a new Browser, remove the old session cookies.
CookieManager.getInstance().removeSessionCookie();
@@ -280,7 +282,8 @@ public class Controller
loadUrlDataIn(t, urlData);
}
} else {
- if (dontRestoreIncognitoTabs) {
+ mUi.updateTabs(mTabControl.getTabs());
+ if (!restoreIncognitoTabs) {
WebView.cleanupPrivateBrowsingFiles(mActivity);
}
// TabControl.restoreState() will create a new tab even if
@@ -338,6 +341,11 @@ public class Controller
return mTabControl;
}
+ @Override
+ public List<Tab> getTabs() {
+ return mTabControl.getTabs();
+ }
+
// Open the icon database and retain all the icons for visited sites.
private void retainIconsOnStartup() {
final WebIconDatabase db = WebIconDatabase.getInstance();
diff --git a/src/com/android/browser/TabBar.java b/src/com/android/browser/TabBar.java
index 169f9348d..69e0bd2a1 100644
--- a/src/com/android/browser/TabBar.java
+++ b/src/com/android/browser/TabBar.java
@@ -40,6 +40,7 @@ import android.widget.LinearLayout;
import android.widget.TextView;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
/**
@@ -96,20 +97,23 @@ public class TabBar extends LinearLayout
// TODO: Change enabled states based on whether you can go
// back/forward. Probably should be done inside onPageStarted.
- // build tabs
- int tabcount = mTabControl.getTabCount();
- for (int i = 0; i < tabcount; i++) {
- Tab tab = mTabControl.getTab(i);
- TabViewData data = buildTab(tab);
- TabView tv = buildView(data);
- }
- mTabs.setSelectedTab(mTabControl.getCurrentIndex());
+ updateTabs(mUiController.getTabs());
mUserRequestedUrlbar = false;
mTitleVisible = true;
mButtonWidth = -1;
}
+ void updateTabs(List<Tab> tabs) {
+ mTabs.clearTabs();
+ mTabMap.clear();
+ for (Tab tab : tabs) {
+ TabViewData data = buildTab(tab);
+ TabView tv = buildView(data);
+ }
+ mTabs.setSelectedTab(mTabControl.getCurrentIndex());
+ }
+
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
if (mButtonWidth == -1) {
@@ -270,7 +274,7 @@ public class TabBar extends LinearLayout
}
if (mTabData.mTab != null) {
mIncognito.setVisibility(
- mTabData.mTab.getWebView().isPrivateBrowsingEnabled() ?
+ mTabData.mTab.isPrivateBrowsingEnabled() ?
View.VISIBLE : View.GONE);
}
}
diff --git a/src/com/android/browser/TabControl.java b/src/com/android/browser/TabControl.java
index aeffbc0f5..2d90d2317 100644
--- a/src/com/android/browser/TabControl.java
+++ b/src/com/android/browser/TabControl.java
@@ -26,6 +26,7 @@ import android.webkit.WebView;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
+import java.util.List;
import java.util.Vector;
class TabControl {
@@ -99,6 +100,13 @@ class TabControl {
}
/**
+ * return the list of tabs
+ */
+ List<Tab> getTabs() {
+ return mTabs;
+ }
+
+ /**
* Return the tab at the specified index.
* @return The Tab for the specified index or null if the tab does not
* exist.
@@ -281,10 +289,14 @@ class TabControl {
/**
* Restore the state of all the tabs.
* @param inState The saved state of all the tabs.
+ * @param restoreIncognitoTabs Restoring private browsing tabs
+ * @param restoreAll All webviews get restored, not just the current tab
+ * (this does not override handling of incognito tabs)
* @return True if there were previous tabs that were restored. False if
* there was no saved state or restoring the state failed.
*/
- boolean restoreState(Bundle inState, boolean dontRestoreIncognitoTabs) {
+ boolean restoreState(Bundle inState, boolean restoreIncognitoTabs,
+ boolean restoreAll) {
final int numTabs = (inState == null)
? -1 : inState.getInt(Tab.NUMTABS, -1);
if (numTabs == -1) {
@@ -295,7 +307,7 @@ class TabControl {
// Determine whether the saved current tab can be restored, and
// if not, which tab will take its place.
int currentTab = -1;
- if (!dontRestoreIncognitoTabs
+ if (restoreIncognitoTabs
|| !inState.getBundle(Tab.WEBVIEW + oldCurrentTab).getBoolean(Tab.INCOGNITO)) {
currentTab = oldCurrentTab;
} else {
@@ -317,13 +329,15 @@ class TabControl {
for (int i = 0; i < numTabs; i++) {
Bundle state = inState.getBundle(Tab.WEBVIEW + i);
- if (dontRestoreIncognitoTabs && state != null && state.getBoolean(Tab.INCOGNITO)) {
+ if (!restoreIncognitoTabs && state != null && state.getBoolean(Tab.INCOGNITO)) {
originalTabIndices.put(i, -1);
- } else if (i == currentTab) {
+ } else if (i == currentTab || restoreAll) {
Tab t = createNewTab();
// Me must set the current tab before restoring the state
// so that all the client classes are set.
- setCurrentTab(t);
+ if (i == currentTab) {
+ setCurrentTab(t);
+ }
if (!t.restoreState(state)) {
Log.w(LOGTAG, "Fail in restoreState, load home page.");
t.getWebView().loadUrl(BrowserSettings.getInstance()
diff --git a/src/com/android/browser/UI.java b/src/com/android/browser/UI.java
index b2908918f..08cf33a0f 100644
--- a/src/com/android/browser/UI.java
+++ b/src/com/android/browser/UI.java
@@ -26,6 +26,8 @@ import android.view.Menu;
import android.view.View;
import android.webkit.WebChromeClient.CustomViewCallback;
+import java.util.List;
+
/**
* UI interface definitions
*/
@@ -41,12 +43,16 @@ public interface UI extends ScrollListener {
public boolean onBackKey();
+ public boolean needsRestoreAllTabs();
+
public void addTab(Tab tab);
public void removeTab(Tab tab);
public void setActiveTab(Tab tab);
+ public void updateTabs(List<Tab> tabs);
+
public void detachTab(Tab tab);
public void attachTab(Tab tab);
diff --git a/src/com/android/browser/UiController.java b/src/com/android/browser/UiController.java
index 14261320a..dffebbae5 100644
--- a/src/com/android/browser/UiController.java
+++ b/src/com/android/browser/UiController.java
@@ -19,6 +19,8 @@ package com.android.browser;
import android.content.Intent;
import android.webkit.WebView;
+import java.util.List;
+
/**
* UI aspect of the controller
@@ -33,6 +35,8 @@ public interface UiController extends BookmarksHistoryCallbacks {
TabControl getTabControl();
+ List<Tab> getTabs();
+
Tab openTabToHomePage();
Tab openIncognitoTab();