String mViewColumns = getDialerSearchViewColumns(mDisplayOrder,mSortOrder);
db.execSQL("DROP INDEX IF EXISTS idx_" + TEMP_DIALER_SEARCH_VIEW_XXX + "_rawid");
db.execSQL("DROP TABLE IF EXISTS " + TEMP_DIALER_SEARCH_VIEW_XXX);
db.execSQL("CREATE TEMP TABLE " + TEMP_DIALER_SEARCH_VIEW_XXX
+ " AS SELECT " + mViewColumns + " FROM " + Views.DIALER_SEARCH_VIEW);
db.execSQL("CREATE INDEX idx_" + TEMP_DIALER_SEARCH_VIEW_XXX + "_rawid ON "
+ TEMP_DIALER_SEARCH_VIEW_XXX + "(" + DialerSearch.RAW_CONTACT_ID + ")");
}
return noResultXXX;
}
//Check Input OR Delete
int numberCount = filterParam.length();
String baseLookUpTable,baseViewTable;
boolean deleteOperation = false;
if (prevSearchNumberLengXXX > numberCount) {
// current operation is delete number to search
db.execSQL("DROP INDEX IF EXISTS idx_" + TEMP_DIALER_SEARCH_TABLE_XXX + prevSearchNumberLengXXX);
db.execSQL("DROP TABLE IF EXISTS " + TEMP_DIALER_SEARCH_TABLE_XXX + prevSearchNumberLengXXX);
db.execSQL("DROP TABLE IF EXISTS " + TEMP_DIALER_SEARCH_VIEW_XXX + prevSearchNumberLengXXX);
deleteOperation = true;
}
prevSearchNumberLengXXX = numberCount;
//Check to input OR delete END
if (numberCount == 1) {
baseLookUpTable = new String(TEMP_DIALER_SEARCH_TABLE_XXX);
baseViewTable = new String(TEMP_DIALER_SEARCH_VIEW_XXX);
} else {
int idx = numberCount - 1;
baseLookUpTable = new String(TEMP_DIALER_SEARCH_TABLE_XXX + idx);
baseViewTable = new String(TEMP_DIALER_SEARCH_VIEW_XXX + idx);
}
String tempViewTable = TEMP_DIALER_SEARCH_VIEW_XXX + numberCount;
db.beginTransaction();
try {
//TO CREATE NEW TEMP TABLE
if (deleteOperation == false) {
/* Create temp table from name_lookup table */
String tempTable = TEMP_DIALER_SEARCH_TABLE_XXX + numberCount;
boolean isFirstQuery = numberCount==1;
String mTableColumns = getDialerSearchNameTableColumns(mDisplayOrder,filterParam,isFirstQuery);
if(isFirstQuery){
db.execSQL("CREATE TEMP TABLE IF NOT EXISTS " + tempTable
+ " AS SELECT " + mTableColumns
+ " FROM " + baseLookUpTable
+ " WHERE " + " DIALER_SEARCH_MATCH_FILTER(" + DialerSearchLookupColumns.NORMALIZED_NAME + ","
+ DialerSearchLookupColumns.SEARCH_DATA_OFFSETS + ","
+ DialerSearchLookupColumns.NAME_TYPE + ",‘"
+ filterParam + "‘" + ")");
}else{
db.execSQL("CREATE TEMP TABLE IF NOT EXISTS " + tempTable
+ " AS SELECT " + mTableColumns
+ " FROM " + baseLookUpTable
+ " WHERE " + " DIALER_SEARCH_MATCH_FILTER(" + DialerSearchLookupColumns.NORMALIZED_NAME + ","
+ DialerSearchLookupColumns.SEARCH_DATA_OFFSETS + ","
+ DialerSearchLookupColumns.NAME_TYPE + ",‘"
+ filterParam + "‘" + ")");
}
db.execSQL("DROP INDEX IF EXISTS idx_" + tempTable);
db.execSQL("CREATE INDEX idx_" + tempTable + " ON " + tempTable + "(" + DsTempTableColumns._ID + "," + DsTempTableColumns.NAME_TYPE + ")");
//Use name_type AS order key.
//Name_type is just a flag to distinguish matched number and mismatched number
db.execSQL("CREATE TEMP TABLE IF NOT EXISTS " + tempViewTable
+ " AS SELECT " + DS_VIEW_NAME_COLUMNS
+ ", " + TEMP_TABLE_ALIAS_NUMBER + "." + DialerSearch.MATCHED_DATA_OFFSETS + " AS " + DialerSearch.MATCHED_DATA_OFFSETS
+ ", " + TEMP_TABLE_ALIAS_NAME + "." + DialerSearch.MATCHED_DATA_OFFSETS + " AS " + DialerSearch.MATCHED_NAME_OFFSETS
+ " FROM (SELECT * FROM " + baseViewTable
+ " WHERE " + DialerSearch.RAW_CONTACT_ID
+ " IN (SELECT " + DsTempTableColumns.RAW_CONTACT_ID
+ " FROM " + tempTable + ") "
+ ") AS " + TEMP_BASEVIEW_ALIAS
+ " LEFT JOIN "
+ tempTable + " AS " + TEMP_TABLE_ALIAS_NUMBER
+ " ON " + TEMP_TABLE_ALIAS_NUMBER + "." + DsTempTableColumns._ID + " = " + TEMP_BASEVIEW_ALIAS + "." + DialerSearch.NAME_LOOKUP_ID
+ " AND " + TEMP_TABLE_ALIAS_NUMBER + "." + DsTempTableColumns.NAME_TYPE + " = " + DialerSearchLookupType.PHONE_EXACT
+ " LEFT JOIN "
+ tempTable + " AS " + TEMP_TABLE_ALIAS_NAME
+ " ON " + TEMP_TABLE_ALIAS_NAME + "." + DsTempTableColumns._ID + " = " + TEMP_BASEVIEW_ALIAS + "." + DialerSearch.NAME_ID
+ " AND " + TEMP_TABLE_ALIAS_NAME + "." + DsTempTableColumns.NAME_TYPE + " = " + DialerSearchLookupType.NAME_EXACT
+ " ORDER BY " + DialerSearch.RAW_CONTACT_ID + ","
+ TEMP_TABLE_ALIAS_NUMBER + "." + DsTempTableColumns.NAME_TYPE + ","
+ DialerSearch.CALL_DATE);
}
db.setTransactionSuccessful();
} finally {
db.endTransaction();
}
return tempViewTable;
}
private String queryDialerSearchIncrement8XXX(SQLiteDatabase db, String filterParam) {
//TO get filter parameter
log(" DIALER_SEARCH_INCREMENT 8XXX");
//Check Input OR Delete
int numberCount = filterParam.length();
String baseLookUpTable,baseViewTable;
boolean deleteOperation = false;
if (prevSearchNumberLeng > numberCount) {
// current operation is delete number to search
db.execSQL("DROP INDEX IF EXISTS idx_" + TEMP_DIALER_SEARCH_TABLE + prevSearchNumberLeng);
db.execSQL("DROP TABLE IF EXISTS " + TEMP_DIALER_SEARCH_TABLE + prevSearchNumberLeng);
db.execSQL("DROP TABLE IF EXISTS " + TEMP_DIALER_SEARCH_VIEW + prevSearchNumberLeng);
deleteOperation = true;
}
prevSearchNumberLeng = numberCount;
//Check to input OR delete END
if (numberCount == 1) {
baseLookUpTable = new String(TEMP_DIALER_SEARCH_TABLE);
baseViewTable = new String(TEMP_DIALER_SEARCH_VIEW);
} else {
int idx = numberCount - 1;
baseLookUpTable = new String(TEMP_DIALER_SEARCH_TABLE + idx);
baseViewTable = new String(TEMP_DIALER_SEARCH_VIEW + idx);
}
String tempViewTable = TEMP_DIALER_SEARCH_VIEW + numberCount;
db.beginTransaction();
try {
//TO CREATE NEW TEMP TABLE
if (deleteOperation == false) {
/* Create temp table from name_lookup table */
String tempTable = TEMP_DIALER_SEARCH_TABLE + numberCount;
boolean isFirstQuery = numberCount==1;
String mTableColumns = getDialerSearchNameTableColumns(mDisplayOrder,filterParam,isFirstQuery);
if(isFirstQuery){
db.execSQL("CREATE TEMP TABLE IF NOT EXISTS " + tempTable
+ " AS SELECT " + mTableColumns
+ " FROM " + baseLookUpTable
+ " WHERE " + " DIALER_SEARCH_MATCH_FILTER(" + DialerSearchLookupColumns.NORMALIZED_NAME + ","
+ DialerSearchLookupColumns.SEARCH_DATA_OFFSETS + ","
+ DialerSearchLookupColumns.NAME_TYPE + ",‘"
+ filterParam + "‘" + ")");
}else{
db.execSQL("CREATE TEMP TABLE IF NOT EXISTS " + tempTable
+ " AS SELECT " + mTableColumns
+ " FROM " + baseLookUpTable
+ " WHERE " + " DIALER_SEARCH_MATCH_FILTER(" + DialerSearchLookupColumns.NORMALIZED_NAME + ","
+ DialerSearchLookupColumns.SEARCH_DATA_OFFSETS + ","
+ DialerSearchLookupColumns.NAME_TYPE + ",‘"
+ filterParam + "‘" + ")");
}
db.execSQL("DROP INDEX IF EXISTS idx_" + tempTable);
db.execSQL("CREATE INDEX idx_" + tempTable + " ON " + tempTable + "(" + DsTempTableColumns._ID + "," + DsTempTableColumns.NAME_TYPE + ")");
//Use name_type AS order key.
//Name_type is just a flag to distinguish matched number and mismatched number
db.execSQL("CREATE TEMP TABLE IF NOT EXISTS " + tempViewTable
+ " AS SELECT " + DS_VIEW_NAME_COLUMNS
+ ", " + TEMP_TABLE_ALIAS_NUMBER + "." + DialerSearch.MATCHED_DATA_OFFSETS + " AS " + DialerSearch.MATCHED_DATA_OFFSETS
+ ", " + TEMP_TABLE_ALIAS_NAME + "." + DialerSearch.MATCHED_DATA_OFFSETS + " AS " + DialerSearch.MATCHED_NAME_OFFSETS
+ " FROM (SELECT * FROM " + baseViewTable
+ " WHERE " + DialerSearch.RAW_CONTACT_ID
+ " IN (SELECT " + DsTempTableColumns.RAW_CONTACT_ID
+ " FROM " + tempTable + ") "
+ ") AS " + TEMP_BASEVIEW_ALIAS
+ " LEFT JOIN "
+ tempTable + " AS " + TEMP_TABLE_ALIAS_NUMBER
+ " ON " + TEMP_TABLE_ALIAS_NUMBER + "." + DsTempTableColumns._ID + " = " + TEMP_BASEVIEW_ALIAS + "." + DialerSearch.NAME_LOOKUP_ID
+ " AND " + TEMP_TABLE_ALIAS_NUMBER + "." + DsTempTableColumns.NAME_TYPE + " = " + DialerSearchLookupType.PHONE_EXACT
+ " LEFT JOIN "
+ tempTable + " AS " + TEMP_TABLE_ALIAS_NAME
+ " ON " + TEMP_TABLE_ALIAS_NAME + "." + DsTempTableColumns._ID + " = " + TEMP_BASEVIEW_ALIAS + "." + DialerSearch.NAME_ID
+ " AND " + TEMP_TABLE_ALIAS_NAME + "." + DsTempTableColumns.NAME_TYPE + " = " + DialerSearchLookupType.NAME_EXACT
+ " ORDER BY " + DialerSearch.RAW_CONTACT_ID + ","
+ TEMP_TABLE_ALIAS_NUMBER + "." + DsTempTableColumns.NAME_TYPE + ","
+ DialerSearch.CALL_DATE);
}
db.setTransactionSuccessful();
} finally {
db.endTransaction();
}
return tempViewTable;
}
private String queryDialerSearchSimpleXXX(SQLiteDatabase db, String filterParam) {
log(" DIALER_SEARCH_SIMPLE XXX");
db.beginTransaction();
try {
db.execSQL("DROP TABLE IF EXISTS " + COMBINE_RESULT_VIEW_TABLE);
db.execSQL("CREATE TEMP TABLE " + COMBINE_RESULT_VIEW_TABLE
+ " AS SELECT * FROM " + viewTableXXX
+ " UNION "
+ " SELECT * FROM " + viewTable8XXX);
searchResultCursor = db.rawQuery(
"SELECT " + DS_SEARCH_RESULTS_COLUMNS + " FROM " + COMBINE_RESULT_VIEW_TABLE
+ " GROUP BY " + DialerSearch.RAW_CONTACT_ID
+ " ORDER BY " + DialerSearch.CALL_DATE + " DESC,"
+ DialerSearch.SORT_KEY_PRIMARY + " COLLATE NOCASE",null);
db.setTransactionSuccessful();
} finally {
db.endTransaction();
}
return searchResultCursor;
}
//XT and end
2、修改DialerSearchController.java
@Override
protected void onQueryComplete(int token, Object cookie, Cursor cursor) {
log("[onQueryComplete]mIsShowLoadingTip:" + mIsShowLoadingTip);
if (mIsShowLoadingTip) {
showLoadingTips(mFragmentView, false, null, false);
}
Integer cnt = mSearchNumCntQ.poll();
if (cnt != null) {
mPrevQueryDigCnt = cnt.intValue();
}
log("+onQueryComplete");
final DialerSearchAdapter dialerSearchAdapter = mAdapter;
// Whenever we get a suggestions cursor, we need to immediately kick
// off another query for the complete list of contacts
if (cursor != null) {
log("[onQueryComplete]mIsLocaleChanging" + mIsLocaleChanging);
if (mIsLocaleChanging) {
cursor.close();
return;
}
mDialerSearchCursorCount = cursor.getCount();
log("[onQueryComplete]cursor count: " + mDialerSearchCursorCount);
String tempStr = mDigits.getText().toString();
if (tempStr != null && mDialerSearchCursorCount > 0) {
mNoResultDigCnt = 0;
/** M: New Feature Phone Landscape UI @{ */
if (mSearchTitle != null) {
mSearchTitle.setVisibility(View.GONE);
}
/** @ } */
// notify UI to update view only if the search digit count
// is equal to current input search digits in text view
// since user may input/delete quickly, the list view will
// be update continuously and take a lot of time
if (DialerSearchUtils.tripHyphen(tempStr).length() == mPrevQueryDigCnt) {
// Don‘t need to close cursor every time after query
// complete.
if (mOnDialerSearchResult != null) {
mOnDialerSearchResult
.onDialerSearchResult(obtainDialerSearchResult(mDialerSearchCursorCount));
}
dialerSearchAdapter.setResultCursor(cursor);
dialerSearchAdapter.changeCursor(cursor);
} else {
cursor.close();
}
} else {
if (mOnDialerSearchResult != null) {
mOnDialerSearchResult
.onDialerSearchResult(obtainDialerSearchResult(mDialerSearchCursorCount));
}
//XT and
//mNoResultDigCnt = mDigits.getText().length();