You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
rjgc/Notes.java

298 lines
12 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

/*
* 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";
// 父文件夹ID0表示根文件夹负数表示系统文件夹
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=2x21=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表存储笔记的具体内容采用EAVEntity-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";
// 扩展数据字段1INTEGER类型
// TextNote: MODE模式如清单模式
// CallNote: CALL_DATE通话日期
public static final String DATA1 = "data1";
// 扩展数据字段2INTEGER类型
// 预留字段
public static final String DATA2 = "data2";
// 扩展数据字段3TEXT类型
// CallNote: PHONE_NUMBER电话号码
public static final String DATA3 = "data3";
// 扩展数据字段4TEXT类型
// 预留字段
public static final String DATA4 = "data4";
// 扩展数据字段5TEXT类型
// 预留字段
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");
}
}