package be.digitalia.fosdem.providers;
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;
import android.text.TextUtils;
import be.digitalia.fosdem.db.DatabaseManager;
/**
* Simple content provider responsible for search suggestions.
*
* @author Christophe Beyls
*/
public class SearchSuggestionProvider extends ContentProvider {
private static final int MIN_QUERY_LENGTH = 3;
private static final int DEFAULT_MAX_RESULTS = 5;
@Override
public boolean onCreate() {
return true;
}
@Override
public int delete(@NonNull Uri uri, String selection, String[] selectionArgs) {
throw new UnsupportedOperationException();
}
@Override
public Uri insert(@NonNull Uri uri, ContentValues values) {
throw new UnsupportedOperationException();
}
@Override
public int update(@NonNull Uri uri, ContentValues values, String selection, String[] selectionArgs) {
throw new UnsupportedOperationException();
}
@Override
public String getType(@NonNull Uri uri) {
return SearchManager.SUGGEST_MIME_TYPE;
}
@Override
public Cursor query(@NonNull Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
String query = uri.getLastPathSegment();
// Ignore empty or too small queries
if (query == null) {
return null;
}
query = query.trim();
if ((query.length() < MIN_QUERY_LENGTH) || "search_suggest_query".equals(query)) {
return null;
}
String limitParam = uri.getQueryParameter("limit");
int limit = TextUtils.isEmpty(limitParam) ? DEFAULT_MAX_RESULTS : Integer.parseInt(limitParam);
return DatabaseManager.getInstance().getSearchSuggestionResults(query, limit);
}
}