From 946c2cb42867eb1d5ff18ca2b89b038018321e5b Mon Sep 17 00:00:00 2001 From: lyl <2649575172@qq.com> Date: Sat, 9 Nov 2024 19:03:00 +0800 Subject: [PATCH 1/4] diyici --- doc/~$便签开源代码的泛读报告 .docx | Bin 0 -> 162 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 doc/~$便签开源代码的泛读报告 .docx diff --git a/doc/~$便签开源代码的泛读报告 .docx b/doc/~$便签开源代码的泛读报告 .docx new file mode 100644 index 0000000000000000000000000000000000000000..95e910565697ed8ee703de4e859800f9c3fb7549 GIT binary patch literal 162 zcmZQO@b2=mgTEL^1I!G5=~Lon&SzkF Date: Sun, 10 Nov 2024 01:20:18 +0800 Subject: [PATCH 2/4] liyinglong --- doc/~$便签开源代码的泛读报告 .docx | Bin 162 -> 0 bytes ...米便签开源代码的泛读报告 .docx | Bin 22098 -> 0 bytes .../net/micode/notes/data/Contact.java | 0 {src => src1}/net/micode/notes/data/Notes.java | 0 .../micode/notes/data/NotesDatabaseHelper.java | 0 .../net/micode/notes/data/NotesProvider.java | 0 .../net/micode/notes/gtask/data/MetaData.java | 0 .../net/micode/notes/gtask/data/Node.java | 0 .../net/micode/notes/gtask/data/SqlData.java | 0 .../net/micode/notes/gtask/data/SqlNote.java | 0 .../net/micode/notes/gtask/data/Task.java | 0 .../net/micode/notes/gtask/data/TaskList.java | 0 .../gtask/exception/ActionFailureException.java | 0 .../exception/NetworkFailureException.java | 0 .../notes/gtask/remote/GTaskASyncTask.java | 0 .../micode/notes/gtask/remote/GTaskClient.java | 0 .../micode/notes/gtask/remote/GTaskManager.java | 0 .../notes/gtask/remote/GTaskSyncService.java | 0 {src => src1}/net/micode/notes/model/Note.java | 0 .../net/micode/notes/model/WorkingNote.java | 0 .../net/micode/notes/tool/BackupUtils.java | 0 .../net/micode/notes/tool/DataUtils.java | 0 .../net/micode/notes/tool/GTaskStringUtils.java | 0 .../net/micode/notes/tool/ResourceParser.java | 0 .../net/micode/notes/ui/AlarmAlertActivity.java | 0 .../net/micode/notes/ui/AlarmInitReceiver.java | 0 .../net/micode/notes/ui/AlarmReceiver.java | 0 .../net/micode/notes/ui/DateTimePicker.java | 0 .../micode/notes/ui/DateTimePickerDialog.java | 0 .../net/micode/notes/ui/DropdownMenu.java | 0 .../net/micode/notes/ui/FoldersListAdapter.java | 0 .../net/micode/notes/ui/NoteEditActivity.java | 0 .../net/micode/notes/ui/NoteEditText.java | 0 .../net/micode/notes/ui/NoteItemData.java | 0 .../net/micode/notes/ui/NotesListActivity.java | 0 .../net/micode/notes/ui/NotesListAdapter.java | 0 .../net/micode/notes/ui/NotesListItem.java | 0 .../notes/ui/NotesPreferenceActivity.java | 0 .../micode/notes/widget/NoteWidgetProvider.java | 0 .../notes/widget/NoteWidgetProvider_2x.java | 0 .../notes/widget/NoteWidgetProvider_4x.java | 0 41 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 doc/~$便签开源代码的泛读报告 .docx delete mode 100644 doc/小米便签开源代码的泛读报告 .docx rename {src => src1}/net/micode/notes/data/Contact.java (100%) rename {src => src1}/net/micode/notes/data/Notes.java (100%) rename {src => src1}/net/micode/notes/data/NotesDatabaseHelper.java (100%) rename {src => src1}/net/micode/notes/data/NotesProvider.java (100%) rename {src => src1}/net/micode/notes/gtask/data/MetaData.java (100%) rename {src => src1}/net/micode/notes/gtask/data/Node.java (100%) rename {src => src1}/net/micode/notes/gtask/data/SqlData.java (100%) rename {src => src1}/net/micode/notes/gtask/data/SqlNote.java (100%) rename {src => src1}/net/micode/notes/gtask/data/Task.java (100%) rename {src => src1}/net/micode/notes/gtask/data/TaskList.java (100%) rename {src => src1}/net/micode/notes/gtask/exception/ActionFailureException.java (100%) rename {src => src1}/net/micode/notes/gtask/exception/NetworkFailureException.java (100%) rename {src => src1}/net/micode/notes/gtask/remote/GTaskASyncTask.java (100%) rename {src => src1}/net/micode/notes/gtask/remote/GTaskClient.java (100%) rename {src => src1}/net/micode/notes/gtask/remote/GTaskManager.java (100%) rename {src => src1}/net/micode/notes/gtask/remote/GTaskSyncService.java (100%) rename {src => src1}/net/micode/notes/model/Note.java (100%) rename {src => src1}/net/micode/notes/model/WorkingNote.java (100%) rename {src => src1}/net/micode/notes/tool/BackupUtils.java (100%) rename {src => src1}/net/micode/notes/tool/DataUtils.java (100%) rename {src => src1}/net/micode/notes/tool/GTaskStringUtils.java (100%) rename {src => src1}/net/micode/notes/tool/ResourceParser.java (100%) rename {src => src1}/net/micode/notes/ui/AlarmAlertActivity.java (100%) rename {src => src1}/net/micode/notes/ui/AlarmInitReceiver.java (100%) rename {src => src1}/net/micode/notes/ui/AlarmReceiver.java (100%) rename {src => src1}/net/micode/notes/ui/DateTimePicker.java (100%) rename {src => src1}/net/micode/notes/ui/DateTimePickerDialog.java (100%) rename {src => src1}/net/micode/notes/ui/DropdownMenu.java (100%) rename {src => src1}/net/micode/notes/ui/FoldersListAdapter.java (100%) rename {src => src1}/net/micode/notes/ui/NoteEditActivity.java (100%) rename {src => src1}/net/micode/notes/ui/NoteEditText.java (100%) rename {src => src1}/net/micode/notes/ui/NoteItemData.java (100%) rename {src => src1}/net/micode/notes/ui/NotesListActivity.java (100%) rename {src => src1}/net/micode/notes/ui/NotesListAdapter.java (100%) rename {src => src1}/net/micode/notes/ui/NotesListItem.java (100%) rename {src => src1}/net/micode/notes/ui/NotesPreferenceActivity.java (100%) rename {src => src1}/net/micode/notes/widget/NoteWidgetProvider.java (100%) rename {src => src1}/net/micode/notes/widget/NoteWidgetProvider_2x.java (100%) rename {src => src1}/net/micode/notes/widget/NoteWidgetProvider_4x.java (100%) diff --git a/doc/~$便签开源代码的泛读报告 .docx b/doc/~$便签开源代码的泛读报告 .docx deleted file mode 100644 index 95e910565697ed8ee703de4e859800f9c3fb7549..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 162 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 diff --git a/src/net/micode/notes/data/Contact.java b/src1/net/micode/notes/data/Contact.java similarity index 100% rename from src/net/micode/notes/data/Contact.java rename to src1/net/micode/notes/data/Contact.java diff --git a/src/net/micode/notes/data/Notes.java b/src1/net/micode/notes/data/Notes.java similarity index 100% rename from src/net/micode/notes/data/Notes.java rename to src1/net/micode/notes/data/Notes.java diff --git a/src/net/micode/notes/data/NotesDatabaseHelper.java b/src1/net/micode/notes/data/NotesDatabaseHelper.java similarity index 100% rename from src/net/micode/notes/data/NotesDatabaseHelper.java rename to src1/net/micode/notes/data/NotesDatabaseHelper.java diff --git a/src/net/micode/notes/data/NotesProvider.java b/src1/net/micode/notes/data/NotesProvider.java similarity index 100% rename from src/net/micode/notes/data/NotesProvider.java rename to src1/net/micode/notes/data/NotesProvider.java diff --git a/src/net/micode/notes/gtask/data/MetaData.java b/src1/net/micode/notes/gtask/data/MetaData.java similarity index 100% rename from src/net/micode/notes/gtask/data/MetaData.java rename to src1/net/micode/notes/gtask/data/MetaData.java diff --git a/src/net/micode/notes/gtask/data/Node.java b/src1/net/micode/notes/gtask/data/Node.java similarity index 100% rename from src/net/micode/notes/gtask/data/Node.java rename to src1/net/micode/notes/gtask/data/Node.java diff --git a/src/net/micode/notes/gtask/data/SqlData.java b/src1/net/micode/notes/gtask/data/SqlData.java similarity index 100% rename from src/net/micode/notes/gtask/data/SqlData.java rename to src1/net/micode/notes/gtask/data/SqlData.java diff --git a/src/net/micode/notes/gtask/data/SqlNote.java b/src1/net/micode/notes/gtask/data/SqlNote.java similarity index 100% rename from src/net/micode/notes/gtask/data/SqlNote.java rename to src1/net/micode/notes/gtask/data/SqlNote.java diff --git a/src/net/micode/notes/gtask/data/Task.java b/src1/net/micode/notes/gtask/data/Task.java similarity index 100% rename from src/net/micode/notes/gtask/data/Task.java rename to src1/net/micode/notes/gtask/data/Task.java diff --git a/src/net/micode/notes/gtask/data/TaskList.java b/src1/net/micode/notes/gtask/data/TaskList.java similarity index 100% rename from src/net/micode/notes/gtask/data/TaskList.java rename to src1/net/micode/notes/gtask/data/TaskList.java diff --git a/src/net/micode/notes/gtask/exception/ActionFailureException.java b/src1/net/micode/notes/gtask/exception/ActionFailureException.java similarity index 100% rename from src/net/micode/notes/gtask/exception/ActionFailureException.java rename to src1/net/micode/notes/gtask/exception/ActionFailureException.java diff --git a/src/net/micode/notes/gtask/exception/NetworkFailureException.java b/src1/net/micode/notes/gtask/exception/NetworkFailureException.java similarity index 100% rename from src/net/micode/notes/gtask/exception/NetworkFailureException.java rename to src1/net/micode/notes/gtask/exception/NetworkFailureException.java diff --git a/src/net/micode/notes/gtask/remote/GTaskASyncTask.java b/src1/net/micode/notes/gtask/remote/GTaskASyncTask.java similarity index 100% rename from src/net/micode/notes/gtask/remote/GTaskASyncTask.java rename to src1/net/micode/notes/gtask/remote/GTaskASyncTask.java diff --git a/src/net/micode/notes/gtask/remote/GTaskClient.java b/src1/net/micode/notes/gtask/remote/GTaskClient.java similarity index 100% rename from src/net/micode/notes/gtask/remote/GTaskClient.java rename to src1/net/micode/notes/gtask/remote/GTaskClient.java diff --git a/src/net/micode/notes/gtask/remote/GTaskManager.java b/src1/net/micode/notes/gtask/remote/GTaskManager.java similarity index 100% rename from src/net/micode/notes/gtask/remote/GTaskManager.java rename to src1/net/micode/notes/gtask/remote/GTaskManager.java diff --git a/src/net/micode/notes/gtask/remote/GTaskSyncService.java b/src1/net/micode/notes/gtask/remote/GTaskSyncService.java similarity index 100% rename from src/net/micode/notes/gtask/remote/GTaskSyncService.java rename to src1/net/micode/notes/gtask/remote/GTaskSyncService.java diff --git a/src/net/micode/notes/model/Note.java b/src1/net/micode/notes/model/Note.java similarity index 100% rename from src/net/micode/notes/model/Note.java rename to src1/net/micode/notes/model/Note.java diff --git a/src/net/micode/notes/model/WorkingNote.java b/src1/net/micode/notes/model/WorkingNote.java similarity index 100% rename from src/net/micode/notes/model/WorkingNote.java rename to src1/net/micode/notes/model/WorkingNote.java diff --git a/src/net/micode/notes/tool/BackupUtils.java b/src1/net/micode/notes/tool/BackupUtils.java similarity index 100% rename from src/net/micode/notes/tool/BackupUtils.java rename to src1/net/micode/notes/tool/BackupUtils.java diff --git a/src/net/micode/notes/tool/DataUtils.java b/src1/net/micode/notes/tool/DataUtils.java similarity index 100% rename from src/net/micode/notes/tool/DataUtils.java rename to src1/net/micode/notes/tool/DataUtils.java diff --git a/src/net/micode/notes/tool/GTaskStringUtils.java b/src1/net/micode/notes/tool/GTaskStringUtils.java similarity index 100% rename from src/net/micode/notes/tool/GTaskStringUtils.java rename to src1/net/micode/notes/tool/GTaskStringUtils.java diff --git a/src/net/micode/notes/tool/ResourceParser.java b/src1/net/micode/notes/tool/ResourceParser.java similarity index 100% rename from src/net/micode/notes/tool/ResourceParser.java rename to src1/net/micode/notes/tool/ResourceParser.java diff --git a/src/net/micode/notes/ui/AlarmAlertActivity.java b/src1/net/micode/notes/ui/AlarmAlertActivity.java similarity index 100% rename from src/net/micode/notes/ui/AlarmAlertActivity.java rename to src1/net/micode/notes/ui/AlarmAlertActivity.java diff --git a/src/net/micode/notes/ui/AlarmInitReceiver.java b/src1/net/micode/notes/ui/AlarmInitReceiver.java similarity index 100% rename from src/net/micode/notes/ui/AlarmInitReceiver.java rename to src1/net/micode/notes/ui/AlarmInitReceiver.java diff --git a/src/net/micode/notes/ui/AlarmReceiver.java b/src1/net/micode/notes/ui/AlarmReceiver.java similarity index 100% rename from src/net/micode/notes/ui/AlarmReceiver.java rename to src1/net/micode/notes/ui/AlarmReceiver.java diff --git a/src/net/micode/notes/ui/DateTimePicker.java b/src1/net/micode/notes/ui/DateTimePicker.java similarity index 100% rename from src/net/micode/notes/ui/DateTimePicker.java rename to src1/net/micode/notes/ui/DateTimePicker.java diff --git a/src/net/micode/notes/ui/DateTimePickerDialog.java b/src1/net/micode/notes/ui/DateTimePickerDialog.java similarity index 100% rename from src/net/micode/notes/ui/DateTimePickerDialog.java rename to src1/net/micode/notes/ui/DateTimePickerDialog.java diff --git a/src/net/micode/notes/ui/DropdownMenu.java b/src1/net/micode/notes/ui/DropdownMenu.java similarity index 100% rename from src/net/micode/notes/ui/DropdownMenu.java rename to src1/net/micode/notes/ui/DropdownMenu.java diff --git a/src/net/micode/notes/ui/FoldersListAdapter.java b/src1/net/micode/notes/ui/FoldersListAdapter.java similarity index 100% rename from src/net/micode/notes/ui/FoldersListAdapter.java rename to src1/net/micode/notes/ui/FoldersListAdapter.java diff --git a/src/net/micode/notes/ui/NoteEditActivity.java b/src1/net/micode/notes/ui/NoteEditActivity.java similarity index 100% rename from src/net/micode/notes/ui/NoteEditActivity.java rename to src1/net/micode/notes/ui/NoteEditActivity.java diff --git a/src/net/micode/notes/ui/NoteEditText.java b/src1/net/micode/notes/ui/NoteEditText.java similarity index 100% rename from src/net/micode/notes/ui/NoteEditText.java rename to src1/net/micode/notes/ui/NoteEditText.java diff --git a/src/net/micode/notes/ui/NoteItemData.java b/src1/net/micode/notes/ui/NoteItemData.java similarity index 100% rename from src/net/micode/notes/ui/NoteItemData.java rename to src1/net/micode/notes/ui/NoteItemData.java diff --git a/src/net/micode/notes/ui/NotesListActivity.java b/src1/net/micode/notes/ui/NotesListActivity.java similarity index 100% rename from src/net/micode/notes/ui/NotesListActivity.java rename to src1/net/micode/notes/ui/NotesListActivity.java diff --git a/src/net/micode/notes/ui/NotesListAdapter.java b/src1/net/micode/notes/ui/NotesListAdapter.java similarity index 100% rename from src/net/micode/notes/ui/NotesListAdapter.java rename to src1/net/micode/notes/ui/NotesListAdapter.java diff --git a/src/net/micode/notes/ui/NotesListItem.java b/src1/net/micode/notes/ui/NotesListItem.java similarity index 100% rename from src/net/micode/notes/ui/NotesListItem.java rename to src1/net/micode/notes/ui/NotesListItem.java diff --git a/src/net/micode/notes/ui/NotesPreferenceActivity.java b/src1/net/micode/notes/ui/NotesPreferenceActivity.java similarity index 100% rename from src/net/micode/notes/ui/NotesPreferenceActivity.java rename to src1/net/micode/notes/ui/NotesPreferenceActivity.java diff --git a/src/net/micode/notes/widget/NoteWidgetProvider.java b/src1/net/micode/notes/widget/NoteWidgetProvider.java similarity index 100% rename from src/net/micode/notes/widget/NoteWidgetProvider.java rename to src1/net/micode/notes/widget/NoteWidgetProvider.java diff --git a/src/net/micode/notes/widget/NoteWidgetProvider_2x.java b/src1/net/micode/notes/widget/NoteWidgetProvider_2x.java similarity index 100% rename from src/net/micode/notes/widget/NoteWidgetProvider_2x.java rename to src1/net/micode/notes/widget/NoteWidgetProvider_2x.java diff --git a/src/net/micode/notes/widget/NoteWidgetProvider_4x.java b/src1/net/micode/notes/widget/NoteWidgetProvider_4x.java similarity index 100% rename from src/net/micode/notes/widget/NoteWidgetProvider_4x.java rename to src1/net/micode/notes/widget/NoteWidgetProvider_4x.java From 52f3eb0b9c7fd18d6c26576c0c35c5b99ca8120a Mon Sep 17 00:00:00 2001 From: lyl <2649575172@qq.com> Date: Thu, 21 Nov 2024 23:59:03 +0800 Subject: [PATCH 3/4] zuizhongjieguo --- Dome | 1 + doc/2406李应龙结果图.jpg | Bin 0 -> 195624 bytes ...米便签开源代码的泛读报告 .docx | Bin 0 -> 22098 bytes .../micode/notes/ui/AlarmInitReceiver.java | 15 + src1/net/micode/notes/ui/DateTimePicker.java | 145 +++++++++ .../micode/notes/ui/DateTimePickerDialog.java | 26 ++ .../micode/notes/ui/FoldersListAdapter.java | 23 +- .../net/micode/notes/ui/NoteEditActivity.java | 287 +++++++++++++++++- src1/net/micode/notes/ui/NotesListItem.java | 12 + 9 files changed, 506 insertions(+), 3 deletions(-) create mode 160000 Dome create mode 100644 doc/2406李应龙结果图.jpg create mode 100644 doc/小米便签开源代码的泛读报告 .docx diff --git a/Dome b/Dome new file mode 160000 index 0000000..85ad4e7 --- /dev/null +++ b/Dome @@ -0,0 +1 @@ +Subproject commit 85ad4e7b6c62b539ad3bffcdf964e05becfa0bba diff --git a/doc/2406李应龙结果图.jpg b/doc/2406李应龙结果图.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9cb47973f7bfa8a212b427c2a0b49c76e50391d9 GIT binary patch literal 195624 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

@hNG!Y^YMt_! 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

WL?Kvk}g+aPf!Ri<)}yPNE>0 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 literal 0 HcmV?d00001 diff --git a/doc/小米便签开源代码的泛读报告 .docx b/doc/小米便签开源代码的泛读报告 .docx new file mode 100644 index 0000000000000000000000000000000000000000..3bf75f8add7ec32d4efea18940c671439a1cbf9d GIT binary patch literal 22098 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 literal 0 HcmV?d00001 diff --git a/src1/net/micode/notes/ui/AlarmInitReceiver.java b/src1/net/micode/notes/ui/AlarmInitReceiver.java index f221202..220c8ad 100644 --- a/src1/net/micode/notes/ui/AlarmInitReceiver.java +++ b/src1/net/micode/notes/ui/AlarmInitReceiver.java @@ -28,37 +28,52 @@ import net.micode.notes.data.Notes; import net.micode.notes.data.Notes.NoteColumns; +// 定义一个名为AlarmInitReceiver的类,继承自BroadcastReceiver public class AlarmInitReceiver extends BroadcastReceiver { + // 定义一个字符串数组,包含NoteColumns中的ID和ALERTED_DATE private static final String [] PROJECTION = new String [] { NoteColumns.ID, NoteColumns.ALERTED_DATE }; + // 定义两个常量,分别表示ID和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(); + // 查询数据库,获取所有未提醒的笔记 Cursor c = context.getContentResolver().query(Notes.CONTENT_NOTE_URI, PROJECTION, NoteColumns.ALERTED_DATE + ">? AND " + NoteColumns.TYPE + "=" + Notes.TYPE_NOTE, new String[] { String.valueOf(currentDate) }, null); + // 如果c不为空 if (c != null) { + // 如果c可以移动到第一行 if (c.moveToFirst()) { + // 循环遍历c do { + // 获取提醒日期 long alertDate = c.getLong(COLUMN_ALERTED_DATE); + // 创建一个Intent,指向AlarmReceiver类 Intent sender = new Intent(context, AlarmReceiver.class); + // 设置Intent的数据,指向Notes.CONTENT_NOTE_URI,并添加c.getLong(COLUMN_ID)作为参数 sender.setData(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, c.getLong(COLUMN_ID))); + // 创建一个PendingIntent,用于发送广播 PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, sender, 0); + // 获取AlarmManager服务 AlarmManager alermManager = (AlarmManager) context .getSystemService(Context.ALARM_SERVICE); + // 设置闹钟,在alertDate时间点唤醒设备,并发送广播 alermManager.set(AlarmManager.RTC_WAKEUP, alertDate, pendingIntent); } while (c.moveToNext()); } + // 关闭c c.close(); } } diff --git a/src1/net/micode/notes/ui/DateTimePicker.java b/src1/net/micode/notes/ui/DateTimePicker.java index 496b0cd..468294e 100644 --- a/src1/net/micode/notes/ui/DateTimePicker.java +++ b/src1/net/micode/notes/ui/DateTimePicker.java @@ -67,8 +67,11 @@ public class DateTimePicker extends FrameLayout { 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(); } }; @@ -76,37 +79,52 @@ public class DateTimePicker extends FrameLayout { private NumberPicker.OnValueChangeListener mOnHourChangedListener = new NumberPicker.OnValueChangeListener() { @Override public void onValueChange(NumberPicker picker, int oldVal, int newVal) { + // 判断是否日期改变 boolean isDateChanged = false; + // 获取当前时间 Calendar cal = Calendar.getInstance(); + // 判断是否为24小时制 if (!mIs24HourView) { + // 判断是否为上午 if (!mIsAm && oldVal == HOURS_IN_HALF_DAY - 1 && newVal == HOURS_IN_HALF_DAY) { + // 如果当前时间是上午11点,并且选择的时间是下午12点,则日期加1天 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) { + // 如果当前时间是下午12点,并且选择的时间是上午11点,则日期减1天 cal.setTimeInMillis(mDate.getTimeInMillis()); cal.add(Calendar.DAY_OF_YEAR, -1); isDateChanged = true; } + // 判断是否跨过12点 if (oldVal == HOURS_IN_HALF_DAY - 1 && newVal == HOURS_IN_HALF_DAY || oldVal == HOURS_IN_HALF_DAY && newVal == HOURS_IN_HALF_DAY - 1) { + // 跨过12点,则上午和下午互换 mIsAm = !mIsAm; updateAmPmControl(); } } else { + // 判断是否跨过24点 if (oldVal == HOURS_IN_ALL_DAY - 1 && newVal == 0) { + // 如果当前时间是23点,并且选择的时间是0点,则日期加1天 cal.setTimeInMillis(mDate.getTimeInMillis()); cal.add(Calendar.DAY_OF_YEAR, 1); isDateChanged = true; } else if (oldVal == 0 && newVal == HOURS_IN_ALL_DAY - 1) { + // 如果当前时间是0点,并且选择的时间是23点,则日期减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)); @@ -118,84 +136,120 @@ public class DateTimePicker extends FrameLayout { 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; + // 如果旧值等于最大值且新值等于最小值,则偏移量为1 if (oldVal == maxValue && newVal == minValue) { offset += 1; + // 如果旧值等于最小值且新值等于最大值,则偏移量为-1 } else if (oldVal == minValue && newVal == maxValue) { offset -= 1; } + // 如果偏移量不为0,则更新日期和时间 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(); } }; +// 定义一个NumberPicker的值改变监听器 private NumberPicker.OnValueChangeListener mOnAmPmChangedListener = new NumberPicker.OnValueChangeListener() { @Override public void onValueChange(NumberPicker picker, int oldVal, int newVal) { + // 切换AM/PM mIsAm = !mIsAm; + // 如果是AM,则将时间减去12小时 if (mIsAm) { mDate.add(Calendar.HOUR_OF_DAY, -HOURS_IN_HALF_DAY); + // 如果是PM,则将时间加上12小时 } else { mDate.add(Calendar.HOUR_OF_DAY, HOURS_IN_HALF_DAY); } + // 更新AM/PM控制 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; + // 判断当前小时是否大于等于12 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 @@ -215,20 +269,29 @@ public class DateTimePicker extends FrameLayout { } @Override + // 重写setEnabled方法 public void setEnabled(boolean enabled) { + // 如果当前状态和传入的状态相同,则直接返回 if (mIsEnabled == enabled) { return; } + // 调用父类的setEnabled方法 super.setEnabled(enabled); + // 设置日期选择器是否可用 mDateSpinner.setEnabled(enabled); + // 设置分钟选择器是否可用 mMinuteSpinner.setEnabled(enabled); + // 设置小时选择器是否可用 mHourSpinner.setEnabled(enabled); + // 设置上午/下午选择器是否可用 mAmPmSpinner.setEnabled(enabled); + // 更新当前状态 mIsEnabled = enabled; } @Override public boolean isEnabled() { + // 返回mIsEnabled的值 return mIsEnabled; } @@ -247,8 +310,11 @@ public class DateTimePicker extends FrameLayout { * @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)); } @@ -264,10 +330,15 @@ public class DateTimePicker extends FrameLayout { */ public void setCurrentDate(int year, int month, int dayOfMonth, int hourOfDay, int minute) { + // 设置当前年份 setCurrentYear(year); + // 设置当前月份 setCurrentMonth(month); + // 设置当前日期 setCurrentDay(dayOfMonth); + // 设置当前小时 setCurrentHour(hourOfDay); + // 设置当前分钟 setCurrentMinute(minute); } @@ -277,6 +348,7 @@ public class DateTimePicker extends FrameLayout { * @return The current year */ public int getCurrentYear() { + // 获取当前年份 return mDate.get(Calendar.YEAR); } @@ -286,11 +358,15 @@ public class DateTimePicker extends FrameLayout { * @param year The current year */ public void setCurrentYear(int year) { + // 如果当前年份与传入的年份相同,则不进行任何操作 if (!mInitialising && year == getCurrentYear()) { return; } + // 设置当前年份 mDate.set(Calendar.YEAR, year); + // 更新日期控件 updateDateControl(); + // 日期时间改变 onDateTimeChanged(); } @@ -300,6 +376,7 @@ public class DateTimePicker extends FrameLayout { * @return The current month in the year */ public int getCurrentMonth() { + // 获取当前月份 return mDate.get(Calendar.MONTH); } @@ -309,11 +386,15 @@ public class DateTimePicker extends FrameLayout { * @param month The month in the year */ public void setCurrentMonth(int month) { + // 如果当前月份和要设置的月份相同,则不进行设置 if (!mInitialising && month == getCurrentMonth()) { return; } + // 设置当前月份 mDate.set(Calendar.MONTH, month); + // 更新日期控件 updateDateControl(); + // 日期改变回调 onDateTimeChanged(); } @@ -322,7 +403,9 @@ public class DateTimePicker extends FrameLayout { * * @return The day of the month */ + // 获取当前日期 public int getCurrentDay() { + // 获取当前日期的日 return mDate.get(Calendar.DAY_OF_MONTH); } @@ -332,11 +415,15 @@ public class DateTimePicker extends FrameLayout { * @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(); } @@ -344,18 +431,26 @@ public class DateTimePicker extends FrameLayout { * 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() { + // 如果是24小时制 if (mIs24HourView){ + // 获取当前小时 return getCurrentHourOfDay(); } else { + // 获取当前小时 int hour = getCurrentHourOfDay(); + // 如果当前小时大于12 if (hour > HOURS_IN_HALF_DAY) { + // 返回当前小时减去12 return hour - HOURS_IN_HALF_DAY; } else { + // 如果当前小时等于0,返回12 return hour == 0 ? HOURS_IN_HALF_DAY : hour; } } @@ -366,26 +461,40 @@ public class DateTimePicker extends FrameLayout { * * @param hourOfDay */ + // 设置当前小时 public void setCurrentHour(int hourOfDay) { + // 如果当前正在初始化,或者当前小时和要设置的小时相同,则直接返回 if (!mInitialising && hourOfDay == getCurrentHourOfDay()) { return; } + // 设置当前小时 mDate.set(Calendar.HOUR_OF_DAY, hourOfDay); + // 如果不是24小时制 if (!mIs24HourView) { + // 如果当前小时大于等于12 if (hourOfDay >= HOURS_IN_HALF_DAY) { + // 设置为下午 mIsAm = false; + // 如果当前小时大于12 if (hourOfDay > HOURS_IN_HALF_DAY) { + // 当前小时减去12 hourOfDay -= HOURS_IN_HALF_DAY; } } else { + // 设置为上午 mIsAm = true; + // 如果当前小时为0 if (hourOfDay == 0) { + // 当前小时设置为12 hourOfDay = HOURS_IN_HALF_DAY; } } + // 更新上午/下午控制 updateAmPmControl(); } + // 设置小时选择器的值 mHourSpinner.setValue(hourOfDay); + // 日期时间改变 onDateTimeChanged(); } @@ -394,6 +503,7 @@ public class DateTimePicker extends FrameLayout { * * @return The Current Minute */ + // 获取当前分钟 public int getCurrentMinute() { return mDate.get(Calendar.MINUTE); } @@ -402,17 +512,22 @@ public class DateTimePicker extends FrameLayout { * Set current minute */ public void setCurrentMinute(int minute) { + // 如果mInitialising为false且minute等于getCurrentMinute(),则直接返回 if (!mInitialising && minute == getCurrentMinute()) { return; } + // 设置mMinuteSpinner的值为minute mMinuteSpinner.setValue(minute); + // 设置mDate的分钟为minute mDate.set(Calendar.MINUTE, minute); + // 调用onDateTimeChanged()方法 onDateTimeChanged(); } /** * @return true if this is in 24 hour view else false. */ + // 判断是否为24小时制 public boolean is24HourView () { return mIs24HourView; } @@ -423,47 +538,73 @@ public class DateTimePicker extends FrameLayout { * @param is24HourView True for 24 hour mode. False for AM/PM mode. */ public void set24HourView(boolean is24HourView) { + // 如果当前时间格式和传入的时间格式相同,则直接返回 if (mIs24HourView == is24HourView) { return; } + // 更新时间格式 mIs24HourView = is24HourView; + // 如果是24小时制,则隐藏上午/下午选择器 mAmPmSpinner.setVisibility(is24HourView ? View.GONE : View.VISIBLE); + // 获取当前小时数 int hour = getCurrentHourOfDay(); + // 更新小时选择器 updateHourControl(); + // 设置当前小时数 setCurrentHour(hour); + // 更新上午/下午选择器 updateAmPmControl(); } private void updateDateControl() { + // 获取当前日期 Calendar cal = Calendar.getInstance(); + // 将当前日期设置为mDate的时间 cal.setTimeInMillis(mDate.getTimeInMillis()); + // 将当前日期向前推DAYS_IN_ALL_WEEK / 2 - 1天 cal.add(Calendar.DAY_OF_YEAR, -DAYS_IN_ALL_WEEK / 2 - 1); + // 清空mDateSpinner的显示值 mDateSpinner.setDisplayedValues(null); + // 循环DAYS_IN_ALL_WEEK次 for (int i = 0; i < DAYS_IN_ALL_WEEK; ++i) { + // 将当前日期加1天 cal.add(Calendar.DAY_OF_YEAR, 1); + // 将当前日期格式化为"MM.dd EEEE"的字符串 mDateDisplayValues[i] = (String) DateFormat.format("MM.dd EEEE", cal); } + // 将mDateSpinner的显示值设置为mDateDisplayValues mDateSpinner.setDisplayedValues(mDateDisplayValues); + // 将mDateSpinner的值设置为DAYS_IN_ALL_WEEK / 2 mDateSpinner.setValue(DAYS_IN_ALL_WEEK / 2); + // 使mDateSpinner无效 mDateSpinner.invalidate(); } private void updateAmPmControl() { + // 如果是24小时制,则隐藏上午/下午选择器 if (mIs24HourView) { mAmPmSpinner.setVisibility(View.GONE); } else { + // 如果是上午,则选择上午,否则选择下午 int index = mIsAm ? Calendar.AM : Calendar.PM; mAmPmSpinner.setValue(index); + // 显示上午/下午选择器 mAmPmSpinner.setVisibility(View.VISIBLE); } } + // 更新小时控件 private void updateHourControl() { + // 如果是24小时制 if (mIs24HourView) { + // 设置小时选择器的最小值为24小时制最小值 mHourSpinner.setMinValue(HOUR_SPINNER_MIN_VAL_24_HOUR_VIEW); + // 设置小时选择器的最大值为24小时制最大值 mHourSpinner.setMaxValue(HOUR_SPINNER_MAX_VAL_24_HOUR_VIEW); } else { + // 设置小时选择器的最小值为12小时制最小值 mHourSpinner.setMinValue(HOUR_SPINNER_MIN_VAL_12_HOUR_VIEW); + // 设置小时选择器的最大值为12小时制最大值 mHourSpinner.setMaxValue(HOUR_SPINNER_MAX_VAL_12_HOUR_VIEW); } } @@ -472,12 +613,16 @@ public class DateTimePicker extends FrameLayout { * 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) { + // 调用日期时间改变监听器的onDateTimeChanged方法,并传入当前日期时间 mOnDateTimeChangedListener.onDateTimeChanged(this, getCurrentYear(), getCurrentMonth(), getCurrentDay(), getCurrentHourOfDay(), getCurrentMinute()); } diff --git a/src1/net/micode/notes/ui/DateTimePickerDialog.java b/src1/net/micode/notes/ui/DateTimePickerDialog.java index 2c47ba4..b70b7d9 100644 --- a/src1/net/micode/notes/ui/DateTimePickerDialog.java +++ b/src1/net/micode/notes/ui/DateTimePickerDialog.java @@ -31,57 +31,83 @@ import android.text.format.DateUtils; public class DateTimePickerDialog extends AlertDialog implements OnClickListener { + // 定义一个Calendar对象,用于存储日期和时间 private Calendar mDate = Calendar.getInstance(); + // 定义一个布尔变量,用于判断是否为24小时制 private boolean mIs24HourView; + // 定义一个OnDateTimeSetListener对象,用于监听日期时间的设置 private OnDateTimeSetListener mOnDateTimeSetListener; + // 定义一个DateTimePicker对象,用于显示日期时间选择器 private DateTimePicker mDateTimePicker; + // 定义一个接口,用于监听日期时间设置 public interface OnDateTimeSetListener { + // 当日期时间设置时,调用此方法 void OnDateTimeSet(AlertDialog dialog, long date); } +// 定义一个DateTimePickerDialog类,传入Context和long类型的date参数 public DateTimePickerDialog(Context context, long date) { + // 调用父类的构造方法 super(context); + // 创建一个DateTimePicker对象 mDateTimePicker = new DateTimePicker(context); + // 设置视图 setView(mDateTimePicker); + // 设置DateTimePicker的监听器 mDateTimePicker.setOnDateTimeChangedListener(new OnDateTimeChangedListener() { public void onDateTimeChanged(DateTimePicker view, int year, int month, int dayOfMonth, int hourOfDay, int minute) { + // 设置日期 mDate.set(Calendar.YEAR, year); mDate.set(Calendar.MONTH, month); mDate.set(Calendar.DAY_OF_MONTH, dayOfMonth); mDate.set(Calendar.HOUR_OF_DAY, hourOfDay); mDate.set(Calendar.MINUTE, minute); + // 更新标题 updateTitle(mDate.getTimeInMillis()); } }); + // 设置日期 mDate.setTimeInMillis(date); mDate.set(Calendar.SECOND, 0); + // 设置当前日期 mDateTimePicker.setCurrentDate(mDate.getTimeInMillis()); + // 设置按钮 setButton(context.getString(R.string.datetime_dialog_ok), this); setButton2(context.getString(R.string.datetime_dialog_cancel), (OnClickListener)null); + // 设置24小时制 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 | DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_SHOW_TIME; + // 如果是24小时制,则设置格式为24小时制 flag |= mIs24HourView ? DateUtils.FORMAT_24HOUR : DateUtils.FORMAT_24HOUR; + // 格式化日期并设置标题 setTitle(DateUtils.formatDateTime(this.getContext(), date, flag)); } public void onClick(DialogInterface arg0, int arg1) { + // 如果mOnDateTimeSetListener不为空,则调用其OnDateTimeSet方法,传入当前对象和mDate的时间戳 if (mOnDateTimeSetListener != null) { mOnDateTimeSetListener.OnDateTimeSet(this, mDate.getTimeInMillis()); } diff --git a/src1/net/micode/notes/ui/FoldersListAdapter.java b/src1/net/micode/notes/ui/FoldersListAdapter.java index 96b77da..7e9e215 100644 --- a/src1/net/micode/notes/ui/FoldersListAdapter.java +++ b/src1/net/micode/notes/ui/FoldersListAdapter.java @@ -30,49 +30,68 @@ import net.micode.notes.data.Notes.NoteColumns; public class FoldersListAdapter extends CursorAdapter { + // 定义一个静态常量,用于存储查询结果的列名 public static final String [] PROJECTION = { - NoteColumns.ID, - NoteColumns.SNIPPET + NoteColumns.ID, // 存储笔记的ID + NoteColumns.SNIPPET // 存储笔记的摘要 }; + // 定义ID列的常量 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 + // 重写newView方法,用于创建新的视图 public View newView(Context context, Cursor cursor, ViewGroup parent) { + // 创建一个新的FolderListItem视图 return new FolderListItem(context); } @Override public void bindView(View view, Context context, Cursor cursor) { + // 判断view是否为FolderListItem类型 if (view instanceof FolderListItem) { + // 获取文件夹名称 String folderName = (cursor.getLong(ID_COLUMN) == Notes.ID_ROOT_FOLDER) ? context .getString(R.string.menu_move_parent_folder) : cursor.getString(NAME_COLUMN); + // 绑定文件夹名称 ((FolderListItem) view).bind(folderName); } } + // 根据位置获取文件夹名称 public String getFolderName(Context context, int position) { + // 获取指定位置的Cursor对象 Cursor cursor = (Cursor) getItem(position); + // 如果Cursor对象的ID列的值为Notes.ID_ROOT_FOLDER,则返回菜单移动到父文件夹的字符串,否则返回Cursor对象的NAME列的值 return (cursor.getLong(ID_COLUMN) == Notes.ID_ROOT_FOLDER) ? context .getString(R.string.menu_move_parent_folder) : cursor.getString(NAME_COLUMN); } +// 定义一个内部类FolderListItem,继承自LinearLayout private class FolderListItem extends LinearLayout { + // 定义一个TextView变量mName private TextView mName; + // 构造方法,传入Context参数 public FolderListItem(Context context) { super(context); + // 使用inflate方法加载布局文件R.layout.folder_list_item,并将布局文件添加到当前LinearLayout中 inflate(context, R.layout.folder_list_item, this); + // 通过findViewById方法获取布局文件中的TextView控件,并赋值给mName变量 mName = (TextView) findViewById(R.id.tv_folder_name); } + // 绑定方法,传入一个String参数name public void bind(String name) { + // 将传入的name参数设置给mName控件的文本 mName.setText(name); } } diff --git a/src1/net/micode/notes/ui/NoteEditActivity.java b/src1/net/micode/notes/ui/NoteEditActivity.java index 96a9ff8..21477bf 100644 --- a/src1/net/micode/notes/ui/NoteEditActivity.java +++ b/src1/net/micode/notes/ui/NoteEditActivity.java @@ -74,18 +74,26 @@ import java.util.regex.Pattern; public class NoteEditActivity extends Activity implements OnClickListener, NoteSettingChangedListener, OnTextViewChangeListener { + // 定义一个内部类HeadViewHolder,用于保存头部视图的控件 private class HeadViewHolder { + // 保存修改日期的TextView public TextView tvModified; + // 保存提醒图标的ImageView public ImageView ivAlertIcon; + // 保存提醒日期的TextView public TextView tvAlertDate; + // 保存设置背景颜色的ImageView public ImageView ibSetBgColor; } +// 定义一个静态的Map,用于存储背景选择按钮的ID和对应的颜色值 private static final Map sBgSelectorBtnsMap = new HashMap(); +// 静态代码块,用于初始化Map static { + // 将背景选择按钮的ID和对应的颜色值放入Map中 sBgSelectorBtnsMap.put(R.id.iv_bg_yellow, ResourceParser.YELLOW); sBgSelectorBtnsMap.put(R.id.iv_bg_red, ResourceParser.RED); sBgSelectorBtnsMap.put(R.id.iv_bg_blue, ResourceParser.BLUE); @@ -94,16 +102,24 @@ public class NoteEditActivity extends Activity implements OnClickListener, } private static final Map sBgSelectorSelectionMap = new HashMap(); + // 初始化静态变量sBgSelectorSelectionMap,用于存储背景选择器的资源ID static { + // 将ResourceParser.YELLOW对应的资源ID存入sBgSelectorSelectionMap sBgSelectorSelectionMap.put(ResourceParser.YELLOW, R.id.iv_bg_yellow_select); + // 将ResourceParser.RED对应的资源ID存入sBgSelectorSelectionMap sBgSelectorSelectionMap.put(ResourceParser.RED, R.id.iv_bg_red_select); + // 将ResourceParser.BLUE对应的资源ID存入sBgSelectorSelectionMap sBgSelectorSelectionMap.put(ResourceParser.BLUE, R.id.iv_bg_blue_select); + // 将ResourceParser.GREEN对应的资源ID存入sBgSelectorSelectionMap sBgSelectorSelectionMap.put(ResourceParser.GREEN, R.id.iv_bg_green_select); + // 将ResourceParser.WHITE对应的资源ID存入sBgSelectorSelectionMap sBgSelectorSelectionMap.put(ResourceParser.WHITE, R.id.iv_bg_white_select); } + // 定义一个静态常量,用于存储字体大小按钮的ID和对应的字体大小 private static final Map sFontSizeBtnsMap = new HashMap(); static { + // 将字体大小按钮的ID和对应的字体大小放入Map中 sFontSizeBtnsMap.put(R.id.ll_font_large, ResourceParser.TEXT_LARGE); sFontSizeBtnsMap.put(R.id.ll_font_small, ResourceParser.TEXT_SMALL); sFontSizeBtnsMap.put(R.id.ll_font_normal, ResourceParser.TEXT_MEDIUM); @@ -111,6 +127,7 @@ public class NoteEditActivity extends Activity implements OnClickListener, } private static final Map sFontSelectorSelectionMap = new HashMap(); + // 初始化字体选择器选择映射 static { sFontSelectorSelectionMap.put(ResourceParser.TEXT_LARGE, R.id.iv_large_select); sFontSelectorSelectionMap.put(ResourceParser.TEXT_SMALL, R.id.iv_small_select); @@ -120,45 +137,67 @@ public class NoteEditActivity extends Activity implements OnClickListener, 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; + // 字体大小ID 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; @Override + // 重写onCreate方法 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + // 调用父类的onCreate方法 this.setContentView(R.layout.note_edit); + // 设置当前Activity的布局文件为note_edit.xml if (savedInstanceState == null && !initActivityState(getIntent())) { + // 如果savedInstanceState为空且initActivityState方法返回false finish(); + // 结束当前Activity return; } initResources(); + // 初始化资源 } /** @@ -166,16 +205,25 @@ public class NoteEditActivity extends Activity implements OnClickListener, * user load this activity, we should restore the former state */ @Override + // 重写onRestoreInstanceState方法 protected void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); + // 调用父类的onRestoreInstanceState方法 if (savedInstanceState != null && savedInstanceState.containsKey(Intent.EXTRA_UID)) { + // 如果savedInstanceState不为空且包含Intent.EXTRA_UID键 Intent intent = new Intent(Intent.ACTION_VIEW); + // 创建一个Intent对象,并设置Action为Intent.ACTION_VIEW intent.putExtra(Intent.EXTRA_UID, savedInstanceState.getLong(Intent.EXTRA_UID)); + // 将savedInstanceState中的Intent.EXTRA_UID键对应的值添加到Intent对象中 if (!initActivityState(intent)) { + // 如果initActivityState方法返回false finish(); + // 结束当前Activity return; } + // 如果initActivityState方法返回true Log.d(TAG, "Restoring from killed activity"); + // 打印日志,表示从被杀掉的Activity中恢复 } } @@ -197,6 +245,7 @@ public class NoteEditActivity extends Activity implements OnClickListener, mUserQuery = intent.getStringExtra(SearchManager.USER_QUERY); } + // Check if the note exists if (!DataUtils.visibleInNoteDatabase(getContentResolver(), noteId, Notes.TYPE_NOTE)) { Intent jump = new Intent(this, NotesListActivity.class); startActivity(jump); @@ -204,6 +253,7 @@ public class NoteEditActivity extends Activity implements OnClickListener, finish(); return false; } else { + // Load the note mWorkingNote = WorkingNote.load(this, noteId); if (mWorkingNote == null) { Log.e(TAG, "load note failed with note id" + noteId); @@ -211,6 +261,7 @@ public class NoteEditActivity extends Activity implements OnClickListener, return false; } } + // Set the soft input mode getWindow().setSoftInputMode( WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); @@ -250,6 +301,7 @@ public class NoteEditActivity extends Activity implements OnClickListener, bgResId); } + // Set the soft input mode getWindow().setSoftInputMode( WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE | WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); @@ -258,6 +310,7 @@ public class NoteEditActivity extends Activity implements OnClickListener, finish(); return false; } + // Set the listener for the note mWorkingNote.setOnSettingStatusChangedListener(this); return true; } @@ -265,24 +318,33 @@ public class NoteEditActivity extends Activity implements OnClickListener, @Override protected void onResume() { super.onResume(); + // Initialize the note screen initNoteScreen(); } private void initNoteScreen() { + // Set the text appearance of the note editor mNoteEditor.setTextAppearance(this, TextAppearanceResources .getTexAppearanceResource(mFontSizeId)); + // Check if the note is in check list mode if (mWorkingNote.getCheckListMode() == TextNote.MODE_CHECK_LIST) { + // Switch to list mode switchToListMode(mWorkingNote.getContent()); } else { + // Set the text of the note editor mNoteEditor.setText(getHighlightQueryResult(mWorkingNote.getContent(), mUserQuery)); + // Set the selection of the note editor mNoteEditor.setSelection(mNoteEditor.getText().length()); } + // Set the visibility of the background selector for (Integer id : sBgSelectorSelectionMap.keySet()) { findViewById(sBgSelectorSelectionMap.get(id)).setVisibility(View.GONE); } + // Set the background of the header and note editor panel mHeadViewPanel.setBackgroundResource(mWorkingNote.getTitleBgResId()); mNoteEditorPanel.setBackgroundResource(mWorkingNote.getBgColorResId()); + // Set the modified date of the note mNoteHeaderHolder.tvModified.setText(DateUtils.formatDateTime(this, mWorkingNote.getModifiedDate(), DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_NUMERIC_DATE | DateUtils.FORMAT_SHOW_TIME @@ -292,29 +354,42 @@ public class NoteEditActivity extends Activity implements OnClickListener, * TODO: Add the menu for setting alert. Currently disable it because the DateTimePicker * is not ready */ + // Show the alert header showAlertHeader(); } private void showAlertHeader() { + // 如果当前笔记设置了提醒 if (mWorkingNote.hasClockAlert()) { + // 获取当前时间 long time = System.currentTimeMillis(); + // 如果当前时间大于提醒时间 if (time > mWorkingNote.getAlertDate()) { + // 设置提醒日期为已过期 mNoteHeaderHolder.tvAlertDate.setText(R.string.note_alert_expired); } else { + // 设置提醒日期为相对时间 mNoteHeaderHolder.tvAlertDate.setText(DateUtils.getRelativeTimeSpanString( mWorkingNote.getAlertDate(), time, DateUtils.MINUTE_IN_MILLIS)); } + // 显示提醒日期 mNoteHeaderHolder.tvAlertDate.setVisibility(View.VISIBLE); + // 显示提醒图标 mNoteHeaderHolder.ivAlertIcon.setVisibility(View.VISIBLE); } else { + // 隐藏提醒日期 mNoteHeaderHolder.tvAlertDate.setVisibility(View.GONE); + // 隐藏提醒图标 mNoteHeaderHolder.ivAlertIcon.setVisibility(View.GONE); }; } + // 重写onNewIntent方法 @Override protected void onNewIntent(Intent intent) { + // 调用父类的onNewIntent方法 super.onNewIntent(intent); + // 初始化活动状态 initActivityState(intent); } @@ -326,64 +401,93 @@ public class NoteEditActivity extends Activity implements OnClickListener, * generate a id. If the editing note is not worth saving, there * is no id which is equivalent to create new note */ + // 如果当前编辑的笔记没有note id,我们首先应该保存它以生成一个id。如果编辑的笔记不值得保存,那么没有id相当于创建新笔记 if (!mWorkingNote.existInDatabase()) { saveNote(); } + // 将当前编辑的笔记的id保存到Bundle中 outState.putLong(Intent.EXTRA_UID, mWorkingNote.getNoteId()); + // 打印日志,记录当前编辑的笔记的id Log.d(TAG, "Save working note id: " + mWorkingNote.getNoteId() + " onSaveInstanceState"); } @Override public boolean dispatchTouchEvent(MotionEvent ev) { + // 如果mNoteBgColorSelector可见且不在mNoteBgColorSelector范围内,则隐藏mNoteBgColorSelector if (mNoteBgColorSelector.getVisibility() == View.VISIBLE && !inRangeOfView(mNoteBgColorSelector, ev)) { mNoteBgColorSelector.setVisibility(View.GONE); return true; } + // 如果mFontSizeSelector可见且不在mFontSizeSelector范围内,则隐藏mFontSizeSelector if (mFontSizeSelector.getVisibility() == View.VISIBLE && !inRangeOfView(mFontSizeSelector, ev)) { mFontSizeSelector.setVisibility(View.GONE); return true; } + // 否则,调用父类的dispatchTouchEvent方法 return super.dispatchTouchEvent(ev); } private boolean inRangeOfView(View view, MotionEvent ev) { + // 获取view在屏幕上的位置 int []location = new int[2]; view.getLocationOnScreen(location); + // 获取view的x坐标 int x = location[0]; + // 获取view的y坐标 int y = location[1]; + // 判断ev的x坐标是否在view的范围内 if (ev.getX() < x + // 判断ev的x坐标是否在view的范围内 || ev.getX() > (x + view.getWidth()) + // 判断ev的y坐标是否在view的范围内 || ev.getY() < y + // 判断ev的y坐标是否在view的范围内 || ev.getY() > (y + view.getHeight())) { + // 如果不在范围内,返回false return false; } + // 如果在范围内,返回true return true; } private void initResources() { + // 初始化标题栏 mHeadViewPanel = findViewById(R.id.note_title); + // 初始化标题栏的ViewHolder mNoteHeaderHolder = new HeadViewHolder(); + // 初始化标题栏中的修改日期TextView mNoteHeaderHolder.tvModified = (TextView) findViewById(R.id.tv_modified_date); + // 初始化标题栏中的提醒图标ImageView mNoteHeaderHolder.ivAlertIcon = (ImageView) findViewById(R.id.iv_alert_icon); + // 初始化标题栏中的提醒日期TextView mNoteHeaderHolder.tvAlertDate = (TextView) findViewById(R.id.tv_alert_date); + // 初始化标题栏中的设置背景颜色按钮ImageView mNoteHeaderHolder.ibSetBgColor = (ImageView) findViewById(R.id.btn_set_bg_color); + // 设置设置背景颜色按钮的点击事件 mNoteHeaderHolder.ibSetBgColor.setOnClickListener(this); + // 初始化笔记编辑框 mNoteEditor = (EditText) findViewById(R.id.note_edit_view); + // 初始化笔记编辑框的面板 mNoteEditorPanel = findViewById(R.id.sv_note_edit); + // 初始化笔记背景颜色选择器 mNoteBgColorSelector = findViewById(R.id.note_bg_color_selector); + // 遍历背景颜色选择器中的按钮,并设置点击事件 for (int id : sBgSelectorBtnsMap.keySet()) { ImageView iv = (ImageView) findViewById(id); iv.setOnClickListener(this); } + // 初始化字体大小选择器 mFontSizeSelector = findViewById(R.id.font_size_selector); + // 遍历字体大小选择器中的按钮,并设置点击事件 for (int id : sFontSizeBtnsMap.keySet()) { View view = findViewById(id); view.setOnClickListener(this); }; + // 获取默认的SharedPreferences mSharedPrefs = PreferenceManager.getDefaultSharedPreferences(this); mFontSizeId = mSharedPrefs.getInt(PREFERENCE_FONT_SIZE, ResourceParser.BG_DEFAULT_FONT_SIZE); /** @@ -397,121 +501,176 @@ public class NoteEditActivity extends Activity implements OnClickListener, mEditTextList = (LinearLayout) findViewById(R.id.note_edit_list); } + // 重写onPause方法 @Override protected void onPause() { + // 调用父类的onPause方法 super.onPause(); + // 如果保存笔记数据成功 if(saveNote()) { + // 打印日志,显示笔记数据的长度 Log.d(TAG, "Note data was saved with length:" + mWorkingNote.getContent().length()); } + // 清除设置状态 clearSettingState(); } private void updateWidget() { + // 创建一个Intent,用于更新AppWidget Intent intent = new Intent(AppWidgetManager.ACTION_APPWIDGET_UPDATE); + // 判断当前笔记的Widget类型 if (mWorkingNote.getWidgetType() == Notes.TYPE_WIDGET_2X) { + // 如果是2x类型的Widget,设置Intent的Class为NoteWidgetProvider_2x intent.setClass(this, NoteWidgetProvider_2x.class); } else if (mWorkingNote.getWidgetType() == Notes.TYPE_WIDGET_4X) { + // 如果是4x类型的Widget,设置Intent的Class为NoteWidgetProvider_4x intent.setClass(this, NoteWidgetProvider_4x.class); } else { + // 如果是其他类型的Widget,输出错误日志并返回 Log.e(TAG, "Unspported widget type"); return; } + // 将当前笔记的WidgetId添加到Intent中 intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, new int[] { mWorkingNote.getWidgetId() }); + // 发送广播,更新AppWidget sendBroadcast(intent); + // 设置结果为RESULT_OK setResult(RESULT_OK, intent); } public void onClick(View v) { + // 获取点击的View的id int id = v.getId(); + // 如果点击的是设置背景颜色的按钮 if (id == R.id.btn_set_bg_color) { + // 显示背景颜色选择器 mNoteBgColorSelector.setVisibility(View.VISIBLE); + // 显示当前背景颜色选择器 findViewById(sBgSelectorSelectionMap.get(mWorkingNote.getBgColorId())).setVisibility( - View.VISIBLE); + // 如果点击的是背景颜色选择器中的按钮 } else if (sBgSelectorBtnsMap.containsKey(id)) { + // 隐藏当前背景颜色选择器 findViewById(sBgSelectorSelectionMap.get(mWorkingNote.getBgColorId())).setVisibility( View.GONE); + // 设置当前背景颜色 mWorkingNote.setBgColorId(sBgSelectorBtnsMap.get(id)); + // 隐藏背景颜色选择器 mNoteBgColorSelector.setVisibility(View.GONE); + // 如果点击的是字体大小选择器中的按钮 } else if (sFontSizeBtnsMap.containsKey(id)) { + // 隐藏当前字体大小选择器 findViewById(sFontSelectorSelectionMap.get(mFontSizeId)).setVisibility(View.GONE); + // 设置当前字体大小 mFontSizeId = sFontSizeBtnsMap.get(id); + // 保存当前字体大小到SharedPreferences mSharedPrefs.edit().putInt(PREFERENCE_FONT_SIZE, mFontSizeId).commit(); + // 显示当前字体大小选择器 findViewById(sFontSelectorSelectionMap.get(mFontSizeId)).setVisibility(View.VISIBLE); + // 如果当前笔记处于清单模式 if (mWorkingNote.getCheckListMode() == TextNote.MODE_CHECK_LIST) { + // 获取当前笔记内容 getWorkingText(); + // 切换到清单模式 switchToListMode(mWorkingNote.getContent()); + // 如果当前笔记不处于清单模式 } else { + // 设置当前笔记的字体大小 mNoteEditor.setTextAppearance(this, TextAppearanceResources.getTexAppearanceResource(mFontSizeId)); } + // 隐藏字体大小选择器 mFontSizeSelector.setVisibility(View.GONE); } } @Override public void onBackPressed() { + // 如果清除设置状态成功,则直接返回 if(clearSettingState()) { return; } + // 保存笔记 saveNote(); + // 调用父类的方法 super.onBackPressed(); } private boolean clearSettingState() { + // 如果mNoteBgColorSelector可见,则将其设置为不可见,并返回true if (mNoteBgColorSelector.getVisibility() == View.VISIBLE) { mNoteBgColorSelector.setVisibility(View.GONE); return true; + // 如果mFontSizeSelector可见,则将其设置为不可见,并返回true } else if (mFontSizeSelector.getVisibility() == View.VISIBLE) { mFontSizeSelector.setVisibility(View.GONE); return true; } + // 如果以上两种情况都不满足,则返回false return false; } + // 当背景颜色改变时调用 public void onBackgroundColorChanged() { + // 根据当前笔记的背景颜色ID,找到对应的背景颜色选择器,并将其可见性设置为可见 findViewById(sBgSelectorSelectionMap.get(mWorkingNote.getBgColorId())).setVisibility( View.VISIBLE); + // 设置笔记编辑面板的背景颜色为当前笔记的背景颜色资源ID mNoteEditorPanel.setBackgroundResource(mWorkingNote.getBgColorResId()); + // 设置标题面板的背景颜色为当前笔记的标题背景颜色资源ID mHeadViewPanel.setBackgroundResource(mWorkingNote.getTitleBgResId()); } @Override public boolean onPrepareOptionsMenu(Menu menu) { + // 如果Activity正在结束,则返回true if (isFinishing()) { return true; } + // 清除设置状态 clearSettingState(); + // 清空菜单 menu.clear(); + // 如果当前笔记是通话记录,则加载通话记录编辑菜单 if (mWorkingNote.getFolderId() == Notes.ID_CALL_RECORD_FOLDER) { getMenuInflater().inflate(R.menu.call_note_edit, menu); + // 否则加载普通编辑菜单 } else { getMenuInflater().inflate(R.menu.note_edit, menu); } + // 如果当前笔记是清单模式,则将菜单项的标题设置为普通模式 if (mWorkingNote.getCheckListMode() == TextNote.MODE_CHECK_LIST) { menu.findItem(R.id.menu_list_mode).setTitle(R.string.menu_normal_mode); + // 否则将菜单项的标题设置为清单模式 } else { menu.findItem(R.id.menu_list_mode).setTitle(R.string.menu_list_mode); } + // 如果当前笔记有闹钟提醒,则隐藏提醒菜单项 if (mWorkingNote.hasClockAlert()) { menu.findItem(R.id.menu_alert).setVisible(false); + // 否则隐藏删除提醒菜单项 } else { menu.findItem(R.id.menu_delete_remind).setVisible(false); } + // 返回true return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { + // 根据菜单项的id执行相应的操作 switch (item.getItemId()) { case R.id.menu_new_note: + // 创建新笔记 createNewNote(); break; case R.id.menu_delete: + // 弹出删除确认对话框 AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle(getString(R.string.alert_title_delete)); builder.setIcon(android.R.drawable.ic_dialog_alert); @@ -519,6 +678,7 @@ public class NoteEditActivity extends Activity implements OnClickListener, builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { + // 删除当前笔记并关闭活动 deleteCurrentNote(); finish(); } @@ -527,24 +687,30 @@ public class NoteEditActivity extends Activity implements OnClickListener, builder.show(); break; case R.id.menu_font_size: + // 显示字体大小选择器 mFontSizeSelector.setVisibility(View.VISIBLE); findViewById(sFontSelectorSelectionMap.get(mFontSizeId)).setVisibility(View.VISIBLE); break; case R.id.menu_list_mode: + // 切换列表模式 mWorkingNote.setCheckListMode(mWorkingNote.getCheckListMode() == 0 ? TextNote.MODE_CHECK_LIST : 0); break; case R.id.menu_share: + // 获取当前笔记内容并分享 getWorkingText(); sendTo(this, mWorkingNote.getContent()); break; case R.id.menu_send_to_desktop: + // 发送到桌面 sendToDesktop(); break; case R.id.menu_alert: + // 设置提醒 setReminder(); break; case R.id.menu_delete_remind: + // 删除提醒 mWorkingNote.setAlertDate(0, false); break; default: @@ -554,12 +720,17 @@ public class NoteEditActivity extends Activity implements OnClickListener, } private void setReminder() { + // 创建一个DateTimePickerDialog对象,参数为当前上下文和当前时间 DateTimePickerDialog d = new DateTimePickerDialog(this, System.currentTimeMillis()); + // 设置DateTimePickerDialog的监听器 d.setOnDateTimeSetListener(new OnDateTimeSetListener() { + // 当日期时间被设置时,调用此方法 public void OnDateTimeSet(AlertDialog dialog, long date) { + // 设置工作笔记的提醒日期 mWorkingNote.setAlertDate(date , true); } }); + // 显示DateTimePickerDialog d.show(); } @@ -567,10 +738,15 @@ public class NoteEditActivity extends Activity implements OnClickListener, * Share note to apps that support {@link Intent#ACTION_SEND} action * and {@text/plain} type */ + // 向指定上下文发送信息 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); } @@ -586,29 +762,44 @@ public class NoteEditActivity extends Activity implements OnClickListener, startActivity(intent); } + // 删除当前笔记 private void deleteCurrentNote() { + // 如果当前笔记存在于数据库中 if (mWorkingNote.existInDatabase()) { + // 创建一个HashSet来存储要删除的笔记的id HashSet ids = new HashSet(); + // 获取当前笔记的id long id = mWorkingNote.getNoteId(); + // 如果当前笔记的id不是根文件夹的id if (id != Notes.ID_ROOT_FOLDER) { + // 将当前笔记的id添加到HashSet中 ids.add(id); } else { + // 如果当前笔记的id是根文件夹的id,则打印错误日志 Log.d(TAG, "Wrong note id, should not happen"); } + // 如果当前不是同步模式 if (!isSyncMode()) { + // 批量删除笔记 if (!DataUtils.batchDeleteNotes(getContentResolver(), ids)) { + // 如果删除失败,则打印错误日志 Log.e(TAG, "Delete Note error"); } } else { + // 如果是同步模式 if (!DataUtils.batchMoveToFolder(getContentResolver(), ids, Notes.ID_TRASH_FOLER)) { + // 如果移动到垃圾桶文件夹失败,则打印错误日志 Log.e(TAG, "Move notes to trash folder error, should not happens"); } } } + // 标记当前笔记为已删除 mWorkingNote.markDeleted(true); } + // 判断是否为同步模式 private boolean isSyncMode() { + // 获取同步账户名称 return NotesPreferenceActivity.getSyncAccountName(this).trim().length() > 0; } @@ -642,22 +833,29 @@ public class NoteEditActivity extends Activity implements OnClickListener, } } + // 当小部件发生变化时调用 public void onWidgetChanged() { + // 更新小部件 updateWidget(); } public void onEditTextDelete(int index, String text) { + // 获取EditTextList的子视图数量 int childCount = mEditTextList.getChildCount(); + // 如果子视图数量为1,则直接返回 if (childCount == 1) { return; } + // 从被删除的EditText的下一个开始,依次将每个EditText的索引减1 for (int i = index + 1; i < childCount; i++) { ((NoteEditText) mEditTextList.getChildAt(i).findViewById(R.id.et_edit_text)) .setIndex(i - 1); } + // 从EditTextList中移除被删除的EditText mEditTextList.removeViewAt(index); + // 获取被删除的EditText的前一个EditText NoteEditText edit = null; if(index == 0) { edit = (NoteEditText) mEditTextList.getChildAt(0).findViewById( @@ -666,9 +864,13 @@ public class NoteEditActivity extends Activity implements OnClickListener, edit = (NoteEditText) mEditTextList.getChildAt(index - 1).findViewById( R.id.et_edit_text); } + // 获取被删除的EditText的长度 int length = edit.length(); + // 将被删除的EditText的内容追加到前一个EditText中 edit.append(text); + // 将焦点设置到前一个EditText中 edit.requestFocus(); + // 将光标设置到前一个EditText的末尾 edit.setSelection(length); } @@ -676,119 +878,190 @@ public class NoteEditActivity extends Activity implements OnClickListener, /** * Should not happen, check for debug */ + // 如果index大于mEditTextList的子元素数量,则输出错误日志 if(index > mEditTextList.getChildCount()) { Log.e(TAG, "Index out of mEditTextList boundrary, should not happen"); } + // 获取列表项 View view = getListItem(text, index); + // 将列表项添加到mEditTextList中 mEditTextList.addView(view, index); + // 获取NoteEditText NoteEditText edit = (NoteEditText) view.findViewById(R.id.et_edit_text); + // 设置焦点 edit.requestFocus(); + // 设置光标位置 edit.setSelection(0); + // 遍历mEditTextList中的子元素,从index+1开始 for (int i = index + 1; i < mEditTextList.getChildCount(); i++) { + // 设置NoteEditText的索引 ((NoteEditText) mEditTextList.getChildAt(i).findViewById(R.id.et_edit_text)) .setIndex(i); } } + // 切换到列表模式 private void switchToListMode(String text) { + // 移除所有视图 mEditTextList.removeAllViews(); + // 将文本按行分割 String[] items = text.split("\n"); + // 初始化索引 int index = 0; + // 遍历每一行 for (String item : items) { + // 如果行不为空 if(!TextUtils.isEmpty(item)) { + // 添加列表项 mEditTextList.addView(getListItem(item, index)); + // 索引自增 index++; } } + // 添加一个空列表项 mEditTextList.addView(getListItem("", index)); + // 获取最后一个列表项的EditText并请求焦点 mEditTextList.getChildAt(index).findViewById(R.id.et_edit_text).requestFocus(); + // 隐藏NoteEditor mNoteEditor.setVisibility(View.GONE); + // 显示EditTextList mEditTextList.setVisibility(View.VISIBLE); } + // 根据用户查询结果高亮显示全文 private Spannable getHighlightQueryResult(String fullText, String userQuery) { + // 创建一个SpannableString对象,用于存储高亮显示的文本 SpannableString spannable = new SpannableString(fullText == null ? "" : fullText); + // 如果用户查询结果不为空 if (!TextUtils.isEmpty(userQuery)) { + // 创建一个正则表达式对象,用于匹配用户查询结果 mPattern = Pattern.compile(userQuery); + // 创建一个Matcher对象,用于匹配全文 Matcher m = mPattern.matcher(fullText); + // 定义一个起始位置 int start = 0; + // 循环匹配全文 while (m.find(start)) { + // 设置高亮显示的背景颜色 spannable.setSpan( new BackgroundColorSpan(this.getResources().getColor( R.color.user_query_highlight)), m.start(), m.end(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE); + // 更新起始位置 start = m.end(); } } + // 返回高亮显示的文本 return spannable; } + // 根据传入的item和index获取一个View private View getListItem(String item, int index) { + // 通过LayoutInflater加载布局文件 View view = LayoutInflater.from(this).inflate(R.layout.note_edit_list_item, null); + // 获取EditText final NoteEditText edit = (NoteEditText) view.findViewById(R.id.et_edit_text); + // 设置EditText的文本样式 edit.setTextAppearance(this, TextAppearanceResources.getTexAppearanceResource(mFontSizeId)); + // 获取CheckBox CheckBox cb = ((CheckBox) view.findViewById(R.id.cb_edit_item)); + // 设置CheckBox的监听器 cb.setOnCheckedChangeListener(new OnCheckedChangeListener() { public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + // 如果CheckBox被选中 if (isChecked) { + // 设置EditText的画笔标志,添加删除线 edit.setPaintFlags(edit.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG); } else { + // 设置EditText的画笔标志,取消删除线 edit.setPaintFlags(Paint.ANTI_ALIAS_FLAG | Paint.DEV_KERN_TEXT_FLAG); } } }); + // 如果item以TAG_CHECKED开头 if (item.startsWith(TAG_CHECKED)) { + // 设置CheckBox为选中状态 cb.setChecked(true); + // 设置EditText的画笔标志,添加删除线 edit.setPaintFlags(edit.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG); + // 去掉TAG_CHECKED item = item.substring(TAG_CHECKED.length(), item.length()).trim(); + // 如果item以TAG_UNCHECKED开头 } else if (item.startsWith(TAG_UNCHECKED)) { + // 设置CheckBox为未选中状态 cb.setChecked(false); + // 设置EditText的画笔标志,取消删除线 edit.setPaintFlags(Paint.ANTI_ALIAS_FLAG | Paint.DEV_KERN_TEXT_FLAG); + // 去掉TAG_UNCHECKED item = item.substring(TAG_UNCHECKED.length(), item.length()).trim(); } + // 设置EditText的监听器 edit.setOnTextViewChangeListener(this); + // 设置EditText的索引 edit.setIndex(index); + // 设置EditText的文本 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"); return; } + // 如果有文本 if(hasText) { + // 设置CheckBox为可见 mEditTextList.getChildAt(index).findViewById(R.id.cb_edit_item).setVisibility(View.VISIBLE); + // 如果没有文本 } else { + // 设置CheckBox为不可见 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()); } else { + // 如果没有获取到工作文本 if (!getWorkingText()) { - mWorkingNote.setWorkingText(mWorkingNote.getContent().replace(TAG_UNCHECKED + " ", + + // 将工作笔记的内容中的未选中标签替换为空字符串 + mWorkingNote.setWorkingText(mWorkingNote.getContent().replace(TAG_UNCHECKED + " ", "")); "")); } + // 设置笔记编辑器的内容为高亮查询结果 mNoteEditor.setText(getHighlightQueryResult(mWorkingNote.getContent(), mUserQuery)); + // 隐藏文本编辑器列表 mEditTextList.setVisibility(View.GONE); + // 显示笔记编辑器 mNoteEditor.setVisibility(View.VISIBLE); } } + // 获取工作文本 private boolean getWorkingText() { boolean hasChecked = false; + // 如果工作笔记的检查列表模式为检查列表模式 if (mWorkingNote.getCheckListMode() == TextNote.MODE_CHECK_LIST) { + // 创建一个StringBuilder对象 StringBuilder sb = new StringBuilder(); + // 遍历EditTextList的子视图 for (int i = 0; i < mEditTextList.getChildCount(); i++) { + // 获取子视图 View view = mEditTextList.getChildAt(i); + // 获取NoteEditText对象 NoteEditText edit = (NoteEditText) view.findViewById(R.id.et_edit_text); + // 如果EditText的内容不为空 if (!TextUtils.isEmpty(edit.getText())) { if (((CheckBox) view.findViewById(R.id.cb_edit_item)).isChecked()) { sb.append(TAG_CHECKED).append(" ").append(edit.getText()).append("\n"); @@ -806,8 +1079,11 @@ public class NoteEditActivity extends Activity implements OnClickListener, } private boolean saveNote() { + // 获取当前工作文本 getWorkingText(); + // 保存当前笔记 boolean saved = mWorkingNote.saveNote(); + // 如果保存成功 if (saved) { /** * There are two modes from List view to edit view, open one note, @@ -818,6 +1094,7 @@ public class NoteEditActivity extends Activity implements OnClickListener, */ setResult(RESULT_OK); } + // 返回保存结果 return saved; } @@ -856,18 +1133,26 @@ public class NoteEditActivity extends Activity implements OnClickListener, } } + // 根据传入的content,去除TAG_CHECKED和TAG_UNCHECKED标签,并返回处理后的字符串 private String makeShortcutIconTitle(String content) { + // 去除TAG_CHECKED标签 content = content.replace(TAG_CHECKED, ""); + // 去除TAG_UNCHECKED标签 content = content.replace(TAG_UNCHECKED, ""); + // 如果处理后的字符串长度大于SHORTCUT_ICON_TITLE_MAX_LEN,则截取前SHORTCUT_ICON_TITLE_MAX_LEN个字符 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和默认时长 showToast(resId, Toast.LENGTH_SHORT); } + // 显示Toast,使用指定时长 private void showToast(int resId, int duration) { + // 使用Toast.makeText方法创建Toast对象,并显示 Toast.makeText(this, resId, duration).show(); } } diff --git a/src1/net/micode/notes/ui/NotesListItem.java b/src1/net/micode/notes/ui/NotesListItem.java index 1221e80..c5f042e 100644 --- a/src1/net/micode/notes/ui/NotesListItem.java +++ b/src1/net/micode/notes/ui/NotesListItem.java @@ -100,18 +100,30 @@ public class NotesListItem extends LinearLayout { } private void setBackground(NoteItemData data) { + // 获取背景颜色ID int id = data.getBgColorId(); + // 判断类型 if (data.getType() == Notes.TYPE_NOTE) { + // 判断是否为单条笔记 if (data.isSingle() || data.isOneFollowingFolder()) { + // 设置背景资源为单条笔记背景 setBackgroundResource(NoteItemBgResources.getNoteBgSingleRes(id)); + // 判断是否为最后一条笔记 } else if (data.isLast()) { + // 设置背景资源为最后一条笔记背景 setBackgroundResource(NoteItemBgResources.getNoteBgLastRes(id)); + // 判断是否为第一条笔记或多个文件夹 } else if (data.isFirst() || data.isMultiFollowingFolder()) { + // 设置背景资源为第一条笔记背景 setBackgroundResource(NoteItemBgResources.getNoteBgFirstRes(id)); + // 其他情况 } else { + // 设置背景资源为普通笔记背景 setBackgroundResource(NoteItemBgResources.getNoteBgNormalRes(id)); } + // 如果为文件夹 } else { + // 设置背景资源为文件夹背景 setBackgroundResource(NoteItemBgResources.getFolderBgRes()); } } From 7177ed6448cf882377d554eb34444ece08b4182e Mon Sep 17 00:00:00 2001 From: lyl <2649575172@qq.com> Date: Fri, 22 Nov 2024 00:27:26 +0800 Subject: [PATCH 4/4] zuizhongjieguo.1 --- src1/net/micode/notes/data/Notes.java | 335 ++++-------------- src1/net/micode/notes/data/NotesProvider.java | 284 ++++++++------- 2 files changed, 229 insertions(+), 390 deletions(-) diff --git a/src1/net/micode/notes/data/Notes.java b/src1/net/micode/notes/data/Notes.java index f240604..820295d 100644 --- a/src1/net/micode/notes/data/Notes.java +++ b/src1/net/micode/notes/data/Notes.java @@ -1,279 +1,100 @@ -/* - * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ +package net.micode.notes.data; // 定义包名 -package net.micode.notes.data; +import android.content.ContentUris; // 用于操作URI,如添加ID到URI中 +import android.net.Uri; // 用于表示URI的类 -import android.net.Uri; +// Notes 类定义了与便签应用相关的常量,包括URI、类型、ID等 public class Notes { - public static final String AUTHORITY = "micode_notes"; - public static final String TAG = "Notes"; - public static final int TYPE_NOTE = 0; - public static final int TYPE_FOLDER = 1; - public static final int TYPE_SYSTEM = 2; - - /** - * Following IDs are system folders' identifiers - * {@link Notes#ID_ROOT_FOLDER } is default folder - * {@link Notes#ID_TEMPARAY_FOLDER } is for notes belonging no folder - * {@link Notes#ID_CALL_RECORD_FOLDER} is to store call records - */ - public static final int ID_ROOT_FOLDER = 0; - public static final int ID_TEMPARAY_FOLDER = -1; - public static final int ID_CALL_RECORD_FOLDER = -2; - public static final int ID_TRASH_FOLER = -3; - - public static final String INTENT_EXTRA_ALERT_DATE = "net.micode.notes.alert_date"; - public static final String INTENT_EXTRA_BACKGROUND_ID = "net.micode.notes.background_color_id"; - public static final String INTENT_EXTRA_WIDGET_ID = "net.micode.notes.widget_id"; - public static final String INTENT_EXTRA_WIDGET_TYPE = "net.micode.notes.widget_type"; - public static final String INTENT_EXTRA_FOLDER_ID = "net.micode.notes.folder_id"; - public static final String INTENT_EXTRA_CALL_DATE = "net.micode.notes.call_date"; - - public static final int TYPE_WIDGET_INVALIDE = -1; - public static final int TYPE_WIDGET_2X = 0; - public static final int TYPE_WIDGET_4X = 1; - + public static final String AUTHORITY = "micode_notes"; // 内容提供者的权限标识 + public static final String TAG = "Notes"; // 日志标签 + + // 定义笔记、文件夹和系统类型的常量 + public static final int TYPE_NOTE = 0; // 笔记类型 + public static final int TYPE_FOLDER = 1; // 文件夹类型 + public static final int TYPE_SYSTEM = 2; // 系统类型 + + // 系统文件夹的ID常量 + public static final int ID_ROOT_FOLDER = 0; // 根文件夹ID + public static final int ID_TEMPARAY_FOLDER = -1; // 临时文件夹ID + public static final int ID_CALL_RECORD_FOLDER = -2; // 电话记录文件夹ID + public static final int ID_TRASH_FOLER = -3; // 垃圾桶文件夹ID + + // 意图(Intent)中使用的额外数据键 + 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"; // 背景颜色ID + public static final String INTENT_EXTRA_WIDGET_ID = "net.micode.notes.widget_id"; // 小部件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"; // 文件夹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; // 2x2小部件 + public static final int TYPE_WIDGET_4X = 1; // 4x4小部件 + + // 数据常量类,包含笔记和电话记录的MIME类型 public static class DataConstants { - public static final String NOTE = TextNote.CONTENT_ITEM_TYPE; - public static final String CALL_NOTE = CallNote.CONTENT_ITEM_TYPE; + public static final String NOTE = TextNote.CONTENT_ITEM_TYPE; // 文本笔记MIME类型 + public static final String CALL_NOTE = CallNote.CONTENT_ITEM_TYPE; // 电话记录MIME类型 } - /** - * Uri to query all notes and folders - */ + // 查询所有笔记和文件夹的URI public static final Uri CONTENT_NOTE_URI = Uri.parse("content://" + AUTHORITY + "/note"); - /** - * Uri to query data - */ + // 查询数据的URI public static final Uri CONTENT_DATA_URI = Uri.parse("content://" + AUTHORITY + "/data"); + // NoteColumns接口定义了笔记相关字段 public interface NoteColumns { - /** - * The unique ID for a row - *

Type: INTEGER (long)

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

Type: INTEGER (long)

- */ - public static final String PARENT_ID = "parent_id"; - - /** - * Created data for note or folder - *

Type: INTEGER (long)

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

Type: INTEGER (long)

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

Type: INTEGER (long)

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

Type: TEXT

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

Type: INTEGER (long)

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

Type: INTEGER (long)

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

Type: INTEGER (long)

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

Type: INTEGER

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

Type: INTEGER (long)

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

Type: INTEGER

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

Type: INTEGER (long)

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

Type: INTEGER

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

Type : INTEGER

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

Type : TEXT

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

Type : INTEGER (long)

- */ - public static final String VERSION = "version"; + public static final String ID = "_id"; // 唯一ID + public static final String PARENT_ID = "parent_id"; // 父ID,用于文件夹结构 + public static final String CREATED_DATE = "created_date"; // 创建日期 + public static final String MODIFIED_DATE = "modified_date"; // 修改日期 + public static final String ALERTED_DATE = "alert_date"; // 警告日期 + public static final String SNIPPET = "snippet"; // 文件夹名或笔记内容摘要 + public static final String WIDGET_ID = "widget_id"; // 小部件ID + public static final String WIDGET_TYPE = "widget_type"; // 小部件类型 + public static final String BG_COLOR_ID = "bg_color_id"; // 背景颜色ID + public static final String HAS_ATTACHMENT = "has_attachment"; // 是否有附件 + public static final String NOTES_COUNT = "notes_count"; // 文件夹中的笔记数量 + public static final String TYPE = "type"; // 类型(笔记或文件夹) + public static final String SYNC_ID = "sync_id"; // 同步ID + public static final String LOCAL_MODIFIED = "local_modified"; // 本地修改标志 + public static final String ORIGIN_PARENT_ID = "origin_parent_id"; // 原始父ID + public static final String GTASK_ID = "gtask_id"; // Google任务ID + public static final String VERSION = "version"; // 版本号 } + // DataColumns接口定义了数据表相关字段 public interface DataColumns { - /** - * The unique ID for a row - *

Type: INTEGER (long)

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

Type: Text

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

Type: INTEGER (long)

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

Type: INTEGER (long)

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

Type: INTEGER (long)

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

Type: TEXT

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

Type: INTEGER

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

Type: INTEGER

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

Type: TEXT

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

Type: TEXT

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

Type: TEXT

- */ - public static final String DATA5 = "data5"; + public static final String ID = "_id"; // 唯一ID + public static final String MIME_TYPE = "mime_type"; // MIME类型 + public static final String NOTE_ID = "note_id"; // 对应的笔记ID + public static final String CREATED_DATE = "created_date"; // 创建日期 + public static final String MODIFIED_DATE = "modified_date"; // 修改日期 + public static final String CONTENT = "content"; // 数据内容 + public static final String DATA1 = "data1"; // 通用数据列1 + public static final String DATA2 = "data2"; // 通用数据列2 + public static final String DATA3 = "data3"; // 通用数据列3 + public static final String DATA4 = "data4"; // 通用数据列4 + public static final String DATA5 = "data5"; // 通用数据列5 } + // TextNote类定义了文本笔记相关的常量 public static final class TextNote implements DataColumns { - /** - * Mode to indicate the text in check list mode or not - *

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

- */ - public static final String MODE = DATA1; - - public static final int MODE_CHECK_LIST = 1; - - public static final String CONTENT_TYPE = "vnd.android.cursor.dir/text_note"; - - public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/text_note"; - - public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/text_note"); + public static final String MODE = 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"); // 文本笔记URI } + // CallNote类定义了电话记录相关的常量 public static final class CallNote implements DataColumns { - /** - * Call date for this record - *

Type: INTEGER (long)

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

Type: TEXT

- */ - public static final String PHONE_NUMBER = DATA3; - - public static final String CONTENT_TYPE = "vnd.android.cursor.dir/call_note"; - - public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/call_note"; - - public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/call_note"); + public static final String CALL_DATE = DATA1; // 电话日期 + public static final String PHONE_NUMBER = 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 } } diff --git a/src1/net/micode/notes/data/NotesProvider.java b/src1/net/micode/notes/data/NotesProvider.java index edb0a60..cf445c0 100644 --- a/src1/net/micode/notes/data/NotesProvider.java +++ b/src1/net/micode/notes/data/NotesProvider.java @@ -1,97 +1,84 @@ -/* - * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package net.micode.notes.data; - - -import android.app.SearchManager; -import android.content.ContentProvider; -import android.content.ContentUris; -import android.content.ContentValues; -import android.content.Intent; -import android.content.UriMatcher; -import android.database.Cursor; -import android.database.sqlite.SQLiteDatabase; -import android.net.Uri; -import android.text.TextUtils; -import android.util.Log; - -import net.micode.notes.R; -import net.micode.notes.data.Notes.DataColumns; -import net.micode.notes.data.Notes.NoteColumns; -import net.micode.notes.data.NotesDatabaseHelper.TABLE; - +package net.micode.notes.data; // 定义包名 +import android.app.SearchManager; // 搜索管理器,用于处理搜索建议等 +import android.content.ContentProvider; // Android内容提供者基类 +import android.content.ContentUris; // 用于操作URI,如添加ID到URI中 +import android.content.ContentValues; // 用于存储数据的键值对,便于数据库操作 +import android.content.Intent; // 用于应用程序之间传递数据的意图 +import android.content.UriMatcher; // 用于匹配URI +import android.database.Cursor; // 用于数据库查询结果集的迭代 +import android.database.sqlite.SQLiteDatabase; // 用于执行SQL语句和进行数据库操作 +import android.net.Uri; // 用于表示URI的类 +import android.text.TextUtils; // 文本操作工具类 +import android.util.Log; // 用于日志输出 +import net.micode.notes.R; // 资源类 +import net.micode.notes.data.Notes.DataColumns; // 数据表列常量 +import net.micode.notes.data.Notes.NoteColumns; // 笔记表列常量 +import net.micode.notes.data.NotesDatabaseHelper.TABLE; // 数据表名称常量 +// NotesProvider类继承自ContentProvider,用于提供数据共享接口 public class NotesProvider extends ContentProvider { + // UriMatcher用于匹配URI private static final UriMatcher mMatcher; - private NotesDatabaseHelper mHelper; - - private static final String TAG = "NotesProvider"; + private NotesDatabaseHelper mHelper; // 数据库帮助类实例 - private static final int URI_NOTE = 1; - private static final int URI_NOTE_ITEM = 2; - private static final int URI_DATA = 3; - private static final int URI_DATA_ITEM = 4; + private static final String TAG = "NotesProvider"; // 日志标签 - private static final int URI_SEARCH = 5; - private static final int URI_SEARCH_SUGGEST = 6; + // 定义匹配URI的常量 + private static final int URI_NOTE = 1;//用于标识笔记资源 + private static final int URI_NOTE_ITEM = 2;//用于标识单个笔记资源 + private static final int URI_DATA = 3;//用于标识数据资源 + private static final int URI_DATA_ITEM = 4;//用于标识单个数据资源 + private static final int URI_SEARCH = 5;//搜索功能 + private static final int URI_SEARCH_SUGGEST = 6;//用于标识搜索功能 static { + // 创建UriMatcher时,调用UriMatcher(UriMatcher.NO_MATCH)表示不匹配任何路径的返回码 mMatcher = new UriMatcher(UriMatcher.NO_MATCH); - mMatcher.addURI(Notes.AUTHORITY, "note", URI_NOTE); - mMatcher.addURI(Notes.AUTHORITY, "note/#", URI_NOTE_ITEM); - mMatcher.addURI(Notes.AUTHORITY, "data", URI_DATA); - mMatcher.addURI(Notes.AUTHORITY, "data/#", URI_DATA_ITEM); - mMatcher.addURI(Notes.AUTHORITY, "search", URI_SEARCH); - mMatcher.addURI(Notes.AUTHORITY, SearchManager.SUGGEST_URI_PATH_QUERY, URI_SEARCH_SUGGEST); - mMatcher.addURI(Notes.AUTHORITY, SearchManager.SUGGEST_URI_PATH_QUERY + "/*", URI_SEARCH_SUGGEST); + // 把需要匹配URI路径全部给注册上 + mMatcher.addURI(Notes.AUTHORITY, "note", URI_NOTE);//笔记表 + mMatcher.addURI(Notes.AUTHORITY, "note/#", URI_NOTE_ITEM);//笔记表中的某条记录 + mMatcher.addURI(Notes.AUTHORITY, "data", URI_DATA);//数据表 + mMatcher.addURI(Notes.AUTHORITY, "data/#", URI_DATA_ITEM);//数据表中的某条数据 + mMatcher.addURI(Notes.AUTHORITY, "search", URI_SEARCH);//搜索 + mMatcher.addURI(Notes.AUTHORITY, SearchManager.SUGGEST_URI_PATH_QUERY, URI_SEARCH_SUGGEST);//搜索建议 + mMatcher.addURI(Notes.AUTHORITY, SearchManager.SUGGEST_URI_PATH_QUERY + "/*", URI_SEARCH_SUGGEST);//搜索建议 } - /** - * x'0A' represents the '\n' character in sqlite. For title and content in the search result, - * we will trim '\n' and white space in order to show more information. - */ - private static final String NOTES_SEARCH_PROJECTION = NoteColumns.ID + "," - + NoteColumns.ID + " AS " + SearchManager.SUGGEST_COLUMN_INTENT_EXTRA_DATA + "," - + "TRIM(REPLACE(" + NoteColumns.SNIPPET + ", x'0A','')) AS " + SearchManager.SUGGEST_COLUMN_TEXT_1 + "," - + "TRIM(REPLACE(" + NoteColumns.SNIPPET + ", x'0A','')) AS " + SearchManager.SUGGEST_COLUMN_TEXT_2 + "," - + R.drawable.search_result + " AS " + SearchManager.SUGGEST_COLUMN_ICON_1 + "," - + "'" + Intent.ACTION_VIEW + "' AS " + SearchManager.SUGGEST_COLUMN_INTENT_ACTION + "," - + "'" + Notes.TextNote.CONTENT_TYPE + "' AS " + SearchManager.SUGGEST_COLUMN_INTENT_DATA; + // 声明搜索结果的投影 + private static final String NOTES_SEARCH_PROJECTION = NoteColumns.ID + ","//笔记ID + + NoteColumns.ID + " AS " + SearchManager.SUGGEST_COLUMN_INTENT_EXTRA_DATA + ","//意图数据 + + "TRIM(REPLACE(" + NoteColumns.SNIPPET + ", x'0A','')) AS " + SearchManager.SUGGEST_COLUMN_TEXT_1 + ","//笔记摘要 + + "TRIM(REPLACE(" + NoteColumns.SNIPPET + ", x'0A','')) AS " + SearchManager.SUGGEST_COLUMN_TEXT_2 + ","// + + R.drawable.search_result + " AS " + SearchManager.SUGGEST_COLUMN_ICON_1 + ","//搜索结构图标 + + "'" + Intent.ACTION_VIEW + "' AS " + SearchManager.SUGGEST_COLUMN_INTENT_ACTION + ","//意图动作 + + "'" + Notes.TextNote.CONTENT_TYPE + "' AS " + SearchManager.SUGGEST_COLUMN_INTENT_DATA;//意图数据类型 - private static String NOTES_SNIPPET_SEARCH_QUERY = "SELECT " + NOTES_SEARCH_PROJECTION - + " FROM " + TABLE.NOTE - + " WHERE " + NoteColumns.SNIPPET + " LIKE ?" - + " AND " + NoteColumns.PARENT_ID + "<>" + Notes.ID_TRASH_FOLER - + " AND " + NoteColumns.TYPE + "=" + Notes.TYPE_NOTE; + // 声明搜索查询 + private static String NOTES_SNIPPET_SEARCH_QUERY = "SELECT " + NOTES_SEARCH_PROJECTION//查询语句 + + " FROM " + TABLE.NOTE//表名 + + " WHERE " + NoteColumns.SNIPPET + " LIKE ?"//查询条件 + + " AND " + NoteColumns.PARENT_ID + "<>" + Notes.ID_TRASH_FOLER//排除回收站 + + " AND " + NoteColumns.TYPE + "=" + Notes.TYPE_NOTE;//笔记类型 @Override + // Context只有在onCreate()中才被初始化,对mHelper进行实例化 public boolean onCreate() { mHelper = NotesDatabaseHelper.getInstance(getContext()); return true; } @Override + // 查询uri在数据库中对应的位置 public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { Cursor c = null; + // 获取可读数据库 SQLiteDatabase db = mHelper.getReadableDatabase(); String id = null; + // 匹配查找uri switch (mMatcher.match(uri)) { + // 对于不同的匹配值,在数据库中查找相应的条目 case URI_NOTE: c = db.query(TABLE.NOTE, projection, selection, selectionArgs, null, null, sortOrder); @@ -113,6 +100,7 @@ public class NotesProvider extends ContentProvider { case URI_SEARCH: case URI_SEARCH_SUGGEST: if (sortOrder != null || projection != null) { + // 不合法的参数异常 throw new IllegalArgumentException( "do not specify sortOrder, selection, selectionArgs, or projection" + "with this query"); } @@ -120,6 +108,8 @@ public class NotesProvider extends ContentProvider { String searchString = null; if (mMatcher.match(uri) == URI_SEARCH_SUGGEST) { if (uri.getPathSegments().size() > 1) { + // getPathSegments()方法得到一个String的List, + // 在uri.getPathSegments().get(1)为第2个元素 searchString = uri.getPathSegments().get(1); } } else { @@ -139,6 +129,7 @@ public class NotesProvider extends ContentProvider { } break; default: + // 抛出异常 throw new IllegalArgumentException("Unknown URI " + uri); } if (c != null) { @@ -148,13 +139,17 @@ public class NotesProvider extends ContentProvider { } @Override + // 插入一个uri public Uri insert(Uri uri, ContentValues values) { + // 获得可写的数据库 SQLiteDatabase db = mHelper.getWritableDatabase(); long dataId = 0, noteId = 0, insertedId = 0; switch (mMatcher.match(uri)) { + // 新增一个条目 case URI_NOTE: insertedId = noteId = db.insert(TABLE.NOTE, null, values); break; + // 如果存在,查找NOTE_ID case URI_DATA: if (values.containsKey(DataColumns.NOTE_ID)) { noteId = values.getAsLong(DataColumns.NOTE_ID); @@ -163,10 +158,11 @@ public class NotesProvider extends ContentProvider { } insertedId = dataId = db.insert(TABLE.DATA, null, values); break; - default: + default: throw new IllegalArgumentException("Unknown URI " + uri); } // Notify the note uri + // notifyChange获得一个ContextResolver对象并且更新里面的内容 if (noteId > 0) { getContext().getContentResolver().notifyChange( ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, noteId), null); @@ -178,13 +174,17 @@ public class NotesProvider extends ContentProvider { ContentUris.withAppendedId(Notes.CONTENT_DATA_URI, dataId), null); } + // 返回插入的uri的路径 return ContentUris.withAppendedId(uri, insertedId); } @Override + // 删除一个uri public int delete(Uri uri, String selection, String[] selectionArgs) { + // Uri代表要操作的数据,Android上可用的每种资源 -包括 图像、视频片段、音频资源等都可以用Uri来表示。 int count = 0; String id = null; + // 获得可写的数据库 SQLiteDatabase db = mHelper.getWritableDatabase(); boolean deleteData = false; switch (mMatcher.match(uri)) { @@ -228,78 +228,96 @@ public class NotesProvider extends ContentProvider { } @Override - public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { - int count = 0; - String id = null; - SQLiteDatabase db = mHelper.getWritableDatabase(); - boolean updateData = false; - switch (mMatcher.match(uri)) { - case URI_NOTE: - increaseNoteVersion(-1, selection, selectionArgs); - count = db.update(TABLE.NOTE, values, selection, selectionArgs); - break; - case URI_NOTE_ITEM: - id = uri.getPathSegments().get(1); - increaseNoteVersion(Long.valueOf(id), selection, selectionArgs); - count = db.update(TABLE.NOTE, values, NoteColumns.ID + "=" + id - + parseSelection(selection), selectionArgs); - break; - case URI_DATA: - count = db.update(TABLE.DATA, values, selection, selectionArgs); - updateData = true; - break; - case URI_DATA_ITEM: - id = uri.getPathSegments().get(1); - count = db.update(TABLE.DATA, values, DataColumns.ID + "=" + id - + parseSelection(selection), selectionArgs); - updateData = true; - break; - default: - throw new IllegalArgumentException("Unknown URI " + uri); - } +// 更新一个uri +public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { + int count = 0; // 记录更新的行数 + String id = null; // 用于存储URI中的ID部分 + SQLiteDatabase db = mHelper.getWritableDatabase(); // 获取可写的数据库实例 + boolean updateData = false; // 标记是否需要更新数据表 - if (count > 0) { - if (updateData) { - getContext().getContentResolver().notifyChange(Notes.CONTENT_NOTE_URI, null); - } - getContext().getContentResolver().notifyChange(uri, null); - } - return count; + // 根据URI匹配不同的操作 + switch (mMatcher.match(uri)) { + case URI_NOTE: + // 更新笔记表中的多条记录 + increaseNoteVersion(-1, selection, selectionArgs); // 增加笔记版本号 + count = db.update(TABLE.NOTE, values, selection, selectionArgs); // 执行更新操作 + break; + case URI_NOTE_ITEM: + // 更新笔记表中的单条记录 + id = uri.getPathSegments().get(1); // 从URI中获取ID + increaseNoteVersion(Long.valueOf(id), selection, selectionArgs); // 增加指定笔记的版本号 + count = db.update(TABLE.NOTE, values, NoteColumns.ID + "=" + id + + parseSelection(selection), selectionArgs); // 执行更新操作 + break; + case URI_DATA: + // 更新数据表中的多条记录 + count = db.update(TABLE.DATA, values, selection, selectionArgs); // 执行更新操作 + updateData = true; // 设置更新数据表的标记为true + break; + case URI_DATA_ITEM: + // 更新数据表中的单条记录 + id = uri.getPathSegments().get(1); // 从URI中获取ID + count = db.update(TABLE.DATA, values, DataColumns.ID + "=" + id + + parseSelection(selection), selectionArgs); // 执行更新操作 + updateData = true; // 设置更新数据表的标记为true + break; + default: + // 如果URI不匹配任何已知类型,则抛出异常 + throw new IllegalArgumentException("Unknown URI " + uri); } - private String parseSelection(String selection) { - return (!TextUtils.isEmpty(selection) ? " AND (" + selection + ')' : ""); + // 如果有行被更新,则通知相关URI的监听器 + if (count > 0) { + if (updateData) { + // 如果更新了数据表,则通知笔记表的URI + getContext().getContentResolver().notifyChange(Notes.CONTENT_NOTE_URI, null); + } + // 通知当前URI的监听器 + getContext().getContentResolver().notifyChange(uri, null); } + return count; // 返回更新的行数 +} - private void increaseNoteVersion(long id, String selection, String[] selectionArgs) { - StringBuilder sql = new StringBuilder(120); - sql.append("UPDATE "); - sql.append(TABLE.NOTE); - sql.append(" SET "); - sql.append(NoteColumns.VERSION); - sql.append("=" + NoteColumns.VERSION + "+1 "); +/// 将字符串解析成规定格式 +private String parseSelection(String selection) { + // 如果传入的选择字符串不为空,则在 selection 前后添加 " AND (" 和 ")",否则返回空字符串 + return (!TextUtils.isEmpty(selection) ? " AND (" + selection + ')' : ""); +} - if (id > 0 || !TextUtils.isEmpty(selection)) { - sql.append(" WHERE "); - } - if (id > 0) { - sql.append(NoteColumns.ID + "=" + String.valueOf(id)); - } - if (!TextUtils.isEmpty(selection)) { - String selectString = id > 0 ? parseSelection(selection) : selection; - for (String args : selectionArgs) { - selectString = selectString.replaceFirst("\\?", args); - } - sql.append(selectString); - } +// 增加一个noteVersion +private void increaseNoteVersion(long id, String selection, String[] selectionArgs) { + // 创建StringBuilder对象,用于构建SQL语句 + StringBuilder sql = new StringBuilder(120); + sql.append("UPDATE "); // 添加UPDATE关键字 + sql.append(TABLE.NOTE); // 添加表名NOTE + sql.append(" SET "); // 添加SET关键字 + sql.append(NoteColumns.VERSION); // 添加版本号列名 + sql.append("=" + NoteColumns.VERSION + "+1 "); // 版本号列值加1 - mHelper.getWritableDatabase().execSQL(sql.toString()); + // 如果ID大于0或者选择字符串不为空,则添加WHERE关键字 + if (id > 0 || !TextUtils.isEmpty(selection)) { + sql.append(" WHERE "); } - - @Override - public String getType(Uri uri) { - // TODO Auto-generated method stub - return null; + // 如果ID大于0,则添加ID等于指定值的条件 + if (id > 0) { + sql.append(NoteColumns.ID + "=" + String.valueOf(id)); + } + // 如果选择字符串不为空,则添加解析后的选择字符串作为条件 + if (!TextUtils.isEmpty(selection)) { + String selectString = id > 0 ? parseSelection(selection) : selection; + // 将选择字符串中的占位符替换为实际的参数值 + for (String args : selectionArgs) { + selectString = selectString.replaceFirst("\\?", args); + } + sql.append(selectString); } + // 使用execSQL方法执行构建的SQL语句 + mHelper.getWritableDatabase().execSQL(sql.toString()); +} + +@Override +public String getType(Uri uri) { + // TODO: 需要实现该方法来返回给定URI的MIME类型,暂时返回null + return null; }