|
|
/*
|
|
|
* 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");
|
|
|
}
|
|
|
}
|
|
|
|