summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdam Powell <adamp@google.com>2015-04-14 15:20:16 -0700
committerAdam Powell <adamp@google.com>2015-04-14 15:20:16 -0700
commitecee322e59cbf59a65fa5815bf9a4fc065bb0fb5 (patch)
tree41d964ac04fad66d948ba1ede5c3eba10b182de7
parent172753e6f851aa1905953b00d11a48873ff4bbb5 (diff)
downloadframeworks_base-ecee322e59cbf59a65fa5815bf9a4fc065bb0fb5.zip
frameworks_base-ecee322e59cbf59a65fa5815bf9a4fc065bb0fb5.tar.gz
frameworks_base-ecee322e59cbf59a65fa5815bf9a4fc065bb0fb5.tar.bz2
Add ComponentName.createRelative methods
In a number of places, it's convenient to be able to refer to ComponentName classes with relative package paths as they are interpreted in manifest parsing. Express the official (yet simple) policy for this in a simple pair of factory methods for ComponentName. Change-Id: I81a40c81b7975445dd9f06292363b69bb072b16d
-rw-r--r--api/current.txt2
-rw-r--r--api/system-current.txt2
-rw-r--r--core/java/android/content/ComponentName.java51
3 files changed, 55 insertions, 0 deletions
diff --git a/api/current.txt b/api/current.txt
index 87cd2d6..faf5597 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -7260,6 +7260,8 @@ package android.content {
ctor public ComponentName(android.os.Parcel);
method public android.content.ComponentName clone();
method public int compareTo(android.content.ComponentName);
+ method public static android.content.ComponentName createRelative(java.lang.String, java.lang.String);
+ method public static android.content.ComponentName createRelative(android.content.Context, java.lang.String);
method public int describeContents();
method public java.lang.String flattenToShortString();
method public java.lang.String flattenToString();
diff --git a/api/system-current.txt b/api/system-current.txt
index 9e635bf..a144e02 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -7474,6 +7474,8 @@ package android.content {
ctor public ComponentName(android.os.Parcel);
method public android.content.ComponentName clone();
method public int compareTo(android.content.ComponentName);
+ method public static android.content.ComponentName createRelative(java.lang.String, java.lang.String);
+ method public static android.content.ComponentName createRelative(android.content.Context, java.lang.String);
method public int describeContents();
method public java.lang.String flattenToShortString();
method public java.lang.String flattenToString();
diff --git a/core/java/android/content/ComponentName.java b/core/java/android/content/ComponentName.java
index 547a2c3..8aeb22d 100644
--- a/core/java/android/content/ComponentName.java
+++ b/core/java/android/content/ComponentName.java
@@ -18,6 +18,7 @@ package android.content;
import android.os.Parcel;
import android.os.Parcelable;
+import android.text.TextUtils;
import java.io.PrintWriter;
import java.lang.Comparable;
@@ -37,6 +38,56 @@ public final class ComponentName implements Parcelable, Cloneable, Comparable<Co
private final String mClass;
/**
+ * Create a new component identifier where the class name may be specified
+ * as either absolute or relative to the containing package.
+ *
+ * <p>Relative package names begin with a <code>'.'</code> character. For a package
+ * <code>"com.example"</code> and class name <code>".app.MyActivity"</code> this method
+ * will return a ComponentName with the package <code>"com.example"</code>and class name
+ * <code>"com.example.app.MyActivity"</code>. Fully qualified class names are also
+ * permitted.</p>
+ *
+ * @param pkg the name of the package the component exists in
+ * @param cls the name of the class inside of <var>pkg</var> that implements
+ * the component
+ * @return the new ComponentName
+ */
+ public static ComponentName createRelative(String pkg, String cls) {
+ if (TextUtils.isEmpty(cls)) {
+ throw new IllegalArgumentException("class name cannot be empty");
+ }
+
+ final String fullName;
+ if (cls.charAt(0) == '.') {
+ // Relative to the package. Prepend the package name.
+ fullName = pkg + cls;
+ } else {
+ // Fully qualified package name.
+ fullName = cls;
+ }
+ return new ComponentName(pkg, fullName);
+ }
+
+ /**
+ * Create a new component identifier where the class name may be specified
+ * as either absolute or relative to the containing package.
+ *
+ * <p>Relative package names begin with a <code>'.'</code> character. For a package
+ * <code>"com.example"</code> and class name <code>".app.MyActivity"</code> this method
+ * will return a ComponentName with the package <code>"com.example"</code>and class name
+ * <code>"com.example.app.MyActivity"</code>. Fully qualified class names are also
+ * permitted.</p>
+ *
+ * @param pkg a Context for the package implementing the component
+ * @param cls the name of the class inside of <var>pkg</var> that implements
+ * the component
+ * @return the new ComponentName
+ */
+ public static ComponentName createRelative(Context pkg, String cls) {
+ return createRelative(pkg.getPackageName(), cls);
+ }
+
+ /**
* Create a new component identifier.
*
* @param pkg The name of the package that the component exists in. Can