/*
* Copyright 2015 sourcestream GmbH
*
* 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 de.sourcestream.movieDB.adapter;
import android.app.SearchManager;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteQueryBuilder;
import android.net.Uri;
import java.util.HashMap;
public class SearchDB {
private static final String DBNAME = "search";
private static final int VERSION = 1;
private SearchDBOpenHelper mSearchDBOpenHelper;
private static final String FIELD_id = "_id";
private static final String FIELD_searchID = "searchID";
private static final String FIELD_title = "title";
private static final String FIELD_subTitle = "subTitle";
private static final String FIELD_imgUrl = "imgUrl";
private static final String FIELD_mediaType = "mediaType";
private static final String TABLE1_NAME = "search";
private static final String TABLE2_NAME = "suggestions";
private HashMap<String, String> mAliasMap;
public SearchDB(Context context) {
mSearchDBOpenHelper = new SearchDBOpenHelper(context, DBNAME, null, VERSION);
// This HashMap is used to map table fields to Custom Suggestion fields
mAliasMap = new HashMap<>();
// Unique id for the each Suggestions ( Mandatory )
mAliasMap.put("_ID", FIELD_id + " as " + "_id");
// This value will be appended to the Intent data on selecting an item from Search result or Suggestions ( Optional )
mAliasMap.put(SearchManager.SUGGEST_COLUMN_INTENT_DATA_ID, FIELD_searchID + " as " + SearchManager.SUGGEST_COLUMN_INTENT_DATA_ID);
// Text for Suggestions ( Mandatory )
mAliasMap.put(SearchManager.SUGGEST_COLUMN_TEXT_1, FIELD_title + " as " + SearchManager.SUGGEST_COLUMN_TEXT_1);
// Text for Suggestions ( Mandatory )
mAliasMap.put(SearchManager.SUGGEST_COLUMN_TEXT_2, FIELD_subTitle + " as " + SearchManager.SUGGEST_COLUMN_TEXT_2);
// Icon for Suggestions ( Optional )
mAliasMap.put(SearchManager.SUGGEST_COLUMN_ICON_1, FIELD_imgUrl + " as " + SearchManager.SUGGEST_COLUMN_ICON_1);
// Icon for Suggestions ( Optional )
mAliasMap.put(SearchManager.SUGGEST_COLUMN_INTENT_EXTRA_DATA, FIELD_mediaType + " as " + SearchManager.SUGGEST_COLUMN_INTENT_EXTRA_DATA);
}
public synchronized Cursor autoComplete() {
SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder();
queryBuilder.setProjectionMap(mAliasMap);
queryBuilder.setTables(TABLE1_NAME);
SQLiteDatabase db = mSearchDBOpenHelper.getReadableDatabase();
Cursor c = null;
if (db.isOpen()) {
c = queryBuilder.query(db,
new String[]{"_ID",
SearchManager.SUGGEST_COLUMN_TEXT_1,
SearchManager.SUGGEST_COLUMN_TEXT_2,
SearchManager.SUGGEST_COLUMN_ICON_1,
SearchManager.SUGGEST_COLUMN_INTENT_DATA_ID,
SearchManager.SUGGEST_COLUMN_INTENT_EXTRA_DATA},
null, null, null, null, null, "10"
);
}
return c;
}
/**
* Returns Suggestions
*/
public synchronized Cursor getSuggestions(String[] selectionArgs) {
String selection = FIELD_title + " like ? ";
if (selectionArgs != null) {
if (!selectionArgs[0].isEmpty()) {
selectionArgs[0].replaceAll("'", "");
selectionArgs[0] = "%" + selectionArgs[0] + "%";
} else {
selection = null;
selectionArgs = null;
}
}
SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder();
queryBuilder.setProjectionMap(mAliasMap);
queryBuilder.setTables(TABLE2_NAME);
SQLiteDatabase db = mSearchDBOpenHelper.getReadableDatabase();
Cursor c = null;
if (db.isOpen()) {
c = queryBuilder.query(db,
new String[]{"_ID",
SearchManager.SUGGEST_COLUMN_TEXT_1,
SearchManager.SUGGEST_COLUMN_TEXT_2,
SearchManager.SUGGEST_COLUMN_ICON_1,
SearchManager.SUGGEST_COLUMN_INTENT_DATA_ID,
SearchManager.SUGGEST_COLUMN_INTENT_EXTRA_DATA},
selection,
selectionArgs,
null,
null,
FIELD_title + " asc ", "10"
);
}
return c;
}
public int getSuggestionSize() {
SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder();
queryBuilder.setProjectionMap(mAliasMap);
queryBuilder.setTables(TABLE2_NAME);
Cursor c = queryBuilder.query(mSearchDBOpenHelper.getReadableDatabase(),
new String[]{"_ID",
SearchManager.SUGGEST_COLUMN_TEXT_1,
SearchManager.SUGGEST_COLUMN_TEXT_2,
SearchManager.SUGGEST_COLUMN_ICON_1,
SearchManager.SUGGEST_COLUMN_INTENT_DATA_ID,
SearchManager.SUGGEST_COLUMN_INTENT_EXTRA_DATA},
null, null, null, null, null, "10"
);
return c.getCount();
}
public void insertAutoComplete(int id, String title, Uri posterPath, String subTitle, String mediaType) {
SQLiteDatabase db = mSearchDBOpenHelper.getWritableDatabase();
// Defining insert statement
String sql = "insert into " + TABLE1_NAME + " ( " +
FIELD_searchID + " , " +
FIELD_title + " , " +
FIELD_imgUrl + " , " +
FIELD_subTitle + " , " +
FIELD_mediaType + ") " +
" values ( " +
" " + id + " ," +
" '" + title + "' ," +
" '" + posterPath + "' ," +
" '" + subTitle + "' ," +
" '" + mediaType + "' ) ";
// Inserting values into table
db.execSQL(sql);
}
public void cleanAutoCompleteRecords() {
SQLiteDatabase db = mSearchDBOpenHelper.getWritableDatabase();
// Defining insert statement
String sql = "DELETE FROM " + TABLE1_NAME + " ; ";
// Inserting values into table
db.execSQL(sql);
}
public void insertSuggestion(int id, String title, Uri posterPath, String subTitle, String mediaType) {
SQLiteDatabase db = mSearchDBOpenHelper.getWritableDatabase();
// Defining insert statement
String sql = "insert into " + TABLE2_NAME + " ( " +
FIELD_searchID + " , " +
FIELD_title + " , " +
FIELD_imgUrl + ", " +
FIELD_subTitle + ", " +
FIELD_mediaType + " ) " +
" values ( " +
" " + id + " ," +
" '" + title + "' ," +
" '" + posterPath + "' ," +
" '" + subTitle + "' ," +
" '" + mediaType + "' ) ";
// Inserting values into table
db.execSQL(sql);
}
public void cleanSuggestionRecords() {
SQLiteDatabase db = mSearchDBOpenHelper.getWritableDatabase();
// Defining insert statement
String sql = "DELETE FROM " + TABLE2_NAME + " ; ";
// Inserting values into table
db.execSQL(sql);
}
public void updateImg(int currId, Uri uriFile) {
SQLiteDatabase db = mSearchDBOpenHelper.getWritableDatabase();
// Defining insert statement
String sql = "UPDATE " + TABLE1_NAME + " SET " + FIELD_imgUrl + "=\"" + uriFile + "\" WHERE " + FIELD_searchID + "=" + currId + "; ";
// Inserting values into table
db.execSQL(sql);
}
private class SearchDBOpenHelper extends SQLiteOpenHelper {
public SearchDBOpenHelper(Context context,
String name,
CursorFactory factory,
int version) {
super(context, DBNAME, factory, VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
// Defining table structure
String sql = " CREATE TABLE " + TABLE1_NAME + "" +
" ( " +
FIELD_id + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
FIELD_searchID + " INTEGER, " +
FIELD_title + " VARCHAR(100), " +
FIELD_imgUrl + " VARCHAR(100), " +
FIELD_subTitle + " VARCHAR(100), " +
FIELD_mediaType + " VARCHAR(100) " +
" ) ";
// Creating table
db.execSQL(sql);
// Defining table structure
sql = " CREATE TABLE " + TABLE2_NAME + "" +
" ( " +
FIELD_id + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
FIELD_searchID + " INTEGER, " +
FIELD_title + " VARCHAR(100), " +
FIELD_imgUrl + " VARCHAR(100), " +
FIELD_subTitle + " VARCHAR(100), " +
FIELD_mediaType + " VARCHAR(100) " +
" ) ";
// Creating table
db.execSQL(sql);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
}
}
}