diff --git a/doc/小米便签开源代码的泛读报告 (1).docx b/doc/小米便签开源代码的泛读报告 (1) - 副本.docx
similarity index 100%
rename from doc/小米便签开源代码的泛读报告 (1).docx
rename to doc/小米便签开源代码的泛读报告 (1) - 副本.docx
diff --git a/src/Notes-master/.idea/.gitignore b/src/Notes-master/.idea/.gitignore
new file mode 100644
index 0000000..26d3352
--- /dev/null
+++ b/src/Notes-master/.idea/.gitignore
@@ -0,0 +1,3 @@
+# Default ignored files
+/shelf/
+/workspace.xml
diff --git a/src/Notes-master/.idea/misc.xml b/src/Notes-master/.idea/misc.xml
new file mode 100644
index 0000000..639900d
--- /dev/null
+++ b/src/Notes-master/.idea/misc.xml
@@ -0,0 +1,6 @@
+
+
Type: INTEGER (long)
*/ + //MIME类型是一种标准,用于标识文档、文件或字节流的性质和格式。在数据库中,这个字段可以用来识别不同类型的数据,例如文本、图片、音频或视频等。 public static final String ID = "_id"; /** @@ -184,24 +201,28 @@ public class Notes { * The reference id to note that this data belongs to *Type: INTEGER (long)
*/ + //归属的Note的ID 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"; @@ -210,6 +231,9 @@ public class Notes { * integer data type *Type: INTEGER
*/ + // 以下5个是通用数据列,它们的具体意义取决于MIME类型(由MIME_TYPE字段指定)。 + // 不同的MIME类型可能需要存储不同类型的数据,这5个字段提供了灵活性,允许根据MIME类型来存储相应的数据。 + // 读后面的代码感觉这部分是在表示内容的不同状态? public static final String DATA1 = "data1"; /** @@ -240,40 +264,46 @@ public class Notes { */ public static final String DATA5 = "data5"; } - +/*DataColumns接口的实现类:TextNote与CallNote +这两个类是上述的DataColumns接口的实现类,分别是文本标签和通话记录实体。定义了实体之后,应用的其他部分或其他应用可以通过内容提供者访问和操作文本标签和通话记录*/ + +//以下是文本便签的定义 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
*/ + //模式?这个被存在DATA1列中 public static final String MODE = DATA1; - + //所处检查列表模式? public static final int MODE_CHECK_LIST = 1; - + // 定义了MIME类型,用于标识文本标签的目录 public static final String CONTENT_TYPE = "vnd.android.cursor.dir/text_note"; - +// 定义了MIME类型,用于标识文本标签的单个项 public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/text_note"; - +//文本标签内容提供者(Content Provider)的URI,用于访问文本标签数据 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
*/ + //意味着在数据库表中,这个电话号码信息将被存储在DATA3列中 public static final String PHONE_NUMBER = DATA3; - + // 同样定义了MIME类型,是用于标识通话记录的目录。 public static final String CONTENT_TYPE = "vnd.android.cursor.dir/call_note"; - + // 同样定义了MIME类型,是用于标识通话记录的单个项。 public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/call_note"; - + //定义了通话记录内容提供者的URI,用于访问通话记录数据。 public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/call_note"); } } diff --git a/src/Notes-master/src/net/micode/notes/data/NotesDatabaseHelper.java b/src/Notes-master/src/net/micode/notes/data/NotesDatabaseHelper.java index ffe5d57..df6747f 100644 --- a/src/Notes-master/src/net/micode/notes/data/NotesDatabaseHelper.java +++ b/src/Notes-master/src/net/micode/notes/data/NotesDatabaseHelper.java @@ -26,22 +26,27 @@ 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"; public static final String DATA = "data"; } - + //一个标签,方便日志输出时识别出信息来自哪里 private static final String TAG = "NotesDatabaseHelper"; - +/*唯一实例的定义 +// 静态所有变量,提供一个全局访问点来获取数据库辅助类的唯一实例,使得在应用的任何地方都可以方便地使用它 */ private static NotesDatabaseHelper mInstance; - +/*创建表和创建索引的SQL语句常量 +这些语句都是为了辅助创建数据库的,在创建数据库时对调用这些创建数据库SQL语句常量,这样写有利于提高代码复用性,以及代码的可维护性。*/ + /* 以下都是一些SQL语句,辅助我们来对数据库进行操作 */ +//创建note表的语句,这里的NoteColumns就是我们刚刚在Notes中定义的一个接口,里面定义了一系列静态的数据库表中的列名 private static final String CREATE_NOTE_TABLE_SQL = "CREATE TABLE " + TABLE.NOTE + "(" + NoteColumns.ID + " INTEGER PRIMARY KEY," + @@ -62,7 +67,7 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { NoteColumns.GTASK_ID + " TEXT NOT NULL DEFAULT ''," + NoteColumns.VERSION + " INTEGER NOT NULL DEFAULT 0" + ")"; - +//同上,创建data表的语句,这里的DataColumns就是我们刚刚在Notes中定义的一个接口,里面定义了一系列静态的数据库表中的列名 private static final String CREATE_DATA_TABLE_SQL = "CREATE TABLE " + TABLE.DATA + "(" + DataColumns.ID + " INTEGER PRIMARY KEY," + @@ -77,7 +82,12 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { DataColumns.DATA4 + " TEXT NOT NULL DEFAULT ''," + DataColumns.DATA5 + " TEXT NOT NULL DEFAULT ''" + ")"; - +// 功能简介: +// 创建一个以note的ID为索引 +// 解读: +// 用于在TABLE.DATA表上创建一个名为note_id_index的索引。 +// 这个索引是基于DataColumns.NOTE_ID列的。IF NOT EXISTS确保了如果索引已经存在,那么就不会尝试重新创建它,避免了可能的错误。 +// 索引通常用于提高查询性能,特别是在对某个字段进行频繁查询时。 private static final String CREATE_DATA_NOTE_ID_INDEX_SQL = "CREATE INDEX IF NOT EXISTS note_id_index ON " + TABLE.DATA + "(" + DataColumns.NOTE_ID + ");"; @@ -85,6 +95,15 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { /** * Increase folder's note count when move note to the folder */ + /* 增删改的触发器定义常量 +创建数据库时会定义一些触发器,用于根据用户操作时实现对数据库的相应操作,有助于同步数据库信息。*/ + // 功能简介: +// 添加触发器:增加文件夹的便签个数记录(因为我们会移动便签进入文件夹,这时候文件夹的计数要进行更新) +// 解读: +// 定义了一个SQL触发器increase_folder_count_on_update。 +// 触发器是一种特殊的存储过程,它会在指定表上的指定事件(如INSERT、UPDATE、DELETE)发生时自动执行。 +// 这个触发器会在TABLE.NOTE表的NoteColumns.PARENT_ID字段更新后执行。 +// 触发器的逻辑是:当某个笔记的PARENT_ID(即父文件夹ID)被更新时,它会找到对应的文件夹(通过新的PARENT_ID),并将该文件夹的NOTES_COUNT(即笔记数)增加1。 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 + @@ -97,6 +116,9 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { /** * 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 + @@ -110,6 +132,8 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { /** * 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 + @@ -122,6 +146,8 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { /** * 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 + @@ -135,6 +161,11 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { /** * Update note's content when insert data with type {@link DataConstants#NOTE} */ + // 功能简介: +// 添加触发器:当向DATA表中插入类型为NOTE(便签)的数据时,更新note表对应的笔记内容。 +// 解读: +// 在DATA表上进行INSERT操作后,如果新插入的数据的MIME_TYPE为NOTE,则触发此操作。 +// 它会更新NOTE表,将与新插入数据相关联的标签的SNIPPET(摘要)字段设置为新插入数据的CONTENT字段的值 private static final String DATA_UPDATE_NOTE_CONTENT_ON_INSERT_TRIGGER = "CREATE TRIGGER update_note_content_on_insert " + " AFTER INSERT ON " + TABLE.DATA + @@ -148,6 +179,11 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { /** * Update note's content when data with {@link DataConstants#NOTE} type has changed */ + // 功能简介: +// 添加触发器:当DATA表中,类型为NOTE(便签)的数据更改时,更新note表对应的笔记内容。 +// 解读: +// 在DATA表上进行UPDATE操作后,如果更新前的数据的MIME_TYPE为NOTE,则触发此操作。 +// 它会更新NOTE表,将与更新后的数据相关联的笔记的SNIPPET字段设置为新数据的CONTENT字段的值 private static final String DATA_UPDATE_NOTE_CONTENT_ON_UPDATE_TRIGGER = "CREATE TRIGGER update_note_content_on_update " + " AFTER UPDATE ON " + TABLE.DATA + @@ -161,6 +197,11 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { /** * Update note's content when data with {@link DataConstants#NOTE} type has deleted */ + // 功能简介: +// 添加触发器:当DATA表中,类型为NOTE(便签)的数据删除时,更新note表对应的笔记内容(置空)。 +// 解读: +// 在DATA表上进行DELETE操作后,如果删除的数据的MIME_TYPE为NOTE,则触发此操作。 +// 它会更新NOTE表,将与删除的数据相关联的笔记的SNIPPET字段设置为空字符串。 private static final String DATA_UPDATE_NOTE_CONTENT_ON_DELETE_TRIGGER = "CREATE TRIGGER update_note_content_on_delete " + " AFTER delete ON " + TABLE.DATA + @@ -174,6 +215,11 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { /** * Delete datas belong to note which has been deleted */ + // 功能简介: +// 添加触发器:当从NOTE表中删除笔记时,删除与该笔记相关联的数据(就是删除data表中为该note的数据) +// 解读: +// 在NOTE表上进行DELETE操作后,此触发器被激活。 +// 它会从DATA表中删除所有与已删除的笔记(由old.ID表示)相关联的数据行(通过比较DATA表中的NOTE_ID字段与已删除笔记的ID来实现) private static final String NOTE_DELETE_DATA_ON_DELETE_TRIGGER = "CREATE TRIGGER delete_data_on_delete " + " AFTER DELETE ON " + TABLE.NOTE + @@ -185,6 +231,11 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { /** * Delete notes belong to folder which has been deleted */ + // 功能简介: +// 添加触发器:当从NOTE表中删除一个文件夹时,删除该文件夹下的所有笔记。 +// 解读: +// 在NOTE表上进行DELETE操作后,如果删除的是一个文件夹(由old.ID表示) +// 触发器会删除所有以该文件夹为父级(PARENT_ID)的笔记(通过比较NOTE表中的PARENT_ID字段与已删除文件夹的ID来实现) private static final String FOLDER_DELETE_NOTES_ON_DELETE_TRIGGER = "CREATE TRIGGER folder_delete_notes_on_delete " + " AFTER DELETE ON " + TABLE.NOTE + @@ -196,6 +247,12 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { /** * Move notes belong to folder which has been moved to trash folder */ + // 功能简介: +// 添加触发器:当某个文件夹被移动到回收站时,移动该文件夹下的所有笔记到回收站 +// 解读: +// 在NOTE表上进行UPDATE操作后,如果某个文件夹的新PARENT_ID字段值等于回收站的ID(Notes.ID_TRASH_FOLER) +// 触发器会更新所有以该文件夹为父级(PARENT_ID)的笔记,将它们也移动到回收站。 + private static final String FOLDER_MOVE_NOTES_ON_TRASH_TRIGGER = "CREATE TRIGGER folder_move_notes_on_trash " + " AFTER UPDATE ON " + TABLE.NOTE + @@ -205,7 +262,10 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { " SET " + NoteColumns.PARENT_ID + "=" + Notes.ID_TRASH_FOLER + " WHERE " + NoteColumns.PARENT_ID + "=old." + NoteColumns.ID + ";" + " END"; - +/*构造函数 +结合后续的代码看,这两个构造函数是为了实现NotesDatabaseHelper实例的唯一性以及同步性。*/ + +// 创建note(标签)表 public NotesDatabaseHelper(Context context) { super(context, DB_NAME, null, DB_VERSION); } @@ -216,7 +276,9 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { createSystemFolder(db); Log.d(TAG, "note table has been created"); } - +// 重新创建或更新与笔记表相关的触发器。 +// 首先,使用DROP TRIGGER IF EXISTS语句删除已存在的触发器。确保在重新创建触发器之前,不存在同名的触发器。 +// 然后,使用db.execSQL()方法执行预定义的SQL语句,这些语句用于创建新的触发器。 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"); @@ -234,7 +296,18 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { db.execSQL(FOLDER_DELETE_NOTES_ON_DELETE_TRIGGER); db.execSQL(FOLDER_MOVE_NOTES_ON_TRASH_TRIGGER); } - +/*系统文件夹的创建 +4个系统文件夹的创建:标签文件夹、默认文件夹、临时文件夹和回收站。*/ +// 功能简介: +// 创建通话记录文件夹、默认文件夹、临时文件夹和回收站,并插入相关数据 +// 具体解读: +// ContentValues是一个用于存储键值对的类,常用于SQLite数据库的插入操作 +// values.put方法可以向ContentValues对象中添加数据。 +// NoteColumns.ID是存储文件夹ID的列名,Notes.ID_CALL_RECORD_FOLDER是通话记录文件夹的ID。 +// NoteColumns.TYPE是存储文件夹类型的列名,Notes.TYPE_SYSTEM表示这是一个系统文件夹。 +// 使用db.insert方法将values中的数据插入到TABLE.NOTE(即标签表)中。 +// 每次插入新数据前,都使用values.clear()方法清除ContentValues对象中的旧数据,确保不会重复插入旧数据。 +// 然后分别创建默认文件夹、临时文件夹和回收站,并以同样的方法插入数据。 private void createSystemFolder(SQLiteDatabase db) { ContentValues values = new ContentValues(); @@ -248,6 +321,7 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { /** * root folder which is default folder */ + // 创建默认文件夹:重复上述步骤,但这次是为根文件夹插入数据。 values.clear(); values.put(NoteColumns.ID, Notes.ID_ROOT_FOLDER); values.put(NoteColumns.TYPE, Notes.TYPE_SYSTEM); @@ -256,6 +330,7 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { /** * 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); @@ -264,12 +339,21 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { /** * 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); } - +//data表的创建 +//功能简介: +//创建data(数据)表 +//解读: +//这个方法用于创建数据表,以及与之相关的触发器。 +//创建数据表:使用db.execSQL方法执行预定义的SQL语句CREATE_DATA_TABLE_SQL,用于创建数据表。 +//重新创建数据表触发器:调用reCreateDataTableTriggers方法,用于删除并重新创建与数据表相关的触发器。 +//创建索引:使用db.execSQL方法执行CREATE_DATA_NOTE_ID_INDEX_SQL语句,为数据表创建索引。 +//记录日志:使用Log.d方法记录一条调试级别的日志,表示数据表已经创建。 public void createDataTable(SQLiteDatabase db) { db.execSQL(CREATE_DATA_TABLE_SQL); reCreateDataTableTriggers(db); @@ -277,6 +361,10 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { Log.d(TAG, "data table has been created"); } +//和上面的note表的reCreate...同理 +//重新创建或更新与笔记表相关的触发器。 +//首先,使用DROP TRIGGER IF EXISTS语句删除已存在的触发器。确保在重新创建触发器之前,不存在同名的触发器。 +//然后,使用db.execSQL()方法执行预定义的SQL语句,这些语句用于创建新的触发器。 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"); @@ -295,12 +383,18 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { } @Override + public void onCreate(SQLiteDatabase db) { createNoteTable(db); createDataTable(db); } @Override + /*数据库版本更新 +主要是涉及数据库升级时,需要对表的修改操作。*/ +//功能简介: +//当数据库需要升级时(即数据库的版本号改变),onUpgrade方法会被调用。 +//该方法会根据当前的oldVersion和新的newVersion来执行相应的升级操作 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { boolean reCreateTriggers = false; boolean skipV2 = false; @@ -327,12 +421,18 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { reCreateDataTableTriggers(db); } - if (oldVersion != newVersion) { + if (oldVersion != newVersion) {//数据库升级失败,抛出一个异常,表示数据库升级失败 throw new IllegalStateException("Upgrade notes database to version " + newVersion + "fails"); } } +//数据库版本升级具体实现 +//功能简介: +// 将数据库从版本1升级到版本2。 +//解读: +// 首先,它删除了已经存在的NOTE和DATA表(如果存在的话)。DROP TABLE IF EXISTS语句确保了即使这些表不存在,也不会抛出错误。 +// 然后,它调用了createNoteTable(db)和createDataTable(db)方法来重新创建这两个表。这意味着在升级到版本2时,这两个表的内容会被完全清除,并重新创建新的空表。 private void upgradeToV2(SQLiteDatabase db) { db.execSQL("DROP TABLE IF EXISTS " + TABLE.NOTE); db.execSQL("DROP TABLE IF EXISTS " + TABLE.DATA); @@ -340,6 +440,13 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { createDataTable(db); } +//功能简介: +// 将数据库从版本2(或可能是跳过版本2的某个状态)升级到版本3。 +//解读: +// 首先,删除了三个不再使用的触发器(如果存在的话)。触发器是数据库中的一种对象,可以在插入、更新或删除记录时自动执行某些操作。 +// 然后,使用ALTER TABLE语句修改表结构,向NOTE表中添加了一个名为GTASK_ID的新列,并设置默认值为空字符串。 +// 最后,向NOTE表中插入了一条新的系统文件夹记录,表示一个名为“trash folder”的系统文件夹。这可能是用于存储已删除笔记的回收站功能。 + private void upgradeToV3(SQLiteDatabase db) { // drop unused triggers db.execSQL("DROP TRIGGER IF EXISTS update_note_modified_date_on_insert"); @@ -354,7 +461,10 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { values.put(NoteColumns.TYPE, Notes.TYPE_SYSTEM); db.insert(TABLE.NOTE, null, values); } - +//功能简介: +// 这个方法负责将数据库从版本3升级到版本4。 +//解读: +// 它向NOTE表中添加了一个名为VERSION的新列,并设置了默认值为0。这个新列用于记录标签版本信息。 private void upgradeToV4(SQLiteDatabase db) { db.execSQL("ALTER TABLE " + TABLE.NOTE + " ADD COLUMN " + NoteColumns.VERSION + " INTEGER NOT NULL DEFAULT 0"); diff --git a/src/Notes-master/src/net/micode/notes/gtask/data/MetaData.java b/src/Notes-master/src/net/micode/notes/gtask/data/MetaData.java index 4f3e688..3a2050b 100644 --- a/src/Notes-master/src/net/micode/notes/gtask/data/MetaData.java +++ b/src/Notes-master/src/net/micode/notes/gtask/data/MetaData.java @@ -26,58 +26,29 @@ import org.json.JSONObject; public class MetaData extends Task { - /* - - * 功能描述:得到类的简写名称存入字符串TAG中 - - * 实现过程:调用getSimpleName ()函数 - */ - private final static String TAG = MetaData.class.getSimpleName(); private String mRelatedGid = null; - /* - * 功能描述:设置数据,即生成元数据库 - * 实现过程:调用JSONObject库函数put (),Task类中的setNotes ()和setName ()函数 - * 参数注解: - */ - public void setMeta(String gid, JSONObject metaInfo) - { - //对函数块进行注释 + public void setMeta(String gid, JSONObject metaInfo) { try { metaInfo.put(GTaskStringUtils.META_HEAD_GTASK_ID, gid); - /* - * 将这对键值放入metaInfo这个jsonobject对象中 - */ } catch (JSONException e) { Log.e(TAG, "failed to put related gid"); - /* - * 输出错误信息 - */ } setNotes(metaInfo.toString()); setName(GTaskStringUtils.META_NOTE_NAME); } - /* - * 功能描述:获取相关联的Gid - */ + public String getRelatedGid() { return mRelatedGid; } - /* - * 功能描述:判断当前数据是否为空,若为空则返回真即值得保存 - */ @Override public boolean isWorthSaving() { return getNotes() != null; } - /* - * 功能描述:使用远程json数据对象设置元数据内容 - * 实现过程:调用父类Task中的setContentByRemoteJSON ()函数,并 - * 参数注解: - */ + @Override public void setContentByRemoteJSON(JSONObject js) { super.setContentByRemoteJSON(js); @@ -87,50 +58,25 @@ public class MetaData extends Task { mRelatedGid = metaInfo.getString(GTaskStringUtils.META_HEAD_GTASK_ID); } catch (JSONException e) { Log.w(TAG, "failed to get related gid"); - /* - * 输出警告信息 - */ mRelatedGid = null; } } } - /* - * 功能描述:使用本地json数据对象设置元数据内容,一般不会用到,若用到,则抛出异常 - - */ @Override public void setContentByLocalJSON(JSONObject js) { // this function should not be called throw new IllegalAccessError("MetaData:setContentByLocalJSON should not be called"); - - /* - * 传递非法参数异常 - */ } - /* - * 功能描述:从元数据内容中获取本地json对象,一般不会用到,若用到,则抛出异常 - */ - @Override public JSONObject getLocalJSONFromContent() { throw new IllegalAccessError("MetaData:getLocalJSONFromContent should not be called"); - /* - * 传递非法参数异常 - * Made By Cui Can - */ } - /* - * 功能描述:获取同步动作状态,一般不会用到,若用到,则抛出异常 - * Made By CuiCan - */ + @Override public int getSyncAction(Cursor c) { throw new IllegalAccessError("MetaData:getSyncAction should not be called"); - /* - * 传递非法参数异常 - * Made By Cui Can - */ } - + +} diff --git a/src/Notes-master/src/net/micode/notes/gtask/data/Node.java b/src/Notes-master/src/net/micode/notes/gtask/data/Node.java index 93b94a7..63950e0 100644 --- a/src/Notes-master/src/net/micode/notes/gtask/data/Node.java +++ b/src/Notes-master/src/net/micode/notes/gtask/data/Node.java @@ -19,38 +19,33 @@ package net.micode.notes.gtask.data; import android.database.Cursor; import org.json.JSONObject; -/** - * 应该是同步操作的基础数据类型,定义了相关指示同步操作的常量 - * 关键字:abstract - */ - public abstract class Node { - //定义了各种用于表征同步状态的常量 - public static final int SYNC_ACTION_NONE = 0;// 本地和云端都无可更新内容(即本地和云端内容一致) - - public static final int SYNC_ACTION_ADD_REMOTE = 1;// 需要在远程云端增加内容 - - public static final int SYNC_ACTION_ADD_LOCAL = 2;// 需要在本地增加内容 - - public static final int SYNC_ACTION_DEL_REMOTE = 3;// 需要在远程云端删除内容 - - public static final int SYNC_ACTION_DEL_LOCAL = 4;// 需要在本地删除内容 - - public static final int SYNC_ACTION_UPDATE_REMOTE = 5;// 需要将本地内容更新到远程云端 - - public static final int SYNC_ACTION_UPDATE_LOCAL = 6;// 需要将远程云端内容更新到本地 - - public static final int SYNC_ACTION_UPDATE_CONFLICT = 7;// 同步出现冲突 - - public static final int SYNC_ACTION_ERROR = 8;// 同步出现错误 - +public abstract class Node { + public static final int SYNC_ACTION_NONE = 0; + + public static final int SYNC_ACTION_ADD_REMOTE = 1; + + public static final int SYNC_ACTION_ADD_LOCAL = 2; + + public static final int SYNC_ACTION_DEL_REMOTE = 3; + + public static final int SYNC_ACTION_DEL_LOCAL = 4; + + public static final int SYNC_ACTION_UPDATE_REMOTE = 5; + + public static final int SYNC_ACTION_UPDATE_LOCAL = 6; + + public static final int SYNC_ACTION_UPDATE_CONFLICT = 7; + + public static final int SYNC_ACTION_ERROR = 8; + private String mGid; - + private String mName; - - private long mLastModified;//记录最后一次修改时间 - - private boolean mDeleted;//表征是否被删除 + + private long mLastModified; + + private boolean mDeleted; public Node() { mGid = null; diff --git a/src/Notes-master/src/net/micode/notes/gtask/data/SqlData.java b/src/Notes-master/src/net/micode/notes/gtask/data/SqlData.java index f8f7c2a..d3ec3be 100644 --- a/src/Notes-master/src/net/micode/notes/gtask/data/SqlData.java +++ b/src/Notes-master/src/net/micode/notes/gtask/data/SqlData.java @@ -14,57 +14,48 @@ * limitations under the License. */ +package net.micode.notes.gtask.data; + +import android.content.ContentResolver; +import android.content.ContentUris; +import android.content.ContentValues; +import android.content.Context; +import android.database.Cursor; +import android.net.Uri; +import android.util.Log; + +import net.micode.notes.data.Notes; +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.NotesDatabaseHelper.TABLE; +import net.micode.notes.gtask.exception.ActionFailureException; + +import org.json.JSONException; +import org.json.JSONObject; - /* - * Description:用于支持小米便签最底层的数据库相关操作,和sqlnote的关系上是子集关系,即data是note的子集(节点)。 - * SqlData其实就是也就是所谓数据中的数据 - */ - -package net.micode.notes.gtask.data; -/* - * 功能描述: - * 实现过程: - * 参数注解: - */ - public class SqlData { - /* - * 功能描述:得到类的简写名称存入字符串TAG中 - * 实现过程:调用getSimpleName ()函数 - - */ private static final String TAG = SqlData.class.getSimpleName(); - -private static final int INVALID_ID = -99999; -=为mDataId置初始值-99999 - - - /** - * 来自Notes类中定义的DataColumn中的一些常量 - */ - - // 集合了interface DataColumns中所有SF常量 + + private static final int INVALID_ID = -99999; + public static final String[] PROJECTION_DATA = new String[] { DataColumns.ID, DataColumns.MIME_TYPE, DataColumns.CONTENT, DataColumns.DATA1, DataColumns.DATA3 }; - - /** - * 以下五个变量作为sql表中5列的编号 - */ + public static final int DATA_ID_COLUMN = 0; - + public static final int DATA_MIME_TYPE_COLUMN = 1; - + public static final int DATA_CONTENT_COLUMN = 2; - + public static final int DATA_CONTENT_DATA_1_COLUMN = 3; - + public static final int DATA_CONTENT_DATA_3_COLUMN = 4; - + private ContentResolver mContentResolver; - //判断是否直接用Content生成,是为true,否则为false private boolean mIsCreate; @@ -79,19 +70,11 @@ private static final int INVALID_ID = -99999; private String mDataContentData3; private ContentValues mDiffDataValues; - /* - * 功能描述:构造函数,用于初始化数据 - * 参数注解:mContentResolver用于获取ContentProvider提供的数据 - * 参数注解: mIsCreate表征当前数据是用哪种方式创建(两种构造函数的参数不同) - * 参数注解: - * Made By CuiCan - */ public SqlData(Context context) { mContentResolver = context.getContentResolver(); mIsCreate = true; - mDataId = INVALID_ID;//mDataId置初始值-99999 - + mDataId = INVALID_ID; mDataMimeType = DataConstants.NOTE; mDataContent = ""; mDataContentData1 = 0; @@ -99,23 +82,13 @@ private static final int INVALID_ID = -99999; mDiffDataValues = new ContentValues(); } - /* - * 功能描述:构造函数,初始化数据 - * 参数注解:mContentResolver用于获取ContentProvider提供的数据 - * 参数注解: mIsCreate表征当前数据是用哪种方式创建(两种构造函数的参数不同) - * 参数注解: - */ public SqlData(Context context, Cursor c) { mContentResolver = context.getContentResolver(); mIsCreate = false; loadFromCursor(c); mDiffDataValues = new ContentValues(); } - - /* - * 功能描述:从光标处加载数据 - * 从当前的光标处将五列的数据加载到该类的对象 - */ + private void loadFromCursor(Cursor c) { mDataId = c.getLong(DATA_ID_COLUMN); mDataMimeType = c.getString(DATA_MIME_TYPE_COLUMN); @@ -123,27 +96,21 @@ private static final int INVALID_ID = -99999; mDataContentData1 = c.getLong(DATA_CONTENT_DATA_1_COLUMN); mDataContentData3 = c.getString(DATA_CONTENT_DATA_3_COLUMN); } - - - /* - * 功能描述:设置用于共享的数据,并提供异常抛出与处理机制 - * 参数注解: - */ + public void setContent(JSONObject js) throws JSONException { - //如果传入的JSONObject对象中有DataColumns.ID这一项,则设置,否则设为INVALID_ID long dataId = js.has(DataColumns.ID) ? js.getLong(DataColumns.ID) : INVALID_ID; if (mIsCreate || mDataId != dataId) { mDiffDataValues.put(DataColumns.ID, dataId); } mDataId = dataId; - + String dataMimeType = js.has(DataColumns.MIME_TYPE) ? js.getString(DataColumns.MIME_TYPE) : DataConstants.NOTE; if (mIsCreate || !mDataMimeType.equals(dataMimeType)) { mDiffDataValues.put(DataColumns.MIME_TYPE, dataMimeType); } mDataMimeType = dataMimeType; - + String dataContent = js.has(DataColumns.CONTENT) ? js.getString(DataColumns.CONTENT) : ""; if (mIsCreate || !mDataContent.equals(dataContent)) { mDiffDataValues.put(DataColumns.CONTENT, dataContent); @@ -163,19 +130,11 @@ private static final int INVALID_ID = -99999; mDataContentData3 = dataContentData3; } - - - /* - * 功能描述:获取共享的数据内容,并提供异常抛出与处理机制 - * 参数注解: - * Made By CuiCan - */ public JSONObject getContent() throws JSONException { if (mIsCreate) { Log.e(TAG, "it seems that we haven't created this in database yet"); return null; } - //创建JSONObject对象。并将相关数据放入其中,并返回。 JSONObject js = new JSONObject(); js.put(DataColumns.ID, mDataId); js.put(DataColumns.MIME_TYPE, mDataMimeType); @@ -184,11 +143,7 @@ private static final int INVALID_ID = -99999; js.put(DataColumns.DATA3, mDataContentData3); return js; } - - /* - * 功能描述:commit函数用于把当前造作所做的修改保存到数据库 - */ - + public void commit(long noteId, boolean validateVersion, long version) { if (mIsCreate) { @@ -228,12 +183,6 @@ private static final int INVALID_ID = -99999; mIsCreate = false; } - /* - * 功能描述:获取当前id - * 实现过程: - * 参数注解: - */ - public long getId() { return mDataId; } diff --git a/src/Notes-master/src/net/micode/notes/gtask/data/SqlNote.java b/src/Notes-master/src/net/micode/notes/gtask/data/SqlNote.java index 2adf26b..79a4095 100644 --- a/src/Notes-master/src/net/micode/notes/gtask/data/SqlNote.java +++ b/src/Notes-master/src/net/micode/notes/gtask/data/SqlNote.java @@ -14,9 +14,6 @@ * limitations under the License. */ - - - package net.micode.notes.gtask.data; import android.appwidget.AppWidgetManager; diff --git a/src/Notes-master/src/net/micode/notes/gtask/data/Task.java b/src/Notes-master/src/net/micode/notes/gtask/data/Task.java index 64aacd0..6a19454 100644 --- a/src/Notes-master/src/net/micode/notes/gtask/data/Task.java +++ b/src/Notes-master/src/net/micode/notes/gtask/data/Task.java @@ -35,25 +35,25 @@ import org.json.JSONObject; public class Task extends Node { private static final String TAG = Task.class.getSimpleName(); - private boolean mCompleted;//是否完成 - + private boolean mCompleted; + private String mNotes; - - private JSONObject mMetaInfo;//将在实例中存储数据的类型 - - private Task mPriorSibling;//对应的优先兄弟Task的指针(待完善) - - private TaskList mParent;//所在的任务列表的指针 - + + private JSONObject mMetaInfo; + + private Task mPriorSibling; + + private TaskList mParent; + public Task() { super(); mCompleted = false; mNotes = null; - mPriorSibling = null;//TaskList中当前Task前面的Task的指针 - mParent = null;//当前Task所在的TaskList + mPriorSibling = null; + mParent = null; mMetaInfo = null; } - + public JSONObject getCreateAction(int actionId) { JSONObject js = new JSONObject(); diff --git a/src/Notes-master/src/net/micode/notes/gtask/data/TaskList.java b/src/Notes-master/src/net/micode/notes/gtask/data/TaskList.java index fe77c6f..4ea21c5 100644 --- a/src/Notes-master/src/net/micode/notes/gtask/data/TaskList.java +++ b/src/Notes-master/src/net/micode/notes/gtask/data/TaskList.java @@ -42,10 +42,6 @@ public class TaskList extends Node { mChildren = new ArrayList