Merge "URL bar pull down tweaks"
diff --git a/res/drawable-hdpi/ic_downloads_holo_dark.png b/res/drawable-hdpi/ic_downloads_holo_dark.png
deleted file mode 100644
index e6ac45a..0000000
--- a/res/drawable-hdpi/ic_downloads_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_list_view_holo_dark.png b/res/drawable-hdpi/ic_list_view_holo_dark.png
deleted file mode 100644
index 89d63de..0000000
--- a/res/drawable-hdpi/ic_list_view_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_pageinfo_holo_dark.png b/res/drawable-hdpi/ic_pageinfo_holo_dark.png
deleted file mode 100644
index 39b8201..0000000
--- a/res/drawable-hdpi/ic_pageinfo_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_secure_generic_holo_dark.png b/res/drawable-hdpi/ic_secure_generic_holo_dark.png
deleted file mode 100644
index ad822d4..0000000
--- a/res/drawable-hdpi/ic_secure_generic_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_thumbnail_view_holo_dark.png b/res/drawable-hdpi/ic_thumbnail_view_holo_dark.png
deleted file mode 100644
index 0a9529f..0000000
--- a/res/drawable-hdpi/ic_thumbnail_view_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_downloads_holo_dark.png b/res/drawable-mdpi/ic_downloads_holo_dark.png
deleted file mode 100644
index 8f01c41..0000000
--- a/res/drawable-mdpi/ic_downloads_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_list_view_holo_dark.png b/res/drawable-mdpi/ic_list_view_holo_dark.png
deleted file mode 100644
index 319635e..0000000
--- a/res/drawable-mdpi/ic_list_view_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_pageinfo_holo_dark.png b/res/drawable-mdpi/ic_pageinfo_holo_dark.png
deleted file mode 100644
index fd9b1c0..0000000
--- a/res/drawable-mdpi/ic_pageinfo_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_secure_generic_holo_dark.png b/res/drawable-mdpi/ic_secure_generic_holo_dark.png
deleted file mode 100644
index c86047b..0000000
--- a/res/drawable-mdpi/ic_secure_generic_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_thumbnail_view_holo_dark.png b/res/drawable-mdpi/ic_thumbnail_view_holo_dark.png
deleted file mode 100644
index 9584c18..0000000
--- a/res/drawable-mdpi/ic_thumbnail_view_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_downloads_holo_dark.png b/res/drawable-xhdpi/ic_downloads_holo_dark.png
deleted file mode 100644
index 0681bd2..0000000
--- a/res/drawable-xhdpi/ic_downloads_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_list_view_holo_dark.png b/res/drawable-xhdpi/ic_list_view_holo_dark.png
deleted file mode 100644
index 30270da..0000000
--- a/res/drawable-xhdpi/ic_list_view_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_pageinfo_holo_dark.png b/res/drawable-xhdpi/ic_pageinfo_holo_dark.png
deleted file mode 100644
index 23e948a..0000000
--- a/res/drawable-xhdpi/ic_pageinfo_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_secure_generic_holo_dark.png b/res/drawable-xhdpi/ic_secure_generic_holo_dark.png
deleted file mode 100644
index 03a3958..0000000
--- a/res/drawable-xhdpi/ic_secure_generic_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_thumbnail_view_holo_dark.png b/res/drawable-xhdpi/ic_thumbnail_view_holo_dark.png
deleted file mode 100644
index d03787b..0000000
--- a/res/drawable-xhdpi/ic_thumbnail_view_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/layout/qc_tab.xml b/res/layout/qc_tab.xml
index 6fcd0f4..af8d46f 100644
--- a/res/layout/qc_tab.xml
+++ b/res/layout/qc_tab.xml
@@ -37,14 +37,14 @@
         />
     <ImageView
         android:id="@+id/thumb"
-        android:layout_height="@dimen/qc_thumb_width"
-        android:layout_width="@dimen/qc_thumb_height"
+        android:layout_width="@dimen/qc_thumb_width"
+        android:layout_height="@dimen/qc_thumb_height"
         android:layout_marginTop= "1dip"
         android:layout_marginLeft= "1dip"
         android:layout_marginRight= "1dip"
         android:layout_marginBottom= "1dip"
         android:src="@drawable/browser_thumbnail"
-        android:scaleType="centerCrop"
+        android:scaleType="centerInside"
         />
     <TextView android:id="@+id/title2"
         android:layout_width="match_parent"
diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java
index adc2677..ff1ad0e 100644
--- a/src/com/android/browser/Controller.java
+++ b/src/com/android/browser/Controller.java
@@ -253,8 +253,6 @@
     }
 
     void start(final Bundle icicle, final Intent intent) {
-        NfcHandler.register(mActivity, this);
-
         boolean noCrashRecovery = intent.getBooleanExtra(NO_CRASH_RECOVERY, false);
         if (icicle != null || noCrashRecovery) {
             doStart(icicle, intent);
@@ -637,6 +635,7 @@
         mNetworkHandler.onPause();
 
         WebView.disablePlatformNotifications();
+        NfcHandler.unregister(mActivity);
     }
 
     void onSaveInstanceState(Bundle outState) {
@@ -670,6 +669,7 @@
         mUi.onResume();
         mNetworkHandler.onResume();
         WebView.enablePlatformNotifications();
+        NfcHandler.register(mActivity, this);
     }
 
     private void releaseWakeLock() {
diff --git a/src/com/android/browser/NfcHandler.java b/src/com/android/browser/NfcHandler.java
index 6147aea..1b34df2 100644
--- a/src/com/android/browser/NfcHandler.java
+++ b/src/com/android/browser/NfcHandler.java
@@ -45,7 +45,18 @@
         if (adapter == null) {
             return;  // NFC not available on this device
         }
-        adapter.setNdefPushMessageCallback(new NfcHandler(controller), activity);
+        NfcHandler handler = null;
+        if (controller != null) {
+            handler = new NfcHandler(controller);
+        }
+
+        adapter.setNdefPushMessageCallback(handler, activity);
+    }
+
+    public static void unregister(Activity activity) {
+        // Passing a null controller causes us to disable
+        // the callback and release the ref to out activity.
+        register(activity, null);
     }
 
     public NfcHandler(Controller controller) {
diff --git a/src/com/android/browser/Tab.java b/src/com/android/browser/Tab.java
index 8bf32b0..69213cd 100644
--- a/src/com/android/browser/Tab.java
+++ b/src/com/android/browser/Tab.java
@@ -538,6 +538,13 @@
     private final WebViewClient mWebViewClient = new WebViewClient() {
         private Message mDontResend;
         private Message mResend;
+
+        private boolean providersDiffer(String url, String otherUrl) {
+            Uri uri1 = Uri.parse(url);
+            Uri uri2 = Uri.parse(otherUrl);
+            return !uri1.getEncodedAuthority().equals(uri2.getEncodedAuthority());
+        }
+
         @Override
         public void onPageStarted(WebView view, String url, Bitmap favicon) {
             mInPageLoad = true;
@@ -546,7 +553,7 @@
                     view.isPrivateBrowsingEnabled(), url, favicon);
             mLoadStartTime = SystemClock.uptimeMillis();
             if (mVoiceSearchData != null
-                    && !url.equals(mVoiceSearchData.mLastVoiceSearchUrl)) {
+                    && providersDiffer(url, mVoiceSearchData.mLastVoiceSearchUrl)) {
                 if (mVoiceSearchData.mSourceIsGoogle) {
                     Intent i = new Intent(LoggingEvents.ACTION_LOG_EVENT);
                     i.putExtra(LoggingEvents.EXTRA_FLUSH, true);
diff --git a/tests/assets/bindings_test.html b/tests/assets/bindings_test.html
index 71f3438..2d20ada 100755
--- a/tests/assets/bindings_test.html
+++ b/tests/assets/bindings_test.html
@@ -7,7 +7,7 @@
 }
 
 function testObjectTypes() {
-  return JNIBindingsTest.testObjectTypes("Foo", "", {"foo":"bar"}, {});
+  return JNIBindingsTest.testObjectTypes("Foo", "", null, {"foo":"bar"}, {});
 }
 
 function testArray() {
@@ -104,6 +104,12 @@
     return false;
   }
 
+  returned = JNIBindingsTest.returnNullString();
+  if (returned !== undefined) {
+    appendLog("returnNullString() failed: expected undefined, got " + returned);
+    return false;
+  }
+
   returned = JNIBindingsTest.returnObject();
   if (returned == null) {
     appendLog("returnObject() failed: expected non-null, got " + returned);
diff --git a/tests/src/com/android/browser/JNIBindingsTest.java b/tests/src/com/android/browser/JNIBindingsTest.java
index 94dc985..8c25a80 100644
--- a/tests/src/com/android/browser/JNIBindingsTest.java
+++ b/tests/src/com/android/browser/JNIBindingsTest.java
@@ -82,8 +82,8 @@
         return true;
     }
 
-    public boolean testObjectTypes(String stringParam, String emptyString, Object objectParam,
-            Object emptyObject) {
+    public boolean testObjectTypes(String stringParam, String emptyString, String nullString,
+            Object objectParam, Object emptyObject) {
         String expectedString = "Foo";
         String expectedEmptyString = "";
 
@@ -92,6 +92,7 @@
             assertNotNull(emptyString);
             assertEquals(expectedString, stringParam);
             assertEquals(expectedEmptyString, emptyString);
+            assertNull(nullString);
             assertNull(objectParam);
             assertNull(emptyObject);
         } catch (AssertionFailedError e) {
@@ -267,6 +268,7 @@
     public long returnLong() { return 1234L; }
     public short returnShort() { return 12345; }
     public String returnString() { return "Hello World!"; }
+    public String returnNullString() { return null; }
 
     public class TestObject {
         public int x = 123;