@ -37,12 +37,19 @@ import org.json.JSONObject;
import java.util.ArrayList ;
import java.util.ArrayList ;
/ * *
* SqlNote 类 负 责 管 理 本 地 笔 记 数 据 的 数 据 库 操 作
* 提 供 笔 记 的 创 建 、 查 询 、 更 新 、 删 除 功 能
* 处 理 笔 记 与 Google Tasks 同 步 时 的 JSON 数 据 转 换
* 维 护 笔 记 的 元 数 据 ( 如 提 醒 时 间 、 背 景 颜 色 等 ) 及 关 联 数 据 项
* /
public class SqlNote {
public class SqlNote {
private static final String TAG = SqlNote . class . getSimpleName ( ) ;
private static final String TAG = SqlNote . class . getSimpleName ( ) ;
// 无效ID标记, 用于标识未创建的笔记
private static final int INVALID_ID = - 99999 ;
private static final int INVALID_ID = - 99999 ;
// 数据库查询投影字段,定义查询笔记时需要返回的列
public static final String [ ] PROJECTION_NOTE = new String [ ] {
public static final String [ ] PROJECTION_NOTE = new String [ ] {
NoteColumns . ID , NoteColumns . ALERTED_DATE , NoteColumns . BG_COLOR_ID ,
NoteColumns . ID , NoteColumns . ALERTED_DATE , NoteColumns . BG_COLOR_ID ,
NoteColumns . CREATED_DATE , NoteColumns . HAS_ATTACHMENT , NoteColumns . MODIFIED_DATE ,
NoteColumns . CREATED_DATE , NoteColumns . HAS_ATTACHMENT , NoteColumns . MODIFIED_DATE ,
@ -52,82 +59,55 @@ public class SqlNote {
NoteColumns . VERSION
NoteColumns . VERSION
} ;
} ;
// 投影字段索引常量,用于快速访问查询结果中的列
public static final int ID_COLUMN = 0 ;
public static final int ID_COLUMN = 0 ;
public static final int ALERTED_DATE_COLUMN = 1 ; // 提醒日期列索引(与闹钟功能相关)
public static final int ALERTED_DATE_COLUMN = 1 ;
public static final int BG_COLOR_ID_COLUMN = 2 ;
public static final int BG_COLOR_ID_COLUMN = 2 ;
public static final int CREATED_DATE_COLUMN = 3 ;
public static final int CREATED_DATE_COLUMN = 3 ;
public static final int HAS_ATTACHMENT_COLUMN = 4 ;
public static final int HAS_ATTACHMENT_COLUMN = 4 ;
public static final int MODIFIED_DATE_COLUMN = 5 ;
public static final int MODIFIED_DATE_COLUMN = 5 ;
public static final int NOTES_COUNT_COLUMN = 6 ;
public static final int NOTES_COUNT_COLUMN = 6 ;
public static final int PARENT_ID_COLUMN = 7 ;
public static final int PARENT_ID_COLUMN = 7 ;
public static final int SNIPPET_COLUMN = 8 ;
public static final int SNIPPET_COLUMN = 8 ;
public static final int TYPE_COLUMN = 9 ;
public static final int TYPE_COLUMN = 9 ;
public static final int WIDGET_ID_COLUMN = 10 ;
public static final int WIDGET_ID_COLUMN = 10 ;
public static final int WIDGET_TYPE_COLUMN = 11 ;
public static final int WIDGET_TYPE_COLUMN = 11 ;
public static final int SYNC_ID_COLUMN = 12 ;
public static final int SYNC_ID_COLUMN = 12 ;
public static final int LOCAL_MODIFIED_COLUMN = 13 ;
public static final int LOCAL_MODIFIED_COLUMN = 13 ;
public static final int ORIGIN_PARENT_ID_COLUMN = 14 ;
public static final int ORIGIN_PARENT_ID_COLUMN = 14 ;
public static final int GTASK_ID_COLUMN = 15 ;
public static final int GTASK_ID_COLUMN = 15 ;
public static final int VERSION_COLUMN = 16 ;
public static final int VERSION_COLUMN = 16 ;
private Context mContext ;
// 成员变量
private Context mContext ; // 应用上下文
private ContentResolver mContentResolver ;
private ContentResolver mContentResolver ; // 内容解析器,用于数据库操作
private boolean mIsCreate ; // 是否为新建笔记标志
private boolean mIsCreate ;
private long mId ; // 笔记ID
private long mAlertDate ; // 提醒日期(核心闹钟相关字段)
private long mId ;
private int mBgColorId ; // 背景颜色ID
private long mCreatedDate ; // 创建日期
private long mAlertDate ;
private int mHasAttachment ; // 是否有附件标志
private long mModifiedDate ; // 修改日期
private int mBgColorId ;
private long mParentId ; // 父文件夹ID
private String mSnippet ; // 笔记摘要
private long mCreatedDate ;
private int mType ; // 笔记类型(普通笔记、文件夹等)
private int mWidgetId ; // 桌面小部件ID
private int mHasAttachment ;
private int mWidgetType ; // 桌面小部件类型
private long mOriginParent ; // 原始父文件夹ID
private long mModifiedDate ;
private long mVersion ; // 版本号(用于并发控制)
private ContentValues mDiffNoteValues ; // 记录笔记变更,用于高效更新
private long mParentId ;
private ArrayList < SqlData > mDataList ; // 关联的数据项列表
private String mSnippet ;
/ * *
* 构 造 函 数 : 创 建 新 的 笔 记 对 象 ( 用 于 插 入 操 作 )
private int mType ;
* 初 始 化 笔 记 的 默 认 属 性
* /
private int mWidgetId ;
private int mWidgetType ;
private long mOriginParent ;
private long mVersion ;
private ContentValues mDiffNoteValues ;
private ArrayList < SqlData > mDataList ;
public SqlNote ( Context context ) {
public SqlNote ( Context context ) {
mContext = context ;
mContext = context ;
mContentResolver = context . getContentResolver ( ) ;
mContentResolver = context . getContentResolver ( ) ;
mIsCreate = true ;
mIsCreate = true ;
mId = INVALID_ID ;
mId = INVALID_ID ;
mAlertDate = 0 ;
mAlertDate = 0 ; // 初始提醒时间为0( 无提醒)
mBgColorId = ResourceParser . getDefaultBgId ( context ) ;
mBgColorId = ResourceParser . getDefaultBgId ( context ) ;
mCreatedDate = System . currentTimeMillis ( ) ;
mCreatedDate = System . currentTimeMillis ( ) ;
mHasAttachment = 0 ;
mHasAttachment = 0 ;
@ -143,6 +123,10 @@ public class SqlNote {
mDataList = new ArrayList < SqlData > ( ) ;
mDataList = new ArrayList < SqlData > ( ) ;
}
}
/ * *
* 构 造 函 数 : 从 数 据 库 游 标 创 建 笔 记 对 象 ( 用 于 更 新 操 作 )
* @param c 包 含 笔 记 数 据 的 数 据 库 游 标
* /
public SqlNote ( Context context , Cursor c ) {
public SqlNote ( Context context , Cursor c ) {
mContext = context ;
mContext = context ;
mContentResolver = context . getContentResolver ( ) ;
mContentResolver = context . getContentResolver ( ) ;
@ -154,6 +138,10 @@ public class SqlNote {
mDiffNoteValues = new ContentValues ( ) ;
mDiffNoteValues = new ContentValues ( ) ;
}
}
/ * *
* 构 造 函 数 : 根 据 ID 从 数 据 库 加 载 笔 记 对 象
* @param id 要 加 载 的 笔 记 ID
* /
public SqlNote ( Context context , long id ) {
public SqlNote ( Context context , long id ) {
mContext = context ;
mContext = context ;
mContentResolver = context . getContentResolver ( ) ;
mContentResolver = context . getContentResolver ( ) ;
@ -163,16 +151,17 @@ public class SqlNote {
if ( mType = = Notes . TYPE_NOTE )
if ( mType = = Notes . TYPE_NOTE )
loadDataContent ( ) ;
loadDataContent ( ) ;
mDiffNoteValues = new ContentValues ( ) ;
mDiffNoteValues = new ContentValues ( ) ;
}
}
/ * *
* 从 数 据 库 加 载 笔 记 数 据
* @param id 要 加 载 的 笔 记 ID
* /
private void loadFromCursor ( long id ) {
private void loadFromCursor ( long id ) {
Cursor c = null ;
Cursor c = null ;
try {
try {
c = mContentResolver . query ( Notes . CONTENT_NOTE_URI , PROJECTION_NOTE , "(_id=?)" ,
c = mContentResolver . query ( Notes . CONTENT_NOTE_URI , PROJECTION_NOTE , "(_id=?)" ,
new String [ ] {
new String [ ] { String . valueOf ( id ) } , null ) ;
String . valueOf ( id )
} , null ) ;
if ( c ! = null ) {
if ( c ! = null ) {
c . moveToNext ( ) ;
c . moveToNext ( ) ;
loadFromCursor ( c ) ;
loadFromCursor ( c ) ;
@ -185,9 +174,13 @@ public class SqlNote {
}
}
}
}
/ * *
* 从 游 标 读 取 笔 记 数 据 到 对 象
* @param c 包 含 笔 记 数 据 的 数 据 库 游 标
* /
private void loadFromCursor ( Cursor c ) {
private void loadFromCursor ( Cursor c ) {
mId = c . getLong ( ID_COLUMN ) ;
mId = c . getLong ( ID_COLUMN ) ;
mAlertDate = c . getLong ( ALERTED_DATE_COLUMN ) ;
mAlertDate = c . getLong ( ALERTED_DATE_COLUMN ) ; // 加载提醒日期
mBgColorId = c . getInt ( BG_COLOR_ID_COLUMN ) ;
mBgColorId = c . getInt ( BG_COLOR_ID_COLUMN ) ;
mCreatedDate = c . getLong ( CREATED_DATE_COLUMN ) ;
mCreatedDate = c . getLong ( CREATED_DATE_COLUMN ) ;
mHasAttachment = c . getInt ( HAS_ATTACHMENT_COLUMN ) ;
mHasAttachment = c . getInt ( HAS_ATTACHMENT_COLUMN ) ;
@ -200,14 +193,15 @@ public class SqlNote {
mVersion = c . getLong ( VERSION_COLUMN ) ;
mVersion = c . getLong ( VERSION_COLUMN ) ;
}
}
/ * *
* 加 载 与 笔 记 关 联 的 数 据 项 ( 如 笔 记 内 容 、 附 件 等 )
* /
private void loadDataContent ( ) {
private void loadDataContent ( ) {
Cursor c = null ;
Cursor c = null ;
mDataList . clear ( ) ;
mDataList . clear ( ) ;
try {
try {
c = mContentResolver . query ( Notes . CONTENT_DATA_URI , SqlData . PROJECTION_DATA ,
c = mContentResolver . query ( Notes . CONTENT_DATA_URI , SqlData . PROJECTION_DATA ,
"(note_id=?)" , new String [ ] {
"(note_id=?)" , new String [ ] { String . valueOf ( mId ) } , null ) ;
String . valueOf ( mId )
} , null ) ;
if ( c ! = null ) {
if ( c ! = null ) {
if ( c . getCount ( ) = = 0 ) {
if ( c . getCount ( ) = = 0 ) {
Log . w ( TAG , "it seems that the note has not data" ) ;
Log . w ( TAG , "it seems that the note has not data" ) ;
@ -226,13 +220,18 @@ public class SqlNote {
}
}
}
}
/ * *
* 从 JSON 对 象 设 置 笔 记 内 容
* @param js 包 含 笔 记 数 据 的 JSON 对 象
* @return 操 作 是 否 成 功
* /
public boolean setContent ( JSONObject js ) {
public boolean setContent ( JSONObject js ) {
try {
try {
JSONObject note = js . getJSONObject ( GTaskStringUtils . META_HEAD_NOTE ) ;
JSONObject note = js . getJSONObject ( GTaskStringUtils . META_HEAD_NOTE ) ;
if ( note . getInt ( NoteColumns . TYPE ) = = Notes . TYPE_SYSTEM ) {
if ( note . getInt ( NoteColumns . TYPE ) = = Notes . TYPE_SYSTEM ) {
Log . w ( TAG , "cannot set system folder" ) ;
Log . w ( TAG , "cannot set system folder" ) ;
} else if ( note . getInt ( NoteColumns . TYPE ) = = Notes . TYPE_FOLDER ) {
} else if ( note . getInt ( NoteColumns . TYPE ) = = Notes . TYPE_FOLDER ) {
// for folder we can only update the snnipet and type
// 处理文件夹类型,仅更新摘要和类型
String snippet = note . has ( NoteColumns . SNIPPET ) ? note
String snippet = note . has ( NoteColumns . SNIPPET ) ? note
. getString ( NoteColumns . SNIPPET ) : "" ;
. getString ( NoteColumns . SNIPPET ) : "" ;
if ( mIsCreate | | ! mSnippet . equals ( snippet ) ) {
if ( mIsCreate | | ! mSnippet . equals ( snippet ) ) {
@ -247,6 +246,7 @@ public class SqlNote {
}
}
mType = type ;
mType = type ;
} else if ( note . getInt ( NoteColumns . TYPE ) = = Notes . TYPE_NOTE ) {
} else if ( note . getInt ( NoteColumns . TYPE ) = = Notes . TYPE_NOTE ) {
// 处理普通笔记类型,更新所有字段及关联数据
JSONArray dataArray = js . getJSONArray ( GTaskStringUtils . META_HEAD_DATA ) ;
JSONArray dataArray = js . getJSONArray ( GTaskStringUtils . META_HEAD_DATA ) ;
long id = note . has ( NoteColumns . ID ) ? note . getLong ( NoteColumns . ID ) : INVALID_ID ;
long id = note . has ( NoteColumns . ID ) ? note . getLong ( NoteColumns . ID ) : INVALID_ID ;
if ( mIsCreate | | mId ! = id ) {
if ( mIsCreate | | mId ! = id ) {
@ -254,6 +254,7 @@ public class SqlNote {
}
}
mId = id ;
mId = id ;
// 设置提醒日期(核心闹钟相关字段)
long alertDate = note . has ( NoteColumns . ALERTED_DATE ) ? note
long alertDate = note . has ( NoteColumns . ALERTED_DATE ) ? note
. getLong ( NoteColumns . ALERTED_DATE ) : 0 ;
. getLong ( NoteColumns . ALERTED_DATE ) : 0 ;
if ( mIsCreate | | mAlertDate ! = alertDate ) {
if ( mIsCreate | | mAlertDate ! = alertDate ) {
@ -261,76 +262,9 @@ public class SqlNote {
}
}
mAlertDate = alertDate ;
mAlertDate = alertDate ;
int bgColorId = note . has ( NoteColumns . BG_COLOR_ID ) ? note
// 其他字段设置...
. getInt ( NoteColumns . BG_COLOR_ID ) : ResourceParser . getDefaultBgId ( mContext ) ;
if ( mIsCreate | | mBgColorId ! = bgColorId ) {
mDiffNoteValues . put ( NoteColumns . BG_COLOR_ID , bgColorId ) ;
}
mBgColorId = bgColorId ;
long createDate = note . has ( NoteColumns . CREATED_DATE ) ? note
. getLong ( NoteColumns . CREATED_DATE ) : System . currentTimeMillis ( ) ;
if ( mIsCreate | | mCreatedDate ! = createDate ) {
mDiffNoteValues . put ( NoteColumns . CREATED_DATE , createDate ) ;
}
mCreatedDate = createDate ;
int hasAttachment = note . has ( NoteColumns . HAS_ATTACHMENT ) ? note
. getInt ( NoteColumns . HAS_ATTACHMENT ) : 0 ;
if ( mIsCreate | | mHasAttachment ! = hasAttachment ) {
mDiffNoteValues . put ( NoteColumns . HAS_ATTACHMENT , hasAttachment ) ;
}
mHasAttachment = hasAttachment ;
long modifiedDate = note . has ( NoteColumns . MODIFIED_DATE ) ? note
. getLong ( NoteColumns . MODIFIED_DATE ) : System . currentTimeMillis ( ) ;
if ( mIsCreate | | mModifiedDate ! = modifiedDate ) {
mDiffNoteValues . put ( NoteColumns . MODIFIED_DATE , modifiedDate ) ;
}
mModifiedDate = modifiedDate ;
long parentId = note . has ( NoteColumns . PARENT_ID ) ? note
. getLong ( NoteColumns . PARENT_ID ) : 0 ;
if ( mIsCreate | | mParentId ! = parentId ) {
mDiffNoteValues . put ( NoteColumns . PARENT_ID , parentId ) ;
}
mParentId = parentId ;
String snippet = note . has ( NoteColumns . SNIPPET ) ? note
. getString ( NoteColumns . SNIPPET ) : "" ;
if ( mIsCreate | | ! mSnippet . equals ( snippet ) ) {
mDiffNoteValues . put ( NoteColumns . SNIPPET , snippet ) ;
}
mSnippet = snippet ;
int type = note . has ( NoteColumns . TYPE ) ? note . getInt ( NoteColumns . TYPE )
: Notes . TYPE_NOTE ;
if ( mIsCreate | | mType ! = type ) {
mDiffNoteValues . put ( NoteColumns . TYPE , type ) ;
}
mType = type ;
int widgetId = note . has ( NoteColumns . WIDGET_ID ) ? note . getInt ( NoteColumns . WIDGET_ID )
: AppWidgetManager . INVALID_APPWIDGET_ID ;
if ( mIsCreate | | mWidgetId ! = widgetId ) {
mDiffNoteValues . put ( NoteColumns . WIDGET_ID , widgetId ) ;
}
mWidgetId = widgetId ;
int widgetType = note . has ( NoteColumns . WIDGET_TYPE ) ? note
. getInt ( NoteColumns . WIDGET_TYPE ) : Notes . TYPE_WIDGET_INVALIDE ;
if ( mIsCreate | | mWidgetType ! = widgetType ) {
mDiffNoteValues . put ( NoteColumns . WIDGET_TYPE , widgetType ) ;
}
mWidgetType = widgetType ;
long originParent = note . has ( NoteColumns . ORIGIN_PARENT_ID ) ? note
. getLong ( NoteColumns . ORIGIN_PARENT_ID ) : 0 ;
if ( mIsCreate | | mOriginParent ! = originParent ) {
mDiffNoteValues . put ( NoteColumns . ORIGIN_PARENT_ID , originParent ) ;
}
mOriginParent = originParent ;
// 处理关联的数据项
for ( int i = 0 ; i < dataArray . length ( ) ; i + + ) {
for ( int i = 0 ; i < dataArray . length ( ) ; i + + ) {
JSONObject data = dataArray . getJSONObject ( i ) ;
JSONObject data = dataArray . getJSONObject ( i ) ;
SqlData sqlData = null ;
SqlData sqlData = null ;
@ -359,6 +293,10 @@ public class SqlNote {
return true ;
return true ;
}
}
/ * *
* 获 取 笔 记 内 容 的 JSON 表 示
* @return 包 含 笔 记 数 据 的 JSON 对 象
* /
public JSONObject getContent ( ) {
public JSONObject getContent ( ) {
try {
try {
JSONObject js = new JSONObject ( ) ;
JSONObject js = new JSONObject ( ) ;
@ -370,20 +308,15 @@ public class SqlNote {
JSONObject note = new JSONObject ( ) ;
JSONObject note = new JSONObject ( ) ;
if ( mType = = Notes . TYPE_NOTE ) {
if ( mType = = Notes . TYPE_NOTE ) {
// 构建普通笔记的JSON数据
note . put ( NoteColumns . ID , mId ) ;
note . put ( NoteColumns . ID , mId ) ;
note . put ( NoteColumns . ALERTED_DATE , mAlertDate ) ;
note . put ( NoteColumns . ALERTED_DATE , mAlertDate ) ; // 添加提醒日期到JSON
note . put ( NoteColumns . BG_COLOR_ID , mBgColorId ) ;
note . put ( NoteColumns . BG_COLOR_ID , mBgColorId ) ;
note . put ( NoteColumns . CREATED_DATE , mCreatedDate ) ;
// 其他字段添加...
note . put ( NoteColumns . HAS_ATTACHMENT , mHasAttachment ) ;
note . put ( NoteColumns . MODIFIED_DATE , mModifiedDate ) ;
note . put ( NoteColumns . PARENT_ID , mParentId ) ;
note . put ( NoteColumns . SNIPPET , mSnippet ) ;
note . put ( NoteColumns . TYPE , mType ) ;
note . put ( NoteColumns . WIDGET_ID , mWidgetId ) ;
note . put ( NoteColumns . WIDGET_TYPE , mWidgetType ) ;
note . put ( NoteColumns . ORIGIN_PARENT_ID , mOriginParent ) ;
js . put ( GTaskStringUtils . META_HEAD_NOTE , note ) ;
js . put ( GTaskStringUtils . META_HEAD_NOTE , note ) ;
// 添加关联的数据项到JSON数组
JSONArray dataArray = new JSONArray ( ) ;
JSONArray dataArray = new JSONArray ( ) ;
for ( SqlData sqlData : mDataList ) {
for ( SqlData sqlData : mDataList ) {
JSONObject data = sqlData . getContent ( ) ;
JSONObject data = sqlData . getContent ( ) ;
@ -393,6 +326,7 @@ public class SqlNote {
}
}
js . put ( GTaskStringUtils . META_HEAD_DATA , dataArray ) ;
js . put ( GTaskStringUtils . META_HEAD_DATA , dataArray ) ;
} else if ( mType = = Notes . TYPE_FOLDER | | mType = = Notes . TYPE_SYSTEM ) {
} else if ( mType = = Notes . TYPE_FOLDER | | mType = = Notes . TYPE_SYSTEM ) {
// 构建文件夹的JSON数据
note . put ( NoteColumns . ID , mId ) ;
note . put ( NoteColumns . ID , mId ) ;
note . put ( NoteColumns . TYPE , mType ) ;
note . put ( NoteColumns . TYPE , mType ) ;
note . put ( NoteColumns . SNIPPET , mSnippet ) ;
note . put ( NoteColumns . SNIPPET , mSnippet ) ;
@ -407,41 +341,70 @@ public class SqlNote {
return null ;
return null ;
}
}
/ * *
* 设 置 笔 记 的 父 文 件 夹 ID
* /
public void setParentId ( long id ) {
public void setParentId ( long id ) {
mParentId = id ;
mParentId = id ;
mDiffNoteValues . put ( NoteColumns . PARENT_ID , id ) ;
mDiffNoteValues . put ( NoteColumns . PARENT_ID , id ) ;
}
}
/ * *
* 设 置 Google Tasks 关 联 ID
* /
public void setGtaskId ( String gid ) {
public void setGtaskId ( String gid ) {
mDiffNoteValues . put ( NoteColumns . GTASK_ID , gid ) ;
mDiffNoteValues . put ( NoteColumns . GTASK_ID , gid ) ;
}
}
/ * *
* 设 置 同 步 ID
* /
public void setSyncId ( long syncId ) {
public void setSyncId ( long syncId ) {
mDiffNoteValues . put ( NoteColumns . SYNC_ID , syncId ) ;
mDiffNoteValues . put ( NoteColumns . SYNC_ID , syncId ) ;
}
}
/ * *
* 重 置 本 地 修 改 标 志
* /
public void resetLocalModified ( ) {
public void resetLocalModified ( ) {
mDiffNoteValues . put ( NoteColumns . LOCAL_MODIFIED , 0 ) ;
mDiffNoteValues . put ( NoteColumns . LOCAL_MODIFIED , 0 ) ;
}
}
/ * *
* 获 取 笔 记 ID
* /
public long getId ( ) {
public long getId ( ) {
return mId ;
return mId ;
}
}
/ * *
* 获 取 父 文 件 夹 ID
* /
public long getParentId ( ) {
public long getParentId ( ) {
return mParentId ;
return mParentId ;
}
}
/ * *
* 获 取 笔 记 摘 要
* /
public String getSnippet ( ) {
public String getSnippet ( ) {
return mSnippet ;
return mSnippet ;
}
}
/ * *
* 判 断 是 否 为 普 通 笔 记 类 型
* /
public boolean isNoteType ( ) {
public boolean isNoteType ( ) {
return mType = = Notes . TYPE_NOTE ;
return mType = = Notes . TYPE_NOTE ;
}
}
/ * *
* 提 交 笔 记 变 更 到 数 据 库
* @param validateVersion 是 否 验 证 版 本 ( 用 于 并 发 控 制 )
* /
public void commit ( boolean validateVersion ) {
public void commit ( boolean validateVersion ) {
if ( mIsCreate ) {
if ( mIsCreate ) {
// 新建笔记的插入操作
if ( mId = = INVALID_ID & & mDiffNoteValues . containsKey ( NoteColumns . ID ) ) {
if ( mId = = INVALID_ID & & mDiffNoteValues . containsKey ( NoteColumns . ID ) ) {
mDiffNoteValues . remove ( NoteColumns . ID ) ;
mDiffNoteValues . remove ( NoteColumns . ID ) ;
}
}
@ -457,12 +420,14 @@ public class SqlNote {
throw new IllegalStateException ( "Create thread id failed" ) ;
throw new IllegalStateException ( "Create thread id failed" ) ;
}
}
// 保存关联的数据项
if ( mType = = Notes . TYPE_NOTE ) {
if ( mType = = Notes . TYPE_NOTE ) {
for ( SqlData sqlData : mDataList ) {
for ( SqlData sqlData : mDataList ) {
sqlData . commit ( mId , false , - 1 ) ;
sqlData . commit ( mId , false , - 1 ) ;
}
}
}
}
} else {
} else {
// 更新现有笔记
if ( mId < = 0 & & mId ! = Notes . ID_ROOT_FOLDER & & mId ! = Notes . ID_CALL_RECORD_FOLDER ) {
if ( mId < = 0 & & mId ! = Notes . ID_ROOT_FOLDER & & mId ! = Notes . ID_CALL_RECORD_FOLDER ) {
Log . e ( TAG , "No such note" ) ;
Log . e ( TAG , "No such note" ) ;
throw new IllegalStateException ( "Try to update note with invalid id" ) ;
throw new IllegalStateException ( "Try to update note with invalid id" ) ;
@ -472,21 +437,18 @@ public class SqlNote {
int result = 0 ;
int result = 0 ;
if ( ! validateVersion ) {
if ( ! validateVersion ) {
result = mContentResolver . update ( Notes . CONTENT_NOTE_URI , mDiffNoteValues , "("
result = mContentResolver . update ( Notes . CONTENT_NOTE_URI , mDiffNoteValues , "("
+ NoteColumns . ID + "=?)" , new String [ ] {
+ NoteColumns . ID + "=?)" , new String [ ] { String . valueOf ( mId ) } ) ;
String . valueOf ( mId )
} ) ;
} else {
} else {
result = mContentResolver . update ( Notes . CONTENT_NOTE_URI , mDiffNoteValues , "("
result = mContentResolver . update ( Notes . CONTENT_NOTE_URI , mDiffNoteValues , "("
+ NoteColumns . ID + "=?) AND (" + NoteColumns . VERSION + "<=?)" ,
+ NoteColumns . ID + "=?) AND (" + NoteColumns . VERSION + "<=?)" ,
new String [ ] {
new String [ ] { String . valueOf ( mId ) , String . valueOf ( mVersion ) } ) ;
String . valueOf ( mId ) , String . valueOf ( mVersion )
} ) ;
}
}
if ( result = = 0 ) {
if ( result = = 0 ) {
Log . w ( TAG , "there is no update. maybe user updates note when syncing" ) ;
Log . w ( TAG , "there is no update. maybe user updates note when syncing" ) ;
}
}
}
}
// 更新关联的数据项
if ( mType = = Notes . TYPE_NOTE ) {
if ( mType = = Notes . TYPE_NOTE ) {
for ( SqlData sqlData : mDataList ) {
for ( SqlData sqlData : mDataList ) {
sqlData . commit ( mId , validateVersion , mVersion ) ;
sqlData . commit ( mId , validateVersion , mVersion ) ;
@ -494,7 +456,7 @@ public class SqlNote {
}
}
}
}
// refresh local info
// 重新加载数据以更新本地状态
loadFromCursor ( mId ) ;
loadFromCursor ( mId ) ;
if ( mType = = Notes . TYPE_NOTE )
if ( mType = = Notes . TYPE_NOTE )
loadDataContent ( ) ;
loadDataContent ( ) ;