Mark only browser as default in app detail page

Change-Id: I8112d859ba788a1dc67c44b5e0de668c0fc13169
Fix: 35307728
Test: make RunSettingsRoboTests
diff --git a/src/com/android/settings/applications/InstalledAppDetails.java b/src/com/android/settings/applications/InstalledAppDetails.java
index 9c4ee08..441a02e 100755
--- a/src/com/android/settings/applications/InstalledAppDetails.java
+++ b/src/com/android/settings/applications/InstalledAppDetails.java
@@ -1076,8 +1076,8 @@
         }
         pref = findPreference("default_browser");
         if (pref != null) {
-            pref.setSummary(
-                    DefaultBrowserPreferenceController.isBrowserDefault(mPackageName, context)
+            pref.setSummary(new DefaultBrowserPreferenceController(context)
+                    .isBrowserDefault(mPackageName, mUserId)
                     ? R.string.yes : R.string.no);
         }
         pref = findPreference("default_phone_app");
diff --git a/src/com/android/settings/applications/defaultapps/DefaultBrowserPreferenceController.java b/src/com/android/settings/applications/defaultapps/DefaultBrowserPreferenceController.java
index dca300b..7077912 100644
--- a/src/com/android/settings/applications/defaultapps/DefaultBrowserPreferenceController.java
+++ b/src/com/android/settings/applications/defaultapps/DefaultBrowserPreferenceController.java
@@ -21,7 +21,6 @@
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
 import android.net.Uri;
-import android.os.UserHandle;
 import android.support.v7.preference.Preference;
 import android.text.TextUtils;
 
@@ -96,9 +95,15 @@
     /**
      * Whether or not the pkg is the default browser
      */
-    public static boolean isBrowserDefault(String pkg, Context context) {
-        String defaultPackage = context.getPackageManager()
-                .getDefaultBrowserPackageNameAsUser(UserHandle.myUserId());
-        return defaultPackage != null && defaultPackage.equals(pkg);
+    public boolean isBrowserDefault(String pkg, int userId) {
+        String defaultPackage = mPackageManager.getDefaultBrowserPackageNameAsUser(userId);
+        if (defaultPackage != null) {
+            return defaultPackage.equals(pkg);
+        }
+
+        final List<ResolveInfo> list = mPackageManager.queryIntentActivitiesAsUser(BROWSE_PROBE,
+                PackageManager.MATCH_ALL, userId);
+        // There is only 1 app, it must be the default browser.
+        return list != null && list.size() == 1;
     }
 }
diff --git a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultBrowserPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultBrowserPreferenceControllerTest.java
index 2f5602f..10cfba0 100644
--- a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultBrowserPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultBrowserPreferenceControllerTest.java
@@ -19,6 +19,7 @@
 
 import android.content.Context;
 import android.content.Intent;
+import android.content.pm.ResolveInfo;
 import android.os.UserManager;
 import android.support.v7.preference.Preference;
 
@@ -35,6 +36,8 @@
 import org.robolectric.annotation.Config;
 import org.robolectric.util.ReflectionHelpers;
 
+import java.util.Arrays;
+
 import static com.google.common.truth.Truth.assertThat;
 import static org.mockito.Matchers.any;
 import static org.mockito.Matchers.anyInt;
@@ -85,4 +88,15 @@
 
         verify(mPackageManager).getDefaultBrowserPackageNameAsUser(anyInt());
     }
+
+    @Test
+    public void isBrowserDefault_onlyApp_shouldReturnTrue() {
+        final String testPkg = "pkg";
+        when(mPackageManager.getDefaultBrowserPackageNameAsUser(anyInt()))
+                .thenReturn(null);
+        when(mPackageManager.queryIntentActivitiesAsUser(any(Intent.class), anyInt(), anyInt()))
+                .thenReturn(Arrays.asList(new ResolveInfo()));
+
+        assertThat(mController.isBrowserDefault(testPkg, 0)).isTrue();
+    }
 }