Merge "Adding calling package name options fields"
diff --git a/textclassifier/api/current.txt b/textclassifier/api/current.txt
index 6dad352..95ff935 100644
--- a/textclassifier/api/current.txt
+++ b/textclassifier/api/current.txt
@@ -35,6 +35,7 @@
   public static final class TextClassification.Options implements android.os.Parcelable {
     ctor public TextClassification.Options();
     method public int describeContents();
+    method public java.lang.String getCallingPackageName();
     method public android.support.v4.os.LocaleListCompat getDefaultLocales();
     method public java.util.Calendar getReferenceTime();
     method public androidx.view.textclassifier.TextClassification.Options setDefaultLocales(android.support.v4.os.LocaleListCompat);
@@ -78,6 +79,7 @@
     ctor public TextLinks.Options();
     method public int describeContents();
     method public int getApplyStrategy();
+    method public java.lang.String getCallingPackageName();
     method public android.support.v4.os.LocaleListCompat getDefaultLocales();
     method public androidx.view.textclassifier.TextClassifier.EntityConfig getEntityConfig();
     method public androidx.view.textclassifier.TextLinks.SpanFactory getSpanFactory();
@@ -128,6 +130,7 @@
   public static final class TextSelection.Options implements android.os.Parcelable {
     ctor public TextSelection.Options();
     method public int describeContents();
+    method public java.lang.String getCallingPackageName();
     method public android.support.v4.os.LocaleListCompat getDefaultLocales();
     method public androidx.view.textclassifier.TextSelection.Options setDefaultLocales(android.support.v4.os.LocaleListCompat);
     method public void writeToParcel(android.os.Parcel, int);
diff --git a/textclassifier/src/androidTest/java/androidx/view/textclassifier/TextClassificationTest.java b/textclassifier/src/androidTest/java/androidx/view/textclassifier/TextClassificationTest.java
index 8ae65ac..8c8cb25 100644
--- a/textclassifier/src/androidTest/java/androidx/view/textclassifier/TextClassificationTest.java
+++ b/textclassifier/src/androidTest/java/androidx/view/textclassifier/TextClassificationTest.java
@@ -140,11 +140,13 @@
 
     @Test
     public void testParcelOptions() {
+        final String callingPackageName = "packageName";
         Calendar referenceTime = Calendar.getInstance(TimeZone.getTimeZone("GMT"), Locale.US);
         referenceTime.setTimeInMillis(946684800000L);  // 2000-01-01 00:00:00
-        TextClassification.Options reference = new TextClassification.Options();
-        reference.setDefaultLocales(LocaleListCompat.forLanguageTags("en-US,de-DE"));
-        reference.setReferenceTime(referenceTime);
+        TextClassification.Options reference = new TextClassification.Options()
+                .setDefaultLocales(LocaleListCompat.forLanguageTags("en-US,de-DE"))
+                .setReferenceTime(referenceTime)
+                .setCallingPackageName(callingPackageName);
 
         // Parcel and unparcel.
         final Parcel parcel = Parcel.obtain();
@@ -155,5 +157,6 @@
 
         assertEquals("en-US,de-DE", result.getDefaultLocales().toLanguageTags());
         assertEquals(referenceTime, result.getReferenceTime());
+        assertEquals(callingPackageName, result.getCallingPackageName());
     }
 }
diff --git a/textclassifier/src/androidTest/java/androidx/view/textclassifier/TextLinksTest.java b/textclassifier/src/androidTest/java/androidx/view/textclassifier/TextLinksTest.java
index dadc214..d42f2e7 100644
--- a/textclassifier/src/androidTest/java/androidx/view/textclassifier/TextLinksTest.java
+++ b/textclassifier/src/androidTest/java/androidx/view/textclassifier/TextLinksTest.java
@@ -129,11 +129,13 @@
                 TextClassifier.ENTITY_PRESET_NONE);
         entityConfig.includeEntities("a", "b", "c");
         entityConfig.excludeEntities("b");
-        TextLinks.Options reference = new TextLinks.Options();
-        reference.setDefaultLocales(LocaleListCompat.forLanguageTags("en-US,de-DE"));
-        reference.setEntityConfig(entityConfig);
-        reference.setApplyStrategy(TextLinks.APPLY_STRATEGY_REPLACE);
-        reference.setSpanFactory(new CustomSpanFactory());
+        final String callingPackageName = "packageName";
+        TextLinks.Options reference = new TextLinks.Options()
+                .setDefaultLocales(LocaleListCompat.forLanguageTags("en-US,de-DE"))
+                .setEntityConfig(entityConfig)
+                .setApplyStrategy(TextLinks.APPLY_STRATEGY_REPLACE)
+                .setSpanFactory(new CustomSpanFactory())
+                .setCallingPackageName(callingPackageName);
 
         final Parcel parcel = Parcel.obtain();
         reference.writeToParcel(parcel, reference.describeContents());
@@ -144,6 +146,7 @@
         assertEquals(Arrays.asList("a", "c"), result.getEntityConfig().getEntities(mClassifier));
         assertEquals(TextLinks.APPLY_STRATEGY_REPLACE, result.getApplyStrategy());
         assertEquals(null, result.getSpanFactory());
+        assertEquals(callingPackageName, result.getCallingPackageName());
     }
 
     @Test
diff --git a/textclassifier/src/androidTest/java/androidx/view/textclassifier/TextSelectionTest.java b/textclassifier/src/androidTest/java/androidx/view/textclassifier/TextSelectionTest.java
index 33a227b..d121ce6 100644
--- a/textclassifier/src/androidTest/java/androidx/view/textclassifier/TextSelectionTest.java
+++ b/textclassifier/src/androidTest/java/androidx/view/textclassifier/TextSelectionTest.java
@@ -62,8 +62,10 @@
 
     @Test
     public void testParcelOptions() {
-        TextSelection.Options reference = new TextSelection.Options();
-        reference.setDefaultLocales(LocaleListCompat.forLanguageTags("en-US,de-DE"));
+        final String callingPackageName = "packageName";
+        TextSelection.Options reference = new TextSelection.Options()
+                .setDefaultLocales(LocaleListCompat.forLanguageTags("en-US,de-DE"))
+                .setCallingPackageName(callingPackageName);
 
         // Parcel and unparcel.
         final Parcel parcel = Parcel.obtain();
@@ -73,5 +75,6 @@
                 parcel);
 
         assertEquals("en-US,de-DE", result.getDefaultLocales().toLanguageTags());
+        assertEquals(callingPackageName, result.getCallingPackageName());
     }
 }
diff --git a/textclassifier/src/main/java/androidx/view/textclassifier/TextClassification.java b/textclassifier/src/main/java/androidx/view/textclassifier/TextClassification.java
index 799618a..aa72a55 100644
--- a/textclassifier/src/main/java/androidx/view/textclassifier/TextClassification.java
+++ b/textclassifier/src/main/java/androidx/view/textclassifier/TextClassification.java
@@ -536,6 +536,7 @@
 
         private @Nullable LocaleListCompat mDefaultLocales;
         private @Nullable Calendar mReferenceTime;
+        private @Nullable String mCallingPackageName;
 
         public Options() {}
 
@@ -560,6 +561,17 @@
         }
 
         /**
+         * @param packageName name of the package from which the call was made.
+         *
+         * @hide
+         */
+        @RestrictTo(RestrictTo.Scope.LIBRARY)
+        public Options setCallingPackageName(@Nullable String packageName) {
+            mCallingPackageName = packageName;
+            return this;
+        }
+
+        /**
          * @return ordered list of locale preferences that can be used to disambiguate
          *      the provided text.
          */
@@ -577,6 +589,14 @@
             return mReferenceTime;
         }
 
+        /**
+         * @return name of the package from which the call was made.
+         */
+        @Nullable
+        public String getCallingPackageName() {
+            return mCallingPackageName;
+        }
+
         @Override
         public int describeContents() {
             return 0;
@@ -592,6 +612,7 @@
             if (mReferenceTime != null) {
                 dest.writeSerializable(mReferenceTime);
             }
+            dest.writeString(mCallingPackageName);
         }
 
         public static final Parcelable.Creator<Options> CREATOR =
@@ -614,6 +635,7 @@
             if (in.readInt() > 0) {
                 mReferenceTime = (Calendar) in.readSerializable();
             }
+            mCallingPackageName = in.readString();
         }
     }
 }
diff --git a/textclassifier/src/main/java/androidx/view/textclassifier/TextLinks.java b/textclassifier/src/main/java/androidx/view/textclassifier/TextLinks.java
index 79810f5..70096c3 100644
--- a/textclassifier/src/main/java/androidx/view/textclassifier/TextLinks.java
+++ b/textclassifier/src/main/java/androidx/view/textclassifier/TextLinks.java
@@ -285,6 +285,7 @@
         private TextClassifier.EntityConfig mEntityConfig;
         private @ApplyStrategy int mApplyStrategy;
         private @Nullable SpanFactory mSpanFactory;
+        private @Nullable String mCallingPackageName;
 
         public Options() {}
 
@@ -334,6 +335,17 @@
         }
 
         /**
+         * @param packageName name of the package from which the call was made.
+         *
+         * @hide
+         */
+        @RestrictTo(RestrictTo.Scope.LIBRARY)
+        public Options setCallingPackageName(@Nullable String packageName) {
+            mCallingPackageName = packageName;
+            return this;
+        }
+
+        /**
          * @return ordered list of locale preferences that can be used to disambiguate
          *      the provided text.
          */
@@ -374,6 +386,14 @@
             return mSpanFactory;
         }
 
+        /**
+         * @return name of the package from which the call was made.
+         */
+        @Nullable
+        public String getCallingPackageName() {
+            return mCallingPackageName;
+        }
+
         @Override
         public int describeContents() {
             return 0;
@@ -391,6 +411,7 @@
             }
             dest.writeInt(mApplyStrategy);
             // mSpanFactory is not parcelable
+            dest.writeString(mCallingPackageName);
         }
 
         public static final Parcelable.Creator<Options> CREATOR =
@@ -415,6 +436,7 @@
             }
             mApplyStrategy = in.readInt();
             // mSpanFactory is not parcelable
+            mCallingPackageName = in.readString();
         }
     }
 
diff --git a/textclassifier/src/main/java/androidx/view/textclassifier/TextSelection.java b/textclassifier/src/main/java/androidx/view/textclassifier/TextSelection.java
index dbc7ecf..5c54de8 100644
--- a/textclassifier/src/main/java/androidx/view/textclassifier/TextSelection.java
+++ b/textclassifier/src/main/java/androidx/view/textclassifier/TextSelection.java
@@ -22,6 +22,7 @@
 import android.support.annotation.IntRange;
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
+import android.support.annotation.RestrictTo;
 import android.support.v4.os.LocaleListCompat;
 import android.support.v4.util.ArrayMap;
 import android.support.v4.util.Preconditions;
@@ -208,6 +209,7 @@
     public static final class Options implements Parcelable {
 
         private @Nullable LocaleListCompat mDefaultLocales;
+        private @Nullable String mCallingPackageName;
 
         public Options() {}
 
@@ -222,6 +224,17 @@
         }
 
         /**
+         * @param packageName name of the package from which the call was made.
+         *
+         * @hide
+         */
+        @RestrictTo(RestrictTo.Scope.LIBRARY)
+        public Options setCallingPackageName(@Nullable String packageName) {
+            mCallingPackageName = packageName;
+            return this;
+        }
+
+        /**
          * @return ordered list of locale preferences that can be used to disambiguate
          *      the provided text.
          */
@@ -230,6 +243,14 @@
             return mDefaultLocales;
         }
 
+        /**
+         * @return name of the package from which the call was made.
+         */
+        @Nullable
+        public String getCallingPackageName() {
+            return mCallingPackageName;
+        }
+
         @Override
         public int describeContents() {
             return 0;
@@ -241,6 +262,7 @@
             if (mDefaultLocales != null) {
                 dest.writeString(mDefaultLocales.toLanguageTags());
             }
+            dest.writeString(mCallingPackageName);
         }
 
         public static final Parcelable.Creator<Options> CREATOR =
@@ -260,6 +282,7 @@
             if (in.readInt() > 0) {
                 mDefaultLocales = LocaleListCompat.forLanguageTags(in.readString());
             }
+            mCallingPackageName = in.readString();
         }
     }
 }