OSDN Git Service

TextClassifier: Append http:// to url intents that need one.
authorAbodunrinwa Toki <toki@google.com>
Tue, 2 May 2017 20:43:41 +0000 (21:43 +0100)
committerAbodunrinwa Toki <toki@google.com>
Tue, 2 May 2017 21:12:33 +0000 (22:12 +0100)
Test: bit FrameworksCoreTests:android.view.textclassifier.TextClassificationManagerTest
Bug: 36504599
Change-Id: I5008225a6a3df2d8e07e4a9ae0e340a6582f9e7b

core/java/android/view/textclassifier/TextClassifierImpl.java
core/tests/coretests/src/android/view/textclassifier/TextClassificationManagerTest.java

index ebf1c01..209ff09 100644 (file)
@@ -607,6 +607,7 @@ final class TextClassifierImpl implements TextClassifier {
         @Nullable
         public static Intent create(Context context, String type, String text) {
             type = type.trim().toLowerCase(Locale.ENGLISH);
+            text = text.trim();
             switch (type) {
                 case TextClassifier.TYPE_EMAIL:
                     return new Intent(Intent.ACTION_SENDTO)
@@ -618,6 +619,9 @@ final class TextClassifierImpl implements TextClassifier {
                     return new Intent(Intent.ACTION_VIEW)
                             .setData(Uri.parse(String.format("geo:0,0?q=%s", text)));
                 case TextClassifier.TYPE_URL:
+                    if (!text.startsWith("https://") && !text.startsWith("http://")) {
+                        text = "http://" + text;
+                    }
                     return new Intent(Intent.ACTION_VIEW, Uri.parse(text))
                             .putExtra(Browser.EXTRA_APPLICATION_ID, context.getPackageName());
                 default:
index f59e4fc..742fd60 100644 (file)
@@ -118,7 +118,7 @@ public class TextClassificationManagerTest {
         if (isTextClassifierDisabled()) return;
 
         String text = "Visit http://www.android.com for more information";
-        String classifiedText = "http://www.android.com";
+        String classifiedText = "www.android.com";
         int startIndex = text.indexOf(classifiedText);
         int endIndex = startIndex + classifiedText.length();
         assertThat(mClassifier.classifyText(text, startIndex, endIndex, LOCALES),
@@ -193,7 +193,19 @@ public class TextClassificationManagerTest {
             public boolean matches(Object o) {
                 if (o instanceof TextClassification) {
                     TextClassification result = (TextClassification) o;
-                    return text.equals(result.getText())
+                    final boolean typeRequirementSatisfied;
+                    switch (type) {
+                        case TextClassifier.TYPE_URL:
+                            String scheme = result.getIntent().getData().getScheme();
+                            typeRequirementSatisfied = "http".equalsIgnoreCase(scheme)
+                                    || "https".equalsIgnoreCase(scheme);
+                            break;
+                        default:
+                            typeRequirementSatisfied = true;
+                    }
+
+                    return typeRequirementSatisfied
+                            && text.equals(result.getText())
                             && result.getEntityCount() > 0
                             && type.equals(result.getEntity(0));
                     // TODO: Include other properties.