diff --git a/源程序代码-小米便签-Notes-master/Notes-master/src/net/micode/notes/data/NotesProvider.java b/源程序代码-小米便签-Notes-master/Notes-master/src/net/micode/notes/data/NotesProvider.java index edb0a60..b814416 100644 --- a/源程序代码-小米便签-Notes-master/Notes-master/src/net/micode/notes/data/NotesProvider.java +++ b/源程序代码-小米便签-Notes-master/Notes-master/src/net/micode/notes/data/NotesProvider.java @@ -34,7 +34,10 @@ import net.micode.notes.data.Notes.DataColumns; import net.micode.notes.data.Notes.NoteColumns; import net.micode.notes.data.NotesDatabaseHelper.TABLE; - +/** + * NotesProvider 是小米便签应用的内容提供者,负责管理便签数据的访问。 + * 它实现了对便签和便签数据的CRUD操作,并支持搜索功能。 + */ public class NotesProvider extends ContentProvider { private static final UriMatcher mMatcher; @@ -42,15 +45,16 @@ public class NotesProvider extends ContentProvider { private static final String TAG = "NotesProvider"; - private static final int URI_NOTE = 1; - private static final int URI_NOTE_ITEM = 2; - private static final int URI_DATA = 3; - private static final int URI_DATA_ITEM = 4; + private static final int URI_NOTE = 1; // 匹配所有便签 + private static final int URI_NOTE_ITEM = 2; // 匹配单个便签 + private static final int URI_DATA = 3; // 匹配所有便签数据 + private static final int URI_DATA_ITEM = 4; // 匹配单个便签数据 - private static final int URI_SEARCH = 5; - private static final int URI_SEARCH_SUGGEST = 6; + private static final int URI_SEARCH = 5; // 匹配搜索请求 + private static final int URI_SEARCH_SUGGEST = 6; // 匹配搜索建议请求 static { + // 初始化URI匹配器,用于识别不同的URI请求 mMatcher = new UriMatcher(UriMatcher.NO_MATCH); mMatcher.addURI(Notes.AUTHORITY, "note", URI_NOTE); mMatcher.addURI(Notes.AUTHORITY, "note/#", URI_NOTE_ITEM); @@ -72,19 +76,31 @@ public class NotesProvider extends ContentProvider { + 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 String NOTES_SNIPPET_SEARCH_QUERY = "SELECT " + NOTES_SEARCH_PROJECTION + " FROM " + TABLE.NOTE + " WHERE " + NoteColumns.SNIPPET + " LIKE ?" + " AND " + NoteColumns.PARENT_ID + "<>" + Notes.ID_TRASH_FOLER + " AND " + NoteColumns.TYPE + "=" + Notes.TYPE_NOTE; - + /** + * 初始化ContentProvider,创建数据库帮助类实例 + * @return 初始化成功返回true,否则返回false + */ @Override public boolean onCreate() { mHelper = NotesDatabaseHelper.getInstance(getContext()); return true; } + /** + * 查询便签数据 + * @param uri 查询的URI + * @param projection 返回的列 + * @param selection 选择条件 + * @param selectionArgs 选择条件参数 + * @param sortOrder 排序方式 + * @return 返回符合条件的Cursor + */ @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { @@ -93,25 +109,30 @@ public class NotesProvider extends ContentProvider { String id = null; switch (mMatcher.match(uri)) { case URI_NOTE: + // 查询所有便签 c = db.query(TABLE.NOTE, projection, selection, selectionArgs, null, null, sortOrder); break; case URI_NOTE_ITEM: + // 查询单个便签 id = uri.getPathSegments().get(1); c = db.query(TABLE.NOTE, projection, NoteColumns.ID + "=" + id + parseSelection(selection), selectionArgs, null, null, sortOrder); break; case URI_DATA: + // 查询所有便签数据 c = db.query(TABLE.DATA, projection, selection, selectionArgs, null, null, sortOrder); break; case URI_DATA_ITEM: + // 查询单个便签数据 id = uri.getPathSegments().get(1); c = db.query(TABLE.DATA, projection, DataColumns.ID + "=" + id + parseSelection(selection), selectionArgs, null, null, sortOrder); break; case URI_SEARCH: case URI_SEARCH_SUGGEST: + // 处理搜索请求 if (sortOrder != null || projection != null) { throw new IllegalArgumentException( "do not specify sortOrder, selection, selectionArgs, or projection" + "with this query"); @@ -131,6 +152,7 @@ public class NotesProvider extends ContentProvider { } try { + // 执行搜索查询 searchString = String.format("%%%s%%", searchString); c = db.rawQuery(NOTES_SNIPPET_SEARCH_QUERY, new String[] { searchString }); @@ -141,21 +163,29 @@ public class NotesProvider extends ContentProvider { default: throw new IllegalArgumentException("Unknown URI " + uri); } +// 设置通知URI,当数据变化时通知观察者 if (c != null) { c.setNotificationUri(getContext().getContentResolver(), uri); } return c; } - + /** + * 插入新的便签或便签数据 + * @param uri 插入的URI + * @param values 要插入的数据 + * @return 返回插入后的URI + */ @Override public Uri insert(Uri uri, ContentValues values) { SQLiteDatabase db = mHelper.getWritableDatabase(); long dataId = 0, noteId = 0, insertedId = 0; switch (mMatcher.match(uri)) { case URI_NOTE: + // 插入新便签 insertedId = noteId = db.insert(TABLE.NOTE, null, values); break; case URI_DATA: + // 插入新便签数据 if (values.containsKey(DataColumns.NOTE_ID)) { noteId = values.getAsLong(DataColumns.NOTE_ID); } else { @@ -181,6 +211,13 @@ public class NotesProvider extends ContentProvider { return ContentUris.withAppendedId(uri, insertedId); } + /** + * 删除便签或便签数据 + * @param uri 删除的URI + * @param selection 选择条件 + * @param selectionArgs 选择条件参数 + * @return 返回删除的行数 + */ @Override public int delete(Uri uri, String selection, String[] selectionArgs) { int count = 0; @@ -189,10 +226,12 @@ public class NotesProvider extends ContentProvider { boolean deleteData = false; switch (mMatcher.match(uri)) { case URI_NOTE: + // 删除便签 selection = "(" + selection + ") AND " + NoteColumns.ID + ">0 "; count = db.delete(TABLE.NOTE, selection, selectionArgs); break; case URI_NOTE_ITEM: + // 删除单个便签 id = uri.getPathSegments().get(1); /** * ID that smaller than 0 is system folder which is not allowed to @@ -206,10 +245,12 @@ public class NotesProvider extends ContentProvider { NoteColumns.ID + "=" + id + parseSelection(selection), selectionArgs); break; case URI_DATA: + // 删除便签数据 count = db.delete(TABLE.DATA, selection, selectionArgs); deleteData = true; break; case URI_DATA_ITEM: + // 删除单个便签数据 id = uri.getPathSegments().get(1); count = db.delete(TABLE.DATA, DataColumns.ID + "=" + id + parseSelection(selection), selectionArgs); @@ -218,6 +259,7 @@ public class NotesProvider extends ContentProvider { default: throw new IllegalArgumentException("Unknown URI " + uri); } + // 通知数据变化 if (count > 0) { if (deleteData) { getContext().getContentResolver().notifyChange(Notes.CONTENT_NOTE_URI, null); @@ -226,7 +268,14 @@ public class NotesProvider extends ContentProvider { } return count; } - + /** + * 更新便签或便签数据 + * @param uri 更新的URI + * @param values 要更新的数据 + * @param selection 选择条件 + * @param selectionArgs 选择条件参数 + * @return 返回更新的行数 + */ @Override public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { int count = 0; @@ -235,20 +284,24 @@ public class NotesProvider extends ContentProvider { boolean updateData = false; switch (mMatcher.match(uri)) { case URI_NOTE: + // 更新便签 increaseNoteVersion(-1, selection, selectionArgs); count = db.update(TABLE.NOTE, values, selection, selectionArgs); break; case URI_NOTE_ITEM: + // 更新单个便签 id = uri.getPathSegments().get(1); increaseNoteVersion(Long.valueOf(id), selection, selectionArgs); count = db.update(TABLE.NOTE, values, NoteColumns.ID + "=" + id + parseSelection(selection), selectionArgs); break; case URI_DATA: + // 更新便签数据 count = db.update(TABLE.DATA, values, selection, selectionArgs); updateData = true; break; case URI_DATA_ITEM: + // 更新单个便签数据 id = uri.getPathSegments().get(1); count = db.update(TABLE.DATA, values, DataColumns.ID + "=" + id + parseSelection(selection), selectionArgs); @@ -257,7 +310,7 @@ public class NotesProvider extends ContentProvider { default: throw new IllegalArgumentException("Unknown URI " + uri); } - + // 通知数据变化 if (count > 0) { if (updateData) { getContext().getContentResolver().notifyChange(Notes.CONTENT_NOTE_URI, null); @@ -266,11 +319,20 @@ public class NotesProvider extends ContentProvider { } return count; } - + /** + * 解析选择条件,添加额外的条件 + * @param selection 原始选择条件 + * @return 解析后的选择条件 + */ private String parseSelection(String selection) { return (!TextUtils.isEmpty(selection) ? " AND (" + selection + ')' : ""); } - + /** + * 增加便签版本号,用于数据同步 + * @param id 便签ID,如果为-1则更新所有符合条件的便签 + * @param selection 选择条件 + * @param selectionArgs 选择条件参数 + */ private void increaseNoteVersion(long id, String selection, String[] selectionArgs) { StringBuilder sql = new StringBuilder(120); sql.append("UPDATE "); @@ -296,6 +358,11 @@ public class NotesProvider extends ContentProvider { mHelper.getWritableDatabase().execSQL(sql.toString()); } + /** + * 获取URI对应的MIME类型 + * @param uri 请求的URI + * @return 返回对应的MIME类型 + */ @Override public String getType(Uri uri) { // TODO Auto-generated method stub