diff --git a/api/current.txt b/api/current.txt index 87cd2d6788191..faf5597ea0a72 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 9e635bf54fd38..a144e022a51e0 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 547a2c3dca102..8aeb22dddd1e2 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; @@ -36,6 +37,56 @@ public final class ComponentName implements Parcelable, Cloneable, ComparableRelative package names begin with a '.' character. For a package + * "com.example" and class name ".app.MyActivity" this method + * will return a ComponentName with the package "com.example"and class name + * "com.example.app.MyActivity". Fully qualified class names are also + * permitted.

+ * + * @param pkg the name of the package the component exists in + * @param cls the name of the class inside of pkg 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. + * + *

Relative package names begin with a '.' character. For a package + * "com.example" and class name ".app.MyActivity" this method + * will return a ComponentName with the package "com.example"and class name + * "com.example.app.MyActivity". Fully qualified class names are also + * permitted.

+ * + * @param pkg a Context for the package implementing the component + * @param cls the name of the class inside of pkg 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. *