package cgeo.geocaching.search; import cgeo.geocaching.models.Geocache; import cgeo.geocaching.storage.DataStore; import org.apache.commons.lang3.StringUtils; import android.app.SearchManager; import android.content.ContentProvider; import android.content.ContentValues; import android.database.Cursor; import android.net.Uri; import android.support.annotation.NonNull; public class SuggestionProvider extends ContentProvider { @Override public boolean onCreate() { return true; } @Override public String getType(@NonNull final Uri arg0) { return SearchManager.SUGGEST_MIME_TYPE; } @Override public Cursor query(@NonNull final Uri uri, final String[] projection, final String selection, final String[] selectionArgs, final String sortOrder) { final String searchTerm = uri.getLastPathSegment(); // can be empty when deleting the query if (StringUtils.equals(searchTerm, SearchManager.SUGGEST_URI_PATH_QUERY)) { return getLastOpenedCaches(); } return getSuggestions(searchTerm); } private static Cursor getLastOpenedCaches() { final SearchSuggestionCursor resultCursor = new SearchSuggestionCursor(); for (final Geocache geocache : DataStore.getLastOpenedCaches()) { resultCursor.addCache(geocache.getGeocode(), geocache.getName(), geocache.getType().id); } return resultCursor; } private static Cursor getSuggestions(final String searchTerm) { return DataStore.findSuggestions(searchTerm); } @Override public int delete(@NonNull final Uri uri, final String selection, final String[] selectionArgs) { throw new UnsupportedOperationException(); } @Override public Uri insert(@NonNull final Uri uri, final ContentValues values) { throw new UnsupportedOperationException(); } @Override public int update(@NonNull final Uri uri, final ContentValues values, final String selection, final String[] selectionArgs) { throw new UnsupportedOperationException(); } }