From a7b3aa33f4f06e30a2c068012671ee4b54ae80f9 Mon Sep 17 00:00:00 2001 From: pkagifq93 <2740594397@qq.com> Date: Mon, 16 Dec 2024 23:00:39 +0800 Subject: [PATCH 01/13] ADD file via upload --- .../zhushi1.txt | 467 ++++++++++++++++++ 1 file changed, 467 insertions(+) create mode 100644 src%2FNotes-master%2Fsrc%2Fnet%2Fmicode%2Fnotes/zhushi1.txt diff --git a/src%2FNotes-master%2Fsrc%2Fnet%2Fmicode%2Fnotes/zhushi1.txt b/src%2FNotes-master%2Fsrc%2Fnet%2Fmicode%2Fnotes/zhushi1.txt new file mode 100644 index 0000000..c0c0575 --- /dev/null +++ b/src%2FNotes-master%2Fsrc%2Fnet%2Fmicode%2Fnotes/zhushi1.txt @@ -0,0 +1,467 @@ +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.util.Log; + +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 { +// 数据库帮助类,用于管理名为 note.db 的 SQLite 数据库。 +// 它继承自 SQLiteOpenHelper 类,这是 Android提供的一个方便的工具类,用于管理数据库的创建和版本更新. + // 数据库的基本信息;数据库名称和版本信息(在创建实例对象时会用到) + 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语句,辅助我们来对数据库进行操作 */ + //创建note表的语句,这里的NoteColumns就是我们刚刚在Notes中定义的一个接口,里面定义了一系列静态的数据库表中的列名 + 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" + + ")"; + + //同上,创建data表的语句,这里的DataColumns就是我们刚刚在Notes中定义的一个接口,里面定义了一系列静态的数据库表中的列名 + 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 ''" + + ")"; + + // 功能简介: + // 创建一个以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 + ");"; + + /* 以下是一些对便签增删改定义的触发器 */ + /* 总结 + * 这些触发器都是用来维护NOTE表和与之相关联的DATA表之间数据一致性的。 + * 当在NOTE表中发生删除或更新操作时,这些触发器会自动执行相应的数据清理或更新操作,确保数据库中的数据保持正确和一致。 + * 特别是在处理文件夹和回收站等逻辑时,这些触发器起到了非常重要的作用,可以自动管理数据的移动和删除。*/ + /** + * 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 + + " BEGIN " + + " UPDATE " + TABLE.NOTE + + " SET " + NoteColumns.NOTES_COUNT + "=" + NoteColumns.NOTES_COUNT + " + 1" + + " WHERE " + NoteColumns.ID + "=new." + NoteColumns.PARENT_ID + ";" + + " END"; + + /** + * 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"; + + /** + * 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"; + + /** + * 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"; + + /** + * 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 + + " 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"; + + /** + * 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 + + " 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"; + + /** + * 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 + + " WHEN old." + DataColumns.MIME_TYPE + "='" + DataConstants.NOTE + "'" + + " BEGIN" + + " UPDATE " + TABLE.NOTE + + " SET " + NoteColumns.SNIPPET + "=''" + + " WHERE " + NoteColumns.ID + "=old." + DataColumns.NOTE_ID + ";" + + " END"; + + /** + * 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 + + " BEGIN" + + " DELETE FROM " + TABLE.DATA + + " WHERE " + DataColumns.NOTE_ID + "=old." + NoteColumns.ID + ";" + + " END"; + + /** + * 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 + + " 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 + */ + // 功能简介: + // 添加触发器:当某个文件夹被移动到回收站时,移动该文件夹下的所有笔记到回收站 + // 解读: + // 在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 + + " 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); + } + + // 创建note(标签)表 + public void createNoteTable(SQLiteDatabase db) { + db.execSQL(CREATE_NOTE_TABLE_SQL); + reCreateNoteTableTriggers(db); + 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"); + 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); + } + + /* 以下部分是操作SQLite数据库部分 */ + // 功能简介: + // 创建通话记录文件夹、默认文件夹、临时文件夹和回收站,并插入相关数据 + // 具体解读: + // 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(); + + /** + * 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); + } + + //功能简介: + //创建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); + db.execSQL(CREATE_DATA_NOTE_ID_INDEX_SQL); + 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"); + 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); + } + + //解读: + //synchronized关键字确保在多线程环境下,只有一个线程能够进入这个方法,防止了同时创建多个实例的情况 + //getInstance(Context context)方法使用了单例模式来确保整个应用程序中只有一个NotesDatabaseHelper实例。 + //它首先检查mInstance(类的静态成员变量,没有在代码片段中显示)是否为null。 + //如果是null,则创建一个新的NotesDatabaseHelper实例,并将其赋值给mInstance。最后返回mInstance。 + static synchronized NotesDatabaseHelper getInstance(Context context) { + if (mInstance == null) { + mInstance = new NotesDatabaseHelper(context); + } + return mInstance; + } + + //功能简介: + //当数据库首次创建时,onCreate方法会被调用。 + //这里重写onCreate方法,它调用了上述createNoteTable(db)和createDataTable(db)两个方法 + //这样首次创建数据库时就多出了两张表。 + @Override + public void onCreate(SQLiteDatabase db) { + createNoteTable(db); + createDataTable(db); + } + + //功能简介: + //当数据库需要升级时(即数据库的版本号改变),onUpgrade方法会被调用。 + //该方法会根据当前的oldVersion和新的newVersion来执行相应的升级操作 + @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"); + } + } + + //功能简介: + // 将数据库从版本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); + createNoteTable(db); + 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"); + 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); + } + + //功能简介: + // 这个方法负责将数据库从版本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"); + } +} \ No newline at end of file From f394794af307cd25d1bff3f9391f685785478876 Mon Sep 17 00:00:00 2001 From: pkagifq93 <2740594397@qq.com> Date: Mon, 16 Dec 2024 23:01:49 +0800 Subject: [PATCH 02/13] ADD file via upload --- src%2FNotes-master/zhushi2.txt | 302 +++++++++++++++++++++++++++++++++ 1 file changed, 302 insertions(+) create mode 100644 src%2FNotes-master/zhushi2.txt diff --git a/src%2FNotes-master/zhushi2.txt b/src%2FNotes-master/zhushi2.txt new file mode 100644 index 0000000..e6b5b4a --- /dev/null +++ b/src%2FNotes-master/zhushi2.txt @@ -0,0 +1,302 @@ +package net.micode.notes.data; + +import android.net.Uri; +public class Notes { +// 用于表示笔记应用中的各种类型、标识符以及Intent的额外数据 + 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 + */ + //以下id是系统文件夹的标识符(即系统文件夹的分类) + //ID_ROOT_FOLDER:默认文件夹 + //ID_TEMPARAY_FOLDER:不属于文件夹的笔记 + //ID_CALL_RECORD_FOLDER:用于存储通话记录,以便返回 + //ID_TRASH_FOLER:垃圾回收站 + 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; + + + // 额外的数据键,个人理解为就是定义一些布局的ID + // 这部分就是用于设置UI界面的一些布局或小组件的id,给它定义成常量了。 + // (这样的封装性可能比较好?因为如果有部分要修改,则直接来这边修改即可,不用在activity部分一个一个修改。) + 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 + //GPT:Android开发中常见的用于定义内容提供者(Content Provider)URI + //内容提供者是一种Android组件,它允许应用程序共享和存储数据。这里定义了一个URI来查询数据 + /** + * Uri to query all notes and folders + */ + public static final Uri CONTENT_NOTE_URI = Uri.parse("content://" + AUTHORITY + "/note"); + + /** + * Uri to query data + */ + public static final Uri CONTENT_DATA_URI = Uri.parse("content://" + AUTHORITY + "/data"); + + public interface NoteColumns { + // 雨:这个接口定义了一系列静态的、最终的字符串常量,这些常量代表数据库表中的列名。 + // 作用:用于后面创建数据库的表头 + // 总的属性有:ID、父级ID、创建日期、修改日期、提醒日期、文件(标签)名(摘要?)、小部件ID、小部件类型、背景颜色ID、附件、文件中的标签数量、 + // 文件(标签)类型、最后一个同步ID、本地修改标签、移动前的ID、谷歌任务ID、代码版本信息。 + // GPT提示:在Android开发中,当使用SQLite数据库时,通常会为表中的每一列定义一个常量,以便在代码中引用。 + // 这样做的好处是,如果以后需要更改列名,只需要在一个地方修改,而不需要在整个代码中搜索和替换。 + + /** + * 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"; + + /** + * 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)

+ */ + //雨:在数据同步过程中,这个ID可能用来跟踪和识别每次同步操作的唯一性,确保数据的一致性。 + 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"; + } + + public interface DataColumns { + // 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

+ */ + //MIME类型是一种标准,用于标识文档、文件或字节流的性质和格式。在数据库中,这个字段可以用来识别不同类型的数据,例如文本、图片、音频或视频等。 + public static final String MIME_TYPE = "mime_type"; + + /** + * 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"; + + + // 以下5个是通用数据列,它们的具体意义取决于MIME类型(由MIME_TYPE字段指定)。 + // 不同的MIME类型可能需要存储不同类型的数据,这五个字段提供了灵活性,允许根据MIME类型来存储相应的数据。 + // 读后面的代码感觉这部分是在表示内容的不同状态? + /** + * 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; //模式?这个被存在DATA1列中 + + public static final int MODE_CHECK_LIST = 1; //所处检查列表模式? + + 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";// 定义了MIME类型,用于标识文本标签的单个项 + + public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/text_note");//文本标签内容提供者(Content Provider)的URI,用于访问文本标签数据 + } + + // 通话记录的定义? + 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; //意味着在数据库表中,这个电话号码信息将被存储在DATA3列中 + + 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";// 同样定义了MIME类型,是用于标识通话记录的单个项。 + + public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/call_note");//定义了通话记录内容提供者的URI,用于访问通话记录数据。 + } +} \ No newline at end of file From bfee96b1ff5cf51daccc9b80d96b0a2a6e5d6c24 Mon Sep 17 00:00:00 2001 From: pkagifq93 <2740594397@qq.com> Date: Mon, 16 Dec 2024 23:07:48 +0800 Subject: [PATCH 03/13] ADD file via upload --- doc/minode.docx | Bin 0 -> 23648 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 doc/minode.docx diff --git a/doc/minode.docx b/doc/minode.docx new file mode 100644 index 0000000000000000000000000000000000000000..6e006c98325890661f8bd68b7db47b75d217e25b GIT binary patch literal 23648 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 X)s=~H>hZlv@j1LYoSl8H|9$j-IAe@K literal 0 HcmV?d00001 From e69aa71edce3eb0dfe424827811d26a10504f9a2 Mon Sep 17 00:00:00 2001 From: pkagifq93 <2740594397@qq.com> Date: Mon, 16 Dec 2024 23:09:16 +0800 Subject: [PATCH 04/13] ADD file via upload --- doc/minode2.docx | Bin 0 -> 19648 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 doc/minode2.docx diff --git a/doc/minode2.docx b/doc/minode2.docx new file mode 100644 index 0000000000000000000000000000000000000000..681b31fdcd1e12f4f200560d8556e80f0257a00c GIT binary patch literal 19648 zcmeFZW0!8hk}g`d?OMfEcGW7|wr$(CZQHhO+qUghytVf}`*fetJ?oS6|b z-W(AbnGsJ;SqWee6aX*)2mk;80)U;uc}sOb0Dxbh0077U5I`CNHr9?t){Z)gZnj1a zS~RX!mcQ~rfXH$IfPTjRZ}}fQ1C5Cj*8Ow{LN7^g@Nq3l`ltEj6hIN&$<*>^;20i2 z%AfHgonPI^KypfeaZr|oB#bZHjLO3SbL;7rkcdq#Bp2vh$$kmiW`8KxRt~9s3^7Uf z66v=2##nqUnL4{LC0PLJh?)lCrxc)MG7B;TP*q<6qA8MMl!@J=81Vu>&=_}Ly0(E+ zwn=QsWtzaT;k0v+pcCp>n7yn;2{8=U92Qhfk|YCl8&Sf}JHr9B^-= zu`qa2WmTfVFCFn6ndB%(hY5>a^vWV?JQX$F+G-1_q&IMOAC-zo8sFBb1!)1}rZ>~` zt5oy0vcJi|i=zNLIfV{3aN)`0cCi3BPNV}-C3$Lu?--kX5W zfVnQY^*)ROX*}RFR9*)xoPxE%jTjQ9^mC%Lfyf*?bDdvP{urUDU8&yG5y>1 zT7!z`39SrK=HyRQSeA6OB$;vgl~7o>opa~z1wAE0VL?=od5~eW@1Dk*Na|lF;m4Rf zEH?ydjXHZa*qK^<4?m9SzuJdUFn`zzJ^+CKZ$JRVpGk4Cu{WeOv@vk9`te);a9EdG z7Yf)S&EMV?*WYwQ%2v(|VM{S?@lh@&?#4LgRs*1&E)QYxMSzOS0hD9To-NH#BP_#^ zEYkb0VL5dM6m@;utdL-qU#UxxgTKF_TRemzU@))1$NSQSR|u`nYnX?(fU^*%RGyJ9w^U5lD|u0ChJ zUk~n{9SNM6PL3v!tO#|?dAJkbTCHj|@yun2#mo3;Q>d=SjO2&-%Vu@96DSUmg1){a z$0cxRQ5GOUenITOqC%6`DCW-)jeXP^mQ`(Qo-=kY&kr5ixiebGN*9794AsA^*<;&I zM3F%f<<(e0FwY_268KwW^lMm)OVw&unTcAL6RcM-Q;@6g%Jf{)qBx8(e5&Gz9>xz5iG*+$!orhGqz$B57JK?PLoOB>$ESV7 zk-7`sm^a1_oKd&rlGq0|rVO1GDMR76;8GuNT)gakck+)!2ok9C=WAWyald zQ<_K|6?sH(Hbz*tT=XKzQ_DTpCq@T(n$a;X@`h+ORL#+Xr(m%)BLYSr)l2knaD%X= ztY_p-MHlO}@nv7HoY161xp&(|AlOclTIAb-%b;uf9LvktCkCY8Z=#qfBcR*+&&UIt zN&%aXAE2N~Se-txAe9|0O|6gF(o_^V=d0;m874zQv(ei+nJ6>Kil;0DXqbai&oTF1 zOC=`+jL8SgsYPrrvllU?bHr)z73BF{Q3rYr_0Q!UEi-IbR2g6*#V{TjLR&4NFOCao zuWOsQgCz){kUNw;NBeo^rE+E#apg}4rjs}GdRaJ3r z4G0Sq)LD{9NLqt#>PT36Z&(sZF;|fJSd+NipFB8!TKF1TSPD6*kU9C#(D|}>HMBjk zv~n+eJAEJD1oruei1th~H+nRQc(Hzap#|UJhMbnUi<}ECz8(!OEfUpvTFY~`OZ&Q* zIZRM1E72_E=VgF@@}6JYntLyMtXphe8j>xs0txaWsBH3GSmDmSax&g=4eAVAux!TA z)=q%a98u9N7ejWbg%E%zgqG40!MH#+00y4ZV2h_LnbNh z;cKW4!p>}lh|{>$6PC)JWm-t9ETpdw{T~XXd+m3U43m;Ld7Zy24N4Zgc>wM|SLbmovFNXj!SNiH=ohN zkF9QaF!UxsDbk@) z2o=UGl_}iI`01wt!e)EfXScFk+${xXL1aWwBT@&E%793alG?zN(r6jacF!Lv41BTp zVbP~5{>qulRet*Mup_CXpRfi)Be39%ps>+~4aTR2r6!~cML4KfD7>`j0|Hi3LLkPi z;zSn!Rz%g&MckZKjb8>ODWI%*aWaU|qYx8OxocX`2ddTNnaufkE`592+r7G5y^%W5 zbiY0?ePA5yra(6ZNqj|V;0!3D3W&&}o|T0c*KAz=4TPn`$?>^JquZYU8(9;aNjTMYT62YqR$#R!yCqUKno0l=+ry+=^&hTJUzYxfce+M$&d0v~ zc`Hr#HIIi|i{ptfwOi4{ZQSQ}f9b>Odl;AH?~V`NW;z7vw9sIMmrs2?9jd0gwAo&a zcEz?Unx-qlrYA3UWtS(Omk>47y85Wd33=LQ*qC8?CR;LjPUyNWQ!x(OC+tn`;z0wm zVkE?TP`Wah)E_ly*rPwZ1f~jhLVm!v*Su*O{T)g77l) zxr$X@H()GaesdDxJa#{aU9#9$eND&1EMG^>K=k`2u5@uU3<|W!!&$c?fd<*L(LBeW zu*B75!V5wnv>W0tmyoWRvn^0$SIz{y+i?zdtKKHXfm#>t%rc{eVdrz_vBA2XtIfqS zG!{eD>tIy$G@B0HAtAgETx~msdcOwjV(P|Tmw@DcXJ}_tF+bTjD}~IzGjl>yN|F(( zc8{`wd#DojFS|NZpSaE_bwrEbMW(!rTJ;D0v>8-M9bKG4XtY~NIJcGgDV#`f#u97Ij{J|T9b*WCAe8(8O-PXB_FO{MD9sKo z$$$0FuZ!2>#wS089oarvT0L1(T@~HhWW7G-zuhg5vJv6?H{j$ivqXTc@uCU8+XUCu zNt+Umh{+Gl6#m|$5sm)2B$+`3fv5$dmN=~5&p^nlJ`O}I$f)`LGuxaJ9U8=QNstxS zzBqS*W6CgJbe4LAX88>urA)15sCq-XfI^YGkwM9?G~l9FZMnuLi{4hK4WH*O@CR0D z#pzdN2B#KNoj3@^eV%5;q^H=Cs@0yl(X%j}U9@=Z_=hK*v-91>oNbR0Q!DeG`B(E{ z&flS&_9pX$p&my040Y8`1|=TrrzcgEcfK1-`#7Afb-VT_$O_$EeTCC*55l^diWCYU zV@Ji=9Q@~zp7Ke~;x~b-Jux&4D} zbudfII#W3ui(7qt3cZ6gOqO+bBo)H~Y{BHS%ohqAUce!UIds>G z>Y6sgM7Czp=_k|{{-I+ojIsBAD2K4Jg2%NjW20TVS(iuTZ2FC4HIJ{H$?zGln5?^5 zR~BLIRdxKbu_7JoUrS=q?|kPr*v+pw<}8cMImX)j(7spOO-lQX_VlQ2&H{mh>?RckhlUbRK zZKQz)?Gli%;0dk06sB(;Tw7IOlz(+`Ui6{d#WOKoFDY5=+)k%55Mh%~g~j#V#G~+x zMTelN7acmZcYy*HQe<+H=^*i{C5Z0R0K(8TBP?rbeo1lH# z6k*PIU(B`*Pix|Ef)2XM>Vx$488f0#D__~xF8}Qk?*U_56=HhlfCzgY5daNAm<5j< z0_74Q4>GSm?MOm`*E07PnR=}pWsS>hLi91?;&=l4<*lNFJOx^`LnI(ablz#PtOhOC zfK9_uOuILS?3d_yQG5eer0)8OqePDZc!LkVcNRp?i5#2bN-gRy^bQ%h zHJzS+yW$h|uJ6gz0tCMuOiX7rk<&pUMEsNYGm0tOuiE!X;8RkhSqzD3($3^{{`9uc zG;lyTa`tRQh&dxs)xlx0nylL&h-vdfS#)^N#$(_%@6ZwZbh$MtV-b%mkOv+ z>@Sn{f9&8X6Hc=5^JTv9#aXtaH3q$Jw$>u)sx8H#0#iEh9JR}@Zp)i~^B zDE|ftzY3j%*1+eb1e908K?jm(>^z!mJu07d^fmQ40|Ri&UAVU8XpV`Mn8dUQ1&L*V zXW7q0#3q6^7>H&L2aZ4`KuD*Q-;Xv0oE2QwAWN$yhe)T&0Hk%UD8C@<4drXm2-~X9 zH?ODORG1Fg5(ORv>WA%!GUuw5#M=nDHeRso6k1ANMH4Kh8{AW?O)kf-ZsTC_ixtkb z7|mabC*xsmdfuTF`)f$U^sQ!6=>D3bcnZG-ghM3HlqF7#Jp@ndk=65LjYv`#?Re)w znHen~N+p4q9>aC`9=I4vxp&rNX%SA@Xb9$E<$J{i&e7hUsSS2fWMM9&Ph~XNm zQI-l+N?;nkQEn9(K2gTY5s`;&FyyEqR(;;PWcXFq0v=I*sh<)W5pOm6@Z9bQJ@KZM(Q1SA4fmv_n9a%p>sTzpkr(w-8+R2xLbJkFPy`@x(-@i91cRxx|^j%6LzU+tvM3nibucl78xq zsbRgQbTOENcJ~J#Mp9A%(Tr#6!#rlTz$#Q-sbG``O1>=ifu>E z?+TIS=^d%HOo#8@Fx0WHFG^KW(XSUUP~oM^>!T3SuJ_l8n~dR`5a6t!i3O4`q1l+K zAt34LaCaddF70ih`zgRwP3MW8_cs$3m<1A+Fb2o#kqtl7D$(DvHZDd8R1HCFhy%;@ zFx&DA9@L9O`A3T5C0a9&IN|klBgpy#VE+J&lFTs1+_;|fN&wQJrM{;akor}sgDpFY zv8Di{7_!mdTG8F=e_59~66WkXyz@t;>j<`@mo1f`7z!-Gc5-ZXrvt-^I0tduBgvIl z&^d^vR+3CQC}^;1WPLD;rlk=Y2S%9UAO!ae&FB7{V+<*|dWy0$YV;A795 z2bOoktITkSfW-tf<$e;Lx=SSd6MVsx;WNzAj$3vH2uZY0hG6$p4<@8J(}nRy6cSM6 z=CI}F8Ok@!gM6y0szB^f4xbN(6&rO8D(gd1(UUP3@b<@x|A}WyKdQH4| zOmdD3zR9LfL5$gO07CSasfS1w@m1jCWAkxUclW_r`}c=r?f%plz|_pn{00{$0C`e4 z=DgQ%VSbM0u>yPCZ?MF}-P#Q&v>OR1d-357fxZA6s!d?5l_> zBul}NM&&v`gN0mC8MqA*$7f)k0Y#1zBcE5_CP;c(k9zhqb*_T@XB)JU+gP!W3Ca z7)^dw*tzr+v_Gmg@Ynp6(Gza}JzJF5pgVI`9pl#!{)+O#TCO?V=iPZfo7`F&>Jw#) zsyH}+K1K7bWieF@7^S~ljeDKzIcNof2NBhZ*xAd%;r<#ehFEb9s0!_3G5#z;J=bFG z8(hUD0&JIdV_-#oXaSKah28dKL3op1{1(#r1y;1x0fyxu(MAk4S|QA<3A7k$)8aEzStgx3 zy)=KOUDN7U`RK?Z!mUy{e6Ci9Wgd?H{CR%Rc<)N77?6}1Fqa++#a3ux+V_~6#qL+m z*R&*8m|*0L7DP8=YV^gTrbV-W;F2-fB-{gB32b;JZ1whLjz*hYtm-_0J0q4)be(q@ z8#&BA`;NdRK{odp6lp5$ZEJf;TaOMu%cLRpKUqh=IF`e%l}7U9$F@n<1Prmwuv~wi zlahlG1{?QSEHUEdb0jx$l$-Eln-*JLzM?SYxKq{DFaDVUqK8H1U>*LA{~bla$EUzo zj&l<@6>ilgxPu!qU{p!44`pIqb|x+>x@5FMXMoyX=QXOLxFm~1<(=U>kr$0xddmM& zD-bLLf;`X^RFfZnwRsDN&{r&`UpfD+u~e7ePL|ZNzbJ?2t-=(EL%bf*3waxTq{|F; zZ5am27PuDI4@8EewSr*Jls{spqBp@egCz&4Y}iN%pk-%>iKx&h&kM+9{~42cSCajJ zptcgL2Q@R<5?8z}mgG<7x8Q!UYXwxbj};A_$%>z)sI|pX$Lf$Rf@aDh4}p>`NkX7> zjHhVat*CmrvUK*dS+-Q6Qs*vE`8gl{L`EnaVpI>8({w0lyCJ1xRI+m(MrhxOc$AE3 zscd$-(($Xb-Pcz+!=Kmu>l(fmpHv<)GYqJBiYw0Teu+2Yx_&<10~CBNuF zJ{NNh(6L_28#K^k^r*VI6)`^(&&t&_?! zF~)PY5hX(R?yXTVBm03?TeZ_I2DE?5OQp+!fz_+y`4*>Wa=%Q>$1$)zorhkngF~&0 z2fNQP)tR{P1ic4jAd|Vm5LnkTZ%gg~0tvuLBbtvs#!GvfQXUbRT~a~s;}l$vQ)F7= zcz|)9L5c&-tY3Wj75l+5+q1P087MuqXjQJ>*Fo~`koXPsAfjLjOYJLVxC9hZj3o6_@5{dSBa@xu^iumJs(Q38l_f<}@@@x~ zr*!``hFTizfyZh1ZJ4sHm=5!1u^GS-J zc^^jJjJ8@<`1)dyrQ0k(2Ea@K+S&G7V&>HupTe;i)V9n+U8xJDcR#pMYxvKmTVRbY z2}LAGA*ieIn+jp@3v2-dR}OPM#TjE4TZK}t3^Xh|0iQ<`%416q=a+`I$H!T?r%4#CCUu$?a^w@|WZ$)2yx4&_V{ec?P!RneALIdX2#vPF)@ zO-9<42&3hXs?zv8UUsLuAS4*$$8*O^aMh)J=WoVQDexGci1jEhQfNsU{t7SSc9+yM z8*4e%i^7F@VHGdvAtH6n+4mevtPv}d;pmvwoSQY@oElLc<*K2eZ#eN2g*I#q??DQ1 z#3WL9Eeneh_^Sru(|Yuc2yL6yc`*~yliq`C)Kt3l9yb&vB^k_fD^jCqjOP%EZ6Ki% zigi-ufvMIE7fAVhAtgns19wss3vy|{m9E4`#^+TUV^fLh!WU&g?Kg1Rd7ed-STNT@q1r`Cijn~5~Kc=TRkc) z0rl{0_h2P%*R&t*?oS-WLZ!}<5$7W3J6XJcsDl%n8^zFo_mNejjh7w;jRRYtm`ibz ziS=351^j4TApO!GUTY@$3k zaESj_R(=@;)FAFRG#La9oKB6@PNfuAUVZDH=Dq@<5@snW8kW$C{Wp@Bal`kGj(WC! zhAAmZcE9h#V}t>~l-%HN>;w$-AT`2%O+LAHd0Hj1`$Y%-c1cTWxWB3zY0N-n(LlBB z9L|}wV!vwbA{kAQ9KOGbGNEB(q>PMN*%4K}9=(i?b0*Rr2N-QDe6u+qK^qaAsqCy- z@WjTWyUNC+J#3v>jU@uwg?w>=KhCkJ4!OvEm|Rv3$fuj3^k!%2`1zSL-gwn(mEbhj z)~U~|nQ#q)(zEVBtE*+$;n}^w;c;tAe}&aThg?rC9DJ$pDA~Z(OqS!I{xv05uGW4_ zBTVJ_vUr*v8}HxRJ#73oEWA$n@~pp3AKt7sL)*6AD5rZ$Du{prD2_s%;}HKw{Ojb^B5&*DUSwjH#1!qBmq`vIIkX6C*T;dQ1rlvZBoS>#f8a8OOOfb- z?JXw_7R)Xm#~L@jB(%aDh9v^MtK}SJoe+^`(b(5R>E@Ue}tBp%aHlmkI+Rk5xIUfG})`07R2R$d$7mfra4OOllAnb;>mGJ zQnvMMmr-3Sw6(31t0~NbCCvKlS8#Mo6pEKZVJPuvp0&y#pFeTNZ>~e1U~Q|%lJFwF zS8$q9Ey*Ut5k;WSBTW^>>gmxM%Z=EbM~!1t-P`pI{@Y(Hp%|JkK7e&Po<@`KT=Xc(9koX|jjZulp>Qq3tGVVwuu!qM zz@@;5)78+{w#=S2mzG$3@)OKwm7k>#X-YI?$6+$!&Xu5ziU~Mo8de6g(sqilPdag7 zkj9kFrW>kOMsRsz4mF2)#c#Gr-`)-QV*||2tw6wI`yDxX#wxCgt6>P5Kqny>dm^MP z5k89_VZcx#OI6-mFjUs7mtE1LRiC{;^VN($d{dk1(5g0{cNb0B)q)(8b4o@a!|nd} z2hjLmu_NrDlbCy8007g!002;bl;NLR<7jGRWkmbWn*N{o5j719Y!MW1+D9I$_v+K; ziij|r!X%VGb;!t+59ZJsBSe@-&l92!0Tj(0(5gv2rk?k8(?E7ntEyc>q@=Nj$c zJwn57=;I6u_=>@3Ji{=&j~|!hXo6vL1|l{FdQP(NPQbC{SfWHsq7V3L5h7zmv?1mp z?&eDb?8o{O<^Aa&5-(Gv6b2Y-Mhy@x?P9|sz*qO_`8b$@m-%*oEqZPEgKqIy`-<*B z3hpWSatI}hthl<@O2xAp>6WS<0?=Yvw;78AyUS&*fk8(@s_rcIxjHm8F;s+b%vO)t z*8P??F$EfY5FTI9_a#4Tr&+SBeXas9xnkGlUb9?5{X`CM>s7Z97*XAzeV56`0xX^m zwzcKnqP~2K`MJdGxslX^rR^7A+z@>8(zO_jDLe1Da%)|(c6R=TN@ljaeETHdak0qU z2^54ebinL5R;AQ6WStU=*ry@vy5RKoG>(&q*HN!WRj$XYy@vW%*mDUG$NgfUq8^JIzfgq;}R*W6(fjs>- z*-Of_i7{4%RtJyA-R|SGm$3x2+dXP`~`YJ}}`~5QSX{KhU$Ll@{bEe+a z%0ifR#nkKl<0;~#Cfobzxa2pOYliz*s6J2M5fm{q_kNl-`n?wCazkKNrlQW47AYk=f5a%!313bks zFzqgA>e&G>r5JeM)tQR;HOP>>)6yWId@P#R+6^x_0_CpFDTP;fi)9IzG1=xCs_$ z7^lVX%#R=ynJI^3T$fW<2O+0>g=9_4_lQjR-Vgt4+UW%sgxMv>v)Lws$q){Kjj^bh z2r$eW&%_lZSIjL#SUucI!7wsi?e2D4Go%D|RNUw!nt&-d_lEvO?qG%h10{M_@#SN z_!jj=*Fd#>z*fui5Nx~D^(ZZ$(cYsFM z$%00~wi!=hhyyO}0o#nS@{q6wp34ZnB{}{H5y=EurjrS?R$ri{X0p8;BE0J$UBYDY z3REB#6k?8xQwvxANz_a*2> zgJn=a@^@}xhKMubaxkQ)p=n58|&XD3FdGGUo?{Vd@wJG|~> zF+-9+yQ(*8BKwm{T6x3Z3CUbYJE?+<=@4F$#uUB*tw!&j)~E1eRLJA5=(TiyWo3rn zi2JeX7(#^04c5JO<5ikv6I|Yfhv`KzGxq017ly1@d^snPgW1R49X)a^*LregA+n@PCx0c7~;dgSWIIQ=S~C}L|od(XeflMKYzw=ICq9$po+t`sMwZEm(AL4Eb(tRRUBn&&^U1< zf%lVfMvhz8JL`C^jWqn7@L=wK2I5gqTu<>tLJcbqh!9up>ZMhYq`d{V-)@ero%~cU z+NosWXyR{JzedlrE|D{JZ<5Z_csSqkUU9&l`U2iySJW-hddgIkM}N6 zE9FQM-zaOr<|_HrwYI2x7&__i3|~3+`SE!F)hE_1v7A?vq{RTJ=&r3)+^}BmRJ%#llFeL5?RtDuZ1LnNgp2t)FZjl9 z(~j=^0RAWIOX-npcpdOr4=}p%-90Ca1FV98^buAjAKd9vUxAEXXAv8RV+h_8Qd;ex zd1$*URV{r{zQ??9D#Fg`vOPfSnG6iG=lJrwN>nLSx$fT=@q25B=0t^rj0B^DbSSWP(Thw{B6YXKQpYZ}2ow0C4!qU^Dn0u7xV){>$!wh&82QpuT0&`|_v zU&&UF!trraq<=$>&qmf35@W{uo4T-;3zgAeuIY#i;TO>bQe$mF;}pH;BIb5^`hLba z&PbSm$`KD_EFaIz1;$f}uJx7G*7PV7GA3c`G-YR$J{QU%Cd+SCc~U_V5e9(NVNAY& zjVLF*E&NH(=zljQ>H?|{VjH_=9-zov^Sen!?NADAcXjno=yoNuqb3H`%D|>$9mI(^ z^if)`EcKPh&FI$*)6ihS6B)SI7kaK|5TW_)9kmMzy0>fNstUWp0G=@?K9};xU#V2V z87JcgRxFa66fiR&Y>g2noet6~Fm04)kD83|4Wef&Acqa0U;WEJ%e8}64-%vx^x|m+ z!+}kML0wzn^0yO-z2&Hmab)#M?kvC%Ue|DQf%vs%rdPr@MTe^1jw}Ya9=-%iM~;L6 zanEK7=l%=iU5%ZzYdM*j)`pA7h389N;-_P8JrVw*Nal9Y$u$bO*B)rxwXUp%yq`hgchzOM? zs7~|vP#NTmwLV>3wVz61+S;#mmoO;;1S{k8c(X^<#u=U!=0QdM2l$mjDlg2UjB6%+ zXIrPL^u8J#oyu#Xtw(e1nLGFF6K+vs+KBn5yu2r%E759v)6ZZQh(@UW6cz+sENa!A%y8Xi6iyQJS&B(63U9fD-uL8M+ zY`4UAk9`vg9gf4QCdNL9<;)Fqc-p zNvtJ^ly*P&T(XkMv)ygKrA&UUS-Q25j;heEwTRIpg#WZU8g@z?nS& z0Q|pC1rCmGmPY?v|2ngz95z^yf^RgMzWs_8uKVJ8vI>XO>@y9o)>#iQ*)kXf`O$`d z<$;#1X6y6-h>FE#ms0N8M?sG&uQ+os@cFqQ7cl2VX3m04{#`h4G#xQM z6vLbnTpDgqgLV}Dyc+Uc>exI>ab#rX%$~wbYm%>O02d8NhF+#zl&)kmIn6|EPloJW zd-FAZ1ZL|Gj04nbHlAY}*#c`|N$3?lYMZ&hEMkcFyP6&^ce30vIv=O{&B@Y0ZRof% z^Ib67VsQ-XC3Ay&eBou~C1~D~0(Pu48)FX%y!ku*v*o*u=Wl|BwTs?kpDTgF*>7$G z3ALo>g6^fMk>iB-n+S?>1~<={am7%M1>S}v%~V)zEtDdRG#ggRiU@hS?}?cyhWF3S z>Q$_?nzU_e)$PqTlxQuM<11Trs1Js=U&3~} zALeu(x+ZL#=N2u`JqI7R5BtHQGq$R}U)c5Pz7%Vo@<$>)qEdc4iPP`guc;()-&)G2 z(N2rJJ1ZFPy3wmtb2w3qGrWH!-Umq$A8+`t!F?J77ixKsvtYaIeQWilds{~3I2bpW+211VrN{8& ztcT8TY&aj^4|R7m$zrp+SHa@;EC)+#TL_fYH03p{tj}(&tj7*~@cbbTpCq@s2sTmOioD+*;#^{)z1$v^^k{Po5n7lz*_d9dNr# zkZ9V4oM0Fr0x{R7cFGmeA8tHmtagjDANP|2Ps-mFtD7tVF>vU+9#icc4ehWIA{K+X z0Gvu*+DsQjfH}`BQiruk*EjsTS3wr?k`zRYpCWHhxcn!b;8=CQ0yqRy8;f=FcDz?F z7#%FzSW## z7@N^yt+c6W05Ck8Oec~F8pUf}#u0A%GZZZbpI*b(Ck5l#2^`@D>*<2bH7){&^OsFz z$pajY5yD2*%rT?d7I<-e%bj~@9rO!^9DE)5WhSH(W=rPkBIicykO>p+{2ZHBl~~;U zEMTvMj$+0E&QyI6U&bX3%F^MJEoMiz!B(mRR!=}$5NN@3ZULSLqU_0rAZ0{r+ThIkdLU1nS z5pWF6#8{VKm~kbX-wMZ7=i&W#(d04yyaJ1 z>e?-ver7^=Xfk$#*#|kF?p(1n$-SNz{zhsIRLCVl4f%V6Ia>S>-&1^ba_R3)}MIVPPrZx0T)>PUH#CCD~WHp)@a@6Hf>8PDvYRr1>QzVKK04r#BR8Z0Aon;&O8_t`V2oCticb7_YpazDwU%Xa~S zB62s%*JY(32_o-uP{5eu5DP*)wFHfUXte}Auv>!~9x!4Vb66FG!%TPv>}wx|(Hp>uk)oO$*R7Qnk5%iPfVwHQHf54z)a zGso>#Vqb{(;#@YF=RZa1E;z5pyS<57Veni?v`!|Lq{xqLLHs-BBhft(Aa2H&wOKFs zt8uPC`|+;FC$)cF?pAwVf@Tx5u=PZ8pRLK1T)ayF=2@`12R6{+D4NJkw&o2rtWi8vwgP~+5)-4JKsaynxALWzmTtq;nW)>V0gZ=HI zT1Ei)uiikiGC)#o^U&~Qto;2#FeL_cbJ1RLSje9d|Ct|6*_K)&b(tKL$6l*gDtai# zFAu-g!%I+MMG0+3!=^(-!U~eoC2LxMVoXmkAvHnj_nS!}y z6H4+wdw$5)|HTHL^A|Y%-T!5w`ZH#c^gmeq|MLGg7ry`J6^;h{Abpg%q-+aH{4d?D zl*-eTEFVXKJJ3@SBtG|4d0R_0rCm5Y)}J3qMjboLj29}!Gnd%2T_Z{LZ?LtnvsJEE zqLZKgNmhdMALc3#14`9ZQ%UMCFZo|=^&)X)BJZ!w%J!)9FmpT$Oa5i$$5O~ztF3E< zmImy9q9ij?w1d`L;ju7XbE+(cjWes4t=+vBs-E06vea8xX2-|h@+*SC{j4i-QO#F6 zNQExVQ_Y4Im$z)bT4@-7T`j#OE3I{(2h9`ze#J|;4V*VE5q6dzHk5xo>+W>T?hd^y zylr{*xn9M)BG7GHOMcdQ&@I|r*j&>!(e&COG7#ot8wRXGobQS%M$g#L`-V9kGNjNEw9%XZ z%`>llTWeR^A2r|$mC!gD`Tp>d$umtw`sK95LQ324VAX(=DWm{}xDq|0EGYa9_uRQ9 ziu9&B((5BusgnKPKnoNqiGn@Ar)9qwtxgzSH9?uAva?d=6;s&Ye7I7-&%&W0x-;-dTHmr@Egl1BI%1J*j^fi3NttN!>CA5u z2QXR0i1HK$?(GUo10}_z{BzAfZ!sz9&FvkK-S;hW!AxUo0bFk)m8;^iz>g<=Y{#nS6l1~94v zEcIDFF|{FU(3i$B3oEB}eoW@-)R*?ZdOb%@Ts*lam!6~-`-05|k|t%D`pI@N#Zw7*7|%X^9E4O{Rm#q%1Kby-L8j-8uN$KU2P;b=Fv`OwAW$Wu z4fa>i2=G0|I63eonT8%wYCCkm8$=>6>OHcdD4}H5a|o^Yi(NbjOqu_pFr(N`&2Huj zX;xylY0RI*I8|GumO-F_Pc^j%LdrBZQq&Wfm24r5@qdJPk1N#ySkUu*1&Nhy#vT^s z5Qaz_!O4a{AO?qI=`8I}k2lc3u@TltxK5|iDz{dWc%JlQqga1w6{+L;0JdgCik5Rc0Un985WEILLk%^J;W|amCB8E<_ z)>N78t2S>mmgwrAKt+mbmH@Z(ilrxp!dc$T+<19^U79wI$(z86KWGk)-nfkd@;M9- zaSFdI)Nu$#vk20~9|P$(f<_6Corwt=i8_F`P^9F-fM2PS4^Db^75ojAl1g?3AsV2BDt|AZA=fAPC*mpHLTvQ zQ0pk(n6~PYWv836F-`8%apddIOzR`GuOgTs>=AJ><;%95UdvK{#`#!NU1E?3qHTNp z=63;K{N;8ED=_0hk#aGK57O`n^sUl)O2Gou#Itpi_VF|G|8)txd&bK2_)*%)AEib3 z&q}LjYx|D{@PBpoXWD*Bru@W@&LVUY-NDOUFN)>K&Mrfs62Ng%Fk8(eH;7T;Y}88$ zeP_ew5rks1T}``>Fd`3JiBu$Tz2#P_75*ibKxUdx9$$=bRN%~zyLoVphqZ$R%KqO^iVJfS%5h`3>nN&`SceOe4h#;*uOV(oe z2sIU_n%U${eUAL|{;D%SKQ67aiUuy?i34Ssg@*W7qNU6a7663>N~;vjP5O4WS9}rU z6-QO4clwRt_G3Riw>#K~s53Th{@`J42xb++m*b={o>0E_Lru&kpi2M#t%&6e!Z#`g zfKB!P+v1wF z(ds;cn-(e^+PO z{ch=u>sKP=&i|1uQOx^&{N(4;o^JQUv)p^;@UL&H2PR2Kf@NgV1-6f{AN2%@9t4Ty z;HLm@R0B{Cra@>0HUxkLJJK;V=o-;a>_BMU3~WJQoZo@29d)S>LNf!yPBo}@91DNY zO+sJ(fiUa629Cub=tiK=mLZH_Hh>y|Ja>k!9et=7p`FzfrX4=;jIJ5I-HXt?)d8v* ztrd)J0(#30VS=d>)C81v9J+qgx*DOIfuY%jfdQlDM%Rv7Y9ed5a7WS(EkgsmS%Jv| RbO;hR!$Dx8e(4F~0RZ=}T8{t# literal 0 HcmV?d00001 From c0f2be0a0ccc7aa070143ad658c4f15a361eb476 Mon Sep 17 00:00:00 2001 From: pkagifq93 <2740594397@qq.com> Date: Mon, 16 Dec 2024 23:18:36 +0800 Subject: [PATCH 05/13] ADD file via upload --- .../notesprovider.docx | Bin 0 -> 15207 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src%2FNotes-master%2Fsrc%2Fnet%2Fmicode%2Fnotes%2Fdata/notesprovider.docx diff --git a/src%2FNotes-master%2Fsrc%2Fnet%2Fmicode%2Fnotes%2Fdata/notesprovider.docx b/src%2FNotes-master%2Fsrc%2Fnet%2Fmicode%2Fnotes%2Fdata/notesprovider.docx new file mode 100644 index 0000000000000000000000000000000000000000..646ab6e10a483a213b474d9803d71de3a081dd2d GIT binary patch literal 15207 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 Date: Sat, 28 Dec 2024 10:27:23 +0800 Subject: [PATCH 06/13] =?UTF-8?q?=E5=88=A0=E9=99=A4=20'src%2FNotes-master%?= =?UTF-8?q?2Fsrc%2Fnet%2Fmicode%2Fnotes%2Fdata/notesprovider.docx'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../notesprovider.docx | Bin 15207 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 src%2FNotes-master%2Fsrc%2Fnet%2Fmicode%2Fnotes%2Fdata/notesprovider.docx diff --git a/src%2FNotes-master%2Fsrc%2Fnet%2Fmicode%2Fnotes%2Fdata/notesprovider.docx b/src%2FNotes-master%2Fsrc%2Fnet%2Fmicode%2Fnotes%2Fdata/notesprovider.docx deleted file mode 100644 index 646ab6e10a483a213b474d9803d71de3a081dd2d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15207 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 Date: Sat, 28 Dec 2024 10:27:33 +0800 Subject: [PATCH 07/13] =?UTF-8?q?=E5=88=A0=E9=99=A4=20'src%2FNotes-master%?= =?UTF-8?q?2Fsrc%2Fnet%2Fmicode%2Fnotes/zhushi1.txt'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../zhushi1.txt | 467 ------------------ 1 file changed, 467 deletions(-) delete mode 100644 src%2FNotes-master%2Fsrc%2Fnet%2Fmicode%2Fnotes/zhushi1.txt diff --git a/src%2FNotes-master%2Fsrc%2Fnet%2Fmicode%2Fnotes/zhushi1.txt b/src%2FNotes-master%2Fsrc%2Fnet%2Fmicode%2Fnotes/zhushi1.txt deleted file mode 100644 index c0c0575..0000000 --- a/src%2FNotes-master%2Fsrc%2Fnet%2Fmicode%2Fnotes/zhushi1.txt +++ /dev/null @@ -1,467 +0,0 @@ -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.util.Log; - -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 { -// 数据库帮助类,用于管理名为 note.db 的 SQLite 数据库。 -// 它继承自 SQLiteOpenHelper 类,这是 Android提供的一个方便的工具类,用于管理数据库的创建和版本更新. - // 数据库的基本信息;数据库名称和版本信息(在创建实例对象时会用到) - 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语句,辅助我们来对数据库进行操作 */ - //创建note表的语句,这里的NoteColumns就是我们刚刚在Notes中定义的一个接口,里面定义了一系列静态的数据库表中的列名 - 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" + - ")"; - - //同上,创建data表的语句,这里的DataColumns就是我们刚刚在Notes中定义的一个接口,里面定义了一系列静态的数据库表中的列名 - 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 ''" + - ")"; - - // 功能简介: - // 创建一个以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 + ");"; - - /* 以下是一些对便签增删改定义的触发器 */ - /* 总结 - * 这些触发器都是用来维护NOTE表和与之相关联的DATA表之间数据一致性的。 - * 当在NOTE表中发生删除或更新操作时,这些触发器会自动执行相应的数据清理或更新操作,确保数据库中的数据保持正确和一致。 - * 特别是在处理文件夹和回收站等逻辑时,这些触发器起到了非常重要的作用,可以自动管理数据的移动和删除。*/ - /** - * 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 + - " BEGIN " + - " UPDATE " + TABLE.NOTE + - " SET " + NoteColumns.NOTES_COUNT + "=" + NoteColumns.NOTES_COUNT + " + 1" + - " WHERE " + NoteColumns.ID + "=new." + NoteColumns.PARENT_ID + ";" + - " END"; - - /** - * 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"; - - /** - * 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"; - - /** - * 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"; - - /** - * 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 + - " 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"; - - /** - * 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 + - " 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"; - - /** - * 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 + - " WHEN old." + DataColumns.MIME_TYPE + "='" + DataConstants.NOTE + "'" + - " BEGIN" + - " UPDATE " + TABLE.NOTE + - " SET " + NoteColumns.SNIPPET + "=''" + - " WHERE " + NoteColumns.ID + "=old." + DataColumns.NOTE_ID + ";" + - " END"; - - /** - * 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 + - " BEGIN" + - " DELETE FROM " + TABLE.DATA + - " WHERE " + DataColumns.NOTE_ID + "=old." + NoteColumns.ID + ";" + - " END"; - - /** - * 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 + - " 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 - */ - // 功能简介: - // 添加触发器:当某个文件夹被移动到回收站时,移动该文件夹下的所有笔记到回收站 - // 解读: - // 在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 + - " 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); - } - - // 创建note(标签)表 - public void createNoteTable(SQLiteDatabase db) { - db.execSQL(CREATE_NOTE_TABLE_SQL); - reCreateNoteTableTriggers(db); - 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"); - 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); - } - - /* 以下部分是操作SQLite数据库部分 */ - // 功能简介: - // 创建通话记录文件夹、默认文件夹、临时文件夹和回收站,并插入相关数据 - // 具体解读: - // 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(); - - /** - * 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); - } - - //功能简介: - //创建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); - db.execSQL(CREATE_DATA_NOTE_ID_INDEX_SQL); - 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"); - 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); - } - - //解读: - //synchronized关键字确保在多线程环境下,只有一个线程能够进入这个方法,防止了同时创建多个实例的情况 - //getInstance(Context context)方法使用了单例模式来确保整个应用程序中只有一个NotesDatabaseHelper实例。 - //它首先检查mInstance(类的静态成员变量,没有在代码片段中显示)是否为null。 - //如果是null,则创建一个新的NotesDatabaseHelper实例,并将其赋值给mInstance。最后返回mInstance。 - static synchronized NotesDatabaseHelper getInstance(Context context) { - if (mInstance == null) { - mInstance = new NotesDatabaseHelper(context); - } - return mInstance; - } - - //功能简介: - //当数据库首次创建时,onCreate方法会被调用。 - //这里重写onCreate方法,它调用了上述createNoteTable(db)和createDataTable(db)两个方法 - //这样首次创建数据库时就多出了两张表。 - @Override - public void onCreate(SQLiteDatabase db) { - createNoteTable(db); - createDataTable(db); - } - - //功能简介: - //当数据库需要升级时(即数据库的版本号改变),onUpgrade方法会被调用。 - //该方法会根据当前的oldVersion和新的newVersion来执行相应的升级操作 - @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"); - } - } - - //功能简介: - // 将数据库从版本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); - createNoteTable(db); - 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"); - 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); - } - - //功能简介: - // 这个方法负责将数据库从版本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"); - } -} \ No newline at end of file From ea601fc986800b4c4679b3e1c9e8c463a265cfc8 Mon Sep 17 00:00:00 2001 From: pkagifq93 <2740594397@qq.com> Date: Sat, 28 Dec 2024 10:28:40 +0800 Subject: [PATCH 08/13] =?UTF-8?q?=E5=88=A0=E9=99=A4=20'src%2FNotes-master/?= =?UTF-8?q?zhushi2.txt'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src%2FNotes-master/zhushi2.txt | 302 --------------------------------- 1 file changed, 302 deletions(-) delete mode 100644 src%2FNotes-master/zhushi2.txt diff --git a/src%2FNotes-master/zhushi2.txt b/src%2FNotes-master/zhushi2.txt deleted file mode 100644 index e6b5b4a..0000000 --- a/src%2FNotes-master/zhushi2.txt +++ /dev/null @@ -1,302 +0,0 @@ -package net.micode.notes.data; - -import android.net.Uri; -public class Notes { -// 用于表示笔记应用中的各种类型、标识符以及Intent的额外数据 - 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 - */ - //以下id是系统文件夹的标识符(即系统文件夹的分类) - //ID_ROOT_FOLDER:默认文件夹 - //ID_TEMPARAY_FOLDER:不属于文件夹的笔记 - //ID_CALL_RECORD_FOLDER:用于存储通话记录,以便返回 - //ID_TRASH_FOLER:垃圾回收站 - 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; - - - // 额外的数据键,个人理解为就是定义一些布局的ID - // 这部分就是用于设置UI界面的一些布局或小组件的id,给它定义成常量了。 - // (这样的封装性可能比较好?因为如果有部分要修改,则直接来这边修改即可,不用在activity部分一个一个修改。) - 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 - //GPT:Android开发中常见的用于定义内容提供者(Content Provider)URI - //内容提供者是一种Android组件,它允许应用程序共享和存储数据。这里定义了一个URI来查询数据 - /** - * Uri to query all notes and folders - */ - public static final Uri CONTENT_NOTE_URI = Uri.parse("content://" + AUTHORITY + "/note"); - - /** - * Uri to query data - */ - public static final Uri CONTENT_DATA_URI = Uri.parse("content://" + AUTHORITY + "/data"); - - public interface NoteColumns { - // 雨:这个接口定义了一系列静态的、最终的字符串常量,这些常量代表数据库表中的列名。 - // 作用:用于后面创建数据库的表头 - // 总的属性有:ID、父级ID、创建日期、修改日期、提醒日期、文件(标签)名(摘要?)、小部件ID、小部件类型、背景颜色ID、附件、文件中的标签数量、 - // 文件(标签)类型、最后一个同步ID、本地修改标签、移动前的ID、谷歌任务ID、代码版本信息。 - // GPT提示:在Android开发中,当使用SQLite数据库时,通常会为表中的每一列定义一个常量,以便在代码中引用。 - // 这样做的好处是,如果以后需要更改列名,只需要在一个地方修改,而不需要在整个代码中搜索和替换。 - - /** - * 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"; - - /** - * 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)

- */ - //雨:在数据同步过程中,这个ID可能用来跟踪和识别每次同步操作的唯一性,确保数据的一致性。 - 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"; - } - - public interface DataColumns { - // 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

- */ - //MIME类型是一种标准,用于标识文档、文件或字节流的性质和格式。在数据库中,这个字段可以用来识别不同类型的数据,例如文本、图片、音频或视频等。 - public static final String MIME_TYPE = "mime_type"; - - /** - * 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"; - - - // 以下5个是通用数据列,它们的具体意义取决于MIME类型(由MIME_TYPE字段指定)。 - // 不同的MIME类型可能需要存储不同类型的数据,这五个字段提供了灵活性,允许根据MIME类型来存储相应的数据。 - // 读后面的代码感觉这部分是在表示内容的不同状态? - /** - * 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; //模式?这个被存在DATA1列中 - - public static final int MODE_CHECK_LIST = 1; //所处检查列表模式? - - 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";// 定义了MIME类型,用于标识文本标签的单个项 - - public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/text_note");//文本标签内容提供者(Content Provider)的URI,用于访问文本标签数据 - } - - // 通话记录的定义? - 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; //意味着在数据库表中,这个电话号码信息将被存储在DATA3列中 - - 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";// 同样定义了MIME类型,是用于标识通话记录的单个项。 - - public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/call_note");//定义了通话记录内容提供者的URI,用于访问通话记录数据。 - } -} \ No newline at end of file From 145b23a112a3061bb21aa5afc0e160f4cf9e5476 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E9=B9=8F=E5=B1=95?= <2740594397@qq.com> Date: Sat, 28 Dec 2024 10:55:07 +0800 Subject: [PATCH 09/13] =?UTF-8?q?=E5=BC=A0=E9=B9=8F=E5=B1=95=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gtask/exception/ActionFailureException.java | 12 ++++++++++++ .../gtask/exception/NetworkFailureException.java | 11 ++++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/Notes-master/src/net/micode/notes/gtask/exception/ActionFailureException.java b/src/Notes-master/src/net/micode/notes/gtask/exception/ActionFailureException.java index 15504be..fb79578 100644 --- a/src/Notes-master/src/net/micode/notes/gtask/exception/ActionFailureException.java +++ b/src/Notes-master/src/net/micode/notes/gtask/exception/ActionFailureException.java @@ -1,33 +1,45 @@ /* * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * // 版权声明,指定代码的版权所有者和代码编写的时间范围 * * Licensed under the Apache License, Version 2.0 (the "License"); + * // 声明该代码是根据Apache License 2.0版本授权的 * 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 + * // 许可证的URL链接 * * 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.gtask.exception; +// 指定该Java文件的包路径 public class ActionFailureException extends RuntimeException { + // 声明一个名为ActionFailureException的公共类,该类继承自RuntimeException private static final long serialVersionUID = 4425249765923293627L; + // 声明一个常量serialVersionUID,用于序列化时保持版本的兼容性 public ActionFailureException() { super(); + // 默认构造函数,调用父类RuntimeException的无参构造函数 } public ActionFailureException(String paramString) { super(paramString); + // 带有一个字符串参数的构造函数,调用父类RuntimeException的带字符串参数的构造函数 } public ActionFailureException(String paramString, Throwable paramThrowable) { super(paramString, paramThrowable); + // 带有一个字符串和一个Throwable参数的构造函数,调用父类RuntimeException的相应构造函数 } } diff --git a/src/Notes-master/src/net/micode/notes/gtask/exception/NetworkFailureException.java b/src/Notes-master/src/net/micode/notes/gtask/exception/NetworkFailureException.java index b08cfb1..6d438dd 100644 --- a/src/Notes-master/src/net/micode/notes/gtask/exception/NetworkFailureException.java +++ b/src/Notes-master/src/net/micode/notes/gtask/exception/NetworkFailureException.java @@ -14,20 +14,29 @@ * limitations under the License. */ +// 该类所属的包名,表明这个类是位于net.micode.notes.gtask.exception包下,用于存放相关的异常类 package net.micode.notes.gtask.exception; +// NetworkFailureException类继承自Exception,用于表示网络相关的操作出现故障时抛出的异常情况 public class NetworkFailureException extends Exception { + // 序列化版本号,用于在对象序列化和反序列化过程中确保版本的兼容性,这里是一个固定的长整型数值 private static final long serialVersionUID = 2107610287180234136L; + // 无参构造函数,调用父类(Exception)的无参构造函数,用于创建一个默认的NetworkFailureException实例,不附带任何详细信息 public NetworkFailureException() { super(); } + // 带有一个字符串参数的构造函数,该字符串参数通常用于传递异常相关的详细描述信息, + // 调用父类(Exception)的对应构造函数,将传入的字符串作为异常的详细消息 public NetworkFailureException(String paramString) { super(paramString); } + // 带有一个字符串参数和一个Throwable参数的构造函数,字符串参数用于传递异常相关的详细描述信息, + // Throwable参数通常用于关联引起当前异常的其他异常(例如底层网络库抛出的原始异常等), + // 调用父类(Exception)的对应构造函数进行初始化,将两个参数传递给父类构造函数 public NetworkFailureException(String paramString, Throwable paramThrowable) { super(paramString, paramThrowable); } -} +} \ No newline at end of file From fa4463b772fbbf1c905b65e8156bd6ec5a0009cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E9=B9=8F=E5=B1=95?= <2740594397@qq.com> Date: Sat, 28 Dec 2024 10:56:53 +0800 Subject: [PATCH 10/13] =?UTF-8?q?=E5=BC=A0=E9=B9=8F=E5=B1=95=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../notes/gtask/remote/GTaskASyncTask.java | 44 ++-- .../notes/gtask/remote/GTaskClient.java | 169 +++++++----- .../notes/gtask/remote/GTaskManager.java | 241 +++++++++++++----- .../notes/gtask/remote/GTaskSyncService.java | 42 ++- 4 files changed, 355 insertions(+), 141 deletions(-) diff --git a/src/Notes-master/src/net/micode/notes/gtask/remote/GTaskASyncTask.java b/src/Notes-master/src/net/micode/notes/gtask/remote/GTaskASyncTask.java index b3b61e7..7669523 100644 --- a/src/Notes-master/src/net/micode/notes/gtask/remote/GTaskASyncTask.java +++ b/src/Notes-master/src/net/micode/notes/gtask/remote/GTaskASyncTask.java @@ -1,18 +1,15 @@ - /* * 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 + * 根据Apache License, Version 2.0(以下简称“许可证”)授权; + * 除非遵守许可证,否则不得使用此文件。 + * 你可以在以下网址获得许可证的副本: * * 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.gtask.remote; @@ -28,23 +25,27 @@ import net.micode.notes.R; import net.micode.notes.ui.NotesListActivity; import net.micode.notes.ui.NotesPreferenceActivity; - +// 异步任务类,用于执行GTask同步操作 public class GTaskASyncTask extends AsyncTask { + // 定义GTASK同步通知的ID private static int GTASK_SYNC_NOTIFICATION_ID = 5234235; + // 定义完成监听接口 public interface OnCompleteListener { void onComplete(); } + // 上下文对象 private Context mContext; - + // 通知管理器 private NotificationManager mNotifiManager; - + // 任务管理器 private GTaskManager mTaskManager; - + // 完成监听器 private OnCompleteListener mOnCompleteListener; + // 构造函数,初始化上下文、通知管理器、任务管理器和完成监听器 public GTaskASyncTask(Context context, OnCompleteListener listener) { mContext = context; mOnCompleteListener = listener; @@ -53,35 +54,42 @@ public class GTaskASyncTask extends AsyncTask { mTaskManager = GTaskManager.getInstance(); } + // 取消同步的方法 public void cancelSync() { mTaskManager.cancelSync(); } + // 发布进度消息的方法 public void publishProgess(String message) { publishProgress(new String[] { - message + message }); } + // 显示通知的方法 private void showNotification(int tickerId, String content) { + // 创建通知对象 Notification notification = new Notification(R.drawable.notification, mContext .getString(tickerId), System.currentTimeMillis()); notification.defaults = Notification.DEFAULT_LIGHTS; notification.flags = Notification.FLAG_AUTO_CANCEL; + // 根据tickerId创建不同的PendingIntent PendingIntent pendingIntent; if (tickerId != R.string.ticker_success) { pendingIntent = PendingIntent.getActivity(mContext, 0, new Intent(mContext, NotesPreferenceActivity.class), 0); - } else { pendingIntent = PendingIntent.getActivity(mContext, 0, new Intent(mContext, NotesListActivity.class), 0); } + // 设置通知的最新事件信息 notification.setLatestEventInfo(mContext, mContext.getString(R.string.app_name), content, pendingIntent); + // 发送通知 mNotifiManager.notify(GTASK_SYNC_NOTIFICATION_ID, notification); } + // 后台执行同步操作的方法 @Override protected Integer doInBackground(Void... unused) { publishProgess(mContext.getString(R.string.sync_progress_login, NotesPreferenceActivity @@ -89,6 +97,7 @@ public class GTaskASyncTask extends AsyncTask { return mTaskManager.sync(mContext, this); } + // 更新进度的方法 @Override protected void onProgressUpdate(String... progress) { showNotification(R.string.ticker_syncing, progress[0]); @@ -97,8 +106,10 @@ public class GTaskASyncTask extends AsyncTask { } } + // 执行完毕后的方法 @Override protected void onPostExecute(Integer result) { + // 根据结果展示不同的通知 if (result == GTaskManager.STATE_SUCCESS) { showNotification(R.string.ticker_success, mContext.getString( R.string.success_sync_account, mTaskManager.getSyncAccount())); @@ -111,6 +122,7 @@ public class GTaskASyncTask extends AsyncTask { showNotification(R.string.ticker_cancel, mContext .getString(R.string.error_sync_cancelled)); } + // 如果存在完成监听器,则通知监听器任务完成 if (mOnCompleteListener != null) { new Thread(new Runnable() { @@ -120,4 +132,4 @@ public class GTaskASyncTask extends AsyncTask { }).start(); } } -} +} \ No newline at end of file diff --git a/src/Notes-master/src/net/micode/notes/gtask/remote/GTaskClient.java b/src/Notes-master/src/net/micode/notes/gtask/remote/GTaskClient.java index c67dfdf..db1a192 100644 --- a/src/Notes-master/src/net/micode/notes/gtask/remote/GTaskClient.java +++ b/src/Notes-master/src/net/micode/notes/gtask/remote/GTaskClient.java @@ -1,19 +1,3 @@ -/* - * 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.gtask.remote; import android.accounts.Account; @@ -60,36 +44,39 @@ import java.util.zip.GZIPInputStream; import java.util.zip.Inflater; import java.util.zip.InflaterInputStream; - +// GTaskClient类用于与Google Tasks进行交互,实现诸如登录、任务和任务列表的创建、更新、移动、删除以及获取相关数据等功能 public class GTaskClient { private static final String TAG = GTaskClient.class.getSimpleName(); + // Google Tasks的基础URL private static final String GTASK_URL = "https://mail.google.com/tasks/"; - + // 用于获取Google Tasks数据的URL private static final String GTASK_GET_URL = "https://mail.google.com/tasks/ig"; - + // 用于向Google Tasks发送POST请求的URL private static final String GTASK_POST_URL = "https://mail.google.com/tasks/r/ig"; private static GTaskClient mInstance = null; + // 用于发送HTTP请求的HttpClient对象 private DefaultHttpClient mHttpClient; - + // 获取数据的具体URL private String mGetUrl; - + // 发送POST请求的具体URL private String mPostUrl; - + // 客户端版本号 private long mClientVersion; - + // 标记是否已登录 private boolean mLoggedin; - + // 上次登录的时间戳 private long mLastLoginTime; - + // 用于标识操作的ID,每次操作自增 private int mActionId; - + // 当前使用的账户 private Account mAccount; - + // 用于暂存更新操作相关数据的JSON数组 private JSONArray mUpdateArray; + // 私有构造函数,初始化相关成员变量 private GTaskClient() { mHttpClient = null; mGetUrl = GTASK_GET_URL; @@ -102,6 +89,7 @@ public class GTaskClient { mUpdateArray = null; } + // 获取GTaskClient的单例实例 public static synchronized GTaskClient getInstance() { if (mInstance == null) { mInstance = new GTaskClient(); @@ -109,15 +97,15 @@ public class GTaskClient { return mInstance; } + // 执行登录操作 public boolean login(Activity activity) { - // we suppose that the cookie would expire after 5 minutes - // then we need to re-login + // 假设Cookie在5分钟后过期,若距离上次登录时间超过5分钟,则需要重新登录 final long interval = 1000 * 60 * 5; if (mLastLoginTime + interval < System.currentTimeMillis()) { mLoggedin = false; } - // need to re-login after account switch + // 如果已登录,但当前账户与设置中的同步账户不一致,也需要重新登录 if (mLoggedin && !TextUtils.equals(getSyncAccount().name, NotesPreferenceActivity .getSyncAccountName(activity))) { @@ -130,13 +118,14 @@ public class GTaskClient { } mLastLoginTime = System.currentTimeMillis(); + // 登录Google账户获取授权令牌 String authToken = loginGoogleAccount(activity, false); if (authToken == null) { Log.e(TAG, "login google account failed"); return false; } - // login with custom domain if necessary + // 如果账户不是以gmail.com或googlemail.com结尾(可能是自定义域名),则使用自定义域名相关的URL进行登录 if (!(mAccount.name.toLowerCase().endsWith("gmail.com") || mAccount.name.toLowerCase() .endsWith("googlemail.com"))) { StringBuilder url = new StringBuilder(GTASK_URL).append("a/"); @@ -151,7 +140,7 @@ public class GTaskClient { } } - // try to login with google official url + // 如果使用自定义域名登录失败,则尝试使用Google官方URL登录 if (!mLoggedin) { mGetUrl = GTASK_GET_URL; mPostUrl = GTASK_POST_URL; @@ -164,9 +153,12 @@ public class GTaskClient { return true; } + // 登录Google账户获取授权令牌 private String loginGoogleAccount(Activity activity, boolean invalidateToken) { String authToken; + // 获取账户管理器 AccountManager accountManager = AccountManager.get(activity); + // 获取所有Google类型的账户 Account[] accounts = accountManager.getAccountsByType("com.google"); if (accounts.length == 0) { @@ -174,6 +166,7 @@ public class GTaskClient { return null; } + // 获取设置中的同步账户名称 String accountName = NotesPreferenceActivity.getSyncAccountName(activity); Account account = null; for (Account a : accounts) { @@ -189,13 +182,14 @@ public class GTaskClient { return null; } - // get the token now + // 获取授权令牌 AccountManagerFuture accountManagerFuture = accountManager.getAuthToken(account, "goanna_mobile", null, activity, null, null); try { Bundle authTokenBundle = accountManagerFuture.getResult(); authToken = authTokenBundle.getString(AccountManager.KEY_AUTHTOKEN); if (invalidateToken) { + // 如果需要使令牌失效,则先失效再重新获取 accountManager.invalidateAuthToken("com.google", authToken); loginGoogleAccount(activity, false); } @@ -207,10 +201,10 @@ public class GTaskClient { return authToken; } + // 尝试登录Google Tasks private boolean tryToLoginGtask(Activity activity, String authToken) { if (!loginGtask(authToken)) { - // maybe the auth token is out of date, now let's invalidate the - // token and try again + // 如果登录失败,可能是授权令牌过期,先使令牌失效再重新尝试登录Google账户获取新令牌,然后再次登录Google Tasks authToken = loginGoogleAccount(activity, true); if (authToken == null) { Log.e(TAG, "login google account failed"); @@ -225,9 +219,11 @@ public class GTaskClient { return true; } + // 实际执行登录Google Tasks的操作,获取相关信息(如客户端版本号等) private boolean loginGtask(String authToken) { int timeoutConnection = 10000; int timeoutSocket = 15000; + // 设置HTTP请求的参数,包括连接超时和读取超时时间 HttpParams httpParameters = new BasicHttpParams(); HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection); HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket); @@ -236,14 +232,14 @@ public class GTaskClient { mHttpClient.setCookieStore(localBasicCookieStore); HttpProtocolParams.setUseExpectContinue(mHttpClient.getParams(), false); - // login gtask + // 登录Google Tasks,发送带有授权令牌的GET请求 try { String loginUrl = mGetUrl + "?auth=" + authToken; HttpGet httpGet = new HttpGet(loginUrl); HttpResponse response = null; response = mHttpClient.execute(httpGet); - // get the cookie now + // 获取登录后的Cookie信息,检查是否包含认证相关的Cookie(名称包含"GTL") List cookies = mHttpClient.getCookieStore().getCookies(); boolean hasAuthCookie = false; for (Cookie cookie : cookies) { @@ -255,7 +251,7 @@ public class GTaskClient { Log.w(TAG, "it seems that there is no auth cookie"); } - // get the client version + // 从响应中获取客户端版本号等信息,通过解析返回的JavaScript代码中的相关数据 String resString = getResponseContent(response.getEntity()); String jsBegin = "_setup("; String jsEnd = ")}"; @@ -272,7 +268,7 @@ public class GTaskClient { e.printStackTrace(); return false; } catch (Exception e) { - // simply catch all exceptions + // 捕获其他所有异常,若发生异常则登录失败 Log.e(TAG, "httpget gtask_url failed"); return false; } @@ -280,10 +276,12 @@ public class GTaskClient { return true; } + // 获取下一个操作的ID private int getActionId() { return mActionId++; } + // 创建用于发送POST请求的HttpPost对象,并设置相关请求头 private HttpPost createHttpPost() { HttpPost httpPost = new HttpPost(mPostUrl); httpPost.setHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8"); @@ -291,6 +289,7 @@ public class GTaskClient { return httpPost; } + // 从HTTP实体中获取响应内容,根据内容编码(如gzip、deflate等)进行相应的解压处理 private String getResponseContent(HttpEntity entity) throws IOException { String contentEncoding = null; if (entity.getContentEncoding() != null) { @@ -323,6 +322,7 @@ public class GTaskClient { } } + // 发送POST请求,将JSON数据发送到Google Tasks服务器,并处理响应返回的JSON数据 private JSONObject postRequest(JSONObject js) throws NetworkFailureException { if (!mLoggedin) { Log.e(TAG, "please login first"); @@ -336,7 +336,7 @@ public class GTaskClient { UrlEncodedFormEntity entity = new UrlEncodedFormEntity(list, "UTF-8"); httpPost.setEntity(entity); - // execute the post + // 执行POST请求并获取响应,然后解析响应内容为JSONObject返回 HttpResponse response = mHttpClient.execute(httpPost); String jsString = getResponseContent(response.getEntity()); return new JSONObject(jsString); @@ -360,20 +360,21 @@ public class GTaskClient { } } + // 创建一个任务并发送到Google Tasks服务器 public void createTask(Task task) throws NetworkFailureException { commitUpdate(); try { JSONObject jsPost = new JSONObject(); JSONArray actionList = new JSONArray(); - // action_list + // 将任务的创建操作添加到操作列表中 actionList.put(task.getCreateAction(getActionId())); jsPost.put(GTaskStringUtils.GTASK_JSON_ACTION_LIST, actionList); - // client_version + // 设置客户端版本号 jsPost.put(GTaskStringUtils.GTASK_JSON_CLIENT_VERSION, mClientVersion); - // post + // 发送POST请求并处理响应,获取新创建任务的ID并设置到任务对象中 JSONObject jsResponse = postRequest(jsPost); JSONObject jsResult = (JSONObject) jsResponse.getJSONArray( GTaskStringUtils.GTASK_JSON_RESULTS).get(0); @@ -386,20 +387,21 @@ public class GTaskClient { } } + // 创建一个任务列表并发送到Google Tasks服务器 public void createTaskList(TaskList tasklist) throws NetworkFailureException { commitUpdate(); try { JSONObject jsPost = new JSONObject(); JSONArray actionList = new JSONArray(); - // action_list + // 将任务列表的创建操作添加到操作列表中 actionList.put(tasklist.getCreateAction(getActionId())); jsPost.put(GTaskStringUtils.GTASK_JSON_ACTION_LIST, actionList); - // client version + // 设置客户端版本号 jsPost.put(GTaskStringUtils.GTASK_JSON_CLIENT_VERSION, mClientVersion); - // post + // 发送POST请求并处理响应,获取新创建任务列表的ID并设置到任务列表对象中 JSONObject jsResponse = postRequest(jsPost); JSONObject jsResult = (JSONObject) jsResponse.getJSONArray( GTaskStringUtils.GTASK_JSON_RESULTS).get(0); @@ -412,15 +414,16 @@ public class GTaskClient { } } + // 提交更新操作,将暂存的更新操作数组发送到服务器 public void commitUpdate() throws NetworkFailureException { if (mUpdateArray != null) { try { JSONObject jsPost = new JSONObject(); - // action_list + // 设置操作列表 jsPost.put(GTaskStringUtils.GTASK_JSON_ACTION_LIST, mUpdateArray); - // client_version + // 设置客户端版本号 jsPost.put(GTaskStringUtils.GTASK_JSON_CLIENT_VERSION, mClientVersion); postRequest(jsPost); @@ -433,20 +436,24 @@ public class GTaskClient { } } + // 添加一个节点的更新操作到暂存的更新操作数组中,限制最多10个更新项 + // 将节点的更新操作添加到更新数组中,如果更新数组中的元素超过10个,则先提交更新 public void addUpdateNode(Node node) throws NetworkFailureException { if (node != null) { - // too many update items may result in an error - // set max to 10 items + // 过多的更新项可能会导致错误,所以设置最大更新项数量为10个 if (mUpdateArray != null && mUpdateArray.length() > 10) { commitUpdate(); } + // 如果更新数组为空,则创建一个新的JSONArray对象用于存放更新操作 if (mUpdateArray == null) mUpdateArray = new JSONArray(); + // 将节点的更新操作(通过节点获取,操作ID使用当前的操作ID)添加到更新数组中 mUpdateArray.put(node.getUpdateAction(getActionId())); } } + // 移动任务,将任务从一个任务列表移动到另一个任务列表(可能是同一个列表内移动位置) public void moveTask(Task task, TaskList preParent, TaskList curParent) throws NetworkFailureException { commitUpdate(); @@ -455,60 +462,77 @@ public class GTaskClient { JSONArray actionList = new JSONArray(); JSONObject action = new JSONObject(); - // action_list + // 操作列表相关设置 + // 设置操作类型为移动任务(对应预定义的移动操作类型常量) action.put(GTaskStringUtils.GTASK_JSON_ACTION_TYPE, GTaskStringUtils.GTASK_JSON_ACTION_TYPE_MOVE); + // 设置操作的唯一ID,通过获取下一个可用的操作ID来赋值 action.put(GTaskStringUtils.GTASK_JSON_ACTION_ID, getActionId()); + // 设置要移动的任务的全局唯一ID action.put(GTaskStringUtils.GTASK_JSON_ID, task.getGid()); + // 如果移动前后的父任务列表相同(即在同一个任务列表内移动),并且任务不是该列表中的第一个任务, + // 则设置其前一个兄弟任务的ID,用于确定移动后的顺序 if (preParent == curParent && task.getPriorSibling() != null) { - // put prioring_sibing_id only if moving within the tasklist and - // it is not the first one action.put(GTaskStringUtils.GTASK_JSON_PRIOR_SIBLING_ID, task.getPriorSibling()); } + // 设置任务原来所在的任务列表的全局唯一ID(源列表) action.put(GTaskStringUtils.GTASK_JSON_SOURCE_LIST, preParent.getGid()); + // 设置任务要移动到的目标任务列表的父级任务列表的全局唯一ID(目标父列表) action.put(GTaskStringUtils.GTASK_JSON_DEST_PARENT, curParent.getGid()); + // 如果移动是在不同的任务列表之间进行,则设置目标任务列表的全局唯一ID(目标列表) if (preParent != curParent) { - // put the dest_list only if moving between tasklists action.put(GTaskStringUtils.GTASK_JSON_DEST_LIST, curParent.getGid()); } + // 将这个移动操作添加到操作列表中 actionList.put(action); + // 将操作列表添加到要发送的JSON数据对象中,对应预定义的操作列表的JSON键 jsPost.put(GTaskStringUtils.GTASK_JSON_ACTION_LIST, actionList); - // client_version + // 设置客户端版本号,对应预定义的客户端版本号的JSON键 jsPost.put(GTaskStringUtils.GTASK_JSON_CLIENT_VERSION, mClientVersion); + // 发送POST请求,将包含移动任务操作信息的JSON数据发送到服务器进行处理 postRequest(jsPost); } catch (JSONException e) { Log.e(TAG, e.toString()); e.printStackTrace(); + // 如果JSON处理出现异常,抛出操作失败异常,并说明是移动任务时处理JSON对象失败 throw new ActionFailureException("move task: handing jsonobject failed"); } } + // 删除节点(比如任务、任务列表等),通过设置节点的删除标记为true,并将其更新操作发送到服务器来实现删除 public void deleteNode(Node node) throws NetworkFailureException { commitUpdate(); try { JSONObject jsPost = new JSONObject(); JSONArray actionList = new JSONArray(); - // action_list + // 操作列表相关设置 + // 将节点标记为已删除 node.setDeleted(true); + // 将节点的更新操作(此时因为已标记为删除,对应的就是删除操作)添加到操作列表中 actionList.put(node.getUpdateAction(getActionId())); + // 将操作列表添加到要发送的JSON数据对象中,对应预定义的操作列表的JSON键 jsPost.put(GTaskStringUtils.GTASK_JSON_ACTION_LIST, actionList); - // client_version + // 设置客户端版本号,对应预定义的客户端版本号的JSON键 jsPost.put(GTaskStringUtils.GTASK_JSON_CLIENT_VERSION, mClientVersion); + // 发送POST请求,将包含删除节点操作信息的JSON数据发送到服务器进行处理 postRequest(jsPost); + // 发送成功后,将更新数组置空,因为相关更新操作已提交完成 mUpdateArray = null; } catch (JSONException e) { Log.e(TAG, e.toString()); e.printStackTrace(); + // 如果JSON处理出现异常,抛出操作失败异常,并说明是删除节点时处理JSON对象失败 throw new ActionFailureException("delete node: handing jsonobject failed"); } } + // 获取所有的任务列表信息,前提是已经登录成功,否则会抛出异常提示需要先登录 public JSONArray getTaskLists() throws NetworkFailureException { if (!mLoggedin) { Log.e(TAG, "please login first"); @@ -516,11 +540,13 @@ public class GTaskClient { } try { + // 创建一个HTTP GET请求对象,用于获取任务列表数据,请求的URL是之前设置好的获取数据的URL HttpGet httpGet = new HttpGet(mGetUrl); HttpResponse response = null; + // 执行HTTP GET请求,获取服务器的响应 response = mHttpClient.execute(httpGet); - // get the task list + // 从响应的实体中获取内容,并进行处理,提取出包含任务列表信息的JSON数据部分 String resString = getResponseContent(response.getEntity()); String jsBegin = "_setup("; String jsEnd = ")}"; @@ -531,22 +557,27 @@ public class GTaskClient { jsString = resString.substring(begin + jsBegin.length(), end); } JSONObject js = new JSONObject(jsString); + // 从解析后的JSON对象中获取任务列表数组并返回,对应预定义的任务列表的JSON键 return js.getJSONObject("t").getJSONArray(GTaskStringUtils.GTASK_JSON_LISTS); } catch (ClientProtocolException e) { Log.e(TAG, e.toString()); e.printStackTrace(); + // 如果HTTP协议相关操作出现异常,抛出网络失败异常,并说明是获取任务列表时HTTP GET请求失败 throw new NetworkFailureException("gettasklists: httpget failed"); } catch (IOException e) { Log.e(TAG, e.toString()); e.printStackTrace(); + // 如果输入输出操作出现异常,抛出网络失败异常,并说明是获取任务列表时HTTP GET请求失败 throw new NetworkFailureException("gettasklists: httpget failed"); } catch (JSONException e) { Log.e(TAG, e.toString()); e.printStackTrace(); + // 如果JSON处理出现异常,抛出操作失败异常,并说明是获取任务列表时处理JSON对象失败 throw new ActionFailureException("get task lists: handing jasonobject failed"); } } + // 根据给定的任务列表全局唯一ID,获取该任务列表中的任务信息,需要先提交之前暂存的更新操作 public JSONArray getTaskList(String listGid) throws NetworkFailureException { commitUpdate(); try { @@ -554,32 +585,42 @@ public class GTaskClient { JSONArray actionList = new JSONArray(); JSONObject action = new JSONObject(); - // action_list + // 操作列表相关设置 + // 设置操作类型为获取所有任务(对应预定义的获取所有任务操作类型常量) action.put(GTaskStringUtils.GTASK_JSON_ACTION_TYPE, GTaskStringUtils.GTASK_JSON_ACTION_TYPE_GETALL); + // 设置操作的唯一ID,通过获取下一个可用的操作ID来赋值 action.put(GTaskStringUtils.GTASK_JSON_ACTION_ID, getActionId()); + // 设置要获取任务的任务列表的全局唯一ID action.put(GTaskStringUtils.GTASK_JSON_LIST_ID, listGid); + // 设置是否获取已删除的任务,这里设置为false,表示不获取已删除任务 action.put(GTaskStringUtils.GTASK_JSON_GET_DELETED, false); + // 将这个获取任务操作添加到操作列表中 actionList.put(action); + // 将操作列表添加到要发送的JSON数据对象中,对应预定义的操作列表的JSON键 jsPost.put(GTaskStringUtils.GTASK_JSON_ACTION_LIST, actionList); - // client_version + // 设置客户端版本号,对应预定义的客户端版本号的JSON键 jsPost.put(GTaskStringUtils.GTASK_JSON_CLIENT_VERSION, mClientVersion); + // 发送POST请求,将包含获取任务列表中任务操作信息的JSON数据发送到服务器进行处理 JSONObject jsResponse = postRequest(jsPost); + // 从服务器响应的JSON数据中获取任务数组并返回,对应预定义的任务的JSON键 return jsResponse.getJSONArray(GTaskStringUtils.GTASK_JSON_TASKS); } catch (JSONException e) { Log.e(TAG, e.toString()); e.printStackTrace(); + // 如果JSON处理出现异常,抛出操作失败异常,并说明是获取任务列表时处理JSON对象失败 throw new ActionFailureException("get task list: handing jsonobject failed"); } } + // 获取当前用于同步的账户信息 public Account getSyncAccount() { return mAccount; } - public void resetUpdateArray() { - mUpdateArray = null; - } -} + // 重置更新数组,即将其置为空,一般用于清除之前暂存的更新操作相关数据 +public void resetUpdateArray() { + mUpdateArray = null; +} \ No newline at end of file diff --git a/src/Notes-master/src/net/micode/notes/gtask/remote/GTaskManager.java b/src/Notes-master/src/net/micode/notes/gtask/remote/GTaskManager.java index d2b4082..0df9b30 100644 --- a/src/Notes-master/src/net/micode/notes/gtask/remote/GTaskManager.java +++ b/src/Notes-master/src/net/micode/notes/gtask/remote/GTaskManager.java @@ -47,46 +47,49 @@ import java.util.HashSet; import java.util.Iterator; import java.util.Map; - +// GTaskManager类用于管理与Google Tasks的同步操作,包括初始化任务列表、同步内容、处理各种同步类型的操作等功能 public class GTaskManager { private static final String TAG = GTaskManager.class.getSimpleName(); + // 同步成功状态码 public static final int STATE_SUCCESS = 0; - + // 网络错误状态码 public static final int STATE_NETWORK_ERROR = 1; - + // 内部错误状态码 public static final int STATE_INTERNAL_ERROR = 2; - + // 同步正在进行状态码 public static final int STATE_SYNC_IN_PROGRESS = 3; - + // 同步被取消状态码 public static final int STATE_SYNC_CANCELLED = 4; private static GTaskManager mInstance = null; + // 关联的Activity,用于获取授权令牌等操作 private Activity mActivity; - + // 应用上下文 private Context mContext; - + // 用于操作内容提供器,进行数据查询、更新等操作 private ContentResolver mContentResolver; - + // 标记是否正在同步 private boolean mSyncing; - + // 标记同步是否被取消 private boolean mCancelled; - + // 存储Google Tasks任务列表的哈希表,以任务列表的全局唯一ID(GID)为键,任务列表对象为值 private HashMap mGTaskListHashMap; - + // 存储Google Tasks节点(任务、任务列表等)的哈希表,以节点的全局唯一ID(GID)为键,节点对象为值 private HashMap mGTaskHashMap; - + // 存储元数据的哈希表,以相关的全局唯一ID为键,元数据对象为值 private HashMap mMetaHashMap; - + // 元数据对应的任务列表 private TaskList mMetaList; - + // 存储本地已删除记录的ID集合,用于后续清理本地数据 private HashSet mLocalDeleteIdMap; - + // 存储从Google Tasks的全局唯一ID(GID)到本地记录ID(NID)的映射关系 private HashMap mGidToNid; - + // 存储从本地记录ID(NID)到Google Tasks的全局唯一ID(GID)的映射关系 private HashMap mNidToGid; + // 私有构造函数,初始化相关成员变量 private GTaskManager() { mSyncing = false; mCancelled = false; @@ -99,6 +102,7 @@ public class GTaskManager { mNidToGid = new HashMap(); } + // 获取GTaskManager的单例实例 public static synchronized GTaskManager getInstance() { if (mInstance == null) { mInstance = new GTaskManager(); @@ -106,11 +110,13 @@ public class GTaskManager { return mInstance; } + // 设置关联的Activity上下文,主要用于获取授权令牌等相关操作 public synchronized void setActivityContext(Activity activity) { // used for getting authtoken mActivity = activity; } + // 执行同步操作,与Google Tasks进行数据同步 public int sync(Context context, GTaskASyncTask asyncTask) { if (mSyncing) { Log.d(TAG, "Sync is in progress"); @@ -120,6 +126,7 @@ public class GTaskManager { mContentResolver = mContext.getContentResolver(); mSyncing = true; mCancelled = false; + // 清除之前同步相关的数据缓存,如任务列表、节点、元数据等的哈希表以及ID映射关系等 mGTaskListHashMap.clear(); mGTaskHashMap.clear(); mMetaHashMap.clear(); @@ -131,18 +138,18 @@ public class GTaskManager { GTaskClient client = GTaskClient.getInstance(); client.resetUpdateArray(); - // login google task + // 登录Google Tasks,如果取消同步则不再进行登录操作,如果登录失败则抛出网络异常 if (!mCancelled) { if (!client.login(mActivity)) { throw new NetworkFailureException("login google task failed"); } } - // get the task list from google + // 发布同步进度信息,初始化任务列表阶段 asyncTask.publishProgess(mContext.getString(R.string.sync_progress_init_list)); initGTaskList(); - // do content sync work + // 发布同步进度信息,进行内容同步阶段 asyncTask.publishProgess(mContext.getString(R.string.sync_progress_syncing)); syncContent(); } catch (NetworkFailureException e) { @@ -156,6 +163,7 @@ public class GTaskManager { e.printStackTrace(); return STATE_INTERNAL_ERROR; } finally { + // 无论同步是否成功,最终都清除同步相关的数据缓存 mGTaskListHashMap.clear(); mGTaskHashMap.clear(); mMetaHashMap.clear(); @@ -168,14 +176,16 @@ public class GTaskManager { return mCancelled ? STATE_SYNC_CANCELLED : STATE_SUCCESS; } + // 初始化Google Tasks任务列表相关信息,包括获取任务列表、元数据列表以及加载任务等操作 private void initGTaskList() throws NetworkFailureException { if (mCancelled) return; GTaskClient client = GTaskClient.getInstance(); try { + // 从Google Tasks获取任务列表信息,返回JSON数组形式的数据 JSONArray jsTaskLists = client.getTaskLists(); - // init meta list first + // 先初始化元数据列表,查找名为特定前缀加上"meta"的任务列表作为元数据列表 mMetaList = null; for (int i = 0; i < jsTaskLists.length(); i++) { JSONObject object = jsTaskLists.getJSONObject(i); @@ -187,7 +197,7 @@ public class GTaskManager { mMetaList = new TaskList(); mMetaList.setContentByRemoteJSON(object); - // load meta data + // 加载元数据,获取元数据列表对应的任务列表中的具体元数据信息 JSONArray jsMetas = client.getTaskList(gid); for (int j = 0; j < jsMetas.length(); j++) { object = (JSONObject) jsMetas.getJSONObject(j); @@ -203,7 +213,7 @@ public class GTaskManager { } } - // create meta list if not existed + // 如果元数据列表不存在,则创建一个新的元数据列表,并发送到Google Tasks服务器创建对应的任务列表 if (mMetaList == null) { mMetaList = new TaskList(); mMetaList.setName(GTaskStringUtils.MIUI_FOLDER_PREFFIX @@ -211,7 +221,7 @@ public class GTaskManager { GTaskClient.getInstance().createTaskList(mMetaList); } - // init task list + // 初始化普通任务列表,遍历获取到的任务列表信息,创建任务列表对象并加载对应的任务信息 for (int i = 0; i < jsTaskLists.length(); i++) { JSONObject object = jsTaskLists.getJSONObject(i); String gid = object.getString(GTaskStringUtils.GTASK_JSON_ID); @@ -225,7 +235,7 @@ public class GTaskManager { mGTaskListHashMap.put(gid, tasklist); mGTaskHashMap.put(gid, tasklist); - // load tasks + // 加载任务,获取当前任务列表对应的任务信息 JSONArray jsTasks = client.getTaskList(gid); for (int j = 0; j < jsTasks.length(); j++) { object = (JSONObject) jsTasks.getJSONObject(j); @@ -247,6 +257,7 @@ public class GTaskManager { } } + // 进行内容同步操作,处理本地与Google Tasks之间的数据同步,包括本地删除、文件夹同步、数据库中已有记录的同步等情况 private void syncContent() throws NetworkFailureException { int syncType; Cursor c = null; @@ -259,7 +270,7 @@ public class GTaskManager { return; } - // for local deleted note + // 处理本地已删除的笔记(记录),查询本地回收站文件夹中的记录,对比Google Tasks中的对应节点进行相应的同步操作 try { c = mContentResolver.query(Notes.CONTENT_NOTE_URI, SqlNote.PROJECTION_NOTE, "(type<>? AND parent_id=?)", new String[] { @@ -286,10 +297,10 @@ public class GTaskManager { } } - // sync folder first + // 同步文件夹相关信息 syncFolder(); - // for note existing in database + // 处理数据库中已存在的笔记(记录),根据其在Google Tasks中的对应情况确定同步类型,然后进行相应的同步操作 try { c = mContentResolver.query(Notes.CONTENT_NOTE_URI, SqlNote.PROJECTION_NOTE, "(type=? AND parent_id<>?)", new String[] { @@ -306,10 +317,10 @@ public class GTaskManager { syncType = node.getSyncAction(c); } else { if (c.getString(SqlNote.GTASK_ID_COLUMN).trim().length() == 0) { - // local add + // 本地新增情况 syncType = Node.SYNC_ACTION_ADD_REMOTE; } else { - // remote delete + // 远程已删除情况 syncType = Node.SYNC_ACTION_DEL_LOCAL; } } @@ -326,7 +337,7 @@ public class GTaskManager { } } - // go through remaining items + // 处理剩余的在Google Tasks中存在但本地未处理的节点,进行相应的同步操作(一般是添加到本地) Iterator> iter = mGTaskHashMap.entrySet().iterator(); while (iter.hasNext()) { Map.Entry entry = iter.next(); @@ -334,16 +345,14 @@ public class GTaskManager { doContentSync(Node.SYNC_ACTION_ADD_LOCAL, node, null); } - // mCancelled can be set by another thread, so we neet to check one by - // one - // clear local delete table + // mCancelled可能被其他线程设置,所以需要逐个检查,清除本地已删除记录的相关数据(如果同步未取消) if (!mCancelled) { if (!DataUtils.batchDeleteNotes(mContentResolver, mLocalDeleteIdMap)) { throw new ActionFailureException("failed to batch-delete local deleted notes"); } } - // refresh local sync id + // 刷新本地同步ID(如果同步未取消),提交更新并进行相关操作来更新本地记录的同步ID if (!mCancelled) { GTaskClient.getInstance().commitUpdate(); refreshLocalSyncId(); @@ -351,6 +360,7 @@ public class GTaskManager { } + // 同步文件夹相关信息,包括根文件夹、通话记录文件夹、本地已存在的文件夹以及远程新增的文件夹等情况的处理 private void syncFolder() throws NetworkFailureException { Cursor c = null; String gid; @@ -361,7 +371,7 @@ public class GTaskManager { return; } - // for root folder + // 处理根文件夹的同步情况,根据其在Google Tasks中的对应情况进行相应的同步操作(添加、更新等) try { c = mContentResolver.query(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, Notes.ID_ROOT_FOLDER), SqlNote.PROJECTION_NOTE, null, null, null); @@ -373,7 +383,7 @@ public class GTaskManager { mGTaskHashMap.remove(gid); mGidToNid.put(gid, (long) Notes.ID_ROOT_FOLDER); mNidToGid.put((long) Notes.ID_ROOT_FOLDER, gid); - // for system folder, only update remote name if necessary + // 对于系统文件夹,仅在必要时更新远程名称 if (!node.getName().equals( GTaskStringUtils.MIUI_FOLDER_PREFFIX + GTaskStringUtils.FOLDER_DEFAULT)) doContentSync(Node.SYNC_ACTION_UPDATE_REMOTE, node, c); @@ -390,77 +400,101 @@ public class GTaskManager { } } - // for call-note folder + // for call-note文件夹相关的同步操作处理 + // 查询通话记录文件夹在本地数据库中的信息,根据其在Google Tasks中的对应情况进行相应的同步操作(添加、更新等) + // 如果查询到该文件夹信息存在(即游标c不为空且能移动到下一条记录),则进一步处理 try { + // 通过ContentResolver查询本地数据库中通话记录文件夹的记录信息,指定查询条件为_id等于通话记录文件夹的特定ID c = mContentResolver.query(Notes.CONTENT_NOTE_URI, SqlNote.PROJECTION_NOTE, "(_id=?)", new String[] { - String.valueOf(Notes.ID_CALL_RECORD_FOLDER) + String.valueOf(Notes.ID_CALL_RECORD_FOLDER) }, null); if (c != null) { if (c.moveToNext()) { + // 获取该文件夹在Google Tasks中对应的全局唯一ID(GID) gid = c.getString(SqlNote.GTASK_ID_COLUMN); + // 根据GID从存储Google Tasks节点的哈希表中获取对应的节点对象 node = mGTaskHashMap.get(gid); if (node != null) { + // 如果节点存在,从哈希表中移除该节点(表示已处理) mGTaskHashMap.remove(gid); + // 在本地ID到Google Tasks的GID映射表中记录该文件夹的映射关系,键为GID,值为通话记录文件夹的本地ID mGidToNid.put(gid, (long) Notes.ID_CALL_RECORD_FOLDER); + // 在Google Tasks的GID到本地ID映射表中记录映射关系,键为本地ID,值为GID mNidToGid.put((long) Notes.ID_CALL_RECORD_FOLDER, gid); - // for system folder, only update remote name if - // necessary + // 对于系统文件夹,仅在其名称与预期的通话记录文件夹名称不一致时(即可能有更新情况),进行远程更新操作 if (!node.getName().equals( GTaskStringUtils.MIUI_FOLDER_PREFFIX + GTaskStringUtils.FOLDER_CALL_NOTE)) doContentSync(Node.SYNC_ACTION_UPDATE_REMOTE, node, c); } else { + // 如果节点不存在,则执行添加远程节点的操作(意味着本地有该文件夹记录,但在Google Tasks中还未创建对应节点) doContentSync(Node.SYNC_ACTION_ADD_REMOTE, node, c); } } } else { + // 如果查询失败,打印警告日志 Log.w(TAG, "failed to query call note folder"); } } finally { + // 无论查询是否成功,最终都要关闭游标,释放资源,并将游标置空 if (c != null) { c.close(); c = null; } } - // for local existing folders + // 处理本地已存在的文件夹的同步情况 + // 查询本地除回收站外的文件夹记录信息,根据其在Google Tasks中的对应情况进行相应的同步操作 try { + // 通过ContentResolver查询本地数据库中符合条件的文件夹记录信息,条件为类型是文件夹且父ID不等于回收站文件夹的ID c = mContentResolver.query(Notes.CONTENT_NOTE_URI, SqlNote.PROJECTION_NOTE, "(type=? AND parent_id<>?)", new String[] { String.valueOf(Notes.TYPE_FOLDER), String.valueOf(Notes.ID_TRASH_FOLER) }, NoteColumns.TYPE + " DESC"); if (c != null) { while (c.moveToNext()) { + // 获取文件夹在Google Tasks中对应的全局唯一ID(GID) gid = c.getString(SqlNote.GTASK_ID_COLUMN); + // 根据GID从存储Google Tasks节点的哈希表中获取对应的节点对象 node = mGTaskHashMap.get(gid); if (node != null) { + // 如果节点存在,从哈希表中移除该节点(表示已处理) mGTaskHashMap.remove(gid); + // 在本地ID到Google Tasks的GID映射表中记录该文件夹的映射关系,键为GID,值为文件夹的本地ID mGidToNid.put(gid, c.getLong(SqlNote.ID_COLUMN)); + // 在Google Tasks的GID到本地ID映射表中记录映射关系,键为本地ID,值为GID mNidToGid.put(c.getLong(SqlNote.ID_COLUMN), gid); + // 获取该节点对应的同步操作类型(根据节点和游标信息判断是添加、更新、删除等哪种类型) syncType = node.getSyncAction(c); } else { + // 如果节点不存在,根据其GID是否为空字符串判断是本地新增还是远程删除情况,进而确定同步类型 if (c.getString(SqlNote.GTASK_ID_COLUMN).trim().length() == 0) { - // local add + // 本地新增情况,同步类型设置为添加远程节点 syncType = Node.SYNC_ACTION_ADD_REMOTE; } else { - // remote delete + // 远程删除情况,同步类型设置为删除本地节点 syncType = Node.SYNC_ACTION_DEL_LOCAL; } } + // 根据确定的同步类型执行相应的内容同步操作 doContentSync(syncType, node, c); } } else { + // 如果查询失败,打印警告日志 Log.w(TAG, "failed to query existing folder"); } } finally { + // 无论查询是否成功,最终都要关闭游标,释放资源,并将游标置空 if (c != null) { c.close(); c = null; } } - // for remote add folders + // 处理远程新增文件夹的同步情况 + // 遍历存储Google Tasks任务列表的哈希表,对于在Google + // Tasks中存在但本地未处理(还在mGTaskHashMap中)的文件夹,进行添加本地节点的同步操作 Iterator> iter = mGTaskListHashMap.entrySet().iterator(); while (iter.hasNext()) { Map.Entry entry = iter.next(); @@ -472,10 +506,12 @@ public class GTaskManager { } } + // 如果同步未被取消,提交Google Tasks客户端的更新操作(将之前暂存的更新操作发送到服务器执行) if (!mCancelled) GTaskClient.getInstance().commitUpdate(); } + // 根据给定的同步类型执行具体的内容同步操作 private void doContentSync(int syncType, Node node, Cursor c) throws NetworkFailureException { if (mCancelled) { return; @@ -483,12 +519,16 @@ public class GTaskManager { MetaData meta; switch (syncType) { + // 同步类型为添加本地节点,调用相应方法进行本地节点添加操作 case Node.SYNC_ACTION_ADD_LOCAL: addLocalNode(node); break; + // 同步类型为添加远程节点,调用相应方法进行远程节点添加操作,并传入节点和游标信息 case Node.SYNC_ACTION_ADD_REMOTE: addRemoteNode(node, c); break; + // 同步类型为删除本地节点,先从元数据哈希表中获取对应的元数据,若存在则调用Google Tasks客户端删除该元数据节点, + // 同时将本地记录的ID添加到本地已删除记录集合中 case Node.SYNC_ACTION_DEL_LOCAL: meta = mMetaHashMap.get(c.getString(SqlNote.GTASK_ID_COLUMN)); if (meta != null) { @@ -496,6 +536,8 @@ public class GTaskManager { } mLocalDeleteIdMap.add(c.getLong(SqlNote.ID_COLUMN)); break; + // 同步类型为删除远程节点,先从元数据哈希表中获取对应节点的元数据,若存在则调用Google Tasks客户端删除该元数据节点, + // 然后再删除该节点本身 case Node.SYNC_ACTION_DEL_REMOTE: meta = mMetaHashMap.get(node.getGid()); if (meta != null) { @@ -503,51 +545,66 @@ public class GTaskManager { } GTaskClient.getInstance().deleteNode(node); break; + // 同步类型为更新本地节点,调用相应方法进行本地节点更新操作,并传入节点和游标信息 case Node.SYNC_ACTION_UPDATE_LOCAL: updateLocalNode(node, c); break; + // 同步类型为更新远程节点,调用相应方法进行远程节点更新操作,并传入节点和游标信息 case Node.SYNC_ACTION_UPDATE_REMOTE: updateRemoteNode(node, c); break; + // 同步类型为更新冲突,目前简单采用本地更新的方式(可能后续可以考虑合并修改等更好的处理方式),调用远程节点更新方法 case Node.SYNC_ACTION_UPDATE_CONFLICT: // merging both modifications maybe a good idea // right now just use local update simply updateRemoteNode(node, c); break; + // 同步类型为无操作,直接跳过不做任何处理 case Node.SYNC_ACTION_NONE: break; + // 同步类型为错误或其他未知类型,抛出操作失败异常,表示遇到了未知的同步操作类型 case Node.SYNC_ACTION_ERROR: default: throw new ActionFailureException("unkown sync action type"); } } + // 添加本地节点的操作方法 private void addLocalNode(Node node) throws NetworkFailureException { if (mCancelled) { return; } SqlNote sqlNote; + // 如果节点是任务列表类型(TaskList) if (node instanceof TaskList) { + // 如果节点名称是默认根文件夹的名称,创建一个对应根文件夹的SqlNote对象,传入上下文和根文件夹的本地ID if (node.getName().equals( GTaskStringUtils.MIUI_FOLDER_PREFFIX + GTaskStringUtils.FOLDER_DEFAULT)) { sqlNote = new SqlNote(mContext, Notes.ID_ROOT_FOLDER); } else if (node.getName().equals( GTaskStringUtils.MIUI_FOLDER_PREFFIX + GTaskStringUtils.FOLDER_CALL_NOTE)) { + // 如果节点名称是通话记录文件夹的名称,创建一个对应通话记录文件夹的SqlNote对象,传入上下文和通话记录文件夹的本地ID sqlNote = new SqlNote(mContext, Notes.ID_CALL_RECORD_FOLDER); } else { + // 其他普通任务列表情况,创建一个新的SqlNote对象,传入上下文 sqlNote = new SqlNote(mContext); + // 设置SqlNote的内容为节点的本地JSON格式内容(从节点获取) sqlNote.setContent(node.getLocalJSONFromContent()); + // 设置父ID为根文件夹的本地ID sqlNote.setParentId(Notes.ID_ROOT_FOLDER); } } else { + // 如果节点是普通任务(Task)类型,创建一个新的SqlNote对象,传入上下文 sqlNote = new SqlNote(mContext); JSONObject js = node.getLocalJSONFromContent(); try { + // 如果节点的本地JSON数据中包含特定的笔记头部信息(META_HEAD_NOTE) if (js.has(GTaskStringUtils.META_HEAD_NOTE)) { JSONObject note = js.getJSONObject(GTaskStringUtils.META_HEAD_NOTE); if (note.has(NoteColumns.ID)) { long id = note.getLong(NoteColumns.ID); + // 检查该笔记ID在本地笔记数据库中是否已存在,如果存在则移除该ID(可能需要重新生成新的ID) if (DataUtils.existInNoteDatabase(mContentResolver, id)) { // the id is not available, have to create a new one note.remove(NoteColumns.ID); @@ -555,12 +612,14 @@ public class GTaskManager { } } + // 如果节点的本地JSON数据中包含特定的数据头部信息(META_HEAD_DATA) if (js.has(GTaskStringUtils.META_HEAD_DATA)) { JSONArray dataArray = js.getJSONArray(GTaskStringUtils.META_HEAD_DATA); for (int i = 0; i < dataArray.length(); i++) { JSONObject data = dataArray.getJSONObject(i); if (data.has(DataColumns.ID)) { long dataId = data.getLong(DataColumns.ID); + // 检查该数据ID在本地数据数据库中是否已存在,如果存在则移除该ID(可能需要重新生成新的ID) if (DataUtils.existInDataDatabase(mContentResolver, dataId)) { // the data id is not available, have to create // a new one @@ -574,36 +633,43 @@ public class GTaskManager { Log.w(TAG, e.toString()); e.printStackTrace(); } + // 设置SqlNote的内容为处理后的JSON数据 sqlNote.setContent(js); + // 获取任务节点的父节点在本地ID到Google Tasks的GID映射表中的对应父ID,如果不存在则抛出异常表示找不到本地父ID Long parentId = mGidToNid.get(((Task) node).getParent().getGid()); if (parentId == null) { Log.e(TAG, "cannot find task's parent id locally"); throw new ActionFailureException("cannot add local node"); } + // 设置SqlNote的父ID为获取到的父节点的本地ID sqlNote.setParentId(parentId.longValue()); } - // create the local node + // 设置SqlNote的Google Tasks全局唯一ID(GID)为节点的GID sqlNote.setGtaskId(node.getGid()); + // 将SqlNote对象提交保存到本地数据库(传入参数false可能表示不触发某些额外的相关操作) sqlNote.commit(false); - // update gid-nid mapping + // 在本地ID到Google Tasks的GID映射表中记录该节点的映射关系,键为节点的GID,值为SqlNote的本地ID mGidToNid.put(node.getGid(), sqlNote.getId()); + // 在Google Tasks的GID到本地ID映射表中记录映射关系,键为SqlNote的本地ID,值为节点的GID mNidToGid.put(sqlNote.getId(), node.getGid()); - // update meta + // 更新远程元数据,传入节点的GID和对应的SqlNote对象 updateRemoteMeta(node.getGid(), sqlNote); } + // 更新本地节点的操作方法 private void updateLocalNode(Node node, Cursor c) throws NetworkFailureException { if (mCancelled) { return; } SqlNote sqlNote; - // update the note locally + // 根据传入的上下文和游标信息创建一个新的SqlNote对象,用于更新本地节点信息 sqlNote = new SqlNote(mContext, c); + // 设置SqlNote的内容为节点的本地JSON格式内容(从节点获取) sqlNote.setContent(node.getLocalJSONFromContent()); Long parentId = (node instanceof Task) ? mGidToNid.get(((Task) node).getParent().getGid()) @@ -612,13 +678,16 @@ public class GTaskManager { Log.e(TAG, "cannot find task's parent id locally"); throw new ActionFailureException("cannot update local node"); } + // 设置SqlNote的父ID为获取到的父节点的本地ID sqlNote.setParentId(parentId.longValue()); + // 将更新后的SqlNote对象提交保存到本地数据库(传入参数true可能表示触发某些额外的相关操作) sqlNote.commit(true); - // update meta info + // 更新远程元数据,传入节点的GID和对应的SqlNote对象 updateRemoteMeta(node.getGid(), sqlNote); } + // 添加远程节点的操作方法 private void addRemoteNode(Node node, Cursor c) throws NetworkFailureException { if (mCancelled) { return; @@ -627,9 +696,10 @@ public class GTaskManager { SqlNote sqlNote = new SqlNote(mContext, c); Node n; - // update remotely + // 如果SqlNote对应的是笔记类型(即普通任务) if (sqlNote.isNoteType()) { Task task = new Task(); + // 设置任务的内容为从本地SqlNote获取的JSON格式内容 task.setContentByLocalJSON(sqlNote.getContent()); String parentGid = mNidToGid.get(sqlNote.getParentId()); @@ -637,17 +707,20 @@ public class GTaskManager { Log.e(TAG, "cannot find task's parent tasklist"); throw new ActionFailureException("cannot add remote task"); } + // 将任务添加到对应的父任务列表中(通过本地ID到Google Tasks的GID映射表找到父任务列表) mGTaskListHashMap.get(parentGid).addChildTask(task); + // 通过Google Tasks客户端创建该任务(发送到服务器创建对应的任务节点) GTaskClient.getInstance().createTask(task); n = (Node) task; - // add meta + // 更新远程元数据,传入任务的GID和对应的SqlNote对象 updateRemoteMeta(task.getGid(), sqlNote); } else { TaskList tasklist = null; - // we need to skip folder if it has already existed + // 构建文件夹名称,先添加特定的前缀,然后根据SqlNote的本地ID判断是否是根文件夹或通话记录文件夹,添加相应的后缀名称, + // 否则添加SqlNote的摘要信息作为后缀 String folderName = GTaskStringUtils.MIUI_FOLDER_PREFFIX; if (sqlNote.getId() == Notes.ID_ROOT_FOLDER) folderName += GTaskStringUtils.FOLDER_DEFAULT; @@ -656,121 +729,166 @@ public class GTaskManager { else folderName += sqlNote.getSnippet(); + // 遍历存储Google Tasks任务列表的哈希表(mGTaskListHashMap)的迭代器 Iterator> iter = mGTaskListHashMap.entrySet().iterator(); while (iter.hasNext()) { + // 获取哈希表中的每一个键值对,键是任务列表的全局唯一ID(GID),值是对应的任务列表对象(TaskList) Map.Entry entry = iter.next(); String gid = entry.getKey(); TaskList list = entry.getValue(); + // 判断当前任务列表的名称是否与之前构建的文件夹名称(folderName)相等 if (list.getName().equals(folderName)) { + // 如果相等,说明找到了对应的任务列表,将其赋值给tasklist变量 tasklist = list; + // 如果在存储Google Tasks节点的哈希表(mGTaskHashMap)中包含该任务列表的GID,说明已经处理过,将其移除 if (mGTaskHashMap.containsKey(gid)) { mGTaskHashMap.remove(gid); } + // 找到匹配的任务列表后就可以结束循环了 break; } } - // no match we can add now + // 如果经过上述查找没有找到匹配的任务列表(tasklist仍为null),则创建一个新的任务列表对象 if (tasklist == null) { tasklist = new TaskList(); + // 设置新任务列表的内容为从本地SqlNote获取的JSON格式内容 tasklist.setContentByLocalJSON(sqlNote.getContent()); + // 通过Google Tasks客户端创建该任务列表(发送到服务器创建对应的任务列表节点) GTaskClient.getInstance().createTaskList(tasklist); + // 将新创建的任务列表添加到存储Google Tasks任务列表的哈希表中,键为任务列表的GID,值为任务列表对象 mGTaskListHashMap.put(tasklist.getGid(), tasklist); } + // 将创建或找到的任务列表对象转换为Node类型并赋值给n(因为Node是更通用的节点类型,TaskList是一种特殊的Node) n = (Node) tasklist; } - // update local note + // 更新本地笔记相关信息 + // 设置本地SqlNote的Google Tasks全局唯一ID(GID)为n的GID,即与远程任务列表或任务对应的GID保持一致 sqlNote.setGtaskId(n.getGid()); + // 将SqlNote对象提交保存到本地数据库(传入参数false可能表示不触发某些额外的相关操作,此处用于保存基本的关联信息等) sqlNote.commit(false); + // 重置本地修改标志(可能表示将本地记录标记为已与远程同步,不再是本地修改状态) sqlNote.resetLocalModified(); + // 再次提交保存SqlNote对象到本地数据库(传入参数true可能表示触发一些更新相关的额外操作,确保修改标志等信息更新成功) sqlNote.commit(true); - // gid-id mapping + // gid-id映射更新 + // 在本地ID到Google Tasks的GID映射表(mGidToNid)中记录该节点(n)的映射关系,键为节点的GID,值为SqlNote的本地ID mGidToNid.put(n.getGid(), sqlNote.getId()); + // 在Google Tasks的GID到本地ID映射表(mNidToGid)中记录映射关系,键为SqlNote的本地ID,值为节点的GID mNidToGid.put(sqlNote.getId(), n.getGid()); } + // 更新远程节点的操作方法 private void updateRemoteNode(Node node, Cursor c) throws NetworkFailureException { if (mCancelled) { return; } + // 根据传入的上下文和游标信息创建一个新的SqlNote对象,用于后续操作 SqlNote sqlNote = new SqlNote(mContext, c); - // update remotely + // 远程更新操作 + // 设置远程节点(node)的内容为从本地SqlNote获取的JSON格式内容,即将本地修改同步到远程节点 node.setContentByLocalJSON(sqlNote.getContent()); + // 通过Google Tasks客户端将更新后的节点添加到更新队列中(后续会批量提交更新到服务器) GTaskClient.getInstance().addUpdateNode(node); - // update meta + // 更新远程元数据,传入节点的GID和对应的SqlNote对象 updateRemoteMeta(node.getGid(), sqlNote); - // move task if necessary + // 如果SqlNote对应的是笔记类型(即普通任务),则可能需要处理任务移动相关操作 if (sqlNote.isNoteType()) { Task task = (Task) node; + // 获取任务当前的父任务列表 TaskList preParentList = task.getParent(); + // 通过本地ID到Google Tasks的GID映射表,根据本地记录的父ID获取当前任务在远程对应的父任务列表的GID String curParentGid = mNidToGid.get(sqlNote.getParentId()); if (curParentGid == null) { Log.e(TAG, "cannot find task's parent tasklist"); throw new ActionFailureException("cannot update remote task"); } + // 根据获取到的GID从存储Google Tasks任务列表的哈希表中获取当前任务在远程对应的父任务列表对象 TaskList curParentList = mGTaskListHashMap.get(curParentGid); + // 如果当前任务的前后父任务列表不一致,说明任务需要在远程进行移动操作 if (preParentList != curParentList) { + // 先从原父任务列表中移除该任务 preParentList.removeChildTask(task); + // 将任务添加到新的父任务列表中 curParentList.addChildTask(task); + // 通过Google Tasks客户端执行任务移动操作,告知服务器任务在远程的位置变更 GTaskClient.getInstance().moveTask(task, preParentList, curParentList); } } - // clear local modified flag + // 清除本地修改标志,标记本地记录已同步到远程,不再处于本地修改状态 sqlNote.resetLocalModified(); + // 将更新后的SqlNote对象提交保存到本地数据库(传入参数true可能表示触发一些更新相关的额外操作,确保修改标志等信息更新成功) sqlNote.commit(true); } + // 更新远程元数据的操作方法 private void updateRemoteMeta(String gid, SqlNote sqlNote) throws NetworkFailureException { if (sqlNote != null && sqlNote.isNoteType()) { + // 从存储元数据的哈希表(mMetaHashMap)中根据GID获取对应的元数据对象(MetaData) MetaData metaData = mMetaHashMap.get(gid); if (metaData != null) { + // 如果元数据对象存在,设置其元数据内容,传入GID和从本地SqlNote获取的JSON格式内容 metaData.setMeta(gid, sqlNote.getContent()); + // 通过Google Tasks客户端将更新后的元数据添加到更新队列中(后续会批量提交更新到服务器) GTaskClient.getInstance().addUpdateNode(metaData); } else { + // 如果元数据对象不存在,则创建一个新的元数据对象 metaData = new MetaData(); + // 设置新元数据对象的元数据内容,传入GID和从本地SqlNote获取的JSON格式内容 metaData.setMeta(gid, sqlNote.getContent()); + // 将新创建的元数据对象添加到元数据列表(mMetaList)中作为子任务(从逻辑上关联起来) mMetaList.addChildTask(metaData); + // 将新创建的元数据对象添加到存储元数据的哈希表中,键为GID,值为元数据对象 mMetaHashMap.put(gid, metaData); + // 通过Google Tasks客户端创建该元数据任务(发送到服务器创建对应的元数据节点) GTaskClient.getInstance().createTask(metaData); } } } + // 刷新本地同步ID的操作方法 private void refreshLocalSyncId() throws NetworkFailureException { if (mCancelled) { return; } - // get the latest gtask list + // 为了获取最新的Google Tasks列表信息,先清空之前存储相关信息的哈希表 mGTaskHashMap.clear(); mGTaskListHashMap.clear(); mMetaHashMap.clear(); + // 重新初始化Google Tasks列表信息(重新获取任务列表、元数据等相关内容) initGTaskList(); Cursor c = null; try { + // 通过ContentResolver查询本地数据库中除系统类型且不在回收站的笔记记录信息,按照类型降序排列 c = mContentResolver.query(Notes.CONTENT_NOTE_URI, SqlNote.PROJECTION_NOTE, "(type<>? AND parent_id<>?)", new String[] { String.valueOf(Notes.TYPE_SYSTEM), String.valueOf(Notes.ID_TRASH_FOLER) }, NoteColumns.TYPE + " DESC"); if (c != null) { while (c.moveToNext()) { + // 获取笔记在Google Tasks中对应的全局唯一ID(GID) String gid = c.getString(SqlNote.GTASK_ID_COLUMN); + // 根据GID从存储Google Tasks节点的哈希表中获取对应的节点对象 Node node = mGTaskHashMap.get(gid); if (node != null) { + // 如果节点存在,从哈希表中移除该节点(表示已处理) mGTaskHashMap.remove(gid); + // 创建一个ContentValues对象用于存放要更新的数据,此处将同步ID设置为节点的最后修改时间 ContentValues values = new ContentValues(); values.put(NoteColumns.SYNC_ID, node.getLastModified()); + // 通过ContentResolver更新本地数据库中对应笔记的记录,设置同步ID字段的值 mContentResolver.update(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, c.getLong(SqlNote.ID_COLUMN)), values, null, null); } else { @@ -783,6 +901,7 @@ public class GTaskManager { Log.w(TAG, "failed to query local note to refresh sync id"); } } finally { + // 无论查询是否成功,最终都要关闭游标,释放资源,并将游标置空 if (c != null) { c.close(); c = null; @@ -790,10 +909,12 @@ public class GTaskManager { } } + // 获取同步账户名称的方法,通过Google Tasks客户端获取同步账户对象,并返回其名称 public String getSyncAccount() { return GTaskClient.getInstance().getSyncAccount().name; } + // 取消同步的方法,将表示同步是否取消的标志(mCancelled)设置为true,其他相关操作可以根据该标志来判断是否停止执行 public void cancelSync() { mCancelled = true; } diff --git a/src/Notes-master/src/net/micode/notes/gtask/remote/GTaskSyncService.java b/src/Notes-master/src/net/micode/notes/gtask/remote/GTaskSyncService.java index cca36f7..054b9da 100644 --- a/src/Notes-master/src/net/micode/notes/gtask/remote/GTaskSyncService.java +++ b/src/Notes-master/src/net/micode/notes/gtask/remote/GTaskSyncService.java @@ -23,69 +23,101 @@ import android.content.Intent; import android.os.Bundle; import android.os.IBinder; +// GTaskSyncService类继承自Service,用于管理与Google Tasks的同步相关操作,包括启动同步、取消同步以及广播同步状态等功能 public class GTaskSyncService extends Service { + + // 用于在Intent中传递同步操作类型的字符串常量,作为键来标识具体的操作类型信息 public final static String ACTION_STRING_NAME = "sync_action_type"; + // 表示启动同步操作的整数值常量,用于在根据操作类型进行判断时识别启动同步的意图 public final static int ACTION_START_SYNC = 0; + // 表示取消同步操作的整数值常量,用于在根据操作类型进行判断时识别取消同步的意图 public final static int ACTION_CANCEL_SYNC = 1; + // 表示无效操作类型的整数值常量,当获取到的操作类型不匹配已知的有效类型时使用该值来标识 public final static int ACTION_INVALID = 2; + // 用于广播同步服务相关状态信息的Intent的动作名称,其他组件可以通过注册监听该动作来接收同步服务的广播消息 public final static String GTASK_SERVICE_BROADCAST_NAME = "net.micode.notes.gtask.remote.gtask_sync_service"; + // 在广播Intent中用于传递是否正在同步状态的键名,对应的值为布尔类型,表示同步操作是否正在进行 public final static String GTASK_SERVICE_BROADCAST_IS_SYNCING = "isSyncing"; + // 在广播Intent中用于传递同步进度消息的键名,对应的值为字符串类型,可用于展示同步操作的进度相关文本信息 public final static String GTASK_SERVICE_BROADCAST_PROGRESS_MSG = "progressMsg"; + // 静态变量,用于存储正在执行的同步任务对象(GTaskASyncTask类型),方便在不同方法中对同步任务进行控制和判断状态 private static GTaskASyncTask mSyncTask = null; + // 静态变量,用于存储同步进度相关的消息字符串,可通过广播传递给其他关注同步进度的组件 private static String mSyncProgress = ""; + // 启动同步的私有方法,用于创建并执行同步任务 private void startSync() { + // 如果当前没有正在执行的同步任务(mSyncTask为null) if (mSyncTask == null) { + // 创建一个新的GTaskASyncTask对象,传入当前服务上下文(this)以及一个完成监听器(OnCompleteListener) mSyncTask = new GTaskASyncTask(this, new GTaskASyncTask.OnCompleteListener() { + // 当同步任务完成时会调用的回调方法 public void onComplete() { + // 将正在执行的同步任务对象置为null,表示同步已结束 mSyncTask = null; + // 发送一个空消息的广播(可能用于通知其他组件同步已完成等状态变化) sendBroadcast(""); + // 停止当前服务(因为同步任务已完成,服务的主要工作完成,可以停止自身运行) stopSelf(); } }); + // 发送一个空消息的广播(可能在创建任务后就先通知其他组件同步即将开始等情况) sendBroadcast(""); + // 执行同步任务,开始真正的同步操作流程 mSyncTask.execute(); } } + // 取消同步的私有方法,用于取消正在执行的同步任务(如果存在的话) private void cancelSync() { if (mSyncTask != null) { mSyncTask.cancelSync(); } } + // 服务创建时调用的方法,在这里将正在执行的同步任务对象初始化为null,确保服务启动时处于初始状态 @Override public void onCreate() { mSyncTask = null; } + // 当服务通过startService()方法启动时会调用此方法,用于处理传入的Intent并根据不同的操作意图执行相应操作 @Override public int onStartCommand(Intent intent, int flags, int startId) { + // 从传入的Intent中获取附加的Bundle数据(通常用于传递额外的参数信息) Bundle bundle = intent.getExtras(); + // 如果获取到的Bundle不为null且包含表示操作类型的键(ACTION_STRING_NAME) if (bundle != null && bundle.containsKey(ACTION_STRING_NAME)) { + // 根据操作类型的值进行不同的操作分支判断 switch (bundle.getInt(ACTION_STRING_NAME, ACTION_INVALID)) { + // 如果操作类型是启动同步(ACTION_START_SYNC) case ACTION_START_SYNC: startSync(); break; + // 如果操作类型是取消同步(ACTION_CANCEL_SYNC) case ACTION_CANCEL_SYNC: cancelSync(); break; + // 其他未知或不处理的操作类型,直接跳过不做操作 default: break; } + // 返回START_STICKY表示服务在被系统意外终止后会尝试重新创建并保持启动状态(常用于需要持续运行的服务场景) return START_STICKY; } + // 如果不符合上述条件或者操作类型无效等情况,调用父类的onStartCommand方法进行默认处理 return super.onStartCommand(intent, flags, startId); } + // 当系统内存不足时会调用此方法,在这里用于取消正在执行的同步任务(如果存在的话),释放内存资源 @Override public void onLowMemory() { if (mSyncTask != null) { @@ -93,10 +125,13 @@ public class GTaskSyncService extends Service { } } + // 用于服务绑定操作的方法,这里返回null表示不支持绑定操作(如果需要支持绑定,需要返回一个有效的IBinder对象) + @Override public IBinder onBind(Intent intent) { return null; } + // 发送广播的公共方法,用于向其他组件广播同步服务的相关状态信息,包括同步进度消息、是否正在同步等 public void sendBroadcast(String msg) { mSyncProgress = msg; Intent intent = new Intent(GTASK_SERVICE_BROADCAST_NAME); @@ -105,24 +140,29 @@ public class GTaskSyncService extends Service { sendBroadcast(intent); } + // 静态公共方法,用于在外部(比如Activity中)启动同步服务进行同步操作,需要传入对应的Activity作为上下文来启动服务 public static void startSync(Activity activity) { + // 设置GTaskManager的Activity上下文(可能用于获取相关授权等操作,与同步操作相关联) GTaskManager.getInstance().setActivityContext(activity); Intent intent = new Intent(activity, GTaskSyncService.class); intent.putExtra(GTaskSyncService.ACTION_STRING_NAME, GTaskSyncService.ACTION_START_SYNC); activity.startService(intent); } + // 静态公共方法,用于在外部(比如其他组件中)取消正在进行的同步操作,需要传入上下文(Context)来启动服务发送取消同步的意图 public static void cancelSync(Context context) { Intent intent = new Intent(context, GTaskSyncService.class); intent.putExtra(GTaskSyncService.ACTION_STRING_NAME, GTaskSyncService.ACTION_CANCEL_SYNC); context.startService(intent); } + // 静态公共方法,用于判断当前是否正在进行同步操作,通过检查正在执行的同步任务对象是否为null来返回相应的布尔值结果 public static boolean isSyncing() { return mSyncTask != null; } + // 静态公共方法,用于获取当前的同步进度相关的字符串消息,返回存储同步进度消息的静态变量的值 public static String getProgressString() { return mSyncProgress; } -} +} \ No newline at end of file From dc8ac4e87451de246b8a8e68f3826776680c1b95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E9=B9=8F=E5=B1=95?= <2740594397@qq.com> Date: Sat, 28 Dec 2024 10:58:23 +0800 Subject: [PATCH 11/13] =?UTF-8?q?=E5=BC=A0=E9=B9=8F=E5=B1=95=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../net/micode/notes/tool/BackupUtils.java | 182 ++++++++++-------- .../src/net/micode/notes/tool/DataUtils.java | 126 ++++++------ .../micode/notes/tool/GTaskStringUtils.java | 51 ++++- .../net/micode/notes/tool/ResourceParser.java | 159 +++++++++------ 4 files changed, 314 insertions(+), 204 deletions(-) diff --git a/src/Notes-master/src/net/micode/notes/tool/BackupUtils.java b/src/Notes-master/src/net/micode/notes/tool/BackupUtils.java index 39f6ec4..ffae194 100644 --- a/src/Notes-master/src/net/micode/notes/tool/BackupUtils.java +++ b/src/Notes-master/src/net/micode/notes/tool/BackupUtils.java @@ -1,17 +1,18 @@ +以下是带有中文注释的代码: + +```java /* * 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 + * 根据Apache License, Version 2.0(以下简称“许可证”)授权; + * 除非遵守许可证,否则不得使用此文件。 + * 你可以在以下网址获得许可证的副本: * * 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.tool; @@ -35,12 +36,13 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.PrintStream; - +// 备份工具类,用于将笔记数据备份到文本文件中。 public class BackupUtils { private static final String TAG = "BackupUtils"; - // Singleton stuff + // 单例模式 private static BackupUtils sInstance; + // 获取BackupUtils的单例,如果不存在则创建。 public static synchronized BackupUtils getInstance(Context context) { if (sInstance == null) { sInstance = new BackupUtils(context); @@ -49,43 +51,49 @@ public class BackupUtils { } /** - * Following states are signs to represents backup or restore - * status + * 以下状态码用于表示备份或恢复的状态。 */ - // Currently, the sdcard is not mounted - 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; + // SD卡未挂载 + public static final int STATE_SD_CARD_UNMOUONTED = 0; + // 备份文件不存在 + public static final int STATE_BACKUP_FILE_NOT_EXIST = 1; + // 数据格式不正确,可能被其他程序更改 + public static final int STATE_DATA_DESTROIED = 2; + // 运行时异常导致备份或恢复失败 + public static final int STATE_SYSTEM_ERROR = 3; + // 备份或恢复成功 + public static final int STATE_SUCCESS = 4; private TextExport mTextExport; + // 私有构造函数,用于创建BackupUtils实例。 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, @@ -93,12 +101,12 @@ public class BackupUtils { 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, @@ -108,23 +116,25 @@ public class BackupUtils { 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 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; @@ -132,28 +142,29 @@ public class BackupUtils { mFileDirectory = ""; } + // 根据ID获取对应的格式字符串。 private String getFormat(int id) { return TEXT_FORMAT[id]; } /** - * Export the folder identified by folder id to text + * 将指定文件夹ID的笔记导出到文本。 */ private void exportFolderToText(String folderId, PrintStream ps) { - // Query notes belong to this folder + // 查询属于该文件夹的笔记。 Cursor notesCursor = mContext.getContentResolver().query(Notes.CONTENT_NOTE_URI, NOTE_PROJECTION, NoteColumns.PARENT_ID + "=?", new String[] { - folderId + folderId }, null); if (notesCursor != null) { if (notesCursor.moveToFirst()) { do { - // Print note's last modified date + // 打印笔记最后修改日期。 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); } while (notesCursor.moveToNext()); @@ -163,12 +174,12 @@ public class BackupUtils { } /** - * Export note identified by id to a print stream + * 将指定ID的笔记导出到打印流。 */ private void exportNoteToText(String noteId, PrintStream ps) { Cursor dataCursor = mContext.getContentResolver().query(Notes.CONTENT_DATA_URI, DATA_PROJECTION, DataColumns.NOTE_ID + "=?", new String[] { - noteId + noteId }, null); if (dataCursor != null) { @@ -176,7 +187,7 @@ public class BackupUtils { 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); @@ -185,11 +196,11 @@ public class BackupUtils { 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)); @@ -205,7 +216,7 @@ public class BackupUtils { } dataCursor.close(); } - // print a line separator between note + // 打印笔记之间的分隔线。 try { ps.write(new byte[] { Character.LINE_SEPARATOR, Character.LETTER_NUMBER @@ -216,33 +227,34 @@ public class BackupUtils { } /** - * Note will be exported as text which is user readable + * 将笔记导出为用户可读的文本。 */ public int exportToText() { if (!externalStorageAvailable()) { - Log.d(TAG, "Media was not mounted"); + Log.d(TAG, "媒体未挂载"); return STATE_SD_CARD_UNMOUONTED; } PrintStream ps = getExportToTextPrintStream(); if (ps == null) { - Log.e(TAG, "get print stream error"); + Log.e(TAG, "获取打印流出错"); 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); + + 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) { + 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); @@ -257,20 +269,21 @@ public class BackupUtils { 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); + 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()); @@ -279,17 +292,19 @@ public class BackupUtils { } 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"); + Log.e(TAG, "创建导出文件失败"); return null; } mFileName = file.getName(); @@ -309,36 +324,33 @@ public class BackupUtils { } } - /** - * 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()); - sb.append(context.getString(filePathResId)); - File filedir = new File(sb.toString()); - 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(); +/** + * 在SD卡上生成用于存储导入数据的文本文件 + */ +private static File generateFileMountedOnSDcard(Context context, int filePathResId, int fileNameFormatResId) { + StringBuilder sb = new StringBuilder(); + sb.append(Environment.getExternalStorageDirectory()); + sb.append(context.getString(filePathResId)); + File filedir = new File(sb.toString()); + 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(); } - - return null; + if (!file.exists()) { + file.createNewFile(); + } + return file; + } catch (SecurityException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); } -} - + return null; +} diff --git a/src/Notes-master/src/net/micode/notes/tool/DataUtils.java b/src/Notes-master/src/net/micode/notes/tool/DataUtils.java index 2a14982..d0c852a 100644 --- a/src/Notes-master/src/net/micode/notes/tool/DataUtils.java +++ b/src/Notes-master/src/net/micode/notes/tool/DataUtils.java @@ -1,17 +1,16 @@ + /* * 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 + * 根据Apache License, Version 2.0(以下简称“许可证”)授权; + * 除非遵守许可证,否则不得使用此文件。 + * 你可以在以下网址获得许可证的副本: * * 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.tool; @@ -34,23 +33,25 @@ import net.micode.notes.ui.NotesListAdapter.AppWidgetAttribute; import java.util.ArrayList; import java.util.HashSet; - +// 数据工具类,提供对笔记数据的操作函数 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"); + Log.d(TAG, "id集合为空"); return true; } if (ids.size() == 0) { - Log.d(TAG, "no id is in the hashset"); + Log.d(TAG, "id集合中没有元素"); 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"); + if (id == Notes.ID_ROOT_FOLDER) { + Log.e(TAG, "不要删除系统根文件夹"); continue; } ContentProviderOperation.Builder builder = ContentProviderOperation @@ -60,7 +61,7 @@ public class DataUtils { try { ContentProviderResult[] results = resolver.applyBatch(Notes.AUTHORITY, operationList); if (results == null || results.length == 0 || results[0] == null) { - Log.d(TAG, "delete notes failed, ids:" + ids.toString()); + Log.d(TAG, "删除笔记失败, ids:" + ids.toString()); return false; } return true; @@ -72,6 +73,7 @@ public class DataUtils { return false; } + // 将笔记移动到指定文件夹 public static void moveNoteToFoler(ContentResolver resolver, long id, long srcFolderId, long desFolderId) { ContentValues values = new ContentValues(); values.put(NoteColumns.PARENT_ID, desFolderId); @@ -80,10 +82,11 @@ public class DataUtils { resolver.update(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, id), values, null, null); } + // 批量将笔记移动到指定文件夹 public static boolean batchMoveToFolder(ContentResolver resolver, HashSet ids, long folderId) { if (ids == null) { - Log.d(TAG, "the ids is null"); + Log.d(TAG, "id集合为空"); return true; } @@ -99,7 +102,7 @@ public class DataUtils { try { ContentProviderResult[] results = resolver.applyBatch(Notes.AUTHORITY, operationList); if (results == null || results.length == 0 || results[0] == null) { - Log.d(TAG, "delete notes failed, ids:" + ids.toString()); + Log.d(TAG, "移动笔记失败, ids:" + ids.toString()); return false; } return true; @@ -112,22 +115,22 @@ public class DataUtils { } /** - * 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, + 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)}, + new String[] { String.valueOf(Notes.TYPE_FOLDER), String.valueOf(Notes.ID_TRASH_FOLER) }, null); int count = 0; - if(cursor != null) { - if(cursor.moveToFirst()) { + if (cursor != null) { + if (cursor.moveToFirst()) { try { count = cursor.getInt(0); } catch (IndexOutOfBoundsException e) { - Log.e(TAG, "get folder count failed:" + e.toString()); + Log.e(TAG, "获取文件夹数量失败:" + e.toString()); } finally { cursor.close(); } @@ -136,11 +139,12 @@ public class DataUtils { return count; } + // 检查笔记在数据库中是否可见 public static boolean visibleInNoteDatabase(ContentResolver resolver, long noteId, int type) { Cursor cursor = resolver.query(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, noteId), null, NoteColumns.TYPE + "=? AND " + NoteColumns.PARENT_ID + "<>" + Notes.ID_TRASH_FOLER, - new String [] {String.valueOf(type)}, + new String[] { String.valueOf(type) }, null); boolean exist = false; @@ -153,6 +157,7 @@ public class DataUtils { 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); @@ -167,6 +172,7 @@ public class DataUtils { 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); @@ -181,15 +187,16 @@ public class DataUtils { 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 + "=?", + " 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) { + if (cursor != null) { + if (cursor.getCount() > 0) { exist = true; } cursor.close(); @@ -197,6 +204,7 @@ public class DataUtils { 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 }, @@ -224,72 +232,82 @@ public class DataUtils { return set; } + // 根据笔记ID获取通话号码 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); + 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); + return cursor.getString(0); // 返回获取到的字符串 } catch (IndexOutOfBoundsException e) { - Log.e(TAG, "Get call number fails " + e.toString()); + Log.e(TAG, "获取通话号码失败:" + e.toString()); // 记录异常信息 } finally { - cursor.close(); + cursor.close(); // 确保游标被关闭 } } - return ""; - } + return ""; // 如果失败,返回空字符串 + // 根据电话号码和通话日期获取笔记ID public static long getNoteIdByPhoneNumberAndCallDate(ContentResolver resolver, String phoneNumber, long callDate) { Cursor cursor = resolver.query(Notes.CONTENT_DATA_URI, - new String [] { CallNote.NOTE_ID }, + 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 }, + + CallNote.PHONE_NUMBER + ",?)", + new String[] { String.valueOf(callDate), CallNote.CONTENT_ITEM_TYPE, phoneNumber }, null); + // 如果游标不为空并且移动到第一行,则尝试获取笔记ID if (cursor != null) { if (cursor.moveToFirst()) { try { - return cursor.getLong(0); + return cursor.getLong(0); // 返回获取到的长整型数 } catch (IndexOutOfBoundsException e) { - Log.e(TAG, "Get call note id fails " + e.toString()); + Log.e(TAG, "获取通话笔记ID失败:" + e.toString()); // 记录异常信息 } } - cursor.close(); + cursor.close(); // 确保游标被关闭 } - return 0; + return 0; // 如果失败,返回0 } + // 根据笔记ID获取摘要 public static String getSnippetById(ContentResolver resolver, long noteId) { Cursor cursor = resolver.query(Notes.CONTENT_NOTE_URI, - new String [] { NoteColumns.SNIPPET }, + new String[] { NoteColumns.SNIPPET }, NoteColumns.ID + "=?", - new String [] { String.valueOf(noteId)}, + new String[] { String.valueOf(noteId) }, null); + // 如果游标不为空并且移动到第一行,则尝试获取摘要 if (cursor != null) { String snippet = ""; if (cursor.moveToFirst()) { - snippet = cursor.getString(0); + snippet = cursor.getString(0); // 获取摘要 } - cursor.close(); - return snippet; + cursor.close(); // 确保游标被关闭 + return snippet; // 返回摘要 } - throw new IllegalArgumentException("Note is not found with id: " + noteId); + throw new IllegalArgumentException("未找到ID为:" + noteId + "的笔记"); // 如果失败,抛出异常 } + // 获取格式化后的摘要 public static String getFormattedSnippet(String snippet) { if (snippet != null) { - snippet = snippet.trim(); - int index = snippet.indexOf('\n'); + snippet = snippet.trim(); // 去除首尾空白 + int index = snippet.indexOf('\n'); // 查找换行符 if (index != -1) { - snippet = snippet.substring(0, index); + snippet = snippet.substring(0, index); // 截取换行符之前的字符串 } } - return snippet; + return snippet; // 返回格式化后的摘要 } } diff --git a/src/Notes-master/src/net/micode/notes/tool/GTaskStringUtils.java b/src/Notes-master/src/net/micode/notes/tool/GTaskStringUtils.java index 666b729..1b42c6f 100644 --- a/src/Notes-master/src/net/micode/notes/tool/GTaskStringUtils.java +++ b/src/Notes-master/src/net/micode/notes/tool/GTaskStringUtils.java @@ -16,98 +16,145 @@ package net.micode.notes.tool; +// GTaskStringUtils类,主要用于定义一些与Google Tasks相关操作中使用的字符串常量,方便在代码中统一引用和管理 public class GTaskStringUtils { + // 表示操作的唯一ID的JSON键名,用于在与Google Tasks交互的JSON数据中标识某个具体操作的ID public final static String GTASK_JSON_ACTION_ID = "action_id"; + // 表示操作列表的JSON键名,用于在与Google Tasks交互的JSON数据中存放一组操作的集合(通常是一个JSON数组) public final static String GTASK_JSON_ACTION_LIST = "action_list"; + // 表示操作类型的JSON键名,用于在与Google Tasks交互的JSON数据中指定某个操作具体是什么类型的操作,比如创建、获取、移动等 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"; + // 表示创建者ID的JSON键名,用于在与Google Tasks交互的JSON数据中存放创建某个任务、任务列表等的用户ID信息 public final static String GTASK_JSON_CREATOR_ID = "creator_id"; + // 表示子实体的JSON键名,可能用于在涉及包含子元素的结构(如任务列表包含多个任务等情况)时,标识子实体相关信息 public final static String GTASK_JSON_CHILD_ENTITY = "child_entity"; + // 表示客户端版本号的JSON键名,用于在与Google Tasks交互的JSON数据中告知服务器当前客户端的版本信息,便于进行兼容性等相关处理 public final static String GTASK_JSON_CLIENT_VERSION = "client_version"; + // 表示是否完成的JSON键名,可能用于任务等实体中,标识该任务是否已经完成的状态信息 public final static String GTASK_JSON_COMPLETED = "completed"; + // 表示当前列表ID的JSON键名,可能用于在涉及多列表切换、关联等场景时,标识当前所在的任务列表的ID public final static String GTASK_JSON_CURRENT_LIST_ID = "current_list_id"; + // 表示默认列表ID的JSON键名,用于标识某个用户、某个应用场景下的默认任务列表的ID信息 public final static String GTASK_JSON_DEFAULT_LIST_ID = "default_list_id"; + // 表示是否已删除的JSON键名,用于在任务、任务列表等实体中标识其是否已经被删除的状态信息 public final static String GTASK_JSON_DELETED = "deleted"; + // 表示目标列表的JSON键名,在进行移动操作等涉及改变所属列表的操作时,用于指定要移动到的目标任务列表的ID public final static String GTASK_JSON_DEST_LIST = "dest_list"; + // 表示目标父级的JSON键名,在进行移动操作、关联操作等涉及改变父级元素的情况时,用于指定要移动到或关联的目标父级元素的相关信息(比如任务列表等) public final static String GTASK_JSON_DEST_PARENT = "dest_parent"; + // 表示目标父级类型的JSON键名,可能用于进一步明确目标父级元素的具体类型(例如是任务列表类型还是其他类型等) public final static String GTASK_JSON_DEST_PARENT_TYPE = "dest_parent_type"; + // 表示实体差异的JSON键名,可能用于在对比、更新实体时,标识实体之间发生变化的部分相关信息 public final static String GTASK_JSON_ENTITY_DELTA = "entity_delta"; + // 表示实体类型的JSON键名,用于在与Google Tasks交互的JSON数据中明确某个实体(如任务、任务列表等)具体是什么类型 public final static String GTASK_JSON_ENTITY_TYPE = "entity_type"; + // 表示是否获取已删除的JSON键名,在进行查询操作时,用于指定是否要获取已经被标记为删除的任务、任务列表等信息 public final static String GTASK_JSON_GET_DELETED = "get_deleted"; + // 表示唯一ID的JSON键名,通常用于标识任务、任务列表等实体在Google Tasks系统中的全局唯一标识符 public final static String GTASK_JSON_ID = "id"; + // 表示索引的JSON键名,可能用于在任务列表中标识某个任务的排列顺序等索引相关信息 public final static String GTASK_JSON_INDEX = "index"; + // 表示最后修改时间的JSON键名,用于记录任务、任务列表等实体最后一次被修改的时间信息,便于进行同步、更新等操作时的判断 public final static String GTASK_JSON_LAST_MODIFIED = "last_modified"; + // 表示最新同步点的JSON键名,可能用于记录与Google Tasks进行数据同步时的最新同步时间点等相关信息,便于后续判断同步范围、增量等情况 public final static String GTASK_JSON_LATEST_SYNC_POINT = "latest_sync_point"; + // 表示列表ID的JSON键名,常用于标识某个具体的任务列表的ID信息,与其他相关操作配合使用,比如获取某个列表下的任务等操作 public final static String GTASK_JSON_LIST_ID = "list_id"; + // 表示任务列表(复数形式)的JSON键名,用于在与Google Tasks交互的JSON数据中存放多个任务列表信息的集合(通常是一个JSON数组) public final static String GTASK_JSON_LISTS = "lists"; + // 表示名称的JSON键名,用于任务、任务列表等实体中,存放它们的名称信息,方便展示、识别等操作 public final static String GTASK_JSON_NAME = "name"; + // 表示新ID的JSON键名,可能在某些创建、更新操作后,用于存放新生成的实体ID信息(比如创建任务后返回的新任务ID等情况) public final static String GTASK_JSON_NEW_ID = "new_id"; + // 表示备注(笔记)的JSON键名,可能用于存放与任务相关的一些备注、说明等文本信息 public final static String GTASK_JSON_NOTES = "notes"; + // 表示父级ID的JSON键名,用于在任务、任务列表等实体中标识其所属的父级元素的ID信息,建立层级关系 public final static String GTASK_JSON_PARENT_ID = "parent_id"; + // 表示前一个兄弟节点(任务等)ID的JSON键名,在任务列表中用于标识某个任务之前相邻的兄弟任务的ID,常用于排序、移动等操作场景 public final static String GTASK_JSON_PRIOR_SIBLING_ID = "prior_sibling_id"; + // 表示操作结果的JSON键名,在执行某些操作(如批量操作等)后,用于存放操作的结果信息(通常是一个JSON数组) public final static String GTASK_JSON_RESULTS = "results"; + // 表示源列表的JSON键名,在进行移动操作等涉及改变所属列表的操作时,用于指定操作前所在的原始任务列表的ID public final static String GTASK_JSON_SOURCE_LIST = "source_list"; + // 表示任务(复数形式)的JSON键名,用于在与Google Tasks交互的JSON数据中存放多个任务信息的集合(通常是一个JSON数组) public final static String GTASK_JSON_TASKS = "tasks"; + // 表示类型的JSON键名,用于在与Google + // Tasks交互的JSON数据中明确某个实体(如任务、任务列表等)具体是什么类型,和GTASK_JSON_ENTITY_TYPE作用类似但使用场景可能稍有不同 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"; + // 表示用户的JSON键名,可能用于存放与操作相关的用户信息,比如执行操作的用户账号等情况 public final static String GTASK_JSON_USER = "user"; + // MIUI系统中笔记相关的文件夹前缀字符串,用于在名称等地方标识该文件夹是属于MIUI笔记应用相关的文件夹 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"; + // 表示元数据中Google Tasks ID的键名,可能用于在元数据结构中关联对应的Google Tasks实体的ID信息 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/src/Notes-master/src/net/micode/notes/tool/ResourceParser.java b/src/Notes-master/src/net/micode/notes/tool/ResourceParser.java index 1ad3ad6..d98a327 100644 --- a/src/Notes-master/src/net/micode/notes/tool/ResourceParser.java +++ b/src/Notes-master/src/net/micode/notes/tool/ResourceParser.java @@ -14,6 +14,7 @@ * limitations under the License. */ +// 该类所属的包名,表明这个类位于net.micode.notes.tool包下,用于提供一些资源相关的解析和获取功能 package net.micode.notes.tool; import android.content.Context; @@ -22,49 +23,61 @@ import android.preference.PreferenceManager; import net.micode.notes.R; import net.micode.notes.ui.NotesPreferenceActivity; +// ResourceParser类,主要用于对应用中的各种资源(如背景图片、文本样式等)进行管理和提供获取方法,方便在不同的界面等场景中使用 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 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; + // 定义默认的背景颜色常量,其值为黄色(对应上面定义的颜色常量中的YELLOW),表示在没有特殊设置时默认使用的背景颜色 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 TEXT_SMALL = 0; + public static final int TEXT_MEDIUM = 1; + public static final int TEXT_LARGE = 2; + public static final int TEXT_SUPER = 3; + // 定义默认的字体大小常量,其值为中等大小(对应上面定义的文本大小常量中的TEXT_MEDIUM),表示在没有特殊设置时默认使用的字体大小 public static final int BG_DEFAULT_FONT_SIZE = TEXT_MEDIUM; + // 内部静态类NoteBgResources,用于管理笔记编辑界面相关的背景资源(图片资源) 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 + // 定义一个私有的静态整型数组,存储笔记编辑界面背景图片资源的ID,对应不同颜色的编辑界面背景图片,顺序与前面定义的颜色常量顺序一致 + 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 }; - 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 + // 定义一个私有的静态整型数组,存储笔记编辑界面标题背景图片资源的ID,对应不同颜色的编辑界面标题背景图片,顺序与前面定义的颜色常量顺序一致 + 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 }; + // 根据传入的颜色ID(对应前面定义的颜色常量)获取笔记编辑界面的背景图片资源ID,方便在设置编辑界面背景时使用 public static int getNoteBgResource(int id) { return BG_EDIT_RESOURCES[id]; } + // 根据传入的颜色ID(对应前面定义的颜色常量)获取笔记编辑界面标题的背景图片资源ID,方便在设置编辑界面标题背景时使用 public static int getNoteTitleBgResource(int id) { return BG_EDIT_TITLE_RESOURCES[id]; } } + // 根据传入的上下文(Context)获取默认的背景图片ID,逻辑是先检查是否在偏好设置中设置了自定义背景颜色(通过特定的偏好设置键来判断), + // 如果设置了,则随机选择一个背景资源ID(从NoteBgResources中定义的资源数组长度范围内随机),否则返回默认的背景颜色ID(BG_DEFAULT_COLOR) public static int getDefaultBgId(Context context) { if (PreferenceManager.getDefaultSharedPreferences(context).getBoolean( NotesPreferenceActivity.PREFERENCE_SET_BG_COLOR_KEY, false)) { @@ -74,94 +87,113 @@ public class ResourceParser { } } + // 内部静态类NoteItemBgResources,用于管理笔记列表项相关的背景资源(图片资源) 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 + // 定义一个私有的静态整型数组,存储笔记列表项第一个元素(可能是列表头部等情况)的背景图片资源ID,对应不同颜色的背景图片,顺序与前面定义的颜色常量顺序一致 + 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 + // 定义一个私有的静态整型数组,存储笔记列表项中间元素(正常的列表项情况)的背景图片资源ID,对应不同颜色的背景图片,顺序与前面定义的颜色常量顺序一致 + 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, + // 定义一个私有的静态整型数组,存储笔记列表项最后一个元素(可能是列表尾部等情况)的背景图片资源ID,对应不同颜色的背景图片,顺序与前面定义的颜色常量顺序一致 + 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 + // 定义一个私有的静态整型数组,存储单个笔记(可能是独立展示等情况)的背景图片资源ID,对应不同颜色的背景图片,顺序与前面定义的颜色常量顺序一致 + 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 }; + // 根据传入的颜色ID(对应前面定义的颜色常量)获取笔记列表项第一个元素的背景图片资源ID,方便在设置列表项背景时使用 public static int getNoteBgFirstRes(int id) { return BG_FIRST_RESOURCES[id]; } + // 根据传入的颜色ID(对应前面定义的颜色常量)获取笔记列表项最后一个元素的背景图片资源ID,方便在设置列表项背景时使用 public static int getNoteBgLastRes(int id) { return BG_LAST_RESOURCES[id]; } + // 根据传入的颜色ID(对应前面定义的颜色常量)获取单个笔记的背景图片资源ID,方便在设置单个笔记背景时使用 public static int getNoteBgSingleRes(int id) { return BG_SINGLE_RESOURCES[id]; } + // 根据传入的颜色ID(对应前面定义的颜色常量)获取笔记列表项中间元素(正常列表项)的背景图片资源ID,方便在设置列表项背景时使用 public static int getNoteBgNormalRes(int id) { return BG_NORMAL_RESOURCES[id]; } + // 获取文件夹的背景图片资源ID,用于设置文件夹在列表等展示场景中的背景图片 public static int getFolderBgRes() { return R.drawable.list_folder; } } + // 内部静态类WidgetBgResources,用于管理桌面小部件相关的背景资源(图片资源) 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, + // 定义一个私有的静态整型数组,存储2x尺寸桌面小部件的背景图片资源ID,对应不同颜色的背景图片,顺序与前面定义的颜色常量顺序一致 + 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, }; + // 根据传入的颜色ID(对应前面定义的颜色常量)获取2x尺寸桌面小部件的背景图片资源ID,方便在设置小部件背景时使用 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 + // 定义一个私有的静态整型数组,存储4x尺寸桌面小部件的背景图片资源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 }; + // 根据传入的颜色ID(对应前面定义的颜色常量)获取4x尺寸桌面小部件的背景图片资源ID,方便在设置小部件背景时使用 public static int getWidget4xBgResource(int id) { return BG_4X_RESOURCES[id]; } } + // 内部静态类TextAppearanceResources,用于管理文本外观相关的资源(主要是文本样式资源) 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,对应不同大小的文本外观样式,顺序与前面定义的文本大小常量顺序有一定关联 + private final static int[] TEXTAPPEARANCE_RESOURCES = new int[] { + R.style.TextAppearanceNormal, + R.style.TextAppearanceMedium, + R.style.TextAppearanceLarge, + R.style.TextAppearanceSuper }; + // 根据传入的文本外观资源ID获取对应的文本外观资源ID,如果传入的ID大于资源数组的长度(可能是由于存储或获取出现异常情况), + // 则返回默认的字体大小对应的资源ID(BG_DEFAULT_FONT_SIZE),以避免出现资源获取错误 public static int getTexAppearanceResource(int id) { /** * HACKME: Fix bug of store the resource id in shared preference. @@ -174,8 +206,9 @@ public class ResourceParser { return TEXTAPPEARANCE_RESOURCES[id]; } + // 获取文本外观资源数组的长度,可用于判断资源数量或者进行一些边界相关的操作判断等 public static int getResourcesSize() { return TEXTAPPEARANCE_RESOURCES.length; } } -} +} \ No newline at end of file From f154c9b7705116d13a5be1e09b8bc2f54e764b12 Mon Sep 17 00:00:00 2001 From: zhangjinhan <2403497099@qq.com> Date: Sun, 29 Dec 2024 22:21:48 +0800 Subject: [PATCH 12/13] =?UTF-8?q?=E6=88=91=E5=B0=86=E6=88=91=E4=B9=8B?= =?UTF-8?q?=E5=89=8D=E6=89=80=E5=A4=84=E7=90=86=E7=9A=84=E9=83=A8=E5=88=86?= =?UTF-8?q?=E6=8F=90=E4=BA=A4=E5=88=B0main=E9=87=8C=E9=9D=A2=E6=9D=A5?= =?UTF-8?q?=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/net/micode/notes/model/Note.java | 19 +- .../net/micode/notes/model/WorkingNote.java | 167 ++- .../net/micode/notes/tool/BackupUtils.java | 250 ++-- .../src/net/micode/notes/tool/DataUtils.java | 131 +- .../micode/notes/tool/GTaskStringUtils.java | 146 +- .../net/micode/notes/tool/ResourceParser.java | 235 ++-- .../micode/notes/ui/AlarmAlertActivity.java | 125 +- .../micode/notes/ui/AlarmInitReceiver.java | 23 +- .../net/micode/notes/ui/AlarmReceiver.java | 13 +- .../net/micode/notes/ui/DateTimePicker.java | 1230 ++++++++++------- .../micode/notes/ui/DateTimePickerDialog.java | 37 +- .../src/net/micode/notes/ui/DropdownMenu.java | 29 +- .../micode/notes/ui/FoldersListAdapter.java | 13 +- .../net/micode/notes/ui/NoteEditActivity.java | 282 ++-- .../src/net/micode/notes/ui/NoteEditText.java | 66 +- .../src/net/micode/notes/ui/NoteItemData.java | 99 +- .../micode/notes/ui/NotesListActivity.java | 6 +- .../net/micode/notes/ui/NotesListAdapter.java | 64 +- .../net/micode/notes/ui/NotesListItem.java | 30 +- .../notes/ui/NotesPreferenceActivity.java | 146 +- .../notes/widget/NoteWidgetProvider.java | 45 +- .../notes/widget/NoteWidgetProvider_2x.java | 22 +- .../notes/widget/NoteWidgetProvider_4x.java | 24 +- 23 files changed, 1774 insertions(+), 1428 deletions(-) diff --git a/src/Notes-master/src/net/micode/notes/model/Note.java b/src/Notes-master/src/net/micode/notes/model/Note.java index 6706cf6..6ca854c 100644 --- a/src/Notes-master/src/net/micode/notes/model/Note.java +++ b/src/Notes-master/src/net/micode/notes/model/Note.java @@ -33,7 +33,7 @@ import net.micode.notes.data.Notes.TextNote; import java.util.ArrayList; - +// 代表一个笔记,包含笔记的基本信息和笔记数据 public class Note { private ContentValues mNoteDiffValues; private NoteData mNoteData; @@ -70,36 +70,44 @@ public class Note { 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); } + // 设置文本笔记的数据ID public void setTextDataId(long id) { mNoteData.setTextDataId(id); } + // 获取文本笔记的数据ID public long getTextDataId() { return mNoteData.mTextDataId; } + // 设置通话笔记的数据ID public void setCallDataId(long id) { mNoteData.setCallDataId(id); } + // 设置通话笔记的数据 public void setCallData(String key, String value) { mNoteData.setCallData(key, value); } + // 判断笔记是否被本地修改过 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); @@ -130,6 +138,7 @@ public class Note { return true; } + // 笔记数据类,包含文本数据和通话数据 private class NoteData { private long mTextDataId; @@ -148,10 +157,12 @@ public class Note { mCallDataId = 0; } + // 判断笔记数据是否被本地修改过 boolean isLocalModified() { return mTextDataValues.size() > 0 || mCallDataValues.size() > 0; } + // 设置文本数据ID void setTextDataId(long id) { if(id <= 0) { throw new IllegalArgumentException("Text data id should larger than 0"); @@ -159,6 +170,7 @@ public class Note { mTextDataId = id; } + // 设置通话数据ID void setCallDataId(long id) { if (id <= 0) { throw new IllegalArgumentException("Call data id should larger than 0"); @@ -166,18 +178,21 @@ public class Note { 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 pushIntoContentResolver(Context context, long noteId) { /** * Check for safety @@ -250,4 +265,4 @@ public class Note { return null; } } -} +} \ No newline at end of file diff --git a/src/Notes-master/src/net/micode/notes/model/WorkingNote.java b/src/Notes-master/src/net/micode/notes/model/WorkingNote.java index be081e4..f77e6e6 100644 --- a/src/Notes-master/src/net/micode/notes/model/WorkingNote.java +++ b/src/Notes-master/src/net/micode/notes/model/WorkingNote.java @@ -13,16 +13,16 @@ * 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; @@ -30,8 +30,8 @@ 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; @@ -41,27 +41,28 @@ public class WorkingNote { 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; - + + // 数据库查询笔记数据的列 public static final String[] DATA_PROJECTION = new String[] { DataColumns.ID, DataColumns.CONTENT, @@ -71,7 +72,8 @@ public class WorkingNote { DataColumns.DATA3, DataColumns.DATA4, }; - + + // 数据库查询笔记信息的列 public static final String[] NOTE_PROJECTION = new String[] { NoteColumns.PARENT_ID, NoteColumns.ALERTED_DATE, @@ -80,28 +82,28 @@ public class WorkingNote { 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; @@ -113,8 +115,8 @@ public class WorkingNote { mMode = 0; mWidgetType = Notes.TYPE_WIDGET_INVALIDE; } - - // Existing note construct + + // 已有笔记构造方法 private WorkingNote(Context context, long noteId, long folderId) { mContext = context; mNoteId = noteId; @@ -123,12 +125,13 @@ public class WorkingNote { mNote = new Note(); loadNote(); } - + + // 从数据库加载笔记信息 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); @@ -145,13 +148,14 @@ public class WorkingNote { } loadNoteData(); } - + + // 从数据库加载笔记数据 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 { @@ -173,7 +177,8 @@ public class WorkingNote { throw new IllegalArgumentException("Unable to find note's data with id " + mNoteId); } } - + + // 创建一个空笔记 public static WorkingNote createEmptyNote(Context context, long folderId, int widgetId, int widgetType, int defaultBgColorId) { WorkingNote note = new WorkingNote(context, folderId); @@ -182,11 +187,13 @@ public class WorkingNote { note.setWidgetType(widgetType); return note; } - + + // 从数据库加载笔记 public static WorkingNote load(Context context, long id) { return new WorkingNote(context, id, 0); } - + + // 保存笔记到数据库 public synchronized boolean saveNote() { if (isWorthSaving()) { if (!existInDatabase()) { @@ -195,9 +202,9 @@ public class WorkingNote { return false; } } - + mNote.syncNote(mContext, mNoteId); - + /** * Update widget content if there exist any widget of this note */ @@ -211,11 +218,13 @@ 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,13 @@ public class WorkingNote { return true; } } - + + // 设置笔记信息改变监听器 public void setOnSettingStatusChangedListener(NoteSettingChangedListener l) { mNoteSettingStatusListener = l; } - + + // 设置闹钟提醒日期 public void setAlertDate(long date, boolean set) { if (date != mAlertDate) { mAlertDate = date; @@ -238,7 +249,8 @@ public class WorkingNote { mNoteSettingStatusListener.onClockAlertChanged(date, set); } } - + + // 标记笔记是否已删除 public void markDeleted(boolean mark) { mIsDeleted = mark; if (mWidgetId != AppWidgetManager.INVALID_APPWIDGET_ID @@ -246,7 +258,8 @@ public class WorkingNote { mNoteSettingStatusListener.onWidgetChanged(); } } - + + // 设置笔记背景颜色ID public void setBgColorId(int id) { if (id != mBgColorId) { mBgColorId = id; @@ -256,7 +269,8 @@ public class WorkingNote { mNote.setNoteValue(NoteColumns.BG_COLOR_ID, String.valueOf(id)); } } - + + // 设置笔记的检查列表模式 public void setCheckListMode(int mode) { if (mMode != mode) { if (mNoteSettingStatusListener != null) { @@ -266,98 +280,115 @@ public class WorkingNote { mNote.setTextData(TextNote.MODE, String.valueOf(mMode)); } } - + + // 设置笔记的窗口小部件类型 public void setWidgetType(int type) { if (type != mWidgetType) { mWidgetType = type; mNote.setNoteValue(NoteColumns.WIDGET_TYPE, String.valueOf(mWidgetType)); } } - + + // 设置笔记的窗口小部件ID public void setWidgetId(int id) { if (id != mWidgetId) { mWidgetId = id; mNote.setNoteValue(NoteColumns.WIDGET_ID, String.valueOf(mWidgetId)); } } - + + // 设置工作文本内容 public void setWorkingText(String text) { if (!TextUtils.equals(mContent, text)) { mContent = text; mNote.setTextData(DataColumns.CONTENT, mContent); } } - + + // 将笔记转换为通话笔记 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); } - + + // 获取笔记内容 public String getContent() { return mContent; } - + + // 获取闹钟提醒日期 public long getAlertDate() { return mAlertDate; } - + + // 获取笔记修改日期 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); } - + + // 获取检查列表模式 public int getCheckListMode() { return mMode; } - + + // 获取笔记ID public long getNoteId() { return mNoteId; } - + + // 获取笔记所在的文件夹ID public long getFolderId() { return mFolderId; } - + + // 获取窗口小部件ID public int getWidgetId() { return mWidgetId; } - + + // 获取窗口小部件类型 public int getWidgetType() { return mWidgetType; } - + + // 笔记信息改变监听器接口 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 @@ -365,4 +396,4 @@ public class WorkingNote { */ void onCheckListModeChanged(int oldMode, int newMode); } -} +} \ No newline at end of file diff --git a/src/Notes-master/src/net/micode/notes/tool/BackupUtils.java b/src/Notes-master/src/net/micode/notes/tool/BackupUtils.java index ffae194..c6a1095 100644 --- a/src/Notes-master/src/net/micode/notes/tool/BackupUtils.java +++ b/src/Notes-master/src/net/micode/notes/tool/BackupUtils.java @@ -1,112 +1,110 @@ -以下是带有中文注释的代码: - -```java /* * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) * - * 根据Apache License, Version 2.0(以下简称“许可证”)授权; - * 除非遵守许可证,否则不得使用此文件。 - * 你可以在以下网址获得许可证的副本: + * 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.tool; - + import android.content.Context; import android.database.Cursor; import android.os.Environment; import android.text.TextUtils; import android.text.format.DateFormat; import android.util.Log; - + import net.micode.notes.R; 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 java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.PrintStream; - -// 备份工具类,用于将笔记数据备份到文本文件中。 + +// 备份工具类,用于将笔记数据导出为文本文件 public class BackupUtils { private static final String TAG = "BackupUtils"; - // 单例模式 + // 单例实例 private static BackupUtils sInstance; - - // 获取BackupUtils的单例,如果不存在则创建。 + + // 获取BackupUtils的单例实例 public static synchronized BackupUtils getInstance(Context context) { if (sInstance == null) { sInstance = new BackupUtils(context); } return sInstance; } - + /** - * 以下状态码用于表示备份或恢复的状态。 + * 以下状态码表示备份或恢复的状态 */ // SD卡未挂载 - public static final int STATE_SD_CARD_UNMOUONTED = 0; + public static final int STATE_SD_CARD_UNMOUONTED = 0; // 备份文件不存在 - public static final int STATE_BACKUP_FILE_NOT_EXIST = 1; - // 数据格式不正确,可能被其他程序更改 - public static final int STATE_DATA_DESTROIED = 2; - // 运行时异常导致备份或恢复失败 - public static final int STATE_SYSTEM_ERROR = 3; + public static final int STATE_BACKUP_FILE_NOT_EXIST = 1; + // 数据损坏或格式不正确 + public static final int STATE_DATA_DESTROIED = 2; + // 系统错误导致备份或恢复失败 + public static final int STATE_SYSTEM_ERROR = 3; // 备份或恢复成功 - public static final int STATE_SUCCESS = 4; - + public static final int STATE_SUCCESS = 4; + private TextExport mTextExport; - - // 私有构造函数,用于创建BackupUtils实例。 + + // 构造函数,初始化TextExport实例 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, @@ -115,56 +113,53 @@ public class BackupUtils { 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 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 = ""; } - - // 根据ID获取对应的格式字符串。 + + // 根据ID获取导出格式字符串 private String getFormat(int id) { return TEXT_FORMAT[id]; } - - /** - * 将指定文件夹ID的笔记导出到文本。 - */ + + // 导出指定文件夹下的笔记到文本文件 private void exportFolderToText(String folderId, PrintStream ps) { - // 查询属于该文件夹的笔记。 + // 查询属于该文件夹的笔记 Cursor notesCursor = mContext.getContentResolver().query(Notes.CONTENT_NOTE_URI, NOTE_PROJECTION, NoteColumns.PARENT_ID + "=?", new String[] { - folderId + folderId }, null); - + if (notesCursor != null) { if (notesCursor.moveToFirst()) { do { - // 打印笔记最后修改日期。 + // 打印笔记的最后修改日期 ps.println(String.format(getFormat(FORMAT_NOTE_DATE), DateFormat.format( mContext.getString(R.string.format_datetime_mdhm), notesCursor.getLong(NOTE_COLUMN_MODIFIED_DATE)))); - // 查询属于该笔记的数据。 + // 查询属于该笔记的数据 String noteId = notesCursor.getString(NOTE_COLUMN_ID); exportNoteToText(noteId, ps); } while (notesCursor.moveToNext()); @@ -172,16 +167,14 @@ public class BackupUtils { notesCursor.close(); } } - - /** - * 将指定ID的笔记导出到打印流。 - */ + + // 导出指定笔记到文本输出流 private void exportNoteToText(String noteId, PrintStream ps) { Cursor dataCursor = mContext.getContentResolver().query(Notes.CONTENT_DATA_URI, DATA_PROJECTION, DataColumns.NOTE_ID + "=?", new String[] { - noteId + noteId }, null); - + if (dataCursor != null) { if (dataCursor.moveToFirst()) { do { @@ -191,7 +184,7 @@ public class BackupUtils { 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)); @@ -216,7 +209,7 @@ public class BackupUtils { } dataCursor.close(); } - // 打印笔记之间的分隔线。 + // 打印笔记之间的分隔符 try { ps.write(new byte[] { Character.LINE_SEPARATOR, Character.LETTER_NUMBER @@ -225,36 +218,33 @@ public class BackupUtils { Log.e(TAG, e.toString()); } } - - /** - * 将笔记导出为用户可读的文本。 - */ + + // 将笔记数据导出为用户可读的文本文件 public int exportToText() { if (!externalStorageAvailable()) { - Log.d(TAG, "媒体未挂载"); + Log.d(TAG, "Media was not mounted"); return STATE_SD_CARD_UNMOUONTED; } - + PrintStream ps = getExportToTextPrintStream(); if (ps == null) { - Log.e(TAG, "获取打印流出错"); + Log.e(TAG, "get print stream error"); return STATE_SYSTEM_ERROR; } - // 首先导出文件夹及其笔记。 + // 首先导出文件夹及其笔记 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); - + + NoteColumns.ID + "=" + Notes.ID_CALL_RECORD_FOLDER, null, null); + if (folderCursor != null) { if (folderCursor.moveToFirst()) { do { // 打印文件夹名称 String folderName = ""; - if (folderCursor.getLong(NOTE_COLUMN_ID) == Notes.ID_CALL_RECORD_FOLDER) { + 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); @@ -268,22 +258,21 @@ public class BackupUtils { } folderCursor.close(); } - - // 导出根文件夹中的笔记。 - // 导出根文件夹中的笔记 + + // 导出根文件夹下的笔记 Cursor noteCursor = mContext.getContentResolver().query( Notes.CONTENT_NOTE_URI, NOTE_PROJECTION, - NoteColumns.TYPE + "=" + Notes.TYPE_NOTE + " AND " + NoteColumns.PARENT_ID + "=0", null, null); - + 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)))); - // 查询属于这条笔记的数据 + // 查询属于该笔记的数据 String noteId = noteCursor.getString(NOTE_COLUMN_ID); exportNoteToText(noteId, ps); } while (noteCursor.moveToNext()); @@ -291,20 +280,16 @@ public class BackupUtils { noteCursor.close(); } ps.close(); - - // 返回成功状态码 + return STATE_SUCCESS; } - - /** - * 获取指向导出文本文件的打印流 - */ + + // 获取指向导出文本文件的PrintStream private PrintStream getExportToTextPrintStream() { - // 生成存储导出数据的文本文件 File file = generateFileMountedOnSDcard(mContext, R.string.file_path, R.string.file_name_txt_format); if (file == null) { - Log.e(TAG, "创建导出文件失败"); + Log.e(TAG, "create file to exported failed"); return null; } mFileName = file.getName(); @@ -323,34 +308,33 @@ public class BackupUtils { return ps; } } - -/** - * 在SD卡上生成用于存储导入数据的文本文件 - */ -private static File generateFileMountedOnSDcard(Context context, int filePathResId, int fileNameFormatResId) { - StringBuilder sb = new StringBuilder(); - sb.append(Environment.getExternalStorageDirectory()); - sb.append(context.getString(filePathResId)); - File filedir = new File(sb.toString()); - 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(); + + // 生成用于存储导入数据的文本文件 + private static File generateFileMountedOnSDcard(Context context, int filePathResId, int fileNameFormatResId) { + StringBuilder sb = new StringBuilder(); + sb.append(Environment.getExternalStorageDirectory()); + sb.append(context.getString(filePathResId)); + File filedir = new File(sb.toString()); + 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(); } - return file; - } catch (SecurityException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); + + return null; } - - return null; -} +} \ No newline at end of file diff --git a/src/Notes-master/src/net/micode/notes/tool/DataUtils.java b/src/Notes-master/src/net/micode/notes/tool/DataUtils.java index d0c852a..7de4569 100644 --- a/src/Notes-master/src/net/micode/notes/tool/DataUtils.java +++ b/src/Notes-master/src/net/micode/notes/tool/DataUtils.java @@ -1,16 +1,17 @@ - /* * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) * - * 根据Apache License, Version 2.0(以下简称“许可证”)授权; - * 除非遵守许可证,否则不得使用此文件。 - * 你可以在以下网址获得许可证的副本: + * 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.tool; @@ -33,25 +34,25 @@ import net.micode.notes.ui.NotesListAdapter.AppWidgetAttribute; import java.util.ArrayList; import java.util.HashSet; -// 数据工具类,提供对笔记数据的操作函数 +// 数据工具类,提供批量删除笔记、移动笔记到文件夹等操作 public class DataUtils { public static final String TAG = "DataUtils"; // 批量删除笔记 public static boolean batchDeleteNotes(ContentResolver resolver, HashSet ids) { if (ids == null) { - Log.d(TAG, "id集合为空"); + Log.d(TAG, "the ids is null"); return true; } if (ids.size() == 0) { - Log.d(TAG, "id集合中没有元素"); + 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, "不要删除系统根文件夹"); + if(id == Notes.ID_ROOT_FOLDER) { + Log.e(TAG, "Don't delete system folder root"); continue; } ContentProviderOperation.Builder builder = ContentProviderOperation @@ -61,7 +62,7 @@ public class DataUtils { try { ContentProviderResult[] results = resolver.applyBatch(Notes.AUTHORITY, operationList); if (results == null || results.length == 0 || results[0] == null) { - Log.d(TAG, "删除笔记失败, ids:" + ids.toString()); + Log.d(TAG, "delete notes failed, ids:" + ids.toString()); return false; } return true; @@ -86,7 +87,7 @@ public class DataUtils { public static boolean batchMoveToFolder(ContentResolver resolver, HashSet ids, long folderId) { if (ids == null) { - Log.d(TAG, "id集合为空"); + Log.d(TAG, "the ids is null"); return true; } @@ -102,7 +103,7 @@ public class DataUtils { try { ContentProviderResult[] results = resolver.applyBatch(Notes.AUTHORITY, operationList); if (results == null || results.length == 0 || results[0] == null) { - Log.d(TAG, "移动笔记失败, ids:" + ids.toString()); + Log.d(TAG, "delete notes failed, ids:" + ids.toString()); return false; } return true; @@ -115,22 +116,22 @@ public class DataUtils { } /** - * 获取除了系统文件夹外的所有文件夹数量 + * 获取用户文件夹(非系统文件夹)的数量 */ public static int getUserFolderCount(ContentResolver resolver) { - Cursor cursor = resolver.query(Notes.CONTENT_NOTE_URI, + 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) }, + new String[] { String.valueOf(Notes.TYPE_FOLDER), String.valueOf(Notes.ID_TRASH_FOLER)}, null); int count = 0; - if (cursor != null) { - if (cursor.moveToFirst()) { + if(cursor != null) { + if(cursor.moveToFirst()) { try { count = cursor.getInt(0); } catch (IndexOutOfBoundsException e) { - Log.e(TAG, "获取文件夹数量失败:" + e.toString()); + Log.e(TAG, "get folder count failed:" + e.toString()); } finally { cursor.close(); } @@ -139,12 +140,12 @@ public class DataUtils { return count; } - // 检查笔记在数据库中是否可见 + // 检查指定类型的笔记是否可见 public static boolean visibleInNoteDatabase(ContentResolver resolver, long noteId, int type) { Cursor cursor = resolver.query(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, noteId), null, NoteColumns.TYPE + "=? AND " + NoteColumns.PARENT_ID + "<>" + Notes.ID_TRASH_FOLER, - new String[] { String.valueOf(type) }, + new String [] {String.valueOf(type)}, null); boolean exist = false; @@ -157,7 +158,7 @@ public class DataUtils { 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); @@ -172,7 +173,7 @@ public class DataUtils { 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); @@ -187,16 +188,16 @@ public class DataUtils { 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 + "=?", + " 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) { + if(cursor != null) { + if(cursor.getCount() > 0) { exist = true; } cursor.close(); @@ -204,7 +205,7 @@ public class DataUtils { 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 }, @@ -234,80 +235,74 @@ public class DataUtils { // 根据笔记ID获取通话号码 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); - - - - + 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); // 返回获取到的字符串 + return cursor.getString(0); } catch (IndexOutOfBoundsException e) { - Log.e(TAG, "获取通话号码失败:" + e.toString()); // 记录异常信息 + Log.e(TAG, "Get call number fails " + e.toString()); } finally { - cursor.close(); // 确保游标被关闭 + cursor.close(); } } - return ""; // 如果失败,返回空字符串 + return ""; + } - // 根据电话号码和通话日期获取笔记ID + // 根据通话号码和通话日期获取笔记ID public static long getNoteIdByPhoneNumberAndCallDate(ContentResolver resolver, String phoneNumber, long callDate) { Cursor cursor = resolver.query(Notes.CONTENT_DATA_URI, - new String[] { CallNote.NOTE_ID }, + 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 }, + + CallNote.PHONE_NUMBER + ",?)", + new String [] { String.valueOf(callDate), CallNote.CONTENT_ITEM_TYPE, phoneNumber }, null); - // 如果游标不为空并且移动到第一行,则尝试获取笔记ID if (cursor != null) { if (cursor.moveToFirst()) { try { - return cursor.getLong(0); // 返回获取到的长整型数 + return cursor.getLong(0); } catch (IndexOutOfBoundsException e) { - Log.e(TAG, "获取通话笔记ID失败:" + e.toString()); // 记录异常信息 + Log.e(TAG, "Get call note id fails " + e.toString()); } } - cursor.close(); // 确保游标被关闭 + cursor.close(); } - return 0; // 如果失败,返回0 + return 0; } - // 根据笔记ID获取摘要 + // 根据笔记ID获取笔记摘要 public static String getSnippetById(ContentResolver resolver, long noteId) { Cursor cursor = resolver.query(Notes.CONTENT_NOTE_URI, - new String[] { NoteColumns.SNIPPET }, + new String [] { NoteColumns.SNIPPET }, NoteColumns.ID + "=?", - new String[] { String.valueOf(noteId) }, + new String [] { String.valueOf(noteId)}, null); - // 如果游标不为空并且移动到第一行,则尝试获取摘要 if (cursor != null) { String snippet = ""; if (cursor.moveToFirst()) { - snippet = cursor.getString(0); // 获取摘要 + snippet = cursor.getString(0); } - cursor.close(); // 确保游标被关闭 - return snippet; // 返回摘要 + cursor.close(); + return snippet; } - throw new IllegalArgumentException("未找到ID为:" + noteId + "的笔记"); // 如果失败,抛出异常 + 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'); // 查找换行符 + snippet = snippet.trim(); + int index = snippet.indexOf('\n'); if (index != -1) { - snippet = snippet.substring(0, index); // 截取换行符之前的字符串 + snippet = snippet.substring(0, index); } } - return snippet; // 返回格式化后的摘要 + return snippet; } -} +} \ No newline at end of file diff --git a/src/Notes-master/src/net/micode/notes/tool/GTaskStringUtils.java b/src/Notes-master/src/net/micode/notes/tool/GTaskStringUtils.java index 1b42c6f..8903dd7 100644 --- a/src/Notes-master/src/net/micode/notes/tool/GTaskStringUtils.java +++ b/src/Notes-master/src/net/micode/notes/tool/GTaskStringUtils.java @@ -13,148 +13,102 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - + package net.micode.notes.tool; - -// GTaskStringUtils类,主要用于定义一些与Google Tasks相关操作中使用的字符串常量,方便在代码中统一引用和管理 + +// 此类用于定义和存储GTask相关的JSON字段名常量 public class GTaskStringUtils { - - // 表示操作的唯一ID的JSON键名,用于在与Google Tasks交互的JSON数据中标识某个具体操作的ID + public final static String GTASK_JSON_ACTION_ID = "action_id"; - - // 表示操作列表的JSON键名,用于在与Google Tasks交互的JSON数据中存放一组操作的集合(通常是一个JSON数组) + public final static String GTASK_JSON_ACTION_LIST = "action_list"; - - // 表示操作类型的JSON键名,用于在与Google Tasks交互的JSON数据中指定某个操作具体是什么类型的操作,比如创建、获取、移动等 + 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"; - - // 表示创建者ID的JSON键名,用于在与Google Tasks交互的JSON数据中存放创建某个任务、任务列表等的用户ID信息 + public final static String GTASK_JSON_CREATOR_ID = "creator_id"; - - // 表示子实体的JSON键名,可能用于在涉及包含子元素的结构(如任务列表包含多个任务等情况)时,标识子实体相关信息 + public final static String GTASK_JSON_CHILD_ENTITY = "child_entity"; - - // 表示客户端版本号的JSON键名,用于在与Google Tasks交互的JSON数据中告知服务器当前客户端的版本信息,便于进行兼容性等相关处理 + public final static String GTASK_JSON_CLIENT_VERSION = "client_version"; - - // 表示是否完成的JSON键名,可能用于任务等实体中,标识该任务是否已经完成的状态信息 + public final static String GTASK_JSON_COMPLETED = "completed"; - - // 表示当前列表ID的JSON键名,可能用于在涉及多列表切换、关联等场景时,标识当前所在的任务列表的ID + public final static String GTASK_JSON_CURRENT_LIST_ID = "current_list_id"; - - // 表示默认列表ID的JSON键名,用于标识某个用户、某个应用场景下的默认任务列表的ID信息 + public final static String GTASK_JSON_DEFAULT_LIST_ID = "default_list_id"; - - // 表示是否已删除的JSON键名,用于在任务、任务列表等实体中标识其是否已经被删除的状态信息 + public final static String GTASK_JSON_DELETED = "deleted"; - - // 表示目标列表的JSON键名,在进行移动操作等涉及改变所属列表的操作时,用于指定要移动到的目标任务列表的ID + public final static String GTASK_JSON_DEST_LIST = "dest_list"; - - // 表示目标父级的JSON键名,在进行移动操作、关联操作等涉及改变父级元素的情况时,用于指定要移动到或关联的目标父级元素的相关信息(比如任务列表等) + public final static String GTASK_JSON_DEST_PARENT = "dest_parent"; - - // 表示目标父级类型的JSON键名,可能用于进一步明确目标父级元素的具体类型(例如是任务列表类型还是其他类型等) + public final static String GTASK_JSON_DEST_PARENT_TYPE = "dest_parent_type"; - - // 表示实体差异的JSON键名,可能用于在对比、更新实体时,标识实体之间发生变化的部分相关信息 + public final static String GTASK_JSON_ENTITY_DELTA = "entity_delta"; - - // 表示实体类型的JSON键名,用于在与Google Tasks交互的JSON数据中明确某个实体(如任务、任务列表等)具体是什么类型 + public final static String GTASK_JSON_ENTITY_TYPE = "entity_type"; - - // 表示是否获取已删除的JSON键名,在进行查询操作时,用于指定是否要获取已经被标记为删除的任务、任务列表等信息 + public final static String GTASK_JSON_GET_DELETED = "get_deleted"; - - // 表示唯一ID的JSON键名,通常用于标识任务、任务列表等实体在Google Tasks系统中的全局唯一标识符 + public final static String GTASK_JSON_ID = "id"; - - // 表示索引的JSON键名,可能用于在任务列表中标识某个任务的排列顺序等索引相关信息 + public final static String GTASK_JSON_INDEX = "index"; - - // 表示最后修改时间的JSON键名,用于记录任务、任务列表等实体最后一次被修改的时间信息,便于进行同步、更新等操作时的判断 + public final static String GTASK_JSON_LAST_MODIFIED = "last_modified"; - - // 表示最新同步点的JSON键名,可能用于记录与Google Tasks进行数据同步时的最新同步时间点等相关信息,便于后续判断同步范围、增量等情况 + public final static String GTASK_JSON_LATEST_SYNC_POINT = "latest_sync_point"; - - // 表示列表ID的JSON键名,常用于标识某个具体的任务列表的ID信息,与其他相关操作配合使用,比如获取某个列表下的任务等操作 + public final static String GTASK_JSON_LIST_ID = "list_id"; - - // 表示任务列表(复数形式)的JSON键名,用于在与Google Tasks交互的JSON数据中存放多个任务列表信息的集合(通常是一个JSON数组) + public final static String GTASK_JSON_LISTS = "lists"; - - // 表示名称的JSON键名,用于任务、任务列表等实体中,存放它们的名称信息,方便展示、识别等操作 + public final static String GTASK_JSON_NAME = "name"; - - // 表示新ID的JSON键名,可能在某些创建、更新操作后,用于存放新生成的实体ID信息(比如创建任务后返回的新任务ID等情况) + public final static String GTASK_JSON_NEW_ID = "new_id"; - - // 表示备注(笔记)的JSON键名,可能用于存放与任务相关的一些备注、说明等文本信息 + public final static String GTASK_JSON_NOTES = "notes"; - - // 表示父级ID的JSON键名,用于在任务、任务列表等实体中标识其所属的父级元素的ID信息,建立层级关系 + public final static String GTASK_JSON_PARENT_ID = "parent_id"; - - // 表示前一个兄弟节点(任务等)ID的JSON键名,在任务列表中用于标识某个任务之前相邻的兄弟任务的ID,常用于排序、移动等操作场景 + public final static String GTASK_JSON_PRIOR_SIBLING_ID = "prior_sibling_id"; - - // 表示操作结果的JSON键名,在执行某些操作(如批量操作等)后,用于存放操作的结果信息(通常是一个JSON数组) + public final static String GTASK_JSON_RESULTS = "results"; - - // 表示源列表的JSON键名,在进行移动操作等涉及改变所属列表的操作时,用于指定操作前所在的原始任务列表的ID + public final static String GTASK_JSON_SOURCE_LIST = "source_list"; - - // 表示任务(复数形式)的JSON键名,用于在与Google Tasks交互的JSON数据中存放多个任务信息的集合(通常是一个JSON数组) + public final static String GTASK_JSON_TASKS = "tasks"; - - // 表示类型的JSON键名,用于在与Google - // Tasks交互的JSON数据中明确某个实体(如任务、任务列表等)具体是什么类型,和GTASK_JSON_ENTITY_TYPE作用类似但使用场景可能稍有不同 + 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"; - - // 表示用户的JSON键名,可能用于存放与操作相关的用户信息,比如执行操作的用户账号等情况 + public final static String GTASK_JSON_USER = "user"; - - // MIUI系统中笔记相关的文件夹前缀字符串,用于在名称等地方标识该文件夹是属于MIUI笔记应用相关的文件夹 + 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"; - - // 表示元数据中Google Tasks ID的键名,可能用于在元数据结构中关联对应的Google Tasks实体的ID信息 + 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/src/Notes-master/src/net/micode/notes/tool/ResourceParser.java b/src/Notes-master/src/net/micode/notes/tool/ResourceParser.java index d98a327..b813795 100644 --- a/src/Notes-master/src/net/micode/notes/tool/ResourceParser.java +++ b/src/Notes-master/src/net/micode/notes/tool/ResourceParser.java @@ -13,71 +13,66 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - -// 该类所属的包名,表明这个类位于net.micode.notes.tool包下,用于提供一些资源相关的解析和获取功能 + package net.micode.notes.tool; - + import android.content.Context; import android.preference.PreferenceManager; - + import net.micode.notes.R; import net.micode.notes.ui.NotesPreferenceActivity; - -// ResourceParser类,主要用于对应用中的各种资源(如背景图片、文本样式等)进行管理和提供获取方法,方便在不同的界面等场景中使用 + 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; - - // 定义默认的背景颜色常量,其值为黄色(对应上面定义的颜色常量中的YELLOW),表示在没有特殊设置时默认使用的背景颜色 + + // 定义笔记背景颜色的常量 + 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; - - // 定义默认的字体大小常量,其值为中等大小(对应上面定义的文本大小常量中的TEXT_MEDIUM),表示在没有特殊设置时默认使用的字体大小 + + // 定义笔记文本大小的常量 + 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; - - // 内部静态类NoteBgResources,用于管理笔记编辑界面相关的背景资源(图片资源) + + // 用于获取编辑笔记时的背景资源 public static class NoteBgResources { - // 定义一个私有的静态整型数组,存储笔记编辑界面背景图片资源的ID,对应不同颜色的编辑界面背景图片,顺序与前面定义的颜色常量顺序一致 - 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 + 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 }; - - // 定义一个私有的静态整型数组,存储笔记编辑界面标题背景图片资源的ID,对应不同颜色的编辑界面标题背景图片,顺序与前面定义的颜色常量顺序一致 - 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 + + 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 }; - - // 根据传入的颜色ID(对应前面定义的颜色常量)获取笔记编辑界面的背景图片资源ID,方便在设置编辑界面背景时使用 + + // 根据ID获取编辑笔记的背景资源 public static int getNoteBgResource(int id) { return BG_EDIT_RESOURCES[id]; } - - // 根据传入的颜色ID(对应前面定义的颜色常量)获取笔记编辑界面标题的背景图片资源ID,方便在设置编辑界面标题背景时使用 + + // 根据ID获取编辑笔记标题的背景资源 public static int getNoteTitleBgResource(int id) { return BG_EDIT_TITLE_RESOURCES[id]; } } - - // 根据传入的上下文(Context)获取默认的背景图片ID,逻辑是先检查是否在偏好设置中设置了自定义背景颜色(通过特定的偏好设置键来判断), - // 如果设置了,则随机选择一个背景资源ID(从NoteBgResources中定义的资源数组长度范围内随机),否则返回默认的背景颜色ID(BG_DEFAULT_COLOR) + + // 获取默认笔记背景颜色ID public static int getDefaultBgId(Context context) { if (PreferenceManager.getDefaultSharedPreferences(context).getBoolean( NotesPreferenceActivity.PREFERENCE_SET_BG_COLOR_KEY, false)) { @@ -86,114 +81,106 @@ public class ResourceParser { return BG_DEFAULT_COLOR; } } - - // 内部静态类NoteItemBgResources,用于管理笔记列表项相关的背景资源(图片资源) + + // 用于获取笔记列表项的背景资源 public static class NoteItemBgResources { - // 定义一个私有的静态整型数组,存储笔记列表项第一个元素(可能是列表头部等情况)的背景图片资源ID,对应不同颜色的背景图片,顺序与前面定义的颜色常量顺序一致 - 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_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 }; - - // 定义一个私有的静态整型数组,存储笔记列表项中间元素(正常的列表项情况)的背景图片资源ID,对应不同颜色的背景图片,顺序与前面定义的颜色常量顺序一致 - 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_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, }; - - // 定义一个私有的静态整型数组,存储笔记列表项最后一个元素(可能是列表尾部等情况)的背景图片资源ID,对应不同颜色的背景图片,顺序与前面定义的颜色常量顺序一致 - 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_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, }; - - // 定义一个私有的静态整型数组,存储单个笔记(可能是独立展示等情况)的背景图片资源ID,对应不同颜色的背景图片,顺序与前面定义的颜色常量顺序一致 - 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 + + 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 }; - - // 根据传入的颜色ID(对应前面定义的颜色常量)获取笔记列表项第一个元素的背景图片资源ID,方便在设置列表项背景时使用 + + // 根据ID获取笔记列表第一项的背景资源 public static int getNoteBgFirstRes(int id) { return BG_FIRST_RESOURCES[id]; } - - // 根据传入的颜色ID(对应前面定义的颜色常量)获取笔记列表项最后一个元素的背景图片资源ID,方便在设置列表项背景时使用 + + // 根据ID获取笔记列表最后一项的背景资源 public static int getNoteBgLastRes(int id) { return BG_LAST_RESOURCES[id]; } - - // 根据传入的颜色ID(对应前面定义的颜色常量)获取单个笔记的背景图片资源ID,方便在设置单个笔记背景时使用 + + // 根据ID获取单个笔记项的背景资源 public static int getNoteBgSingleRes(int id) { return BG_SINGLE_RESOURCES[id]; } - - // 根据传入的颜色ID(对应前面定义的颜色常量)获取笔记列表项中间元素(正常列表项)的背景图片资源ID,方便在设置列表项背景时使用 + + // 根据ID获取笔记列表中间项的背景资源 public static int getNoteBgNormalRes(int id) { return BG_NORMAL_RESOURCES[id]; } - - // 获取文件夹的背景图片资源ID,用于设置文件夹在列表等展示场景中的背景图片 + + // 获取文件夹背景资源 public static int getFolderBgRes() { return R.drawable.list_folder; } } - - // 内部静态类WidgetBgResources,用于管理桌面小部件相关的背景资源(图片资源) + + // 用于获取小部件的背景资源 public static class WidgetBgResources { - // 定义一个私有的静态整型数组,存储2x尺寸桌面小部件的背景图片资源ID,对应不同颜色的背景图片,顺序与前面定义的颜色常量顺序一致 - 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, + 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, }; - - // 根据传入的颜色ID(对应前面定义的颜色常量)获取2x尺寸桌面小部件的背景图片资源ID,方便在设置小部件背景时使用 + + // 根据ID获取2x小部件的背景资源 public static int getWidget2xBgResource(int id) { return BG_2X_RESOURCES[id]; } - - // 定义一个私有的静态整型数组,存储4x尺寸桌面小部件的背景图片资源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 + + 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 }; - - // 根据传入的颜色ID(对应前面定义的颜色常量)获取4x尺寸桌面小部件的背景图片资源ID,方便在设置小部件背景时使用 + + // 根据ID获取4x小部件的背景资源 public static int getWidget4xBgResource(int id) { return BG_4X_RESOURCES[id]; } } - - // 内部静态类TextAppearanceResources,用于管理文本外观相关的资源(主要是文本样式资源) + + // 用于获取文本外观资源 public static class TextAppearanceResources { - // 定义一个私有的静态整型数组,存储不同文本外观样式的资源ID,对应不同大小的文本外观样式,顺序与前面定义的文本大小常量顺序有一定关联 - private final static int[] TEXTAPPEARANCE_RESOURCES = new int[] { - R.style.TextAppearanceNormal, - R.style.TextAppearanceMedium, - R.style.TextAppearanceLarge, - R.style.TextAppearanceSuper + private final static int [] TEXTAPPEARANCE_RESOURCES = new int [] { + R.style.TextAppearanceNormal, + R.style.TextAppearanceMedium, + R.style.TextAppearanceLarge, + R.style.TextAppearanceSuper }; - - // 根据传入的文本外观资源ID获取对应的文本外观资源ID,如果传入的ID大于资源数组的长度(可能是由于存储或获取出现异常情况), - // 则返回默认的字体大小对应的资源ID(BG_DEFAULT_FONT_SIZE),以避免出现资源获取错误 + + // 根据ID获取文本外观资源 public static int getTexAppearanceResource(int id) { /** * HACKME: Fix bug of store the resource id in shared preference. @@ -205,8 +192,8 @@ public class ResourceParser { } return TEXTAPPEARANCE_RESOURCES[id]; } - - // 获取文本外观资源数组的长度,可用于判断资源数量或者进行一些边界相关的操作判断等 + + // 获取文本外观资源的数量 public static int getResourcesSize() { return TEXTAPPEARANCE_RESOURCES.length; } diff --git a/src/Notes-master/src/net/micode/notes/ui/AlarmAlertActivity.java b/src/Notes-master/src/net/micode/notes/ui/AlarmAlertActivity.java index 85723be..5f40071 100644 --- a/src/Notes-master/src/net/micode/notes/ui/AlarmAlertActivity.java +++ b/src/Notes-master/src/net/micode/notes/ui/AlarmAlertActivity.java @@ -39,21 +39,29 @@ import net.micode.notes.tool.DataUtils; import java.io.IOException; - +/** + * 闹钟提醒活动类,继承自Activity,实现了OnClickListener和OnDismissListener接口。 + * 该活动用于在闹钟响起时显示提醒对话框,并播放默认的闹钟声音。 + */ public class AlarmAlertActivity extends Activity implements OnClickListener, OnDismissListener { - private long mNoteId; - private String mSnippet; - private static final int SNIPPET_PREW_MAX_LEN = 60; - MediaPlayer mPlayer; - + private long mNoteId; // 保存笔记的ID + private String mSnippet; // 保存笔记的摘要 + private static final int SNIPPET_PREW_MAX_LEN = 60; // 笔记摘要的最大长度 + MediaPlayer mPlayer; // 用于播放闹钟声音的MediaPlayer实例 + + /** + * 创建活动时调用的方法。 + * @param savedInstanceState 保存的实例状态数据包 + */ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - requestWindowFeature(Window.FEATURE_NO_TITLE); + requestWindowFeature(Window.FEATURE_NO_TITLE); // 请求无标题窗口 - final Window win = getWindow(); - win.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); + final Window win = getWindow(); // 获取当前窗口 + win.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); // 设置窗口在锁屏时显示 + // 如果屏幕未点亮,则添加更多标志以保持屏幕点亮并允许在锁屏时操作 if (!isScreenOn()) { win.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON @@ -61,98 +69,123 @@ public class AlarmAlertActivity extends Activity implements OnClickListener, OnD | WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR); } - Intent intent = getIntent(); + Intent intent = getIntent(); // 获取启动该活动的Intent try { - mNoteId = Long.valueOf(intent.getData().getPathSegments().get(1)); - mSnippet = DataUtils.getSnippetById(this.getContentResolver(), mNoteId); + mNoteId = Long.valueOf(intent.getData().getPathSegments().get(1)); // 从Intent中提取笔记ID + mSnippet = DataUtils.getSnippetById(this.getContentResolver(), mNoteId); // 根据笔记ID获取摘要 + // 如果摘要长度超过最大限制,则截取前SNIPPET_PREW_MAX_LEN个字符并添加省略号 mSnippet = mSnippet.length() > SNIPPET_PREW_MAX_LEN ? mSnippet.substring(0, SNIPPET_PREW_MAX_LEN) + getResources().getString(R.string.notelist_string_info) : mSnippet; } catch (IllegalArgumentException e) { - e.printStackTrace(); - return; + e.printStackTrace(); // 打印异常信息 + return; // 如果发生异常,则结束该方法 } - mPlayer = new MediaPlayer(); + mPlayer = new MediaPlayer(); // 创建MediaPlayer实例 + // 检查数据库中是否存在指定ID的笔记 if (DataUtils.visibleInNoteDatabase(getContentResolver(), mNoteId, Notes.TYPE_NOTE)) { - showActionDialog(); - playAlarmSound(); + showActionDialog(); // 显示操作对话框 + playAlarmSound(); // 播放闹钟声音 } else { - finish(); + finish(); // 如果笔记不存在,则结束该活动 } } + /** + * 检查屏幕是否点亮。 + * @return 如果屏幕点亮则返回true,否则返回false + */ private boolean isScreenOn() { - PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); - return pm.isScreenOn(); + PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); // 获取电源管理服务 + return pm.isScreenOn(); // 返回屏幕是否点亮的状态 } + /** + * 播放闹钟声音的方法。 + */ private void playAlarmSound() { + // 获取实际的默认闹钟铃声URI Uri url = RingtoneManager.getActualDefaultRingtoneUri(this, RingtoneManager.TYPE_ALARM); + // 获取当前设置的静音模式影响的音频流类型 int silentModeStreams = Settings.System.getInt(getContentResolver(), Settings.System.MODE_RINGER_STREAMS_AFFECTED, 0); + // 如果静音模式影响了闹钟音频流,则设置MediaPlayer的音频流类型为silentModeStreams + // 否则,设置为AudioManager.STREAM_ALARM if ((silentModeStreams & (1 << AudioManager.STREAM_ALARM)) != 0) { mPlayer.setAudioStreamType(silentModeStreams); } else { mPlayer.setAudioStreamType(AudioManager.STREAM_ALARM); } try { - mPlayer.setDataSource(this, url); - mPlayer.prepare(); - mPlayer.setLooping(true); - mPlayer.start(); + mPlayer.setDataSource(this, url); // 设置MediaPlayer的数据源为闹钟铃声URI + mPlayer.prepare(); // 准备MediaPlayer + mPlayer.setLooping(true); // 设置MediaPlayer循环播放 + mPlayer.start(); // 开始播放闹钟声音 } catch (IllegalArgumentException e) { - // TODO Auto-generated catch block - e.printStackTrace(); + e.printStackTrace(); // 打印异常信息 } catch (SecurityException e) { - // TODO Auto-generated catch block - e.printStackTrace(); + e.printStackTrace(); // 打印异常信息 } catch (IllegalStateException e) { - // TODO Auto-generated catch block - e.printStackTrace(); + e.printStackTrace(); // 打印异常信息 } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); + e.printStackTrace(); // 打印异常信息 } } + /** + * 显示操作对话框的方法。 + */ private void showActionDialog() { - AlertDialog.Builder dialog = new AlertDialog.Builder(this); - dialog.setTitle(R.string.app_name); - dialog.setMessage(mSnippet); - dialog.setPositiveButton(R.string.notealert_ok, this); + AlertDialog.Builder dialog = new AlertDialog.Builder(this); // 创建AlertDialog.Builder实例 + dialog.setTitle(R.string.app_name); // 设置对话框标题为应用名称 + dialog.setMessage(mSnippet); // 设置对话框消息为笔记摘要 + dialog.setPositiveButton(R.string.notealert_ok, this); // 设置确定按钮及其监听器 + // 如果屏幕已点亮,则添加进入按钮及其监听器 if (isScreenOn()) { dialog.setNegativeButton(R.string.notealert_enter, this); } - dialog.show().setOnDismissListener(this); + dialog.show().setOnDismissListener(this); // 显示对话框并设置对话框消失监听器 } + /** + * 实现OnClickListener接口的方法,处理对话框按钮点击事件。 + * @param dialog 触发点击事件的对话框 + * @param which 点击的按钮的ID + */ public void onClick(DialogInterface dialog, int which) { switch (which) { case DialogInterface.BUTTON_NEGATIVE: - Intent intent = new Intent(this, NoteEditActivity.class); - intent.setAction(Intent.ACTION_VIEW); - intent.putExtra(Intent.EXTRA_UID, mNoteId); - startActivity(intent); + Intent intent = new Intent(this, NoteEditActivity.class); // 创建Intent准备跳转到笔记编辑活动 + intent.setAction(Intent.ACTION_VIEW); // 设置Intent动作类型为ACTION_VIEW + intent.putExtra(Intent.EXTRA_UID, mNoteId); // 添加笔记ID作为附加信息 + startActivity(intent); // 启动笔记编辑活动 break; default: break; } } + /** + * 实现OnDismissListener接口的方法,处理对话框消失事件。 + * @param dialog 消失的对话框 + */ public void onDismiss(DialogInterface dialog) { - stopAlarmSound(); - finish(); + stopAlarmSound(); // 停止播放闹钟声音 + finish(); // 结束该活动 } + /** + * 停止并释放MediaPlayer的方法。 + */ private void stopAlarmSound() { if (mPlayer != null) { - mPlayer.stop(); - mPlayer.release(); - mPlayer = null; + mPlayer.stop(); // 停止MediaPlayer播放 + mPlayer.release(); // 释放MediaPlayer资源 + mPlayer = null; // 将mPlayer置为null } } } diff --git a/src/Notes-master/src/net/micode/notes/ui/AlarmInitReceiver.java b/src/Notes-master/src/net/micode/notes/ui/AlarmInitReceiver.java index f221202..f8bb98a 100644 --- a/src/Notes-master/src/net/micode/notes/ui/AlarmInitReceiver.java +++ b/src/Notes-master/src/net/micode/notes/ui/AlarmInitReceiver.java @@ -13,9 +13,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - + package net.micode.notes.ui; - + import android.app.AlarmManager; import android.app.PendingIntent; import android.content.BroadcastReceiver; @@ -23,21 +23,24 @@ import android.content.ContentUris; import android.content.Context; import android.content.Intent; import android.database.Cursor; - + import net.micode.notes.data.Notes; import net.micode.notes.data.Notes.NoteColumns; - - + +// 该广播接收器用于初始化闹钟,查询即将提醒的笔记并设置闹钟 public class AlarmInitReceiver extends BroadcastReceiver { - + + // 查询笔记数据库时使用的列投影 private static final String [] PROJECTION = new String [] { NoteColumns.ID, NoteColumns.ALERTED_DATE }; - + + // 列索引常量,用于从查询结果中提取数据 private static final int COLUMN_ID = 0; private static final int COLUMN_ALERTED_DATE = 1; - + + // 接收广播时执行的方法,查询数据库并设置闹钟 @Override public void onReceive(Context context, Intent intent) { long currentDate = System.currentTimeMillis(); @@ -46,7 +49,7 @@ public class AlarmInitReceiver extends BroadcastReceiver { NoteColumns.ALERTED_DATE + ">? AND " + NoteColumns.TYPE + "=" + Notes.TYPE_NOTE, new String[] { String.valueOf(currentDate) }, null); - + if (c != null) { if (c.moveToFirst()) { do { @@ -62,4 +65,4 @@ public class AlarmInitReceiver extends BroadcastReceiver { c.close(); } } -} +} \ No newline at end of file diff --git a/src/Notes-master/src/net/micode/notes/ui/AlarmReceiver.java b/src/Notes-master/src/net/micode/notes/ui/AlarmReceiver.java index 54e503b..3d2b949 100644 --- a/src/Notes-master/src/net/micode/notes/ui/AlarmReceiver.java +++ b/src/Notes-master/src/net/micode/notes/ui/AlarmReceiver.java @@ -13,18 +13,23 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - + package net.micode.notes.ui; - + import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; - + +// 一个继承自BroadcastReceiver的类,用于接收闹钟触发的广播 public class AlarmReceiver extends BroadcastReceiver { + // 当接收到广播时,该方法会被调用 @Override public void onReceive(Context context, Intent intent) { + // 设置Intent的目标Activity为AlarmAlertActivity intent.setClass(context, AlarmAlertActivity.class); + // 添加标志以允许启动新的Activity intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + // 启动AlarmAlertActivity context.startActivity(intent); } -} +} \ No newline at end of file diff --git a/src/Notes-master/src/net/micode/notes/ui/DateTimePicker.java b/src/Notes-master/src/net/micode/notes/ui/DateTimePicker.java index 496b0cd..9601ff7 100644 --- a/src/Notes-master/src/net/micode/notes/ui/DateTimePicker.java +++ b/src/Notes-master/src/net/micode/notes/ui/DateTimePicker.java @@ -1,485 +1,745 @@ -/* - * 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.ui; - -import java.text.DateFormatSymbols; -import java.util.Calendar; - -import net.micode.notes.R; - - -import android.content.Context; -import android.text.format.DateFormat; -import android.view.View; -import android.widget.FrameLayout; -import android.widget.NumberPicker; - -public class DateTimePicker extends FrameLayout { - - private static final boolean DEFAULT_ENABLE_STATE = true; - - private static final int HOURS_IN_HALF_DAY = 12; - private static final int HOURS_IN_ALL_DAY = 24; - private static final int DAYS_IN_ALL_WEEK = 7; - private static final int DATE_SPINNER_MIN_VAL = 0; - private static final int DATE_SPINNER_MAX_VAL = DAYS_IN_ALL_WEEK - 1; - private static final int HOUR_SPINNER_MIN_VAL_24_HOUR_VIEW = 0; - private static final int HOUR_SPINNER_MAX_VAL_24_HOUR_VIEW = 23; - private static final int HOUR_SPINNER_MIN_VAL_12_HOUR_VIEW = 1; - private static final int HOUR_SPINNER_MAX_VAL_12_HOUR_VIEW = 12; - private static final int MINUT_SPINNER_MIN_VAL = 0; - private static final int MINUT_SPINNER_MAX_VAL = 59; - private static final int AMPM_SPINNER_MIN_VAL = 0; - private static final int AMPM_SPINNER_MAX_VAL = 1; - - private final NumberPicker mDateSpinner; - private final NumberPicker mHourSpinner; - private final NumberPicker mMinuteSpinner; - private final NumberPicker mAmPmSpinner; - private Calendar mDate; - - private String[] mDateDisplayValues = new String[DAYS_IN_ALL_WEEK]; - - private boolean mIsAm; - - private boolean mIs24HourView; - - private boolean mIsEnabled = DEFAULT_ENABLE_STATE; - - private boolean mInitialising; - - private OnDateTimeChangedListener mOnDateTimeChangedListener; - - private NumberPicker.OnValueChangeListener mOnDateChangedListener = new NumberPicker.OnValueChangeListener() { - @Override - public void onValueChange(NumberPicker picker, int oldVal, int newVal) { - mDate.add(Calendar.DAY_OF_YEAR, newVal - oldVal); - updateDateControl(); - onDateTimeChanged(); - } - }; - - private NumberPicker.OnValueChangeListener mOnHourChangedListener = new NumberPicker.OnValueChangeListener() { - @Override - public void onValueChange(NumberPicker picker, int oldVal, int newVal) { - boolean isDateChanged = false; - Calendar cal = Calendar.getInstance(); - if (!mIs24HourView) { - if (!mIsAm && oldVal == HOURS_IN_HALF_DAY - 1 && newVal == HOURS_IN_HALF_DAY) { - cal.setTimeInMillis(mDate.getTimeInMillis()); - cal.add(Calendar.DAY_OF_YEAR, 1); - isDateChanged = true; - } else if (mIsAm && oldVal == HOURS_IN_HALF_DAY && newVal == HOURS_IN_HALF_DAY - 1) { - cal.setTimeInMillis(mDate.getTimeInMillis()); - cal.add(Calendar.DAY_OF_YEAR, -1); - isDateChanged = true; - } - if (oldVal == HOURS_IN_HALF_DAY - 1 && newVal == HOURS_IN_HALF_DAY || - oldVal == HOURS_IN_HALF_DAY && newVal == HOURS_IN_HALF_DAY - 1) { - mIsAm = !mIsAm; - updateAmPmControl(); - } - } else { - if (oldVal == HOURS_IN_ALL_DAY - 1 && newVal == 0) { - cal.setTimeInMillis(mDate.getTimeInMillis()); - cal.add(Calendar.DAY_OF_YEAR, 1); - isDateChanged = true; - } else if (oldVal == 0 && newVal == HOURS_IN_ALL_DAY - 1) { - cal.setTimeInMillis(mDate.getTimeInMillis()); - cal.add(Calendar.DAY_OF_YEAR, -1); - isDateChanged = true; - } - } - int newHour = mHourSpinner.getValue() % HOURS_IN_HALF_DAY + (mIsAm ? 0 : HOURS_IN_HALF_DAY); - mDate.set(Calendar.HOUR_OF_DAY, newHour); - onDateTimeChanged(); - if (isDateChanged) { - setCurrentYear(cal.get(Calendar.YEAR)); - setCurrentMonth(cal.get(Calendar.MONTH)); - setCurrentDay(cal.get(Calendar.DAY_OF_MONTH)); - } - } - }; - - private NumberPicker.OnValueChangeListener mOnMinuteChangedListener = new NumberPicker.OnValueChangeListener() { - @Override - public void onValueChange(NumberPicker picker, int oldVal, int newVal) { - int minValue = mMinuteSpinner.getMinValue(); - int maxValue = mMinuteSpinner.getMaxValue(); - int offset = 0; - if (oldVal == maxValue && newVal == minValue) { - offset += 1; - } else if (oldVal == minValue && newVal == maxValue) { - offset -= 1; - } - if (offset != 0) { - mDate.add(Calendar.HOUR_OF_DAY, offset); - mHourSpinner.setValue(getCurrentHour()); - updateDateControl(); - int newHour = getCurrentHourOfDay(); - if (newHour >= HOURS_IN_HALF_DAY) { - mIsAm = false; - updateAmPmControl(); - } else { - mIsAm = true; - updateAmPmControl(); - } - } - mDate.set(Calendar.MINUTE, newVal); - onDateTimeChanged(); - } - }; - - private NumberPicker.OnValueChangeListener mOnAmPmChangedListener = new NumberPicker.OnValueChangeListener() { - @Override - public void onValueChange(NumberPicker picker, int oldVal, int newVal) { - mIsAm = !mIsAm; - if (mIsAm) { - mDate.add(Calendar.HOUR_OF_DAY, -HOURS_IN_HALF_DAY); - } else { - mDate.add(Calendar.HOUR_OF_DAY, HOURS_IN_HALF_DAY); - } - updateAmPmControl(); - onDateTimeChanged(); - } - }; - - public interface OnDateTimeChangedListener { - void onDateTimeChanged(DateTimePicker view, int year, int month, - int dayOfMonth, int hourOfDay, int minute); - } - - public DateTimePicker(Context context) { - this(context, System.currentTimeMillis()); - } - - public DateTimePicker(Context context, long date) { - this(context, date, DateFormat.is24HourFormat(context)); - } - - public DateTimePicker(Context context, long date, boolean is24HourView) { - super(context); - mDate = Calendar.getInstance(); - mInitialising = true; - mIsAm = getCurrentHourOfDay() >= HOURS_IN_HALF_DAY; - inflate(context, R.layout.datetime_picker, this); - - mDateSpinner = (NumberPicker) findViewById(R.id.date); - mDateSpinner.setMinValue(DATE_SPINNER_MIN_VAL); - mDateSpinner.setMaxValue(DATE_SPINNER_MAX_VAL); - mDateSpinner.setOnValueChangedListener(mOnDateChangedListener); - - mHourSpinner = (NumberPicker) findViewById(R.id.hour); - mHourSpinner.setOnValueChangedListener(mOnHourChangedListener); - mMinuteSpinner = (NumberPicker) findViewById(R.id.minute); - mMinuteSpinner.setMinValue(MINUT_SPINNER_MIN_VAL); - mMinuteSpinner.setMaxValue(MINUT_SPINNER_MAX_VAL); - mMinuteSpinner.setOnLongPressUpdateInterval(100); - mMinuteSpinner.setOnValueChangedListener(mOnMinuteChangedListener); - - String[] stringsForAmPm = new DateFormatSymbols().getAmPmStrings(); - mAmPmSpinner = (NumberPicker) findViewById(R.id.amPm); - mAmPmSpinner.setMinValue(AMPM_SPINNER_MIN_VAL); - mAmPmSpinner.setMaxValue(AMPM_SPINNER_MAX_VAL); - mAmPmSpinner.setDisplayedValues(stringsForAmPm); - mAmPmSpinner.setOnValueChangedListener(mOnAmPmChangedListener); - - // update controls to initial state - updateDateControl(); - updateHourControl(); - updateAmPmControl(); - - set24HourView(is24HourView); - - // set to current time - setCurrentDate(date); - - setEnabled(isEnabled()); - - // set the content descriptions - mInitialising = false; - } - - @Override - public void setEnabled(boolean enabled) { - if (mIsEnabled == enabled) { - return; - } - super.setEnabled(enabled); - mDateSpinner.setEnabled(enabled); - mMinuteSpinner.setEnabled(enabled); - mHourSpinner.setEnabled(enabled); - mAmPmSpinner.setEnabled(enabled); - mIsEnabled = enabled; - } - - @Override - public boolean isEnabled() { - return mIsEnabled; - } - - /** - * Get the current date in millis - * - * @return the current date in millis - */ - public long getCurrentDateInTimeMillis() { - return mDate.getTimeInMillis(); - } - - /** - * Set the current date - * - * @param date The current date in millis - */ - public void setCurrentDate(long date) { - Calendar cal = Calendar.getInstance(); - cal.setTimeInMillis(date); - setCurrentDate(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH), - cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE)); - } - - /** - * Set the current date - * - * @param year The current year - * @param month The current month - * @param dayOfMonth The current dayOfMonth - * @param hourOfDay The current hourOfDay - * @param minute The current minute - */ - public void setCurrentDate(int year, int month, - int dayOfMonth, int hourOfDay, int minute) { - setCurrentYear(year); - setCurrentMonth(month); - setCurrentDay(dayOfMonth); - setCurrentHour(hourOfDay); - setCurrentMinute(minute); - } - - /** - * Get current year - * - * @return The current year - */ - public int getCurrentYear() { - return mDate.get(Calendar.YEAR); - } - - /** - * Set current year - * - * @param year The current year - */ - public void setCurrentYear(int year) { - if (!mInitialising && year == getCurrentYear()) { - return; - } - mDate.set(Calendar.YEAR, year); - updateDateControl(); - onDateTimeChanged(); - } - - /** - * Get current month in the year - * - * @return The current month in the year - */ - public int getCurrentMonth() { - return mDate.get(Calendar.MONTH); - } - - /** - * Set current month in the year - * - * @param month The month in the year - */ - public void setCurrentMonth(int month) { - if (!mInitialising && month == getCurrentMonth()) { - return; - } - mDate.set(Calendar.MONTH, month); - updateDateControl(); - onDateTimeChanged(); - } - - /** - * Get current day of the month - * - * @return The day of the month - */ - public int getCurrentDay() { - return mDate.get(Calendar.DAY_OF_MONTH); - } - - /** - * Set current day of the month - * - * @param dayOfMonth The day of the month - */ - public void setCurrentDay(int dayOfMonth) { - if (!mInitialising && dayOfMonth == getCurrentDay()) { - return; - } - mDate.set(Calendar.DAY_OF_MONTH, dayOfMonth); - updateDateControl(); - onDateTimeChanged(); - } - - /** - * Get current hour in 24 hour mode, in the range (0~23) - * @return The current hour in 24 hour mode - */ - public int getCurrentHourOfDay() { - return mDate.get(Calendar.HOUR_OF_DAY); - } - - private int getCurrentHour() { - if (mIs24HourView){ - return getCurrentHourOfDay(); - } else { - int hour = getCurrentHourOfDay(); - if (hour > HOURS_IN_HALF_DAY) { - return hour - HOURS_IN_HALF_DAY; - } else { - return hour == 0 ? HOURS_IN_HALF_DAY : hour; - } - } - } - - /** - * Set current hour in 24 hour mode, in the range (0~23) - * - * @param hourOfDay - */ - public void setCurrentHour(int hourOfDay) { - if (!mInitialising && hourOfDay == getCurrentHourOfDay()) { - return; - } - mDate.set(Calendar.HOUR_OF_DAY, hourOfDay); - if (!mIs24HourView) { - if (hourOfDay >= HOURS_IN_HALF_DAY) { - mIsAm = false; - if (hourOfDay > HOURS_IN_HALF_DAY) { - hourOfDay -= HOURS_IN_HALF_DAY; - } - } else { - mIsAm = true; - if (hourOfDay == 0) { - hourOfDay = HOURS_IN_HALF_DAY; - } - } - updateAmPmControl(); - } - mHourSpinner.setValue(hourOfDay); - onDateTimeChanged(); - } - - /** - * Get currentMinute - * - * @return The Current Minute - */ - public int getCurrentMinute() { - return mDate.get(Calendar.MINUTE); - } - - /** - * Set current minute - */ - public void setCurrentMinute(int minute) { - if (!mInitialising && minute == getCurrentMinute()) { - return; - } - mMinuteSpinner.setValue(minute); - mDate.set(Calendar.MINUTE, minute); - onDateTimeChanged(); - } - - /** - * @return true if this is in 24 hour view else false. - */ - public boolean is24HourView () { - return mIs24HourView; - } - - /** - * Set whether in 24 hour or AM/PM mode. - * - * @param is24HourView True for 24 hour mode. False for AM/PM mode. - */ - public void set24HourView(boolean is24HourView) { - if (mIs24HourView == is24HourView) { - return; - } - mIs24HourView = is24HourView; - mAmPmSpinner.setVisibility(is24HourView ? View.GONE : View.VISIBLE); - int hour = getCurrentHourOfDay(); - updateHourControl(); - setCurrentHour(hour); - updateAmPmControl(); - } - - private void updateDateControl() { - Calendar cal = Calendar.getInstance(); - cal.setTimeInMillis(mDate.getTimeInMillis()); - cal.add(Calendar.DAY_OF_YEAR, -DAYS_IN_ALL_WEEK / 2 - 1); - mDateSpinner.setDisplayedValues(null); - for (int i = 0; i < DAYS_IN_ALL_WEEK; ++i) { - cal.add(Calendar.DAY_OF_YEAR, 1); - mDateDisplayValues[i] = (String) DateFormat.format("MM.dd EEEE", cal); - } - mDateSpinner.setDisplayedValues(mDateDisplayValues); - mDateSpinner.setValue(DAYS_IN_ALL_WEEK / 2); - mDateSpinner.invalidate(); - } - - private void updateAmPmControl() { - if (mIs24HourView) { - mAmPmSpinner.setVisibility(View.GONE); - } else { - int index = mIsAm ? Calendar.AM : Calendar.PM; - mAmPmSpinner.setValue(index); - mAmPmSpinner.setVisibility(View.VISIBLE); - } - } - - private void updateHourControl() { - if (mIs24HourView) { - mHourSpinner.setMinValue(HOUR_SPINNER_MIN_VAL_24_HOUR_VIEW); - mHourSpinner.setMaxValue(HOUR_SPINNER_MAX_VAL_24_HOUR_VIEW); - } else { - mHourSpinner.setMinValue(HOUR_SPINNER_MIN_VAL_12_HOUR_VIEW); - mHourSpinner.setMaxValue(HOUR_SPINNER_MAX_VAL_12_HOUR_VIEW); - } - } - - /** - * Set the callback that indicates the 'Set' button has been pressed. - * @param callback the callback, if null will do nothing - */ - public void setOnDateTimeChangedListener(OnDateTimeChangedListener callback) { - mOnDateTimeChangedListener = callback; - } - - private void onDateTimeChanged() { - if (mOnDateTimeChangedListener != null) { - mOnDateTimeChangedListener.onDateTimeChanged(this, getCurrentYear(), - getCurrentMonth(), getCurrentDay(), getCurrentHourOfDay(), getCurrentMinute()); - } - } -} +/* + * 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.ui; + +import java.text.DateFormatSymbols; +import java.util.Calendar; + +import net.micode.notes.R; + +import android.content.Context; +import android.text.format.DateFormat; +import android.view.View; +import android.widget.FrameLayout; +import android.widget.NumberPicker; + +// DateTimePicker类继承自FrameLayout,用于显示日期和时间选择控件 +public class DateTimePicker extends FrameLayout { + + // 默认控件是否可用 + private static final boolean DEFAULT_ENABLE_STATE = true; + + // 半天中的小时数、全天中的小时数、一周中的天数等常量 + private static final int HOURS_IN_HALF_DAY = 12; + private static final int HOURS_IN_ALL_DAY = 24; + private static final int DAYS_IN_ALL_WEEK = 7; + private static final int DATE_SPINNER_MIN_VAL = 0; + private static final int DATE_SPINNER_MAX_VAL = DAYS_IN_ALL_WEEK - 1; + private static final int HOUR_SPINNER_MIN_VAL_24_HOUR_VIEW = 0; + private static final int HOUR_SPINNER_MAX_VAL_24_HOUR_VIEW = 23; + private static final int HOUR_SPINNER_MIN_VAL_12_HOUR_VIEW = 1; + private static final int HOUR_SPINNER_MAX_VAL_12_HOUR_VIEW = 12; + private static final int MINUT_SPINNER_MIN_VAL = 0; + private static final int MINUT_SPINNER_MAX_VAL = 59; + private static final int AMPM_SPINNER_MIN_VAL = 0; + private static final int AMPM_SPINNER_MAX_VAL = 1; + + // 日期、小时、分钟、AM/PM选择器控件 + private final NumberPicker mDateSpinner; + private final NumberPicker mHourSpinner; + private final NumberPicker mMinuteSpinner; + private final NumberPicker mAmPmSpinner; + // 当前日期时间 + private Calendar mDate; + + // 日期显示值数组 + private String[] mDateDisplayValues = new String[DAYS_IN_ALL_WEEK]; + + // 当前是否为AM + private boolean mIsAm; + + // 是否为24小时制视图 + private boolean mIs24HourView; + + // 控件是否可用 + private boolean mIsEnabled = DEFAULT_ENABLE_STATE; + + // 初始化标志 + private boolean mInitialising; + + // 日期时间改变监听器 + private OnDateTimeChangedListener mOnDateTimeChangedListener; + + // 日期选择器值改变监听器 + private NumberPicker.OnValueChangeListener mOnDateChangedListener = new NumberPicker.OnValueChangeListener() { + @Override + public void onValueChange(NumberPicker picker, int oldVal, int newVal) { + mDate.add(Calendar.DAY_OF_YEAR, newVal - oldVal); + updateDateControl(); + onDateTimeChanged(); + } + }; + + // 小时选择器值改变监听器 + private NumberPicker.OnValueChangeListener mOnHourChangedListener = new NumberPicker.OnValueChangeListener() { + @Override + public void onValueChange(NumberPicker picker, int oldVal, int newVal) { + boolean isDateChanged = false; + Calendar cal = Calendar.getInstance(); + if (!mIs24HourView) { + if (!mIsAm && oldVal == HOURS_IN_HALF_DAY - 1 && newVal == HOURS_IN_HALF_DAY) { + cal.setTimeInMillis(mDate.getTimeInMillis()); + cal.add(Calendar.DAY_OF_YEAR, 1); + isDateChanged = true; + } else if (mIsAm && oldVal == HOURS_IN_HALF_DAY && newVal == HOURS_IN_HALF_DAY - 1) { + cal.setTimeInMillis(mDate.getTimeInMillis()); + cal.add(Calendar.DAY_OF_YEAR, -1); + isDateChanged = true; + } + if (oldVal == HOURS_IN_HALF_DAY - 1 && newVal == HOURS_IN_HALF_DAY || + oldVal == HOURS_IN_HALF_DAY && newVal == HOURS_IN_HALF_DAY - 1) { + mIsAm = !mIsAm; + updateAmPmControl(); + } + } else { + if (oldVal == HOURS_IN_ALL_DAY - 1 && newVal == 0) { + cal.setTimeInMillis(mDate.getTimeInMillis()); + cal.add(Calendar.DAY_OF_YEAR, 1); + isDateChanged = true; + } else if (oldVal == 0 && newVal == HOURS_IN_ALL_DAY - 1) { + cal.setTimeInMillis(mDate.getTimeInMillis()); + cal.add(Calendar.DAY_OF_YEAR, -1); + isDateChanged = true; + } + } + int newHour = mHourSpinner.getValue() % HOURS_IN_HALF_DAY + (mIsAm ? 0 : HOURS_IN_HALF_DAY); + mDate.set(Calendar.HOUR_OF_DAY, newHour); + onDateTimeChanged(); + if (isDateChanged) { + setCurrentYear(cal.get(Calendar.YEAR)); + setCurrentMonth(cal.get(Calendar.MONTH)); + setCurrentDay(cal.get(Calendar.DAY_OF_MONTH)); + } + } + }; + + // 分钟选择器值改变监听器 + private NumberPicker.OnValueChangeListener mOnMinuteChangedListener = new NumberPicker.OnValueChangeListener() { + @Override + public void onValueChange(NumberPicker picker, int oldVal, int newVal) { + int minValue = mMinuteSpinner.getMinValue(); + int maxValue = mMinuteSpinner.getMaxValue(); + int offset = 0; + if (oldVal == maxValue && newVal == minValue) { + offset += 1; + } else if (oldVal == minValue && newVal == maxValue) { + offset -= 1; + } + if (offset != 0) { + mDate.add(Calendar.HOUR_OF_DAY, offset); + mHourSpinner.setValue(getCurrentHour()); + updateDateControl(); + int newHour = getCurrentHourOfDay(); + if (newHour >= HOURS_IN_HALF_DAY) { + mIsAm = false; + updateAmPmControl(); + } else { + mIsAm = true; + updateAmPmControl(); + } + } + mDate.set(Calendar.MINUTE, newVal); + onDateTimeChanged(); + } + }; + + // AM/PM选择器值改变监听器 + private NumberPicker.OnValueChangeListener mOnAmPmChangedListener = new NumberPicker.OnValueChangeListener() { + @Override + public void onValueChange(NumberPicker picker, int oldVal, int newVal) { + mIsAm = !mIsAm; + if (mIsAm) { + mDate.add(Calendar.HOUR_OF_DAY, -HOURS_IN_HALF_DAY); + } else { + mDate.add(Calendar.HOUR_OF_DAY, HOURS_IN_HALF_DAY); + } + updateAmPmControl(); + onDateTimeChanged(); + } + }; + + // 日期时间改变监听器接口 + public interface OnDateTimeChangedListener { + void onDateTimeChanged(DateTimePicker view, int year, int month, + int dayOfMonth, int hourOfDay, int minute); + } + + // 构造函数,默认使用当前时间 + public DateTimePicker(Context context) { + this(context, System.currentTimeMillis()); + } + + // 构造函数,使用指定时间 + public DateTimePicker(Context context, long date) { + this(context, date, DateFormat.is24HourFormat(context)); + } + + // 构造函数,使用指定时间和是否为24小时制 + public DateTimePicker(Context context, long date, boolean is24HourView) { + super(context); + mDate = Calendar.getInstance(); + mInitialising = true; + mIsAm = getCurrentHourOfDay() >= HOURS_IN_HALF_DAY; + inflate(context, R.layout.datetime_picker, this); + + mDateSpinner = (NumberPicker) findViewById(R.id.date); + mDateSpinner.setMinValue(DATE_SPINNER_MIN_VAL); + mDateSpinner.setMaxValue(DATE_SPINNER_MAX_VAL); + mDateSpinner.setOnValueChangedListener(mOnDateChangedListener); + + mHourSpinner = (NumberPicker) findViewById(R.id.hour); + mHourSpinner.setOnValueChangedListener(mOnHourChangedListener); + mMinuteSpinner = (NumberPicker) findViewById(R.id.minute); + mMinuteSpinner.setMinValue(MINUT_SPINNER_MIN_VAL); + mMinuteSpinner.setMaxValue(MINUT_SPINNER_MAX_VAL); + mMinuteSpinner.setOnLongPressUpdateInterval(100); + mMinuteSpinner.setOnValueChangedListener(mOnMinuteChangedListener); + + String[] stringsForAmPm = new DateFormatSymbols().getAmPmStrings(); + mAmPmSpinner = (NumberPicker) findViewById(R.id.amPm); + mAmPmSpinner.setMinValue(AMPM_SPINNER_MIN_VAL); + mAmPmSpinner.setMaxValue(AMPM_SPINNER_MAX_VAL); + mAmPmSpinner.setDisplayedValues(stringsForAmPm); + mAmPmSpinner.setOnValueChangedListener(mOnAmPmChangedListener); + + // 更新控件到初始状态 + updateDateControl(); + updateHourControl(); + updateAmPmControl(); + + set24HourView(is24HourView); + + // 设置到当前时间 + setCurrentDate(date); + + setEnabled(isEnabled()); + + // 设置内容描述 + mInitialising = false; + } + + // 设置控件是否可用 + @Override + public void setEnabled(boolean enabled) { + if (mIsEnabled == enabled) { + return; + } + super.setEnabled(enabled); + mDateSpinner.setEnabled(enabled); + mMinuteSpinner.setEnabled(enabled); + mHourSpinner.setEnabled(enabled); + mAmPmSpinner.setEnabled(enabled); + mIsEnabled = enabled; + } + + // 获取控件是否可用 + @Override + public boolean isEnabled() { + return mIsEnabled; + } + + + +``` +/* + * 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.ui; + +import java.text.DateFormatSymbols; +import java.util.Calendar; + +import net.micode.notes.R; + + +import android.content.Context; +import android.text.format.DateFormat; +import android.view.View; +import android.widget.FrameLayout; +import android.widget.NumberPicker; + +/** + * DateTimePicker 类用于显示和选择日期和时间。 + */ +public class DateTimePicker extends FrameLayout { + + private static final boolean DEFAULT_ENABLE_STATE = true; + + private static final int HOURS_IN_HALF_DAY = 12; + private static final int HOURS_IN_ALL_DAY = 24; + private static final int DAYS_IN_ALL_WEEK = 7; + private static final int DATE_SPINNER_MIN_VAL = 0; + private static final int DATE_SPINNER_MAX_VAL = DAYS_IN_ALL_WEEK - 1; + private static final int HOUR_SPINNER_MIN_VAL_24_HOUR_VIEW = 0; + private static final int HOUR_SPINNER_MAX_VAL_24_HOUR_VIEW = 23; + private static final int HOUR_SPINNER_MIN_VAL_12_HOUR_VIEW = 1; + private static final int HOUR_SPINNER_MAX_VAL_12_HOUR_VIEW = 12; + private static final int MINUT_SPINNER_MIN_VAL = 0; + private static final int MINUT_SPINNER_MAX_VAL = 59; + private static final int AMPM_SPINNER_MIN_VAL = 0; + private static final int AMPM_SPINNER_MAX_VAL = 1; + + private final NumberPicker mDateSpinner; + private final NumberPicker mHourSpinner; + private final NumberPicker mMinuteSpinner; + private final NumberPicker mAmPmSpinner; + private Calendar mDate; + + private String[] mDateDisplayValues = new String[DAYS_IN_ALL_WEEK]; + + private boolean mIsAm; + + private boolean mIs24HourView; + + private boolean mIsEnabled = DEFAULT_ENABLE_STATE; + + private boolean mInitialising; + + private OnDateTimeChangedListener mOnDateTimeChangedListener; + + private NumberPicker.OnValueChangeListener mOnDateChangedListener = new NumberPicker.OnValueChangeListener() { + @Override + public void onValueChange(NumberPicker picker, int oldVal, int newVal) { + mDate.add(Calendar.DAY_OF_YEAR, newVal - oldVal); + updateDateControl(); + onDateTimeChanged(); + } + }; + + private NumberPicker.OnValueChangeListener mOnHourChangedListener = new NumberPicker.OnValueChangeListener() { + @Override + public void onValueChange(NumberPicker picker, int oldVal, int newVal) { + boolean isDateChanged = false; + Calendar cal = Calendar.getInstance(); + if (!mIs24HourView) { + if (!mIsAm && oldVal == HOURS_IN_HALF_DAY - 1 && newVal == HOURS_IN_HALF_DAY) { + cal.setTimeInMillis(mDate.getTimeInMillis()); + cal.add(Calendar.DAY_OF_YEAR, 1); + isDateChanged = true; + } else if (mIsAm && oldVal == HOURS_IN_HALF_DAY && newVal == HOURS_IN_HALF_DAY - 1) { + cal.setTimeInMillis(mDate.getTimeInMillis()); + cal.add(Calendar.DAY_OF_YEAR, -1); + isDateChanged = true; + } + if (oldVal == HOURS_IN_HALF_DAY - 1 && newVal == HOURS_IN_HALF_DAY || + oldVal == HOURS_IN_HALF_DAY && newVal == HOURS_IN_HALF_DAY - 1) { + mIsAm = !mIsAm; + updateAmPmControl(); + } + } else { + if (oldVal == HOURS_IN_ALL_DAY - 1 && newVal == 0) { + cal.setTimeInMillis(mDate.getTimeInMillis()); + cal.add(Calendar.DAY_OF_YEAR, 1); + isDateChanged = true; + } else if (oldVal == 0 && newVal == HOURS_IN_ALL_DAY - 1) { + cal.setTimeInMillis(mDate.getTimeInMillis()); + cal.add(Calendar.DAY_OF_YEAR, -1); + isDateChanged = true; + } + } + int newHour = mHourSpinner.getValue() % HOURS_IN_HALF_DAY + (mIsAm ? 0 : HOURS_IN_HALF_DAY); + mDate.set(Calendar.HOUR_OF_DAY, newHour); + onDateTimeChanged(); + if (isDateChanged) { + setCurrentYear(cal.get(Calendar.YEAR)); + setCurrentMonth(cal.get(Calendar.MONTH)); + setCurrentDay(cal.get(Calendar.DAY_OF_MONTH)); + } + } + }; + + private NumberPicker.OnValueChangeListener mOnMinuteChangedListener = new NumberPicker.OnValueChangeListener() { + @Override + public void onValueChange(NumberPicker picker, int oldVal, int newVal) { + int minValue = mMinuteSpinner.getMinValue(); + int maxValue = mMinuteSpinner.getMaxValue(); + int offset = 0; + if (oldVal == maxValue && newVal == minValue) { + offset += 1; + } else if (oldVal == minValue && newVal == maxValue) { + offset -= 1; + } + if (offset != 0) { + mDate.add(Calendar.HOUR_OF_DAY, offset); + mHourSpinner.setValue(getCurrentHour()); + updateDateControl(); + int newHour = getCurrentHourOfDay(); + if (newHour >= HOURS_IN_HALF_DAY) { + mIsAm = false; + updateAmPmControl(); + } else { + mIsAm = true; + updateAmPmControl(); + } + } + mDate.set(Calendar.MINUTE, newVal); + onDateTimeChanged(); + } + }; + + private NumberPicker.OnValueChangeListener mOnAmPmChangedListener = new NumberPicker.OnValueChangeListener() { + @Override + public void onValueChange(NumberPicker picker, int oldVal, int newVal) { + mIsAm = !mIsAm; + if (mIsAm) { + mDate.add(Calendar.HOUR_OF_DAY, -HOURS_IN_HALF_DAY); + } else { + mDate.add(Calendar.HOUR_OF_DAY, HOURS_IN_HALF_DAY); + } + updateAmPmControl(); + onDateTimeChanged(); + } + }; + + /** + * OnDateTimeChangedListener 接口用于监听日期和时间的变化。 + */ + public interface OnDateTimeChangedListener { + void onDateTimeChanged(DateTimePicker view, int year, int month, + int dayOfMonth, int hourOfDay, int minute); + } + + /** + * 构造函数,使用当前时间初始化 DateTimePicker。 + */ + public DateTimePicker(Context context) { + this(context, System.currentTimeMillis()); + } + + /** + * 构造函数,使用指定时间初始化 DateTimePicker。 + */ + public DateTimePicker(Context context, long date) { + this(context, date, DateFormat.is24HourFormat(context)); + } + + /** + * 构造函数,使用指定时间和24小时制设置初始化 DateTimePicker。 + */ + public DateTimePicker(Context context, long date, boolean is24HourView) { + super(context); + mDate = Calendar.getInstance(); + mInitialising = true; + mIsAm = getCurrentHourOfDay() >= HOURS_IN_HALF_DAY; + inflate(context, R.layout.datetime_picker, this); + + mDateSpinner = (NumberPicker) findViewById(R.id.date); + mDateSpinner.setMinValue(DATE_SPINNER_MIN_VAL); + mDateSpinner.setMaxValue(DATE_SPINNER_MAX_VAL); + mDateSpinner.setOnValueChangedListener(mOnDateChangedListener); + + mHourSpinner = (NumberPicker) findViewById(R.id.hour); + mHourSpinner.setOnValueChangedListener(mOnHourChangedListener); + mMinuteSpinner = (NumberPicker) findViewById(R.id.minute); + mMinuteSpinner.setMinValue(MINUT_SPINNER_MIN_VAL); + mMinuteSpinner.setMaxValue(MINUT_SPINNER_MAX_VAL); + mMinuteSpinner.setOnLongPressUpdateInterval(100); + mMinuteSpinner.setOnValueChangedListener(mOnMinuteChangedListener); + + String[] stringsForAmPm = new DateFormatSymbols().getAmPmStrings(); + mAmPmSpinner = (NumberPicker) findViewById(R.id.amPm); + mAmPmSpinner.setMinValue(AMPM_SPINNER_MIN_VAL); + mAmPmSpinner.setMaxValue(AMPM_SPINNER_MAX_VAL); + mAmPmSpinner.setDisplayedValues(stringsForAmPm); + mAmPmSpinner.setOnValueChangedListener(mOnAmPmChangedListener); + + // 更新控件到初始状态 + updateDateControl(); + updateHourControl(); + updateAmPmControl(); + + set24HourView(is24HourView); + + // 设置为当前时间 + setCurrentDate(date); + + setEnabled(isEnabled()); + + // 设置内容描述 + mInitialising = false; + } + + /** + * 设置控件是否启用。 + */ + @Override + public void setEnabled(boolean enabled) { + if (mIsEnabled == enabled) { + return; + } + super.setEnabled(enabled); + mDateSpinner.setEnabled(enabled); + mMinuteSpinner.setEnabled(enabled); + mHourSpinner.setEnabled(enabled); + mAmPmSpinner.setEnabled(enabled); + mIsEnabled = enabled; + } + + /** + * 获取控件是否启用。 + */ + @Override + public boolean isEnabled() { + return mIsEnabled; + } + + /** + * 获取当前日期的毫秒数。 + */ + public long getCurrentDateInTimeMillis() { + return mDate.getTimeInMillis(); + } + + /** + * 设置当前日期。 + */ + public void setCurrentDate(long date) { + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(date); + setCurrentDate(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH), + cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE)); + } + + /** + * 设置当前日期。 + */ + public void setCurrentDate(int year, int month, + int dayOfMonth, int hourOfDay, int minute) { + setCurrentYear(year); + setCurrentMonth(month); + setCurrentDay(dayOfMonth); + setCurrentHour(hourOfDay); + setCurrentMinute(minute); + } + + /** + * 获取当前年份。 + */ + public int getCurrentYear() { + return mDate.get(Calendar.YEAR); + } + + /** + * 设置当前年份。 + */ + public void setCurrentYear(int year) { + if (!mInitialising && year == getCurrentYear()) { + return; + } + mDate.set(Calendar.YEAR, year); + updateDateControl(); + onDateTimeChanged(); + } + + /** + * 获取当前月份。 + */ + public int getCurrentMonth() { + return mDate.get(Calendar.MONTH); + } + + /** + * 设置当前月份。 + */ + public void setCurrentMonth(int month) { + if (!mInitialising && month == getCurrentMonth()) { + return; + } + mDate.set(Calendar.MONTH, month); + updateDateControl(); + onDateTimeChanged(); + } + + /** + * 获取当前日期。 + */ + public int getCurrentDay() { + return mDate.get(Calendar.DAY_OF_MONTH); + } + + /** + * 设置当前日期。 + */ + public void setCurrentDay(int dayOfMonth) { + if (!mInitialising && dayOfMonth == getCurrentDay()) { + return; + } + mDate.set(Calendar.DAY_OF_MONTH, dayOfMonth); + updateDateControl(); + onDateTimeChanged(); + } + + /** + * 获取当前小时(24小时制)。 + */ + public int getCurrentHourOfDay() { + return mDate.get(Calendar.HOUR_OF_DAY); + } + + private int getCurrentHour() { + if (mIs24HourView){ + return getCurrentHourOfDay(); + } else { + int hour = getCurrentHourOfDay(); + if (hour > HOURS_IN_HALF_DAY) { + return hour - HOURS_IN_HALF_DAY; + } else { + return hour == 0 ? HOURS_IN_HALF_DAY : hour; + } + } + } + + /** + * 设置当前小时(24小时制)。 + */ + public void setCurrentHour(int hourOfDay) { + if (!mInitialising && hourOfDay == getCurrentHourOfDay()) { + return; + } + mDate.set(Calendar.HOUR_OF_DAY, hourOfDay); + if (!mIs24HourView) { + if (hourOfDay >= HOURS_IN_HALF_DAY) { + mIsAm = false; + if (hourOfDay > HOURS_IN_HALF_DAY) { + hourOfDay -= HOURS_IN_HALF_DAY; + } + } else { + mIsAm = true; + if (hourOfDay == 0) { + hourOfDay = HOURS_IN_HALF_DAY; + } + } + updateAmPmControl(); + } + mHourSpinner.setValue(hourOfDay); + onDateTimeChanged(); + } + + /** + * 获取当前分钟。 + */ + public int getCurrentMinute() { + return mDate.get(Calendar.MINUTE); + } + + /** + * 设置当前分钟。 + */ + public void setCurrentMinute(int minute) { + if (!mInitialising && minute == getCurrentMinute()) { + return; + } + mMinuteSpinner.setValue(minute); + mDate.set(Calendar.MINUTE, minute); + onDateTimeChanged(); + } + + /** + * 判断是否为24小时制。 + */ + public boolean is24HourView () { + return mIs24HourView; + } + + /** + * 设置是否为24小时制。 + */ + public void set24HourView(boolean is24HourView) { + if (mIs24HourView == is24HourView) { + return; + } + mIs24HourView = is24HourView; + mAmPmSpinner.setVisibility(is24HourView ? View.GONE : View.VISIBLE); + int hour = getCurrentHourOfDay(); + updateHourControl(); + setCurrentHour(hour); + updateAmPmControl(); + } + + /** + * 更新日期控件的显示。 + */ + private void updateDateControl() { + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(mDate.getTimeInMillis()); + cal.add(Calendar.DAY_OF_YEAR, -DAYS_IN_ALL_WEEK / 2 - 1); + mDateSpinner.setDisplayedValues(null); + for (int i = 0; i < DAYS_IN_ALL_WEEK; ++i) { + cal.add(Calendar.DAY_OF_YEAR, 1); + mDateDisplayValues[i] = (String) DateFormat.format("MM.dd EEEE", cal); + } + mDateSpinner.setDisplayedValues(mDateDisplayValues); + mDateSpinner.setValue(DAYS_IN_ALL_WEEK / 2); + mDateSpinner.invalidate(); + } + + /** + * 更新AM/PM控件的显示。 + */ + private void updateAmPmControl() { + if (mIs24HourView) { + mAmPmSpinner.setVisibility(View.GONE); + } else { + int index = mIsAm ? Calendar.AM : Calendar.PM; + mAmPmSpinner.setValue(index); + mAmPmSpinner.setVisibility(View.VISIBLE); + } + } + + /** + * 更新小时控件的显示。 + */ + private void updateHourControl() { + if (mIs24HourView) { + mHourSpinner.setMinValue(HOUR_SPINNER_MIN_VAL_24_HOUR_VIEW); + mHourSpinner.setMaxValue(HOUR_SPINNER_MAX_VAL_24_HOUR_VIEW); + } else { + mHourSpinner.setMinValue(HOUR_SPINNER_MIN_VAL_12_HOUR_VIEW); + mHourSpinner.setMaxValue(HOUR_SPINNER_MAX_VAL_12_HOUR_VIEW); + } + } + + /** + * 设置日期时间变化的监听器。 + */ + public void setOnDateTimeChangedListener(OnDateTimeChangedListener callback) { + mOnDateTimeChangedListener = callback; + } + + /** + * 当日期或时间发生变化时调用此方法。 + */ + private void onDateTimeChanged() { + if (mOnDateTimeChangedListener != null) { + mOnDateTimeChangedListener.onDateTimeChanged(this, getCurrentYear(), + getCurrentMonth(), getCurrentDay(), getCurrentHourOfDay(), getCurrentMinute()); + } + } +} \ No newline at end of file diff --git a/src/Notes-master/src/net/micode/notes/ui/DateTimePickerDialog.java b/src/Notes-master/src/net/micode/notes/ui/DateTimePickerDialog.java index 2c47ba4..e3c2eb4 100644 --- a/src/Notes-master/src/net/micode/notes/ui/DateTimePickerDialog.java +++ b/src/Notes-master/src/net/micode/notes/ui/DateTimePickerDialog.java @@ -13,33 +13,40 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - + package net.micode.notes.ui; - + import java.util.Calendar; - + import net.micode.notes.R; import net.micode.notes.ui.DateTimePicker; import net.micode.notes.ui.DateTimePicker.OnDateTimeChangedListener; - + import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; import android.text.format.DateFormat; import android.text.format.DateUtils; - + +// 自定义的日期时间选择对话框,继承自AlertDialog并实现了OnClickListener接口 public class DateTimePickerDialog extends AlertDialog implements OnClickListener { - + + // 存储当前选择的日期时间 private Calendar mDate = Calendar.getInstance(); + // 是否使用24小时制 private boolean mIs24HourView; + // 回调接口,当日期时间设置完成后调用 private OnDateTimeSetListener mOnDateTimeSetListener; + // 日期时间选择器控件 private DateTimePicker mDateTimePicker; - + + // 定义日期时间设置完成后的回调接口 public interface OnDateTimeSetListener { void OnDateTimeSet(AlertDialog dialog, long date); } - + + // 构造函数,初始化对话框并设置初始日期时间 public DateTimePickerDialog(Context context, long date) { super(context); mDateTimePicker = new DateTimePicker(context); @@ -63,15 +70,18 @@ public class DateTimePickerDialog extends AlertDialog implements OnClickListener set24HourView(DateFormat.is24HourFormat(this.getContext())); updateTitle(mDate.getTimeInMillis()); } - + + // 设置是否使用24小时制显示时间 public void set24HourView(boolean is24HourView) { mIs24HourView = is24HourView; } - + + // 设置日期时间选择完成后的回调监听器 public void setOnDateTimeSetListener(OnDateTimeSetListener callBack) { mOnDateTimeSetListener = callBack; } - + + // 更新对话框的标题以显示当前选择的日期时间 private void updateTitle(long date) { int flag = DateUtils.FORMAT_SHOW_YEAR | @@ -80,11 +90,12 @@ public class DateTimePickerDialog extends AlertDialog implements OnClickListener flag |= mIs24HourView ? DateUtils.FORMAT_24HOUR : DateUtils.FORMAT_24HOUR; setTitle(DateUtils.formatDateTime(this.getContext(), date, flag)); } - + + // 处理用户点击对话框按钮的事件,如果是确认按钮则调用回调监听器 public void onClick(DialogInterface arg0, int arg1) { if (mOnDateTimeSetListener != null) { mOnDateTimeSetListener.OnDateTimeSet(this, mDate.getTimeInMillis()); } } - + } \ No newline at end of file diff --git a/src/Notes-master/src/net/micode/notes/ui/DropdownMenu.java b/src/Notes-master/src/net/micode/notes/ui/DropdownMenu.java index 613dc74..eb009a2 100644 --- a/src/Notes-master/src/net/micode/notes/ui/DropdownMenu.java +++ b/src/Notes-master/src/net/micode/notes/ui/DropdownMenu.java @@ -13,9 +13,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - + package net.micode.notes.ui; - + import android.content.Context; import android.view.Menu; import android.view.MenuItem; @@ -24,14 +24,16 @@ import android.view.View.OnClickListener; import android.widget.Button; import android.widget.PopupMenu; import android.widget.PopupMenu.OnMenuItemClickListener; - + import net.micode.notes.R; - + +// 下拉菜单类,用于在按钮点击时显示一个弹出菜单 public class DropdownMenu { - private Button mButton; - private PopupMenu mPopupMenu; - private Menu mMenu; - + private Button mButton; // 用于触发下拉菜单的按钮 + private PopupMenu mPopupMenu; // 弹出菜单对象 + private Menu mMenu; // 菜单对象 + + // 构造函数,初始化下拉菜单,设置按钮背景,并将菜单资源加载到弹出菜单中 public DropdownMenu(Context context, Button button, int menuId) { mButton = button; mButton.setBackgroundResource(R.drawable.dropdown_icon); @@ -44,18 +46,21 @@ public class DropdownMenu { } }); } - + + // 设置下拉菜单项点击监听器 public void setOnDropdownMenuItemClickListener(OnMenuItemClickListener listener) { if (mPopupMenu != null) { mPopupMenu.setOnMenuItemClickListener(listener); } } - + + // 根据菜单项的ID查找菜单项 public MenuItem findItem(int id) { return mMenu.findItem(id); } - + + // 设置按钮的标题 public void setTitle(CharSequence title) { mButton.setText(title); } -} +} \ No newline at end of file diff --git a/src/Notes-master/src/net/micode/notes/ui/FoldersListAdapter.java b/src/Notes-master/src/net/micode/notes/ui/FoldersListAdapter.java index 96b77da..1c6a78a 100644 --- a/src/Notes-master/src/net/micode/notes/ui/FoldersListAdapter.java +++ b/src/Notes-master/src/net/micode/notes/ui/FoldersListAdapter.java @@ -28,26 +28,31 @@ import net.micode.notes.R; import net.micode.notes.data.Notes; import net.micode.notes.data.Notes.NoteColumns; - +// 自定义的 CursorAdapter 用于显示文件夹列表 public class FoldersListAdapter extends CursorAdapter { + // 定义查询文件夹时需要的列 public static final String [] PROJECTION = { NoteColumns.ID, NoteColumns.SNIPPET }; + // 列索引常量 public static final int ID_COLUMN = 0; public static final int NAME_COLUMN = 1; + // 构造函数,初始化 FoldersListAdapter public FoldersListAdapter(Context context, Cursor c) { super(context, c); // TODO Auto-generated constructor stub } + // 创建一个新的视图项 @Override public View newView(Context context, Cursor cursor, ViewGroup parent) { return new FolderListItem(context); } + // 绑定数据到视图项 @Override public void bindView(View view, Context context, Cursor cursor) { if (view instanceof FolderListItem) { @@ -57,24 +62,28 @@ public class FoldersListAdapter extends CursorAdapter { } } + // 根据位置获取文件夹名称 public String getFolderName(Context context, int position) { Cursor cursor = (Cursor) getItem(position); return (cursor.getLong(ID_COLUMN) == Notes.ID_ROOT_FOLDER) ? context .getString(R.string.menu_move_parent_folder) : cursor.getString(NAME_COLUMN); } + // 内部类,定义文件夹列表项的视图结构 private class FolderListItem extends LinearLayout { private TextView mName; + // 构造函数,初始化 FolderListItem 视图 public FolderListItem(Context context) { super(context); inflate(context, R.layout.folder_list_item, this); mName = (TextView) findViewById(R.id.tv_folder_name); } + // 绑定文件夹名称到视图 public void bind(String name) { mName.setText(name); } } -} +} \ No newline at end of file diff --git a/src/Notes-master/src/net/micode/notes/ui/NoteEditActivity.java b/src/Notes-master/src/net/micode/notes/ui/NoteEditActivity.java index 96a9ff8..3e45406 100644 --- a/src/Notes-master/src/net/micode/notes/ui/NoteEditActivity.java +++ b/src/Notes-master/src/net/micode/notes/ui/NoteEditActivity.java @@ -13,9 +13,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - + package net.micode.notes.ui; - + import android.app.Activity; import android.app.AlarmManager; import android.app.AlertDialog; @@ -51,7 +51,7 @@ import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; - + import net.micode.notes.R; import net.micode.notes.data.Notes; import net.micode.notes.data.Notes.TextNote; @@ -64,26 +64,28 @@ import net.micode.notes.ui.DateTimePickerDialog.OnDateTimeSetListener; import net.micode.notes.ui.NoteEditText.OnTextViewChangeListener; import net.micode.notes.widget.NoteWidgetProvider_2x; import net.micode.notes.widget.NoteWidgetProvider_4x; - + import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; - - + +// 笔记编辑界面的Activity类 public class NoteEditActivity extends Activity implements OnClickListener, NoteSettingChangedListener, OnTextViewChangeListener { + // 用于存储笔记头部视图的ViewHolder类 private class HeadViewHolder { public TextView tvModified; - + public ImageView ivAlertIcon; - + public TextView tvAlertDate; - + public ImageView ibSetBgColor; } - + + // 背景色选择按钮和颜色ID的映射 private static final Map sBgSelectorBtnsMap = new HashMap(); static { sBgSelectorBtnsMap.put(R.id.iv_bg_yellow, ResourceParser.YELLOW); @@ -92,7 +94,8 @@ public class NoteEditActivity extends Activity implements OnClickListener, sBgSelectorBtnsMap.put(R.id.iv_bg_green, ResourceParser.GREEN); sBgSelectorBtnsMap.put(R.id.iv_bg_white, ResourceParser.WHITE); } - + + // 背景色选择后的显示标记和颜色ID的映射 private static final Map sBgSelectorSelectionMap = new HashMap(); static { sBgSelectorSelectionMap.put(ResourceParser.YELLOW, R.id.iv_bg_yellow_select); @@ -101,7 +104,8 @@ public class NoteEditActivity extends Activity implements OnClickListener, sBgSelectorSelectionMap.put(ResourceParser.GREEN, R.id.iv_bg_green_select); sBgSelectorSelectionMap.put(ResourceParser.WHITE, R.id.iv_bg_white_select); } - + + // 字体大小选择按钮和字体大小ID的映射 private static final Map sFontSizeBtnsMap = new HashMap(); static { sFontSizeBtnsMap.put(R.id.ll_font_large, ResourceParser.TEXT_LARGE); @@ -109,7 +113,8 @@ public class NoteEditActivity extends Activity implements OnClickListener, sFontSizeBtnsMap.put(R.id.ll_font_normal, ResourceParser.TEXT_MEDIUM); sFontSizeBtnsMap.put(R.id.ll_font_super, ResourceParser.TEXT_SUPER); } - + + // 字体大小选择后的显示标记和字体大小ID的映射 private static final Map sFontSelectorSelectionMap = new HashMap(); static { sFontSelectorSelectionMap.put(ResourceParser.TEXT_LARGE, R.id.iv_large_select); @@ -117,54 +122,52 @@ public class NoteEditActivity extends Activity implements OnClickListener, sFontSelectorSelectionMap.put(ResourceParser.TEXT_MEDIUM, R.id.iv_medium_select); sFontSelectorSelectionMap.put(ResourceParser.TEXT_SUPER, R.id.iv_super_select); } - + private static final String TAG = "NoteEditActivity"; - + private HeadViewHolder mNoteHeaderHolder; - + private View mHeadViewPanel; - + private View mNoteBgColorSelector; - + private View mFontSizeSelector; - + private EditText mNoteEditor; - + private View mNoteEditorPanel; - + private WorkingNote mWorkingNote; - + private SharedPreferences mSharedPrefs; private int mFontSizeId; - + private static final String PREFERENCE_FONT_SIZE = "pref_font_size"; - + private static final int SHORTCUT_ICON_TITLE_MAX_LEN = 10; - + public static final String TAG_CHECKED = String.valueOf('\u221A'); public static final String TAG_UNCHECKED = String.valueOf('\u25A1'); - + private LinearLayout mEditTextList; - + private String mUserQuery; private Pattern mPattern; - + + // 初始化Activity视图 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.setContentView(R.layout.note_edit); - + if (savedInstanceState == null && !initActivityState(getIntent())) { finish(); return; } initResources(); } - - /** - * Current activity may be killed when the memory is low. Once it is killed, for another time - * user load this activity, we should restore the former state - */ + + // 当Activity被系统杀死后,恢复其状态 @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); @@ -178,25 +181,19 @@ public class NoteEditActivity extends Activity implements OnClickListener, Log.d(TAG, "Restoring from killed activity"); } } - + + // 初始化Activity状态,根据Intent决定加载笔记或创建新笔记 private boolean initActivityState(Intent intent) { - /** - * If the user specified the {@link Intent#ACTION_VIEW} but not provided with id, - * then jump to the NotesListActivity - */ mWorkingNote = null; if (TextUtils.equals(Intent.ACTION_VIEW, intent.getAction())) { long noteId = intent.getLongExtra(Intent.EXTRA_UID, 0); mUserQuery = ""; - - /** - * Starting from the searched result - */ + if (intent.hasExtra(SearchManager.EXTRA_DATA_KEY)) { noteId = Long.parseLong(intent.getStringExtra(SearchManager.EXTRA_DATA_KEY)); mUserQuery = intent.getStringExtra(SearchManager.USER_QUERY); } - + if (!DataUtils.visibleInNoteDatabase(getContentResolver(), noteId, Notes.TYPE_NOTE)) { Intent jump = new Intent(this, NotesListActivity.class); startActivity(jump); @@ -215,7 +212,6 @@ public class NoteEditActivity extends Activity implements OnClickListener, WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); } else if(TextUtils.equals(Intent.ACTION_INSERT_OR_EDIT, intent.getAction())) { - // New note long folderId = intent.getLongExtra(Notes.INTENT_EXTRA_FOLDER_ID, 0); int widgetId = intent.getIntExtra(Notes.INTENT_EXTRA_WIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); @@ -223,8 +219,7 @@ public class NoteEditActivity extends Activity implements OnClickListener, Notes.TYPE_WIDGET_INVALIDE); int bgResId = intent.getIntExtra(Notes.INTENT_EXTRA_BACKGROUND_ID, ResourceParser.getDefaultBgId(this)); - - // Parse call-record note + String phoneNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER); long callDate = intent.getLongExtra(Notes.INTENT_EXTRA_CALL_DATE, 0); if (callDate != 0 && phoneNumber != null) { @@ -249,7 +244,7 @@ public class NoteEditActivity extends Activity implements OnClickListener, mWorkingNote = WorkingNote.createEmptyNote(this, folderId, widgetId, widgetType, bgResId); } - + getWindow().setSoftInputMode( WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE | WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); @@ -261,13 +256,15 @@ public class NoteEditActivity extends Activity implements OnClickListener, mWorkingNote.setOnSettingStatusChangedListener(this); return true; } - + + // Activity恢复时初始化笔记显示 @Override protected void onResume() { super.onResume(); initNoteScreen(); } - + + // 初始化笔记显示界面,包括背景颜色、字体大小、修改日期等 private void initNoteScreen() { mNoteEditor.setTextAppearance(this, TextAppearanceResources .getTexAppearanceResource(mFontSizeId)); @@ -282,19 +279,16 @@ public class NoteEditActivity extends Activity implements OnClickListener, } mHeadViewPanel.setBackgroundResource(mWorkingNote.getTitleBgResId()); mNoteEditorPanel.setBackgroundResource(mWorkingNote.getBgColorResId()); - + mNoteHeaderHolder.tvModified.setText(DateUtils.formatDateTime(this, mWorkingNote.getModifiedDate(), DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_NUMERIC_DATE | DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_SHOW_YEAR)); - - /** - * TODO: Add the menu for setting alert. Currently disable it because the DateTimePicker - * is not ready - */ + showAlertHeader(); } - + + // 显示或隐藏提醒头部信息 private void showAlertHeader() { if (mWorkingNote.hasClockAlert()) { long time = System.currentTimeMillis(); @@ -311,28 +305,26 @@ public class NoteEditActivity extends Activity implements OnClickListener, mNoteHeaderHolder.ivAlertIcon.setVisibility(View.GONE); }; } - + + // 处理新的Intent,可能需要重新加载笔记或创建新笔记 @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); initActivityState(intent); } - + + // 保存Activity状态,在系统需要恢复Activity时使用 @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); - /** - * For new note without note id, we should firstly save it to - * generate a id. If the editing note is not worth saving, there - * is no id which is equivalent to create new note - */ if (!mWorkingNote.existInDatabase()) { saveNote(); } outState.putLong(Intent.EXTRA_UID, mWorkingNote.getNoteId()); Log.d(TAG, "Save working note id: " + mWorkingNote.getNoteId() + " onSaveInstanceState"); } - + + // 处理触摸事件,用于隐藏颜色和字体大小选择面板 @Override public boolean dispatchTouchEvent(MotionEvent ev) { if (mNoteBgColorSelector.getVisibility() == View.VISIBLE @@ -340,7 +332,7 @@ public class NoteEditActivity extends Activity implements OnClickListener, mNoteBgColorSelector.setVisibility(View.GONE); return true; } - + if (mFontSizeSelector.getVisibility() == View.VISIBLE && !inRangeOfView(mFontSizeSelector, ev)) { mFontSizeSelector.setVisibility(View.GONE); @@ -348,7 +340,8 @@ public class NoteEditActivity extends Activity implements OnClickListener, } return super.dispatchTouchEvent(ev); } - + + // 判断触摸事件是否发生在指定视图内 private boolean inRangeOfView(View view, MotionEvent ev) { int []location = new int[2]; view.getLocationOnScreen(location); @@ -362,7 +355,8 @@ public class NoteEditActivity extends Activity implements OnClickListener, } return true; } - + + // 初始化视图资源 private void initResources() { mHeadViewPanel = findViewById(R.id.note_title); mNoteHeaderHolder = new HeadViewHolder(); @@ -378,7 +372,7 @@ public class NoteEditActivity extends Activity implements OnClickListener, ImageView iv = (ImageView) findViewById(id); iv.setOnClickListener(this); } - + mFontSizeSelector = findViewById(R.id.font_size_selector); for (int id : sFontSizeBtnsMap.keySet()) { View view = findViewById(id); @@ -386,17 +380,13 @@ public class NoteEditActivity extends Activity implements OnClickListener, }; mSharedPrefs = PreferenceManager.getDefaultSharedPreferences(this); mFontSizeId = mSharedPrefs.getInt(PREFERENCE_FONT_SIZE, ResourceParser.BG_DEFAULT_FONT_SIZE); - /** - * 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(mFontSizeId >= TextAppearanceResources.getResourcesSize()) { mFontSizeId = ResourceParser.BG_DEFAULT_FONT_SIZE; } mEditTextList = (LinearLayout) findViewById(R.id.note_edit_list); } - + + // 暂停Activity时保存笔记并清理设置状态 @Override protected void onPause() { super.onPause(); @@ -405,7 +395,8 @@ public class NoteEditActivity extends Activity implements OnClickListener, } clearSettingState(); } - + + // 更新桌面小部件显示 private void updateWidget() { Intent intent = new Intent(AppWidgetManager.ACTION_APPWIDGET_UPDATE); if (mWorkingNote.getWidgetType() == Notes.TYPE_WIDGET_2X) { @@ -416,21 +407,22 @@ public class NoteEditActivity extends Activity implements OnClickListener, Log.e(TAG, "Unspported widget type"); return; } - + intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, new int[] { mWorkingNote.getWidgetId() }); - + sendBroadcast(intent); setResult(RESULT_OK, intent); } - + + // 处理视图点击事件,包括颜色和字体大小选择 public void onClick(View v) { int id = v.getId(); if (id == R.id.btn_set_bg_color) { mNoteBgColorSelector.setVisibility(View.VISIBLE); findViewById(sBgSelectorSelectionMap.get(mWorkingNote.getBgColorId())).setVisibility( - - View.VISIBLE); + View.VISIBLE); } else if (sBgSelectorBtnsMap.containsKey(id)) { findViewById(sBgSelectorSelectionMap.get(mWorkingNote.getBgColorId())).setVisibility( View.GONE); @@ -451,17 +443,19 @@ public class NoteEditActivity extends Activity implements OnClickListener, mFontSizeSelector.setVisibility(View.GONE); } } - + + // 处理返回键事件,如果设置面板可见则隐藏,否则保存笔记后返回 @Override public void onBackPressed() { if(clearSettingState()) { return; } - + saveNote(); super.onBackPressed(); } - + + // 清理设置面板状态 private boolean clearSettingState() { if (mNoteBgColorSelector.getVisibility() == View.VISIBLE) { mNoteBgColorSelector.setVisibility(View.GONE); @@ -472,14 +466,16 @@ public class NoteEditActivity extends Activity implements OnClickListener, } return false; } - + + // 处理笔记背景颜色变化事件 public void onBackgroundColorChanged() { findViewById(sBgSelectorSelectionMap.get(mWorkingNote.getBgColorId())).setVisibility( View.VISIBLE); mNoteEditorPanel.setBackgroundResource(mWorkingNote.getBgColorResId()); mHeadViewPanel.setBackgroundResource(mWorkingNote.getTitleBgResId()); } - + + // 准备选项菜单,根据笔记状态动态更新菜单项 @Override public boolean onPrepareOptionsMenu(Menu menu) { if (isFinishing()) { @@ -504,7 +500,8 @@ public class NoteEditActivity extends Activity implements OnClickListener, } return true; } - + + // 处理选项菜单项点击事件 @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { @@ -552,7 +549,8 @@ public class NoteEditActivity extends Activity implements OnClickListener, } return true; } - + + // 设置提醒时间 private void setReminder() { DateTimePickerDialog d = new DateTimePickerDialog(this, System.currentTimeMillis()); d.setOnDateTimeSetListener(new OnDateTimeSetListener() { @@ -562,30 +560,27 @@ public class NoteEditActivity extends Activity implements OnClickListener, }); d.show(); } - - /** - * Share note to apps that support {@link Intent#ACTION_SEND} action - * and {@text/plain} type - */ + + // 分享笔记内容到支持ACTION_SEND的其他应用 private void sendTo(Context context, String info) { Intent intent = new Intent(Intent.ACTION_SEND); intent.putExtra(Intent.EXTRA_TEXT, info); intent.setType("text/plain"); context.startActivity(intent); } - + + // 创建新笔记,跳转到新笔记编辑界面 private void createNewNote() { - // Firstly, save current editing notes saveNote(); - - // For safety, start a new NoteEditActivity + finish(); Intent intent = new Intent(this, NoteEditActivity.class); intent.setAction(Intent.ACTION_INSERT_OR_EDIT); intent.putExtra(Notes.INTENT_EXTRA_FOLDER_ID, mWorkingNote.getFolderId()); startActivity(intent); } - + + // 删除当前笔记 private void deleteCurrentNote() { if (mWorkingNote.existInDatabase()) { HashSet ids = new HashSet(); @@ -607,16 +602,14 @@ public class NoteEditActivity extends Activity implements OnClickListener, } mWorkingNote.markDeleted(true); } - + + // 判断是否处于同步模式 private boolean isSyncMode() { return NotesPreferenceActivity.getSyncAccountName(this).trim().length() > 0; } - + + // 处理时钟提醒变化事件,设置或取消提醒 public void onClockAlertChanged(long date, boolean set) { - /** - * User could set clock to an unsaved note, so before setting the - * alert clock, we should save the note first - */ if (!mWorkingNote.existInDatabase()) { saveNote(); } @@ -632,31 +625,28 @@ public class NoteEditActivity extends Activity implements OnClickListener, alarmManager.set(AlarmManager.RTC_WAKEUP, date, pendingIntent); } } else { - /** - * There is the condition that user has input nothing (the note is - * not worthy saving), we have no note id, remind the user that he - * should input something - */ Log.e(TAG, "Clock alert setting error"); showToast(R.string.error_note_empty_for_clock); } } - + + // 处理小部件变化事件,更新小部件显示 public void onWidgetChanged() { updateWidget(); } - + + // 处理EditText删除事件,调整列表项索引 public void onEditTextDelete(int index, String text) { int childCount = mEditTextList.getChildCount(); if (childCount == 1) { return; } - + for (int i = index + 1; i < childCount; i++) { ((NoteEditText) mEditTextList.getChildAt(i).findViewById(R.id.et_edit_text)) .setIndex(i - 1); } - + mEditTextList.removeViewAt(index); NoteEditText edit = null; if(index == 0) { @@ -671,15 +661,13 @@ public class NoteEditActivity extends Activity implements OnClickListener, edit.requestFocus(); edit.setSelection(length); } - + + // 处理EditText输入事件,添加新列表项 public void onEditTextEnter(int index, String text) { - /** - * Should not happen, check for debug - */ if(index > mEditTextList.getChildCount()) { Log.e(TAG, "Index out of mEditTextList boundrary, should not happen"); } - + View view = getListItem(text, index); mEditTextList.addView(view, index); NoteEditText edit = (NoteEditText) view.findViewById(R.id.et_edit_text); @@ -690,7 +678,8 @@ public class NoteEditActivity extends Activity implements OnClickListener, .setIndex(i); } } - + + // 切换到列表模式,根据笔记内容生成列表项 private void switchToListMode(String text) { mEditTextList.removeAllViews(); String[] items = text.split("\n"); @@ -703,11 +692,12 @@ public class NoteEditActivity extends Activity implements OnClickListener, } mEditTextList.addView(getListItem("", index)); mEditTextList.getChildAt(index).findViewById(R.id.et_edit_text).requestFocus(); - + mNoteEditor.setVisibility(View.GONE); mEditTextList.setVisibility(View.VISIBLE); } - + + // 获取高亮查询结果,用于显示搜索关键词 private Spannable getHighlightQueryResult(String fullText, String userQuery) { SpannableString spannable = new SpannableString(fullText == null ? "" : fullText); if (!TextUtils.isEmpty(userQuery)) { @@ -724,7 +714,8 @@ public class NoteEditActivity extends Activity implements OnClickListener, } return spannable; } - + + // 生成一个新的列表项视图 private View getListItem(String item, int index) { View view = LayoutInflater.from(this).inflate(R.layout.note_edit_list_item, null); final NoteEditText edit = (NoteEditText) view.findViewById(R.id.et_edit_text); @@ -739,7 +730,7 @@ public class NoteEditActivity extends Activity implements OnClickListener, } } }); - + if (item.startsWith(TAG_CHECKED)) { cb.setChecked(true); edit.setPaintFlags(edit.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG); @@ -749,13 +740,14 @@ public class NoteEditActivity extends Activity implements OnClickListener, edit.setPaintFlags(Paint.ANTI_ALIAS_FLAG | Paint.DEV_KERN_TEXT_FLAG); item = item.substring(TAG_UNCHECKED.length(), item.length()).trim(); } - + edit.setOnTextViewChangeListener(this); edit.setIndex(index); edit.setText(getHighlightQueryResult(item, mUserQuery)); return view; } - + + // 处理EditText文本变化事件,显示或隐藏复选框 public void onTextChange(int index, boolean hasText) { if (index >= mEditTextList.getChildCount()) { Log.e(TAG, "Wrong index, should not happen"); @@ -767,7 +759,8 @@ public class NoteEditActivity extends Activity implements OnClickListener, mEditTextList.getChildAt(index).findViewById(R.id.cb_edit_item).setVisibility(View.GONE); } } - + + // 处理笔记模式变化事件,从普通模式切换到列表模式或反之 public void onCheckListModeChanged(int oldMode, int newMode) { if (newMode == TextNote.MODE_CHECK_LIST) { switchToListMode(mNoteEditor.getText().toString()); @@ -781,7 +774,8 @@ public class NoteEditActivity extends Activity implements OnClickListener, mNoteEditor.setVisibility(View.VISIBLE); } } - + + // 获取正在编辑的文本内容,根据列表模式添加标签 private boolean getWorkingText() { boolean hasChecked = false; if (mWorkingNote.getCheckListMode() == TextNote.MODE_CHECK_LIST) { @@ -804,33 +798,23 @@ public class NoteEditActivity extends Activity implements OnClickListener, } return hasChecked; } - + + // 保存笔记内容到数据库 private boolean saveNote() { getWorkingText(); boolean saved = mWorkingNote.saveNote(); if (saved) { - /** - * There are two modes from List view to edit view, open one note, - * create/edit a node. Opening node requires to the original - * position in the list when back from edit view, while creating a - * new node requires to the top of the list. This code - * {@link #RESULT_OK} is used to identify the create/edit state - */ setResult(RESULT_OK); } return saved; } - + + // 将笔记快捷方式添加到桌面 private void sendToDesktop() { - /** - * Before send message to home, we should make sure that current - * editing note is exists in databases. So, for new note, firstly - * save it - */ if (!mWorkingNote.existInDatabase()) { saveNote(); } - + if (mWorkingNote.getNoteId() > 0) { Intent sender = new Intent(); Intent shortcutIntent = new Intent(this, NoteEditActivity.class); @@ -846,28 +830,26 @@ public class NoteEditActivity extends Activity implements OnClickListener, showToast(R.string.info_note_enter_desktop); sendBroadcast(sender); } else { - /** - * There is the condition that user has input nothing (the note is - * not worthy saving), we have no note id, remind the user that he - * should input something - */ Log.e(TAG, "Send to desktop error"); showToast(R.string.error_note_empty_for_send_to_desktop); } } - + + // 生成桌面快捷方式的标题,截取笔记内容的一部分作为标题 private String makeShortcutIconTitle(String content) { content = content.replace(TAG_CHECKED, ""); content = content.replace(TAG_UNCHECKED, ""); return content.length() > SHORTCUT_ICON_TITLE_MAX_LEN ? content.substring(0, SHORTCUT_ICON_TITLE_MAX_LEN) : content; } - + + // 显示短Toast消息 private void showToast(int resId) { showToast(resId, Toast.LENGTH_SHORT); } - + + // 显示指定持续时间的Toast消息 private void showToast(int resId, int duration) { Toast.makeText(this, resId, duration).show(); } -} +} \ No newline at end of file diff --git a/src/Notes-master/src/net/micode/notes/ui/NoteEditText.java b/src/Notes-master/src/net/micode/notes/ui/NoteEditText.java index 2afe2a8..d350c57 100644 --- a/src/Notes-master/src/net/micode/notes/ui/NoteEditText.java +++ b/src/Notes-master/src/net/micode/notes/ui/NoteEditText.java @@ -13,9 +13,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - + package net.micode.notes.ui; - + import android.content.Context; import android.graphics.Rect; import android.text.Layout; @@ -31,28 +31,29 @@ import android.view.MenuItem; import android.view.MenuItem.OnMenuItemClickListener; import android.view.MotionEvent; import android.widget.EditText; - + import net.micode.notes.R; - + import java.util.HashMap; import java.util.Map; - + +// 自定义的EditText,用于笔记应用中,支持删除、添加文本事件监听 public class NoteEditText extends EditText { private static final String TAG = "NoteEditText"; private int mIndex; private int mSelectionStartBeforeDelete; - + private static final String SCHEME_TEL = "tel:" ; private static final String SCHEME_HTTP = "http:" ; private static final String SCHEME_EMAIL = "mailto:" ; - + private static final Map sSchemaActionResMap = new HashMap(); static { sSchemaActionResMap.put(SCHEME_TEL, R.string.note_link_tel); sSchemaActionResMap.put(SCHEME_HTTP, R.string.note_link_web); sSchemaActionResMap.put(SCHEME_EMAIL, R.string.note_link_email); } - + /** * Call by the {@link NoteEditActivity} to delete or add edit text */ @@ -62,65 +63,69 @@ public class NoteEditText extends EditText { * and the text is null */ void onEditTextDelete(int index, String text); - + /** * Add edit text after current edit text when {@link KeyEvent#KEYCODE_ENTER} * happen */ void onEditTextEnter(int index, String text); - + /** * Hide or show item option when text change */ void onTextChange(int index, boolean hasText); } - + private OnTextViewChangeListener mOnTextViewChangeListener; - + public NoteEditText(Context context) { super(context, null); mIndex = 0; } - + + // 设置当前文本框的索引 public void setIndex(int index) { mIndex = index; } - + + // 设置文本变化监听器 public void setOnTextViewChangeListener(OnTextViewChangeListener listener) { mOnTextViewChangeListener = listener; } - + public NoteEditText(Context context, AttributeSet attrs) { super(context, attrs, android.R.attr.editTextStyle); } - + public NoteEditText(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); // TODO Auto-generated constructor stub } - + + // 处理触摸事件,更新光标位置 @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: - + int x = (int) event.getX(); int y = (int) event.getY(); x -= getTotalPaddingLeft(); y -= getTotalPaddingTop(); x += getScrollX(); y += getScrollY(); - + Layout layout = getLayout(); int line = layout.getLineForVertical(y); int off = layout.getOffsetForHorizontal(line, x); Selection.setSelection(getText(), off); break; } - + return super.onTouchEvent(event); } - + + // 处理按键按下事件,记录删除操作前的光标位置 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { switch (keyCode) { @@ -137,7 +142,8 @@ public class NoteEditText extends EditText { } return super.onKeyDown(keyCode, event); } - + + // 处理按键弹起事件,根据按键类型执行相应操作 @Override public boolean onKeyUp(int keyCode, KeyEvent event) { switch(keyCode) { @@ -166,7 +172,8 @@ public class NoteEditText extends EditText { } return super.onKeyUp(keyCode, event); } - + + // 当EditText焦点发生变化时调用,通知监听器文本是否有内容 @Override protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) { if (mOnTextViewChangeListener != null) { @@ -178,16 +185,17 @@ public class NoteEditText extends EditText { } super.onFocusChanged(focused, direction, previouslyFocusedRect); } - + + // 创建上下文菜单,处理URL点击事件 @Override protected void onCreateContextMenu(ContextMenu menu) { if (getText() instanceof Spanned) { int selStart = getSelectionStart(); int selEnd = getSelectionEnd(); - + int min = Math.min(selStart, selEnd); int max = Math.max(selStart, selEnd); - + final URLSpan[] urls = ((Spanned) getText()).getSpans(min, max, URLSpan.class); if (urls.length == 1) { int defaultResId = 0; @@ -197,11 +205,11 @@ public class NoteEditText extends EditText { break; } } - + if (defaultResId == 0) { defaultResId = R.string.note_link_other; } - + menu.add(0, 0, 0, defaultResId).setOnMenuItemClickListener( new OnMenuItemClickListener() { public boolean onMenuItemClick(MenuItem item) { @@ -214,4 +222,4 @@ public class NoteEditText extends EditText { } super.onCreateContextMenu(menu); } -} +} \ No newline at end of file diff --git a/src/Notes-master/src/net/micode/notes/ui/NoteItemData.java b/src/Notes-master/src/net/micode/notes/ui/NoteItemData.java index 0f5a878..632fe29 100644 --- a/src/Notes-master/src/net/micode/notes/ui/NoteItemData.java +++ b/src/Notes-master/src/net/micode/notes/ui/NoteItemData.java @@ -13,19 +13,19 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - + package net.micode.notes.ui; - + import android.content.Context; import android.database.Cursor; import android.text.TextUtils; - + import net.micode.notes.data.Contact; import net.micode.notes.data.Notes; import net.micode.notes.data.Notes.NoteColumns; import net.micode.notes.tool.DataUtils; - - + +// 该类用于从数据库游标中提取笔记项数据,并处理与笔记位置相关的逻辑 public class NoteItemData { static final String [] PROJECTION = new String [] { NoteColumns.ID, @@ -41,7 +41,8 @@ public class NoteItemData { NoteColumns.WIDGET_ID, NoteColumns.WIDGET_TYPE, }; - + + // 定义了游标中各个列的索引位置 private static final int ID_COLUMN = 0; private static final int ALERTED_DATE_COLUMN = 1; private static final int BG_COLOR_ID_COLUMN = 2; @@ -54,7 +55,8 @@ public class NoteItemData { private static final int TYPE_COLUMN = 9; private static final int WIDGET_ID_COLUMN = 10; private static final int WIDGET_TYPE_COLUMN = 11; - + + // 笔记项的各种属性 private long mId; private long mAlertDate; private int mBgColorId; @@ -69,13 +71,15 @@ public class NoteItemData { private int mWidgetType; private String mName; private String mPhoneNumber; - + + // 笔记项在列表中的位置信息 private boolean mIsLastItem; private boolean mIsFirstItem; private boolean mIsOnlyOneItem; private boolean mIsOneNoteFollowingFolder; private boolean mIsMultiNotesFollowingFolder; - + + // 构造函数,从游标中提取笔记项数据 public NoteItemData(Context context, Cursor cursor) { mId = cursor.getLong(ID_COLUMN); mAlertDate = cursor.getLong(ALERTED_DATE_COLUMN); @@ -91,7 +95,7 @@ public class NoteItemData { mType = cursor.getInt(TYPE_COLUMN); mWidgetId = cursor.getInt(WIDGET_ID_COLUMN); mWidgetType = cursor.getInt(WIDGET_TYPE_COLUMN); - + mPhoneNumber = ""; if (mParentId == Notes.ID_CALL_RECORD_FOLDER) { mPhoneNumber = DataUtils.getCallNumberByNoteId(context.getContentResolver(), mId); @@ -102,20 +106,21 @@ public class NoteItemData { } } } - + if (mName == null) { mName = ""; } checkPostion(cursor); } - + + // 检查笔记项在列表中的位置信息 private void checkPostion(Cursor cursor) { mIsLastItem = cursor.isLast() ? true : false; mIsFirstItem = cursor.isFirst() ? true : false; mIsOnlyOneItem = (cursor.getCount() == 1); mIsMultiNotesFollowingFolder = false; mIsOneNoteFollowingFolder = false; - + if (mType == Notes.TYPE_NOTE && !mIsFirstItem) { int position = cursor.getPosition(); if (cursor.moveToPrevious()) { @@ -133,92 +138,114 @@ public class NoteItemData { } } } - + + // 判断该笔记项是否是单个笔记跟在一个文件夹后 public boolean isOneFollowingFolder() { return mIsOneNoteFollowingFolder; } - + + // 判断该笔记项是否是多个笔记跟在一个文件夹后 public boolean isMultiFollowingFolder() { return mIsMultiNotesFollowingFolder; } - + + // 判断该笔记项是否是列表中的最后一个项 public boolean isLast() { return mIsLastItem; } - + + // 获取与该笔记项关联的呼叫记录的联系人名称 public String getCallName() { return mName; } - + + // 判断该笔记项是否是列表中的第一个项 public boolean isFirst() { return mIsFirstItem; } - + + // 判断该笔记项是否是列表中唯一的项 public boolean isSingle() { return mIsOnlyOneItem; } - + + // 获取笔记项的ID public long getId() { return mId; } - + + // 获取笔记项的提醒日期 public long getAlertDate() { return mAlertDate; } - + + // 获取笔记项的创建日期 public long getCreatedDate() { return mCreatedDate; } - + + // 判断该笔记项是否有附件 public boolean hasAttachment() { return mHasAttachment; } - + + // 获取笔记项的修改日期 public long getModifiedDate() { return mModifiedDate; } - + + // 获取笔记项的背景颜色ID public int getBgColorId() { return mBgColorId; } - + + // 获取笔记项的父ID public long getParentId() { return mParentId; } - + + // 获取笔记项包含的笔记数量 public int getNotesCount() { return mNotesCount; } - + + // 获取笔记项所在的文件夹ID public long getFolderId () { return mParentId; } - + + // 获取笔记项的类型 public int getType() { return mType; } - + + // 获取笔记项的小部件类型 public int getWidgetType() { return mWidgetType; } - + + // 获取笔记项的小部件ID public int getWidgetId() { return mWidgetId; } - + + // 获取笔记项的摘要 public String getSnippet() { return mSnippet; } - + + // 判断该笔记项是否有提醒 public boolean hasAlert() { return (mAlertDate > 0); } - + + // 判断该笔记项是否是呼叫记录类型 public boolean isCallRecord() { return (mParentId == Notes.ID_CALL_RECORD_FOLDER && !TextUtils.isEmpty(mPhoneNumber)); } - + + // 静态方法,从游标中获取笔记项的类型 public static int getNoteType(Cursor cursor) { return cursor.getInt(TYPE_COLUMN); } -} +} \ No newline at end of file diff --git a/src/Notes-master/src/net/micode/notes/ui/NotesListActivity.java b/src/Notes-master/src/net/micode/notes/ui/NotesListActivity.java index e843aec..5893567 100644 --- a/src/Notes-master/src/net/micode/notes/ui/NotesListActivity.java +++ b/src/Notes-master/src/net/micode/notes/ui/NotesListActivity.java @@ -126,12 +126,12 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt private NoteItemData mFocusNoteDataItem; private static final String NORMAL_SELECTION = NoteColumns.PARENT_ID + "=?"; - + private static final String ROOT_FOLDER_SELECTION = "(" + NoteColumns.TYPE + "<>" + Notes.TYPE_SYSTEM + " AND " + NoteColumns.PARENT_ID + "=?)" + " OR (" + NoteColumns.ID + "=" + Notes.ID_CALL_RECORD_FOLDER + " AND " + NoteColumns.NOTES_COUNT + ">0)"; - + private final static int REQUEST_CODE_OPEN_NODE = 102; private final static int REQUEST_CODE_NEW_NODE = 103; @@ -951,4 +951,4 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt } return false; } -} +} \ No newline at end of file diff --git a/src/Notes-master/src/net/micode/notes/ui/NotesListAdapter.java b/src/Notes-master/src/net/micode/notes/ui/NotesListAdapter.java index 51c9cb9..fc77697 100644 --- a/src/Notes-master/src/net/micode/notes/ui/NotesListAdapter.java +++ b/src/Notes-master/src/net/micode/notes/ui/NotesListAdapter.java @@ -13,48 +13,52 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - + package net.micode.notes.ui; - + import android.content.Context; import android.database.Cursor; import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.widget.CursorAdapter; - + import net.micode.notes.data.Notes; - + import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; - - + +// 自定义的CursorAdapter,用于显示笔记列表 public class NotesListAdapter extends CursorAdapter { private static final String TAG = "NotesListAdapter"; private Context mContext; private HashMap mSelectedIndex; private int mNotesCount; private boolean mChoiceMode; - + + // 用于存储小部件属性的内部类 public static class AppWidgetAttribute { public int widgetId; public int widgetType; }; - + + // 构造函数,初始化上下文和选择索引 public NotesListAdapter(Context context) { super(context, null); mSelectedIndex = new HashMap(); mContext = context; mNotesCount = 0; } - + + // 创建新的视图项 @Override public View newView(Context context, Cursor cursor, ViewGroup parent) { return new NotesListItem(context); } - + + // 绑定数据到视图项 @Override public void bindView(View view, Context context, Cursor cursor) { if (view instanceof NotesListItem) { @@ -63,21 +67,25 @@ public class NotesListAdapter extends CursorAdapter { isSelectedItem(cursor.getPosition())); } } - + + // 设置指定位置的项是否被选中,并通知数据集发生变化 public void setCheckedItem(final int position, final boolean checked) { mSelectedIndex.put(position, checked); notifyDataSetChanged(); } - + + // 检查当前是否处于多选模式 public boolean isInChoiceMode() { return mChoiceMode; } - + + // 设置多选模式,清空选择索引 public void setChoiceMode(boolean mode) { mSelectedIndex.clear(); mChoiceMode = mode; } - + + // 全选或全不选所有笔记 public void selectAll(boolean checked) { Cursor cursor = getCursor(); for (int i = 0; i < getCount(); i++) { @@ -88,7 +96,8 @@ public class NotesListAdapter extends CursorAdapter { } } } - + + // 获取所有选中的笔记ID集合 public HashSet getSelectedItemIds() { HashSet itemSet = new HashSet(); for (Integer position : mSelectedIndex.keySet()) { @@ -101,10 +110,11 @@ public class NotesListAdapter extends CursorAdapter { } } } - + return itemSet; } - + + // 获取所有选中的小部件属性集合 public HashSet getSelectedWidget() { HashSet itemSet = new HashSet(); for (Integer position : mSelectedIndex.keySet()) { @@ -127,7 +137,8 @@ public class NotesListAdapter extends CursorAdapter { } return itemSet; } - + + // 获取选中的笔记数量 public int getSelectedCount() { Collection values = mSelectedIndex.values(); if (null == values) { @@ -142,31 +153,36 @@ public class NotesListAdapter extends CursorAdapter { } return count; } - + + // 检查是否所有笔记都被选中 public boolean isAllSelected() { int checkedCount = getSelectedCount(); return (checkedCount != 0 && checkedCount == mNotesCount); } - + + // 检查指定位置的项是否被选中 public boolean isSelectedItem(final int position) { if (null == mSelectedIndex.get(position)) { return false; } return mSelectedIndex.get(position); } - + + // 当数据内容发生变化时,更新笔记数量 @Override protected void onContentChanged() { super.onContentChanged(); calcNotesCount(); } - + + // 更改Cursor时,更新笔记数量 @Override public void changeCursor(Cursor cursor) { super.changeCursor(cursor); calcNotesCount(); } - + + // 计算笔记数量 private void calcNotesCount() { mNotesCount = 0; for (int i = 0; i < getCount(); i++) { @@ -181,4 +197,4 @@ public class NotesListAdapter extends CursorAdapter { } } } -} +} \ No newline at end of file diff --git a/src/Notes-master/src/net/micode/notes/ui/NotesListItem.java b/src/Notes-master/src/net/micode/notes/ui/NotesListItem.java index 1221e80..1546bbe 100644 --- a/src/Notes-master/src/net/micode/notes/ui/NotesListItem.java +++ b/src/Notes-master/src/net/micode/notes/ui/NotesListItem.java @@ -13,9 +13,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - + package net.micode.notes.ui; - + import android.content.Context; import android.text.format.DateUtils; import android.view.View; @@ -23,13 +23,13 @@ import android.widget.CheckBox; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; - + import net.micode.notes.R; import net.micode.notes.data.Notes; import net.micode.notes.tool.DataUtils; import net.micode.notes.tool.ResourceParser.NoteItemBgResources; - - + +// NotesListItem 类继承自 LinearLayout,用于表示笔记列表中的一个项 public class NotesListItem extends LinearLayout { private ImageView mAlert; private TextView mTitle; @@ -37,7 +37,8 @@ public class NotesListItem extends LinearLayout { private TextView mCallName; private NoteItemData mItemData; private CheckBox mCheckBox; - + + // 构造函数,初始化 NotesListItem 的视图组件 public NotesListItem(Context context) { super(context); inflate(context, R.layout.note_item, this); @@ -47,7 +48,8 @@ public class NotesListItem extends LinearLayout { mCallName = (TextView) findViewById(R.id.tv_name); mCheckBox = (CheckBox) findViewById(android.R.id.checkbox); } - + + // 绑定数据到 NotesListItem 的视图组件,并设置选择模式和选中状态 public void bind(Context context, NoteItemData data, boolean choiceMode, boolean checked) { if (choiceMode && data.getType() == Notes.TYPE_NOTE) { mCheckBox.setVisibility(View.VISIBLE); @@ -55,7 +57,7 @@ public class NotesListItem extends LinearLayout { } else { mCheckBox.setVisibility(View.GONE); } - + mItemData = data; if (data.getId() == Notes.ID_CALL_RECORD_FOLDER) { mCallName.setVisibility(View.GONE); @@ -78,7 +80,7 @@ public class NotesListItem extends LinearLayout { } else { mCallName.setVisibility(View.GONE); mTitle.setTextAppearance(context, R.style.TextAppearancePrimaryItem); - + if (data.getType() == Notes.TYPE_FOLDER) { mTitle.setText(data.getSnippet() + context.getString(R.string.format_folder_files_count, @@ -95,10 +97,11 @@ public class NotesListItem extends LinearLayout { } } mTime.setText(DateUtils.getRelativeTimeSpanString(data.getModifiedDate())); - + setBackground(data); } - + + // 根据数据设置 NotesListItem 的背景资源 private void setBackground(NoteItemData data) { int id = data.getBgColorId(); if (data.getType() == Notes.TYPE_NOTE) { @@ -115,8 +118,9 @@ public class NotesListItem extends LinearLayout { setBackgroundResource(NoteItemBgResources.getFolderBgRes()); } } - + + // 获取绑定到此 NotesListItem 的数据 public NoteItemData getItemData() { return mItemData; } -} +} \ No newline at end of file diff --git a/src/Notes-master/src/net/micode/notes/ui/NotesPreferenceActivity.java b/src/Notes-master/src/net/micode/notes/ui/NotesPreferenceActivity.java index 07c5f7e..48125be 100644 --- a/src/Notes-master/src/net/micode/notes/ui/NotesPreferenceActivity.java +++ b/src/Notes-master/src/net/micode/notes/ui/NotesPreferenceActivity.java @@ -13,9 +13,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - + package net.micode.notes.ui; - + import android.accounts.Account; import android.accounts.AccountManager; import android.app.ActionBar; @@ -41,59 +41,60 @@ import android.view.View; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; - + import net.micode.notes.R; import net.micode.notes.data.Notes; import net.micode.notes.data.Notes.NoteColumns; import net.micode.notes.gtask.remote.GTaskSyncService; - - + +// 设置界面活动类,继承自PreferenceActivity public class NotesPreferenceActivity extends PreferenceActivity { public static final String PREFERENCE_NAME = "notes_preferences"; - + public static final String PREFERENCE_SYNC_ACCOUNT_NAME = "pref_key_account_name"; - + public static final String PREFERENCE_LAST_SYNC_TIME = "pref_last_sync_time"; - + public static final String PREFERENCE_SET_BG_COLOR_KEY = "pref_key_bg_random_appear"; - + private static final String PREFERENCE_SYNC_ACCOUNT_KEY = "pref_sync_account_key"; - + private static final String AUTHORITIES_FILTER_KEY = "authorities"; - + private PreferenceCategory mAccountCategory; - + private GTaskReceiver mReceiver; - + private Account[] mOriAccounts; - + private boolean mHasAddedAccount; - + + // 创建活动时初始化界面 @Override protected void onCreate(Bundle icicle) { super.onCreate(icicle); - - /* using the app icon for navigation */ + + /* 使用应用图标进行导航 */ getActionBar().setDisplayHomeAsUpEnabled(true); - + addPreferencesFromResource(R.xml.preferences); mAccountCategory = (PreferenceCategory) findPreference(PREFERENCE_SYNC_ACCOUNT_KEY); mReceiver = new GTaskReceiver(); IntentFilter filter = new IntentFilter(); filter.addAction(GTaskSyncService.GTASK_SERVICE_BROADCAST_NAME); registerReceiver(mReceiver, filter); - + mOriAccounts = null; View header = LayoutInflater.from(this).inflate(R.layout.settings_header, null); getListView().addHeaderView(header, null, true); } - + + // 恢复活动时刷新界面 @Override protected void onResume() { super.onResume(); - - // need to set sync account automatically if user has added a new - // account + + // 如果用户添加了新账户,自动设置同步账户 if (mHasAddedAccount) { Account[] accounts = getGoogleAccounts(); if (mOriAccounts != null && accounts.length > mOriAccounts.length) { @@ -112,10 +113,11 @@ public class NotesPreferenceActivity extends PreferenceActivity { } } } - + refreshUI(); } - + + // 销毁活动时注销广播接收器 @Override protected void onDestroy() { if (mReceiver != null) { @@ -123,10 +125,11 @@ public class NotesPreferenceActivity extends PreferenceActivity { } super.onDestroy(); } - + + // 加载账户偏好设置 private void loadAccountPreference() { mAccountCategory.removeAll(); - + Preference accountPref = new Preference(this); final String defaultAccount = getSyncAccountName(this); accountPref.setTitle(getString(R.string.preferences_account_title)); @@ -135,11 +138,10 @@ public class NotesPreferenceActivity extends PreferenceActivity { public boolean onPreferenceClick(Preference preference) { if (!GTaskSyncService.isSyncing()) { if (TextUtils.isEmpty(defaultAccount)) { - // the first time to set account + // 第一次设置账户 showSelectAccountAlertDialog(); } else { - // if the account has already been set, we need to promp - // user about the risk + // 如果账户已经设置,提示用户切换账户的风险 showChangeAccountConfirmAlertDialog(); } } else { @@ -150,15 +152,16 @@ public class NotesPreferenceActivity extends PreferenceActivity { return true; } }); - + mAccountCategory.addPreference(accountPref); } - + + // 加载同步按钮 private void loadSyncButton() { Button syncButton = (Button) findViewById(R.id.preference_sync_button); TextView lastSyncTimeView = (TextView) findViewById(R.id.prefenerece_sync_status_textview); - - // set button state + + // 设置按钮状态 if (GTaskSyncService.isSyncing()) { syncButton.setText(getString(R.string.preferences_button_sync_cancel)); syncButton.setOnClickListener(new View.OnClickListener() { @@ -175,8 +178,8 @@ public class NotesPreferenceActivity extends PreferenceActivity { }); } syncButton.setEnabled(!TextUtils.isEmpty(getSyncAccountName(this))); - - // set last sync time + + // 设置上次同步时间 if (GTaskSyncService.isSyncing()) { lastSyncTimeView.setText(GTaskSyncService.getProgressString()); lastSyncTimeView.setVisibility(View.VISIBLE); @@ -192,30 +195,32 @@ public class NotesPreferenceActivity extends PreferenceActivity { } } } - + + // 刷新用户界面 private void refreshUI() { loadAccountPreference(); loadSyncButton(); } - + + // 显示选择账户的对话框 private void showSelectAccountAlertDialog() { AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this); - + View titleView = LayoutInflater.from(this).inflate(R.layout.account_dialog_title, null); TextView titleTextView = (TextView) titleView.findViewById(R.id.account_dialog_title); titleTextView.setText(getString(R.string.preferences_dialog_select_account_title)); TextView subtitleTextView = (TextView) titleView.findViewById(R.id.account_dialog_subtitle); subtitleTextView.setText(getString(R.string.preferences_dialog_select_account_tips)); - + dialogBuilder.setCustomTitle(titleView); dialogBuilder.setPositiveButton(null, null); - + Account[] accounts = getGoogleAccounts(); String defAccount = getSyncAccountName(this); - + mOriAccounts = accounts; mHasAddedAccount = false; - + if (accounts.length > 0) { CharSequence[] items = new CharSequence[accounts.length]; final CharSequence[] itemMapping = items; @@ -236,10 +241,10 @@ public class NotesPreferenceActivity extends PreferenceActivity { } }); } - + View addAccountView = LayoutInflater.from(this).inflate(R.layout.add_account_text, null); dialogBuilder.setView(addAccountView); - + final AlertDialog dialog = dialogBuilder.show(); addAccountView.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { @@ -253,10 +258,11 @@ public class NotesPreferenceActivity extends PreferenceActivity { } }); } - + + // 显示更改账户确认对话框 private void showChangeAccountConfirmAlertDialog() { AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this); - + View titleView = LayoutInflater.from(this).inflate(R.layout.account_dialog_title, null); TextView titleTextView = (TextView) titleView.findViewById(R.id.account_dialog_title); titleTextView.setText(getString(R.string.preferences_dialog_change_account_title, @@ -264,7 +270,7 @@ public class NotesPreferenceActivity extends PreferenceActivity { TextView subtitleTextView = (TextView) titleView.findViewById(R.id.account_dialog_subtitle); subtitleTextView.setText(getString(R.string.preferences_dialog_change_account_warn_msg)); dialogBuilder.setCustomTitle(titleView); - + CharSequence[] menuItemArray = new CharSequence[] { getString(R.string.preferences_menu_change_account), getString(R.string.preferences_menu_remove_account), @@ -282,12 +288,14 @@ public class NotesPreferenceActivity extends PreferenceActivity { }); dialogBuilder.show(); } - + + // 获取Google账户列表 private Account[] getGoogleAccounts() { AccountManager accountManager = AccountManager.get(this); return accountManager.getAccountsByType("com.google"); } - + + // 设置同步账户 private void setSyncAccount(String account) { if (!getSyncAccountName(this).equals(account)) { SharedPreferences settings = getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE); @@ -298,11 +306,11 @@ public class NotesPreferenceActivity extends PreferenceActivity { editor.putString(PREFERENCE_SYNC_ACCOUNT_NAME, ""); } editor.commit(); - - // clean up last sync time + + // 清除上次同步时间 setLastSyncTime(this, 0); - - // clean up local gtask related info + + // 清除本地Gtask相关信息 new Thread(new Runnable() { public void run() { ContentValues values = new ContentValues(); @@ -311,13 +319,14 @@ public class NotesPreferenceActivity extends PreferenceActivity { getContentResolver().update(Notes.CONTENT_NOTE_URI, values, null, null); } }).start(); - + Toast.makeText(NotesPreferenceActivity.this, getString(R.string.preferences_toast_success_set_accout, account), Toast.LENGTH_SHORT).show(); } } - + + // 移除同步账户 private void removeSyncAccount() { SharedPreferences settings = getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE); SharedPreferences.Editor editor = settings.edit(); @@ -328,8 +337,8 @@ public class NotesPreferenceActivity extends PreferenceActivity { editor.remove(PREFERENCE_LAST_SYNC_TIME); } editor.commit(); - - // clean up local gtask related info + + // 清除本地Gtask相关信息 new Thread(new Runnable() { public void run() { ContentValues values = new ContentValues(); @@ -339,13 +348,15 @@ public class NotesPreferenceActivity extends PreferenceActivity { } }).start(); } - + + // 获取同步账户名称 public static String getSyncAccountName(Context context) { SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE); return settings.getString(PREFERENCE_SYNC_ACCOUNT_NAME, ""); } - + + // 设置上次同步时间 public static void setLastSyncTime(Context context, long time) { SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE); @@ -353,15 +364,17 @@ public class NotesPreferenceActivity extends PreferenceActivity { editor.putLong(PREFERENCE_LAST_SYNC_TIME, time); editor.commit(); } - + + // 获取上次同步时间 public static long getLastSyncTime(Context context) { SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE); return settings.getLong(PREFERENCE_LAST_SYNC_TIME, 0); } - + + // 广播接收器,用于接收同步状态更新 private class GTaskReceiver extends BroadcastReceiver { - + @Override public void onReceive(Context context, Intent intent) { refreshUI(); @@ -370,10 +383,11 @@ public class NotesPreferenceActivity extends PreferenceActivity { syncStatus.setText(intent .getStringExtra(GTaskSyncService.GTASK_SERVICE_BROADCAST_PROGRESS_MSG)); } - + } } - + + // 选项菜单项点击事件处理 public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: @@ -385,4 +399,4 @@ public class NotesPreferenceActivity extends PreferenceActivity { return false; } } -} +} \ No newline at end of file diff --git a/src/Notes-master/src/net/micode/notes/widget/NoteWidgetProvider.java b/src/Notes-master/src/net/micode/notes/widget/NoteWidgetProvider.java index ec6f819..0fbd347 100644 --- a/src/Notes-master/src/net/micode/notes/widget/NoteWidgetProvider.java +++ b/src/Notes-master/src/net/micode/notes/widget/NoteWidgetProvider.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - + package net.micode.notes.widget; import android.app.PendingIntent; import android.appwidget.AppWidgetManager; @@ -24,27 +24,32 @@ 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; - + +// 提供笔记小部件功能的抽象类,继承自AppWidgetProvider 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"; - + + // 当小部件被删除时调用,更新数据库中的小部件ID为无效值 @Override public void onDeleted(Context context, int[] appWidgetIds) { ContentValues values = new ContentValues(); @@ -56,7 +61,8 @@ public abstract class NoteWidgetProvider extends AppWidgetProvider { new String[] { String.valueOf(appWidgetIds[i])}); } } - + + // 根据小部件ID获取笔记信息 private Cursor getNoteWidgetInfo(Context context, int widgetId) { return context.getContentResolver().query(Notes.CONTENT_NOTE_URI, PROJECTION, @@ -64,11 +70,13 @@ public abstract class NoteWidgetProvider extends AppWidgetProvider { 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++) { @@ -79,7 +87,7 @@ public abstract class NoteWidgetProvider extends AppWidgetProvider { 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) { @@ -95,11 +103,11 @@ public abstract class NoteWidgetProvider extends AppWidgetProvider { 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); @@ -117,16 +125,19 @@ public abstract class NoteWidgetProvider extends AppWidgetProvider { pendingIntent = PendingIntent.getActivity(context, appWidgetIds[i], intent, PendingIntent.FLAG_UPDATE_CURRENT); } - + rv.setOnClickPendingIntent(R.id.widget_text, pendingIntent); appWidgetManager.updateAppWidget(appWidgetIds[i], rv); } } } - + + // 获取背景资源ID的方法,由子类实现 protected abstract int getBgResourceId(int bgId); - + + // 获取布局ID的方法,由子类实现 protected abstract int getLayoutId(); - + + // 获取小部件类型的ID,由子类实现 protected abstract int getWidgetType(); -} +} \ No newline at end of file diff --git a/src/Notes-master/src/net/micode/notes/widget/NoteWidgetProvider_2x.java b/src/Notes-master/src/net/micode/notes/widget/NoteWidgetProvider_2x.java index adcb2f7..ffc1401 100644 --- a/src/Notes-master/src/net/micode/notes/widget/NoteWidgetProvider_2x.java +++ b/src/Notes-master/src/net/micode/notes/widget/NoteWidgetProvider_2x.java @@ -13,35 +13,39 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - + 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; - - + +// 2x2 小部件提供者类,继承自 NoteWidgetProvider public class NoteWidgetProvider_2x extends NoteWidgetProvider { + // 更新小部件时调用的方法 @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { super.update(context, appWidgetManager, appWidgetIds); } - + + // 返回 2x2 小部件的布局 ID @Override protected int getLayoutId() { return R.layout.widget_2x; } - + + // 根据背景 ID 返回对应的 2x2 小部件背景资源 ID @Override protected int getBgResourceId(int bgId) { return ResourceParser.WidgetBgResources.getWidget2xBgResource(bgId); } - + + // 返回 2x2 小部件的类型 ID @Override protected int getWidgetType() { return Notes.TYPE_WIDGET_2X; } -} +} \ No newline at end of file diff --git a/src/Notes-master/src/net/micode/notes/widget/NoteWidgetProvider_4x.java b/src/Notes-master/src/net/micode/notes/widget/NoteWidgetProvider_4x.java index c12a02e..d1b1240 100644 --- a/src/Notes-master/src/net/micode/notes/widget/NoteWidgetProvider_4x.java +++ b/src/Notes-master/src/net/micode/notes/widget/NoteWidgetProvider_4x.java @@ -1,19 +1,3 @@ -/* - * 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.widget; import android.appwidget.AppWidgetManager; @@ -23,24 +7,28 @@ import net.micode.notes.R; import net.micode.notes.data.Notes; import net.micode.notes.tool.ResourceParser; - +// 定义一个4x4小部件的提供者类,继承自NoteWidgetProvider public class NoteWidgetProvider_4x extends NoteWidgetProvider { + // 覆盖父类的onUpdate方法,用于更新小部件的视图 @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { super.update(context, appWidgetManager, appWidgetIds); } + // 返回4x4小部件的布局资源ID protected int getLayoutId() { return R.layout.widget_4x; } + // 根据背景ID返回4x4小部件的背景资源ID @Override protected int getBgResourceId(int bgId) { return ResourceParser.WidgetBgResources.getWidget4xBgResource(bgId); } + // 返回小部件的类型,这里是4x4类型 @Override protected int getWidgetType() { return Notes.TYPE_WIDGET_4X; } -} +} \ No newline at end of file From a495b394fa4686564cc2bfe7d054eb66276713ae Mon Sep 17 00:00:00 2001 From: zhangjinhan <2403497099@qq.com> Date: Sun, 29 Dec 2024 22:41:45 +0800 Subject: [PATCH 13/13] =?UTF-8?q?=E5=8A=A0=E4=BA=86=E6=96=87=E6=A1=A3?= =?UTF-8?q?=E5=88=B0main=E9=87=8C=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...签开源软件泛读报告文档(1).docx | Bin 0 -> 771171 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 doc/小米便签开源软件泛读报告文档(1).docx diff --git a/doc/小米便签开源软件泛读报告文档(1).docx b/doc/小米便签开源软件泛读报告文档(1).docx new file mode 100644 index 0000000000000000000000000000000000000000..473000de801506dd23ffc1bd357615166b19ffc2 GIT binary patch literal 771171 zcmeFY(|2Z37v}rMwrx8V+o)7*+qNpU&5CW?wry3+H+ItXeSOXt=Zx{eOY} zKbYeGPv}*P<5vHGhTQYczae&sJ1T-J7Mm$XccL5i@h@j<5wC`@+@iGCN9n-XVpAYu z&wPC)&wn&C_kN0G!MP#V$D}YnO4Nk4OpD>4okdYxs`SGZSfr^=xEESbZNNP`qtUiWNdVseUGAg!2<8Q3}!k;*;)403(≫?!ceiDuUnn49OI%%Zs|5M7u-ij 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 z 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
    ej8l*K7d^r&sD+%Q}pa|{y1=c->T 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̰^?7H;Edn>p}m3%FZg@FJP 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 z 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

    kb0WARrn=w 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૛Ml^?jH;i+xA@auu~T(w34CyB`uEe!2Vu? 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

    Yeq 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