From cac4b9ccbd87b5b93271cfb837bfa0ba3b8b36b1 Mon Sep 17 00:00:00 2001 From: 6p0 <2764137309@qq.com> Date: Mon, 30 Dec 2024 15:15:49 +0800 Subject: [PATCH] lpl --- src/net/micode/notes/model/Note.java | 275 ++++++++++++-------- src/net/micode/notes/model/WorkingNote.java | 270 +++++++------------ 2 files changed, 260 insertions(+), 285 deletions(-) diff --git a/src/net/micode/notes/model/Note.java b/src/net/micode/notes/model/Note.java index f43c73f..1a7666c 100644 --- a/src/net/micode/notes/model/Note.java +++ b/src/net/micode/notes/model/Note.java @@ -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 operationList = new ArrayList(); + // 批量操作列表 + ArrayList 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(), \ No newline at end of file + Log.e(TAG, "RemoteException during applyBatch: " + e.toString()); + } catch (OperationApplicationException e) { + Log.e(TAG, "OperationApplicationException during applyBatch: " + e.toString()); + } + } + return null; // 返回 null 表示操作失败 + } + } +} diff --git a/src/net/micode/notes/model/WorkingNote.java b/src/net/micode/notes/model/WorkingNote.java index da36880..9161567 100644 --- a/src/net/micode/notes/model/WorkingNote.java +++ b/src/net/micode/notes/model/WorkingNote.java @@ -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 鏄竴涓牳蹇冪被锛岃礋璐g鐞嗗簲鐢ㄤ腑鐨勫崟涓瑪璁板璞° + * 瀹冨皝瑁呬簡绗旇鐨勫睘鎬с佸姞杞戒笌淇濆瓨閫昏緫銆佺敤鎴疯缃洃鍚櫒浠ュ強灏忛儴浠剁浉鍏崇殑鎿嶄綔銆 */ public class WorkingNote { - // 浠h〃褰撳墠鎿嶄綔鐨勭瑪璁 + // 浠h〃褰撳墠鎿嶄綔鐨勭瑪璁板璞 (鏁版嵁瀛樺偍涓庢洿鏂伴昏緫灏佽鍦 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; - // 绗旇璁剧疆鏀瑰彉鐨勭洃鍚櫒 + // 鐩戝惉鍣ㄦ帴鍙o紝閫氱煡 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()) { // 濡傛灉鏌ヨ鍒版暟鎹紝瑙f瀽鍚勫瓧娈 + 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) { /* 杞崲绗旇涓洪氳瘽璁板綍 */ } }