Fix issue #18665625 CTS:android.app.cts.InstrumentationTest#...

...testCallActivityOnNewIntent test fails with LMP-MR1 Release.

Check for null.

Also fix some small issues with converting intents to/from intents.

Change-Id: Ic391cc57552635935af9a271b2d09353257f6d14
diff --git a/core/java/android/app/Instrumentation.java b/core/java/android/app/Instrumentation.java
index 3c30404..ad2b61f 100644
--- a/core/java/android/app/Instrumentation.java
+++ b/core/java/android/app/Instrumentation.java
@@ -1217,8 +1217,10 @@
     public void callActivityOnNewIntent(Activity activity, ReferrerIntent intent) {
         final String oldReferrer = activity.mReferrer;
         try {
-            activity.mReferrer = intent.mReferrer;
-            callActivityOnNewIntent(activity, new Intent(intent));
+            if (intent != null) {
+                activity.mReferrer = intent.mReferrer;
+            }
+            callActivityOnNewIntent(activity, intent != null ? new Intent(intent) : null);
         } finally {
             activity.mReferrer = oldReferrer;
         }
diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java
index de7fbab..5ebbf16 100644
--- a/core/java/android/content/Intent.java
+++ b/core/java/android/content/Intent.java
@@ -4391,7 +4391,7 @@
                 // scheme
                 else if (uri.startsWith("scheme=", i)) {
                     if (inSelector) {
-                        intent.mData = Uri.parse(value);
+                        intent.mData = Uri.parse(value + ":");
                     } else {
                         scheme = value;
                     }
@@ -4461,14 +4461,19 @@
                             String authority = null;
                             intent.mPackage = data.substring(14, end);
                             int newEnd;
-                            if (end < data.length() && (newEnd=data.indexOf('/', end+1)) >= 0) {
-                                // Found a scheme, remember it.
-                                scheme = data.substring(end+1, newEnd);
-                                end = newEnd;
-                                if (end < data.length() && (newEnd=data.indexOf('/', end+1)) >= 0) {
-                                    // Found a authority, remember it.
-                                    authority = data.substring(end+1, newEnd);
+                            if ((end+1) < data.length()) {
+                                if ((newEnd=data.indexOf('/', end+1)) >= 0) {
+                                    // Found a scheme, remember it.
+                                    scheme = data.substring(end+1, newEnd);
                                     end = newEnd;
+                                    if (end < data.length() && (newEnd=data.indexOf('/', end+1)) >= 0) {
+                                        // Found a authority, remember it.
+                                        authority = data.substring(end+1, newEnd);
+                                        end = newEnd;
+                                    }
+                                } else {
+                                    // All we have is a scheme.
+                                    scheme = data.substring(end+1);
                                 }
                             }
                             if (scheme == null) {
@@ -7355,7 +7360,7 @@
 
         toUriInner(frag, scheme, defAction, defPackage, flags);
         if (mSelector != null) {
-            uri.append("SEL;");
+            frag.append("SEL;");
             // Note that for now we are not going to try to handle the
             // data part; not clear how to represent this as a URI, and
             // not much utility in it.