pull/18/head
STRIV1 2 years ago
parent 158a673006
commit af30a970a5

@ -1,4 +1,4 @@
/*su
/*
* Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net)
*
* Licensed under the Apache License, Version 2.0 (the "License");
@ -42,11 +42,11 @@ public class Note {
* Create a new note id for adding a new note to databases
*/
public static synchronized long getNewNoteId(Context context, long folderId) {
// Create a new note in the database
//为给定文件夹生成新的笔记ID
ContentValues values = new ContentValues();
long createdTime = System.currentTimeMillis();
values.put(NoteColumns.CREATED_DATE, createdTime);
values.put(NoteColumns.MODIFIED_DATE, createdTime);
values.put(NoteColumns.CREATED_DATE, createdTime);//创建日期
values.put(NoteColumns.MODIFIED_DATE, createdTime);//修改日期
values.put(NoteColumns.TYPE, Notes.TYPE_NOTE);
values.put(NoteColumns.LOCAL_MODIFIED, 1);
values.put(NoteColumns.PARENT_ID, folderId);
@ -71,6 +71,7 @@ public class Note {
}
public void setNoteValue(String key, String value) {
//此方法设置笔记的值,标记为本地修改
mNoteDiffValues.put(key, value);
mNoteDiffValues.put(NoteColumns.LOCAL_MODIFIED, 1);
mNoteDiffValues.put(NoteColumns.MODIFIED_DATE, System.currentTimeMillis());
@ -79,11 +80,12 @@ public class Note {
public void setTextData(String key, String value) {
mNoteData.setTextData(key, value);
}
//为笔记设置文本数据。
public void setTextDataId(long id) {
mNoteData.setTextDataId(id);
}
//setTextDataId、getTextDataId、setCallDataId、setCallData 这些方法处理与笔记相关的文本和通话信息的ID和数据的设置和获取。
public long getTextDataId() {
return mNoteData.mTextDataId;
}
@ -99,7 +101,7 @@ public class Note {
public boolean isLocalModified() {
return mNoteDiffValues.size() > 0 || mNoteData.isLocalModified();
}
//根据值和数据的差异检查笔记是否具有本地修改。
public boolean syncNote(Context context, long noteId) {
if (noteId <= 0) {
throw new IllegalArgumentException("Wrong note id:" + noteId);
@ -108,6 +110,8 @@ public class Note {
if (!isLocalModified()) {
return true;
}
//尝试将笔记与提供的上下文和笔记ID同步。
//如果笔记ID小于或等于0或者没有本地修改则返回true。
/**
* In theory, once data changed, the note should be updated on {@link NoteColumns#LOCAL_MODIFIED} and
@ -147,17 +151,19 @@ public class Note {
mTextDataId = 0;
mCallDataId = 0;
}
//初始化 mTextDataValues 和 mCallDataValues 为 ContentValues 对象,用于存储文本数据和通话数据。
//初始化 mTextDataId 和 mCallDataId 为 0。
boolean isLocalModified() {
return mTextDataValues.size() > 0 || mCallDataValues.size() > 0;
}
//检查文本或通话数据是否有本地修改
void setTextDataId(long id) {
if(id <= 0) {
throw new IllegalArgumentException("Text data id should larger than 0");
}
mTextDataId = id;
}
//设置文本数据的ID如果提供的ID小于等于0报告异常
void setCallDataId(long id) {
if (id <= 0) {
@ -165,52 +171,57 @@ public class Note {
}
mCallDataId = id;
}
//设置通话数据的键值对,并标记笔记为本地修改,更新修改日期
void setCallData(String key, String value) {
mCallDataValues.put(key, value);
mNoteDiffValues.put(NoteColumns.LOCAL_MODIFIED, 1);
mNoteDiffValues.put(NoteColumns.MODIFIED_DATE, System.currentTimeMillis());
}
//设置文本数据的键值对,并标记笔记为本地修改,更新修改日期
void setTextData(String key, String value) {
mTextDataValues.put(key, value);
mNoteDiffValues.put(NoteColumns.LOCAL_MODIFIED, 1);
mNoteDiffValues.put(NoteColumns.MODIFIED_DATE, System.currentTimeMillis());
}
//将数据推送到ContentResolver的方法
Uri pushIntoContentResolver(Context context, long noteId) {
/**
* Check for safety
*/
//检查noteID的有效性如果小于等于0抛出IllegalArgumentException
if (noteId <= 0) {
throw new IllegalArgumentException("Wrong note id:" + noteId);
}
//用于保存ContentProvider操作列表
ArrayList<ContentProviderOperation> operationList = new ArrayList<ContentProviderOperation>();
ContentProviderOperation.Builder builder = null;
//处理文本数据的操作
if(mTextDataValues.size() > 0) {
//设置文本数据的关联noteID
mTextDataValues.put(DataColumns.NOTE_ID, noteId);
// 如果mTextDataId为0表示需要插入新的文本数据
if (mTextDataId == 0) {
mTextDataValues.put(DataColumns.MIME_TYPE, TextNote.CONTENT_ITEM_TYPE);
//插入数据并获取新的Uri
Uri uri = context.getContentResolver().insert(Notes.CONTENT_DATA_URI,
mTextDataValues);
try {
// 解析Uri中的数据获取新插入数据的id并设置给mTextDataId
setTextDataId(Long.valueOf(uri.getPathSegments().get(1)));
} catch (NumberFormatException e) {
// 插入数据失败,记录错误日志并清空数据
Log.e(TAG, "Insert new text data fail with noteId" + noteId);
mTextDataValues.clear();
return null;
}
} else {
// mTextDataId不为0表示需要更新已存在的文本数据
builder = ContentProviderOperation.newUpdate(ContentUris.withAppendedId(
Notes.CONTENT_DATA_URI, mTextDataId));
builder.withValues(mTextDataValues);
operationList.add(builder.build());
}
// 清空文本数据,以便下一次使用
mTextDataValues.clear();
}
// 处理通话数据的操作,逻辑类似于文本数据
if(mCallDataValues.size() > 0) {
mCallDataValues.put(DataColumns.NOTE_ID, noteId);
if (mCallDataId == 0) {
@ -232,17 +243,20 @@ public class Note {
}
mCallDataValues.clear();
}
// 如果有待执行的操作将它们应用到ContentResolver
if (operationList.size() > 0) {
try {
ContentProviderResult[] results = context.getContentResolver().applyBatch(
Notes.AUTHORITY, operationList);
// 返回插入或更新后的笔记的Uri如果操作失败则返回null
return (results == null || results.length == 0 || results[0] == null) ? null
: ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, noteId);
} catch (RemoteException e) {
// 捕获远程异常并记录错误日志
Log.e(TAG, String.format("%s: %s", e.toString(), e.getMessage()));
return null;
} catch (OperationApplicationException e) {
// 捕获操作应用异常并记录错误日志
Log.e(TAG, String.format("%s: %s", e.toString(), e.getMessage()));
return null;
}
@ -251,3 +265,5 @@ public class Note {
}
}
}

Loading…
Cancel
Save