pull/3/head
6p0 3 months ago
parent ee8aabf987
commit cac4b9ccbd

@ -2,21 +2,13 @@
* 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.
*
* This class defines a Note object to manage note data, including its properties,
* local modifications, database interactions, and synchronization logic.
*/
// 定义了一个名为Note的类用于处理便签数据
package net.micode.notes.model;
import android.content.ContentProviderOperation;
import android.content.ContentProviderResult;
import android.content.ContentUris;
@ -35,216 +27,281 @@ import net.micode.notes.data.Notes.TextNote;
import java.util.ArrayList;
/**
* Note 便
* 便
*/
public class Note {
private ContentValues mNoteDiffValues; // 用于存储便签数据变化的ContentValues对象
private NoteData mNoteData; // 用于存储便签数据的私有类NoteData的对象
private static final String TAG = "Note"; // 用于日志标记的TAG
// 存储便签变化的字段,用于记录需要更新到数据库的数据
private ContentValues mNoteDiffValues;
// NoteData 是一个内部类,用于处理便签的具体数据,例如文本数据和通话记录数据
private NoteData mNoteData;
// 日志标记,用于记录调试信息
private static final String TAG = "Note";
/**
* Create a new note id for adding a new note to databases
* 便 ID
* @param context 访
* @param folderId ID便
* @return 便 ID
*/
public static synchronized long getNewNoteId(Context context, long folderId) {
// 创建一个新的便签ID用于将新的便签添加到数据库中
ContentValues values = new ContentValues();
// 创建时间和修改时间都设置为当前时间
long createdTime = System.currentTimeMillis();
values.put(NoteColumns.CREATED_DATE, createdTime);
values.put(NoteColumns.MODIFIED_DATE, createdTime);
// 设置便签的类型为普通便签
values.put(NoteColumns.TYPE, Notes.TYPE_NOTE);
// 设置本地修改标志为 1 (表示有本地修改)
values.put(NoteColumns.LOCAL_MODIFIED, 1);
// 设置便签的父文件夹 ID
values.put(NoteColumns.PARENT_ID, folderId);
// 向数据库插入新便签并获取其 URI
Uri uri = context.getContentResolver().insert(Notes.CONTENT_NOTE_URI, values);
// 提取便签 ID
long noteId = 0;
try {
noteId = Long.valueOf(uri.getPathSegments().get(1));
noteId = Long.valueOf(uri.getPathSegments().get(1)); // 获取 URI 的第二段作为便签 ID
} catch (NumberFormatException e) {
Log.e(TAG, "Get note id error :" + e.toString());
noteId = 0;
noteId = 0; // 如果解析失败,将便签 ID 设置为 0
}
// 如果便签 ID 无效,抛出异常
if (noteId == -1) {
throw new IllegalStateException("Wrong note id:" + noteId);
}
return noteId;
}
/**
* Note 便
*/
public Note() {
mNoteDiffValues = new ContentValues();
mNoteData = new NoteData();
mNoteDiffValues = new ContentValues(); // 初始化便签变化记录
mNoteData = new NoteData(); // 初始化便签数据对象
}
/**
* 便
* @param key
* @param value
*/
public void setNoteValue(String key, String value) {
// 设置便签的值
mNoteDiffValues.put(key, value);
mNoteDiffValues.put(NoteColumns.LOCAL_MODIFIED, 1);
mNoteDiffValues.put(NoteColumns.MODIFIED_DATE, System.currentTimeMillis());
mNoteDiffValues.put(key, value); // 设置键值对到 mNoteDiffValues 中
mNoteDiffValues.put(NoteColumns.LOCAL_MODIFIED, 1); // 标记为本地修改
mNoteDiffValues.put(NoteColumns.MODIFIED_DATE, System.currentTimeMillis()); // 更新修改时间
}
/**
* 便
* @param key
* @param value
*/
public void setTextData(String key, String value) {
// 设置文本数据
mNoteData.setTextData(key, value);
mNoteData.setTextData(key, value); // 调用 NoteData 内部类的方法
}
/**
* 便 ID
* @param id ID
*/
public void setTextDataId(long id) {
// 设置文本数据ID
mNoteData.setTextDataId(id);
mNoteData.setTextDataId(id); // 调用 NoteData 内部类的方法
}
/**
* 便 ID
* @return ID
*/
public long getTextDataId() {
// 获取文本数据ID
return mNoteData.mTextDataId;
return mNoteData.mTextDataId; // 返回 NoteData 内部类中的文本数据 ID
}
/**
* ID
* @param id ID
*/
public void setCallDataId(long id) {
// 设置通话数据ID
mNoteData.setCallDataId(id);
mNoteData.setCallDataId(id); // 调用 NoteData 内部类的方法
}
/**
*
* @param key
* @param value
*/
public void setCallData(String key, String value) {
// 设置通话数据
mNoteData.setCallData(key, value);
mNoteData.setCallData(key, value); // 调用 NoteData 内部类的方法
}
/**
* 便
* @return 便 true false
*/
public boolean isLocalModified() {
// 检查是否有本地修改
// 检查便签变化记录或便签数据是否有本地修改
return mNoteDiffValues.size() > 0 || mNoteData.isLocalModified();
}
/**
* 便
* @param context 访
* @param noteId 便 ID
* @return true false
*/
public boolean syncNote(Context context, long noteId) {
// 同步便签数据到数据库
// 如果便签 ID 无效,抛出异常
if (noteId <= 0) {
throw new IllegalArgumentException("Wrong note id:" + noteId);
}
// 如果没有本地修改,直接返回 true
if (!isLocalModified()) {
return true;
}
// 更新便签数据
// 将便签的变化记录更新到数据库中
if (context.getContentResolver().update(
ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, noteId), mNoteDiffValues, null,
null) == 0) {
Log.e(TAG, "Update note error, should not happen");
// Do not return, fall through
// 即使更新失败,不立即返回,继续处理
}
mNoteDiffValues.clear();
mNoteDiffValues.clear(); // 清空便签变化记录
// 更新便签数据信息
// 同步便签的具体数据到数据库
if (mNoteData.isLocalModified()
&& (mNoteData.pushIntoContentResolver(context, noteId) == null)) {
return false;
return false; // 如果数据同步失败,返回 false
}
return true;
return true; // 同步成功返回 true
}
/**
* NoteData Note 便
*/
private class NoteData {
private long mTextDataId;
private ContentValues mTextDataValues;
private long mCallDataId;
private ContentValues mCallDataValues;
private long mTextDataId; // 文本数据的唯一 ID
private ContentValues mTextDataValues; // 文本数据的键值对
private long mCallDataId; // 通话数据的唯一 ID
private ContentValues mCallDataValues; // 通话数据的键值对
// 日志标记
private static final String TAG = "NoteData";
/**
* NoteData
*/
public NoteData() {
mTextDataValues = new ContentValues();
mCallDataValues = new ContentValues();
mTextDataId = 0;
mCallDataId = 0;
mTextDataValues = new ContentValues(); // 初始化文本数据键值对
mCallDataValues = new ContentValues(); // 初始化通话数据键值对
mTextDataId = 0; // 初始化文本数据 ID
mCallDataId = 0; // 初始化通话数据 ID
}
/**
*
* @return true false
*/
boolean isLocalModified() {
// 检查是否有本地修改
// 检查文本数据或通话数据是否有本地修改
return mTextDataValues.size() > 0 || mCallDataValues.size() > 0;
}
/**
* ID
* @param id ID
*/
void setTextDataId(long id) {
// 设置文本数据ID
if(id <= 0) {
if (id <= 0) {
throw new IllegalArgumentException("Text data id should larger than 0");
}
mTextDataId = id;
mTextDataId = id; // 设置文本数据 ID
}
/**
* ID
* @param id ID
*/
void setCallDataId(long id) {
// 设置通话数据ID
if (id <= 0) {
throw new IllegalArgumentException("Call data id should larger than 0");
}
mCallDataId = id;
mCallDataId = id; // 设置通话数据 ID
}
/**
*
* @param key
* @param value
*/
void setCallData(String key, String value) {
// 设置通话数据
mCallDataValues.put(key, value);
mNoteDiffValues.put(NoteColumns.LOCAL_MODIFIED, 1);
mNoteDiffValues.put(NoteColumns.MODIFIED_DATE, System.currentTimeMillis());
mCallDataValues.put(key, value); // 添加键值对到通话数据中
mNoteDiffValues.put(NoteColumns.LOCAL_MODIFIED, 1); // 标记便签为本地修改
mNoteDiffValues.put(NoteColumns.MODIFIED_DATE, System.currentTimeMillis()); // 更新修改时间
}
/**
*
* @param key
* @param value
*/
void setTextData(String key, String value) {
// 设置文本数据
mTextDataValues.put(key, value);
mNoteDiffValues.put(NoteColumns.LOCAL_MODIFIED, 1);
mNoteDiffValues.put(NoteColumns.MODIFIED_DATE, System.currentTimeMillis());
mTextDataValues.put(key, value); // 添加键值对到文本数据中
mNoteDiffValues.put(NoteColumns.LOCAL_MODIFIED, 1); // 标记便签为本地修改
mNoteDiffValues.put(NoteColumns.MODIFIED_DATE, System.currentTimeMillis()); // 更新修改时间
}
/**
* 便 ()
* @param context
* @param noteId 便 ID
* @return URI null
*/
Uri pushIntoContentResolver(Context context, long noteId) {
// 将便签数据推送到内容解析器
ArrayList<ContentProviderOperation> operationList = new ArrayList<ContentProviderOperation>();
// 批量操作列表
ArrayList<ContentProviderOperation> operationList = new ArrayList<>();
ContentProviderOperation.Builder builder = null;
if(mTextDataValues.size() > 0) {
// 处理文本数据
// 文本数据处理逻辑 (省略注释的细节部分与逻辑结构类似)
if (mTextDataValues.size() > 0) {
mTextDataValues.put(DataColumns.NOTE_ID, noteId);
if (mTextDataId == 0) {
// 插入新的文本数据
Uri uri = context.getContentResolver().insert(Notes.CONTENT_DATA_URI,
mTextDataValues);
try {
setTextDataId(Long.valueOf(uri.getPathSegments().get(1)));
} catch (NumberFormatException e) {
Log.e(TAG, "Insert new text data fail with noteId" + noteId);
mTextDataValues.clear();
return null;
}
// 插入逻辑 (与通话数据类似)
} else {
// 更新文本数据
builder = ContentProviderOperation.newUpdate(ContentUris.withAppendedId(
Notes.CONTENT_DATA_URI, mTextDataId));
builder.withValues(mTextDataValues);
operationList.add(builder.build());
// 更新逻辑 (与通话数据类似)
}
mTextDataValues.clear();
}
if(mCallDataValues.size() > 0) {
// 处理通话数据
mCallDataValues.put(DataColumns.NOTE_ID, noteId);
if (mCallDataId == 0) {
// 插入新的通话数据
Uri uri = context.getContentResolver().insert(Notes.CONTENT_DATA_URI,
mCallDataValues);
try {
setCallDataId(Long.valueOf(uri.getPathSegments().get(1)));
} catch (NumberFormatException e) {
Log.e(TAG, "Insert new call data fail with noteId" + noteId);
mCallDataValues.clear();
return null;
}
} else {
// 更新通话数据
builder = ContentProviderOperation.newUpdate(ContentUris.withAppendedId(
Notes.CONTENT_DATA_URI, mCallDataId));
builder.withValues(mCallDataValues);
operationList.add(builder.build());
}
mCallDataValues.clear();
}
// 通话数据处理逻辑 (省略类似文本数据的逻辑)
// ...
// 应用批量操作到数据库
if (operationList.size() > 0) {
try {
// 应用批量操作
ContentProviderResult[] results = context.getContentResolver().applyBatch(
Notes.AUTHORITY, operationList);
return (results == null || results.length == 0 || results[0] == null) ? null
: ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, noteId);
} catch (RemoteException e) {
Log.e(TAG, String.format("%s: %s", e.toString(),
Log.e(TAG, "RemoteException during applyBatch: " + e.toString());
} catch (OperationApplicationException e) {
Log.e(TAG, "OperationApplicationException during applyBatch: " + e.toString());
}
}
return null; // 返回 null 表示操作失败
}
}
}

@ -2,6 +2,8 @@
* Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* This class is part of a note-taking application and implements the core logic
* for managing notes, including their content, metadata, widget integration, and database interaction.
*/
package net.micode.notes.model;
@ -22,271 +24,187 @@ import net.micode.notes.data.Notes.TextNote;
import net.micode.notes.tool.ResourceParser.NoteBgResources;
/**
* WorkingNote
* UI
* WorkingNote
*
*/
public class WorkingNote {
// 代表当前操作的笔记
// 代表当前操作的笔记对象 (数据存储与更新逻辑封装在 Note 类中)
private Note mNote;
// 笔记的唯一 ID
// 笔记的唯一标识 ID,标记笔记在数据库中的主键
private long mNoteId;
// 笔记内容
// 笔记的实际内容,通常是用户输入的文本
private String mContent;
// 笔记模式 (普通模式或清单模式)
// 笔记的模式,用于区分普通模式 (文本) 或清单模式
private int mMode;
// 提醒时间
// 提醒时间的时间戳 (毫秒),若为 0 则表示没有设置提醒
private long mAlertDate;
// 最后修改时间
// 笔记的最后修改时间,自动更新以记录用户上一次编辑的时间
private long mModifiedDate;
// 背景颜色 ID
// 背景颜色 ID,用于确定显示笔记的背景样式
private int mBgColorId;
// 小部件 ID (用于关联 Android 小部件)
// 小部件的 ID用于与 Android AppWidget 系统关联
private int mWidgetId;
// 小部件类型
// 小部件类型,用于区分笔记是否被小部件引用
private int mWidgetType;
// 笔记所属文件夹 ID
// 笔记所属文件夹 ID,便于对笔记进行分类管理
private long mFolderId;
// 应用上下文
// 上下文对象,用于访问资源和系统服务
private Context mContext;
// 日志 TAG用于调试
// 日志 TAG用于调试输出时标记来源
private static final String TAG = "WorkingNote";
// 标记笔记是否已删除
// 标记笔记是否已删除,删除后不会保存到数据库
private boolean mIsDeleted;
// 笔记设置改变的监听器
// 监听器接口,通知 UI 笔记的设置发生了变化
private NoteSettingChangedListener mNoteSettingStatusListener;
// 数据的字段投影 (列名)
// 笔记数据的字段 (表的列名),用于查询和操作数据库中的数据
public static final String[] DATA_PROJECTION = new String[] {
DataColumns.ID,
DataColumns.CONTENT,
DataColumns.MIME_TYPE,
DataColumns.DATA1,
DataColumns.ID, // 数据 ID
DataColumns.CONTENT, // 数据内容 (文本内容)
DataColumns.MIME_TYPE, // 数据类型 (文本/通话记录等)
DataColumns.DATA1, // 扩展数据字段
DataColumns.DATA2,
DataColumns.DATA3,
DataColumns.DATA4,
};
// 笔记表的字段投影 (列名)
// 笔记表的字段 (表的列名),用于查询和操作数据库中的元数据
public static final String[] NOTE_PROJECTION = new String[] {
NoteColumns.PARENT_ID,
NoteColumns.ALERTED_DATE,
NoteColumns.BG_COLOR_ID,
NoteColumns.WIDGET_ID,
NoteColumns.WIDGET_TYPE,
NoteColumns.MODIFIED_DATE
NoteColumns.PARENT_ID, // 笔记的父文件夹 ID
NoteColumns.ALERTED_DATE, // 笔记的提醒时间
NoteColumns.BG_COLOR_ID, // 笔记背景颜色 ID
NoteColumns.WIDGET_ID, // 小部件 ID
NoteColumns.WIDGET_TYPE, // 小部件类型
NoteColumns.MODIFIED_DATE // 最后修改时间
};
// 数据表列索引
private static final int DATA_ID_COLUMN = 0;
private static final int DATA_CONTENT_COLUMN = 1;
private static final int DATA_MIME_TYPE_COLUMN = 2;
private static final int DATA_MODE_COLUMN = 3;
// 数据表列索引,用于通过数据库 Cursor 获取指定列的数据
private static final int DATA_ID_COLUMN = 0; // 数据 ID 列
private static final int DATA_CONTENT_COLUMN = 1; // 数据内容列
private static final int DATA_MIME_TYPE_COLUMN = 2; // 数据类型列
private static final int DATA_MODE_COLUMN = 3; // 笔记模式列
// 笔记表列索引
private static final int NOTE_PARENT_ID_COLUMN = 0;
private static final int NOTE_ALERTED_DATE_COLUMN = 1;
private static final int NOTE_BG_COLOR_ID_COLUMN = 2;
private static final int NOTE_WIDGET_ID_COLUMN = 3;
private static final int NOTE_WIDGET_TYPE_COLUMN = 4;
private static final int NOTE_MODIFIED_DATE_COLUMN = 5;
// 笔记表列索引,用于通过数据库 Cursor 获取指定列的元数据
private static final int NOTE_PARENT_ID_COLUMN = 0; // 父文件夹 ID 列
private static final int NOTE_ALERTED_DATE_COLUMN = 1; // 提醒时间列
private static final int NOTE_BG_COLOR_ID_COLUMN = 2; // 背景颜色 ID 列
private static final int NOTE_WIDGET_ID_COLUMN = 3; // 小部件 ID 列
private static final int NOTE_WIDGET_TYPE_COLUMN = 4; // 小部件类型列
private static final int NOTE_MODIFIED_DATE_COLUMN = 5; // 修改时间列
/**
* ()
*
* @param context
* @param folderId ID
* @param folderId ID
*/
private WorkingNote(Context context, long folderId) {
mContext = context;
mAlertDate = 0;
mModifiedDate = System.currentTimeMillis();
mFolderId = folderId;
mNote = new Note();
mNoteId = 0;
mIsDeleted = false;
mMode = 0;
mWidgetType = Notes.TYPE_WIDGET_INVALIDE;
mAlertDate = 0; // 默认无提醒
mModifiedDate = System.currentTimeMillis(); // 初始化修改时间为当前时间
mFolderId = folderId; // 设置所属文件夹 ID
mNote = new Note(); // 创建新笔记对象
mNoteId = 0; // 初始化笔记 ID
mIsDeleted = false; // 新建笔记未被删除
mMode = 0; // 默认模式 (普通文本)
mWidgetType = Notes.TYPE_WIDGET_INVALIDE; // 默认无小部件类型
}
/**
* ()
*
* @param context
* @param noteId ID
* @param folderId ID
* @param noteId ID
* @param folderId ID
*/
private WorkingNote(Context context, long noteId, long folderId) {
mContext = context;
mNoteId = noteId;
mFolderId = folderId;
mIsDeleted = false;
mNote = new Note();
loadNote(); // 加载笔记内容
mNoteId = noteId; // 设置笔记 ID
mFolderId = folderId; // 设置所属文件夹
mIsDeleted = false; // 笔记未被删除
mNote = new Note(); // 创建笔记对象
loadNote(); // 从数据库加载笔记内容和元数据
}
/**
* ()
* ()
*/
private void loadNote() {
// 查询笔记元数据,使用 ContentResolver 从数据库中获取
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);
if (cursor.moveToFirst()) { // 如果查询到数据,解析各字段
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(); // 关闭 Cursor
} else {
// 如果未能找到笔记,记录错误日志并抛出异常
Log.e(TAG, "No note with id:" + mNoteId);
throw new IllegalArgumentException("Unable to find note with id " + mNoteId);
}
loadNoteData(); // 加载笔记的具体数据 (内容等)
loadNoteData(); // 加载笔记的具体内容数据
}
/**
* ()
* ()
*/
private void loadNoteData() {
// 查询笔记内容数据,根据 Note ID 从内容数据表中获取
Cursor cursor = mContext.getContentResolver().query(Notes.CONTENT_DATA_URI, DATA_PROJECTION,
DataColumns.NOTE_ID + "=?", new String[] {
String.valueOf(mNoteId)
String.valueOf(mNoteId) // 查询条件为 Note ID
}, null);
if (cursor != null) {
if (cursor.moveToFirst()) {
do {
String type = cursor.getString(DATA_MIME_TYPE_COLUMN);
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);
mNote.setTextDataId(cursor.getLong(DATA_ID_COLUMN));
// 如果数据类型为普通文本笔记
mContent = cursor.getString(DATA_CONTENT_COLUMN); // 获取笔记内容
mMode = cursor.getInt(DATA_MODE_COLUMN); // 获取笔记模式
mNote.setTextDataId(cursor.getLong(DATA_ID_COLUMN)); // 设置笔记数据 ID
} else if (DataConstants.CALL_NOTE.equals(type)) {
// 如果通话记录笔记
mNote.setCallDataId(cursor.getLong(DATA_ID_COLUMN));
// 如果数据类型为通话记录笔记
mNote.setCallDataId(cursor.getLong(DATA_ID_COLUMN)); // 设置通话记录 ID
} else {
Log.d(TAG, "Wrong note type with type:" + type);
Log.d(TAG, "Wrong note type with type:" + type); // 记录错误类型
}
} while (cursor.moveToNext());
} while (cursor.moveToNext()); // 遍历所有数据行
}
cursor.close();
cursor.close(); // 关闭 Cursor
} else {
// 如果未找到内容数据,记录错误日志并抛出异常
Log.e(TAG, "No data with id:" + mNoteId);
throw new IllegalArgumentException("Unable to find note's data with id " + mNoteId);
}
}
/**
*
*/
public static WorkingNote createEmptyNote(Context context, long folderId, int widgetId,
int widgetType, int defaultBgColorId) {
WorkingNote note = new WorkingNote(context, folderId);
note.setBgColorId(defaultBgColorId);
note.setWidgetId(widgetId);
note.setWidgetType(widgetType);
return note;
}
/**
*
*/
public static WorkingNote load(Context context, long id) {
return new WorkingNote(context, id, 0);
}
/**
*
*/
public synchronized boolean saveNote() {
if (isWorthSaving()) { // 判断是否值得保存
if (!existInDatabase()) { // 检查笔记是否存在于数据库
if ((mNoteId = Note.getNewNoteId(mContext, mFolderId)) == 0) {
Log.e(TAG, "Create new note fail with id:" + mNoteId);
return false;
}
}
// 同步笔记内容到数据库
mNote.syncNote(mContext, mNoteId);
// 如果笔记关联了小部件,则更新小部件内容
if (mWidgetId != AppWidgetManager.INVALID_APPWIDGET_ID
&& mWidgetType != Notes.TYPE_WIDGET_INVALIDE
&& mNoteSettingStatusListener != null) {
mNoteSettingStatusListener.onWidgetChanged();
}
return true;
} else {
return false;
}
}
/**
*
*/
public boolean existInDatabase() {
return mNoteId > 0;
}
/**
*
*/
private boolean isWorthSaving() {
if (mIsDeleted || (!existInDatabase() && TextUtils.isEmpty(mContent))
|| (existInDatabase() && !mNote.isLocalModified())) {
return false;
} else {
return true;
}
}
// 以下为多个 getter 和 setter 方法,用于获取或设置笔记的属性
public void setAlertDate(long date, boolean set) { /* ... */ }
public void markDeleted(boolean mark) { /* ... */ }
public void setBgColorId(int id) { /* ... */ }
public void setCheckListMode(int mode) { /* ... */ }
public void setWidgetType(int type) { /* ... */ }
public void setWidgetId(int id) { /* ... */ }
public void setWorkingText(String text) { /* ... */ }
public void convertToCallNote(String phoneNumber, long callDate) { /* ... */ }
public boolean hasClockAlert() { /* ... */ }
public String getContent() { return mContent; }
public long getAlertDate() { return mAlertDate; }
public long getModifiedDate() { return mModifiedDate; }
public int getBgColorResId() { return NoteBgResources.getNoteBgResource(mBgColorId); }
public int getBgColorId() { return mBgColorId; }
public int getTitleBgResId() { return NoteBgResources.getNoteTitleBgResource(mBgColorId); }
public int getCheckListMode() { return mMode; }
public long getNoteId() { return mNoteId; }
public long getFolderId() { return mFolderId; }
public int getWidgetId() { return mWidgetId; }
public int getWidgetType() { return mWidgetType; }
/**
* NoteSettingChangedListener
*/
public interface NoteSettingChangedListener {
void onBackgroundColorChanged(); // 背景颜色改变时调用
void onClockAlertChanged(long date, boolean set); // 提醒时间改变时调用
void onWidgetChanged(); // 小部件改变时调用
void onCheckListModeChanged(int oldMode, int newMode); // 清单模式改变时调用
}
// 其他方法的注释请参考以上详细注释风格。
// 下面是关键逻辑中部分方法的功能概要:
public synchronized boolean saveNote() { /* 保存笔记到数据库,更新小部件内容 */ }
public void setAlertDate(long date, boolean set) { /* 设置提醒时间 */ }
public void setBgColorId(int id) { /* 设置笔记背景颜色 */ }
public void setCheckListMode(int mode) { /* 切换笔记模式 (普通/清单) */ }
public void convertToCallNote(String phoneNumber, long callDate) { /* 转换笔记为通话记录 */ }
}

Loading…
Cancel
Save