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.
git/java/net/micode/notes/data/Notes.java

393 lines
15 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;
/**
* 笔记应用的核心数据常量类
* 该类集中定义了笔记应用的所有核心常量包括ContentProvider的授权名、数据URI、笔记/文件夹类型、系统文件夹ID、
* Intent传递的参数键、Widget类型、数据表列名、文本笔记/通话笔记的专属常量等
* 是整个应用数据交互ContentProvider、Intent传参、数据库操作的核心常量定义类采用静态常量和内部类/接口的方式组织,提高代码可读性和维护性
*
* @author MiCode Open Source Community
* @date 2010-2011
*/
public class Notes {
/**
* ContentProvider的授权名Authority是ContentProvider的唯一标识
* 用于ContentResolver访问应用的NotesProvidercontent://micode_notes/...
*/
public static final String AUTHORITY = "micode_notes";
/**
* 日志标签用于Logcat输出时标识当前类方便调试定位问题
*/
public static final String TAG = "Notes";
/**
* 数据类型常量:普通笔记类型
*/
public static final int TYPE_NOTE = 0;
/**
* 数据类型常量:文件夹类型
*/
public static final int TYPE_FOLDER = 1;
/**
* 数据类型常量:系统类型(系统文件夹/系统笔记)
*/
public static final int TYPE_SYSTEM = 2;
/**
* 以下是系统文件夹的唯一标识ID用于区分不同的系统预设文件夹
* {@link Notes#ID_ROOT_FOLDER }:根文件夹(默认文件夹)
* {@link Notes#ID_TEMPARAY_FOLDER }:临时文件夹(存放无归属的笔记)
* {@link Notes#ID_CALL_RECORD_FOLDER}:通话记录文件夹(专门存储通话记录笔记)
*/
// 根文件夹ID默认文件夹所有无指定文件夹的笔记默认归属此文件夹
public static final int ID_ROOT_FOLDER = 0;
// 临时文件夹ID存放临时、无归属的笔记
public static final int ID_TEMPARAY_FOLDER = -1;
// 通话记录文件夹ID专门存储通话记录类型的笔记
public static final int ID_CALL_RECORD_FOLDER = -2;
// 回收站文件夹ID已废弃用于兼容旧代码
public static final int ID_TRASH_FOLER = -3;
/**
* Intent传递参数的键常量笔记的提醒日期alert_date
*/
public static final String INTENT_EXTRA_ALERT_DATE = "net.micode.notes.alert_date";
/**
* Intent传递参数的键常量笔记的背景颜色IDbackground_color_id
*/
public static final String INTENT_EXTRA_BACKGROUND_ID = "net.micode.notes.background_color_id";
/**
* Intent传递参数的键常量Widget的IDwidget_id
*/
public static final String INTENT_EXTRA_WIDGET_ID = "net.micode.notes.widget_id";
/**
* Intent传递参数的键常量Widget的类型widget_type
*/
public static final String INTENT_EXTRA_WIDGET_TYPE = "net.micode.notes.widget_type";
/**
* Intent传递参数的键常量文件夹的IDfolder_id
*/
public static final String INTENT_EXTRA_FOLDER_ID = "net.micode.notes.folder_id";
/**
* Intent传递参数的键常量通话记录的日期call_date
*/
public static final String INTENT_EXTRA_CALL_DATE = "net.micode.notes.call_date";
/**
* Widget类型常量无效的Widget类型
*/
public static final int TYPE_WIDGET_INVALIDE = -1;
/**
* Widget类型常量2x2尺寸的笔记Widget
*/
public static final int TYPE_WIDGET_2X = 0;
/**
* Widget类型常量4x4尺寸的笔记Widget
*/
public static final int TYPE_WIDGET_4X = 1;
/**
* 数据类型常量内部类封装文本笔记和通话笔记的MIME类型常量
* 用于区分不同类型的笔记数据ContentProvider的MIME类型标识
*/
public static class DataConstants {
// 文本笔记的MIME类型对应TextNote的CONTENT_ITEM_TYPE
public static final String NOTE = TextNote.CONTENT_ITEM_TYPE;
// 通话笔记的MIME类型对应CallNote的CONTENT_ITEM_TYPE
public static final String CALL_NOTE = CallNote.CONTENT_ITEM_TYPE;
}
/**
* ContentProvider的URI常量用于查询所有笔记和文件夹的URI
* 格式content://micode_notes/note
*/
public static final Uri CONTENT_NOTE_URI = Uri.parse("content://" + AUTHORITY + "/note");
/**
* ContentProvider的URI常量用于查询笔记明细数据的URI
* 格式content://micode_notes/data
*/
public static final Uri CONTENT_DATA_URI = Uri.parse("content://" + AUTHORITY + "/data");
/**
* 笔记/文件夹表的列名接口
* 定义了note表中所有列的名称、数据类型和业务含义是数据库操作和ContentProvider查询的核心列名规范
*/
public interface NoteColumns {
/**
* 行的唯一ID主键
* <P> 数据类型: INTEGER (long) </P>
*/
public static final String ID = "_id";
/**
* 笔记/文件夹的父级ID用于关联文件夹和子笔记/子文件夹)
* <P> 数据类型: INTEGER (long) </P>
*/
public static final String PARENT_ID = "parent_id";
/**
* 笔记/文件夹的创建时间
* <P> 数据类型: INTEGER (long)(时间戳,毫秒) </P>
*/
public static final String CREATED_DATE = "created_date";
/**
* 笔记/文件夹的最后修改时间
* <P> 数据类型: INTEGER (long)(时间戳,毫秒) </P>
*/
public static final String MODIFIED_DATE = "modified_date";
/**
* 笔记的提醒时间(文件夹无此属性)
* <P> 数据类型: INTEGER (long)(时间戳,毫秒) </P>
*/
public static final String ALERTED_DATE = "alert_date";
/**
* 文件夹的名称 / 笔记的文本摘要(预览内容)
* <P> 数据类型: TEXT </P>
*/
public static final String SNIPPET = "snippet";
/**
* 笔记关联的Widget ID若笔记被添加到桌面Widget存储对应的Widget ID
* <P> 数据类型: INTEGER (long) </P>
*/
public static final String WIDGET_ID = "widget_id";
/**
* 笔记关联的Widget类型2x2/4x4对应TYPE_WIDGET_2X/TYPE_WIDGET_4X
* <P> 数据类型: INTEGER (long) </P>
*/
public static final String WIDGET_TYPE = "widget_type";
/**
* 笔记的背景颜色ID对应预设的背景颜色资源ID
* <P> 数据类型: INTEGER (long) </P>
*/
public static final String BG_COLOR_ID = "bg_color_id";
/**
* 笔记是否有附件(文本笔记无附件,多媒体笔记有附件)
* <P> 数据类型: INTEGER1有附件0无附件 </P>
*/
public static final String HAS_ATTACHMENT = "has_attachment";
/**
* 文件夹下的笔记数量(用于文件夹的数量统计)
* <P> 数据类型: INTEGER (long) </P>
*/
public static final String NOTES_COUNT = "notes_count";
/**
* 数据类型(区分笔记/文件夹/系统类型对应TYPE_NOTE/TYPE_FOLDER/TYPE_SYSTEM
* <P> 数据类型: INTEGER </P>
*/
public static final String TYPE = "type";
/**
* 笔记是否置顶0不置顶1置顶
* <P> 数据类型: INTEGER </P>
*/
public static final String PINNED = "pinned";
/**
* 最后一次同步的ID用于GTask同步标记同步状态
* <P> 数据类型: INTEGER (long) </P>
*/
public static final String SYNC_ID = "sync_id";
/**
* 本地修改标记(标记数据是否在本地被修改,需要同步到远程/GTask
* <P> 数据类型: INTEGER1已修改0未修改 </P>
*/
public static final String LOCAL_MODIFIED = "local_modified";
/**
* 移动到临时文件夹前的原始父级ID用于恢复笔记的原始归属文件夹
* <P> 数据类型: INTEGER (long) </P>
*/
public static final String ORIGIN_PARENT_ID = "origin_parent_id";
/**
* GTask的ID用于笔记与谷歌任务的同步关联
* <P> 数据类型: TEXT </P>
*/
public static final String GTASK_ID = "gtask_id";
/**
* 版本号(用于数据同步时的版本控制,避免数据冲突)
* <P> 数据类型: INTEGER (long) </P>
*/
public static final String VERSION = "version";
}
/**
* 笔记明细数据表的列名接口
* 定义了data表中所有列的名称、数据类型和业务含义data表存储笔记的具体内容文本、通话记录等
*/
public interface DataColumns {
/**
* 行的唯一ID主键
* <P> 数据类型: INTEGER (long) </P>
*/
public static final String ID = "_id";
/**
* 数据的MIME类型区分文本笔记/通话笔记对应TextNote/CALLNote的CONTENT_ITEM_TYPE
* <P> 数据类型: Text </P>
*/
public static final String MIME_TYPE = "mime_type";
/**
* 关联的笔记ID指向note表的_id建立data表与note表的关联
* <P> 数据类型: INTEGER (long) </P>
*/
public static final String NOTE_ID = "note_id";
/**
* 数据的创建时间
* <P> 数据类型: INTEGER (long)(时间戳,毫秒) </P>
*/
public static final String CREATED_DATE = "created_date";
/**
* 数据的最后修改时间
* <P> 数据类型: INTEGER (long)(时间戳,毫秒) </P>
*/
public static final String MODIFIED_DATE = "modified_date";
/**
* 数据的内容(文本笔记的文本内容、通话笔记的附件位置等)
* <P> 数据类型: TEXT </P>
*/
public static final String CONTENT = "content";
/**
* 通用数据列1含义由MIME_TYPE决定用于整型数据
* <P> 数据类型: INTEGER </P>
*/
public static final String DATA1 = "data1";
/**
* 通用数据列2含义由MIME_TYPE决定用于整型数据
* <P> 数据类型: INTEGER </P>
*/
public static final String DATA2 = "data2";
/**
* 通用数据列3含义由MIME_TYPE决定用于文本数据
* <P> 数据类型: TEXT </P>
*/
public static final String DATA3 = "data3";
/**
* 通用数据列4含义由MIME_TYPE决定用于文本数据
* <P> 数据类型: TEXT </P>
*/
public static final String DATA4 = "data4";
/**
* 通用数据列5含义由MIME_TYPE决定用于文本数据
* <P> 数据类型: TEXT </P>
*/
public static final String DATA5 = "data5";
}
/**
* 文本笔记的专属常量类实现DataColumns接口复用列名定义
* 定义了文本笔记的模式(普通/复选列表、MIME类型、ContentProvider URI等专属常量
*/
public static final class TextNote implements DataColumns {
/**
* 文本笔记的模式对应DATA1列标识是否为复选列表模式
* <P> 数据类型: Integer1复选列表模式0普通文本模式 </P>
*/
public static final String MODE = DATA1;
/**
* 文本笔记的模式常量:复选列表模式
*/
public static final int MODE_CHECK_LIST = 1;
/**
* 文本笔记的集合MIME类型对应ContentProvider的dir类型
* 格式vnd.android.cursor.dir/text_note
*/
public static final String CONTENT_TYPE = "vnd.android.cursor.dir/text_note";
/**
* 文本笔记的单个项目MIME类型对应ContentProvider的item类型
* 格式vnd.android.cursor.item/text_note
*/
public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/text_note";
/**
* 文本笔记的ContentProvider URI
* 格式content://micode_notes/text_note
*/
public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/text_note");
}
/**
* 通话记录笔记的专属常量类实现DataColumns接口复用列名定义
* 定义了通话笔记的通话日期、电话号码的列映射、MIME类型、ContentProvider URI等专属常量
*/
public static final class CallNote implements DataColumns {
/**
* 通话记录的日期对应DATA1列存储通话时间戳
* <P> 数据类型: INTEGER (long)(时间戳,毫秒) </P>
*/
public static final String CALL_DATE = DATA1;
/**
* 通话记录的电话号码对应DATA3列存储电话号码字符串
* <P> 数据类型: TEXT </P>
*/
public static final String PHONE_NUMBER = DATA3;
/**
* 通话笔记的集合MIME类型对应ContentProvider的dir类型
* 格式vnd.android.cursor.dir/call_note
*/
public static final String CONTENT_TYPE = "vnd.android.cursor.dir/call_note";
/**
* 通话笔记的单个项目MIME类型对应ContentProvider的item类型
* 格式vnd.android.cursor.item/call_note
*/
public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/call_note";
/**
* 通话笔记的ContentProvider URI
* 格式content://micode_notes/call_note
*/
public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/call_note");
}
}