Merge "Attempt to automatically restore after crash"
diff --git a/res/values/integers.xml b/res/values/integers.xml
index 5a8c15f..fe92a79 100644
--- a/res/values/integers.xml
+++ b/res/values/integers.xml
@@ -29,4 +29,6 @@
     <integer name="tabFadeDuration">300</integer>
     <!-- The maximum number of columns in the bookmark grid view -->
     <integer name="max_bookmark_columns">5</integer>
+    <!-- The duration of the titlebar animation in millisecs -->
+    <integer name="titlebar_animation_duration">200</integer>
 </resources>
diff --git a/src/com/android/browser/BaseUi.java b/src/com/android/browser/BaseUi.java
index ad45958..bcb18f1 100644
--- a/src/com/android/browser/BaseUi.java
+++ b/src/com/android/browser/BaseUi.java
@@ -872,7 +872,7 @@
             } else if (visibleTitleHeight == getTitleBar().getEmbeddedHeight()
                     && mHandler.hasMessages(MSG_HIDE_TITLEBAR)) {
                 mHandler.removeMessages(MSG_HIDE_TITLEBAR);
-                hideTitleBar();
+                suggestHideTitleBar();
             }
         } else if (scrollY > mLastScrollY) {
             mLastScrollY = scrollY;
diff --git a/src/com/android/browser/Tab.java b/src/com/android/browser/Tab.java
index bc5868f..c78b562 100644
--- a/src/com/android/browser/Tab.java
+++ b/src/com/android/browser/Tab.java
@@ -799,6 +799,22 @@
                 handler.ignore();
                 return;
             }
+            int colon = host_and_port.lastIndexOf(':');
+            String host;
+            int port;
+            if (colon == -1) {
+                host = host_and_port;
+                port = -1;
+            } else {
+                String portString = host_and_port.substring(colon + 1);
+                try {
+                    port = Integer.parseInt(portString);
+                    host = host_and_port.substring(0, colon);
+                } catch  (NumberFormatException e) {
+                    host = host_and_port;
+                    port = -1;
+                }
+            }
             KeyChain.choosePrivateKeyAlias(mActivity, new KeyChainAliasCallback() {
                 @Override public void alias(String alias) {
                     if (alias == null) {
@@ -807,7 +823,7 @@
                     }
                     new KeyChainLookup(mActivity, handler, alias).execute();
                 }
-            }, null, null, null, -1);
+            }, null, null, host, port, null);
         }
 
         /**
diff --git a/src/com/android/browser/TitleBarBase.java b/src/com/android/browser/TitleBarBase.java
index cf3a6ef..c7fb9c6 100644
--- a/src/com/android/browser/TitleBarBase.java
+++ b/src/com/android/browser/TitleBarBase.java
@@ -16,16 +16,13 @@
 
 package com.android.browser;
 
-import com.android.browser.UI.DropdownChangeListener;
-import com.android.browser.UrlInputView.UrlInputListener;
-import com.android.browser.autocomplete.SuggestedTextController.TextChangeWatcher;
-
 import android.animation.Animator;
 import android.animation.Animator.AnimatorListener;
 import android.animation.ObjectAnimator;
 import android.app.SearchManager;
 import android.content.Context;
 import android.content.Intent;
+import android.content.res.Resources;
 import android.graphics.Bitmap;
 import android.graphics.drawable.Drawable;
 import android.os.Bundle;
@@ -44,6 +41,7 @@
 import android.view.animation.Animation;
 import android.view.animation.Animation.AnimationListener;
 import android.view.animation.AnimationUtils;
+import android.view.animation.DecelerateInterpolator;
 import android.webkit.WebView;
 import android.widget.AbsoluteLayout;
 import android.widget.ArrayAdapter;
@@ -57,6 +55,10 @@
 import android.widget.Spinner;
 import android.widget.TextView;
 
+import com.android.browser.UI.DropdownChangeListener;
+import com.android.browser.UrlInputView.UrlInputListener;
+import com.android.browser.autocomplete.SuggestedTextController.TextChangeWatcher;
+
 import java.util.List;
 
 /**
@@ -68,6 +70,7 @@
         OnMenuItemClickListener {
 
     protected static final int PROGRESS_MAX = 100;
+    private static final float ANIM_TITLEBAR_DECELERATE = 2.5f;
 
     // These need to be set by the subclass.
     protected ImageView mFavicon;
@@ -149,6 +152,14 @@
         mSkipTitleBarAnimations = skip;
     }
 
+    void setupTitleBarAnimator(Animator animator) {
+        Resources res = mContext.getResources();
+        int duration = res.getInteger(R.integer.titlebar_animation_duration);
+        animator.setInterpolator(new DecelerateInterpolator(
+                ANIM_TITLEBAR_DECELERATE));
+        animator.setDuration(duration);
+    }
+
     void show() {
         if (mUseQuickControls) {
             mParent.addView(this);
@@ -163,6 +174,7 @@
                 mTitleBarAnimator = ObjectAnimator.ofFloat(this,
                         "translationY",
                         startPos, 0);
+                setupTitleBarAnimator(mTitleBarAnimator);
                 mTitleBarAnimator.start();
             }
             mBaseUi.setTitleGravity(Gravity.TOP);
@@ -181,6 +193,7 @@
                         "translationY", getTranslationY(),
                         (-getEmbeddedHeight() + visibleHeight));
                 mTitleBarAnimator.addListener(mHideTileBarAnimatorListener);
+                setupTitleBarAnimator(mTitleBarAnimator);
                 mTitleBarAnimator.start();
             } else {
                 mBaseUi.setTitleGravity(Gravity.NO_GRAVITY);