diff --git a/core/java/android/provider/Applications.java b/core/java/android/provider/Applications.java
index 0b0ce58f6c153..7aabc5080928a 100644
--- a/core/java/android/provider/Applications.java
+++ b/core/java/android/provider/Applications.java
@@ -16,67 +16,112 @@
package android.provider;
-import android.app.SearchManager;
+import android.content.ComponentName;
+import android.content.ContentResolver;
+import android.database.Cursor;
import android.net.Uri;
-import android.widget.SimpleCursorAdapter;
+
+import java.util.List;
/**
- *
The Applications provider gives information about installed applications.
- *
- * This provider provides the following columns:
- *
- *
+ * The Applications provider gives information about installed applications.
*
- *
- * | Column Name | Description |
- *
- *
- *
- * | {@link SearchManager#SUGGEST_COLUMN_TEXT_1} |
- * The application name. |
- *
- *
- * | {@link SearchManager#SUGGEST_COLUMN_INTENT_COMPONENT} |
- * The component to be used when forming the intent. |
- *
- *
- * | {@link SearchManager#SUGGEST_COLUMN_ICON_1} |
- * The application's icon resource id, prepended by its package name and
- * separated by a colon, e.g., "com.android.alarmclock:2130837524". The
- * package name is required for an activity interpreting this value to
- * be able to correctly access the icon drawable, for example, in an override of
- * {@link SimpleCursorAdapter#setViewImage(android.widget.ImageView, String)}. |
- *
- *
- * | {@link SearchManager#SUGGEST_COLUMN_ICON_2} |
- * Unused - column provided to conform to the {@link SearchManager} stipulation
- * that all providers provide either both or neither of
- * {@link SearchManager#SUGGEST_COLUMN_ICON_1} and
- * {@link SearchManager#SUGGEST_COLUMN_ICON_2}. |
- *
- *
- * @hide pending API council approval - should be unhidden at the same time as
- * {@link SearchManager#SUGGEST_COLUMN_INTENT_COMPONENT}
+ * @hide Only used by ApplicationsProvider so far.
*/
public class Applications {
- private static final String TAG = "Applications";
/**
* The content authority for this provider.
- *
- * @hide
*/
public static final String AUTHORITY = "applications";
/**
* The content:// style URL for this provider
- *
- * @hide
*/
public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY);
+ /**
+ * The content path for application component URIs.
+ */
+ public static final String APPLICATION_PATH = "applications";
+
+ /**
+ * The content path for application search.
+ */
+ public static final String SEARCH_PATH = "search";
+
+ private static final String APPLICATION_SUB_TYPE = "vnd.android.application";
+
+ /**
+ * The MIME type for a single application item.
+ */
+ public static final String APPLICATION_ITEM_TYPE =
+ ContentResolver.CURSOR_ITEM_BASE_TYPE + "/" + APPLICATION_SUB_TYPE;
+
+ /**
+ * The MIME type for a list of application items.
+ */
+ public static final String APPLICATION_DIR_TYPE =
+ ContentResolver.CURSOR_DIR_BASE_TYPE + "/" + APPLICATION_SUB_TYPE;
+
/**
* no public constructor since this is a utility class
*/
private Applications() {}
+
+ /**
+ * Gets a cursor with application search results.
+ * See {@link ApplicationColumns} for the columns available in the returned cursor.
+ */
+ public static Cursor search(ContentResolver resolver, String query) {
+ Uri searchUri = CONTENT_URI.buildUpon().appendPath(SEARCH_PATH).appendPath(query).build();
+ return resolver.query(searchUri, null, null, null, null);
+ }
+
+ /**
+ * Gets the application component name from an application URI.
+ *
+ * @param appUri A URI of the form
+ * "content://applications/applications/<packageName>/<className>".
+ * @return The component name for the application, or
+ * null if the given URI was null
+ * or malformed.
+ */
+ public static ComponentName uriToComponentName(Uri appUri) {
+ if (appUri == null) return null;
+ if (!ContentResolver.SCHEME_CONTENT.equals(appUri.getScheme())) return null;
+ if (!AUTHORITY.equals(appUri.getAuthority())) return null;
+ List pathSegments = appUri.getPathSegments();
+ if (pathSegments.size() != 3) return null;
+ if (!APPLICATION_PATH.equals(pathSegments.get(0))) return null;
+ String packageName = pathSegments.get(1);
+ String name = pathSegments.get(2);
+ return new ComponentName(packageName, name);
+ }
+
+ /**
+ * Gets the URI for an application component.
+ *
+ * @param packageName The name of the application's package.
+ * @param className The class name of the application.
+ * @return A URI of the form
+ * "content://applications/applications/<packageName>/<className>".
+ */
+ public static Uri componentNameToUri(String packageName, String className) {
+ return Applications.CONTENT_URI.buildUpon()
+ .appendEncodedPath(APPLICATION_PATH)
+ .appendPath(packageName)
+ .appendPath(className)
+ .build();
+ }
+
+ /**
+ * The columns in application cursors, like those returned by
+ * {@link Applications#search(ContentResolver, String)}.
+ */
+ public interface ApplicationColumns extends BaseColumns {
+ public static final String NAME = "name";
+ public static final String ICON = "icon";
+ public static final String URI = "uri";
+ }
}