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.
GPL_Project/doc/标注/210340061_林亭旭/NoteItemData.java

244 lines
8.4 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;
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,//备注列ID
NoteColumns.ALERTED_DATE,//提醒日期
NoteColumns.BG_COLOR_ID,//背景ID颜色
NoteColumns.CREATED_DATE,//创建数据
NoteColumns.HAS_ATTACHMENT, //具有附件
NoteColumns.MODIFIED_DATE,//修改数据
NoteColumns.NOTES_COUNT,//备注计数
NoteColumns.PARENT_ID,//家长ID
NoteColumns.SNIPPET,//片段
NoteColumns.TYPE,//类型
NoteColumns.WIDGET_ID,//部件ID
NoteColumns.WIDGET_TYPE,//部件类型
};
private static final int ID_COLUMN = 0;//ID列
private static final int ALERTED_DATE_COLUMN = 1;//警报日期列
private static final int BG_COLOR_ID_COLUMN = 2;//背景颜色ID列
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;//父ID列
private static final int SNIPPET_COLUMN = 8;//代码段列
private static final int TYPE_COLUMN = 9;//类型栏
private static final int WIDGET_ID_COLUMN = 10;//小部件ID列
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) //利用光标cursor获取数据初始化NoteItemData
{
mId = cursor.getLong(ID_COLUMN);
//将数据类型变为long类
mAlertDate = cursor.getLong(ALERTED_DATE_COLUMN);
//将数据类型变为long类
mBgColorId = cursor.getInt(BG_COLOR_ID_COLUMN);
//将数据类型变为int类
mCreatedDate = cursor.getLong(CREATED_DATE_COLUMN);
//将数据类型变为long类
mHasAttachment = (cursor.getInt(HAS_ATTACHMENT_COLUMN) > 0) ? true : false;
//对HAS_ATTACHMENT_COLUMN进行判0>0为ture否则为false
mModifiedDate = cursor.getLong(MODIFIED_DATE_COLUMN);
//将数据类型变为long类
mNotesCount = cursor.getInt(NOTES_COUNT_COLUMN);
//将数据类型变为int类
mParentId = cursor.getLong(PARENT_ID_COLUMN);
//将数据类型变为long类
mSnippet = cursor.getString(SNIPPET_COLUMN);
//将数据类型变为string类
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))//mphonenumber里有符合字符串则用contart功能连接
{
mName = Contact.getContact(context, mPhoneNumber);
if (mName == null)//如果用户姓名为空,则令姓名等于电话号
{
mName = mPhoneNumber;
}
}
}
if (mName == null)//若名字为空,则输入名字
{
mName = "";
}
checkPostion(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) {//若此时标记为note格式并且不为第一个元素
int position = cursor.getPosition();//用getPosition得到此时位置
if (cursor.moveToPrevious()) {//获取光标位置后,回溯至上一行,
if (cursor.getInt(TYPE_COLUMN) == Notes.TYPE_FOLDER
|| cursor.getInt(TYPE_COLUMN) == Notes.TYPE_SYSTEM) {//若光标满足系统格式或note格式
if (cursor.getCount() > (position + 1))//如果得到的步数大于地址+1
{
mIsMultiNotesFollowingFolder = true;//若是数据行数大于但前位置+1则设置成正确
} else {
mIsOneNoteFollowingFolder = true;//否则单一文件夹标记为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;
}
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;
}
public long getParentId() {
return mParentId;
}
public int getNotesCount() {
return mNotesCount;
}
public long getFolderId () {
return mParentId;
}
public int getType() {
return mType;
}
public int getWidgetType() {
return mWidgetType;
}
public int getWidgetId() {
return mWidgetId;
}
public String getSnippet() {
return mSnippet;
}
public boolean hasAlert() {
return (mAlertDate > 0);
}
//若数据父id为保存至文件夹模式的id且满足电话号码单元不为空则isCallRecord为true
public boolean isCallRecord() {
return (mParentId == Notes.ID_CALL_RECORD_FOLDER && !TextUtils.isEmpty(mPhoneNumber));
}
public static int getNoteType(Cursor cursor) {
return cursor.getInt(TYPE_COLUMN);
}
}