Merge "Fix blank page activity selection bug"
diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java
index 58edd23..adc2677 100644
--- a/src/com/android/browser/Controller.java
+++ b/src/com/android/browser/Controller.java
@@ -332,6 +332,9 @@
restoredTabs.add(t.getId());
}
BackgroundHandler.execute(new PruneThumbnails(mActivity, restoredTabs));
+ if (tabs.size() == 0) {
+ openTabToHomePage();
+ }
mUi.updateTabs(tabs);
// TabControl.restoreState() will create a new tab even if
// restoring the state fails.
@@ -1207,13 +1210,6 @@
// combo view callbacks
- /**
- * callback from ComboPage when clear history is requested
- */
- public void onRemoveParentChildRelationships() {
- mTabControl.removeParentChildRelationShips();
- }
-
// key handling
protected void onBackKey() {
if (!mUi.onBackKey()) {
diff --git a/src/com/android/browser/Tab.java b/src/com/android/browser/Tab.java
index ecd4a80..8bf32b0 100644
--- a/src/com/android/browser/Tab.java
+++ b/src/com/android/browser/Tab.java
@@ -1412,6 +1412,9 @@
R.dimen.tab_thumbnail_height);
updateShouldCaptureThumbnails();
restoreState(state);
+ if (getId() == -1) {
+ mId = TabControl.getNextId();
+ }
setWebView(w);
mHandler = new Handler() {
@Override
@@ -1450,10 +1453,6 @@
updateShouldCaptureThumbnails();
}
- public void setId(long id) {
- mId = id;
- }
-
public long getId() {
return mId;
}
@@ -1592,6 +1591,9 @@
* Set the parent tab of this tab.
*/
void setParent(Tab parent) {
+ if (parent == this) {
+ throw new IllegalStateException("Cannot set parent to self!");
+ }
mParent = parent;
// This tab may have been freed due to low memory. If that is the case,
// the parent tab id is already saved. If we are changing that id
@@ -1610,6 +1612,10 @@
!= mSettings.hasDesktopUseragent(getWebView())) {
mSettings.toggleDesktopUseragent(getWebView());
}
+
+ if (parent != null && parent.getId() == getId()) {
+ throw new IllegalStateException("Parent has same ID as child!");
+ }
}
/**
@@ -1689,6 +1695,7 @@
if (!mInForeground) {
return;
}
+ capture();
mInForeground = false;
pause();
mMainView.setOnCreateContextMenuListener(null);
@@ -2175,4 +2182,27 @@
}
};
+ @Override
+ public String toString() {
+ StringBuilder builder = new StringBuilder(100);
+ builder.append(mId);
+ builder.append(") has parent: ");
+ if (getParent() != null) {
+ builder.append("true[");
+ builder.append(getParent().getId());
+ builder.append("]");
+ } else {
+ builder.append("false");
+ }
+ builder.append(", incog: ");
+ builder.append(isPrivateBrowsingEnabled());
+ if (!isPrivateBrowsingEnabled()) {
+ builder.append(", title: ");
+ builder.append(getTitle());
+ builder.append(", url: ");
+ builder.append(getUrl());
+ }
+ return builder.toString();
+ }
+
}
diff --git a/src/com/android/browser/TabControl.java b/src/com/android/browser/TabControl.java
index e99071a..932a811 100644
--- a/src/com/android/browser/TabControl.java
+++ b/src/com/android/browser/TabControl.java
@@ -62,7 +62,7 @@
mTabQueue = new ArrayList<Tab>(mMaxTabs);
}
- static long getNextId() {
+ synchronized static long getNextId() {
return sNextId++;
}
@@ -170,7 +170,6 @@
}
void addPreloadedTab(Tab tab) {
- tab.setId(getNextId());
mTabs.add(tab);
tab.setController(mController);
mController.onSetWebView(tab, tab.getWebView());
@@ -197,7 +196,6 @@
// Create a new tab and add it to the tab list
Tab t = new Tab(mController, w, state);
- t.setId(getNextId());
mTabs.add(t);
// Initially put the tab in the background.
t.putInBackground();
@@ -214,7 +212,6 @@
SnapshotTab createSnapshotTab(long snapshotId) {
SnapshotTab t = new SnapshotTab(mController, snapshotId);
- t.setId(getNextId());
mTabs.add(t);
return t;
}
@@ -302,9 +299,20 @@
Bundle tabState = tab.saveState();
if (tabState != null) {
ids[i++] = tab.getId();
- outState.putBundle(Long.toString(tab.getId()), tabState);
+ String key = Long.toString(tab.getId());
+ if (outState.containsKey(key)) {
+ // Dump the tab state for debugging purposes
+ for (Tab dt : mTabs) {
+ Log.e(LOGTAG, dt.toString());
+ }
+ throw new IllegalStateException(
+ "Error saving state, duplicate tab ids!");
+ }
+ outState.putBundle(key, tabState);
} else {
ids[i++] = -1;
+ // Since we won't be restoring the thumbnail, delete it
+ tab.deleteThumbnail();
}
}
if (!outState.isEmpty()) {
@@ -404,7 +412,6 @@
// Create a new tab and don't restore the state yet, add it
// to the tab list
Tab t = new Tab(mController, state);
- t.setId(id);
tabMap.put(id, t);
mTabs.add(t);
// added the tab to the front as they are not current
@@ -419,11 +426,6 @@
if (mCurrentTab == -1) {
if (getTabCount() > 0) {
setCurrentTab(getTab(0));
- } else {
- Tab t = createNewTab();
- setCurrentTab(t);
- t.getWebView().loadUrl(BrowserSettings.getInstance()
- .getHomePage());
}
}
// restore parent/child relationships