/* * 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.net.Uri; /** * 笔记数据模型类 * * 这是整个笔记应用的核心数据定义类,包含: * 1. ContentProvider授权标识 * 2. 笔记类型常量(普通笔记、文件夹、系统文件夹) * 3. 系统文件夹ID定义 * 4. Intent传递数据的键名 * 5. Widget类型定义 * 6. 数据库表列定义接口 * 7. 具体数据类型类(TextNote、CallNote) * * 该类定义了应用的整个数据结构和数据访问接口 */ public class Notes { // ContentProvider授权名称,用于构建Content URI public static final String AUTHORITY = "micode_notes"; // 日志标签 public static final String TAG = "Notes"; /** * 笔记类型常量 * TYPE_NOTE(0): 普通笔记,用户可以创建和编辑 * TYPE_FOLDER(1): 用户文件夹,用于组织笔记 * TYPE_SYSTEM(2): 系统文件夹,如根文件夹、回收站等 */ public static final int TYPE_NOTE = 0; public static final int TYPE_FOLDER = 1; public static final int TYPE_SYSTEM = 2; /** * 系统文件夹ID常量 * 负数ID用于标识系统级文件夹,避免与用户创建的文件夹冲突 * ID_ROOT_FOLDER(0): 根文件夹,所有用户文件夹的父文件夹 * ID_TEMPARAY_FOLDER(-1): 临时文件夹,用于暂存未保存的笔记 * ID_CALL_RECORD_FOLDER(-2): 通话记录文件夹,存储通话录音笔记 * ID_TRASH_FOLER(-3): 回收站文件夹,存储已删除的笔记 */ 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; /** * Intent Extra键名常量 * 用于Activity之间传递数据 */ // 提醒日期,用于闹钟功能 public static final String INTENT_EXTRA_ALERT_DATE = "net.micode.notes.alert_date"; // 背景颜色ID,用于设置笔记背景色 public static final String INTENT_EXTRA_BACKGROUND_ID = "net.micode.notes.background_color_id"; // Widget ID,用于桌面Widget public static final String INTENT_EXTRA_WIDGET_ID = "net.micode.notes.widget_id"; // Widget类型(2x或4x) public static final String INTENT_EXTRA_WIDGET_TYPE = "net.micode.notes.widget_type"; // 文件夹ID,用于指定笔记所属文件夹 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"; /** * Widget类型常量 * TYPE_WIDGET_INVALIDE(-1): 无效Widget * TYPE_WIDGET_2X(0): 2x2尺寸的桌面Widget * TYPE_WIDGET_4X(1): 4x4尺寸的桌面Widget */ public static final int TYPE_WIDGET_INVALIDE = -1; public static final int TYPE_WIDGET_2X = 0; public static final int TYPE_WIDGET_4X = 1; /** * 数据常量类 * 定义不同类型数据的MIME类型 * MIME类型用于区分数据的类型,ContentProvider根据MIME类型返回不同的数据 */ public static class DataConstants { // 普通文本笔记的MIME类型 public static final String NOTE = TextNote.CONTENT_ITEM_TYPE; // 通话记录笔记的MIME类型 public static final String CALL_NOTE = CallNote.CONTENT_ITEM_TYPE; } // 笔记表的Content URI // 格式:content://micode_notes/note // 用于访问note表的所有记录 public static final Uri CONTENT_NOTE_URI = Uri.parse("content://" + AUTHORITY + "/note"); // 数据表的Content URI // 格式:content://micode_notes/data // 用于访问data表的所有记录 public static final Uri CONTENT_DATA_URI = Uri.parse("content://" + AUTHORITY + "/data"); /** * 笔记表列定义接口 * * note表存储笔记的基本信息,包括: * - 笔记ID、父文件夹ID * - 创建时间、修改时间、提醒时间 * - 内容摘要、背景颜色 * - Widget信息、附件信息 * - 笔记类型、同步信息 * * 该接口定义了note表的所有字段名 */ public interface NoteColumns { // 主键ID,自增 public static final String ID = "_id"; // 父文件夹ID,0表示根文件夹,负数表示系统文件夹 public static final String PARENT_ID = "parent_id"; // 创建时间,Unix时间戳(毫秒) public static final String CREATED_DATE = "created_date"; // 最后修改时间,Unix时间戳(毫秒) public static final String MODIFIED_DATE = "modified_date"; // 提醒时间,Unix时间戳(毫秒),0表示无提醒 public static final String ALERTED_DATE = "alert_date"; // 内容摘要,显示在列表中的预览文本 public static final String SNIPPET = "snippet"; // 桌面Widget ID,-1表示未添加到桌面 public static final String WIDGET_ID = "widget_id"; // 桌面Widget类型,0=2x2,1=4x4 public static final String WIDGET_TYPE = "widget_type"; // 背景颜色ID,用于设置笔记背景色 public static final String BG_COLOR_ID = "bg_color_id"; // 是否有附件,0=无,1=有 public static final String HAS_ATTACHMENT = "has_attachment"; // 包含的笔记数量(仅文件夹有效) public static final String NOTES_COUNT = "notes_count"; // 类型:0=笔记,1=文件夹,2=系统文件夹 public static final String TYPE = "type"; // Google Task同步ID,用于云端同步 public static final String SYNC_ID = "sync_id"; // 本地修改标记,0=未修改,1=已修改 public static final String LOCAL_MODIFIED = "local_modified"; // 原始父文件夹ID,用于同步时恢复文件夹结构 public static final String ORIGIN_PARENT_ID = "origin_parent_id"; // Google Task ID,用于与Google Tasks同步 public static final String GTASK_ID = "gtask_id"; // 版本号,用于冲突检测和同步 public static final String VERSION = "version"; } /** * 数据表列定义接口 * * data表存储笔记的具体内容,采用EAV(Entity-Attribute-Value)模型: * - 一条笔记可以有多个data记录(如标题、内容、附件等) * - 通过MIME_TYPE区分数据类型 * - 通过NOTE_ID关联到note表 * - DATA1-DATA5为扩展字段,不同类型数据有不同用途 * * 该接口定义了data表的所有字段名 */ public interface DataColumns { // 主键ID,自增 public static final String ID = "_id"; // MIME类型,区分数据类型(text_note、call_note等) public static final String MIME_TYPE = "mime_type"; // 所属笔记ID,外键关联note表 public static final String NOTE_ID = "note_id"; // 创建时间,Unix时间戳(毫秒) public static final String CREATED_DATE = "created_date"; // 最后修改时间,Unix时间戳(毫秒) public static final String MODIFIED_DATE = "modified_date"; // 内容文本,存储笔记的实际内容 public static final String CONTENT = "content"; // 扩展数据字段1(INTEGER类型) // TextNote: MODE(模式,如清单模式) // CallNote: CALL_DATE(通话日期) public static final String DATA1 = "data1"; // 扩展数据字段2(INTEGER类型) // 预留字段 public static final String DATA2 = "data2"; // 扩展数据字段3(TEXT类型) // CallNote: PHONE_NUMBER(电话号码) public static final String DATA3 = "data3"; // 扩展数据字段4(TEXT类型) // 预留字段 public static final String DATA4 = "data4"; // 扩展数据字段5(TEXT类型) // 预留字段 public static final String DATA5 = "data5"; } /** * 文本笔记类 * * 继承DataColumns,定义普通文本笔记的特有属性: * - MODE字段:笔记模式(普通模式、清单模式) * - MIME类型:用于ContentProvider识别数据类型 * - CONTENT_URI:访问文本笔记的URI * * 文本笔记是最常用的笔记类型,支持: * - 普通文本编辑 * - 清单模式(待办事项列表) */ public static final class TextNote implements DataColumns { // 模式字段,映射到DATA1 public static final String MODE = DATA1; // 清单模式标识 // MODE_CHECK_LIST=1: 清单模式(复选框列表) // MODE=0或其他: 普通文本模式 public static final int MODE_CHECK_LIST = 1; // MIME类型:文本笔记目录(多条记录) 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"; // 访问文本笔记的Content URI // 格式:content://micode_notes/text_note public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/text_note"); } /** * 通话笔记类 * * 继承DataColumns,定义通话记录笔记的特有属性: * - CALL_DATE字段:通话日期时间 * - PHONE_NUMBER字段:电话号码 * - MIME类型:用于ContentProvider识别数据类型 * - CONTENT_URI:访问通话笔记的URI * * 通话笔记是系统自动创建的笔记类型: * - 接听/拨打电话时自动创建 * - 记录通话时间和电话号码 * - 用户可以添加备注内容 */ public static final class CallNote implements DataColumns { // 通话日期字段,映射到DATA1 // 存储格式:Unix时间戳(毫秒) public static final String CALL_DATE = DATA1; // 电话号码字段,映射到DATA3 // 存储格式:字符串(如"13800138000") public static final String PHONE_NUMBER = DATA3; // MIME类型:通话笔记目录(多条记录) 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"; // 访问通话笔记的Content URI // 格式:content://micode_notes/call_note public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/call_note"); } }