修复了search时无法正确显示文本内容的bug #43

Merged
p7fulywfa merged 1 commits from tangbo_branch into master 4 weeks ago

@ -23,8 +23,10 @@ import android.content.ContentValues;
import android.content.Intent;
import android.content.UriMatcher;
import android.database.Cursor;
import android.database.CursorWrapper;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;
import android.text.Html;
import android.text.TextUtils;
import android.util.Log;
@ -84,15 +86,15 @@ public class NotesProvider extends ContentProvider {
/**
*
* x'0A' SQLite '\n'
* '\n'
* '\n' HTML
*/
private static final String NOTES_SEARCH_PROJECTION = NoteColumns.ID + ","
+ NoteColumns.ID + " AS " + SearchManager.SUGGEST_COLUMN_INTENT_EXTRA_DATA + ","
+ "TRIM(REPLACE(" + NoteColumns.SNIPPET + ", x'0A','')) AS " + SearchManager.SUGGEST_COLUMN_TEXT_1 + ","
+ "TRIM(REPLACE(" + NoteColumns.SNIPPET + ", x'0A','')) AS " + SearchManager.SUGGEST_COLUMN_TEXT_2 + ","
+ R.drawable.search_result + " AS " + SearchManager.SUGGEST_COLUMN_ICON_1 + ","
+ "'" + Intent.ACTION_VIEW + "' AS " + SearchManager.SUGGEST_COLUMN_INTENT_ACTION + ","
+ "'" + Notes.TextNote.CONTENT_TYPE + "' AS " + SearchManager.SUGGEST_COLUMN_INTENT_DATA;
private static final String NOTES_SEARCH_PROJECTION = NoteColumns.ID + "," +
NoteColumns.ID + " AS " + SearchManager.SUGGEST_COLUMN_INTENT_EXTRA_DATA + "," +
NoteColumns.SNIPPET + " AS " + SearchManager.SUGGEST_COLUMN_TEXT_1 + "," +
NoteColumns.SNIPPET + " AS " + SearchManager.SUGGEST_COLUMN_TEXT_2 + "," +
R.drawable.search_result + " AS " + SearchManager.SUGGEST_COLUMN_ICON_1 + "," +
"'" + Intent.ACTION_VIEW + "' AS " + SearchManager.SUGGEST_COLUMN_INTENT_ACTION + "," +
"'" + Notes.TextNote.CONTENT_TYPE + "' AS " + SearchManager.SUGGEST_COLUMN_INTENT_DATA;
/**
* 便SQL
@ -100,10 +102,9 @@ public class NotesProvider extends ContentProvider {
*/
private static String NOTES_SNIPPET_SEARCH_QUERY = "SELECT " + NOTES_SEARCH_PROJECTION
+ " FROM " + TABLE.NOTE
+ " WHERE " + NoteColumns.SNIPPET + " LIKE ?"
+ " WHERE REPLACE(REPLACE(" + NoteColumns.SNIPPET + ", '<', ''), '>', '') LIKE ?"
+ " AND " + NoteColumns.PARENT_ID + "<>" + Notes.ID_TRASH_FOLER
+ " AND " + NoteColumns.TYPE + "=" + Notes.TYPE_NOTE;
/**
*
* @return truefalse
@ -186,6 +187,10 @@ public class NotesProvider extends ContentProvider {
searchString = String.format("%%%s%%", searchString);
c = db.rawQuery(NOTES_SNIPPET_SEARCH_QUERY,
new String[] { searchString });
// 创建一个自定义的Cursor包装器用于处理HTML标签
if (c != null && c.moveToFirst()) {
c = new HtmlCleaningCursorWrapper(c);
}
} catch (IllegalStateException ex) {
Log.e(TAG, "got exception: " + ex.toString());
}
@ -421,4 +426,36 @@ public class NotesProvider extends ContentProvider {
// TODO: 实现此方法返回合适的MIME类型
return null;
}
/**
* HTMLCursor
* <p>
* CursorgetString()HTML
*
* </p>
*/
private class HtmlCleaningCursorWrapper extends CursorWrapper {
private int mText1ColumnIndex;
private int mText2ColumnIndex;
/**
*
* @param cursor Cursor
*/
public HtmlCleaningCursorWrapper(Cursor cursor) {
super(cursor);
mText1ColumnIndex = cursor.getColumnIndex(SearchManager.SUGGEST_COLUMN_TEXT_1);
mText2ColumnIndex = cursor.getColumnIndex(SearchManager.SUGGEST_COLUMN_TEXT_2);
}
@Override
public String getString(int column) {
String value = super.getString(column);
if ((column == mText1ColumnIndex || column == mText2ColumnIndex) && value != null) {
// 清理HTML标签返回纯文本
return Html.fromHtml(value).toString();
}
return value;
}
}
}
Loading…
Cancel
Save