Merge "Switch Tab to DataController" into ics-mr1
diff --git a/src/com/android/browser/PhoneUi.java b/src/com/android/browser/PhoneUi.java
index ffcaaf8..a13eca3 100644
--- a/src/com/android/browser/PhoneUi.java
+++ b/src/com/android/browser/PhoneUi.java
@@ -529,12 +529,14 @@
                 if (mTitleBarBitmap == null
                         || mTitleBarBitmap.getWidth() != tbar.getWidth()
                         || mTitleBarBitmap.getHeight() != tbar.getEmbeddedHeight()) {
-                    mTitleBarBitmap = Bitmap.createBitmap(tbar.getWidth(),
-                            tbar.getEmbeddedHeight(), Bitmap.Config.RGB_565);
+                    mTitleBarBitmap = safeCreateBitmap(tbar.getWidth(),
+                            tbar.getEmbeddedHeight());
                 }
-                Canvas c = new Canvas(mTitleBarBitmap);
-                tbar.draw(c);
-                c.setBitmap(null);
+                if (mTitleBarBitmap != null) {
+                    Canvas c = new Canvas(mTitleBarBitmap);
+                    tbar.draw(c);
+                    c.setBitmap(null);
+                }
             } else {
                 mTitleBarBitmap = null;
             }
@@ -544,18 +546,28 @@
             if (mContentBitmap == null
                     || mContentBitmap.getWidth() != web.getWidth()
                     || mContentBitmap.getHeight() != h) {
-                mContentBitmap = Bitmap.createBitmap(web.getWidth(), h,
-                        Bitmap.Config.RGB_565);
+                mContentBitmap = safeCreateBitmap(web.getWidth(), h);
             }
-            Canvas c = new Canvas(mContentBitmap);
-            int tx = web.getScrollX();
-            int ty = web.getScrollY();
-            c.translate(-tx, -ty - tbar.getEmbeddedHeight());
-            web.draw(c);
-            c.setBitmap(null);
+            if (mContentBitmap != null) {
+                Canvas c = new Canvas(mContentBitmap);
+                int tx = web.getScrollX();
+                int ty = web.getScrollY();
+                c.translate(-tx, -ty - tbar.getEmbeddedHeight());
+                web.draw(c);
+                c.setBitmap(null);
+            }
             mContent.setImageBitmap(mContentBitmap);
         }
 
+        private Bitmap safeCreateBitmap(int width, int height) {
+            if (width <= 0 || height <= 0) {
+                Log.w(LOGTAG, "safeCreateBitmap failed! width: " + width
+                        + ", height: " + height);
+                return null;
+            }
+            return Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);
+        }
+
         public void set(Bitmap image) {
             mTitle.setVisibility(View.GONE);
             mContent.setImageBitmap(image);
diff --git a/src/com/android/browser/UrlBarAutoShowManager.java b/src/com/android/browser/UrlBarAutoShowManager.java
index f1bbe7f..294115e 100644
--- a/src/com/android/browser/UrlBarAutoShowManager.java
+++ b/src/com/android/browser/UrlBarAutoShowManager.java
@@ -46,6 +46,7 @@
     private boolean mHasTriggered;
     private long mLastScrollTime;
     private long mTriggeredTime;
+    private boolean mIsScrolling;
 
     public UrlBarAutoShowManager(BaseUi ui) {
         mUi = ui;
@@ -71,6 +72,7 @@
     public void onScrollChanged(int l, int t, int oldl, int oldt) {
         mLastScrollTime = SystemClock.uptimeMillis();
         if (t != oldt) {
+            mIsScrolling = true;
             if (t != 0) {
                 // If it is showing, extend it
                 if (mUi.isTitleBarShowing()) {
@@ -88,6 +90,7 @@
     void stopTracking() {
         if (mIsTracking) {
             mIsTracking = false;
+            mIsScrolling = false;
             if (mUi.isTitleBarShowing()) {
                 mUi.showTitleBarForDuration();
             }
@@ -124,7 +127,8 @@
                     float angle = (float) Math.atan2(ady, adx);
                     if (dy > mSlop && angle > V_TRIGGER_ANGLE
                             && !mUi.isTitleBarShowing()
-                            && web.getVisibleTitleHeight() == 0) {
+                            && (web.getVisibleTitleHeight() == 0
+                            || (!mIsScrolling && web.getScrollY() > 0))) {
                         mTriggeredTime = SystemClock.uptimeMillis();
                         mUi.showTitleBar();
                     }