Add user selectable Default Browser feature - part 6

- if a default Browser is not defined and if a Browser App
is selected into the disambiguation dialog, then make it as
the default Browser
- clear default Browser saved data (package name) when
the default Browser App is removed

See bug #20144393

Change-Id: Ia8621d7a61ec2cb60deded9d70f75f1e1d88d123
diff --git a/core/java/com/android/internal/app/ResolverActivity.java b/core/java/com/android/internal/app/ResolverActivity.java
index 20486643..2e80896 100644
--- a/core/java/com/android/internal/app/ResolverActivity.java
+++ b/core/java/com/android/internal/app/ResolverActivity.java
@@ -743,29 +743,37 @@
                     if (r.match > bestMatch) bestMatch = r.match;
                 }
                 if (alwaysCheck) {
-                    PackageManager pm = getPackageManager();
+                    final int userId = getUserId();
+                    final PackageManager pm = getPackageManager();
 
                     // Set the preferred Activity
                     pm.addPreferredActivity(filter, bestMatch, set, intent.getComponent());
 
-                    // Update Domain Verification status
-                    int userId = getUserId();
-                    ComponentName cn = intent.getComponent();
-                    String packageName = cn.getPackageName();
-                    String dataScheme = (data != null) ? data.getScheme() : null;
+                    if (ri.handleAllWebDataURI) {
+                        // Set default Browser if needed
+                        final String packageName = pm.getDefaultBrowserPackageName(userId);
+                        if (TextUtils.isEmpty(packageName)) {
+                            pm.setDefaultBrowserPackageName(ri.activityInfo.packageName, userId);
+                        }
+                    } else {
+                        // Update Domain Verification status
+                        ComponentName cn = intent.getComponent();
+                        String packageName = cn.getPackageName();
+                        String dataScheme = (data != null) ? data.getScheme() : null;
 
-                    boolean isHttpOrHttps = (dataScheme != null) &&
-                            (dataScheme.equals(IntentFilter.SCHEME_HTTP) ||
-                            dataScheme.equals(IntentFilter.SCHEME_HTTPS));
+                        boolean isHttpOrHttps = (dataScheme != null) &&
+                                (dataScheme.equals(IntentFilter.SCHEME_HTTP) ||
+                                        dataScheme.equals(IntentFilter.SCHEME_HTTPS));
 
-                    boolean isViewAction = (action != null) && action.equals(Intent.ACTION_VIEW);
-                    boolean hasCategoryBrowsable = (categories != null) &&
-                            categories.contains(Intent.CATEGORY_BROWSABLE);
+                        boolean isViewAction = (action != null) && action.equals(Intent.ACTION_VIEW);
+                        boolean hasCategoryBrowsable = (categories != null) &&
+                                categories.contains(Intent.CATEGORY_BROWSABLE);
 
-                    if (isHttpOrHttps && isViewAction && hasCategoryBrowsable) {
-                        pm.updateIntentVerificationStatus(packageName,
-                                PackageManager.INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS,
-                                userId);
+                        if (isHttpOrHttps && isViewAction && hasCategoryBrowsable) {
+                            pm.updateIntentVerificationStatus(packageName,
+                                    PackageManager.INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS,
+                                    userId);
+                        }
                     }
                 } else {
                     try {