From 1a93e734bd264aa3d908a57f8423960660945b8c Mon Sep 17 00:00:00 2001 From: eazzy <1044745821@qq.com> Date: Sun, 3 Dec 2023 17:40:33 +0800 Subject: [PATCH 01/13] Added comments to the data package --- .../java/net/micode/notes/data/Notes.java | 19 +++-- .../notes/data/NotesDatabaseHelper.java | 54 ++++++------- .../net/micode/notes/data/NotesProvider.java | 79 +++++++++++-------- 3 files changed, 86 insertions(+), 66 deletions(-) diff --git a/src/Notes/app/src/main/java/net/micode/notes/data/Notes.java b/src/Notes/app/src/main/java/net/micode/notes/data/Notes.java index f727743..aba2dbb 100644 --- a/src/Notes/app/src/main/java/net/micode/notes/data/Notes.java +++ b/src/Notes/app/src/main/java/net/micode/notes/data/Notes.java @@ -17,9 +17,11 @@ package net.micode.notes.data; import android.net.Uri; +//Notes类就定义了很多常量,是小米便签的数据库 public class Notes { public static final String AUTHORITY = "micode_notes"; public static final String TAG = "Notes"; + //三个type public static final int TYPE_NOTE = 0; public static final int TYPE_FOLDER = 1; public static final int TYPE_SYSTEM = 2; @@ -30,6 +32,7 @@ public class Notes { * {@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; @@ -45,12 +48,12 @@ public class Notes { public static final int TYPE_WIDGET_INVALIDE = -1; public static final int TYPE_WIDGET_2X = 0; public static final int TYPE_WIDGET_4X = 1; - + //数据常量 包括普通note和call_note 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 */ @@ -59,9 +62,11 @@ public class Notes { /** * Uri to query data */ - public static final Uri CONTENT_DATA_URI = Uri.parse("content://" + AUTHORITY + "/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)

@@ -169,7 +174,7 @@ public class Notes { public static final String PASSWORD = "password"; public static final String IMPORTANCE = "importance"; - } + }//便签的各种属性 /* * 便签数据在数据库中的表头 */ @@ -245,7 +250,7 @@ public class Notes { *

Type: TEXT

*/ public static final String DATA5 = "data5"; - } + }//一个便签内部各种数据类型 public static final class TextNote implements DataColumns { /** @@ -261,7 +266,7 @@ public class Notes { 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"); - } + }//一种是文本textnote public static final class CallNote implements DataColumns { /** @@ -281,5 +286,5 @@ public class Notes { 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"); - } + }//另一种是通话类型的callnote } diff --git a/src/Notes/app/src/main/java/net/micode/notes/data/NotesDatabaseHelper.java b/src/Notes/app/src/main/java/net/micode/notes/data/NotesDatabaseHelper.java index ffe5d57..bedbf65 100644 --- a/src/Notes/app/src/main/java/net/micode/notes/data/NotesDatabaseHelper.java +++ b/src/Notes/app/src/main/java/net/micode/notes/data/NotesDatabaseHelper.java @@ -21,17 +21,17 @@ import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.util.Log; - +//引用了同一个包中的另一个子包Notes中一些接口 import net.micode.notes.data.Notes.DataColumns; import net.micode.notes.data.Notes.DataConstants; import net.micode.notes.data.Notes.NoteColumns; - +//数据库操作 public class NotesDatabaseHelper extends SQLiteOpenHelper { private static final String DB_NAME = "note.db"; private static final int DB_VERSION = 4; - + //接口两部分一个Note一个DATA public interface TABLE { public static final String NOTE = "note"; @@ -41,7 +41,7 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { private static final String TAG = "NotesDatabaseHelper"; private static NotesDatabaseHelper mInstance; - + //基于NoteColumn创建一个NOTE_TABLE表格,并附上初始数据 private static final String CREATE_NOTE_TABLE_SQL = "CREATE TABLE " + TABLE.NOTE + "(" + NoteColumns.ID + " INTEGER PRIMARY KEY," + @@ -62,7 +62,7 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { NoteColumns.GTASK_ID + " TEXT NOT NULL DEFAULT ''," + NoteColumns.VERSION + " INTEGER NOT NULL DEFAULT 0" + ")"; - + //主要基于datacolumn来创建DATA_TABLE private static final String CREATE_DATA_TABLE_SQL = "CREATE TABLE " + TABLE.DATA + "(" + DataColumns.ID + " INTEGER PRIMARY KEY," + @@ -77,7 +77,7 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { DataColumns.DATA4 + " TEXT NOT NULL DEFAULT ''," + DataColumns.DATA5 + " TEXT NOT NULL DEFAULT ''" + ")"; - + //这个数据是关于INDEX编号的 private static final String CREATE_DATA_NOTE_ID_INDEX_SQL = "CREATE INDEX IF NOT EXISTS note_id_index ON " + TABLE.DATA + "(" + DataColumns.NOTE_ID + ");"; @@ -93,7 +93,7 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { " 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 */ @@ -106,7 +106,7 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { " 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 */ @@ -118,7 +118,7 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { " 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 */ @@ -131,7 +131,7 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { " 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} */ @@ -144,7 +144,7 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { " 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 */ @@ -156,7 +156,7 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { " UPDATE " + TABLE.NOTE + " SET " + NoteColumns.SNIPPET + "=new." + DataColumns.CONTENT + " WHERE " + NoteColumns.ID + "=new." + DataColumns.NOTE_ID + ";" + - " END"; + " END";//note数据被修改update /** * Update note's content when data with {@link DataConstants#NOTE} type has deleted @@ -169,7 +169,7 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { " UPDATE " + TABLE.NOTE + " SET " + NoteColumns.SNIPPET + "=''" + " WHERE " + NoteColumns.ID + "=old." + DataColumns.NOTE_ID + ";" + - " END"; + " END";//更新已经删除的便签的数据 /** * Delete datas belong to note which has been deleted @@ -180,7 +180,7 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { " BEGIN" + " DELETE FROM " + TABLE.DATA + " WHERE " + DataColumns.NOTE_ID + "=old." + NoteColumns.ID + ";" + - " END"; + " END";//删除 已经被删除的便签的数据 /** * Delete notes belong to folder which has been deleted @@ -191,7 +191,7 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { " BEGIN" + " DELETE FROM " + TABLE.NOTE + " WHERE " + NoteColumns.PARENT_ID + "=old." + NoteColumns.ID + ";" + - " END"; + " END";//删除 已删除folder文件夹 中的便签要修改的数据 /** * Move notes belong to folder which has been moved to trash folder @@ -204,12 +204,12 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { " UPDATE " + TABLE.NOTE + " SET " + NoteColumns.PARENT_ID + "=" + Notes.ID_TRASH_FOLER + " WHERE " + NoteColumns.PARENT_ID + "=old." + NoteColumns.ID + ";" + - " END"; + " END";//移动trash_folder中的便签 public NotesDatabaseHelper(Context context) { super(context, DB_NAME, null, DB_VERSION); } - + //构造函数 public void createNoteTable(SQLiteDatabase db) { db.execSQL(CREATE_NOTE_TABLE_SQL); reCreateNoteTableTriggers(db); @@ -233,7 +233,7 @@ 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); - } + }//数据库操作的API,重新创建 private void createSystemFolder(SQLiteDatabase db) { ContentValues values = new ContentValues(); @@ -268,14 +268,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 +285,20 @@ 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); - } + }//类似于recreatenotetable,重新创建触发器 static synchronized NotesDatabaseHelper getInstance(Context context) { if (mInstance == null) { mInstance = new NotesDatabaseHelper(context); } return mInstance; - } + }//sync同步,同一时刻只有一个线程执行 @Override public void onCreate(SQLiteDatabase db) { createNoteTable(db); createDataTable(db); - } + }//创建Note Data两个表格 @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { @@ -331,14 +331,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 +353,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 } diff --git a/src/Notes/app/src/main/java/net/micode/notes/data/NotesProvider.java b/src/Notes/app/src/main/java/net/micode/notes/data/NotesProvider.java index edb0a60..6897999 100644 --- a/src/Notes/app/src/main/java/net/micode/notes/data/NotesProvider.java +++ b/src/Notes/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 From 8bbc3c1505eb2ee6f63ad2972d9e92dafed9dcb2 Mon Sep 17 00:00:00 2001 From: eazzy <1044745821@qq.com> Date: Sun, 3 Dec 2023 20:12:44 +0800 Subject: [PATCH 02/13] widget --- ...泛读、标注和维护报告文档.docx | Bin 0 -> 22746 bytes src/.idea/.gitignore | 0 src/.idea/modules.xml | 8 ++++ src/.idea/src.iml | 9 ++++ src/.idea/vcs.xml | 6 +++ src/.idea/workspace.xml | 41 ++++++++++++++++++ .../.gradle/8.0/fileHashes/fileHashes.lock | Bin 17 -> 17 bytes src/Notes/app/.idea/.gitignore | 3 ++ src/Notes/app/.idea/.name | 1 + src/Notes/app/.idea/compiler.xml | 6 +++ src/Notes/app/.idea/gradle.xml | 19 ++++++++ src/Notes/app/.idea/jarRepositories.xml | 25 +++++++++++ src/Notes/app/.idea/misc.xml | 10 +++++ src/Notes/app/.idea/vcs.xml | 6 +++ 14 files changed, 134 insertions(+) create mode 100644 doc/小米便签泛读、标注和维护报告文档.docx create mode 100644 src/.idea/.gitignore create mode 100644 src/.idea/modules.xml create mode 100644 src/.idea/src.iml create mode 100644 src/.idea/vcs.xml create mode 100644 src/.idea/workspace.xml create mode 100644 src/Notes/app/.idea/.gitignore create mode 100644 src/Notes/app/.idea/.name create mode 100644 src/Notes/app/.idea/compiler.xml create mode 100644 src/Notes/app/.idea/gradle.xml create mode 100644 src/Notes/app/.idea/jarRepositories.xml create mode 100644 src/Notes/app/.idea/misc.xml create mode 100644 src/Notes/app/.idea/vcs.xml diff --git a/doc/小米便签泛读、标注和维护报告文档.docx b/doc/小米便签泛读、标注和维护报告文档.docx new file mode 100644 index 0000000000000000000000000000000000000000..b1f01e0511987176e8c08292b42f67599c2819e9 GIT binary patch literal 22746 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 + + + + + + + \ No newline at end of file diff --git a/src/.idea/src.iml b/src/.idea/src.iml new file mode 100644 index 0000000..d6ebd48 --- /dev/null +++ b/src/.idea/src.iml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/.idea/vcs.xml b/src/.idea/vcs.xml new file mode 100644 index 0000000..6c0b863 --- /dev/null +++ b/src/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/.idea/workspace.xml b/src/.idea/workspace.xml new file mode 100644 index 0000000..93f55b0 --- /dev/null +++ b/src/.idea/workspace.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + 1701596504588 + + + + \ No newline at end of file diff --git a/src/Notes/.gradle/8.0/fileHashes/fileHashes.lock b/src/Notes/.gradle/8.0/fileHashes/fileHashes.lock index 80f3093b1514fff09c390c787f8bcea220e8960a..5a838b113e02a91f04d895fe540549bd22aee262 100644 GIT binary patch literal 17 VcmZSPH9i%Y`oNHl0SvhJ001QL1F8T3 literal 17 VcmZSPH9i%Y`oNHl0Svfz0RSZK1E>H1 diff --git a/src/Notes/app/.idea/.gitignore b/src/Notes/app/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/src/Notes/app/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/src/Notes/app/.idea/.name b/src/Notes/app/.idea/.name new file mode 100644 index 0000000..94b4696 --- /dev/null +++ b/src/Notes/app/.idea/.name @@ -0,0 +1 @@ +Notes \ No newline at end of file diff --git a/src/Notes/app/.idea/compiler.xml b/src/Notes/app/.idea/compiler.xml new file mode 100644 index 0000000..b589d56 --- /dev/null +++ b/src/Notes/app/.idea/compiler.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/Notes/app/.idea/gradle.xml b/src/Notes/app/.idea/gradle.xml new file mode 100644 index 0000000..bc30bf9 --- /dev/null +++ b/src/Notes/app/.idea/gradle.xml @@ -0,0 +1,19 @@ + + + + + + \ No newline at end of file diff --git a/src/Notes/app/.idea/jarRepositories.xml b/src/Notes/app/.idea/jarRepositories.xml new file mode 100644 index 0000000..a5f05cd --- /dev/null +++ b/src/Notes/app/.idea/jarRepositories.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Notes/app/.idea/misc.xml b/src/Notes/app/.idea/misc.xml new file mode 100644 index 0000000..0ad17cb --- /dev/null +++ b/src/Notes/app/.idea/misc.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/Notes/app/.idea/vcs.xml b/src/Notes/app/.idea/vcs.xml new file mode 100644 index 0000000..c2365ab --- /dev/null +++ b/src/Notes/app/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file From 5a37522fe330b59eab2ec815da6d1f7380aa3034 Mon Sep 17 00:00:00 2001 From: eazzy <1044745821@qq.com> Date: Sun, 3 Dec 2023 23:05:02 +0800 Subject: [PATCH 03/13] =?UTF-8?q?=E6=B3=A8=E9=87=8A=E4=BA=86widget?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Notes/app/.idea/gradle.xml | 1 + src/Notes/app/.idea/misc.xml | 1 - .../main/java/net/micode/notes/widget/NoteWidgetProvider.java | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Notes/app/.idea/gradle.xml b/src/Notes/app/.idea/gradle.xml index bc30bf9..93fb31b 100644 --- a/src/Notes/app/.idea/gradle.xml +++ b/src/Notes/app/.idea/gradle.xml @@ -1,5 +1,6 @@ +