merge in honeycomb-release history after reset to honeycomb
diff --git a/res/layout/history_header.xml b/res/layout/history_header.xml
index e03b009..f77a697 100644
--- a/res/layout/history_header.xml
+++ b/res/layout/history_header.xml
@@ -21,4 +21,5 @@
         android:textAppearance="?android:attr/textAppearanceMedium"
         android:paddingLeft="35dip"
         android:gravity="center_vertical"
-        />
\ No newline at end of file
+        android:background="?android:attr/activatedBackgroundIndicator"
+        />
diff --git a/src/com/android/browser/BrowserHistoryPage.java b/src/com/android/browser/BrowserHistoryPage.java
index 6ea2bff..66abd9a 100644
--- a/src/com/android/browser/BrowserHistoryPage.java
+++ b/src/com/android/browser/BrowserHistoryPage.java
@@ -54,6 +54,7 @@
 import android.view.ViewGroup;
 import android.view.ViewStub;
 import android.webkit.WebIconDatabase.IconListener;
+import android.widget.AbsListView;
 import android.widget.AdapterView;
 import android.widget.AdapterView.AdapterContextMenuInfo;
 import android.widget.AdapterView.OnItemClickListener;
@@ -245,6 +246,7 @@
         mAdapter = new HistoryAdapter(getActivity());
         mGroupList.setAdapter(new HistoryGroupWrapper(mAdapter));
         mGroupList.setOnItemClickListener(mGroupItemClickListener);
+        mGroupList.setChoiceMode(AbsListView.CHOICE_MODE_SINGLE);
         mChildWrapper = new HistoryChildWrapper(mAdapter);
         mChildList = new ListView(getActivity());
         mChildList.setAdapter(mChildWrapper);
@@ -269,6 +271,7 @@
             CharSequence title = ((TextView) view).getText();
             mFragmentBreadCrumbs.setTitle(title, title);
             mChildWrapper.setSelectedGroup(position);
+            mGroupList.setItemChecked(position, true);
         }
     };
 
@@ -557,13 +560,13 @@
 
         @Override
         public int getGroupCount() {
-            return super.getGroupCount() + (mMostVisited != null ? 1 : 0);
+            return super.getGroupCount() + (!isMostVisitedEmpty() ? 1 : 0);
         }
 
         @Override
         public int getChildrenCount(int groupPosition) {
             if (groupPosition >= super.getGroupCount()) {
-                if (mMostVisited == null) {
+                if (isMostVisitedEmpty()) {
                     return 0;
                 }
                 return mMostVisited.getCount();
@@ -576,6 +579,10 @@
             if (!super.isEmpty()) {
                 return false;
             }
+            return isMostVisitedEmpty();
+        }
+
+        private boolean isMostVisitedEmpty() {
             return mMostVisited == null
                     || mMostVisited.isClosed()
                     || mMostVisited.getCount() == 0;
diff --git a/src/com/android/browser/TabBar.java b/src/com/android/browser/TabBar.java
index b0057ed..1ab02ed 100644
--- a/src/com/android/browser/TabBar.java
+++ b/src/com/android/browser/TabBar.java
@@ -230,6 +230,17 @@
         }
     }
 
+    boolean showsTitleBarIndicator() {
+        Tab tab = mTabControl.getCurrentTab();
+        if (tab != null) {
+            TabView tv = mTabMap.get(tab);
+            if (tv != null) {
+                return tv.showsIndicator();
+            }
+        }
+        return false;
+    }
+
     // callback after fake titlebar is shown
     void onShowTitleBar() {
         showTitleBarIndicator(false);
@@ -251,10 +262,14 @@
         if (mTabControl.getCurrentTab() != null
                 && !isLoading()) {
             if (visibleTitleHeight == 0) {
-                mUi.hideFakeTitleBar();
-                showTitleBarIndicator(true);
+                if (!showsTitleBarIndicator()) {
+                    mUi.hideFakeTitleBar();
+                    showTitleBarIndicator(true);
+                }
             } else {
-                showTitleBarIndicator(false);
+                if (showsTitleBarIndicator()) {
+                    showTitleBarIndicator(false);
+                }
             }
         }
         mVisibleTitleHeight = visibleTitleHeight;
@@ -336,6 +351,10 @@
             }
         }
 
+        boolean showsIndicator() {
+            return (mIndicator.getVisibility() == View.VISIBLE);
+        }
+
         @Override
         public void onClick(View v) {
             if (v == mClose) {
diff --git a/src/com/android/browser/UrlHandler.java b/src/com/android/browser/UrlHandler.java
index 9e41990..f1d1c4c 100644
--- a/src/com/android/browser/UrlHandler.java
+++ b/src/com/android/browser/UrlHandler.java
@@ -119,8 +119,7 @@
         return false;
     }
 
-    boolean startActivityForUrl(String url)
-    {
+    boolean startActivityForUrl(String url) {
       Intent intent;
       // perform generic parsing of the URI to turn it into an Intent.
       try {
@@ -173,8 +172,7 @@
 
     // In case a physical keyboard is attached, handle clicks with the menu key
     // depressed by opening in a new tab
-    boolean handleMenuClick(Tab tab, String url)
-    {
+    boolean handleMenuClick(Tab tab, String url) {
         if (mController.isMenuDown()) {
             mController.openTab(tab, url, false);
             mActivity.closeOptionsMenu();
@@ -184,6 +182,8 @@
         return false;
     }
 
+    // TODO: Move this class into Tab, where it can be properly stopped upon
+    // closure of the tab
     private class RLZTask extends AsyncTask<Void, Void, String> {
         private Tab mTab;
         private Uri mSiteUri;
@@ -215,10 +215,13 @@
         }
 
         protected void onPostExecute(String result) {
-            // If the Activity Manager is not invoked, load the URL directly
-            if (!startActivityForUrl(result)) {
-                if (!handleMenuClick(mTab, result)) {
-                    mController.loadUrl(mWebView, result);
+            // Make sure the Tab was not closed while handling the task
+            if (mController.getTabControl().getTabIndex(mTab) != -1) {
+                // If the Activity Manager is not invoked, load the URL directly
+                if (!startActivityForUrl(result)) {
+                    if (!handleMenuClick(mTab, result)) {
+                            mController.loadUrl(mWebView, result);
+                    }
                 }
             }
         }