/*
* Copyright 2013-2015 The GDG Frisbee Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.gdg.frisbee.android.provider;
import android.app.SearchManager;
import android.content.ContentProvider;
import android.content.ContentValues;
import android.content.UriMatcher;
import android.database.Cursor;
import android.database.MatrixCursor;
import android.net.Uri;
import android.provider.BaseColumns;
import android.support.annotation.NonNull;
import org.gdg.frisbee.android.BuildConfig;
import org.gdg.frisbee.android.activity.SearchActivity;
import org.gdg.frisbee.android.api.model.Chapter;
import org.gdg.frisbee.android.api.model.Directory;
import org.gdg.frisbee.android.app.App;
import org.gdg.frisbee.android.cache.ModelCache;
import timber.log.Timber;
public class GdgProvider extends ContentProvider {
private static final String[] CHAPTER_COLUMNS = new String[]{
BaseColumns._ID, SearchManager.SUGGEST_COLUMN_TEXT_1,
SearchManager.SUGGEST_COLUMN_TEXT_2, SearchManager.SUGGEST_COLUMN_INTENT_ACTION,
SearchManager.SUGGEST_COLUMN_INTENT_DATA_ID
};
private static final int SEARCH_SUGGEST = 0;
private static final UriMatcher uriMatcher;
static {
uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
uriMatcher.addURI(BuildConfig.APPLICATION_ID + ".provider",
SearchManager.SUGGEST_URI_PATH_QUERY, SEARCH_SUGGEST);
}
private Directory mDirectory;
@Override
public boolean onCreate() {
return true;
}
@Override
public Cursor query(@NonNull Uri uri, String[] projection, String selection, String[] selectionArgs,
String sortOrder) {
if (!isSetupDone()) {
prepareProvider();
}
String searchString = uri.getLastPathSegment();
return getSuggestions(searchString);
}
private boolean isSetupDone() {
return mDirectory != null;
}
private void prepareProvider() {
if (getContext() != null) {
mDirectory = (Directory) App.from(getContext()).getModelCache().get(ModelCache.KEY_CHAPTER_LIST_HUB);
}
Timber.d("Initialized ContentProvider");
}
private MatrixCursor getSuggestions(String query) {
MatrixCursor cursor = new MatrixCursor(CHAPTER_COLUMNS);
if (mDirectory == null) {
return cursor;
}
for (Chapter chapter : mDirectory.getGroups()) {
if (chapter.getName().toLowerCase().contains(query.toLowerCase())) {
cursor.addRow(new Object[]{
chapter.getGplusId().hashCode(),
chapter.getName(),
chapter.getCity() + ", " + chapter.getCountry().getName(),
SearchActivity.ACTION_FOUND,
chapter.getGplusId()
});
}
}
return cursor;
}
@Override
public String getType(@NonNull Uri uri) {
switch (uriMatcher.match(uri)) {
case SEARCH_SUGGEST:
return SearchManager.SUGGEST_MIME_TYPE;
default:
throw new IllegalArgumentException("Unknown URI " + uri);
}
}
@Override
public Uri insert(@NonNull Uri uri, ContentValues contentValues) {
throw new UnsupportedOperationException();
}
@Override
public int delete(@NonNull Uri uri, String s, String[] strings) {
throw new UnsupportedOperationException();
}
@Override
public int update(@NonNull Uri uri, ContentValues contentValues, String s, String[] strings) {
throw new UnsupportedOperationException();
}
}