sue_branch
sue 3 months ago
parent 5a8c2841fa
commit e485a39d78

@ -24,24 +24,28 @@ import net.micode.notes.data.Contact;
import net.micode.notes.data.Notes; import net.micode.notes.data.Notes;
import net.micode.notes.data.Notes.NoteColumns; import net.micode.notes.data.Notes.NoteColumns;
import net.micode.notes.tool.DataUtils; import net.micode.notes.tool.DataUtils;
/**
* 便
* 便
*/
public class NoteItemData { public class NoteItemData {
// 数据库查询投影(指定需要查询的字段)
static final String [] PROJECTION = new String [] { static final String [] PROJECTION = new String [] {
NoteColumns.ID, NoteColumns.ID, // 便签ID
NoteColumns.ALERTED_DATE, NoteColumns.ALERTED_DATE, // 提醒日期
NoteColumns.BG_COLOR_ID, NoteColumns.BG_COLOR_ID, // 背景颜色ID
NoteColumns.CREATED_DATE, NoteColumns.CREATED_DATE, // 创建日期
NoteColumns.HAS_ATTACHMENT, NoteColumns.HAS_ATTACHMENT, // 是否有附件0/1
NoteColumns.MODIFIED_DATE, NoteColumns.MODIFIED_DATE, // 修改日期
NoteColumns.NOTES_COUNT, NoteColumns.NOTES_COUNT, // 子便签数量(用于文件夹类型)
NoteColumns.PARENT_ID, NoteColumns.PARENT_ID, // 父级ID文件夹ID或系统类型标识
NoteColumns.SNIPPET, NoteColumns.SNIPPET, // 便签摘要
NoteColumns.TYPE, NoteColumns.TYPE, // 便签类型(普通便签、文件夹等)
NoteColumns.WIDGET_ID, NoteColumns.WIDGET_ID, // 小部件ID
NoteColumns.WIDGET_TYPE, NoteColumns.WIDGET_TYPE, // 小部件类型
}; };
// 投影字段索引常量(提高代码可读性)
private static final int ID_COLUMN = 0; private static final int ID_COLUMN = 0;
private static final int ALERTED_DATE_COLUMN = 1; private static final int ALERTED_DATE_COLUMN = 1;
private static final int BG_COLOR_ID_COLUMN = 2; private static final int BG_COLOR_ID_COLUMN = 2;
@ -54,71 +58,88 @@ public class NoteItemData {
private static final int TYPE_COLUMN = 9; private static final int TYPE_COLUMN = 9;
private static final int WIDGET_ID_COLUMN = 10; private static final int WIDGET_ID_COLUMN = 10;
private static final int WIDGET_TYPE_COLUMN = 11; private static final int WIDGET_TYPE_COLUMN = 11;
// 便签基础属性
private long mId; private long mId; // 便签ID
private long mAlertDate; private long mAlertDate; // 提醒时间戳
private int mBgColorId; private int mBgColorId; // 背景颜色资源ID
private long mCreatedDate; private long mCreatedDate; // 创建时间戳
private boolean mHasAttachment; private boolean mHasAttachment; // 是否包含附件
private long mModifiedDate; private long mModifiedDate; // 修改时间戳
private int mNotesCount; private int mNotesCount; // 子便签数量(文件夹类型专用)
private long mParentId; private long mParentId; // 父级ID所属文件夹或系统类型标识
private String mSnippet; private String mSnippet; // 便签内容摘要
private int mType; private int mType; // 便签类型参考Notes.TYPE_*常量)
private int mWidgetId; private int mWidgetId; // 关联的小部件ID
private int mWidgetType; private int mWidgetType; // 小部件类型(如尺寸规格)
private String mName; // 通话记录相关属性(当父级为通话记录文件夹时)
private String mPhoneNumber; private String mName; // 联系人姓名
private String mPhoneNumber; // 电话号码
private boolean mIsLastItem; // 条目位置状态属性
private boolean mIsFirstItem; private boolean mIsLastItem;// 是否为数据集最后一条
private boolean mIsOnlyOneItem; private boolean mIsFirstItem;// 是否为数据集第一条
private boolean mIsOneNoteFollowingFolder; private boolean mIsOnlyOneItem;// 是否为数据集中唯一一条
private boolean mIsMultiNotesFollowingFolder; private boolean mIsOneNoteFollowingFolder;// 是否为文件夹后的单条便签
private boolean mIsMultiNotesFollowingFolder;// 是否为文件夹后的多条便签
/**
* Cursor便
* @param context
* @param cursor 便
*/
public NoteItemData(Context context, Cursor cursor) { public NoteItemData(Context context, Cursor cursor) {
// 读取基础字段
mId = cursor.getLong(ID_COLUMN); mId = cursor.getLong(ID_COLUMN);
mAlertDate = cursor.getLong(ALERTED_DATE_COLUMN); mAlertDate = cursor.getLong(ALERTED_DATE_COLUMN);
mBgColorId = cursor.getInt(BG_COLOR_ID_COLUMN); mBgColorId = cursor.getInt(BG_COLOR_ID_COLUMN);
mCreatedDate = cursor.getLong(CREATED_DATE_COLUMN); mCreatedDate = cursor.getLong(CREATED_DATE_COLUMN);
mHasAttachment = (cursor.getInt(HAS_ATTACHMENT_COLUMN) > 0) ? true : false; mHasAttachment = (cursor.getInt(HAS_ATTACHMENT_COLUMN) > 0) ? true : false;// 0转false非0转true
mModifiedDate = cursor.getLong(MODIFIED_DATE_COLUMN); mModifiedDate = cursor.getLong(MODIFIED_DATE_COLUMN);
mNotesCount = cursor.getInt(NOTES_COUNT_COLUMN); mNotesCount = cursor.getInt(NOTES_COUNT_COLUMN);
mParentId = cursor.getLong(PARENT_ID_COLUMN); mParentId = cursor.getLong(PARENT_ID_COLUMN);
mSnippet = cursor.getString(SNIPPET_COLUMN); mSnippet = cursor.getString(SNIPPET_COLUMN);
// 移除便签内容中的特殊标记(可能用于富文本格式)
mSnippet = mSnippet.replace(NoteEditActivity.TAG_CHECKED, "").replace( mSnippet = mSnippet.replace(NoteEditActivity.TAG_CHECKED, "").replace(
NoteEditActivity.TAG_UNCHECKED, ""); NoteEditActivity.TAG_UNCHECKED, "");
mType = cursor.getInt(TYPE_COLUMN); mType = cursor.getInt(TYPE_COLUMN);
mWidgetId = cursor.getInt(WIDGET_ID_COLUMN); mWidgetId = cursor.getInt(WIDGET_ID_COLUMN);
mWidgetType = cursor.getInt(WIDGET_TYPE_COLUMN); mWidgetType = cursor.getInt(WIDGET_TYPE_COLUMN);
// 处理通话记录特殊逻辑(父级为通话记录文件夹时)
mPhoneNumber = ""; mPhoneNumber = "";
if (mParentId == Notes.ID_CALL_RECORD_FOLDER) { if (mParentId == Notes.ID_CALL_RECORD_FOLDER) {
// 通过便签ID获取通话号码
mPhoneNumber = DataUtils.getCallNumberByNoteId(context.getContentResolver(), mId); mPhoneNumber = DataUtils.getCallNumberByNoteId(context.getContentResolver(), mId);
if (!TextUtils.isEmpty(mPhoneNumber)) { if (!TextUtils.isEmpty(mPhoneNumber)) {
// 根据电话号码查询联系人姓名
mName = Contact.getContact(context, mPhoneNumber); mName = Contact.getContact(context, mPhoneNumber);
// 若未找到联系人,使用电话号码作为名称
if (mName == null) { if (mName == null) {
mName = mPhoneNumber; mName = mPhoneNumber;
} }
} }
} }
// 确保名称非空
if (mName == null) { if (mName == null) {
mName = ""; mName = "";
} }
// 检查条目在数据集中的位置状态
checkPostion(cursor); checkPostion(cursor);
} }
/**
*
* @param cursor
*/
private void checkPostion(Cursor cursor) { private void checkPostion(Cursor cursor) {
// 基本位置状态
mIsLastItem = cursor.isLast() ? true : false; mIsLastItem = cursor.isLast() ? true : false;
mIsFirstItem = cursor.isFirst() ? true : false; mIsFirstItem = cursor.isFirst() ? true : false;
mIsOnlyOneItem = (cursor.getCount() == 1); mIsOnlyOneItem = (cursor.getCount() == 1);
mIsMultiNotesFollowingFolder = false; mIsMultiNotesFollowingFolder = false;
mIsOneNoteFollowingFolder = false; mIsOneNoteFollowingFolder = false;
// 处理普通便签跟随在文件夹后的情况
if (mType == Notes.TYPE_NOTE && !mIsFirstItem) { if (mType == Notes.TYPE_NOTE && !mIsFirstItem) {
int position = cursor.getPosition(); int position = cursor.getPosition();// 记录当前位置
if (cursor.moveToPrevious()) { if (cursor.moveToPrevious()) {
// 移动到前一条目
if (cursor.getInt(TYPE_COLUMN) == Notes.TYPE_FOLDER if (cursor.getInt(TYPE_COLUMN) == Notes.TYPE_FOLDER
|| cursor.getInt(TYPE_COLUMN) == Notes.TYPE_SYSTEM) { || cursor.getInt(TYPE_COLUMN) == Notes.TYPE_SYSTEM) {
if (cursor.getCount() > (position + 1)) { if (cursor.getCount() > (position + 1)) {
@ -133,7 +154,7 @@ public class NoteItemData {
} }
} }
} }
// -------------------- 状态查询方法 --------------------
public boolean isOneFollowingFolder() { public boolean isOneFollowingFolder() {
return mIsOneNoteFollowingFolder; return mIsOneNoteFollowingFolder;
} }
@ -217,7 +238,11 @@ public class NoteItemData {
public boolean isCallRecord() { public boolean isCallRecord() {
return (mParentId == Notes.ID_CALL_RECORD_FOLDER && !TextUtils.isEmpty(mPhoneNumber)); return (mParentId == Notes.ID_CALL_RECORD_FOLDER && !TextUtils.isEmpty(mPhoneNumber));
} }
/**
* Cursor便
* @param cursor
* @return 便Notes.TYPE_*
*/
public static int getNoteType(Cursor cursor) { public static int getNoteType(Cursor cursor) {
return cursor.getInt(TYPE_COLUMN); return cursor.getInt(TYPE_COLUMN);
} }

Loading…
Cancel
Save