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.
test123/NoteItemData.java

225 lines
8.2 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.ui;/*声明类所在的包*/
import android.content.Context;
import android.database.Cursor;
import android.text.TextUtils; /*导入必要的 Android 库*/
import net.micode.notes.data.Contact;
import net.micode.notes.data.Notes;
import net.micode.notes.data.Notes.NoteColumns;
import net.micode.notes.tool.DataUtils; /*导入笔记应用相关的数据模型和工具类*/
public class NoteItemData {
static final String [] PROJECTION = new String [] {
NoteColumns.ID,
NoteColumns.ALERTED_DATE,
NoteColumns.BG_COLOR_ID,
NoteColumns.CREATED_DATE,
NoteColumns.HAS_ATTACHMENT,
NoteColumns.MODIFIED_DATE,
NoteColumns.NOTES_COUNT,
NoteColumns.PARENT_ID,
NoteColumns.SNIPPET,
NoteColumns.TYPE,
NoteColumns.WIDGET_ID,
NoteColumns.WIDGET_TYPE,
}; /*定义一个静态数组 PROJECTION包含了从数据库查询笔记时需要的所有列名*/
private static final int ID_COLUMN = 0;
private static final int ALERTED_DATE_COLUMN = 1;
private static final int BG_COLOR_ID_COLUMN = 2;
private static final int CREATED_DATE_COLUMN = 3;
private static final int HAS_ATTACHMENT_COLUMN = 4;
private static final int MODIFIED_DATE_COLUMN = 5;
private static final int NOTES_COUNT_COLUMN = 6;
private static final int PARENT_ID_COLUMN = 7;
private static final int SNIPPET_COLUMN = 8;
private static final int TYPE_COLUMN = 9;
private static final int WIDGET_ID_COLUMN = 10;
private static final int WIDGET_TYPE_COLUMN = 11; /*定义了查询结果中各列对应的索引值*/
private long mId;
private long mAlertDate;
private int mBgColorId;
private long mCreatedDate;
private boolean mHasAttachment;
private long mModifiedDate;
private int mNotesCount;
private long mParentId;
private String mSnippet;
private int mType;
private int mWidgetId;
private int mWidgetType;
private String mName;
private String mPhoneNumber; /*声明了类的成员变量,用于存储笔记的数据*/
private boolean mIsLastItem;
private boolean mIsFirstItem;
private boolean mIsOnlyOneItem;
private boolean mIsOneNoteFollowingFolder;
private boolean mIsMultiNotesFollowingFolder; /*声明了几个布尔类型的成员变量,用于标记笔记在列表中的位置关系*/
public NoteItemData(Context context, Cursor cursor) {
mId = cursor.getLong(ID_COLUMN);
mAlertDate = cursor.getLong(ALERTED_DATE_COLUMN);
mBgColorId = cursor.getInt(BG_COLOR_ID_COLUMN);
mCreatedDate = cursor.getLong(CREATED_DATE_COLUMN);
mHasAttachment = (cursor.getInt(HAS_ATTACHMENT_COLUMN) > 0) ? true : false;
mModifiedDate = cursor.getLong(MODIFIED_DATE_COLUMN);
mNotesCount = cursor.getInt(NOTES_COUNT_COLUMN);
mParentId = cursor.getLong(PARENT_ID_COLUMN);
mSnippet = cursor.getString(SNIPPET_COLUMN);
mSnippet = mSnippet.replace(NoteEditActivity.TAG_CHECKED, "").replace(
NoteEditActivity.TAG_UNCHECKED, "");
mType = cursor.getInt(TYPE_COLUMN);
mWidgetId = cursor.getInt(WIDGET_ID_COLUMN);
mWidgetType = cursor.getInt(WIDGET_TYPE_COLUMN);
mPhoneNumber = "";
if (mParentId == Notes.ID_CALL_RECORD_FOLDER) {
mPhoneNumber = DataUtils.getCallNumberByNoteId(context.getContentResolver(), mId);
if (!TextUtils.isEmpty(mPhoneNumber)) {
mName = Contact.getContact(context, mPhoneNumber);
if (mName == null) {
mName = mPhoneNumber;
}
}
}
if (mName == null) {
mName = "";
}
checkPostion(cursor);
} /*构造函数接收一个 Context 和一个 Cursor从 Cursor 中读取笔记的数据,并初始化成员变量*/
private void checkPostion(Cursor cursor) {
mIsLastItem = cursor.isLast() ? true : false;
mIsFirstItem = cursor.isFirst() ? true : false;
mIsOnlyOneItem = (cursor.getCount() == 1);
mIsMultiNotesFollowingFolder = false;
mIsOneNoteFollowingFolder = false;
if (mType == Notes.TYPE_NOTE && !mIsFirstItem) {
int position = cursor.getPosition();
if (cursor.moveToPrevious()) {
if (cursor.getInt(TYPE_COLUMN) == Notes.TYPE_FOLDER
|| cursor.getInt(TYPE_COLUMN) == Notes.TYPE_SYSTEM) {
if (cursor.getCount() > (position + 1)) {
mIsMultiNotesFollowingFolder = true;
} else {
mIsOneNoteFollowingFolder = true;
}
}
if (!cursor.moveToNext()) {
throw new IllegalStateException("cursor move to previous but can't move back");
}
}
}
} /*检查笔记在列表中的位置,并更新相应的位置标志*/
public boolean isOneFollowingFolder() {
return mIsOneNoteFollowingFolder;
} /*返回笔记是否是紧随其后的单个笔记*/
public boolean isMultiFollowingFolder() {
return mIsMultiNotesFollowingFolder;
} /*返回笔记是否是紧随其后的多个笔记之一*/
public boolean isLast() {
return mIsLastItem;
} /*返回笔记是否是列表中的最后一个*/
public String getCallName() {
return mName;
} /*返回与笔记关联的联系人姓名*/
public boolean isFirst() {
return mIsFirstItem;
} /*返回笔记是否是列表中的第一个*/
public boolean isSingle() {
return mIsOnlyOneItem;
} /*返回列表中是否只有一个笔记*/
public long getId() {
return mId;
} /*返回笔记的 ID*/
public long getAlertDate() {
return mAlertDate;
} /*返回笔记的提醒日期*/
public long getCreatedDate() {
return mCreatedDate;
} /*返回笔记的创建日期*/
public boolean hasAttachment() {
return mHasAttachment;
} /*返回笔记是否有附件*/
public long getModifiedDate() {
return mModifiedDate;
} /*返回笔记的最后修改日期*/
public int getBgColorId() {
return mBgColorId;
} /*返回笔记背景颜色的 ID*/
public long getParentId() {
return mParentId;
} /*返回笔记所属文件夹的 ID*/
public int getNotesCount() {
return mNotesCount;
} /*返回笔记的数量*/
public long getFolderId () {
return mParentId;
} /*返回笔记所属文件夹的 ID*/
public int getType() {
return mType;
} /*返回笔记的类型*/
public int getWidgetType() {
return mWidgetType;
} /*返回小部件的类型*/
public int getWidgetId() {
return mWidgetId;
} /*返回小部件的 ID*/
public String getSnippet() {
return mSnippet;
} /*返回笔记的摘要*/
public boolean hasAlert() {
return (mAlertDate > 0);
} /*返回笔记是否有提醒设置*/
public boolean isCallRecord() {
return (mParentId == Notes.ID_CALL_RECORD_FOLDER && !TextUtils.isEmpty(mPhoneNumber));
} /*返回笔记是否属于通话记录类型*/
public static int getNoteType(Cursor cursor) {
return cursor.getInt(TYPE_COLUMN);
} /*静态方法,从游标中获取笔记的类型*/
}