添加部分注释 #4

Merged
mbls3xqnp merged 16 commits from baoerjun_branch into develop 3 weeks ago

Binary file not shown.

@ -124,99 +124,202 @@ public class WorkingNote {
loadNote();
}
/**
*
*
* ID
* loadNoteData()
*
*
* @throws IllegalArgumentException ID
*/
private void loadNote() {
// 构建查询URI通过笔记ID定位特定的笔记记录
// 使用NOTE_PROJECTION指定需要查询的列父文件夹ID、提醒日期、背景颜色ID等
Cursor cursor = mContext.getContentResolver().query(
ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, mNoteId), NOTE_PROJECTION, null,
null, null);
if (cursor != null) {
// 如果查询结果不为空,且能移动到第一条记录
if (cursor.moveToFirst()) {
mFolderId = cursor.getLong(NOTE_PARENT_ID_COLUMN);
mBgColorId = cursor.getInt(NOTE_BG_COLOR_ID_COLUMN);
mWidgetId = cursor.getInt(NOTE_WIDGET_ID_COLUMN);
mWidgetType = cursor.getInt(NOTE_WIDGET_TYPE_COLUMN);
mAlertDate = cursor.getLong(NOTE_ALERTED_DATE_COLUMN);
mModifiedDate = cursor.getLong(NOTE_MODIFIED_DATE_COLUMN);
// 从查询结果中提取笔记的基本属性并赋值给相应的成员变量
mFolderId = cursor.getLong(NOTE_PARENT_ID_COLUMN); // 获取笔记所属文件夹的ID
mBgColorId = cursor.getInt(NOTE_BG_COLOR_ID_COLUMN); // 获取笔记背景颜色ID
mWidgetId = cursor.getInt(NOTE_WIDGET_ID_COLUMN); // 获取关联的小部件ID
mWidgetType = cursor.getInt(NOTE_WIDGET_TYPE_COLUMN); // 获取小部件类型
mAlertDate = cursor.getLong(NOTE_ALERTED_DATE_COLUMN); // 获取提醒日期
mModifiedDate = cursor.getLong(NOTE_MODIFIED_DATE_COLUMN); // 获取最后修改日期
}
cursor.close();
cursor.close(); // 关闭游标,释放资源
} else {
// 如果查询结果为空,记录错误日志并抛出异常
Log.e(TAG, "No note with id:" + mNoteId);
throw new IllegalArgumentException("Unable to find note with id " + mNoteId);
}
// 加载笔记的具体内容数据(文本内容、通话记录等)
loadNoteData();
}
/**
* loadNote()loadNoteData()
* ID
*/
private void loadNoteData() {
// 通过ContentResolver查询数据库获取指定笔记ID的数据
// Notes.CONTENT_DATA_URI: 指向数据表的URI格式为"content://micode_notes/data"
// DATA_PROJECTION: 指定要查询的列包括ID、内容、MIME类型、DATA1-DATA4等字段
// DataColumns.NOTE_ID + "=?": 查询条件筛选note_id等于指定值的记录
// new String[] { String.valueOf(mNoteId) }: 查询参数将mNoteId转换为字符串作为查询条件的值
Cursor cursor = mContext.getContentResolver().query(Notes.CONTENT_DATA_URI, DATA_PROJECTION,
DataColumns.NOTE_ID + "=?", new String[] {
String.valueOf(mNoteId)
}, null);
// 检查查询结果是否为空
if (cursor != null) {
// 如果有数据,移动到第一条记录
if (cursor.moveToFirst()) {
// 遍历所有符合条件的记录
do {
// 获取当前记录的MIME类型用于区分不同类型的数据
String type = cursor.getString(DATA_MIME_TYPE_COLUMN);
// 如果是普通文本笔记类型
if (DataConstants.NOTE.equals(type)) {
// 获取笔记的文本内容
mContent = cursor.getString(DATA_CONTENT_COLUMN);
// 获取笔记的显示模式(普通模式或清单模式)
mMode = cursor.getInt(DATA_MODE_COLUMN);
// 设置文本数据的ID用于后续更新操作
mNote.setTextDataId(cursor.getLong(DATA_ID_COLUMN));
} else if (DataConstants.CALL_NOTE.equals(type)) {
}
// 如果是通话记录笔记类型
else if (DataConstants.CALL_NOTE.equals(type)) {
// 设置通话记录数据的ID
mNote.setCallDataId(cursor.getLong(DATA_ID_COLUMN));
} else {
}
// 如果是未知类型,记录调试信息
else {
Log.d(TAG, "Wrong note type with type:" + type);
}
} while (cursor.moveToNext());
} while (cursor.moveToNext()); // 移动到下一条记录,直到遍历完所有记录
}
// 关闭游标,释放资源
cursor.close();
} else {
// 如果查询结果为空,记录错误日志
Log.e(TAG, "No data with id:" + mNoteId);
// 抛出异常表示无法找到指定ID的笔记数据
throw new IllegalArgumentException("Unable to find note's data with id " + mNoteId);
}
}
/**
*
*
*
*
*
* @param context 访
* @param folderId ID
* @param widgetId ID使ID
* @param widgetType
* @param defaultBgColorId ID
* @return WorkingNote
*/
public static WorkingNote createEmptyNote(Context context, long folderId, int widgetId,
int widgetType, int defaultBgColorId) {
// 创建一个新的WorkingNote实例指定上下文和所属文件夹
WorkingNote note = new WorkingNote(context, folderId);
// 设置笔记的背景颜色ID
note.setBgColorId(defaultBgColorId);
// 设置关联的桌面小部件ID
note.setWidgetId(widgetId);
// 设置小部件类型
note.setWidgetType(widgetType);
// 返回创建的笔记对象
return note;
}
/**
* ID
*
*
* WorkingNoteloadNote()
*
*
* @param context 访
* @param id IDID
* @return WorkingNote
* @throws IllegalArgumentException ID
*/
public static WorkingNote load(Context context, long id) {
// 创建一个新的WorkingNote实例传入笔记ID和文件夹ID(0表示不指定)
// 构造函数会自动调用loadNote()方法从数据库加载笔记数据
return new WorkingNote(context, id, 0);
}
/**
*
*
* ID
* 使synchronized线
*
* @return truefalse
*/
public synchronized boolean saveNote() {
// 检查笔记是否值得保存(非空内容或已修改)
if (isWorthSaving()) {
// 如果笔记在数据库中不存在新笔记则需要先获取一个新的笔记ID
if (!existInDatabase()) {
// 调用Note.getNewNoteId()方法获取一个新的笔记ID
// 如果获取失败返回0记录错误日志并返回false
if ((mNoteId = Note.getNewNoteId(mContext, mFolderId)) == 0) {
Log.e(TAG, "Create new note fail with id:" + mNoteId);
return false;
}
}
// 将笔记数据同步到数据库
// 这会更新笔记的基本信息和内容数据
mNote.syncNote(mContext, mNoteId);
/**
* Update widget content if there exist any widget of this note
*/
// 如果笔记关联了桌面小部件,则更新小部件显示内容
// 检查条件小部件ID有效、小部件类型有效、状态监听器不为空
if (mWidgetId != AppWidgetManager.INVALID_APPWIDGET_ID
&& mWidgetType != Notes.TYPE_WIDGET_INVALIDE
&& mNoteSettingStatusListener != null) {
// 通知监听器小部件内容已更改,需要更新显示
mNoteSettingStatusListener.onWidgetChanged();
}
// 保存成功返回true
return true;
} else {
// 笔记不值得保存空内容且未修改返回false
return false;
}
}
/**
*
*
* @return truefalse
*/
public boolean existInDatabase() {
// 通过检查笔记ID是否大于0来判断笔记是否已保存到数据库
// 新笔记的mNoteId初始值为0保存成功后会被分配一个正整数ID
return mNoteId > 0;
}
/**
*
*
* @return truefalse
*/
private boolean isWorthSaving() {
// 检查笔记是否已被删除、是否为空内容(新笔记)、是否已修改(已存在笔记)
if (mIsDeleted || (!existInDatabase() && TextUtils.isEmpty(mContent))
|| (existInDatabase() && !mNote.isLocalModified())) {
return false;
@ -225,44 +328,138 @@ public class WorkingNote {
}
}
/**
*
*
*
* 便
*
* WorkingNote
* UIUI
*
*
* @param l NoteSettingChangedListener
* null
*/
public void setOnSettingStatusChangedListener(NoteSettingChangedListener l) {
// 将传入的监听器对象保存到成员变量中
// 当笔记设置发生变化时,会调用该监听器的相应方法
mNoteSettingStatusListener = l;
}
/**
*
*
*
*
*
*
* @param date 0
* @param set truefalse
*/
public void setAlertDate(long date, boolean set) {
// 检查新的提醒日期是否与当前日期不同
if (date != mAlertDate) {
// 更新笔记对象的提醒日期
mAlertDate = date;
// 将新的提醒日期同步到数据库中
// NoteColumns.ALERTED_DATE 是数据库中存储提醒日期的字段名
mNote.setNoteValue(NoteColumns.ALERTED_DATE, String.valueOf(mAlertDate));
}
// 如果有注册的状态变化监听器,则通知它提醒日期已更改
// 这样UI组件可以及时更新显示如显示或隐藏提醒图标
if (mNoteSettingStatusListener != null) {
// 调用监听器的onClockAlertChanged方法传入新的日期和设置状态
mNoteSettingStatusListener.onClockAlertChanged(date, set);
}
}
/**
*
*
*
*
*
*
*
*
*
* @param mark truefalse
*/
public void markDeleted(boolean mark) {
// 设置笔记的删除标记状态
mIsDeleted = mark;
// 如果笔记关联了有效的桌面小部件且有注册的状态监听器
// AppWidgetManager.INVALID_APPWIDGET_ID 表示无效的小部件ID
// Notes.TYPE_WIDGET_INVALIDE 表示无效的小部件类型
if (mWidgetId != AppWidgetManager.INVALID_APPWIDGET_ID
&& mWidgetType != Notes.TYPE_WIDGET_INVALIDE && mNoteSettingStatusListener != null) {
// 通知监听器小部件内容已更改,需要更新显示
// 这样可以确保桌面小部件反映笔记的删除状态
mNoteSettingStatusListener.onWidgetChanged();
}
}
/**
* ID
*
* setAlertDate
* ID
*
*
* UI
* ID便
*
*
* @param id ID
*/
public void setBgColorId(int id) {
// 检查新的背景颜色ID是否与当前ID不同
if (id != mBgColorId) {
// 更新笔记对象的背景颜色ID
mBgColorId = id;
// 如果有注册的状态变化监听器,则通知它背景颜色已更改
// 这样UI组件可以及时更新显示反映新的背景颜色
if (mNoteSettingStatusListener != null) {
mNoteSettingStatusListener.onBackgroundColorChanged();
}
// 将新的背景颜色ID同步到数据库中
// NoteColumns.BG_COLOR_ID 是数据库中存储背景颜色ID的字段名
mNote.setNoteValue(NoteColumns.BG_COLOR_ID, String.valueOf(id));
}
}
/**
*
*
*
*
*
*
* UI
* 便
*
*
* @param mode
*/
public void setCheckListMode(int mode) {
// 检查新的模式是否与当前模式不同
if (mMode != mode) {
// 如果有注册的状态变化监听器,则通知它清单模式已更改
// 传入旧模式和新模式作为参数以便UI可以进行适当的过渡处理
if (mNoteSettingStatusListener != null) {
mNoteSettingStatusListener.onCheckListModeChanged(mMode, mode);
}
// 更新笔记对象的模式值
mMode = mode;
// 将新的模式值同步到数据库中
// TextNote.MODE 是数据库中存储笔记模式的字段名
mNote.setTextData(TextNote.MODE, String.valueOf(mMode));
}
}
@ -342,26 +539,45 @@ public class WorkingNote {
return mWidgetType;
}
/**
*
*
* UI
*
*/
public interface NoteSettingChangedListener {
/**
* Called when the background color of current note has just changed
*
*
* UI
*/
void onBackgroundColorChanged();
/**
* Called when user set clock
*
*
* @param date 0
* @param set truefalse
*
* 使AlarmManagerPendingIntent
*/
void onClockAlertChanged(long date, boolean set);
/**
* Call when user create note from widget
*
*
* 广
*/
void onWidgetChanged();
/**
* Call when switch between check list mode and normal mode
* @param oldMode is previous mode before change
* @param newMode is new mode
*
*
* @param oldMode
* @param newMode
*
* UI
*
*/
void onCheckListModeChanged(int oldMode, int newMode);
}

Loading…
Cancel
Save