diff options
| -rw-r--r-- | core/java/android/provider/Applications.java | 129 |
1 files changed, 87 insertions, 42 deletions
diff --git a/core/java/android/provider/Applications.java b/core/java/android/provider/Applications.java index 0b0ce58f6c15..7aabc5080928 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; /** - * <p>The Applications provider gives information about installed applications.</p> - * - * <p>This provider provides the following columns: - * - * <table border="2" width="85%" align="center" frame="hsides" rules="rows"> - * - * <thead> - * <tr><th>Column Name</th> <th>Description</th> </tr> - * </thead> + * The Applications provider gives information about installed applications. * - * <tbody> - * <tr><th>{@link SearchManager#SUGGEST_COLUMN_TEXT_1}</th> - * <td>The application name.</td> - * </tr> - * - * <tr><th>{@link SearchManager#SUGGEST_COLUMN_INTENT_COMPONENT}</th> - * <td>The component to be used when forming the intent.</td> - * </tr> - * - * <tr><th>{@link SearchManager#SUGGEST_COLUMN_ICON_1}</th> - * <td>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)}.</td> - * </tr> - * - * <tr><th>{@link SearchManager#SUGGEST_COLUMN_ICON_2}</th> - * <td><i>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}.</td> - * </tr> - * - * @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 + * <code>null</code> if the given URI was <code>null</code> + * 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<String> 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"; + } } |