diff --git a/src/org/fdroid/fdroid/data/InstalledAppProvider.java b/src/org/fdroid/fdroid/data/InstalledAppProvider.java index fea0abe00..aa584ffad 100644 --- a/src/org/fdroid/fdroid/data/InstalledAppProvider.java +++ b/src/org/fdroid/fdroid/data/InstalledAppProvider.java @@ -64,10 +64,14 @@ public class InstalledAppProvider extends FDroidProvider { private static final String PROVIDER_NAME = "InstalledAppProvider"; + private static final String PATH_SEARCH = "search"; + private static final int CODE_SEARCH = CODE_SINGLE + 1; + private static final UriMatcher matcher = new UriMatcher(-1); static { matcher.addURI(getAuthority(), null, CODE_LIST); + matcher.addURI(getAuthority(), PATH_SEARCH + "/*", CODE_SEARCH); matcher.addURI(getAuthority(), "*", CODE_SINGLE); } @@ -79,6 +83,13 @@ public class InstalledAppProvider extends FDroidProvider { return Uri.withAppendedPath(getContentUri(), appId); } + public static Uri getSearchUri(String keywords) { + return getContentUri().buildUpon() + .appendPath(PATH_SEARCH) + .appendPath(keywords) + .build(); + } + public static String getApplicationLabel(Context context, String packageName) { PackageManager pm = context.getPackageManager(); ApplicationInfo appInfo; @@ -116,6 +127,10 @@ public class InstalledAppProvider extends FDroidProvider { return new QuerySelection("appId = ?", new String[] { appId } ); } + private QuerySelection querySearch(String keywords) { + return new QuerySelection("applicationLabel LIKE ?", new String[] { "%" + keywords + "%" } ); + } + @Override public Cursor query(Uri uri, String[] projection, String customSelection, String[] selectionArgs, String sortOrder) { if (sortOrder == null) { @@ -131,6 +146,10 @@ public class InstalledAppProvider extends FDroidProvider { selection = selection.add(queryApp(uri.getLastPathSegment())); break; + case CODE_SEARCH: + selection = selection.add(querySearch(uri.getLastPathSegment())); + break; + default: String message = "Invalid URI for installed app content provider: " + uri; Log.e("FDroid", message);