|
|
|
|
@ -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 如果初始化成功返回true,否则返回false
|
|
|
|
|
@ -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;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* HTML标签清理Cursor包装器
|
|
|
|
|
* <p>
|
|
|
|
|
* 这个类用于包装原始Cursor,并在getString()方法中清理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;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|