From 678161373904a8894ca01181208e32e6e7e68d2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E5=8D=93=E6=9D=A8?= <2424012376@qq.com> Date: Wed, 19 Apr 2023 20:09:39 +0800 Subject: [PATCH 1/6] 1 --- .../tool类/BackupUtils.txt | 310 ++++++++++++++++++ doc/210340038张卓杨/tool类/DataUtils.txt | 264 +++++++++++++++ .../tool类/GTaskStringUtils.txt | 100 ++++++ .../tool类/ResourceParser.txt | 163 +++++++++ .../widget类/NoteWidgetProvider.txt | 118 +++++++ .../widget类/NoteWidgetProvider_2x.txt | 34 ++ .../widget类/NoteWidgetProvider_4x.txt | 33 ++ doc/软件工程.docx | Bin 0 -> 277948 bytes 8 files changed, 1022 insertions(+) create mode 100644 doc/210340038张卓杨/tool类/BackupUtils.txt create mode 100644 doc/210340038张卓杨/tool类/DataUtils.txt create mode 100644 doc/210340038张卓杨/tool类/GTaskStringUtils.txt create mode 100644 doc/210340038张卓杨/tool类/ResourceParser.txt create mode 100644 doc/210340038张卓杨/widget类/NoteWidgetProvider.txt create mode 100644 doc/210340038张卓杨/widget类/NoteWidgetProvider_2x.txt create mode 100644 doc/210340038张卓杨/widget类/NoteWidgetProvider_4x.txt create mode 100644 doc/软件工程.docx diff --git a/doc/210340038张卓杨/tool类/BackupUtils.txt b/doc/210340038张卓杨/tool类/BackupUtils.txt new file mode 100644 index 0000000..7e5abe4 --- /dev/null +++ b/doc/210340038张卓杨/tool类/BackupUtils.txt @@ -0,0 +1,310 @@ +BackupUtils: + +package net.micode.notes.tool; + +public class BackupUtils { + private static final String TAG = "BackupUtils"; + // Singleton stuff + private static BackupUtils sInstance; //类里面定义自己类的对象 + + public static synchronized BackupUtils getInstance(Context context) { + //当某个线程运行时,要检查其他线程是否也在进行 + if (sInstance == null) { + sInstance = new BackupUtils(context); + } + return sInstance; + } + + /** + * Following states are signs to represents backup or restore + * status + */ + // Currently, the sdcard is not mounted 手机内没有SD卡 + public static final int STATE_SD_CARD_UNMOUONTED = 0; + // The backup file not exist 没有备份文件夹 + public static final int STATE_BACKUP_FILE_NOT_EXIST = 1; + // The data is not well formated, may be changed by other programs 数据已被破坏,也可能被修改 + public static final int STATE_DATA_DESTROIED = 2; + // Some run-time exception which causes restore or backup fails 超时异常 + public static final int STATE_SYSTEM_ERROR = 3; + // Backup or restore success 成功存储 + public static final int STATE_SUCCESS = 4; + + private TextExport mTextExport; + + private BackupUtils(Context context) { //初始化函数 + mTextExport = new TextExport(context); + } + + private static boolean externalStorageAvailable() { //外部存储功能是否正常 + return Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState()); + } + + public int exportToText() { + return mTextExport.exportToText(); + } + + public String getExportedTextFileName() { + return mTextExport.mFileName; + } + + public String getExportedTextFileDir() { + return mTextExport.mFileDirectory; + } + + private static class TextExport { + private static final String[] NOTE_PROJECTION = { + NoteColumns.ID, + NoteColumns.MODIFIED_DATE, + NoteColumns.SNIPPET, + NoteColumns.TYPE + }; + + private static final int NOTE_COLUMN_ID = 0; + + private static final int NOTE_COLUMN_MODIFIED_DATE = 1; + + private static final int NOTE_COLUMN_SNIPPET = 2; + + private static final String[] DATA_PROJECTION = { + DataColumns.CONTENT, + DataColumns.MIME_TYPE, + DataColumns.DATA1, + DataColumns.DATA2, + DataColumns.DATA3, + DataColumns.DATA4, + }; + + private static final int DATA_COLUMN_CONTENT = 0; + + private static final int DATA_COLUMN_MIME_TYPE = 1; + + private static final int DATA_COLUMN_CALL_DATE = 2; + + private static final int DATA_COLUMN_PHONE_NUMBER = 4; + + private final String [] TEXT_FORMAT; + private static final int FORMAT_FOLDER_NAME = 0; + private static final int FORMAT_NOTE_DATE = 1; + private static final int FORMAT_NOTE_CONTENT = 2; + + private Context mContext; + private String mFileName; + private String mFileDirectory; + + public TextExport(Context context) { + TEXT_FORMAT = context.getResources().getStringArray(R.array.format_for_exported_note); + mContext = context; + mFileName = ""; + mFileDirectory = ""; + } + + private String getFormat(int id) { //获取文本的组成部分 + return TEXT_FORMAT[id]; + } + + /** + * Export the folder identified by folder id to text + */ + private void exportFolderToText(String folderId, PrintStream ps) { + // Query notes belong to this folder 通过查询parent id来制定ID文件夹下的Note + Cursor notesCursor = mContext.getContentResolver().query(Notes.CONTENT_NOTE_URI, + NOTE_PROJECTION, NoteColumns.PARENT_ID + "=?", new String[] { + folderId + }, null); + + if (notesCursor != null) { + if (notesCursor.moveToFirst()) { + do { + // Print note's last modified date ps里面保存有这份note的日期 + ps.println(String.format(getFormat(FORMAT_NOTE_DATE), DateFormat.format( + mContext.getString(R.string.format_datetime_mdhm), + notesCursor.getLong(NOTE_COLUMN_MODIFIED_DATE)))); + // Query data belong to this note + String noteId = notesCursor.getString(NOTE_COLUMN_ID); + exportNoteToText(noteId, ps); //将文件导出到text + } while (notesCursor.moveToNext()); + } + notesCursor.close(); + } + } + + /** + * Export note identified by id to a print stream + */ + private void exportNoteToText(String noteId, PrintStream ps) { + Cursor dataCursor = mContext.getContentResolver().query(Notes.CONTENT_DATA_URI, + DATA_PROJECTION, DataColumns.NOTE_ID + "=?", new String[] { + noteId + }, null); + + if (dataCursor != null) { //利用光标来扫描内容,看是callnote或者note二者中的哪一个,靠ps.printline输出 + if (dataCursor.moveToFirst()) { + do { + String mimeType = dataCursor.getString(DATA_COLUMN_MIME_TYPE); + if (DataConstants.CALL_NOTE.equals(mimeType)) { + // Print phone number 输出电话号 + String phoneNumber = dataCursor.getString(DATA_COLUMN_PHONE_NUMBER); + long callDate = dataCursor.getLong(DATA_COLUMN_CALL_DATE); + String location = dataCursor.getString(DATA_COLUMN_CONTENT); + + if (!TextUtils.isEmpty(phoneNumber)) { //判断是否为空字符 + ps.println(String.format(getFormat(FORMAT_NOTE_CONTENT), + phoneNumber)); + } + // Print call date + ps.println(String.format(getFormat(FORMAT_NOTE_CONTENT), DateFormat + .format(mContext.getString(R.string.format_datetime_mdhm), + callDate))); + // Print call attachment location 打印调用附件位置 + if (!TextUtils.isEmpty(location)) { + ps.println(String.format(getFormat(FORMAT_NOTE_CONTENT), + location)); + } + } else if (DataConstants.NOTE.equals(mimeType)) { + String content = dataCursor.getString(DATA_COLUMN_CONTENT); + if (!TextUtils.isEmpty(content)) { + ps.println(String.format(getFormat(FORMAT_NOTE_CONTENT), + content)); + } + } + } while (dataCursor.moveToNext()); + } + dataCursor.close(); + } + // print a line separator between note 在注释间打印分隔符 + try { + ps.write(new byte[] { + Character.LINE_SEPARATOR, Character.LETTER_NUMBER + }); + } catch (IOException e) { + Log.e(TAG, e.toString()); + } + } + + /** + * Note will be exported as text which is user readable + */ + public int exportToText() { //总函数,调用上面的exportFolder和exportNote + if (!externalStorageAvailable()) { + Log.d(TAG, "Media was not mounted"); + return STATE_SD_CARD_UNMOUONTED; + } + + PrintStream ps = getExportToTextPrintStream(); + if (ps == null) { + Log.e(TAG, "get print stream error"); + return STATE_SYSTEM_ERROR; + } + // First export folder and its notes 导出文件夹里面包含的便签 + Cursor folderCursor = mContext.getContentResolver().query( + Notes.CONTENT_NOTE_URI, + NOTE_PROJECTION, + "(" + NoteColumns.TYPE + "=" + Notes.TYPE_FOLDER + " AND " + + NoteColumns.PARENT_ID + "<>" + Notes.ID_TRASH_FOLER + ") OR " + + NoteColumns.ID + "=" + Notes.ID_CALL_RECORD_FOLDER, null, null); + + if (folderCursor != null) { + if (folderCursor.moveToFirst()) { + do { + // Print folder's name + String folderName = ""; + if(folderCursor.getLong(NOTE_COLUMN_ID) == Notes.ID_CALL_RECORD_FOLDER) { + folderName = mContext.getString(R.string.call_record_folder_name); + } else { + folderName = folderCursor.getString(NOTE_COLUMN_SNIPPET); + } + if (!TextUtils.isEmpty(folderName)) { + ps.println(String.format(getFormat(FORMAT_FOLDER_NAME), folderName)); + } + String folderId = folderCursor.getString(NOTE_COLUMN_ID); + exportFolderToText(folderId, ps); + } while (folderCursor.moveToNext()); + } + folderCursor.close(); + } + + // Export notes in root's folder 将根目录里的便签导出 + Cursor noteCursor = mContext.getContentResolver().query( + Notes.CONTENT_NOTE_URI, + NOTE_PROJECTION, + NoteColumns.TYPE + "=" + +Notes.TYPE_NOTE + " AND " + NoteColumns.PARENT_ID + + "=0", null, null); + + if (noteCursor != null) { + if (noteCursor.moveToFirst()) { + do { + ps.println(String.format(getFormat(FORMAT_NOTE_DATE), DateFormat.format( + mContext.getString(R.string.format_datetime_mdhm), + noteCursor.getLong(NOTE_COLUMN_MODIFIED_DATE)))); + // Query data belong to this note 查询数据属于此备注 + String noteId = noteCursor.getString(NOTE_COLUMN_ID); + exportNoteToText(noteId, ps); + } while (noteCursor.moveToNext()); + } + noteCursor.close(); + } + ps.close(); + + return STATE_SUCCESS; + } + + /** + * Get a print stream pointed to the file {@generateExportedTextFile} + */ + private PrintStream getExportToTextPrintStream() { + File file = generateFileMountedOnSDcard(mContext, R.string.file_path, + R.string.file_name_txt_format); + if (file == null) { + Log.e(TAG, "create file to exported failed"); + return null; + } + mFileName = file.getName(); + mFileDirectory = mContext.getString(R.string.file_path); + PrintStream ps = null; + try { + FileOutputStream fos = new FileOutputStream(file); + ps = new PrintStream(fos); //将ps输出流输出到特定的文件 + } catch (FileNotFoundException e) { + e.printStackTrace(); + return null; + } catch (NullPointerException e) { + e.printStackTrace(); + return null; + } + return ps; + } + } + + /** + * Generate the text file to store imported data + */ + private static File generateFileMountedOnSDcard(Context context, int filePathResId, int fileNameFormatResId) { + StringBuilder sb = new StringBuilder(); + sb.append(Environment.getExternalStorageDirectory()); //SD卡的存储路径 + sb.append(context.getString(filePathResId)); //文件的存储路径 + File filedir = new File(sb.toString()); //filedir应该就是用来存储路径信息 + sb.append(context.getString( + fileNameFormatResId, + DateFormat.format(context.getString(R.string.format_date_ymd), + System.currentTimeMillis()))); + File file = new File(sb.toString()); + + try { //如果这些文件不存在,则新建 + if (!filedir.exists()) { + filedir.mkdir(); + } + if (!file.exists()) { + file.createNewFile(); + } + return file; + } catch (SecurityException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } +// try catch 异常处理 + return null; + } +} + \ No newline at end of file diff --git a/doc/210340038张卓杨/tool类/DataUtils.txt b/doc/210340038张卓杨/tool类/DataUtils.txt new file mode 100644 index 0000000..858cbf6 --- /dev/null +++ b/doc/210340038张卓杨/tool类/DataUtils.txt @@ -0,0 +1,264 @@ +DataUtils: + +package net.micode.notes.tool; + +public class DataUtils { + public static final String TAG = "DataUtils"; + public static boolean batchDeleteNotes(ContentResolver resolver, HashSet ids) { //删除多个笔记 + if (ids == null) { + Log.d(TAG, "the ids is null"); + return true; + } + if (ids.size() == 0) { + Log.d(TAG, "no id is in the hashset"); + return true; + } + + ArrayList operationList = new ArrayList(); //提供一个任务列表 + for (long id : ids) { + if(id == Notes.ID_ROOT_FOLDER) { + Log.e(TAG, "Don't delete system folder root"); + continue; + } //如果发现是根文件夹,则不删除 + ContentProviderOperation.Builder builder = ContentProviderOperation + .newDelete(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, id)); //用newDelete实现删除功能 + operationList.add(builder.build()); // + } + try { + ContentProviderResult[] results = resolver.applyBatch(Notes.AUTHORITY, operationList);//Authority用于唯一标识这个ContentProvider,外部调用者可以根据这个标识来找到它。 + if (results == null || results.length == 0 || results[0] == null) { + Log.d(TAG, "delete notes failed, ids:" + ids.toString()); + return false; + } + return true; + } catch (RemoteException e) { + Log.e(TAG, String.format("%s: %s", e.toString(), e.getMessage())); + } catch (OperationApplicationException e) { + Log.e(TAG, String.format("%s: %s", e.toString(), e.getMessage())); + } + return false; + } + + public static void moveNoteToFoler(ContentResolver resolver, long id, long srcFolderId, long desFolderId) { + ContentValues values = new ContentValues(); + values.put(NoteColumns.PARENT_ID, desFolderId); + values.put(NoteColumns.ORIGIN_PARENT_ID, srcFolderId); + values.put(NoteColumns.LOCAL_MODIFIED, 1); + resolver.update(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, id), values, null, null); //对需要移动的便签进行数据更新,然后用update实现 + } + + public static boolean batchMoveToFolder(ContentResolver resolver, HashSet ids, + long folderId) { + if (ids == null) { + Log.d(TAG, "the ids is null"); + return true; + } + + ArrayList operationList = new ArrayList(); + for (long id : ids) { + ContentProviderOperation.Builder builder = ContentProviderOperation + .newUpdate(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, id)); //通过withAppendedId方法,为该Uri加上ID + builder.withValue(NoteColumns.PARENT_ID, folderId); + builder.withValue(NoteColumns.LOCAL_MODIFIED, 1); + operationList.add(builder.build()); + }//将ids里包含的每一列的数据逐次加入到operationList中,等待最后的批量处理 + + try { + ContentProviderResult[] results = resolver.applyBatch(Notes.AUTHORITY, operationList); //applyBatch一次性处理一个操作列表 + if (results == null || results.length == 0 || results[0] == null) { + Log.d(TAG, "delete notes failed, ids:" + ids.toString()); + return false; + } + return true; + } catch (RemoteException e) { + Log.e(TAG, String.format("%s: %s", e.toString(), e.getMessage())); + } catch (OperationApplicationException e) { + Log.e(TAG, String.format("%s: %s", e.toString(), e.getMessage())); + } + return false; + } + + /** + * Get the all folder count except system folders {@link Notes#TYPE_SYSTEM}} + */ + public static int getUserFolderCount(ContentResolver resolver) { + Cursor cursor =resolver.query(Notes.CONTENT_NOTE_URI, + new String[] { "COUNT(*)" }, + NoteColumns.TYPE + "=? AND " + NoteColumns.PARENT_ID + "<>?", + new String[] { String.valueOf(Notes.TYPE_FOLDER), String.valueOf(Notes.ID_TRASH_FOLER)}, + null); //筛选条件:源文件不为trash folder + + int count = 0; + if(cursor != null) { + if(cursor.moveToFirst()) { + try { + count = cursor.getInt(0); + } catch (IndexOutOfBoundsException e) { + Log.e(TAG, "get folder count failed:" + e.toString()); + } finally { + cursor.close(); + } + } + } + return count; + } + + public static boolean visibleInNoteDatabase(ContentResolver resolver, long noteId, int type) { + Cursor cursor = resolver.query(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, noteId), //通过withAppendedId方法,为该Uri加上ID + null, + NoteColumns.TYPE + "=? AND " + NoteColumns.PARENT_ID + "<>" + Notes.ID_TRASH_FOLER, + new String [] {String.valueOf(type)}, + null); //查询条件:type符合,且不属于垃圾文件夹 + + boolean exist = false; + if (cursor != null) { + if (cursor.getCount() > 0) {//用getcount函数判断cursor是否为空 + exist = true; + } + cursor.close(); + } + return exist; + } + + public static boolean existInNoteDatabase(ContentResolver resolver, long noteId) { + Cursor cursor = resolver.query(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, noteId), + null, null, null, null); + + boolean exist = false; + if (cursor != null) { + if (cursor.getCount() > 0) { + exist = true; + } + cursor.close(); + } + return exist; + } + + public static boolean existInDataDatabase(ContentResolver resolver, long dataId) { + Cursor cursor = resolver.query(ContentUris.withAppendedId(Notes.CONTENT_DATA_URI, dataId), + null, null, null, null); + + boolean exist = false; + if (cursor != null) { + if (cursor.getCount() > 0) { + exist = true; + } + cursor.close(); + } + return exist; + } + + public static boolean checkVisibleFolderName(ContentResolver resolver, String name) { + Cursor cursor = resolver.query(Notes.CONTENT_NOTE_URI, null, + NoteColumns.TYPE + "=" + Notes.TYPE_FOLDER + + " AND " + NoteColumns.PARENT_ID + "<>" + Notes.ID_TRASH_FOLER + + " AND " + NoteColumns.SNIPPET + "=?", + new String[] { name }, null); + //通过名字查询文件是否存在 + boolean exist = false; + if(cursor != null) { + if(cursor.getCount() > 0) { + exist = true; + } + cursor.close(); + } + return exist; + } + + public static HashSet getFolderNoteWidget(ContentResolver resolver, long folderId) { + Cursor c = resolver.query(Notes.CONTENT_NOTE_URI, + new String[] { NoteColumns.WIDGET_ID, NoteColumns.WIDGET_TYPE }, + NoteColumns.PARENT_ID + "=?", + new String[] { String.valueOf(folderId) }, + null); //查询条件:父ID是传入的folderId; + + HashSet set = null; + if (c != null) { + if (c.moveToFirst()) { + set = new HashSet(); + do { + try { + AppWidgetAttribute widget = new AppWidgetAttribute(); + widget.widgetId = c.getInt(0); //0对应的NoteColumns.WIDGET_ID + widget.widgetType = c.getInt(1); //1对应的NoteColumns.WIDGET_TYPE + set.add(widget); + } catch (IndexOutOfBoundsException e) { + Log.e(TAG, e.toString()); + } + } while (c.moveToNext()); //查询下一条 + } + c.close(); + } + return set; + } + + public static String getCallNumberByNoteId(ContentResolver resolver, long noteId) { + Cursor cursor = resolver.query(Notes.CONTENT_DATA_URI, + new String [] { CallNote.PHONE_NUMBER }, + CallNote.NOTE_ID + "=? AND " + CallNote.MIME_TYPE + "=?", + new String [] { String.valueOf(noteId), CallNote.CONTENT_ITEM_TYPE }, + null); + + if (cursor != null && cursor.moveToFirst()) { + try { + return cursor.getString(0); + } catch (IndexOutOfBoundsException e) { + Log.e(TAG, "Get call number fails " + e.toString()); + } finally { + cursor.close(); + } + } + return ""; + } + + public static long getNoteIdByPhoneNumberAndCallDate(ContentResolver resolver, String phoneNumber, long callDate) { + Cursor cursor = resolver.query(Notes.CONTENT_DATA_URI, + new String [] { CallNote.NOTE_ID }, + CallNote.CALL_DATE + "=? AND " + CallNote.MIME_TYPE + "=? AND PHONE_NUMBERS_EQUAL(" + + CallNote.PHONE_NUMBER + ",?)", + new String [] { String.valueOf(callDate), CallNote.CONTENT_ITEM_TYPE, phoneNumber }, + null); + //通过数据库操作,查询条件是(callDate和phoneNumber匹配传入参数的值) + + if (cursor != null) { + if (cursor.moveToFirst()) { + try { + return cursor.getLong(0); //0对应的CallNote.NOTE_ID + } catch (IndexOutOfBoundsException e) { + Log.e(TAG, "Get call note id fails " + e.toString()); + } + } + cursor.close(); + } + return 0; + } + + public static String getSnippetById(ContentResolver resolver, long noteId) { + Cursor cursor = resolver.query(Notes.CONTENT_NOTE_URI, + new String [] { NoteColumns.SNIPPET }, + NoteColumns.ID + "=?", + new String [] { String.valueOf(noteId)}, + null);//查询条件:noteId + + if (cursor != null) { + String snippet = ""; + if (cursor.moveToFirst()) { + snippet = cursor.getString(0); + } + cursor.close(); + return snippet; + } + throw new IllegalArgumentException("Note is not found with id: " + noteId); + } + public static String getFormattedSnippet(String snippet) { //对字符串进行格式处理,将字符串两头的空格去掉,同时将换行符去掉 + if (snippet != null) { + snippet = snippet.trim(); + int index = snippet.indexOf('\n'); + if (index != -1) { + snippet = snippet.substring(0, index); + } + } + return snippet; + } + +} \ No newline at end of file diff --git a/doc/210340038张卓杨/tool类/GTaskStringUtils.txt b/doc/210340038张卓杨/tool类/GTaskStringUtils.txt new file mode 100644 index 0000000..71a0694 --- /dev/null +++ b/doc/210340038张卓杨/tool类/GTaskStringUtils.txt @@ -0,0 +1,100 @@ +GTaskStringUtils: + +package net.micode.notes.tool; + +//定义了很多的静态字符串,目的就是为了提供jsonObject中相应字符串的钥匙。 +public class GTaskStringUtils { + + public final static String GTASK_JSON_ACTION_ID = "action_id"; + + public final static String GTASK_JSON_ACTION_LIST = "action_list"; + + public final static String GTASK_JSON_ACTION_TYPE = "action_type"; + + public final static String GTASK_JSON_ACTION_TYPE_CREATE = "create"; + + public final static String GTASK_JSON_ACTION_TYPE_GETALL = "get_all"; + + public final static String GTASK_JSON_ACTION_TYPE_MOVE = "move"; + + public final static String GTASK_JSON_ACTION_TYPE_UPDATE = "update"; + + public final static String GTASK_JSON_CREATOR_ID = "creator_id"; + + public final static String GTASK_JSON_CHILD_ENTITY = "child_entity"; + + public final static String GTASK_JSON_CLIENT_VERSION = "client_version"; + + public final static String GTASK_JSON_COMPLETED = "completed"; + + public final static String GTASK_JSON_CURRENT_LIST_ID = "current_list_id"; + + public final static String GTASK_JSON_DEFAULT_LIST_ID = "default_list_id"; + + public final static String GTASK_JSON_DELETED = "deleted"; + + public final static String GTASK_JSON_DEST_LIST = "dest_list"; + + public final static String GTASK_JSON_DEST_PARENT = "dest_parent"; + + public final static String GTASK_JSON_DEST_PARENT_TYPE = "dest_parent_type"; + + public final static String GTASK_JSON_ENTITY_DELTA = "entity_delta"; + + public final static String GTASK_JSON_ENTITY_TYPE = "entity_type"; + + public final static String GTASK_JSON_GET_DELETED = "get_deleted"; + + public final static String GTASK_JSON_ID = "id"; + + public final static String GTASK_JSON_INDEX = "index"; + + public final static String GTASK_JSON_LAST_MODIFIED = "last_modified"; + + public final static String GTASK_JSON_LATEST_SYNC_POINT = "latest_sync_point"; + + public final static String GTASK_JSON_LIST_ID = "list_id"; + + public final static String GTASK_JSON_LISTS = "lists"; + + public final static String GTASK_JSON_NAME = "name"; + + public final static String GTASK_JSON_NEW_ID = "new_id"; + + public final static String GTASK_JSON_NOTES = "notes"; + + public final static String GTASK_JSON_PARENT_ID = "parent_id"; + + public final static String GTASK_JSON_PRIOR_SIBLING_ID = "prior_sibling_id"; + + public final static String GTASK_JSON_RESULTS = "results"; + + public final static String GTASK_JSON_SOURCE_LIST = "source_list"; + + public final static String GTASK_JSON_TASKS = "tasks"; + + public final static String GTASK_JSON_TYPE = "type"; + + public final static String GTASK_JSON_TYPE_GROUP = "GROUP"; + + public final static String GTASK_JSON_TYPE_TASK = "TASK"; + + public final static String GTASK_JSON_USER = "user"; + + public final static String MIUI_FOLDER_PREFFIX = "[MIUI_Notes]"; + + public final static String FOLDER_DEFAULT = "Default"; + + public final static String FOLDER_CALL_NOTE = "Call_Note"; + + public final static String FOLDER_META = "METADATA"; + + public final static String META_HEAD_GTASK_ID = "meta_gid"; + + public final static String META_HEAD_NOTE = "meta_note"; + + public final static String META_HEAD_DATA = "meta_data"; + + public final static String META_NOTE_NAME = "[META INFO] DON'T UPDATE AND DELETE"; + +} \ No newline at end of file diff --git a/doc/210340038张卓杨/tool类/ResourceParser.txt b/doc/210340038张卓杨/tool类/ResourceParser.txt new file mode 100644 index 0000000..5750ec3 --- /dev/null +++ b/doc/210340038张卓杨/tool类/ResourceParser.txt @@ -0,0 +1,163 @@ +ResourceParser: + +package net.micode.notes.tool; + +public class ResourceParser { + + public static final int YELLOW = 0; + public static final int BLUE = 1; + public static final int WHITE = 2; + public static final int GREEN = 3; + public static final int RED = 4; + + public static final int BG_DEFAULT_COLOR = YELLOW; + + public static final int TEXT_SMALL = 0; + public static final int TEXT_MEDIUM = 1; + public static final int TEXT_LARGE = 2; + public static final int TEXT_SUPER = 3; + + public static final int BG_DEFAULT_FONT_SIZE = TEXT_MEDIUM; + + public static class NoteBgResources { + private final static int [] BG_EDIT_RESOURCES = new int [] { + R.drawable.edit_yellow, + R.drawable.edit_blue, + R.drawable.edit_white, + R.drawable.edit_green, + R.drawable.edit_red + //R.drawable 图片资源 + }; + + private final static int [] BG_EDIT_TITLE_RESOURCES = new int [] { + R.drawable.edit_title_yellow, + R.drawable.edit_title_blue, + R.drawable.edit_title_white, + R.drawable.edit_title_green, + R.drawable.edit_title_red + }; + + public static int getNoteBgResource(int id) { + return BG_EDIT_RESOURCES[id]; + } + + public static int getNoteTitleBgResource(int id) { + return BG_EDIT_TITLE_RESOURCES[id]; + } + } + //获取默认的背景颜色 + public static int getDefaultBgId(Context context) { + if (PreferenceManager.getDefaultSharedPreferences(context).getBoolean( + NotesPreferenceActivity.PREFERENCE_SET_BG_COLOR_KEY, false)) { + return (int) (Math.random() * NoteBgResources.BG_EDIT_RESOURCES.length); + } else { + return BG_DEFAULT_COLOR; + } + } + + public static class NoteItemBgResources { + private final static int [] BG_FIRST_RESOURCES = new int [] { + R.drawable.list_yellow_up, + R.drawable.list_blue_up, + R.drawable.list_white_up, + R.drawable.list_green_up, + R.drawable.list_red_up + }; + + private final static int [] BG_NORMAL_RESOURCES = new int [] { + R.drawable.list_yellow_middle, + R.drawable.list_blue_middle, + R.drawable.list_white_middle, + R.drawable.list_green_middle, + R.drawable.list_red_middle + }; + + private final static int [] BG_LAST_RESOURCES = new int [] { + R.drawable.list_yellow_down, + R.drawable.list_blue_down, + R.drawable.list_white_down, + R.drawable.list_green_down, + R.drawable.list_red_down, + }; + + private final static int [] BG_SINGLE_RESOURCES = new int [] { + R.drawable.list_yellow_single, + R.drawable.list_blue_single, + R.drawable.list_white_single, + R.drawable.list_green_single, + R.drawable.list_red_single + }; + + public static int getNoteBgFirstRes(int id) { + return BG_FIRST_RESOURCES[id]; + } + + public static int getNoteBgLastRes(int id) { + return BG_LAST_RESOURCES[id]; + } + + public static int getNoteBgSingleRes(int id) { + return BG_SINGLE_RESOURCES[id]; + } + + public static int getNoteBgNormalRes(int id) { + return BG_NORMAL_RESOURCES[id]; + } + + public static int getFolderBgRes() { + return R.drawable.list_folder; + } + } + + public static class WidgetBgResources { + private final static int [] BG_2X_RESOURCES = new int [] { + R.drawable.widget_2x_yellow, + R.drawable.widget_2x_blue, + R.drawable.widget_2x_white, + R.drawable.widget_2x_green, + R.drawable.widget_2x_red, + }; + + public static int getWidget2xBgResource(int id) { + return BG_2X_RESOURCES[id]; + } + + private final static int [] BG_4X_RESOURCES = new int [] { + R.drawable.widget_4x_yellow, + R.drawable.widget_4x_blue, + R.drawable.widget_4x_white, + R.drawable.widget_4x_green, + R.drawable.widget_4x_red + }; + + public static int getWidget4xBgResource(int id) { + return BG_4X_RESOURCES[id]; + } + } + + public static class TextAppearanceResources { + private final static int [] TEXTAPPEARANCE_RESOURCES = new int [] { + R.style.TextAppearanceNormal, + R.style.TextAppearanceMedium, + R.style.TextAppearanceLarge, + R.style.TextAppearanceSuper + }; + + //一个防止输入的id大于资源总量的函数,若是大于,则自动返回默认的设置结果 + public static int getTexAppearanceResource(int id) { + /** + * HACKME: Fix bug of store the resource id in shared preference. + * The id may larger than the length of resources, in this case, + * return the {@link ResourceParser#BG_DEFAULT_FONT_SIZE} + */ + if (id >= TEXTAPPEARANCE_RESOURCES.length) { + return BG_DEFAULT_FONT_SIZE; + } + return TEXTAPPEARANCE_RESOURCES[id]; + } + + public static int getResourcesSize() { + return TEXTAPPEARANCE_RESOURCES.length; + } + } +} \ No newline at end of file diff --git a/doc/210340038张卓杨/widget类/NoteWidgetProvider.txt b/doc/210340038张卓杨/widget类/NoteWidgetProvider.txt new file mode 100644 index 0000000..4a991cc --- /dev/null +++ b/doc/210340038张卓杨/widget类/NoteWidgetProvider.txt @@ -0,0 +1,118 @@ +NoteWidgetProvider: + +package net.micode.notes.widget; +import android.app.PendingIntent; +import android.appwidget.AppWidgetManager; +import android.appwidget.AppWidgetProvider; +import android.content.ContentValues; +import android.content.Context; +import android.content.Intent; +import android.database.Cursor; +import android.util.Log; +import android.widget.RemoteViews; + +import net.micode.notes.R; +import net.micode.notes.data.Notes; +import net.micode.notes.data.Notes.NoteColumns; +import net.micode.notes.tool.ResourceParser; +import net.micode.notes.ui.NoteEditActivity; +import net.micode.notes.ui.NotesListActivity; + +public abstract class NoteWidgetProvider extends AppWidgetProvider { + public static final String [] PROJECTION = new String [] { + NoteColumns.ID, + NoteColumns.BG_COLOR_ID, + NoteColumns.SNIPPET + };//小米便签的桌面挂件 + + public static final int COLUMN_ID = 0; + public static final int COLUMN_BG_COLOR_ID = 1; + public static final int COLUMN_SNIPPET = 2; + + private static final String TAG = "NoteWidgetProvider"; + + @Override + public void onDeleted(Context context, int[] appWidgetIds) { + ContentValues values = new ContentValues(); + values.put(NoteColumns.WIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); + for (int i = 0; i < appWidgetIds.length; i++) { + context.getContentResolver().update(Notes.CONTENT_NOTE_URI, + values, + NoteColumns.WIDGET_ID + "=?", + new String[] { String.valueOf(appWidgetIds[i])}); + } + } + + private Cursor getNoteWidgetInfo(Context context, int widgetId) { + return context.getContentResolver().query(Notes.CONTENT_NOTE_URI, + PROJECTION, + NoteColumns.WIDGET_ID + "=? AND " + NoteColumns.PARENT_ID + "<>?", + new String[] { String.valueOf(widgetId), String.valueOf(Notes.ID_TRASH_FOLER) }, + null); + } + + protected void update(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { + update(context, appWidgetManager, appWidgetIds, false); + } + + private void update(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds, + boolean privacyMode) { + for (int i = 0; i < appWidgetIds.length; i++) { + if (appWidgetIds[i] != AppWidgetManager.INVALID_APPWIDGET_ID) { + int bgId = ResourceParser.getDefaultBgId(context); + String snippet = ""; + Intent intent = new Intent(context, NoteEditActivity.class); + intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); + intent.putExtra(Notes.INTENT_EXTRA_WIDGET_ID, appWidgetIds[i]); + intent.putExtra(Notes.INTENT_EXTRA_WIDGET_TYPE, getWidgetType()); + + Cursor c = getNoteWidgetInfo(context, appWidgetIds[i]); + if (c != null && c.moveToFirst()) { + if (c.getCount() > 1) { + Log.e(TAG, "Multiple message with same widget id:" + appWidgetIds[i]); + c.close(); + return; + } + snippet = c.getString(COLUMN_SNIPPET); + bgId = c.getInt(COLUMN_BG_COLOR_ID); + intent.putExtra(Intent.EXTRA_UID, c.getLong(COLUMN_ID)); + intent.setAction(Intent.ACTION_VIEW); + } else { + snippet = context.getResources().getString(R.string.widget_havenot_content); + intent.setAction(Intent.ACTION_INSERT_OR_EDIT); + } + + if (c != null) { + c.close(); + } + + RemoteViews rv = new RemoteViews(context.getPackageName(), getLayoutId()); + rv.setImageViewResource(R.id.widget_bg_image, getBgResourceId(bgId)); + intent.putExtra(Notes.INTENT_EXTRA_BACKGROUND_ID, bgId); + /** + * Generate the pending intent to start host for the widget + */ + PendingIntent pendingIntent = null; + if (privacyMode) { + rv.setTextViewText(R.id.widget_text, + context.getString(R.string.widget_under_visit_mode)); + pendingIntent = PendingIntent.getActivity(context, appWidgetIds[i], new Intent( + context, NotesListActivity.class), PendingIntent.FLAG_UPDATE_CURRENT); + } else { + rv.setTextViewText(R.id.widget_text, snippet); + pendingIntent = PendingIntent.getActivity(context, appWidgetIds[i], intent, + PendingIntent.FLAG_UPDATE_CURRENT); + } + + rv.setOnClickPendingIntent(R.id.widget_text, pendingIntent); + appWidgetManager.updateAppWidget(appWidgetIds[i], rv); + } + } + } + + protected abstract int getBgResourceId(int bgId); + + protected abstract int getLayoutId(); + + protected abstract int getWidgetType(); +} \ No newline at end of file diff --git a/doc/210340038张卓杨/widget类/NoteWidgetProvider_2x.txt b/doc/210340038张卓杨/widget类/NoteWidgetProvider_2x.txt new file mode 100644 index 0000000..e21533f --- /dev/null +++ b/doc/210340038张卓杨/widget类/NoteWidgetProvider_2x.txt @@ -0,0 +1,34 @@ +NoteWidgetProvider_2x: + +package net.micode.notes.widget; + +import android.appwidget.AppWidgetManager; +import android.content.Context; + +import net.micode.notes.R; +import net.micode.notes.data.Notes; +import net.micode.notes.tool.ResourceParser; + + +public class NoteWidgetProvider_2x extends NoteWidgetProvider { + //2倍大小的桌面挂件 + @Override + public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { + super.update(context, appWidgetManager, appWidgetIds); + } + + @Override + protected int getLayoutId() { + return R.layout.widget_2x; + } + + @Override + protected int getBgResourceId(int bgId) { + return ResourceParser.WidgetBgResources.getWidget2xBgResource(bgId); + } + + @Override + protected int getWidgetType() { + return Notes.TYPE_WIDGET_2X; + } +} diff --git a/doc/210340038张卓杨/widget类/NoteWidgetProvider_4x.txt b/doc/210340038张卓杨/widget类/NoteWidgetProvider_4x.txt new file mode 100644 index 0000000..8690867 --- /dev/null +++ b/doc/210340038张卓杨/widget类/NoteWidgetProvider_4x.txt @@ -0,0 +1,33 @@ +NoteWidgetProvider_4x: + +package net.micode.notes.widget; + +import android.appwidget.AppWidgetManager; +import android.content.Context; + +import net.micode.notes.R; +import net.micode.notes.data.Notes; +import net.micode.notes.tool.ResourceParser; + + +public class NoteWidgetProvider_4x extends NoteWidgetProvider { + //4倍大小的桌面挂件 + @Override + public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { + super.update(context, appWidgetManager, appWidgetIds); + } + + protected int getLayoutId() { + return R.layout.widget_4x; + } + + @Override + protected int getBgResourceId(int bgId) { + return ResourceParser.WidgetBgResources.getWidget4xBgResource(bgId); + } + + @Override + protected int getWidgetType() { + return Notes.TYPE_WIDGET_4X; + } +} diff --git a/doc/软件工程.docx b/doc/软件工程.docx new file mode 100644 index 0000000000000000000000000000000000000000..04969386c6d6e942d203a0783853e3da29e80ae8 GIT binary patch literal 277948 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 z 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%0A54as}7VgI2q54-S%tLR+X#miWm*I=N z!TG z5U}!pDWCtU{{OoK)LA@u@6`TZCqGUDzM$cGY8=5HvPR|Pp{EGkrLInKraCA0fHn%r1H#4(#uykQ|v@=&Wu`xGwWo0t4cIW^Y z-1POws3POe`V)e)5A=LxBiPB9M5`b`0Rx#7R6cvYzP<*6zv2Q(AwR)b;W?0uJu#vQ zPzK|XgDDZ<5NZ*Ah;)P(pwW(?Lzy5{-v}VnA-DM-LctLD%XAtqfUE9;Fv{TIe&9Oe zs5a1&!vR=XSjpbQ>XBej0_LL;rbWJv*)Tvh69(f$w2-+-AexB}Fja`imVM*B3~91( zZR)659v1wWNHIY!rD?7(jh3>YxwJCz?i@CVdIRay+BcADT61VrBUpXZ*Z!DWu29i^7fh|{>~=vAa- z4a)eR-X};>Z}{Sv#d<<3o^ufWn9X_np5W_hDm2K)_J^K_IrM{MqJ^|96D}j7ClS zwHF`e-!+kp6Yzf-NKmjqlWD7e?jZhmf4;&4un^#Nm?)5O3{9aMsQ-#lp?U*m1(qKy z31SXMPwWZ)UoIMSpZ`_UPv*}Sl7ie7@L#Uv2%�Rb~c70Kuyhu-?HF}>kw+jzvd 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 Date: Wed, 19 Apr 2023 20:13:56 +0800 Subject: [PATCH 2/6] Squashed commit of the following: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit commit a6c1e465e40c5c34a18388b6714e9ee29fb77d1c Merge: 9b42789 42384aa Author: pf6tfm8hg <2819428065@qq.com> Date: Wed Apr 19 19:50:39 2023 +0800 Merge pull request '1' (#4) from dev-1 into zzy-branch commit 42384aac835f673c9f851babc6e5e7f401cba673 Merge: 33d2919 548abb3 Author: pf6tfm8hg <2819428065@qq.com> Date: Wed Apr 19 19:49:41 2023 +0800 Merge pull request '陈荣浩精读' (#3) from crh_branch into dev-1 commit 548abb34a372012fd9291131879abd3148f73c32 Author: 陈荣浩 <1652154670@qq.com> Date: Wed Apr 19 19:13:58 2023 +0800 2 commit af332a0b83fe86cc6ead5ff255fc6cfa6d66ac36 Author: 陈荣浩 <1652154670@qq.com> Date: Wed Apr 19 18:59:20 2023 +0800 精读notes包model包,gtask包exception文件 commit 9b4278994ec02896563aa11a2449b9c3e3a27923 Author: pyote5ckf <2424012376@qq.com> Date: Mon Apr 17 21:45:54 2023 +0800 ADD file via upload commit 33d291958591177c302bffd25cc9bb1bd3ce7c20 Merge: e76723e 7627b24 Author: pf6tfm8hg <2819428065@qq.com> Date: Fri Mar 31 14:40:42 2023 +0800 Merge pull request '111' (#1) from crh_branch into dev-1 commit 7627b24b7be2b680adec2e3c1c263423ac7d1ef9 Author: 陈荣浩 <1652154670@qq.com> Date: Fri Mar 31 14:38:43 2023 +0800 111 --- .idea/.gitignore | 3 + .idea/cyxgitProject.iml | 9 + .idea/modules.xml | 8 + .idea/vcs.xml | 6 + .../.gradle/7.5/fileHashes/fileHashes.bin | Bin 42647 -> 42747 bytes .../.gradle/7.5/fileHashes/fileHashes.lock | Bin 17 -> 17 bytes Notes-master/.idea/compiler.xml | 2 +- Notes-master/.idea/gradle.xml | 2 +- Notes-master/.idea/misc.xml | 2 +- Notes-master/.idea/vcs.xml | 6 + .../java/net/micode/notes/data/Contact.java | 14 +- .../java/net/micode/notes/data/Notes.java | 110 +++-- .../notes/data/NotesDatabaseHelper.java | 273 ++++++------ .../net/micode/notes/data/NotesProvider.java | 79 ++-- .../exception/ActionFailureException.java | 17 +- .../exception/NetworkFailureException.java | 18 +- .../java/net/micode/notes/model/Note.java | 58 +-- .../net/micode/notes/model/WorkingNote.java | 96 +++-- Notes-master/local.properties | 7 +- doc/210340002陈荣浩/data/Contact.java | 81 ++++ doc/210340002陈荣浩/data/Notes.java | 303 ++++++++++++++ .../data/NotesDatabaseHelper.java | 349 ++++++++++++++++ .../data/NotesProvider.java | 320 ++++++++++++++ doc/210340002陈荣浩/model/Note.java | 255 ++++++++++++ doc/210340002陈荣浩/model/WorkingNote.java | 392 ++++++++++++++++++ e76723e5a7 | 0 26 files changed, 2114 insertions(+), 296 deletions(-) create mode 100644 .idea/.gitignore create mode 100644 .idea/cyxgitProject.iml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml create mode 100644 Notes-master/.idea/vcs.xml create mode 100644 doc/210340002陈荣浩/data/Contact.java create mode 100644 doc/210340002陈荣浩/data/Notes.java create mode 100644 doc/210340002陈荣浩/data/NotesDatabaseHelper.java create mode 100644 doc/210340002陈荣浩/data/NotesProvider.java create mode 100644 doc/210340002陈荣浩/model/Note.java create mode 100644 doc/210340002陈荣浩/model/WorkingNote.java create mode 100644 e76723e5a7 diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/cyxgitProject.iml b/.idea/cyxgitProject.iml new file mode 100644 index 0000000..d6ebd48 --- /dev/null +++ b/.idea/cyxgitProject.iml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..d52c2e0 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Notes-master/.gradle/7.5/fileHashes/fileHashes.bin b/Notes-master/.gradle/7.5/fileHashes/fileHashes.bin index 47f3a10f07b5968ce47b8f6144ca1ba9664d3647..25d4aeb7f24fc57a6ff08e06bd543ab17d0a63de 100644 GIT binary patch delta 116 zcmbP!mg)CdrVS<%j88Y4N+` - + \ No newline at end of file diff --git a/Notes-master/.idea/gradle.xml b/Notes-master/.idea/gradle.xml index cbbe561..a0de2a1 100644 --- a/Notes-master/.idea/gradle.xml +++ b/Notes-master/.idea/gradle.xml @@ -7,7 +7,7 @@

Type: INTEGER (long)

*/ - public static final String PARENT_ID = "parent_id"; + public static final String PARENT_ID = "parent_id";//为什么会有parent_id /** * Created data for note or folder @@ -140,7 +147,7 @@ public class Notes { * The last sync id *

Type: INTEGER (long)

*/ - public static final String SYNC_ID = "sync_id"; + public static final String SYNC_ID = "sync_id";//同步 /** * Sign to indicate local modified or not @@ -165,8 +172,9 @@ public class Notes { *

Type : INTEGER (long)

*/ public static final String VERSION = "version"; - } + }//这些常量主要是定义便签的属性的。 + // 定义DataColumns的常量,用于后面创建数据库的表头 public interface DataColumns { /** * The unique ID for a row @@ -206,41 +214,45 @@ public class Notes { /** - * Generic data column, the meaning is {@link #MIMETYPE} specific, used for + * Generic data column, the meaning is {@link #MIMETYPE} specific, + used for * integer data type *

Type: INTEGER

*/ public static final String DATA1 = "data1"; /** - * Generic data column, the meaning is {@link #MIMETYPE} specific, used for + * Generic data column, the meaning is {@link #MIMETYPE} specific, + used for * integer data type *

Type: INTEGER

*/ public static final String DATA2 = "data2"; /** - * Generic data column, the meaning is {@link #MIMETYPE} specific, used for + * Generic data column, the meaning is {@link #MIMETYPE} specific, + used for * TEXT data type *

Type: TEXT

*/ public static final String DATA3 = "data3"; /** - * Generic data column, the meaning is {@link #MIMETYPE} specific, used for + * Generic data column, the meaning is {@link #MIMETYPE} specific, + used for * TEXT data type *

Type: TEXT

*/ public static final String DATA4 = "data4"; /** - * Generic data column, the meaning is {@link #MIMETYPE} specific, used for + * Generic data column, the meaning is {@link #MIMETYPE} specific, + used for * TEXT data type *

Type: TEXT

*/ public static final String DATA5 = "data5"; - } - + }//主要是定义存储便签内容数据的 public static final class TextNote implements DataColumns { /** * Mode to indicate the text in check list mode or not @@ -250,12 +262,18 @@ public class Notes { public static final int MODE_CHECK_LIST = 1; - public static final String CONTENT_TYPE = "vnd.android.cursor.dir/text_note"; + public static final String CONTENT_TYPE = - public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/text_note"; + "vnd.android.cursor.dir/text_note"; - public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/text_note"); - } + public static final String CONTENT_ITEM_TYPE = + + "vnd.android.cursor.item/text_note"; + + public static final Uri CONTENT_URI = Uri.parse("content://" + + + AUTHORITY + "/text_note"); + }//文本内容的数据结构 public static final class CallNote implements DataColumns { /** @@ -270,10 +288,16 @@ public class Notes { */ public static final String PHONE_NUMBER = DATA3; - public static final String CONTENT_TYPE = "vnd.android.cursor.dir/call_note"; + public static final String CONTENT_TYPE = - public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/call_note"; + "vnd.android.cursor.dir/call_note"; - public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/call_note"); - } -} + public static final String CONTENT_ITEM_TYPE = + + "vnd.android.cursor.item/call_note"; + + public static final Uri CONTENT_URI = Uri.parse("content://" + + + AUTHORITY + "/call_note"); + }//电话内容的数据结构 +} \ No newline at end of file diff --git a/Notes-master/app/src/main/java/net/micode/notes/data/NotesDatabaseHelper.java b/Notes-master/app/src/main/java/net/micode/notes/data/NotesDatabaseHelper.java index ffe5d57..aa5a860 100644 --- a/Notes-master/app/src/main/java/net/micode/notes/data/NotesDatabaseHelper.java +++ b/Notes-master/app/src/main/java/net/micode/notes/data/NotesDatabaseHelper.java @@ -1,38 +1,22 @@ -/* - * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) - * - * 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 net.micode.notes.data; -import android.content.ContentValues; -import android.content.Context; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteOpenHelper; +import android.content.ContentValues;//就是用于保存一些数据(string boolean byte double float int long short ...)信息,这些信息可以被数据库操作时使用。 +import android.content.Context;//加载和访问资源。(android中主要是这两个功能,但是这里具体不清楚) +import android.database.sqlite.SQLiteDatabase;//主要提供了对应于添加、删除、更新、查询的操作方法: insert()、delete()、update()和query()。配合content.values +import android.database.sqlite.SQLiteOpenHelper;//用来管理数据的创建和版本更新 import android.util.Log; import net.micode.notes.data.Notes.DataColumns; import net.micode.notes.data.Notes.DataConstants; import net.micode.notes.data.Notes.NoteColumns; - +//数据库操作,用SQLOpenhelper,对一些note和文件进行数据库的操作,比如删除文件后,将文件里的note也相应删除 public class NotesDatabaseHelper extends SQLiteOpenHelper { private static final String DB_NAME = "note.db"; private static final int DB_VERSION = 4; - public interface TABLE { + public interface TABLE { //接口,分成note和data,在后面的程序里分别使用过 public static final String NOTE = "note"; public static final String DATA = "data"; @@ -43,179 +27,179 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { private static NotesDatabaseHelper mInstance; private static final String CREATE_NOTE_TABLE_SQL = - "CREATE TABLE " + TABLE.NOTE + "(" + - NoteColumns.ID + " INTEGER PRIMARY KEY," + - NoteColumns.PARENT_ID + " INTEGER NOT NULL DEFAULT 0," + - NoteColumns.ALERTED_DATE + " INTEGER NOT NULL DEFAULT 0," + - NoteColumns.BG_COLOR_ID + " INTEGER NOT NULL DEFAULT 0," + - NoteColumns.CREATED_DATE + " INTEGER NOT NULL DEFAULT (strftime('%s','now') * 1000)," + - NoteColumns.HAS_ATTACHMENT + " INTEGER NOT NULL DEFAULT 0," + - NoteColumns.MODIFIED_DATE + " INTEGER NOT NULL DEFAULT (strftime('%s','now') * 1000)," + - NoteColumns.NOTES_COUNT + " INTEGER NOT NULL DEFAULT 0," + - NoteColumns.SNIPPET + " TEXT NOT NULL DEFAULT ''," + - NoteColumns.TYPE + " INTEGER NOT NULL DEFAULT 0," + - NoteColumns.WIDGET_ID + " INTEGER NOT NULL DEFAULT 0," + - NoteColumns.WIDGET_TYPE + " INTEGER NOT NULL DEFAULT -1," + - NoteColumns.SYNC_ID + " INTEGER NOT NULL DEFAULT 0," + - NoteColumns.LOCAL_MODIFIED + " INTEGER NOT NULL DEFAULT 0," + - NoteColumns.ORIGIN_PARENT_ID + " INTEGER NOT NULL DEFAULT 0," + - NoteColumns.GTASK_ID + " TEXT NOT NULL DEFAULT ''," + - NoteColumns.VERSION + " INTEGER NOT NULL DEFAULT 0" + - ")"; + "CREATE TABLE " + TABLE.NOTE + "(" + + NoteColumns.ID + " INTEGER PRIMARY KEY," + + NoteColumns.PARENT_ID + " INTEGER NOT NULL DEFAULT 0," + + NoteColumns.ALERTED_DATE + " INTEGER NOT NULL DEFAULT 0," + + NoteColumns.BG_COLOR_ID + " INTEGER NOT NULL DEFAULT 0," + + NoteColumns.CREATED_DATE + " INTEGER NOT NULL DEFAULT (strftime('%s','now') * 1000)," + + NoteColumns.HAS_ATTACHMENT + " INTEGER NOT NULL DEFAULT 0," + + NoteColumns.MODIFIED_DATE + " INTEGER NOT NULL DEFAULT (strftime('%s','now') * 1000)," + + NoteColumns.NOTES_COUNT + " INTEGER NOT NULL DEFAULT 0," + + NoteColumns.SNIPPET + " TEXT NOT NULL DEFAULT ''," + + NoteColumns.TYPE + " INTEGER NOT NULL DEFAULT 0," + + NoteColumns.WIDGET_ID + " INTEGER NOT NULL DEFAULT 0," + + NoteColumns.WIDGET_TYPE + " INTEGER NOT NULL DEFAULT -1," + + NoteColumns.SYNC_ID + " INTEGER NOT NULL DEFAULT 0," + + NoteColumns.LOCAL_MODIFIED + " INTEGER NOT NULL DEFAULT 0," + + NoteColumns.ORIGIN_PARENT_ID + " INTEGER NOT NULL DEFAULT 0," + + NoteColumns.GTASK_ID + " TEXT NOT NULL DEFAULT ''," + + NoteColumns.VERSION + " INTEGER NOT NULL DEFAULT 0" + + ")";//数据库中需要存储的项目的名称,就相当于创建一个表格的表头的内容。 private static final String CREATE_DATA_TABLE_SQL = - "CREATE TABLE " + TABLE.DATA + "(" + - DataColumns.ID + " INTEGER PRIMARY KEY," + - DataColumns.MIME_TYPE + " TEXT NOT NULL," + - DataColumns.NOTE_ID + " INTEGER NOT NULL DEFAULT 0," + - NoteColumns.CREATED_DATE + " INTEGER NOT NULL DEFAULT (strftime('%s','now') * 1000)," + - NoteColumns.MODIFIED_DATE + " INTEGER NOT NULL DEFAULT (strftime('%s','now') * 1000)," + - DataColumns.CONTENT + " TEXT NOT NULL DEFAULT ''," + - DataColumns.DATA1 + " INTEGER," + - DataColumns.DATA2 + " INTEGER," + - DataColumns.DATA3 + " TEXT NOT NULL DEFAULT ''," + - DataColumns.DATA4 + " TEXT NOT NULL DEFAULT ''," + - DataColumns.DATA5 + " TEXT NOT NULL DEFAULT ''" + - ")"; + "CREATE TABLE " + TABLE.DATA + "(" + + DataColumns.ID + " INTEGER PRIMARY KEY," + + DataColumns.MIME_TYPE + " TEXT NOT NULL," + + DataColumns.NOTE_ID + " INTEGER NOT NULL DEFAULT 0," + + NoteColumns.CREATED_DATE + " INTEGER NOT NULL DEFAULT (strftime('%s','now') * 1000)," + + NoteColumns.MODIFIED_DATE + " INTEGER NOT NULL DEFAULT (strftime('%s','now') * 1000)," + + DataColumns.CONTENT + " TEXT NOT NULL DEFAULT ''," + + DataColumns.DATA1 + " INTEGER," + + DataColumns.DATA2 + " INTEGER," + + DataColumns.DATA3 + " TEXT NOT NULL DEFAULT ''," + + DataColumns.DATA4 + " TEXT NOT NULL DEFAULT ''," + + DataColumns.DATA5 + " TEXT NOT NULL DEFAULT ''" + + ")";//和上面的功能一样,主要是存储的项目不同 private static final String CREATE_DATA_NOTE_ID_INDEX_SQL = - "CREATE INDEX IF NOT EXISTS note_id_index ON " + - TABLE.DATA + "(" + DataColumns.NOTE_ID + ");"; + "CREATE INDEX IF NOT EXISTS note_id_index ON " + + TABLE.DATA + "(" + DataColumns.NOTE_ID + ");";//存储便签编号的一个数据表格 /** * Increase folder's note count when move note to the folder */ private static final String NOTE_INCREASE_FOLDER_COUNT_ON_UPDATE_TRIGGER = - "CREATE TRIGGER increase_folder_count_on_update "+ - " AFTER UPDATE OF " + NoteColumns.PARENT_ID + " ON " + TABLE.NOTE + - " BEGIN " + - " UPDATE " + TABLE.NOTE + - " SET " + NoteColumns.NOTES_COUNT + "=" + NoteColumns.NOTES_COUNT + " + 1" + - " WHERE " + NoteColumns.ID + "=new." + NoteColumns.PARENT_ID + ";" + - " END"; + "CREATE TRIGGER increase_folder_count_on_update "+ + " AFTER UPDATE OF " + NoteColumns.PARENT_ID + " ON " + TABLE.NOTE + + " BEGIN " + + " UPDATE " + TABLE.NOTE + + " SET " + NoteColumns.NOTES_COUNT + "=" + NoteColumns.NOTES_COUNT + " + 1" + + " WHERE " + NoteColumns.ID + "=new." + NoteColumns.PARENT_ID + ";" + + " END";//在文件夹中移入一个Note之后需要更改的数据的表格。 /** * Decrease folder's note count when move note from folder */ private static final String NOTE_DECREASE_FOLDER_COUNT_ON_UPDATE_TRIGGER = - "CREATE TRIGGER decrease_folder_count_on_update " + - " AFTER UPDATE OF " + NoteColumns.PARENT_ID + " ON " + TABLE.NOTE + - " BEGIN " + - " UPDATE " + TABLE.NOTE + - " SET " + NoteColumns.NOTES_COUNT + "=" + NoteColumns.NOTES_COUNT + "-1" + - " WHERE " + NoteColumns.ID + "=old." + NoteColumns.PARENT_ID + - " AND " + NoteColumns.NOTES_COUNT + ">0" + ";" + - " END"; + "CREATE TRIGGER decrease_folder_count_on_update " + + " AFTER UPDATE OF " + NoteColumns.PARENT_ID + " ON " + TABLE.NOTE + + " BEGIN " + + " UPDATE " + TABLE.NOTE + + " SET " + NoteColumns.NOTES_COUNT + "=" + NoteColumns.NOTES_COUNT + "-1" + + " WHERE " + NoteColumns.ID + "=old." + NoteColumns.PARENT_ID + + " AND " + NoteColumns.NOTES_COUNT + ">0" + ";" + + " END";//在文件夹中移出一个Note之后需要更改的数据的表格。 /** * Increase folder's note count when insert new note to the folder */ private static final String NOTE_INCREASE_FOLDER_COUNT_ON_INSERT_TRIGGER = - "CREATE TRIGGER increase_folder_count_on_insert " + - " AFTER INSERT ON " + TABLE.NOTE + - " BEGIN " + - " UPDATE " + TABLE.NOTE + - " SET " + NoteColumns.NOTES_COUNT + "=" + NoteColumns.NOTES_COUNT + " + 1" + - " WHERE " + NoteColumns.ID + "=new." + NoteColumns.PARENT_ID + ";" + - " END"; + "CREATE TRIGGER increase_folder_count_on_insert " + + " AFTER INSERT ON " + TABLE.NOTE + + " BEGIN " + + " UPDATE " + TABLE.NOTE + + " SET " + NoteColumns.NOTES_COUNT + "=" + NoteColumns.NOTES_COUNT + " + 1" + + " WHERE " + NoteColumns.ID + "=new." + NoteColumns.PARENT_ID + ";" + + " END";//在文件夹中插入一个Note之后需要更改的数据的表格。 /** * Decrease folder's note count when delete note from the folder */ private static final String NOTE_DECREASE_FOLDER_COUNT_ON_DELETE_TRIGGER = - "CREATE TRIGGER decrease_folder_count_on_delete " + - " AFTER DELETE ON " + TABLE.NOTE + - " BEGIN " + - " UPDATE " + TABLE.NOTE + - " SET " + NoteColumns.NOTES_COUNT + "=" + NoteColumns.NOTES_COUNT + "-1" + - " WHERE " + NoteColumns.ID + "=old." + NoteColumns.PARENT_ID + - " AND " + NoteColumns.NOTES_COUNT + ">0;" + - " END"; + "CREATE TRIGGER decrease_folder_count_on_delete " + + " AFTER DELETE ON " + TABLE.NOTE + + " BEGIN " + + " UPDATE " + TABLE.NOTE + + " SET " + NoteColumns.NOTES_COUNT + "=" + NoteColumns.NOTES_COUNT + "-1" + + " WHERE " + NoteColumns.ID + "=old." + NoteColumns.PARENT_ID + + " AND " + NoteColumns.NOTES_COUNT + ">0;" + + " END";//在文件夹中删除一个Note之后需要更改的数据的表格。 /** * Update note's content when insert data with type {@link DataConstants#NOTE} */ private static final String DATA_UPDATE_NOTE_CONTENT_ON_INSERT_TRIGGER = - "CREATE TRIGGER update_note_content_on_insert " + - " AFTER INSERT ON " + TABLE.DATA + - " WHEN new." + DataColumns.MIME_TYPE + "='" + DataConstants.NOTE + "'" + - " BEGIN" + - " UPDATE " + TABLE.NOTE + - " SET " + NoteColumns.SNIPPET + "=new." + DataColumns.CONTENT + - " WHERE " + NoteColumns.ID + "=new." + DataColumns.NOTE_ID + ";" + - " END"; + "CREATE TRIGGER update_note_content_on_insert " + + " AFTER INSERT ON " + TABLE.DATA + + " WHEN new." + DataColumns.MIME_TYPE + "='" + DataConstants.NOTE + "'" + + " BEGIN" + + " UPDATE " + TABLE.NOTE + + " SET " + NoteColumns.SNIPPET + "=new." + DataColumns.CONTENT + + " WHERE " + NoteColumns.ID + "=new." + DataColumns.NOTE_ID + ";" + + " END";//在文件夹中对一个Note导入新的数据之后需要更改的数据的表格。 /** * Update note's content when data with {@link DataConstants#NOTE} type has changed */ private static final String DATA_UPDATE_NOTE_CONTENT_ON_UPDATE_TRIGGER = - "CREATE TRIGGER update_note_content_on_update " + - " AFTER UPDATE ON " + TABLE.DATA + - " WHEN old." + DataColumns.MIME_TYPE + "='" + DataConstants.NOTE + "'" + - " BEGIN" + - " UPDATE " + TABLE.NOTE + - " SET " + NoteColumns.SNIPPET + "=new." + DataColumns.CONTENT + - " WHERE " + NoteColumns.ID + "=new." + DataColumns.NOTE_ID + ";" + - " END"; + "CREATE TRIGGER update_note_content_on_update " + + " AFTER UPDATE ON " + TABLE.DATA + + " WHEN old." + DataColumns.MIME_TYPE + "='" + DataConstants.NOTE + "'" + + " BEGIN" + + " UPDATE " + TABLE.NOTE + + " SET " + NoteColumns.SNIPPET + "=new." + DataColumns.CONTENT + + " WHERE " + NoteColumns.ID + "=new." + DataColumns.NOTE_ID + ";" + + " END";//Note数据被修改后需要更改的数据的表格。 /** * Update note's content when data with {@link DataConstants#NOTE} type has deleted */ private static final String DATA_UPDATE_NOTE_CONTENT_ON_DELETE_TRIGGER = - "CREATE TRIGGER update_note_content_on_delete " + - " AFTER delete ON " + TABLE.DATA + - " WHEN old." + DataColumns.MIME_TYPE + "='" + DataConstants.NOTE + "'" + - " BEGIN" + - " UPDATE " + TABLE.NOTE + - " SET " + NoteColumns.SNIPPET + "=''" + - " WHERE " + NoteColumns.ID + "=old." + DataColumns.NOTE_ID + ";" + - " END"; + "CREATE TRIGGER update_note_content_on_delete " + + " AFTER delete ON " + TABLE.DATA + + " WHEN old." + DataColumns.MIME_TYPE + "='" + DataConstants.NOTE + "'" + + " BEGIN" + + " UPDATE " + TABLE.NOTE + + " SET " + NoteColumns.SNIPPET + "=''" + + " WHERE " + NoteColumns.ID + "=old." + DataColumns.NOTE_ID + ";" + + " END";//Note数据被删除后需要更改的数据的表格。 /** * Delete datas belong to note which has been deleted */ private static final String NOTE_DELETE_DATA_ON_DELETE_TRIGGER = - "CREATE TRIGGER delete_data_on_delete " + - " AFTER DELETE ON " + TABLE.NOTE + - " BEGIN" + - " DELETE FROM " + TABLE.DATA + - " WHERE " + DataColumns.NOTE_ID + "=old." + NoteColumns.ID + ";" + - " END"; + "CREATE TRIGGER delete_data_on_delete " + + " AFTER DELETE ON " + TABLE.NOTE + + " BEGIN" + + " DELETE FROM " + TABLE.DATA + + " WHERE " + DataColumns.NOTE_ID + "=old." + NoteColumns.ID + ";" + + " END";//删除已删除的便签的数据后需要更改的数据的表格。 /** * Delete notes belong to folder which has been deleted */ private static final String FOLDER_DELETE_NOTES_ON_DELETE_TRIGGER = - "CREATE TRIGGER folder_delete_notes_on_delete " + - " AFTER DELETE ON " + TABLE.NOTE + - " BEGIN" + - " DELETE FROM " + TABLE.NOTE + - " WHERE " + NoteColumns.PARENT_ID + "=old." + NoteColumns.ID + ";" + - " END"; + "CREATE TRIGGER folder_delete_notes_on_delete " + + " AFTER DELETE ON " + TABLE.NOTE + + " BEGIN" + + " DELETE FROM " + TABLE.NOTE + + " WHERE " + NoteColumns.PARENT_ID + "=old." + NoteColumns.ID + ";" + + " END";//删除已删除的文件夹的便签后需要更改的数据的表格。 /** * Move notes belong to folder which has been moved to trash folder */ private static final String FOLDER_MOVE_NOTES_ON_TRASH_TRIGGER = - "CREATE TRIGGER folder_move_notes_on_trash " + - " AFTER UPDATE ON " + TABLE.NOTE + - " WHEN new." + NoteColumns.PARENT_ID + "=" + Notes.ID_TRASH_FOLER + - " BEGIN" + - " UPDATE " + TABLE.NOTE + - " SET " + NoteColumns.PARENT_ID + "=" + Notes.ID_TRASH_FOLER + - " WHERE " + NoteColumns.PARENT_ID + "=old." + NoteColumns.ID + ";" + - " END"; + "CREATE TRIGGER folder_move_notes_on_trash " + + " AFTER UPDATE ON " + TABLE.NOTE + + " WHEN new." + NoteColumns.PARENT_ID + "=" + Notes.ID_TRASH_FOLER + + " BEGIN" + + " UPDATE " + TABLE.NOTE + + " SET " + NoteColumns.PARENT_ID + "=" + Notes.ID_TRASH_FOLER + + " WHERE " + NoteColumns.PARENT_ID + "=old." + NoteColumns.ID + ";" + + " END";//还原垃圾桶中便签后需要更改的数据的表格。 public NotesDatabaseHelper(Context context) { super(context, DB_NAME, null, DB_VERSION); - } + }//构造函数,传入数据库的名称和版本 public void createNoteTable(SQLiteDatabase db) { db.execSQL(CREATE_NOTE_TABLE_SQL); reCreateNoteTableTriggers(db); createSystemFolder(db); Log.d(TAG, "note table has been created"); - } + }//创建表格(用来存储标签属性) private void reCreateNoteTableTriggers(SQLiteDatabase db) { db.execSQL("DROP TRIGGER IF EXISTS increase_folder_count_on_update"); @@ -233,7 +217,8 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { db.execSQL(NOTE_INCREASE_FOLDER_COUNT_ON_INSERT_TRIGGER); db.execSQL(FOLDER_DELETE_NOTES_ON_DELETE_TRIGGER); db.execSQL(FOLDER_MOVE_NOTES_ON_TRASH_TRIGGER); - } + }//execSQL是数据库操作的API,主要是更改行为的SQL语句。 + //在这里主要是用来重新创建上述定义的表格用的,先删除原来有的数据库的触发器再重新创建新的数据库 private void createSystemFolder(SQLiteDatabase db) { ContentValues values = new ContentValues(); @@ -268,14 +253,14 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { values.put(NoteColumns.ID, Notes.ID_TRASH_FOLER); values.put(NoteColumns.TYPE, Notes.TYPE_SYSTEM); db.insert(TABLE.NOTE, null, values); - } + }//创建几个系统文件夹 public void createDataTable(SQLiteDatabase db) { db.execSQL(CREATE_DATA_TABLE_SQL); reCreateDataTableTriggers(db); db.execSQL(CREATE_DATA_NOTE_ID_INDEX_SQL); Log.d(TAG, "data table has been created"); - } + }//创建表格(用来存储标签内容) private void reCreateDataTableTriggers(SQLiteDatabase db) { db.execSQL("DROP TRIGGER IF EXISTS update_note_content_on_insert"); @@ -285,20 +270,22 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { db.execSQL(DATA_UPDATE_NOTE_CONTENT_ON_INSERT_TRIGGER); db.execSQL(DATA_UPDATE_NOTE_CONTENT_ON_UPDATE_TRIGGER); db.execSQL(DATA_UPDATE_NOTE_CONTENT_ON_DELETE_TRIGGER); - } + }//同上面的execSQL static synchronized NotesDatabaseHelper getInstance(Context context) { if (mInstance == null) { mInstance = new NotesDatabaseHelper(context); } return mInstance; - } + }//上网查是为解决同一时刻只能有一个线程执行. + //在写程序库代码时,有时有一个类需要被所有的其它类使用, + //但又要求这个类只能被实例化一次,是个服务类,定义一次,其它类使用同一个这个类的实例 @Override public void onCreate(SQLiteDatabase db) { createNoteTable(db); createDataTable(db); - } + }//实现两个表格(上面创建的两个表格) @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { @@ -331,14 +318,14 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { throw new IllegalStateException("Upgrade notes database to version " + newVersion + "fails"); } - } + }//数据库版本的更新(数据库内容的更改) private void upgradeToV2(SQLiteDatabase db) { db.execSQL("DROP TABLE IF EXISTS " + TABLE.NOTE); db.execSQL("DROP TABLE IF EXISTS " + TABLE.DATA); createNoteTable(db); createDataTable(db); - } + }//更新到V2版本 private void upgradeToV3(SQLiteDatabase db) { // drop unused triggers @@ -353,10 +340,10 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { values.put(NoteColumns.ID, Notes.ID_TRASH_FOLER); values.put(NoteColumns.TYPE, Notes.TYPE_SYSTEM); db.insert(TABLE.NOTE, null, values); - } + }//更新到V3版本 private void upgradeToV4(SQLiteDatabase db) { db.execSQL("ALTER TABLE " + TABLE.NOTE + " ADD COLUMN " + NoteColumns.VERSION + " INTEGER NOT NULL DEFAULT 0"); - } -} + }//更新到V4版本,但是不知道V2、V3、V4是什么意思 +} \ No newline at end of file diff --git a/Notes-master/app/src/main/java/net/micode/notes/data/NotesProvider.java b/Notes-master/app/src/main/java/net/micode/notes/data/NotesProvider.java index edb0a60..6897999 100644 --- a/Notes-master/app/src/main/java/net/micode/notes/data/NotesProvider.java +++ b/Notes-master/app/src/main/java/net/micode/notes/data/NotesProvider.java @@ -1,22 +1,5 @@ -/* - * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) - * - * 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 net.micode.notes.data; - import android.app.SearchManager; import android.content.ContentProvider; import android.content.ContentUris; @@ -33,9 +16,15 @@ import net.micode.notes.R; import net.micode.notes.data.Notes.DataColumns; import net.micode.notes.data.Notes.NoteColumns; import net.micode.notes.data.NotesDatabaseHelper.TABLE; - - +//为存储和获取数据提供接口。可以在不同的应用程序之间共享数据 +//ContentProvider提供的方法 +//query:查询 +//insert:插入 +//update:更新 +//delete:删除 +//getType:得到数据类型 public class NotesProvider extends ContentProvider { + // UriMatcher用于匹配Uri private static final UriMatcher mMatcher; private NotesDatabaseHelper mHelper; @@ -51,7 +40,9 @@ public class NotesProvider extends ContentProvider { private static final int URI_SEARCH_SUGGEST = 6; static { + // 创建UriMatcher时,调用UriMatcher(UriMatcher.NO_MATCH)表示不匹配任何路径的返回码 mMatcher = new UriMatcher(UriMatcher.NO_MATCH); + // 把需要匹配Uri路径全部给注册上 mMatcher.addURI(Notes.AUTHORITY, "note", URI_NOTE); mMatcher.addURI(Notes.AUTHORITY, "note/#", URI_NOTE_ITEM); mMatcher.addURI(Notes.AUTHORITY, "data", URI_DATA); @@ -65,33 +56,40 @@ public class NotesProvider extends ContentProvider { * x'0A' represents the '\n' character in sqlite. For title and content in the search result, * we will trim '\n' and white space in order to show more information. */ + // 声明 NOTES_SEARCH_PROJECTION 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; - + + 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; + // 声明NOTES_SNIPPET_SEARCH_QUERY 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; + + " FROM " + TABLE.NOTE + + " WHERE " + NoteColumns.SNIPPET + " LIKE ?" + + " AND " + NoteColumns.PARENT_ID + "<>" + Notes.ID_TRASH_FOLER + + " AND " + NoteColumns.TYPE + "=" + Notes.TYPE_NOTE; @Override + // Context只有在onCreate()中才被初始化 + // 对mHelper进行实例化 public boolean onCreate() { mHelper = NotesDatabaseHelper.getInstance(getContext()); return true; } @Override + // 查询uri在数据库中对应的位置 public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, - String sortOrder) { + String sortOrder) { Cursor c = null; + // 获取可读数据库 SQLiteDatabase db = mHelper.getReadableDatabase(); String id = null; + // 匹配查找uri switch (mMatcher.match(uri)) { + // 对于不同的匹配值,在数据库中查找相应的条目 case URI_NOTE: c = db.query(TABLE.NOTE, projection, selection, selectionArgs, null, null, sortOrder); @@ -113,6 +111,7 @@ public class NotesProvider extends ContentProvider { 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"); } @@ -120,6 +119,8 @@ public class NotesProvider extends ContentProvider { String searchString = null; if (mMatcher.match(uri) == URI_SEARCH_SUGGEST) { if (uri.getPathSegments().size() > 1) { + // getPathSegments()方法得到一个String的List, + // 在uri.getPathSegments().get(1)为第2个元素 searchString = uri.getPathSegments().get(1); } } else { @@ -139,6 +140,7 @@ public class NotesProvider extends ContentProvider { } break; default: + // 抛出异常 throw new IllegalArgumentException("Unknown URI " + uri); } if (c != null) { @@ -148,13 +150,17 @@ public class NotesProvider extends ContentProvider { } @Override + // 插入一个uri 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; + // 如果存在,查找NOTE_ID case URI_DATA: if (values.containsKey(DataColumns.NOTE_ID)) { noteId = values.getAsLong(DataColumns.NOTE_ID); @@ -167,6 +173,7 @@ public class NotesProvider extends ContentProvider { throw new IllegalArgumentException("Unknown URI " + uri); } // Notify the note uri + // notifyChange获得一个ContextResolver对象并且更新里面的内容 if (noteId > 0) { getContext().getContentResolver().notifyChange( ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, noteId), null); @@ -178,13 +185,17 @@ public class NotesProvider extends ContentProvider { ContentUris.withAppendedId(Notes.CONTENT_DATA_URI, dataId), null); } + // 返回插入的uri的路径 return ContentUris.withAppendedId(uri, insertedId); } @Override + // 删除一个uri public int delete(Uri uri, String selection, String[] selectionArgs) { + //Uri代表要操作的数据,Android上可用的每种资源 -包括 图像、视频片段、音频资源等都可以用Uri来表示。 int count = 0; String id = null; + // 获得可写的数据库 SQLiteDatabase db = mHelper.getWritableDatabase(); boolean deleteData = false; switch (mMatcher.match(uri)) { @@ -228,6 +239,7 @@ public class NotesProvider extends ContentProvider { } @Override + // 更新一个uri public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { int count = 0; String id = null; @@ -267,10 +279,12 @@ public class NotesProvider extends ContentProvider { return count; } + // 将字符串解析成规定格式 private String parseSelection(String selection) { return (!TextUtils.isEmpty(selection) ? " AND (" + selection + ')' : ""); } + //增加一个noteVersion private void increaseNoteVersion(long id, String selection, String[] selectionArgs) { StringBuilder sql = new StringBuilder(120); sql.append("UPDATE "); @@ -293,6 +307,7 @@ public class NotesProvider extends ContentProvider { sql.append(selectString); } + // execSQL()方法可以执行insert、delete、update和CREATE TABLE之类有更改行为的SQL语句 mHelper.getWritableDatabase().execSQL(sql.toString()); } @@ -302,4 +317,4 @@ public class NotesProvider extends ContentProvider { return null; } -} +} \ No newline at end of file diff --git a/Notes-master/app/src/main/java/net/micode/notes/gtask/exception/ActionFailureException.java b/Notes-master/app/src/main/java/net/micode/notes/gtask/exception/ActionFailureException.java index 15504be..5e775b2 100644 --- a/Notes-master/app/src/main/java/net/micode/notes/gtask/exception/ActionFailureException.java +++ b/Notes-master/app/src/main/java/net/micode/notes/gtask/exception/ActionFailureException.java @@ -15,14 +15,27 @@ */ package net.micode.notes.gtask.exception; - +/* + * Description:支持小米便签运行过程中的运行异常处理。 + */ public class ActionFailureException extends RuntimeException { private static final long serialVersionUID = 4425249765923293627L; + /* + * serialVersionUID相当于java类的身份证。主要用于版本控制。 + * serialVersionUID作用是序列化时保持版本的兼容性,即在版本升级时反序列化仍保持对象的唯一性。 + * Made By Cuican + */ public ActionFailureException() { super(); } - + /* + * 在JAVA类中使用super来引用父类的成分,用this来引用当前对象. + * 如果一个类从另外一个类继承,我们new这个子类的实例对象的时候,这个子类对象里面会有一个父类对象。 + * 怎么去引用里面的父类对象呢?使用super来引用 + * 也就是说,此处super()以及super (paramString)可认为是Exception ()和Exception (paramString) + * Made By Cuican + */ public ActionFailureException(String paramString) { super(paramString); } diff --git a/Notes-master/app/src/main/java/net/micode/notes/gtask/exception/NetworkFailureException.java b/Notes-master/app/src/main/java/net/micode/notes/gtask/exception/NetworkFailureException.java index b08cfb1..da0c47c 100644 --- a/Notes-master/app/src/main/java/net/micode/notes/gtask/exception/NetworkFailureException.java +++ b/Notes-master/app/src/main/java/net/micode/notes/gtask/exception/NetworkFailureException.java @@ -15,14 +15,26 @@ */ package net.micode.notes.gtask.exception; - +/* + * Description:支持小米便签运行过程中的网络异常处理。 + */ public class NetworkFailureException extends Exception { private static final long serialVersionUID = 2107610287180234136L; - + /* + * serialVersionUID相当于java类的身份证。主要用于版本控制。 + * serialVersionUID作用是序列化时保持版本的兼容性,即在版本升级时反序列化仍保持对象的唯一性。 + * Made By Cuican + */ public NetworkFailureException() { super(); } - + /* + * 在JAVA类中使用super来引用父类的成分,用this来引用当前对象. + * 如果一个类从另外一个类继承,我们new这个子类的实例对象的时候,这个子类对象里面会有一个父类对象。 + * 怎么去引用里面的父类对象呢?使用super来引用 + * 也就是说,此处super()以及super (paramString)可认为是Exception ()和Exception (paramString) + * Made By Cuican + */ public NetworkFailureException(String paramString) { super(paramString); } diff --git a/Notes-master/app/src/main/java/net/micode/notes/model/Note.java b/Notes-master/app/src/main/java/net/micode/notes/model/Note.java index 6706cf6..a08115a 100644 --- a/Notes-master/app/src/main/java/net/micode/notes/model/Note.java +++ b/Notes-master/app/src/main/java/net/micode/notes/model/Note.java @@ -15,15 +15,16 @@ */ package net.micode.notes.model; -import android.content.ContentProviderOperation; -import android.content.ContentProviderResult; -import android.content.ContentUris; -import android.content.ContentValues; -import android.content.Context; -import android.content.OperationApplicationException; -import android.net.Uri; -import android.os.RemoteException; -import android.util.Log; + +import android.content.ContentProviderOperation;//批量的更新、插入、删除数据。 +import android.content.ContentProviderResult;//操作的结果 +import android.content.ContentUris;//用于添加和获取Uri后面的ID +import android.content.ContentValues;//一种用来存储基本数据类型数据的存储机制 +import android.content.Context;//一种用来存储基本数据类型数据的存储机制 +import android.content.OperationApplicationException;//操作应用程序容错 +import android.net.Uri;//表示待操作的数据 +import android.os.RemoteException;//远程容错 +import android.util.Log;//输出日志,比如说出错、警告等 import net.micode.notes.data.Notes; import net.micode.notes.data.Notes.CallNote; @@ -49,16 +50,17 @@ public class Note { values.put(NoteColumns.MODIFIED_DATE, createdTime); values.put(NoteColumns.TYPE, Notes.TYPE_NOTE); values.put(NoteColumns.LOCAL_MODIFIED, 1); - values.put(NoteColumns.PARENT_ID, folderId); + values.put(NoteColumns.PARENT_ID, folderId);//将数据写入数据库表格 Uri uri = context.getContentResolver().insert(Notes.CONTENT_NOTE_URI, values); - + //ContentResolver()主要是实现外部应用对ContentProvider中的数据 + //进行添加、删除、修改和查询操作 long noteId = 0; try { noteId = Long.valueOf(uri.getPathSegments().get(1)); } catch (NumberFormatException e) { Log.e(TAG, "Get note id error :" + e.toString()); noteId = 0; - } + }//try-catch异常处理 if (noteId == -1) { throw new IllegalStateException("Wrong note id:" + noteId); } @@ -68,37 +70,37 @@ public class Note { public Note() { mNoteDiffValues = new ContentValues(); mNoteData = new NoteData(); - } + }//定义两个变量用来存储便签的数据,一个是存储便签属性、一个是存储便签内容 public void setNoteValue(String key, String value) { mNoteDiffValues.put(key, value); mNoteDiffValues.put(NoteColumns.LOCAL_MODIFIED, 1); mNoteDiffValues.put(NoteColumns.MODIFIED_DATE, System.currentTimeMillis()); - } + }//设置数据库表格的标签属性数据 public void setTextData(String key, String value) { mNoteData.setTextData(key, value); - } + }//设置数据库表格的标签文本内容的数据 public void setTextDataId(long id) { mNoteData.setTextDataId(id); - } + }//设置文本数据的ID public long getTextDataId() { return mNoteData.mTextDataId; - } + }//得到文本数据的ID public void setCallDataId(long id) { mNoteData.setCallDataId(id); - } + }//设置电话号码数据的ID public void setCallData(String key, String value) { mNoteData.setCallData(key, value); - } + }//得到电话号码数据的ID public boolean isLocalModified() { return mNoteDiffValues.size() > 0 || mNoteData.isLocalModified(); - } + }//判断是否是本地修改 public boolean syncNote(Context context, long noteId) { if (noteId <= 0) { @@ -128,7 +130,7 @@ public class Note { } return true; - } + }//判断数据是否同步 private class NoteData { private long mTextDataId; @@ -147,7 +149,7 @@ public class Note { mTextDataId = 0; mCallDataId = 0; } - + //下面是上述几个函数的具体实现 boolean isLocalModified() { return mTextDataValues.size() > 0 || mCallDataValues.size() > 0; } @@ -177,17 +179,17 @@ public class Note { mNoteDiffValues.put(NoteColumns.LOCAL_MODIFIED, 1); mNoteDiffValues.put(NoteColumns.MODIFIED_DATE, System.currentTimeMillis()); } - + //下面函数的作用是将新的数据通过Uri的操作存储到数据库 Uri pushIntoContentResolver(Context context, long noteId) { /** * Check for safety */ if (noteId <= 0) { throw new IllegalArgumentException("Wrong note id:" + noteId); - } + }//判断数据是否合法 ArrayList operationList = new ArrayList(); - ContentProviderOperation.Builder builder = null; + ContentProviderOperation.Builder builder = null;//数据库的操作列表 if(mTextDataValues.size() > 0) { mTextDataValues.put(DataColumns.NOTE_ID, noteId); @@ -209,7 +211,7 @@ public class Note { operationList.add(builder.build()); } mTextDataValues.clear(); - } + }//把文本数据存入DataColumns if(mCallDataValues.size() > 0) { mCallDataValues.put(DataColumns.NOTE_ID, noteId); @@ -231,7 +233,7 @@ public class Note { operationList.add(builder.build()); } mCallDataValues.clear(); - } + }//把电话号码数据存入DataColumns if (operationList.size() > 0) { try { @@ -246,7 +248,7 @@ public class Note { Log.e(TAG, String.format("%s: %s", e.toString(), e.getMessage())); return null; } - } + }//存储过程中的异常处理 return null; } } diff --git a/Notes-master/app/src/main/java/net/micode/notes/model/WorkingNote.java b/Notes-master/app/src/main/java/net/micode/notes/model/WorkingNote.java index be081e4..b042599 100644 --- a/Notes-master/app/src/main/java/net/micode/notes/model/WorkingNote.java +++ b/Notes-master/app/src/main/java/net/micode/notes/model/WorkingNote.java @@ -62,6 +62,7 @@ public class WorkingNote { private NoteSettingChangedListener mNoteSettingStatusListener; + // 声明 DATA_PROJECTION字符串数组 public static final String[] DATA_PROJECTION = new String[] { DataColumns.ID, DataColumns.CONTENT, @@ -71,7 +72,7 @@ public class WorkingNote { DataColumns.DATA3, DataColumns.DATA4, }; - + // 声明 NOTE_PROJECTION字符串数组 public static final String[] NOTE_PROJECTION = new String[] { NoteColumns.PARENT_ID, NoteColumns.ALERTED_DATE, @@ -101,6 +102,7 @@ public class WorkingNote { private static final int NOTE_MODIFIED_DATE_COLUMN = 5; + // New note construct private WorkingNote(Context context, long folderId) { mContext = context; @@ -113,7 +115,7 @@ public class WorkingNote { mMode = 0; mWidgetType = Notes.TYPE_WIDGET_INVALIDE; } - + // WorkingNote的构造函数 // Existing note construct private WorkingNote(Context context, long noteId, long folderId) { mContext = context; @@ -123,12 +125,13 @@ public class WorkingNote { mNote = new Note(); loadNote(); } - + // 加载Note + // 通过数据库调用query函数找到第一个条目 private void loadNote() { Cursor cursor = mContext.getContentResolver().query( ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, mNoteId), NOTE_PROJECTION, null, null, null); - + // 若存在,储存相应信息 if (cursor != null) { if (cursor.moveToFirst()) { mFolderId = cursor.getLong(NOTE_PARENT_ID_COLUMN); @@ -139,13 +142,14 @@ public class WorkingNote { mModifiedDate = cursor.getLong(NOTE_MODIFIED_DATE_COLUMN); } cursor.close(); + // 若不存在,报错 } else { Log.e(TAG, "No note with id:" + mNoteId); throw new IllegalArgumentException("Unable to find note with id " + mNoteId); } loadNoteData(); } - + // 加载NoteData private void loadNoteData() { Cursor cursor = mContext.getContentResolver().query(Notes.CONTENT_DATA_URI, DATA_PROJECTION, DataColumns.NOTE_ID + "=?", new String[] { @@ -153,7 +157,8 @@ public class WorkingNote { }, null); if (cursor != null) { - if (cursor.moveToFirst()) { + // 查到信息不为空 + if (cursor.moveToFirst()) {// 查看第一项是否存在 do { String type = cursor.getString(DATA_MIME_TYPE_COLUMN); if (DataConstants.NOTE.equals(type)) { @@ -165,7 +170,7 @@ public class WorkingNote { } else { Log.d(TAG, "Wrong note type with type:" + type); } - } while (cursor.moveToNext()); + } while (cursor.moveToNext());//查阅所有项,直到为空 } cursor.close(); } else { @@ -174,9 +179,12 @@ public class WorkingNote { } } + // 创建空的Note + // 传参:context,文件夹id,widget,背景颜色 public static WorkingNote createEmptyNote(Context context, long folderId, int widgetId, int widgetType, int defaultBgColorId) { WorkingNote note = new WorkingNote(context, folderId); + // 设定相关属性 note.setBgColorId(defaultBgColorId); note.setWidgetId(widgetId); note.setWidgetType(widgetType); @@ -187,9 +195,10 @@ public class WorkingNote { return new WorkingNote(context, id, 0); } + // 保存Note public synchronized boolean saveNote() { - if (isWorthSaving()) { - if (!existInDatabase()) { + if (isWorthSaving()) {//是否值得保存 + if (!existInDatabase()) { // 是否存在数据库中 if ((mNoteId = Note.getNewNoteId(mContext, mFolderId)) == 0) { Log.e(TAG, "Create new note fail with id:" + mNoteId); return false; @@ -211,11 +220,11 @@ public class WorkingNote { return false; } } - + // 是否在数据库中存在 public boolean existInDatabase() { return mNoteId > 0; } - + // 是否值得保存 private boolean isWorthSaving() { if (mIsDeleted || (!existInDatabase() && TextUtils.isEmpty(mContent)) || (existInDatabase() && !mNote.isLocalModified())) { @@ -224,11 +233,12 @@ public class WorkingNote { return true; } } - + // 设置mNoteSettingStatusListener public void setOnSettingStatusChangedListener(NoteSettingChangedListener l) { mNoteSettingStatusListener = l; } - + // 设置AlertDate + // 若 mAlertDate与data不同,则更改mAlertDate并设定NoteValue public void setAlertDate(long date, boolean set) { if (date != mAlertDate) { mAlertDate = date; @@ -238,15 +248,16 @@ public class WorkingNote { mNoteSettingStatusListener.onClockAlertChanged(date, set); } } - + // 设定删除标记 public void markDeleted(boolean mark) { - mIsDeleted = mark; + mIsDeleted = mark; // 设定标记 if (mWidgetId != AppWidgetManager.INVALID_APPWIDGET_ID && mWidgetType != Notes.TYPE_WIDGET_INVALIDE && mNoteSettingStatusListener != null) { mNoteSettingStatusListener.onWidgetChanged(); + // 调用mNoteSettingStatusListener的 onWidgetChanged方法 } } - + // 设定背景颜色 public void setBgColorId(int id) { if (id != mBgColorId) { mBgColorId = id; @@ -254,11 +265,13 @@ public class WorkingNote { mNoteSettingStatusListener.onBackgroundColorChanged(); } mNote.setNoteValue(NoteColumns.BG_COLOR_ID, String.valueOf(id)); + } } - + // 设定检查列表模式 + // 参数:mode public void setCheckListMode(int mode) { - if (mMode != mode) { + if (mMode != mode) {//设定条件 mMode != mode if (mNoteSettingStatusListener != null) { mNoteSettingStatusListener.onCheckListModeChanged(mMode, mode); } @@ -266,82 +279,93 @@ public class WorkingNote { mNote.setTextData(TextNote.MODE, String.valueOf(mMode)); } } - + // 设定WidgetType + // 参数:type public void setWidgetType(int type) { - if (type != mWidgetType) { + if (type != mWidgetType) {//设定条件 type != mWidgetType mWidgetType = type; mNote.setNoteValue(NoteColumns.WIDGET_TYPE, String.valueOf(mWidgetType)); + // 调用Note的setNoteValue方法更改WidgetType } } + // 设定WidgetId + // 参数:id public void setWidgetId(int id) { - if (id != mWidgetId) { + if (id != mWidgetId) {//设定条件 id != mWidgetId mWidgetId = id; mNote.setNoteValue(NoteColumns.WIDGET_ID, String.valueOf(mWidgetId)); + // 调用Note的setNoteValue方法更改WidgetId } } + // 设定WorkingTex + // 参数:更改的text public void setWorkingText(String text) { - if (!TextUtils.equals(mContent, text)) { + if (!TextUtils.equals(mContent, text)) {//设定条件 mContent, text内容不同 mContent = text; mNote.setTextData(DataColumns.CONTENT, mContent); + // 调用Note的setTextData方法更改WorkingText } } - + // 转变mNote的CallData及CallNote信息 + // 参数:String phoneNumber, long callDate public void convertToCallNote(String phoneNumber, long callDate) { mNote.setCallData(CallNote.CALL_DATE, String.valueOf(callDate)); mNote.setCallData(CallNote.PHONE_NUMBER, phoneNumber); mNote.setNoteValue(NoteColumns.PARENT_ID, String.valueOf(Notes.ID_CALL_RECORD_FOLDER)); } - + // 判断是否有时钟题型 public boolean hasClockAlert() { return (mAlertDate > 0 ? true : false); } - + // 获取Content public String getContent() { return mContent; } - + // 获取AlertDate public long getAlertDate() { return mAlertDate; } - + // 获取ModifiedDate public long getModifiedDate() { return mModifiedDate; } - + // 获取背景颜色来源id public int getBgColorResId() { return NoteBgResources.getNoteBgResource(mBgColorId); } - + // 获取背景颜色id public int getBgColorId() { return mBgColorId; } - + // 获取标题背景颜色id public int getTitleBgResId() { return NoteBgResources.getNoteTitleBgResource(mBgColorId); } - + // 获取CheckListMode public int getCheckListMode() { return mMode; } - + // 获取便签id public long getNoteId() { return mNoteId; } - + // 获取文件夹id public long getFolderId() { return mFolderId; } - + // 获取WidgetId public int getWidgetId() { return mWidgetId; } - + // 获取WidgetType public int getWidgetType() { return mWidgetType; } - + // 创建接口 NoteSettingChangedListener,便签更新监视 + // 为NoteEditActivity提供接口 + // 提供函数有 public interface NoteSettingChangedListener { /** * Called when the background color of current note has just changed diff --git a/Notes-master/local.properties b/Notes-master/local.properties index fd47243..eddd634 100644 --- a/Notes-master/local.properties +++ b/Notes-master/local.properties @@ -2,6 +2,7 @@ # as it contains information specific to your local configuration. # # Location of the SDK. This is only used by Gradle. -# -#Mon Mar 27 22:49:38 CST 2023 -sdk.dir=D\:\\Android\\sdk +# For customization when using a Version Control System, please read the +# header note. +#Mon Apr 17 21:24:56 CST 2023 +sdk.dir=C\:\\Users\\chucheng\\AppData\\Local\\Android\\Sdk diff --git a/doc/210340002陈荣浩/data/Contact.java b/doc/210340002陈荣浩/data/Contact.java new file mode 100644 index 0000000..19d0bbc --- /dev/null +++ b/doc/210340002陈荣浩/data/Contact.java @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * + * 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 net.micode.notes.data; + +import android.content.Context; +import android.database.Cursor; +import android.provider.ContactsContract.CommonDataKinds.Phone; +import android.provider.ContactsContract.Data; +import android.telephony.PhoneNumberUtils; +import android.util.Log; + +import java.util.HashMap; + +public class Contact {//联系人 + private static HashMap sContactCache; + private static final String TAG = "Contact"; + //定义字符串CALLER_ID_SELECTION + private static final String CALLER_ID_SELECTION = "PHONE_NUMBERS_EQUAL(" + Phone.NUMBER + + ",?) AND " + Data.MIMETYPE + "='" + Phone.CONTENT_ITEM_TYPE + "'" + + " AND " + Data.RAW_CONTACT_ID + " IN " + + "(SELECT raw_contact_id " + + " FROM phone_lookup" + + " WHERE min_match = '+')"; + //获取联系人 + public static String getContact(Context context, String phoneNumber) { + if(sContactCache == null) { + sContactCache = new HashMap(); + } + //查找hashmap中是否有phonenumber信息 + + if(sContactCache.containsKey(phoneNumber)) { + return sContactCache.get(phoneNumber); + } + + String selection = CALLER_ID_SELECTION.replace("+", + PhoneNumberUtils.toCallerIDMinMatch(phoneNumber)); + + //查找数据库中phoneNumber信息 + Cursor cursor = context.getContentResolver().query( + Data.CONTENT_URI, + new String [] { Phone.DISPLAY_NAME }, + selection, + new String[] { phoneNumber }, + null); + + //判断查询结果 + //moveToFirst()返回第一条 + if (cursor != null && cursor.moveToFirst()) { + try { + //找到相关信息 + String name = cursor.getString(0); + sContactCache.put(phoneNumber, name); + return name; + //异常 + } catch (IndexOutOfBoundsException e) { + Log.e(TAG, " Cursor get string error " + e.toString()); + return null; + } finally { + cursor.close(); + } + //未找到相关信息 + } else { + Log.d(TAG, "No contact matched with number:" + phoneNumber); + return null; + } + } +} diff --git a/doc/210340002陈荣浩/data/Notes.java b/doc/210340002陈荣浩/data/Notes.java new file mode 100644 index 0000000..6b6c47e --- /dev/null +++ b/doc/210340002陈荣浩/data/Notes.java @@ -0,0 +1,303 @@ +package net.micode.notes.data; + +import android.content.ContentUris; +import android.net.Uri; +// Notes 类中定义了很多常量,这些常量大多是int型和string型 +public class Notes { + public static final String AUTHORITY = "micode_notes"; + public static final String TAG = "Notes"; + + //以下三个常量对NoteColumns.TYPE的值进行设置时会用到 + public static final int TYPE_NOTE = 0; + public static final int TYPE_FOLDER = 1; + public static final int TYPE_SYSTEM = 2; + + /** + * Following IDs are system folders' identifiers + * {@link Notes#ID_ROOT_FOLDER } is default folder + * {@link Notes#ID_TEMPARAY_FOLDER } is for notes belonging no folder + * {@link Notes#ID_CALL_RECORD_FOLDER} is to store call records + */ + public static final int ID_ROOT_FOLDER = 0; + public static final int ID_TEMPARAY_FOLDER = -1; + public static final int ID_CALL_RECORD_FOLDER = -2; + public static final int ID_TRASH_FOLER = -3; + + public static final String INTENT_EXTRA_ALERT_DATE = + + "net.micode.notes.alert_date"; + public static final String INTENT_EXTRA_BACKGROUND_ID = + + "net.micode.notes.background_color_id"; + public static final String INTENT_EXTRA_WIDGET_ID = + + "net.micode.notes.widget_id"; + public static final String INTENT_EXTRA_WIDGET_TYPE = + + "net.micode.notes.widget_type"; + public static final String INTENT_EXTRA_FOLDER_ID = + + "net.micode.notes.folder_id"; + public static final String INTENT_EXTRA_CALL_DATE = + + "net.micode.notes.call_date"; + + public static final int TYPE_WIDGET_INVALIDE = -1; + public static final int TYPE_WIDGET_2X = 0; + public static final int TYPE_WIDGET_4X = 1; + + public static class DataConstants { + public static final String NOTE = TextNote.CONTENT_ITEM_TYPE; + public static final String CALL_NOTE = CallNote.CONTENT_ITEM_TYPE; + } + + /** + * Uri to query all notes and folders + */ + public static final Uri CONTENT_NOTE_URI = Uri.parse("content://" + + + AUTHORITY + "/note");//定义查询便签和文件夹的指针。 + +// public static final Uri my_URI = ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI , 10); + + /** + * Uri to query data + */ + public static final Uri CONTENT_DATA_URI = Uri.parse("content://" + + + AUTHORITY + "/data");//定义查找数据的指针。 + + // 定义NoteColumns的常量,用于后面创建数据库的表头 + public interface NoteColumns { + /** + * The unique ID for a row + *

Type: INTEGER (long)

+ */ + public static final String ID = "_id"; + + /** + * The parent's id for note or folder + *

Type: INTEGER (long)

+ */ + public static final String PARENT_ID = "parent_id";//为什么会有parent_id + + /** + * Created data for note or folder + *

Type: INTEGER (long)

+ */ + public static final String CREATED_DATE = "created_date"; + + /** + * Latest modified date + *

Type: INTEGER (long)

+ */ + public static final String MODIFIED_DATE = "modified_date"; + + + /** + * Alert date + *

Type: INTEGER (long)

+ */ + public static final String ALERTED_DATE = "alert_date"; + + /** + * Folder's name or text content of note + *

Type: TEXT

+ */ + public static final String SNIPPET = "snippet"; + + /** + * Note's widget id + *

Type: INTEGER (long)

+ */ + public static final String WIDGET_ID = "widget_id"; + + /** + * Note's widget type + *

Type: INTEGER (long)

+ */ + public static final String WIDGET_TYPE = "widget_type"; + + /** + * Note's background color's id + *

Type: INTEGER (long)

+ */ + public static final String BG_COLOR_ID = "bg_color_id"; + + /** + * For text note, it doesn't has attachment, for multi-media + * note, it has at least one attachment + *

Type: INTEGER

+ */ + public static final String HAS_ATTACHMENT = "has_attachment"; + + /** + * Folder's count of notes + *

Type: INTEGER (long)

+ */ + public static final String NOTES_COUNT = "notes_count"; + + /** + * The file type: folder or note + *

Type: INTEGER

+ */ + public static final String TYPE = "type"; + + /** + * The last sync id + *

Type: INTEGER (long)

+ */ + public static final String SYNC_ID = "sync_id";//同步 + + /** + * Sign to indicate local modified or not + *

Type: INTEGER

+ */ + public static final String LOCAL_MODIFIED = "local_modified"; + + /** + * Original parent id before moving into temporary folder + *

Type : INTEGER

+ */ + public static final String ORIGIN_PARENT_ID = "origin_parent_id"; + + /** + * The gtask id + *

Type : TEXT

+ */ + public static final String GTASK_ID = "gtask_id"; + + /** + * The version code + *

Type : INTEGER (long)

+ */ + public static final String VERSION = "version"; + }//这些常量主要是定义便签的属性的。 + + // 定义DataColumns的常量,用于后面创建数据库的表头 + public interface DataColumns { + /** + * The unique ID for a row + *

Type: INTEGER (long)

+ */ + public static final String ID = "_id"; + + /** + * The MIME type of the item represented by this row. + *

Type: Text

+ */ + public static final String MIME_TYPE = "mime_type"; + + /** + * The reference id to note that this data belongs to + *

Type: INTEGER (long)

+ */ + public static final String NOTE_ID = "note_id"; + + /** + * Created data for note or folder + *

Type: INTEGER (long)

+ */ + public static final String CREATED_DATE = "created_date"; + + /** + * Latest modified date + *

Type: INTEGER (long)

+ */ + public static final String MODIFIED_DATE = "modified_date"; + + /** + * Data's content + *

Type: TEXT

+ */ + public static final String CONTENT = "content"; + + + /** + * Generic data column, the meaning is {@link #MIMETYPE} specific, + used for + * integer data type + *

Type: INTEGER

+ */ + public static final String DATA1 = "data1"; + + /** + * Generic data column, the meaning is {@link #MIMETYPE} specific, + used for + * integer data type + *

Type: INTEGER

+ */ + public static final String DATA2 = "data2"; + + /** + * Generic data column, the meaning is {@link #MIMETYPE} specific, + used for + * TEXT data type + *

Type: TEXT

+ */ + public static final String DATA3 = "data3"; + + /** + * Generic data column, the meaning is {@link #MIMETYPE} specific, + used for + * TEXT data type + *

Type: TEXT

+ */ + public static final String DATA4 = "data4"; + + /** + * Generic data column, the meaning is {@link #MIMETYPE} specific, + used for + * TEXT data type + *

Type: TEXT

+ */ + public static final String DATA5 = "data5"; + }//主要是定义存储便签内容数据的 + public static final class TextNote implements DataColumns { + /** + * Mode to indicate the text in check list mode or not + *

Type: Integer 1:check list mode 0: normal mode

+ */ + public static final String MODE = DATA1; + + public static final int MODE_CHECK_LIST = 1; + + public static final String CONTENT_TYPE = + + "vnd.android.cursor.dir/text_note"; + + public static final String CONTENT_ITEM_TYPE = + + "vnd.android.cursor.item/text_note"; + + public static final Uri CONTENT_URI = Uri.parse("content://" + + + AUTHORITY + "/text_note"); + }//文本内容的数据结构 + + public static final class CallNote implements DataColumns { + /** + * Call date for this record + *

Type: INTEGER (long)

+ */ + public static final String CALL_DATE = DATA1; + + /** + * Phone number for this record + *

Type: TEXT

+ */ + public static final String PHONE_NUMBER = DATA3; + + public static final String CONTENT_TYPE = + + "vnd.android.cursor.dir/call_note"; + + public static final String CONTENT_ITEM_TYPE = + + "vnd.android.cursor.item/call_note"; + + public static final Uri CONTENT_URI = Uri.parse("content://" + + + AUTHORITY + "/call_note"); + }//电话内容的数据结构 +} \ No newline at end of file diff --git a/doc/210340002陈荣浩/data/NotesDatabaseHelper.java b/doc/210340002陈荣浩/data/NotesDatabaseHelper.java new file mode 100644 index 0000000..aa5a860 --- /dev/null +++ b/doc/210340002陈荣浩/data/NotesDatabaseHelper.java @@ -0,0 +1,349 @@ +package net.micode.notes.data; + +import android.content.ContentValues;//就是用于保存一些数据(string boolean byte double float int long short ...)信息,这些信息可以被数据库操作时使用。 +import android.content.Context;//加载和访问资源。(android中主要是这两个功能,但是这里具体不清楚) +import android.database.sqlite.SQLiteDatabase;//主要提供了对应于添加、删除、更新、查询的操作方法: insert()、delete()、update()和query()。配合content.values +import android.database.sqlite.SQLiteOpenHelper;//用来管理数据的创建和版本更新 +import android.util.Log; + +import net.micode.notes.data.Notes.DataColumns; +import net.micode.notes.data.Notes.DataConstants; +import net.micode.notes.data.Notes.NoteColumns; +//数据库操作,用SQLOpenhelper,对一些note和文件进行数据库的操作,比如删除文件后,将文件里的note也相应删除 + +public class NotesDatabaseHelper extends SQLiteOpenHelper { + private static final String DB_NAME = "note.db"; + + private static final int DB_VERSION = 4; + + public interface TABLE { //接口,分成note和data,在后面的程序里分别使用过 + public static final String NOTE = "note"; + + public static final String DATA = "data"; + } + + private static final String TAG = "NotesDatabaseHelper"; + + private static NotesDatabaseHelper mInstance; + + private static final String CREATE_NOTE_TABLE_SQL = + "CREATE TABLE " + TABLE.NOTE + "(" + + NoteColumns.ID + " INTEGER PRIMARY KEY," + + NoteColumns.PARENT_ID + " INTEGER NOT NULL DEFAULT 0," + + NoteColumns.ALERTED_DATE + " INTEGER NOT NULL DEFAULT 0," + + NoteColumns.BG_COLOR_ID + " INTEGER NOT NULL DEFAULT 0," + + NoteColumns.CREATED_DATE + " INTEGER NOT NULL DEFAULT (strftime('%s','now') * 1000)," + + NoteColumns.HAS_ATTACHMENT + " INTEGER NOT NULL DEFAULT 0," + + NoteColumns.MODIFIED_DATE + " INTEGER NOT NULL DEFAULT (strftime('%s','now') * 1000)," + + NoteColumns.NOTES_COUNT + " INTEGER NOT NULL DEFAULT 0," + + NoteColumns.SNIPPET + " TEXT NOT NULL DEFAULT ''," + + NoteColumns.TYPE + " INTEGER NOT NULL DEFAULT 0," + + NoteColumns.WIDGET_ID + " INTEGER NOT NULL DEFAULT 0," + + NoteColumns.WIDGET_TYPE + " INTEGER NOT NULL DEFAULT -1," + + NoteColumns.SYNC_ID + " INTEGER NOT NULL DEFAULT 0," + + NoteColumns.LOCAL_MODIFIED + " INTEGER NOT NULL DEFAULT 0," + + NoteColumns.ORIGIN_PARENT_ID + " INTEGER NOT NULL DEFAULT 0," + + NoteColumns.GTASK_ID + " TEXT NOT NULL DEFAULT ''," + + NoteColumns.VERSION + " INTEGER NOT NULL DEFAULT 0" + + ")";//数据库中需要存储的项目的名称,就相当于创建一个表格的表头的内容。 + + private static final String CREATE_DATA_TABLE_SQL = + "CREATE TABLE " + TABLE.DATA + "(" + + DataColumns.ID + " INTEGER PRIMARY KEY," + + DataColumns.MIME_TYPE + " TEXT NOT NULL," + + DataColumns.NOTE_ID + " INTEGER NOT NULL DEFAULT 0," + + NoteColumns.CREATED_DATE + " INTEGER NOT NULL DEFAULT (strftime('%s','now') * 1000)," + + NoteColumns.MODIFIED_DATE + " INTEGER NOT NULL DEFAULT (strftime('%s','now') * 1000)," + + DataColumns.CONTENT + " TEXT NOT NULL DEFAULT ''," + + DataColumns.DATA1 + " INTEGER," + + DataColumns.DATA2 + " INTEGER," + + DataColumns.DATA3 + " TEXT NOT NULL DEFAULT ''," + + DataColumns.DATA4 + " TEXT NOT NULL DEFAULT ''," + + DataColumns.DATA5 + " TEXT NOT NULL DEFAULT ''" + + ")";//和上面的功能一样,主要是存储的项目不同 + + private static final String CREATE_DATA_NOTE_ID_INDEX_SQL = + "CREATE INDEX IF NOT EXISTS note_id_index ON " + + TABLE.DATA + "(" + DataColumns.NOTE_ID + ");";//存储便签编号的一个数据表格 + + /** + * Increase folder's note count when move note to the folder + */ + private static final String NOTE_INCREASE_FOLDER_COUNT_ON_UPDATE_TRIGGER = + "CREATE TRIGGER increase_folder_count_on_update "+ + " AFTER UPDATE OF " + NoteColumns.PARENT_ID + " ON " + TABLE.NOTE + + " BEGIN " + + " UPDATE " + TABLE.NOTE + + " SET " + NoteColumns.NOTES_COUNT + "=" + NoteColumns.NOTES_COUNT + " + 1" + + " WHERE " + NoteColumns.ID + "=new." + NoteColumns.PARENT_ID + ";" + + " END";//在文件夹中移入一个Note之后需要更改的数据的表格。 + + /** + * Decrease folder's note count when move note from folder + */ + private static final String NOTE_DECREASE_FOLDER_COUNT_ON_UPDATE_TRIGGER = + "CREATE TRIGGER decrease_folder_count_on_update " + + " AFTER UPDATE OF " + NoteColumns.PARENT_ID + " ON " + TABLE.NOTE + + " BEGIN " + + " UPDATE " + TABLE.NOTE + + " SET " + NoteColumns.NOTES_COUNT + "=" + NoteColumns.NOTES_COUNT + "-1" + + " WHERE " + NoteColumns.ID + "=old." + NoteColumns.PARENT_ID + + " AND " + NoteColumns.NOTES_COUNT + ">0" + ";" + + " END";//在文件夹中移出一个Note之后需要更改的数据的表格。 + + /** + * Increase folder's note count when insert new note to the folder + */ + private static final String NOTE_INCREASE_FOLDER_COUNT_ON_INSERT_TRIGGER = + "CREATE TRIGGER increase_folder_count_on_insert " + + " AFTER INSERT ON " + TABLE.NOTE + + " BEGIN " + + " UPDATE " + TABLE.NOTE + + " SET " + NoteColumns.NOTES_COUNT + "=" + NoteColumns.NOTES_COUNT + " + 1" + + " WHERE " + NoteColumns.ID + "=new." + NoteColumns.PARENT_ID + ";" + + " END";//在文件夹中插入一个Note之后需要更改的数据的表格。 + + /** + * Decrease folder's note count when delete note from the folder + */ + private static final String NOTE_DECREASE_FOLDER_COUNT_ON_DELETE_TRIGGER = + "CREATE TRIGGER decrease_folder_count_on_delete " + + " AFTER DELETE ON " + TABLE.NOTE + + " BEGIN " + + " UPDATE " + TABLE.NOTE + + " SET " + NoteColumns.NOTES_COUNT + "=" + NoteColumns.NOTES_COUNT + "-1" + + " WHERE " + NoteColumns.ID + "=old." + NoteColumns.PARENT_ID + + " AND " + NoteColumns.NOTES_COUNT + ">0;" + + " END";//在文件夹中删除一个Note之后需要更改的数据的表格。 + + /** + * Update note's content when insert data with type {@link DataConstants#NOTE} + */ + private static final String DATA_UPDATE_NOTE_CONTENT_ON_INSERT_TRIGGER = + "CREATE TRIGGER update_note_content_on_insert " + + " AFTER INSERT ON " + TABLE.DATA + + " WHEN new." + DataColumns.MIME_TYPE + "='" + DataConstants.NOTE + "'" + + " BEGIN" + + " UPDATE " + TABLE.NOTE + + " SET " + NoteColumns.SNIPPET + "=new." + DataColumns.CONTENT + + " WHERE " + NoteColumns.ID + "=new." + DataColumns.NOTE_ID + ";" + + " END";//在文件夹中对一个Note导入新的数据之后需要更改的数据的表格。 + + /** + * Update note's content when data with {@link DataConstants#NOTE} type has changed + */ + private static final String DATA_UPDATE_NOTE_CONTENT_ON_UPDATE_TRIGGER = + "CREATE TRIGGER update_note_content_on_update " + + " AFTER UPDATE ON " + TABLE.DATA + + " WHEN old." + DataColumns.MIME_TYPE + "='" + DataConstants.NOTE + "'" + + " BEGIN" + + " UPDATE " + TABLE.NOTE + + " SET " + NoteColumns.SNIPPET + "=new." + DataColumns.CONTENT + + " WHERE " + NoteColumns.ID + "=new." + DataColumns.NOTE_ID + ";" + + " END";//Note数据被修改后需要更改的数据的表格。 + + /** + * Update note's content when data with {@link DataConstants#NOTE} type has deleted + */ + private static final String DATA_UPDATE_NOTE_CONTENT_ON_DELETE_TRIGGER = + "CREATE TRIGGER update_note_content_on_delete " + + " AFTER delete ON " + TABLE.DATA + + " WHEN old." + DataColumns.MIME_TYPE + "='" + DataConstants.NOTE + "'" + + " BEGIN" + + " UPDATE " + TABLE.NOTE + + " SET " + NoteColumns.SNIPPET + "=''" + + " WHERE " + NoteColumns.ID + "=old." + DataColumns.NOTE_ID + ";" + + " END";//Note数据被删除后需要更改的数据的表格。 + + /** + * Delete datas belong to note which has been deleted + */ + private static final String NOTE_DELETE_DATA_ON_DELETE_TRIGGER = + "CREATE TRIGGER delete_data_on_delete " + + " AFTER DELETE ON " + TABLE.NOTE + + " BEGIN" + + " DELETE FROM " + TABLE.DATA + + " WHERE " + DataColumns.NOTE_ID + "=old." + NoteColumns.ID + ";" + + " END";//删除已删除的便签的数据后需要更改的数据的表格。 + + /** + * Delete notes belong to folder which has been deleted + */ + private static final String FOLDER_DELETE_NOTES_ON_DELETE_TRIGGER = + "CREATE TRIGGER folder_delete_notes_on_delete " + + " AFTER DELETE ON " + TABLE.NOTE + + " BEGIN" + + " DELETE FROM " + TABLE.NOTE + + " WHERE " + NoteColumns.PARENT_ID + "=old." + NoteColumns.ID + ";" + + " END";//删除已删除的文件夹的便签后需要更改的数据的表格。 + + /** + * Move notes belong to folder which has been moved to trash folder + */ + private static final String FOLDER_MOVE_NOTES_ON_TRASH_TRIGGER = + "CREATE TRIGGER folder_move_notes_on_trash " + + " AFTER UPDATE ON " + TABLE.NOTE + + " WHEN new." + NoteColumns.PARENT_ID + "=" + Notes.ID_TRASH_FOLER + + " BEGIN" + + " UPDATE " + TABLE.NOTE + + " SET " + NoteColumns.PARENT_ID + "=" + Notes.ID_TRASH_FOLER + + " WHERE " + NoteColumns.PARENT_ID + "=old." + NoteColumns.ID + ";" + + " END";//还原垃圾桶中便签后需要更改的数据的表格。 + + public NotesDatabaseHelper(Context context) { + super(context, DB_NAME, null, DB_VERSION); + }//构造函数,传入数据库的名称和版本 + + public void createNoteTable(SQLiteDatabase db) { + db.execSQL(CREATE_NOTE_TABLE_SQL); + reCreateNoteTableTriggers(db); + createSystemFolder(db); + Log.d(TAG, "note table has been created"); + }//创建表格(用来存储标签属性) + + private void reCreateNoteTableTriggers(SQLiteDatabase db) { + db.execSQL("DROP TRIGGER IF EXISTS increase_folder_count_on_update"); + db.execSQL("DROP TRIGGER IF EXISTS decrease_folder_count_on_update"); + db.execSQL("DROP TRIGGER IF EXISTS decrease_folder_count_on_delete"); + db.execSQL("DROP TRIGGER IF EXISTS delete_data_on_delete"); + db.execSQL("DROP TRIGGER IF EXISTS increase_folder_count_on_insert"); + db.execSQL("DROP TRIGGER IF EXISTS folder_delete_notes_on_delete"); + db.execSQL("DROP TRIGGER IF EXISTS folder_move_notes_on_trash"); + + db.execSQL(NOTE_INCREASE_FOLDER_COUNT_ON_UPDATE_TRIGGER); + db.execSQL(NOTE_DECREASE_FOLDER_COUNT_ON_UPDATE_TRIGGER); + db.execSQL(NOTE_DECREASE_FOLDER_COUNT_ON_DELETE_TRIGGER); + db.execSQL(NOTE_DELETE_DATA_ON_DELETE_TRIGGER); + db.execSQL(NOTE_INCREASE_FOLDER_COUNT_ON_INSERT_TRIGGER); + db.execSQL(FOLDER_DELETE_NOTES_ON_DELETE_TRIGGER); + db.execSQL(FOLDER_MOVE_NOTES_ON_TRASH_TRIGGER); + }//execSQL是数据库操作的API,主要是更改行为的SQL语句。 + //在这里主要是用来重新创建上述定义的表格用的,先删除原来有的数据库的触发器再重新创建新的数据库 + + private void createSystemFolder(SQLiteDatabase db) { + ContentValues values = new ContentValues(); + + /** + * call record foler for call notes + */ + values.put(NoteColumns.ID, Notes.ID_CALL_RECORD_FOLDER); + values.put(NoteColumns.TYPE, Notes.TYPE_SYSTEM); + db.insert(TABLE.NOTE, null, values); + + /** + * root folder which is default folder + */ + values.clear(); + values.put(NoteColumns.ID, Notes.ID_ROOT_FOLDER); + values.put(NoteColumns.TYPE, Notes.TYPE_SYSTEM); + db.insert(TABLE.NOTE, null, values); + + /** + * temporary folder which is used for moving note + */ + values.clear(); + values.put(NoteColumns.ID, Notes.ID_TEMPARAY_FOLDER); + values.put(NoteColumns.TYPE, Notes.TYPE_SYSTEM); + db.insert(TABLE.NOTE, null, values); + + /** + * create trash folder + */ + values.clear(); + values.put(NoteColumns.ID, Notes.ID_TRASH_FOLER); + values.put(NoteColumns.TYPE, Notes.TYPE_SYSTEM); + db.insert(TABLE.NOTE, null, values); + }//创建几个系统文件夹 + + public void createDataTable(SQLiteDatabase db) { + db.execSQL(CREATE_DATA_TABLE_SQL); + reCreateDataTableTriggers(db); + db.execSQL(CREATE_DATA_NOTE_ID_INDEX_SQL); + Log.d(TAG, "data table has been created"); + }//创建表格(用来存储标签内容) + + private void reCreateDataTableTriggers(SQLiteDatabase db) { + db.execSQL("DROP TRIGGER IF EXISTS update_note_content_on_insert"); + db.execSQL("DROP TRIGGER IF EXISTS update_note_content_on_update"); + db.execSQL("DROP TRIGGER IF EXISTS update_note_content_on_delete"); + + db.execSQL(DATA_UPDATE_NOTE_CONTENT_ON_INSERT_TRIGGER); + db.execSQL(DATA_UPDATE_NOTE_CONTENT_ON_UPDATE_TRIGGER); + db.execSQL(DATA_UPDATE_NOTE_CONTENT_ON_DELETE_TRIGGER); + }//同上面的execSQL + + static synchronized NotesDatabaseHelper getInstance(Context context) { + if (mInstance == null) { + mInstance = new NotesDatabaseHelper(context); + } + return mInstance; + }//上网查是为解决同一时刻只能有一个线程执行. + //在写程序库代码时,有时有一个类需要被所有的其它类使用, + //但又要求这个类只能被实例化一次,是个服务类,定义一次,其它类使用同一个这个类的实例 + + @Override + public void onCreate(SQLiteDatabase db) { + createNoteTable(db); + createDataTable(db); + }//实现两个表格(上面创建的两个表格) + + @Override + public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { + boolean reCreateTriggers = false; + boolean skipV2 = false; + + if (oldVersion == 1) { + upgradeToV2(db); + skipV2 = true; // this upgrade including the upgrade from v2 to v3 + oldVersion++; + } + + if (oldVersion == 2 && !skipV2) { + upgradeToV3(db); + reCreateTriggers = true; + oldVersion++; + } + + if (oldVersion == 3) { + upgradeToV4(db); + oldVersion++; + } + + if (reCreateTriggers) { + reCreateNoteTableTriggers(db); + reCreateDataTableTriggers(db); + } + + if (oldVersion != newVersion) { + throw new IllegalStateException("Upgrade notes database to version " + newVersion + + "fails"); + } + }//数据库版本的更新(数据库内容的更改) + + private void upgradeToV2(SQLiteDatabase db) { + db.execSQL("DROP TABLE IF EXISTS " + TABLE.NOTE); + db.execSQL("DROP TABLE IF EXISTS " + TABLE.DATA); + createNoteTable(db); + createDataTable(db); + }//更新到V2版本 + + private void upgradeToV3(SQLiteDatabase db) { + // drop unused triggers + db.execSQL("DROP TRIGGER IF EXISTS update_note_modified_date_on_insert"); + db.execSQL("DROP TRIGGER IF EXISTS update_note_modified_date_on_delete"); + db.execSQL("DROP TRIGGER IF EXISTS update_note_modified_date_on_update"); + // add a column for gtask id + db.execSQL("ALTER TABLE " + TABLE.NOTE + " ADD COLUMN " + NoteColumns.GTASK_ID + + " TEXT NOT NULL DEFAULT ''"); + // add a trash system folder + ContentValues values = new ContentValues(); + values.put(NoteColumns.ID, Notes.ID_TRASH_FOLER); + values.put(NoteColumns.TYPE, Notes.TYPE_SYSTEM); + db.insert(TABLE.NOTE, null, values); + }//更新到V3版本 + + private void upgradeToV4(SQLiteDatabase db) { + db.execSQL("ALTER TABLE " + TABLE.NOTE + " ADD COLUMN " + NoteColumns.VERSION + + " INTEGER NOT NULL DEFAULT 0"); + }//更新到V4版本,但是不知道V2、V3、V4是什么意思 +} \ No newline at end of file diff --git a/doc/210340002陈荣浩/data/NotesProvider.java b/doc/210340002陈荣浩/data/NotesProvider.java new file mode 100644 index 0000000..6897999 --- /dev/null +++ b/doc/210340002陈荣浩/data/NotesProvider.java @@ -0,0 +1,320 @@ +package net.micode.notes.data; + +import android.app.SearchManager; +import android.content.ContentProvider; +import android.content.ContentUris; +import android.content.ContentValues; +import android.content.Intent; +import android.content.UriMatcher; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; +import android.net.Uri; +import android.text.TextUtils; +import android.util.Log; + +import net.micode.notes.R; +import net.micode.notes.data.Notes.DataColumns; +import net.micode.notes.data.Notes.NoteColumns; +import net.micode.notes.data.NotesDatabaseHelper.TABLE; +//为存储和获取数据提供接口。可以在不同的应用程序之间共享数据 +//ContentProvider提供的方法 +//query:查询 +//insert:插入 +//update:更新 +//delete:删除 +//getType:得到数据类型 +public class NotesProvider extends ContentProvider { + // UriMatcher用于匹配Uri + private static final UriMatcher mMatcher; + + private NotesDatabaseHelper mHelper; + + 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_SEARCH = 5; + private static final int URI_SEARCH_SUGGEST = 6; + + static { + // 创建UriMatcher时,调用UriMatcher(UriMatcher.NO_MATCH)表示不匹配任何路径的返回码 + mMatcher = new UriMatcher(UriMatcher.NO_MATCH); + // 把需要匹配Uri路径全部给注册上 + mMatcher.addURI(Notes.AUTHORITY, "note", URI_NOTE); + mMatcher.addURI(Notes.AUTHORITY, "note/#", URI_NOTE_ITEM); + mMatcher.addURI(Notes.AUTHORITY, "data", URI_DATA); + mMatcher.addURI(Notes.AUTHORITY, "data/#", URI_DATA_ITEM); + mMatcher.addURI(Notes.AUTHORITY, "search", URI_SEARCH); + mMatcher.addURI(Notes.AUTHORITY, SearchManager.SUGGEST_URI_PATH_QUERY, URI_SEARCH_SUGGEST); + mMatcher.addURI(Notes.AUTHORITY, SearchManager.SUGGEST_URI_PATH_QUERY + "/*", URI_SEARCH_SUGGEST); + } + + /** + * x'0A' represents the '\n' character in sqlite. For title and content in the search result, + * we will trim '\n' and white space in order to show more information. + */ + // 声明 NOTES_SEARCH_PROJECTION + 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; + // 声明NOTES_SNIPPET_SEARCH_QUERY + 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; + + @Override + // Context只有在onCreate()中才被初始化 + // 对mHelper进行实例化 + public boolean onCreate() { + mHelper = NotesDatabaseHelper.getInstance(getContext()); + return true; + } + + @Override + // 查询uri在数据库中对应的位置 + public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, + String sortOrder) { + Cursor c = null; + // 获取可读数据库 + SQLiteDatabase db = mHelper.getReadableDatabase(); + String id = null; + // 匹配查找uri + 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"); + } + + String searchString = null; + if (mMatcher.match(uri) == URI_SEARCH_SUGGEST) { + if (uri.getPathSegments().size() > 1) { + // getPathSegments()方法得到一个String的List, + // 在uri.getPathSegments().get(1)为第2个元素 + searchString = uri.getPathSegments().get(1); + } + } else { + searchString = uri.getQueryParameter("pattern"); + } + + if (TextUtils.isEmpty(searchString)) { + return null; + } + + try { + searchString = String.format("%%%s%%", searchString); + c = db.rawQuery(NOTES_SNIPPET_SEARCH_QUERY, + new String[] { searchString }); + } catch (IllegalStateException ex) { + Log.e(TAG, "got exception: " + ex.toString()); + } + break; + default: + // 抛出异常 + throw new IllegalArgumentException("Unknown URI " + uri); + } + if (c != null) { + c.setNotificationUri(getContext().getContentResolver(), uri); + } + return c; + } + + @Override + // 插入一个uri + 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; + // 如果存在,查找NOTE_ID + case URI_DATA: + if (values.containsKey(DataColumns.NOTE_ID)) { + noteId = values.getAsLong(DataColumns.NOTE_ID); + } else { + Log.d(TAG, "Wrong data format without note id:" + values.toString()); + } + insertedId = dataId = db.insert(TABLE.DATA, null, values); + break; + default: + throw new IllegalArgumentException("Unknown URI " + uri); + } + // Notify the note uri + // notifyChange获得一个ContextResolver对象并且更新里面的内容 + if (noteId > 0) { + getContext().getContentResolver().notifyChange( + ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, noteId), null); + } + + // Notify the data uri + if (dataId > 0) { + getContext().getContentResolver().notifyChange( + ContentUris.withAppendedId(Notes.CONTENT_DATA_URI, dataId), null); + } + + // 返回插入的uri的路径 + return ContentUris.withAppendedId(uri, insertedId); + } + + @Override + // 删除一个uri + public int delete(Uri uri, String selection, String[] selectionArgs) { + //Uri代表要操作的数据,Android上可用的每种资源 -包括 图像、视频片段、音频资源等都可以用Uri来表示。 + int count = 0; + String id = null; + // 获得可写的数据库 + SQLiteDatabase db = mHelper.getWritableDatabase(); + 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 + * trash + */ + long noteId = Long.valueOf(id); + if (noteId <= 0) { + break; + } + count = db.delete(TABLE.NOTE, + 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); + deleteData = true; + break; + default: + throw new IllegalArgumentException("Unknown URI " + uri); + } + if (count > 0) { + if (deleteData) { + getContext().getContentResolver().notifyChange(Notes.CONTENT_NOTE_URI, null); + } + getContext().getContentResolver().notifyChange(uri, null); + } + return count; + } + + @Override + // 更新一个uri + public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { + int count = 0; + String id = null; + SQLiteDatabase db = mHelper.getWritableDatabase(); + 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); + updateData = true; + break; + default: + throw new IllegalArgumentException("Unknown URI " + uri); + } + + if (count > 0) { + if (updateData) { + getContext().getContentResolver().notifyChange(Notes.CONTENT_NOTE_URI, null); + } + getContext().getContentResolver().notifyChange(uri, null); + } + return count; + } + + // 将字符串解析成规定格式 + private String parseSelection(String selection) { + return (!TextUtils.isEmpty(selection) ? " AND (" + selection + ')' : ""); + } + + //增加一个noteVersion + private void increaseNoteVersion(long id, String selection, String[] selectionArgs) { + StringBuilder sql = new StringBuilder(120); + sql.append("UPDATE "); + sql.append(TABLE.NOTE); + sql.append(" SET "); + sql.append(NoteColumns.VERSION); + sql.append("=" + NoteColumns.VERSION + "+1 "); + + if (id > 0 || !TextUtils.isEmpty(selection)) { + sql.append(" WHERE "); + } + if (id > 0) { + sql.append(NoteColumns.ID + "=" + String.valueOf(id)); + } + if (!TextUtils.isEmpty(selection)) { + String selectString = id > 0 ? parseSelection(selection) : selection; + for (String args : selectionArgs) { + selectString = selectString.replaceFirst("\\?", args); + } + sql.append(selectString); + } + + // execSQL()方法可以执行insert、delete、update和CREATE TABLE之类有更改行为的SQL语句 + mHelper.getWritableDatabase().execSQL(sql.toString()); + } + + @Override + public String getType(Uri uri) { + // TODO Auto-generated method stub + return null; + } + +} \ No newline at end of file diff --git a/doc/210340002陈荣浩/model/Note.java b/doc/210340002陈荣浩/model/Note.java new file mode 100644 index 0000000..a08115a --- /dev/null +++ b/doc/210340002陈荣浩/model/Note.java @@ -0,0 +1,255 @@ +/* + * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * + * 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 net.micode.notes.model; + +import android.content.ContentProviderOperation;//批量的更新、插入、删除数据。 +import android.content.ContentProviderResult;//操作的结果 +import android.content.ContentUris;//用于添加和获取Uri后面的ID +import android.content.ContentValues;//一种用来存储基本数据类型数据的存储机制 +import android.content.Context;//一种用来存储基本数据类型数据的存储机制 +import android.content.OperationApplicationException;//操作应用程序容错 +import android.net.Uri;//表示待操作的数据 +import android.os.RemoteException;//远程容错 +import android.util.Log;//输出日志,比如说出错、警告等 + +import net.micode.notes.data.Notes; +import net.micode.notes.data.Notes.CallNote; +import net.micode.notes.data.Notes.DataColumns; +import net.micode.notes.data.Notes.NoteColumns; +import net.micode.notes.data.Notes.TextNote; + +import java.util.ArrayList; + + +public class Note { + private ContentValues mNoteDiffValues; + private NoteData mNoteData; + private static final String TAG = "Note"; + /** + * Create a new note id for adding a new note to databases + */ + public static synchronized long getNewNoteId(Context context, long folderId) { + // Create a new note in the database + ContentValues values = new ContentValues(); + long createdTime = System.currentTimeMillis(); + values.put(NoteColumns.CREATED_DATE, createdTime); + values.put(NoteColumns.MODIFIED_DATE, createdTime); + values.put(NoteColumns.TYPE, Notes.TYPE_NOTE); + values.put(NoteColumns.LOCAL_MODIFIED, 1); + values.put(NoteColumns.PARENT_ID, folderId);//将数据写入数据库表格 + Uri uri = context.getContentResolver().insert(Notes.CONTENT_NOTE_URI, values); + //ContentResolver()主要是实现外部应用对ContentProvider中的数据 + //进行添加、删除、修改和查询操作 + long noteId = 0; + try { + noteId = Long.valueOf(uri.getPathSegments().get(1)); + } catch (NumberFormatException e) { + Log.e(TAG, "Get note id error :" + e.toString()); + noteId = 0; + }//try-catch异常处理 + if (noteId == -1) { + throw new IllegalStateException("Wrong note id:" + noteId); + } + return noteId; + } + + public Note() { + mNoteDiffValues = new ContentValues(); + mNoteData = new NoteData(); + }//定义两个变量用来存储便签的数据,一个是存储便签属性、一个是存储便签内容 + + public void setNoteValue(String key, String value) { + mNoteDiffValues.put(key, value); + mNoteDiffValues.put(NoteColumns.LOCAL_MODIFIED, 1); + mNoteDiffValues.put(NoteColumns.MODIFIED_DATE, System.currentTimeMillis()); + }//设置数据库表格的标签属性数据 + + public void setTextData(String key, String value) { + mNoteData.setTextData(key, value); + }//设置数据库表格的标签文本内容的数据 + + public void setTextDataId(long id) { + mNoteData.setTextDataId(id); + }//设置文本数据的ID + + public long getTextDataId() { + return mNoteData.mTextDataId; + }//得到文本数据的ID + + public void setCallDataId(long id) { + mNoteData.setCallDataId(id); + }//设置电话号码数据的ID + + public void setCallData(String key, String value) { + mNoteData.setCallData(key, value); + }//得到电话号码数据的ID + + public boolean isLocalModified() { + return mNoteDiffValues.size() > 0 || mNoteData.isLocalModified(); + }//判断是否是本地修改 + + public boolean syncNote(Context context, long noteId) { + if (noteId <= 0) { + throw new IllegalArgumentException("Wrong note id:" + noteId); + } + + if (!isLocalModified()) { + return true; + } + + /** + * In theory, once data changed, the note should be updated on {@link NoteColumns#LOCAL_MODIFIED} and + * {@link NoteColumns#MODIFIED_DATE}. For data safety, though update note fails, we also update the + * note data info + */ + if (context.getContentResolver().update( + ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, noteId), mNoteDiffValues, null, + null) == 0) { + Log.e(TAG, "Update note error, should not happen"); + // Do not return, fall through + } + mNoteDiffValues.clear(); + + if (mNoteData.isLocalModified() + && (mNoteData.pushIntoContentResolver(context, noteId) == null)) { + return false; + } + + return true; + }//判断数据是否同步 + + private class NoteData { + private long mTextDataId; + + private ContentValues mTextDataValues; + + private long mCallDataId; + + private ContentValues mCallDataValues; + + private static final String TAG = "NoteData"; + + public NoteData() { + mTextDataValues = new ContentValues(); + mCallDataValues = new ContentValues(); + mTextDataId = 0; + mCallDataId = 0; + } + //下面是上述几个函数的具体实现 + boolean isLocalModified() { + return mTextDataValues.size() > 0 || mCallDataValues.size() > 0; + } + + void setTextDataId(long id) { + if(id <= 0) { + throw new IllegalArgumentException("Text data id should larger than 0"); + } + mTextDataId = id; + } + + void setCallDataId(long id) { + if (id <= 0) { + throw new IllegalArgumentException("Call data id should larger than 0"); + } + mCallDataId = id; + } + + void setCallData(String key, String value) { + mCallDataValues.put(key, value); + mNoteDiffValues.put(NoteColumns.LOCAL_MODIFIED, 1); + mNoteDiffValues.put(NoteColumns.MODIFIED_DATE, System.currentTimeMillis()); + } + + void setTextData(String key, String value) { + mTextDataValues.put(key, value); + mNoteDiffValues.put(NoteColumns.LOCAL_MODIFIED, 1); + mNoteDiffValues.put(NoteColumns.MODIFIED_DATE, System.currentTimeMillis()); + } + //下面函数的作用是将新的数据通过Uri的操作存储到数据库 + Uri pushIntoContentResolver(Context context, long noteId) { + /** + * Check for safety + */ + if (noteId <= 0) { + throw new IllegalArgumentException("Wrong note id:" + noteId); + }//判断数据是否合法 + + ArrayList operationList = new ArrayList(); + ContentProviderOperation.Builder builder = null;//数据库的操作列表 + + if(mTextDataValues.size() > 0) { + mTextDataValues.put(DataColumns.NOTE_ID, noteId); + if (mTextDataId == 0) { + mTextDataValues.put(DataColumns.MIME_TYPE, TextNote.CONTENT_ITEM_TYPE); + Uri uri = context.getContentResolver().insert(Notes.CONTENT_DATA_URI, + mTextDataValues); + try { + setTextDataId(Long.valueOf(uri.getPathSegments().get(1))); + } catch (NumberFormatException e) { + Log.e(TAG, "Insert new text data fail with noteId" + noteId); + mTextDataValues.clear(); + return null; + } + } else { + builder = ContentProviderOperation.newUpdate(ContentUris.withAppendedId( + Notes.CONTENT_DATA_URI, mTextDataId)); + builder.withValues(mTextDataValues); + operationList.add(builder.build()); + } + mTextDataValues.clear(); + }//把文本数据存入DataColumns + + if(mCallDataValues.size() > 0) { + mCallDataValues.put(DataColumns.NOTE_ID, noteId); + if (mCallDataId == 0) { + mCallDataValues.put(DataColumns.MIME_TYPE, CallNote.CONTENT_ITEM_TYPE); + Uri uri = context.getContentResolver().insert(Notes.CONTENT_DATA_URI, + mCallDataValues); + try { + setCallDataId(Long.valueOf(uri.getPathSegments().get(1))); + } catch (NumberFormatException e) { + Log.e(TAG, "Insert new call data fail with noteId" + noteId); + mCallDataValues.clear(); + return null; + } + } else { + builder = ContentProviderOperation.newUpdate(ContentUris.withAppendedId( + Notes.CONTENT_DATA_URI, mCallDataId)); + builder.withValues(mCallDataValues); + operationList.add(builder.build()); + } + mCallDataValues.clear(); + }//把电话号码数据存入DataColumns + + if (operationList.size() > 0) { + try { + ContentProviderResult[] results = context.getContentResolver().applyBatch( + Notes.AUTHORITY, operationList); + return (results == null || results.length == 0 || results[0] == null) ? null + : ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, noteId); + } catch (RemoteException e) { + Log.e(TAG, String.format("%s: %s", e.toString(), e.getMessage())); + return null; + } catch (OperationApplicationException e) { + Log.e(TAG, String.format("%s: %s", e.toString(), e.getMessage())); + return null; + } + }//存储过程中的异常处理 + return null; + } + } +} diff --git a/doc/210340002陈荣浩/model/WorkingNote.java b/doc/210340002陈荣浩/model/WorkingNote.java new file mode 100644 index 0000000..b042599 --- /dev/null +++ b/doc/210340002陈荣浩/model/WorkingNote.java @@ -0,0 +1,392 @@ +/* + * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * + * 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 net.micode.notes.model; + +import android.appwidget.AppWidgetManager; +import android.content.ContentUris; +import android.content.Context; +import android.database.Cursor; +import android.text.TextUtils; +import android.util.Log; + +import net.micode.notes.data.Notes; +import net.micode.notes.data.Notes.CallNote; +import net.micode.notes.data.Notes.DataColumns; +import net.micode.notes.data.Notes.DataConstants; +import net.micode.notes.data.Notes.NoteColumns; +import net.micode.notes.data.Notes.TextNote; +import net.micode.notes.tool.ResourceParser.NoteBgResources; + + +public class WorkingNote { + // Note for the working note + private Note mNote; + // Note Id + private long mNoteId; + // Note content + private String mContent; + // Note mode + private int mMode; + + private long mAlertDate; + + private long mModifiedDate; + + private int mBgColorId; + + private int mWidgetId; + + private int mWidgetType; + + private long mFolderId; + + private Context mContext; + + private static final String TAG = "WorkingNote"; + + private boolean mIsDeleted; + + private NoteSettingChangedListener mNoteSettingStatusListener; + + // 声明 DATA_PROJECTION字符串数组 + public static final String[] DATA_PROJECTION = new String[] { + DataColumns.ID, + DataColumns.CONTENT, + DataColumns.MIME_TYPE, + DataColumns.DATA1, + DataColumns.DATA2, + DataColumns.DATA3, + DataColumns.DATA4, + }; + // 声明 NOTE_PROJECTION字符串数组 + public static final String[] NOTE_PROJECTION = new String[] { + NoteColumns.PARENT_ID, + NoteColumns.ALERTED_DATE, + NoteColumns.BG_COLOR_ID, + NoteColumns.WIDGET_ID, + NoteColumns.WIDGET_TYPE, + NoteColumns.MODIFIED_DATE + }; + + private static final int DATA_ID_COLUMN = 0; + + private static final int DATA_CONTENT_COLUMN = 1; + + private static final int DATA_MIME_TYPE_COLUMN = 2; + + private static final int DATA_MODE_COLUMN = 3; + + private static final int NOTE_PARENT_ID_COLUMN = 0; + + private static final int NOTE_ALERTED_DATE_COLUMN = 1; + + private static final int NOTE_BG_COLOR_ID_COLUMN = 2; + + private static final int NOTE_WIDGET_ID_COLUMN = 3; + + private static final int NOTE_WIDGET_TYPE_COLUMN = 4; + + private static final int NOTE_MODIFIED_DATE_COLUMN = 5; + + + // New note construct + private WorkingNote(Context context, long folderId) { + mContext = context; + mAlertDate = 0; + mModifiedDate = System.currentTimeMillis(); + mFolderId = folderId; + mNote = new Note(); + mNoteId = 0; + mIsDeleted = false; + mMode = 0; + mWidgetType = Notes.TYPE_WIDGET_INVALIDE; + } + // WorkingNote的构造函数 + // Existing note construct + private WorkingNote(Context context, long noteId, long folderId) { + mContext = context; + mNoteId = noteId; + mFolderId = folderId; + mIsDeleted = false; + mNote = new Note(); + loadNote(); + } + // 加载Note + // 通过数据库调用query函数找到第一个条目 + private void loadNote() { + Cursor cursor = mContext.getContentResolver().query( + ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, mNoteId), NOTE_PROJECTION, null, + null, null); + // 若存在,储存相应信息 + if (cursor != null) { + if (cursor.moveToFirst()) { + mFolderId = cursor.getLong(NOTE_PARENT_ID_COLUMN); + mBgColorId = cursor.getInt(NOTE_BG_COLOR_ID_COLUMN); + mWidgetId = cursor.getInt(NOTE_WIDGET_ID_COLUMN); + mWidgetType = cursor.getInt(NOTE_WIDGET_TYPE_COLUMN); + mAlertDate = cursor.getLong(NOTE_ALERTED_DATE_COLUMN); + mModifiedDate = cursor.getLong(NOTE_MODIFIED_DATE_COLUMN); + } + cursor.close(); + // 若不存在,报错 + } else { + Log.e(TAG, "No note with id:" + mNoteId); + throw new IllegalArgumentException("Unable to find note with id " + mNoteId); + } + loadNoteData(); + } + // 加载NoteData + private void loadNoteData() { + Cursor cursor = mContext.getContentResolver().query(Notes.CONTENT_DATA_URI, DATA_PROJECTION, + DataColumns.NOTE_ID + "=?", new String[] { + String.valueOf(mNoteId) + }, null); + + if (cursor != null) { + // 查到信息不为空 + if (cursor.moveToFirst()) {// 查看第一项是否存在 + do { + String type = cursor.getString(DATA_MIME_TYPE_COLUMN); + if (DataConstants.NOTE.equals(type)) { + mContent = cursor.getString(DATA_CONTENT_COLUMN); + mMode = cursor.getInt(DATA_MODE_COLUMN); + mNote.setTextDataId(cursor.getLong(DATA_ID_COLUMN)); + } else if (DataConstants.CALL_NOTE.equals(type)) { + mNote.setCallDataId(cursor.getLong(DATA_ID_COLUMN)); + } else { + Log.d(TAG, "Wrong note type with type:" + type); + } + } while (cursor.moveToNext());//查阅所有项,直到为空 + } + cursor.close(); + } else { + Log.e(TAG, "No data with id:" + mNoteId); + throw new IllegalArgumentException("Unable to find note's data with id " + mNoteId); + } + } + + // 创建空的Note + // 传参:context,文件夹id,widget,背景颜色 + public static WorkingNote createEmptyNote(Context context, long folderId, int widgetId, + int widgetType, int defaultBgColorId) { + WorkingNote note = new WorkingNote(context, folderId); + // 设定相关属性 + note.setBgColorId(defaultBgColorId); + note.setWidgetId(widgetId); + note.setWidgetType(widgetType); + return note; + } + + public static WorkingNote load(Context context, long id) { + return new WorkingNote(context, id, 0); + } + + // 保存Note + public synchronized boolean saveNote() { + if (isWorthSaving()) {//是否值得保存 + if (!existInDatabase()) { // 是否存在数据库中 + if ((mNoteId = Note.getNewNoteId(mContext, mFolderId)) == 0) { + Log.e(TAG, "Create new note fail with id:" + mNoteId); + return false; + } + } + + mNote.syncNote(mContext, mNoteId); + + /** + * Update widget content if there exist any widget of this note + */ + if (mWidgetId != AppWidgetManager.INVALID_APPWIDGET_ID + && mWidgetType != Notes.TYPE_WIDGET_INVALIDE + && mNoteSettingStatusListener != null) { + mNoteSettingStatusListener.onWidgetChanged(); + } + return true; + } else { + return false; + } + } + // 是否在数据库中存在 + public boolean existInDatabase() { + return mNoteId > 0; + } + // 是否值得保存 + private boolean isWorthSaving() { + if (mIsDeleted || (!existInDatabase() && TextUtils.isEmpty(mContent)) + || (existInDatabase() && !mNote.isLocalModified())) { + return false; + } else { + return true; + } + } + // 设置mNoteSettingStatusListener + public void setOnSettingStatusChangedListener(NoteSettingChangedListener l) { + mNoteSettingStatusListener = l; + } + // 设置AlertDate + // 若 mAlertDate与data不同,则更改mAlertDate并设定NoteValue + public void setAlertDate(long date, boolean set) { + if (date != mAlertDate) { + mAlertDate = date; + mNote.setNoteValue(NoteColumns.ALERTED_DATE, String.valueOf(mAlertDate)); + } + if (mNoteSettingStatusListener != null) { + mNoteSettingStatusListener.onClockAlertChanged(date, set); + } + } + // 设定删除标记 + public void markDeleted(boolean mark) { + mIsDeleted = mark; // 设定标记 + if (mWidgetId != AppWidgetManager.INVALID_APPWIDGET_ID + && mWidgetType != Notes.TYPE_WIDGET_INVALIDE && mNoteSettingStatusListener != null) { + mNoteSettingStatusListener.onWidgetChanged(); + // 调用mNoteSettingStatusListener的 onWidgetChanged方法 + } + } + // 设定背景颜色 + public void setBgColorId(int id) { + if (id != mBgColorId) { + mBgColorId = id; + if (mNoteSettingStatusListener != null) { + mNoteSettingStatusListener.onBackgroundColorChanged(); + } + mNote.setNoteValue(NoteColumns.BG_COLOR_ID, String.valueOf(id)); + + } + } + // 设定检查列表模式 + // 参数:mode + public void setCheckListMode(int mode) { + if (mMode != mode) {//设定条件 mMode != mode + if (mNoteSettingStatusListener != null) { + mNoteSettingStatusListener.onCheckListModeChanged(mMode, mode); + } + mMode = mode; + mNote.setTextData(TextNote.MODE, String.valueOf(mMode)); + } + } + // 设定WidgetType + // 参数:type + public void setWidgetType(int type) { + if (type != mWidgetType) {//设定条件 type != mWidgetType + mWidgetType = type; + mNote.setNoteValue(NoteColumns.WIDGET_TYPE, String.valueOf(mWidgetType)); + // 调用Note的setNoteValue方法更改WidgetType + } + } + + // 设定WidgetId + // 参数:id + public void setWidgetId(int id) { + if (id != mWidgetId) {//设定条件 id != mWidgetId + mWidgetId = id; + mNote.setNoteValue(NoteColumns.WIDGET_ID, String.valueOf(mWidgetId)); + // 调用Note的setNoteValue方法更改WidgetId + } + } + + // 设定WorkingTex + // 参数:更改的text + public void setWorkingText(String text) { + if (!TextUtils.equals(mContent, text)) {//设定条件 mContent, text内容不同 + mContent = text; + mNote.setTextData(DataColumns.CONTENT, mContent); + // 调用Note的setTextData方法更改WorkingText + } + } + // 转变mNote的CallData及CallNote信息 + // 参数:String phoneNumber, long callDate + public void convertToCallNote(String phoneNumber, long callDate) { + mNote.setCallData(CallNote.CALL_DATE, String.valueOf(callDate)); + mNote.setCallData(CallNote.PHONE_NUMBER, phoneNumber); + mNote.setNoteValue(NoteColumns.PARENT_ID, String.valueOf(Notes.ID_CALL_RECORD_FOLDER)); + } + // 判断是否有时钟题型 + public boolean hasClockAlert() { + return (mAlertDate > 0 ? true : false); + } + // 获取Content + public String getContent() { + return mContent; + } + // 获取AlertDate + public long getAlertDate() { + return mAlertDate; + } + // 获取ModifiedDate + public long getModifiedDate() { + return mModifiedDate; + } + // 获取背景颜色来源id + public int getBgColorResId() { + return NoteBgResources.getNoteBgResource(mBgColorId); + } + // 获取背景颜色id + public int getBgColorId() { + return mBgColorId; + } + // 获取标题背景颜色id + public int getTitleBgResId() { + return NoteBgResources.getNoteTitleBgResource(mBgColorId); + } + // 获取CheckListMode + public int getCheckListMode() { + return mMode; + } + // 获取便签id + public long getNoteId() { + return mNoteId; + } + // 获取文件夹id + public long getFolderId() { + return mFolderId; + } + // 获取WidgetId + public int getWidgetId() { + return mWidgetId; + } + // 获取WidgetType + public int getWidgetType() { + return mWidgetType; + } + // 创建接口 NoteSettingChangedListener,便签更新监视 + // 为NoteEditActivity提供接口 + // 提供函数有 + public interface NoteSettingChangedListener { + /** + * Called when the background color of current note has just changed + */ + void onBackgroundColorChanged(); + + /** + * Called when user set clock + */ + void onClockAlertChanged(long date, boolean set); + + /** + * Call when user create note from widget + */ + void onWidgetChanged(); + + /** + * Call when switch between check list mode and normal mode + * @param oldMode is previous mode before change + * @param newMode is new mode + */ + void onCheckListModeChanged(int oldMode, int newMode); + } +} diff --git a/e76723e5a7 b/e76723e5a7 new file mode 100644 index 0000000..e69de29 -- 2.34.1 From 6dbe8e1ff523494aa185cd738acee8bd8f5f3905 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E5=8D=93=E6=9D=A8?= <2424012376@qq.com> Date: Thu, 11 May 2023 21:19:35 +0800 Subject: [PATCH 3/6] =?UTF-8?q?=EF=BC=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 添加密码/小米便签.vsdx | Bin 0 -> 41724 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 添加密码/小米便签.vsdx diff --git a/添加密码/小米便签.vsdx b/添加密码/小米便签.vsdx new file mode 100644 index 0000000000000000000000000000000000000000..ee7def5670defa1e2d01fc4deedf456f52c01535 GIT binary patch literal 41724 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%0A(+!7m0m&bvWh66jQi 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 il>D8WF8#0Ee}*X9YClb!e=h6*0jt Date: Sun, 18 Jun 2023 13:22:32 +0800 Subject: [PATCH 5/6] =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../210340038张卓杨实践总结报告.docx | Bin 0 -> 12574 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 210340038张卓杨实践报告总结/210340038张卓杨实践总结报告.docx diff --git a/210340038张卓杨实践报告总结/210340038张卓杨实践总结报告.docx b/210340038张卓杨实践报告总结/210340038张卓杨实践总结报告.docx new file mode 100644 index 0000000000000000000000000000000000000000..19821cfa16f103bbb0a11f68089d3e90529fd3a4 GIT binary patch literal 12574 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 literal 0 HcmV?d00001 -- 2.34.1 From 32f484ca08e28c2255ae666e8fdab91b0f172cf7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E5=8D=93=E6=9D=A8?= <2424012376@qq.com> Date: Sun, 18 Jun 2023 13:23:07 +0800 Subject: [PATCH 6/6] =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tool类/BackupUtils.txt | 310 ++++++++++++++++++ .../tool类/DataUtils.txt | 264 +++++++++++++++ .../tool类/GTaskStringUtils.txt | 100 ++++++ .../tool类/ResourceParser.txt | 163 +++++++++ .../widget类/NoteWidgetProvider.txt | 118 +++++++ .../widget类/NoteWidgetProvider_2x.txt | 34 ++ .../widget类/NoteWidgetProvider_4x.txt | 33 ++ 7 files changed, 1022 insertions(+) create mode 100644 小米便签代码精读/tool类/BackupUtils.txt create mode 100644 小米便签代码精读/tool类/DataUtils.txt create mode 100644 小米便签代码精读/tool类/GTaskStringUtils.txt create mode 100644 小米便签代码精读/tool类/ResourceParser.txt create mode 100644 小米便签代码精读/widget类/NoteWidgetProvider.txt create mode 100644 小米便签代码精读/widget类/NoteWidgetProvider_2x.txt create mode 100644 小米便签代码精读/widget类/NoteWidgetProvider_4x.txt diff --git a/小米便签代码精读/tool类/BackupUtils.txt b/小米便签代码精读/tool类/BackupUtils.txt new file mode 100644 index 0000000..7e5abe4 --- /dev/null +++ b/小米便签代码精读/tool类/BackupUtils.txt @@ -0,0 +1,310 @@ +BackupUtils: + +package net.micode.notes.tool; + +public class BackupUtils { + private static final String TAG = "BackupUtils"; + // Singleton stuff + private static BackupUtils sInstance; //类里面定义自己类的对象 + + public static synchronized BackupUtils getInstance(Context context) { + //当某个线程运行时,要检查其他线程是否也在进行 + if (sInstance == null) { + sInstance = new BackupUtils(context); + } + return sInstance; + } + + /** + * Following states are signs to represents backup or restore + * status + */ + // Currently, the sdcard is not mounted 手机内没有SD卡 + public static final int STATE_SD_CARD_UNMOUONTED = 0; + // The backup file not exist 没有备份文件夹 + public static final int STATE_BACKUP_FILE_NOT_EXIST = 1; + // The data is not well formated, may be changed by other programs 数据已被破坏,也可能被修改 + public static final int STATE_DATA_DESTROIED = 2; + // Some run-time exception which causes restore or backup fails 超时异常 + public static final int STATE_SYSTEM_ERROR = 3; + // Backup or restore success 成功存储 + public static final int STATE_SUCCESS = 4; + + private TextExport mTextExport; + + private BackupUtils(Context context) { //初始化函数 + mTextExport = new TextExport(context); + } + + private static boolean externalStorageAvailable() { //外部存储功能是否正常 + return Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState()); + } + + public int exportToText() { + return mTextExport.exportToText(); + } + + public String getExportedTextFileName() { + return mTextExport.mFileName; + } + + public String getExportedTextFileDir() { + return mTextExport.mFileDirectory; + } + + private static class TextExport { + private static final String[] NOTE_PROJECTION = { + NoteColumns.ID, + NoteColumns.MODIFIED_DATE, + NoteColumns.SNIPPET, + NoteColumns.TYPE + }; + + private static final int NOTE_COLUMN_ID = 0; + + private static final int NOTE_COLUMN_MODIFIED_DATE = 1; + + private static final int NOTE_COLUMN_SNIPPET = 2; + + private static final String[] DATA_PROJECTION = { + DataColumns.CONTENT, + DataColumns.MIME_TYPE, + DataColumns.DATA1, + DataColumns.DATA2, + DataColumns.DATA3, + DataColumns.DATA4, + }; + + private static final int DATA_COLUMN_CONTENT = 0; + + private static final int DATA_COLUMN_MIME_TYPE = 1; + + private static final int DATA_COLUMN_CALL_DATE = 2; + + private static final int DATA_COLUMN_PHONE_NUMBER = 4; + + private final String [] TEXT_FORMAT; + private static final int FORMAT_FOLDER_NAME = 0; + private static final int FORMAT_NOTE_DATE = 1; + private static final int FORMAT_NOTE_CONTENT = 2; + + private Context mContext; + private String mFileName; + private String mFileDirectory; + + public TextExport(Context context) { + TEXT_FORMAT = context.getResources().getStringArray(R.array.format_for_exported_note); + mContext = context; + mFileName = ""; + mFileDirectory = ""; + } + + private String getFormat(int id) { //获取文本的组成部分 + return TEXT_FORMAT[id]; + } + + /** + * Export the folder identified by folder id to text + */ + private void exportFolderToText(String folderId, PrintStream ps) { + // Query notes belong to this folder 通过查询parent id来制定ID文件夹下的Note + Cursor notesCursor = mContext.getContentResolver().query(Notes.CONTENT_NOTE_URI, + NOTE_PROJECTION, NoteColumns.PARENT_ID + "=?", new String[] { + folderId + }, null); + + if (notesCursor != null) { + if (notesCursor.moveToFirst()) { + do { + // Print note's last modified date ps里面保存有这份note的日期 + ps.println(String.format(getFormat(FORMAT_NOTE_DATE), DateFormat.format( + mContext.getString(R.string.format_datetime_mdhm), + notesCursor.getLong(NOTE_COLUMN_MODIFIED_DATE)))); + // Query data belong to this note + String noteId = notesCursor.getString(NOTE_COLUMN_ID); + exportNoteToText(noteId, ps); //将文件导出到text + } while (notesCursor.moveToNext()); + } + notesCursor.close(); + } + } + + /** + * Export note identified by id to a print stream + */ + private void exportNoteToText(String noteId, PrintStream ps) { + Cursor dataCursor = mContext.getContentResolver().query(Notes.CONTENT_DATA_URI, + DATA_PROJECTION, DataColumns.NOTE_ID + "=?", new String[] { + noteId + }, null); + + if (dataCursor != null) { //利用光标来扫描内容,看是callnote或者note二者中的哪一个,靠ps.printline输出 + if (dataCursor.moveToFirst()) { + do { + String mimeType = dataCursor.getString(DATA_COLUMN_MIME_TYPE); + if (DataConstants.CALL_NOTE.equals(mimeType)) { + // Print phone number 输出电话号 + String phoneNumber = dataCursor.getString(DATA_COLUMN_PHONE_NUMBER); + long callDate = dataCursor.getLong(DATA_COLUMN_CALL_DATE); + String location = dataCursor.getString(DATA_COLUMN_CONTENT); + + if (!TextUtils.isEmpty(phoneNumber)) { //判断是否为空字符 + ps.println(String.format(getFormat(FORMAT_NOTE_CONTENT), + phoneNumber)); + } + // Print call date + ps.println(String.format(getFormat(FORMAT_NOTE_CONTENT), DateFormat + .format(mContext.getString(R.string.format_datetime_mdhm), + callDate))); + // Print call attachment location 打印调用附件位置 + if (!TextUtils.isEmpty(location)) { + ps.println(String.format(getFormat(FORMAT_NOTE_CONTENT), + location)); + } + } else if (DataConstants.NOTE.equals(mimeType)) { + String content = dataCursor.getString(DATA_COLUMN_CONTENT); + if (!TextUtils.isEmpty(content)) { + ps.println(String.format(getFormat(FORMAT_NOTE_CONTENT), + content)); + } + } + } while (dataCursor.moveToNext()); + } + dataCursor.close(); + } + // print a line separator between note 在注释间打印分隔符 + try { + ps.write(new byte[] { + Character.LINE_SEPARATOR, Character.LETTER_NUMBER + }); + } catch (IOException e) { + Log.e(TAG, e.toString()); + } + } + + /** + * Note will be exported as text which is user readable + */ + public int exportToText() { //总函数,调用上面的exportFolder和exportNote + if (!externalStorageAvailable()) { + Log.d(TAG, "Media was not mounted"); + return STATE_SD_CARD_UNMOUONTED; + } + + PrintStream ps = getExportToTextPrintStream(); + if (ps == null) { + Log.e(TAG, "get print stream error"); + return STATE_SYSTEM_ERROR; + } + // First export folder and its notes 导出文件夹里面包含的便签 + Cursor folderCursor = mContext.getContentResolver().query( + Notes.CONTENT_NOTE_URI, + NOTE_PROJECTION, + "(" + NoteColumns.TYPE + "=" + Notes.TYPE_FOLDER + " AND " + + NoteColumns.PARENT_ID + "<>" + Notes.ID_TRASH_FOLER + ") OR " + + NoteColumns.ID + "=" + Notes.ID_CALL_RECORD_FOLDER, null, null); + + if (folderCursor != null) { + if (folderCursor.moveToFirst()) { + do { + // Print folder's name + String folderName = ""; + if(folderCursor.getLong(NOTE_COLUMN_ID) == Notes.ID_CALL_RECORD_FOLDER) { + folderName = mContext.getString(R.string.call_record_folder_name); + } else { + folderName = folderCursor.getString(NOTE_COLUMN_SNIPPET); + } + if (!TextUtils.isEmpty(folderName)) { + ps.println(String.format(getFormat(FORMAT_FOLDER_NAME), folderName)); + } + String folderId = folderCursor.getString(NOTE_COLUMN_ID); + exportFolderToText(folderId, ps); + } while (folderCursor.moveToNext()); + } + folderCursor.close(); + } + + // Export notes in root's folder 将根目录里的便签导出 + Cursor noteCursor = mContext.getContentResolver().query( + Notes.CONTENT_NOTE_URI, + NOTE_PROJECTION, + NoteColumns.TYPE + "=" + +Notes.TYPE_NOTE + " AND " + NoteColumns.PARENT_ID + + "=0", null, null); + + if (noteCursor != null) { + if (noteCursor.moveToFirst()) { + do { + ps.println(String.format(getFormat(FORMAT_NOTE_DATE), DateFormat.format( + mContext.getString(R.string.format_datetime_mdhm), + noteCursor.getLong(NOTE_COLUMN_MODIFIED_DATE)))); + // Query data belong to this note 查询数据属于此备注 + String noteId = noteCursor.getString(NOTE_COLUMN_ID); + exportNoteToText(noteId, ps); + } while (noteCursor.moveToNext()); + } + noteCursor.close(); + } + ps.close(); + + return STATE_SUCCESS; + } + + /** + * Get a print stream pointed to the file {@generateExportedTextFile} + */ + private PrintStream getExportToTextPrintStream() { + File file = generateFileMountedOnSDcard(mContext, R.string.file_path, + R.string.file_name_txt_format); + if (file == null) { + Log.e(TAG, "create file to exported failed"); + return null; + } + mFileName = file.getName(); + mFileDirectory = mContext.getString(R.string.file_path); + PrintStream ps = null; + try { + FileOutputStream fos = new FileOutputStream(file); + ps = new PrintStream(fos); //将ps输出流输出到特定的文件 + } catch (FileNotFoundException e) { + e.printStackTrace(); + return null; + } catch (NullPointerException e) { + e.printStackTrace(); + return null; + } + return ps; + } + } + + /** + * Generate the text file to store imported data + */ + private static File generateFileMountedOnSDcard(Context context, int filePathResId, int fileNameFormatResId) { + StringBuilder sb = new StringBuilder(); + sb.append(Environment.getExternalStorageDirectory()); //SD卡的存储路径 + sb.append(context.getString(filePathResId)); //文件的存储路径 + File filedir = new File(sb.toString()); //filedir应该就是用来存储路径信息 + sb.append(context.getString( + fileNameFormatResId, + DateFormat.format(context.getString(R.string.format_date_ymd), + System.currentTimeMillis()))); + File file = new File(sb.toString()); + + try { //如果这些文件不存在,则新建 + if (!filedir.exists()) { + filedir.mkdir(); + } + if (!file.exists()) { + file.createNewFile(); + } + return file; + } catch (SecurityException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } +// try catch 异常处理 + return null; + } +} + \ No newline at end of file diff --git a/小米便签代码精读/tool类/DataUtils.txt b/小米便签代码精读/tool类/DataUtils.txt new file mode 100644 index 0000000..858cbf6 --- /dev/null +++ b/小米便签代码精读/tool类/DataUtils.txt @@ -0,0 +1,264 @@ +DataUtils: + +package net.micode.notes.tool; + +public class DataUtils { + public static final String TAG = "DataUtils"; + public static boolean batchDeleteNotes(ContentResolver resolver, HashSet ids) { //删除多个笔记 + if (ids == null) { + Log.d(TAG, "the ids is null"); + return true; + } + if (ids.size() == 0) { + Log.d(TAG, "no id is in the hashset"); + return true; + } + + ArrayList operationList = new ArrayList(); //提供一个任务列表 + for (long id : ids) { + if(id == Notes.ID_ROOT_FOLDER) { + Log.e(TAG, "Don't delete system folder root"); + continue; + } //如果发现是根文件夹,则不删除 + ContentProviderOperation.Builder builder = ContentProviderOperation + .newDelete(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, id)); //用newDelete实现删除功能 + operationList.add(builder.build()); // + } + try { + ContentProviderResult[] results = resolver.applyBatch(Notes.AUTHORITY, operationList);//Authority用于唯一标识这个ContentProvider,外部调用者可以根据这个标识来找到它。 + if (results == null || results.length == 0 || results[0] == null) { + Log.d(TAG, "delete notes failed, ids:" + ids.toString()); + return false; + } + return true; + } catch (RemoteException e) { + Log.e(TAG, String.format("%s: %s", e.toString(), e.getMessage())); + } catch (OperationApplicationException e) { + Log.e(TAG, String.format("%s: %s", e.toString(), e.getMessage())); + } + return false; + } + + public static void moveNoteToFoler(ContentResolver resolver, long id, long srcFolderId, long desFolderId) { + ContentValues values = new ContentValues(); + values.put(NoteColumns.PARENT_ID, desFolderId); + values.put(NoteColumns.ORIGIN_PARENT_ID, srcFolderId); + values.put(NoteColumns.LOCAL_MODIFIED, 1); + resolver.update(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, id), values, null, null); //对需要移动的便签进行数据更新,然后用update实现 + } + + public static boolean batchMoveToFolder(ContentResolver resolver, HashSet ids, + long folderId) { + if (ids == null) { + Log.d(TAG, "the ids is null"); + return true; + } + + ArrayList operationList = new ArrayList(); + for (long id : ids) { + ContentProviderOperation.Builder builder = ContentProviderOperation + .newUpdate(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, id)); //通过withAppendedId方法,为该Uri加上ID + builder.withValue(NoteColumns.PARENT_ID, folderId); + builder.withValue(NoteColumns.LOCAL_MODIFIED, 1); + operationList.add(builder.build()); + }//将ids里包含的每一列的数据逐次加入到operationList中,等待最后的批量处理 + + try { + ContentProviderResult[] results = resolver.applyBatch(Notes.AUTHORITY, operationList); //applyBatch一次性处理一个操作列表 + if (results == null || results.length == 0 || results[0] == null) { + Log.d(TAG, "delete notes failed, ids:" + ids.toString()); + return false; + } + return true; + } catch (RemoteException e) { + Log.e(TAG, String.format("%s: %s", e.toString(), e.getMessage())); + } catch (OperationApplicationException e) { + Log.e(TAG, String.format("%s: %s", e.toString(), e.getMessage())); + } + return false; + } + + /** + * Get the all folder count except system folders {@link Notes#TYPE_SYSTEM}} + */ + public static int getUserFolderCount(ContentResolver resolver) { + Cursor cursor =resolver.query(Notes.CONTENT_NOTE_URI, + new String[] { "COUNT(*)" }, + NoteColumns.TYPE + "=? AND " + NoteColumns.PARENT_ID + "<>?", + new String[] { String.valueOf(Notes.TYPE_FOLDER), String.valueOf(Notes.ID_TRASH_FOLER)}, + null); //筛选条件:源文件不为trash folder + + int count = 0; + if(cursor != null) { + if(cursor.moveToFirst()) { + try { + count = cursor.getInt(0); + } catch (IndexOutOfBoundsException e) { + Log.e(TAG, "get folder count failed:" + e.toString()); + } finally { + cursor.close(); + } + } + } + return count; + } + + public static boolean visibleInNoteDatabase(ContentResolver resolver, long noteId, int type) { + Cursor cursor = resolver.query(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, noteId), //通过withAppendedId方法,为该Uri加上ID + null, + NoteColumns.TYPE + "=? AND " + NoteColumns.PARENT_ID + "<>" + Notes.ID_TRASH_FOLER, + new String [] {String.valueOf(type)}, + null); //查询条件:type符合,且不属于垃圾文件夹 + + boolean exist = false; + if (cursor != null) { + if (cursor.getCount() > 0) {//用getcount函数判断cursor是否为空 + exist = true; + } + cursor.close(); + } + return exist; + } + + public static boolean existInNoteDatabase(ContentResolver resolver, long noteId) { + Cursor cursor = resolver.query(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, noteId), + null, null, null, null); + + boolean exist = false; + if (cursor != null) { + if (cursor.getCount() > 0) { + exist = true; + } + cursor.close(); + } + return exist; + } + + public static boolean existInDataDatabase(ContentResolver resolver, long dataId) { + Cursor cursor = resolver.query(ContentUris.withAppendedId(Notes.CONTENT_DATA_URI, dataId), + null, null, null, null); + + boolean exist = false; + if (cursor != null) { + if (cursor.getCount() > 0) { + exist = true; + } + cursor.close(); + } + return exist; + } + + public static boolean checkVisibleFolderName(ContentResolver resolver, String name) { + Cursor cursor = resolver.query(Notes.CONTENT_NOTE_URI, null, + NoteColumns.TYPE + "=" + Notes.TYPE_FOLDER + + " AND " + NoteColumns.PARENT_ID + "<>" + Notes.ID_TRASH_FOLER + + " AND " + NoteColumns.SNIPPET + "=?", + new String[] { name }, null); + //通过名字查询文件是否存在 + boolean exist = false; + if(cursor != null) { + if(cursor.getCount() > 0) { + exist = true; + } + cursor.close(); + } + return exist; + } + + public static HashSet getFolderNoteWidget(ContentResolver resolver, long folderId) { + Cursor c = resolver.query(Notes.CONTENT_NOTE_URI, + new String[] { NoteColumns.WIDGET_ID, NoteColumns.WIDGET_TYPE }, + NoteColumns.PARENT_ID + "=?", + new String[] { String.valueOf(folderId) }, + null); //查询条件:父ID是传入的folderId; + + HashSet set = null; + if (c != null) { + if (c.moveToFirst()) { + set = new HashSet(); + do { + try { + AppWidgetAttribute widget = new AppWidgetAttribute(); + widget.widgetId = c.getInt(0); //0对应的NoteColumns.WIDGET_ID + widget.widgetType = c.getInt(1); //1对应的NoteColumns.WIDGET_TYPE + set.add(widget); + } catch (IndexOutOfBoundsException e) { + Log.e(TAG, e.toString()); + } + } while (c.moveToNext()); //查询下一条 + } + c.close(); + } + return set; + } + + public static String getCallNumberByNoteId(ContentResolver resolver, long noteId) { + Cursor cursor = resolver.query(Notes.CONTENT_DATA_URI, + new String [] { CallNote.PHONE_NUMBER }, + CallNote.NOTE_ID + "=? AND " + CallNote.MIME_TYPE + "=?", + new String [] { String.valueOf(noteId), CallNote.CONTENT_ITEM_TYPE }, + null); + + if (cursor != null && cursor.moveToFirst()) { + try { + return cursor.getString(0); + } catch (IndexOutOfBoundsException e) { + Log.e(TAG, "Get call number fails " + e.toString()); + } finally { + cursor.close(); + } + } + return ""; + } + + public static long getNoteIdByPhoneNumberAndCallDate(ContentResolver resolver, String phoneNumber, long callDate) { + Cursor cursor = resolver.query(Notes.CONTENT_DATA_URI, + new String [] { CallNote.NOTE_ID }, + CallNote.CALL_DATE + "=? AND " + CallNote.MIME_TYPE + "=? AND PHONE_NUMBERS_EQUAL(" + + CallNote.PHONE_NUMBER + ",?)", + new String [] { String.valueOf(callDate), CallNote.CONTENT_ITEM_TYPE, phoneNumber }, + null); + //通过数据库操作,查询条件是(callDate和phoneNumber匹配传入参数的值) + + if (cursor != null) { + if (cursor.moveToFirst()) { + try { + return cursor.getLong(0); //0对应的CallNote.NOTE_ID + } catch (IndexOutOfBoundsException e) { + Log.e(TAG, "Get call note id fails " + e.toString()); + } + } + cursor.close(); + } + return 0; + } + + public static String getSnippetById(ContentResolver resolver, long noteId) { + Cursor cursor = resolver.query(Notes.CONTENT_NOTE_URI, + new String [] { NoteColumns.SNIPPET }, + NoteColumns.ID + "=?", + new String [] { String.valueOf(noteId)}, + null);//查询条件:noteId + + if (cursor != null) { + String snippet = ""; + if (cursor.moveToFirst()) { + snippet = cursor.getString(0); + } + cursor.close(); + return snippet; + } + throw new IllegalArgumentException("Note is not found with id: " + noteId); + } + public static String getFormattedSnippet(String snippet) { //对字符串进行格式处理,将字符串两头的空格去掉,同时将换行符去掉 + if (snippet != null) { + snippet = snippet.trim(); + int index = snippet.indexOf('\n'); + if (index != -1) { + snippet = snippet.substring(0, index); + } + } + return snippet; + } + +} \ No newline at end of file diff --git a/小米便签代码精读/tool类/GTaskStringUtils.txt b/小米便签代码精读/tool类/GTaskStringUtils.txt new file mode 100644 index 0000000..71a0694 --- /dev/null +++ b/小米便签代码精读/tool类/GTaskStringUtils.txt @@ -0,0 +1,100 @@ +GTaskStringUtils: + +package net.micode.notes.tool; + +//定义了很多的静态字符串,目的就是为了提供jsonObject中相应字符串的钥匙。 +public class GTaskStringUtils { + + public final static String GTASK_JSON_ACTION_ID = "action_id"; + + public final static String GTASK_JSON_ACTION_LIST = "action_list"; + + public final static String GTASK_JSON_ACTION_TYPE = "action_type"; + + public final static String GTASK_JSON_ACTION_TYPE_CREATE = "create"; + + public final static String GTASK_JSON_ACTION_TYPE_GETALL = "get_all"; + + public final static String GTASK_JSON_ACTION_TYPE_MOVE = "move"; + + public final static String GTASK_JSON_ACTION_TYPE_UPDATE = "update"; + + public final static String GTASK_JSON_CREATOR_ID = "creator_id"; + + public final static String GTASK_JSON_CHILD_ENTITY = "child_entity"; + + public final static String GTASK_JSON_CLIENT_VERSION = "client_version"; + + public final static String GTASK_JSON_COMPLETED = "completed"; + + public final static String GTASK_JSON_CURRENT_LIST_ID = "current_list_id"; + + public final static String GTASK_JSON_DEFAULT_LIST_ID = "default_list_id"; + + public final static String GTASK_JSON_DELETED = "deleted"; + + public final static String GTASK_JSON_DEST_LIST = "dest_list"; + + public final static String GTASK_JSON_DEST_PARENT = "dest_parent"; + + public final static String GTASK_JSON_DEST_PARENT_TYPE = "dest_parent_type"; + + public final static String GTASK_JSON_ENTITY_DELTA = "entity_delta"; + + public final static String GTASK_JSON_ENTITY_TYPE = "entity_type"; + + public final static String GTASK_JSON_GET_DELETED = "get_deleted"; + + public final static String GTASK_JSON_ID = "id"; + + public final static String GTASK_JSON_INDEX = "index"; + + public final static String GTASK_JSON_LAST_MODIFIED = "last_modified"; + + public final static String GTASK_JSON_LATEST_SYNC_POINT = "latest_sync_point"; + + public final static String GTASK_JSON_LIST_ID = "list_id"; + + public final static String GTASK_JSON_LISTS = "lists"; + + public final static String GTASK_JSON_NAME = "name"; + + public final static String GTASK_JSON_NEW_ID = "new_id"; + + public final static String GTASK_JSON_NOTES = "notes"; + + public final static String GTASK_JSON_PARENT_ID = "parent_id"; + + public final static String GTASK_JSON_PRIOR_SIBLING_ID = "prior_sibling_id"; + + public final static String GTASK_JSON_RESULTS = "results"; + + public final static String GTASK_JSON_SOURCE_LIST = "source_list"; + + public final static String GTASK_JSON_TASKS = "tasks"; + + public final static String GTASK_JSON_TYPE = "type"; + + public final static String GTASK_JSON_TYPE_GROUP = "GROUP"; + + public final static String GTASK_JSON_TYPE_TASK = "TASK"; + + public final static String GTASK_JSON_USER = "user"; + + public final static String MIUI_FOLDER_PREFFIX = "[MIUI_Notes]"; + + public final static String FOLDER_DEFAULT = "Default"; + + public final static String FOLDER_CALL_NOTE = "Call_Note"; + + public final static String FOLDER_META = "METADATA"; + + public final static String META_HEAD_GTASK_ID = "meta_gid"; + + public final static String META_HEAD_NOTE = "meta_note"; + + public final static String META_HEAD_DATA = "meta_data"; + + public final static String META_NOTE_NAME = "[META INFO] DON'T UPDATE AND DELETE"; + +} \ No newline at end of file diff --git a/小米便签代码精读/tool类/ResourceParser.txt b/小米便签代码精读/tool类/ResourceParser.txt new file mode 100644 index 0000000..5750ec3 --- /dev/null +++ b/小米便签代码精读/tool类/ResourceParser.txt @@ -0,0 +1,163 @@ +ResourceParser: + +package net.micode.notes.tool; + +public class ResourceParser { + + public static final int YELLOW = 0; + public static final int BLUE = 1; + public static final int WHITE = 2; + public static final int GREEN = 3; + public static final int RED = 4; + + public static final int BG_DEFAULT_COLOR = YELLOW; + + public static final int TEXT_SMALL = 0; + public static final int TEXT_MEDIUM = 1; + public static final int TEXT_LARGE = 2; + public static final int TEXT_SUPER = 3; + + public static final int BG_DEFAULT_FONT_SIZE = TEXT_MEDIUM; + + public static class NoteBgResources { + private final static int [] BG_EDIT_RESOURCES = new int [] { + R.drawable.edit_yellow, + R.drawable.edit_blue, + R.drawable.edit_white, + R.drawable.edit_green, + R.drawable.edit_red + //R.drawable 图片资源 + }; + + private final static int [] BG_EDIT_TITLE_RESOURCES = new int [] { + R.drawable.edit_title_yellow, + R.drawable.edit_title_blue, + R.drawable.edit_title_white, + R.drawable.edit_title_green, + R.drawable.edit_title_red + }; + + public static int getNoteBgResource(int id) { + return BG_EDIT_RESOURCES[id]; + } + + public static int getNoteTitleBgResource(int id) { + return BG_EDIT_TITLE_RESOURCES[id]; + } + } + //获取默认的背景颜色 + public static int getDefaultBgId(Context context) { + if (PreferenceManager.getDefaultSharedPreferences(context).getBoolean( + NotesPreferenceActivity.PREFERENCE_SET_BG_COLOR_KEY, false)) { + return (int) (Math.random() * NoteBgResources.BG_EDIT_RESOURCES.length); + } else { + return BG_DEFAULT_COLOR; + } + } + + public static class NoteItemBgResources { + private final static int [] BG_FIRST_RESOURCES = new int [] { + R.drawable.list_yellow_up, + R.drawable.list_blue_up, + R.drawable.list_white_up, + R.drawable.list_green_up, + R.drawable.list_red_up + }; + + private final static int [] BG_NORMAL_RESOURCES = new int [] { + R.drawable.list_yellow_middle, + R.drawable.list_blue_middle, + R.drawable.list_white_middle, + R.drawable.list_green_middle, + R.drawable.list_red_middle + }; + + private final static int [] BG_LAST_RESOURCES = new int [] { + R.drawable.list_yellow_down, + R.drawable.list_blue_down, + R.drawable.list_white_down, + R.drawable.list_green_down, + R.drawable.list_red_down, + }; + + private final static int [] BG_SINGLE_RESOURCES = new int [] { + R.drawable.list_yellow_single, + R.drawable.list_blue_single, + R.drawable.list_white_single, + R.drawable.list_green_single, + R.drawable.list_red_single + }; + + public static int getNoteBgFirstRes(int id) { + return BG_FIRST_RESOURCES[id]; + } + + public static int getNoteBgLastRes(int id) { + return BG_LAST_RESOURCES[id]; + } + + public static int getNoteBgSingleRes(int id) { + return BG_SINGLE_RESOURCES[id]; + } + + public static int getNoteBgNormalRes(int id) { + return BG_NORMAL_RESOURCES[id]; + } + + public static int getFolderBgRes() { + return R.drawable.list_folder; + } + } + + public static class WidgetBgResources { + private final static int [] BG_2X_RESOURCES = new int [] { + R.drawable.widget_2x_yellow, + R.drawable.widget_2x_blue, + R.drawable.widget_2x_white, + R.drawable.widget_2x_green, + R.drawable.widget_2x_red, + }; + + public static int getWidget2xBgResource(int id) { + return BG_2X_RESOURCES[id]; + } + + private final static int [] BG_4X_RESOURCES = new int [] { + R.drawable.widget_4x_yellow, + R.drawable.widget_4x_blue, + R.drawable.widget_4x_white, + R.drawable.widget_4x_green, + R.drawable.widget_4x_red + }; + + public static int getWidget4xBgResource(int id) { + return BG_4X_RESOURCES[id]; + } + } + + public static class TextAppearanceResources { + private final static int [] TEXTAPPEARANCE_RESOURCES = new int [] { + R.style.TextAppearanceNormal, + R.style.TextAppearanceMedium, + R.style.TextAppearanceLarge, + R.style.TextAppearanceSuper + }; + + //一个防止输入的id大于资源总量的函数,若是大于,则自动返回默认的设置结果 + public static int getTexAppearanceResource(int id) { + /** + * HACKME: Fix bug of store the resource id in shared preference. + * The id may larger than the length of resources, in this case, + * return the {@link ResourceParser#BG_DEFAULT_FONT_SIZE} + */ + if (id >= TEXTAPPEARANCE_RESOURCES.length) { + return BG_DEFAULT_FONT_SIZE; + } + return TEXTAPPEARANCE_RESOURCES[id]; + } + + public static int getResourcesSize() { + return TEXTAPPEARANCE_RESOURCES.length; + } + } +} \ No newline at end of file diff --git a/小米便签代码精读/widget类/NoteWidgetProvider.txt b/小米便签代码精读/widget类/NoteWidgetProvider.txt new file mode 100644 index 0000000..4a991cc --- /dev/null +++ b/小米便签代码精读/widget类/NoteWidgetProvider.txt @@ -0,0 +1,118 @@ +NoteWidgetProvider: + +package net.micode.notes.widget; +import android.app.PendingIntent; +import android.appwidget.AppWidgetManager; +import android.appwidget.AppWidgetProvider; +import android.content.ContentValues; +import android.content.Context; +import android.content.Intent; +import android.database.Cursor; +import android.util.Log; +import android.widget.RemoteViews; + +import net.micode.notes.R; +import net.micode.notes.data.Notes; +import net.micode.notes.data.Notes.NoteColumns; +import net.micode.notes.tool.ResourceParser; +import net.micode.notes.ui.NoteEditActivity; +import net.micode.notes.ui.NotesListActivity; + +public abstract class NoteWidgetProvider extends AppWidgetProvider { + public static final String [] PROJECTION = new String [] { + NoteColumns.ID, + NoteColumns.BG_COLOR_ID, + NoteColumns.SNIPPET + };//小米便签的桌面挂件 + + public static final int COLUMN_ID = 0; + public static final int COLUMN_BG_COLOR_ID = 1; + public static final int COLUMN_SNIPPET = 2; + + private static final String TAG = "NoteWidgetProvider"; + + @Override + public void onDeleted(Context context, int[] appWidgetIds) { + ContentValues values = new ContentValues(); + values.put(NoteColumns.WIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); + for (int i = 0; i < appWidgetIds.length; i++) { + context.getContentResolver().update(Notes.CONTENT_NOTE_URI, + values, + NoteColumns.WIDGET_ID + "=?", + new String[] { String.valueOf(appWidgetIds[i])}); + } + } + + private Cursor getNoteWidgetInfo(Context context, int widgetId) { + return context.getContentResolver().query(Notes.CONTENT_NOTE_URI, + PROJECTION, + NoteColumns.WIDGET_ID + "=? AND " + NoteColumns.PARENT_ID + "<>?", + new String[] { String.valueOf(widgetId), String.valueOf(Notes.ID_TRASH_FOLER) }, + null); + } + + protected void update(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { + update(context, appWidgetManager, appWidgetIds, false); + } + + private void update(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds, + boolean privacyMode) { + for (int i = 0; i < appWidgetIds.length; i++) { + if (appWidgetIds[i] != AppWidgetManager.INVALID_APPWIDGET_ID) { + int bgId = ResourceParser.getDefaultBgId(context); + String snippet = ""; + Intent intent = new Intent(context, NoteEditActivity.class); + intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); + intent.putExtra(Notes.INTENT_EXTRA_WIDGET_ID, appWidgetIds[i]); + intent.putExtra(Notes.INTENT_EXTRA_WIDGET_TYPE, getWidgetType()); + + Cursor c = getNoteWidgetInfo(context, appWidgetIds[i]); + if (c != null && c.moveToFirst()) { + if (c.getCount() > 1) { + Log.e(TAG, "Multiple message with same widget id:" + appWidgetIds[i]); + c.close(); + return; + } + snippet = c.getString(COLUMN_SNIPPET); + bgId = c.getInt(COLUMN_BG_COLOR_ID); + intent.putExtra(Intent.EXTRA_UID, c.getLong(COLUMN_ID)); + intent.setAction(Intent.ACTION_VIEW); + } else { + snippet = context.getResources().getString(R.string.widget_havenot_content); + intent.setAction(Intent.ACTION_INSERT_OR_EDIT); + } + + if (c != null) { + c.close(); + } + + RemoteViews rv = new RemoteViews(context.getPackageName(), getLayoutId()); + rv.setImageViewResource(R.id.widget_bg_image, getBgResourceId(bgId)); + intent.putExtra(Notes.INTENT_EXTRA_BACKGROUND_ID, bgId); + /** + * Generate the pending intent to start host for the widget + */ + PendingIntent pendingIntent = null; + if (privacyMode) { + rv.setTextViewText(R.id.widget_text, + context.getString(R.string.widget_under_visit_mode)); + pendingIntent = PendingIntent.getActivity(context, appWidgetIds[i], new Intent( + context, NotesListActivity.class), PendingIntent.FLAG_UPDATE_CURRENT); + } else { + rv.setTextViewText(R.id.widget_text, snippet); + pendingIntent = PendingIntent.getActivity(context, appWidgetIds[i], intent, + PendingIntent.FLAG_UPDATE_CURRENT); + } + + rv.setOnClickPendingIntent(R.id.widget_text, pendingIntent); + appWidgetManager.updateAppWidget(appWidgetIds[i], rv); + } + } + } + + protected abstract int getBgResourceId(int bgId); + + protected abstract int getLayoutId(); + + protected abstract int getWidgetType(); +} \ No newline at end of file diff --git a/小米便签代码精读/widget类/NoteWidgetProvider_2x.txt b/小米便签代码精读/widget类/NoteWidgetProvider_2x.txt new file mode 100644 index 0000000..e21533f --- /dev/null +++ b/小米便签代码精读/widget类/NoteWidgetProvider_2x.txt @@ -0,0 +1,34 @@ +NoteWidgetProvider_2x: + +package net.micode.notes.widget; + +import android.appwidget.AppWidgetManager; +import android.content.Context; + +import net.micode.notes.R; +import net.micode.notes.data.Notes; +import net.micode.notes.tool.ResourceParser; + + +public class NoteWidgetProvider_2x extends NoteWidgetProvider { + //2倍大小的桌面挂件 + @Override + public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { + super.update(context, appWidgetManager, appWidgetIds); + } + + @Override + protected int getLayoutId() { + return R.layout.widget_2x; + } + + @Override + protected int getBgResourceId(int bgId) { + return ResourceParser.WidgetBgResources.getWidget2xBgResource(bgId); + } + + @Override + protected int getWidgetType() { + return Notes.TYPE_WIDGET_2X; + } +} diff --git a/小米便签代码精读/widget类/NoteWidgetProvider_4x.txt b/小米便签代码精读/widget类/NoteWidgetProvider_4x.txt new file mode 100644 index 0000000..8690867 --- /dev/null +++ b/小米便签代码精读/widget类/NoteWidgetProvider_4x.txt @@ -0,0 +1,33 @@ +NoteWidgetProvider_4x: + +package net.micode.notes.widget; + +import android.appwidget.AppWidgetManager; +import android.content.Context; + +import net.micode.notes.R; +import net.micode.notes.data.Notes; +import net.micode.notes.tool.ResourceParser; + + +public class NoteWidgetProvider_4x extends NoteWidgetProvider { + //4倍大小的桌面挂件 + @Override + public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { + super.update(context, appWidgetManager, appWidgetIds); + } + + protected int getLayoutId() { + return R.layout.widget_4x; + } + + @Override + protected int getBgResourceId(int bgId) { + return ResourceParser.WidgetBgResources.getWidget4xBgResource(bgId); + } + + @Override + protected int getWidgetType() { + return Notes.TYPE_WIDGET_4X; + } +} -- 2.34.1

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 il>D8WF8#0Ee}*X9YClb!e=h6*0jt Date: Thu, 11 May 2023 21:23:37 +0800 Subject: [PATCH 4/6] =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 添加密码分析类图/小米便签.vsdx | Bin 0 -> 41724 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 添加密码分析类图/小米便签.vsdx diff --git a/添加密码分析类图/小米便签.vsdx b/添加密码分析类图/小米便签.vsdx new file mode 100644 index 0000000000000000000000000000000000000000..ee7def5670defa1e2d01fc4deedf456f52c01535 GIT binary patch literal 41724 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%0A(+!7m0m&bvWh66jQi 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