package com.aptoide.amethyst;
import android.app.SearchManager;
import android.content.SearchRecentSuggestionsProvider;
import android.database.Cursor;
import android.database.MatrixCursor;
import android.net.Uri;
import android.os.Build;
import com.aptoide.amethyst.BuildConfig;
import com.aptoide.amethyst.utils.Logger;
import com.aptoide.amethyst.websockets.WebSocketSingleton;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.TimeUnit;
/**
* Created with IntelliJ IDEA.
* User: brutus
* Date: 26-09-2013
* Time: 10:32
* To change this template use File | Settings | File Templates.
*/
public class SuggestionProvider extends SearchRecentSuggestionsProvider {
private static final String URI = "";
public String getSearchProvider() {
return BuildConfig.APPLICATION_ID + ".SuggestionProvider";
}
@Override
public boolean onCreate() {
setupSuggestions(getSearchProvider(), DATABASE_MODE_QUERIES);
return super.onCreate();
}
@Override
public Cursor query(final Uri uri, String[] projection, String selection, final String[] selectionArgs, String sortOrder) {
Logger.d("TAG", "query: " + selectionArgs[0]);
Cursor c = super.query(uri, projection, selection, selectionArgs, sortOrder);
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.ECLAIR_MR1 && c != null) {
BlockingQueue<MatrixCursor> arrayBlockingQueue = new ArrayBlockingQueue<MatrixCursor>(1);
WebSocketSingleton.getInstance().setNotificationUri(uri).setContext(getContext()).setBlockingQueue(arrayBlockingQueue);
MatrixCursor matrix_cursor = null;
WebSocketSingleton.getInstance().send(selectionArgs[0]);
try {
matrix_cursor = arrayBlockingQueue.poll(5, TimeUnit.SECONDS);
for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
matrix_cursor.newRow().add(c.getString(c.getColumnIndex(android.app.SearchManager.SUGGEST_COLUMN_ICON_1))).add(c.getString(c.getColumnIndex(SearchManager.SUGGEST_COLUMN_TEXT_1))).add(c.getString(c.getColumnIndex(SearchManager.SUGGEST_COLUMN_QUERY))).add("1");
}
} catch (InterruptedException e) {
Logger.printException(e);
} finally {
c.close();
}
return matrix_cursor;
} else {
return null;
}
}
}