From 1f387dda13fb0aebc17effecf4c6b5eb8b42ad04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=A6=A8=E8=AF=AD?= <3462336976@qq.com> Date: Sat, 7 Jun 2025 21:14:36 +0800 Subject: [PATCH] add --- other/个人实践总结/曹馨语.doc | Bin 0 -> 11776 bytes .../ui/NoteItemData.java | 346 ++++++++++++++++++ 2 files changed, 346 insertions(+) create mode 100644 other/个人实践总结/曹馨语.doc create mode 100644 src/实验二 代码注释/ui/NoteItemData.java diff --git a/other/个人实践总结/曹馨语.doc b/other/个人实践总结/曹馨语.doc new file mode 100644 index 0000000000000000000000000000000000000000..e8040278443667f73fb8d442445a1175f6e67410 GIT binary patch literal 11776 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 0) ? true : false; + mModifiedDate = cursor.getLong(MODIFIED_DATE_COLUMN); + mNotesCount = cursor.getInt(NOTES_COUNT_COLUMN); + mParentId = cursor.getLong(PARENT_ID_COLUMN); + mSnippet = cursor.getString(SNIPPET_COLUMN); + // 去除摘要中的特定标签 + mSnippet = mSnippet.replace(NoteEditActivity.TAG_CHECKED, "").replace( + NoteEditActivity.TAG_UNCHECKED, ""); + mType = cursor.getInt(TYPE_COLUMN); + mWidgetId = cursor.getInt(WIDGET_ID_COLUMN); + mWidgetType = cursor.getInt(WIDGET_TYPE_COLUMN); + + mPhoneNumber = ""; + // 如果笔记的父文件夹 ID 为通话记录文件夹的 ID + if (mParentId == Notes.ID_CALL_RECORD_FOLDER) { + // 通过笔记 ID 获取通话号码 + mPhoneNumber = DataUtils.getCallNumberByNoteId(context.getContentResolver(), mId); + if (!TextUtils.isEmpty(mPhoneNumber)) { + // 根据电话号码获取联系人姓名 + mName = Contact.getContact(context, mPhoneNumber); + if (mName == null) { + // 如果未找到联系人姓名,则使用电话号码作为姓名 + mName = mPhoneNumber; + } + } + } + + if (mName == null) { + mName = ""; + } + // 检查笔记在列表中的位置信息 + checkPostion(cursor); + } + + /** + * 检查笔记在 Cursor 中的位置信息,设置相应的布尔标记。 + * @param cursor 包含笔记数据的 Cursor 对象 + */ + private void checkPostion(Cursor cursor) { + // 判断是否为列表中的最后一项 + mIsLastItem = cursor.isLast() ? true : false; + // 判断是否为列表中的第一项 + mIsFirstItem = cursor.isFirst() ? true : false; + // 判断是否为列表中唯一的一项 + mIsOnlyOneItem = (cursor.getCount() == 1); + mIsMultiNotesFollowingFolder = false; + mIsOneNoteFollowingFolder = false; + + // 如果笔记类型为普通笔记且不是第一项 + if (mType == Notes.TYPE_NOTE && !mIsFirstItem) { + int position = cursor.getPosition(); + if (cursor.moveToPrevious()) { + // 如果前一项是文件夹或系统类型 + if (cursor.getInt(TYPE_COLUMN) == Notes.TYPE_FOLDER + || cursor.getInt(TYPE_COLUMN) == Notes.TYPE_SYSTEM) { + if (cursor.getCount() > (position + 1)) { + // 如果后面还有其他笔记,则标记为文件夹后的多条笔记 + mIsMultiNotesFollowingFolder = true; + } else { + // 否则标记为文件夹后的单条笔记 + mIsOneNoteFollowingFolder = true; + } + } + // 将 Cursor 移动回原来的位置 + if (!cursor.moveToNext()) { + throw new IllegalStateException("cursor move to previous but can't move back"); + } + } + } + } + + /** + * 判断是否为文件夹后的单条笔记。 + * @return 如果是则返回 true,否则返回 false + */ + public boolean isOneFollowingFolder() { + return mIsOneNoteFollowingFolder; + } + + /** + * 判断是否为文件夹后的多条笔记。 + * @return 如果是则返回 true,否则返回 false + */ + public boolean isMultiFollowingFolder() { + return mIsMultiNotesFollowingFolder; + } + + /** + * 判断是否为列表中的最后一项。 + * @return 如果是则返回 true,否则返回 false + */ + public boolean isLast() { + return mIsLastItem; + } + + /** + * 获取通话记录对应的联系人姓名。 + * @return 联系人姓名 + */ + public String getCallName() { + return mName; + } + + /** + * 判断是否为列表中的第一项。 + * @return 如果是则返回 true,否则返回 false + */ + public boolean isFirst() { + return mIsFirstItem; + } + + /** + * 判断是否为列表中唯一的一项。 + * @return 如果是则返回 true,否则返回 false + */ + public boolean isSingle() { + return mIsOnlyOneItem; + } + + /** + * 获取笔记的唯一标识符。 + * @return 笔记的 ID + */ + public long getId() { + return mId; + } + + /** + * 获取笔记的提醒日期。 + * @return 提醒日期 + */ + public long getAlertDate() { + return mAlertDate; + } + + /** + * 获取笔记的创建日期。 + * @return 创建日期 + */ + public long getCreatedDate() { + return mCreatedDate; + } + + /** + * 判断笔记是否有附件。 + * @return 如果有则返回 true,否则返回 false + */ + public boolean hasAttachment() { + return mHasAttachment; + } + + /** + * 获取笔记的修改日期。 + * @return 修改日期 + */ + public long getModifiedDate() { + return mModifiedDate; + } + + /** + * 获取笔记的背景颜色 ID。 + * @return 背景颜色 ID + */ + public int getBgColorId() { + return mBgColorId; + } + + /** + * 获取笔记的父文件夹 ID。 + * @return 父文件夹 ID + */ + public long getParentId() { + return mParentId; + } + + /** + * 获取笔记数量。 + * @return 笔记数量 + */ + public int getNotesCount() { + return mNotesCount; + } + + /** + * 获取笔记所在的文件夹 ID,与 getParentId 功能相同。 + * @return 文件夹 ID + */ + public long getFolderId () { + return mParentId; + } + + /** + * 获取笔记的类型。 + * @return 笔记类型 + */ + public int getType() { + return mType; + } + + /** + * 获取笔记对应的小部件类型。 + * @return 小部件类型 + */ + public int getWidgetType() { + return mWidgetType; + } + + /** + * 获取笔记对应的小部件 ID。 + * @return 小部件 ID + */ + public int getWidgetId() { + return mWidgetId; + } + + /** + * 获取笔记的摘要。 + * @return 笔记摘要 + */ + public String getSnippet() { + return mSnippet; + } + + /** + * 判断笔记是否设置了提醒。 + * @return 如果设置了提醒则返回 true,否则返回 false + */ + public boolean hasAlert() { + return (mAlertDate > 0); + } + + /** + * 判断笔记是否为通话记录。 + * @return 如果是通话记录则返回 true,否则返回 false + */ + public boolean isCallRecord() { + return (mParentId == Notes.ID_CALL_RECORD_FOLDER && !TextUtils.isEmpty(mPhoneNumber)); + } + + /** + * 从 Cursor 中获取笔记的类型。 + * @param cursor 包含笔记数据的 Cursor 对象 + * @return 笔记类型 + */ + public static int getNoteType(Cursor cursor) { + return cursor.getInt(TYPE_COLUMN); + } +} \ No newline at end of file