|  |  |  | @ -15,6 +15,7 @@ | 
			
		
	
		
			
				
					|  |  |  |  |  */ | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | package net.micode.notes.model; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | import android.content.ContentProviderOperation; | 
			
		
	
		
			
				
					|  |  |  |  | import android.content.ContentProviderResult; | 
			
		
	
		
			
				
					|  |  |  |  | import android.content.ContentUris; | 
			
		
	
	
		
			
				
					|  |  |  | @ -33,95 +34,138 @@ import net.micode.notes.data.Notes.TextNote; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | import java.util.ArrayList; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | // 笔记类,用于管理笔记的创建、修改和同步
 | 
			
		
	
		
			
				
					|  |  |  |  | public class Note { | 
			
		
	
		
			
				
					|  |  |  |  |     private ContentValues mNoteDiffValues; | 
			
		
	
		
			
				
					|  |  |  |  |     private NoteData mNoteData; | 
			
		
	
		
			
				
					|  |  |  |  |     private static final String TAG = "Note"; | 
			
		
	
		
			
				
					|  |  |  |  |     private ContentValues mNoteDiffValues;  // 存储笔记的修改内容
 | 
			
		
	
		
			
				
					|  |  |  |  |     private NoteData mNoteData;            // 存储笔记的详细数据(文本/通话等)
 | 
			
		
	
		
			
				
					|  |  |  |  |     private static final String TAG = "Note"; // 日志标签
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     /** | 
			
		
	
		
			
				
					|  |  |  |  |      * Create a new note id for adding a new note to databases | 
			
		
	
		
			
				
					|  |  |  |  |      * 创建新笔记ID并插入数据库 | 
			
		
	
		
			
				
					|  |  |  |  |      * @param context 上下文对象 | 
			
		
	
		
			
				
					|  |  |  |  |      * @param folderId 父文件夹ID | 
			
		
	
		
			
				
					|  |  |  |  |      * @return 新创建的笔记ID | 
			
		
	
		
			
				
					|  |  |  |  |      */ | 
			
		
	
		
			
				
					|  |  |  |  |     public static synchronized long getNewNoteId(Context context, long folderId) { | 
			
		
	
		
			
				
					|  |  |  |  |         // Create a new note in the database
 | 
			
		
	
		
			
				
					|  |  |  |  |         // 创建新笔记并插入数据库
 | 
			
		
	
		
			
				
					|  |  |  |  |         ContentValues values = new ContentValues(); | 
			
		
	
		
			
				
					|  |  |  |  |         long createdTime = System.currentTimeMillis(); | 
			
		
	
		
			
				
					|  |  |  |  |         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); | 
			
		
	
		
			
				
					|  |  |  |  |         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);        // 父文件夹ID
 | 
			
		
	
		
			
				
					|  |  |  |  |         Uri uri = context.getContentResolver().insert(Notes.CONTENT_NOTE_URI, values); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         long noteId = 0; | 
			
		
	
		
			
				
					|  |  |  |  |         try { | 
			
		
	
		
			
				
					|  |  |  |  |             noteId = Long.valueOf(uri.getPathSegments().get(1)); | 
			
		
	
		
			
				
					|  |  |  |  |             noteId = Long.valueOf(uri.getPathSegments().get(1)); // 从URI中解析笔记ID
 | 
			
		
	
		
			
				
					|  |  |  |  |         } catch (NumberFormatException e) { | 
			
		
	
		
			
				
					|  |  |  |  |             Log.e(TAG, "Get note id error :" + e.toString()); | 
			
		
	
		
			
				
					|  |  |  |  |             Log.e(TAG, "获取笔记ID错误:" + e.toString()); | 
			
		
	
		
			
				
					|  |  |  |  |             noteId = 0; | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  |         if (noteId == -1) { | 
			
		
	
		
			
				
					|  |  |  |  |             throw new IllegalStateException("Wrong note id:" + noteId); | 
			
		
	
		
			
				
					|  |  |  |  |             throw new IllegalStateException("错误的笔记ID:" + noteId); | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  |         return noteId; | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     // 构造函数
 | 
			
		
	
		
			
				
					|  |  |  |  |     public Note() { | 
			
		
	
		
			
				
					|  |  |  |  |         mNoteDiffValues = new ContentValues(); | 
			
		
	
		
			
				
					|  |  |  |  |         mNoteData = new NoteData(); | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     /** | 
			
		
	
		
			
				
					|  |  |  |  |      * 设置笔记属性值 | 
			
		
	
		
			
				
					|  |  |  |  |      * @param key 属性键 | 
			
		
	
		
			
				
					|  |  |  |  |      * @param value 属性值 | 
			
		
	
		
			
				
					|  |  |  |  |      */ | 
			
		
	
		
			
				
					|  |  |  |  |     public void setNoteValue(String key, String value) { | 
			
		
	
		
			
				
					|  |  |  |  |         mNoteDiffValues.put(key, value); | 
			
		
	
		
			
				
					|  |  |  |  |         mNoteDiffValues.put(NoteColumns.LOCAL_MODIFIED, 1); | 
			
		
	
		
			
				
					|  |  |  |  |         mNoteDiffValues.put(NoteColumns.MODIFIED_DATE, System.currentTimeMillis()); | 
			
		
	
		
			
				
					|  |  |  |  |         mNoteDiffValues.put(NoteColumns.LOCAL_MODIFIED, 1);  // 标记为本地修改
 | 
			
		
	
		
			
				
					|  |  |  |  |         mNoteDiffValues.put(NoteColumns.MODIFIED_DATE, System.currentTimeMillis()); // 更新修改时间
 | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     /** | 
			
		
	
		
			
				
					|  |  |  |  |      * 设置文本数据 | 
			
		
	
		
			
				
					|  |  |  |  |      * @param key 数据键 | 
			
		
	
		
			
				
					|  |  |  |  |      * @param value 数据值 | 
			
		
	
		
			
				
					|  |  |  |  |      */ | 
			
		
	
		
			
				
					|  |  |  |  |     public void setTextData(String key, String value) { | 
			
		
	
		
			
				
					|  |  |  |  |         mNoteData.setTextData(key, value); | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     /** | 
			
		
	
		
			
				
					|  |  |  |  |      * 设置文本数据ID | 
			
		
	
		
			
				
					|  |  |  |  |      * @param id 数据ID | 
			
		
	
		
			
				
					|  |  |  |  |      */ | 
			
		
	
		
			
				
					|  |  |  |  |     public void setTextDataId(long id) { | 
			
		
	
		
			
				
					|  |  |  |  |         mNoteData.setTextDataId(id); | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     /** | 
			
		
	
		
			
				
					|  |  |  |  |      * 获取文本数据ID | 
			
		
	
		
			
				
					|  |  |  |  |      * @return 文本数据ID | 
			
		
	
		
			
				
					|  |  |  |  |      */ | 
			
		
	
		
			
				
					|  |  |  |  |     public long getTextDataId() { | 
			
		
	
		
			
				
					|  |  |  |  |         return mNoteData.mTextDataId; | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     /** | 
			
		
	
		
			
				
					|  |  |  |  |      * 设置通话数据ID | 
			
		
	
		
			
				
					|  |  |  |  |      * @param id 数据ID | 
			
		
	
		
			
				
					|  |  |  |  |      */ | 
			
		
	
		
			
				
					|  |  |  |  |     public void setCallDataId(long id) { | 
			
		
	
		
			
				
					|  |  |  |  |         mNoteData.setCallDataId(id); | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     /** | 
			
		
	
		
			
				
					|  |  |  |  |      * 设置通话数据 | 
			
		
	
		
			
				
					|  |  |  |  |      * @param key 数据键 | 
			
		
	
		
			
				
					|  |  |  |  |      * @param value 数据值 | 
			
		
	
		
			
				
					|  |  |  |  |      */ | 
			
		
	
		
			
				
					|  |  |  |  |     public void setCallData(String key, String value) { | 
			
		
	
		
			
				
					|  |  |  |  |         mNoteData.setCallData(key, value); | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     /** | 
			
		
	
		
			
				
					|  |  |  |  |      * 检查是否有本地修改 | 
			
		
	
		
			
				
					|  |  |  |  |      * @return 是否有修改 | 
			
		
	
		
			
				
					|  |  |  |  |      */ | 
			
		
	
		
			
				
					|  |  |  |  |     public boolean isLocalModified() { | 
			
		
	
		
			
				
					|  |  |  |  |         return mNoteDiffValues.size() > 0 || mNoteData.isLocalModified(); | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     /** | 
			
		
	
		
			
				
					|  |  |  |  |      * 同步笔记到数据库 | 
			
		
	
		
			
				
					|  |  |  |  |      * @param context 上下文对象 | 
			
		
	
		
			
				
					|  |  |  |  |      * @param noteId 笔记ID | 
			
		
	
		
			
				
					|  |  |  |  |      * @return 是否同步成功 | 
			
		
	
		
			
				
					|  |  |  |  |      */ | 
			
		
	
		
			
				
					|  |  |  |  |     public boolean syncNote(Context context, long noteId) { | 
			
		
	
		
			
				
					|  |  |  |  |         if (noteId <= 0) { | 
			
		
	
		
			
				
					|  |  |  |  |             throw new IllegalArgumentException("Wrong note id:" + noteId); | 
			
		
	
		
			
				
					|  |  |  |  |             throw new IllegalArgumentException("错误的笔记ID:" + noteId); | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         // 如果没有本地修改,直接返回成功
 | 
			
		
	
		
			
				
					|  |  |  |  |         if (!isLocalModified()) { | 
			
		
	
		
			
				
					|  |  |  |  |             return true; | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         /** | 
			
		
	
		
			
				
					|  |  |  |  |          * In theory, once data changed, the note should be updated on {@link NoteColumns#LOCAL_MODIFIED} and | 
			
		
	
		
			
				
					|  |  |  |  |          * {@link NoteColumns#MODIFIED_DATE}. For data safety, though update note fails, we also update the | 
			
		
	
		
			
				
					|  |  |  |  |          * note data info | 
			
		
	
		
			
				
					|  |  |  |  |         /* | 
			
		
	
		
			
				
					|  |  |  |  |          * 理论上,只要数据有变化,就应该更新笔记的修改时间和本地修改标记 | 
			
		
	
		
			
				
					|  |  |  |  |          * 即使更新笔记失败,我们也会继续更新笔记数据 | 
			
		
	
		
			
				
					|  |  |  |  |          */ | 
			
		
	
		
			
				
					|  |  |  |  |         if (context.getContentResolver().update( | 
			
		
	
		
			
				
					|  |  |  |  |                 ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, noteId), mNoteDiffValues, null, | 
			
		
	
		
			
				
					|  |  |  |  |                 null) == 0) { | 
			
		
	
		
			
				
					|  |  |  |  |             Log.e(TAG, "Update note error, should not happen"); | 
			
		
	
		
			
				
					|  |  |  |  |             // Do not return, fall through
 | 
			
		
	
		
			
				
					|  |  |  |  |             Log.e(TAG, "更新笔记错误,不应该发生"); | 
			
		
	
		
			
				
					|  |  |  |  |             // 不返回,继续执行
 | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  |         mNoteDiffValues.clear(); | 
			
		
	
		
			
				
					|  |  |  |  |         mNoteDiffValues.clear(); // 清空修改内容
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         // 同步笔记数据
 | 
			
		
	
		
			
				
					|  |  |  |  |         if (mNoteData.isLocalModified() | 
			
		
	
		
			
				
					|  |  |  |  |                 && (mNoteData.pushIntoContentResolver(context, noteId) == null)) { | 
			
		
	
		
			
				
					|  |  |  |  |             return false; | 
			
		
	
	
		
			
				
					|  |  |  | @ -130,16 +174,13 @@ public class Note { | 
			
		
	
		
			
				
					|  |  |  |  |         return true; | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     // 笔记数据内部类,管理文本和通话数据
 | 
			
		
	
		
			
				
					|  |  |  |  |     private class NoteData { | 
			
		
	
		
			
				
					|  |  |  |  |         private long mTextDataId; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         private ContentValues mTextDataValues; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         private long mCallDataId; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         private ContentValues mCallDataValues; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         private static final String TAG = "NoteData"; | 
			
		
	
		
			
				
					|  |  |  |  |         private long mTextDataId;        // 文本数据ID
 | 
			
		
	
		
			
				
					|  |  |  |  |         private ContentValues mTextDataValues; // 文本数据内容
 | 
			
		
	
		
			
				
					|  |  |  |  |         private long mCallDataId;        // 通话数据ID
 | 
			
		
	
		
			
				
					|  |  |  |  |         private ContentValues mCallDataValues; // 通话数据内容
 | 
			
		
	
		
			
				
					|  |  |  |  |         private static final String TAG = "NoteData"; // 日志标签
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         public NoteData() { | 
			
		
	
		
			
				
					|  |  |  |  |             mTextDataValues = new ContentValues(); | 
			
		
	
	
		
			
				
					|  |  |  | @ -148,91 +189,103 @@ public class Note { | 
			
		
	
		
			
				
					|  |  |  |  |             mCallDataId = 0; | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         // 检查是否有本地修改
 | 
			
		
	
		
			
				
					|  |  |  |  |         boolean isLocalModified() { | 
			
		
	
		
			
				
					|  |  |  |  |             return mTextDataValues.size() > 0 || mCallDataValues.size() > 0; | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         // 设置文本数据ID
 | 
			
		
	
		
			
				
					|  |  |  |  |         void setTextDataId(long id) { | 
			
		
	
		
			
				
					|  |  |  |  |             if(id <= 0) { | 
			
		
	
		
			
				
					|  |  |  |  |                 throw new IllegalArgumentException("Text data id should larger than 0"); | 
			
		
	
		
			
				
					|  |  |  |  |                 throw new IllegalArgumentException("文本数据ID必须大于0"); | 
			
		
	
		
			
				
					|  |  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  |  |             mTextDataId = id; | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         // 设置通话数据ID
 | 
			
		
	
		
			
				
					|  |  |  |  |         void setCallDataId(long id) { | 
			
		
	
		
			
				
					|  |  |  |  |             if (id <= 0) { | 
			
		
	
		
			
				
					|  |  |  |  |                 throw new IllegalArgumentException("Call data id should larger than 0"); | 
			
		
	
		
			
				
					|  |  |  |  |                 throw new IllegalArgumentException("通话数据ID必须大于0"); | 
			
		
	
		
			
				
					|  |  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  |  |             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()); | 
			
		
	
		
			
				
					|  |  |  |  |             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()); | 
			
		
	
		
			
				
					|  |  |  |  |             mNoteDiffValues.put(NoteColumns.LOCAL_MODIFIED, 1);  // 标记为本地修改
 | 
			
		
	
		
			
				
					|  |  |  |  |             mNoteDiffValues.put(NoteColumns.MODIFIED_DATE, System.currentTimeMillis()); // 更新修改时间
 | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         /** | 
			
		
	
		
			
				
					|  |  |  |  |          * 将数据提交到内容提供器 | 
			
		
	
		
			
				
					|  |  |  |  |          * @param context 上下文对象 | 
			
		
	
		
			
				
					|  |  |  |  |          * @param noteId 笔记ID | 
			
		
	
		
			
				
					|  |  |  |  |          * @return 操作结果的Uri | 
			
		
	
		
			
				
					|  |  |  |  |          */ | 
			
		
	
		
			
				
					|  |  |  |  |         Uri pushIntoContentResolver(Context context, long noteId) { | 
			
		
	
		
			
				
					|  |  |  |  |             /** | 
			
		
	
		
			
				
					|  |  |  |  |              * Check for safety | 
			
		
	
		
			
				
					|  |  |  |  |              */ | 
			
		
	
		
			
				
					|  |  |  |  |             // 安全检查
 | 
			
		
	
		
			
				
					|  |  |  |  |             if (noteId <= 0) { | 
			
		
	
		
			
				
					|  |  |  |  |                 throw new IllegalArgumentException("Wrong note id:" + noteId); | 
			
		
	
		
			
				
					|  |  |  |  |                 throw new IllegalArgumentException("错误的笔记ID:" + noteId); | 
			
		
	
		
			
				
					|  |  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |             ArrayList<ContentProviderOperation> operationList = new ArrayList<ContentProviderOperation>(); | 
			
		
	
		
			
				
					|  |  |  |  |             ContentProviderOperation.Builder builder = null; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |             // 处理文本数据
 | 
			
		
	
		
			
				
					|  |  |  |  |             if(mTextDataValues.size() > 0) { | 
			
		
	
		
			
				
					|  |  |  |  |                 mTextDataValues.put(DataColumns.NOTE_ID, noteId); | 
			
		
	
		
			
				
					|  |  |  |  |                 if (mTextDataId == 0) { | 
			
		
	
		
			
				
					|  |  |  |  |                     mTextDataValues.put(DataColumns.MIME_TYPE, TextNote.CONTENT_ITEM_TYPE); | 
			
		
	
		
			
				
					|  |  |  |  |                 mTextDataValues.put(DataColumns.NOTE_ID, noteId); // 关联笔记ID
 | 
			
		
	
		
			
				
					|  |  |  |  |                 if (mTextDataId == 0) { // 新增数据
 | 
			
		
	
		
			
				
					|  |  |  |  |                     mTextDataValues.put(DataColumns.MIME_TYPE, TextNote.CONTENT_ITEM_TYPE); // 设置MIME类型
 | 
			
		
	
		
			
				
					|  |  |  |  |                     Uri uri = context.getContentResolver().insert(Notes.CONTENT_DATA_URI, | 
			
		
	
		
			
				
					|  |  |  |  |                             mTextDataValues); | 
			
		
	
		
			
				
					|  |  |  |  |                     try { | 
			
		
	
		
			
				
					|  |  |  |  |                         setTextDataId(Long.valueOf(uri.getPathSegments().get(1))); | 
			
		
	
		
			
				
					|  |  |  |  |                         setTextDataId(Long.valueOf(uri.getPathSegments().get(1))); // 从URI获取ID
 | 
			
		
	
		
			
				
					|  |  |  |  |                     } catch (NumberFormatException e) { | 
			
		
	
		
			
				
					|  |  |  |  |                         Log.e(TAG, "Insert new text data fail with noteId" + noteId); | 
			
		
	
		
			
				
					|  |  |  |  |                         Log.e(TAG, "插入新文本数据失败,笔记ID:" + noteId); | 
			
		
	
		
			
				
					|  |  |  |  |                         mTextDataValues.clear(); | 
			
		
	
		
			
				
					|  |  |  |  |                         return null; | 
			
		
	
		
			
				
					|  |  |  |  |                     } | 
			
		
	
		
			
				
					|  |  |  |  |                 } else { | 
			
		
	
		
			
				
					|  |  |  |  |                 } else { // 更新现有数据
 | 
			
		
	
		
			
				
					|  |  |  |  |                     builder = ContentProviderOperation.newUpdate(ContentUris.withAppendedId( | 
			
		
	
		
			
				
					|  |  |  |  |                             Notes.CONTENT_DATA_URI, mTextDataId)); | 
			
		
	
		
			
				
					|  |  |  |  |                     builder.withValues(mTextDataValues); | 
			
		
	
		
			
				
					|  |  |  |  |                     operationList.add(builder.build()); | 
			
		
	
		
			
				
					|  |  |  |  |                 } | 
			
		
	
		
			
				
					|  |  |  |  |                 mTextDataValues.clear(); | 
			
		
	
		
			
				
					|  |  |  |  |                 mTextDataValues.clear(); // 清空数据
 | 
			
		
	
		
			
				
					|  |  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |             // 处理通话数据
 | 
			
		
	
		
			
				
					|  |  |  |  |             if(mCallDataValues.size() > 0) { | 
			
		
	
		
			
				
					|  |  |  |  |                 mCallDataValues.put(DataColumns.NOTE_ID, noteId); | 
			
		
	
		
			
				
					|  |  |  |  |                 if (mCallDataId == 0) { | 
			
		
	
		
			
				
					|  |  |  |  |                     mCallDataValues.put(DataColumns.MIME_TYPE, CallNote.CONTENT_ITEM_TYPE); | 
			
		
	
		
			
				
					|  |  |  |  |                 mCallDataValues.put(DataColumns.NOTE_ID, noteId); // 关联笔记ID
 | 
			
		
	
		
			
				
					|  |  |  |  |                 if (mCallDataId == 0) { // 新增数据
 | 
			
		
	
		
			
				
					|  |  |  |  |                     mCallDataValues.put(DataColumns.MIME_TYPE, CallNote.CONTENT_ITEM_TYPE); // 设置MIME类型
 | 
			
		
	
		
			
				
					|  |  |  |  |                     Uri uri = context.getContentResolver().insert(Notes.CONTENT_DATA_URI, | 
			
		
	
		
			
				
					|  |  |  |  |                             mCallDataValues); | 
			
		
	
		
			
				
					|  |  |  |  |                     try { | 
			
		
	
		
			
				
					|  |  |  |  |                         setCallDataId(Long.valueOf(uri.getPathSegments().get(1))); | 
			
		
	
		
			
				
					|  |  |  |  |                         setCallDataId(Long.valueOf(uri.getPathSegments().get(1))); // 从URI获取ID
 | 
			
		
	
		
			
				
					|  |  |  |  |                     } catch (NumberFormatException e) { | 
			
		
	
		
			
				
					|  |  |  |  |                         Log.e(TAG, "Insert new call data fail with noteId" + noteId); | 
			
		
	
		
			
				
					|  |  |  |  |                         Log.e(TAG, "插入新通话数据失败,笔记ID:" + noteId); | 
			
		
	
		
			
				
					|  |  |  |  |                         mCallDataValues.clear(); | 
			
		
	
		
			
				
					|  |  |  |  |                         return null; | 
			
		
	
		
			
				
					|  |  |  |  |                     } | 
			
		
	
		
			
				
					|  |  |  |  |                 } else { | 
			
		
	
		
			
				
					|  |  |  |  |                 } else { // 更新现有数据
 | 
			
		
	
		
			
				
					|  |  |  |  |                     builder = ContentProviderOperation.newUpdate(ContentUris.withAppendedId( | 
			
		
	
		
			
				
					|  |  |  |  |                             Notes.CONTENT_DATA_URI, mCallDataId)); | 
			
		
	
		
			
				
					|  |  |  |  |                     builder.withValues(mCallDataValues); | 
			
		
	
		
			
				
					|  |  |  |  |                     operationList.add(builder.build()); | 
			
		
	
		
			
				
					|  |  |  |  |                 } | 
			
		
	
		
			
				
					|  |  |  |  |                 mCallDataValues.clear(); | 
			
		
	
		
			
				
					|  |  |  |  |                 mCallDataValues.clear(); // 清空数据
 | 
			
		
	
		
			
				
					|  |  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |             // 批量执行操作
 | 
			
		
	
		
			
				
					|  |  |  |  |             if (operationList.size() > 0) { | 
			
		
	
		
			
				
					|  |  |  |  |                 try { | 
			
		
	
		
			
				
					|  |  |  |  |                     ContentProviderResult[] results = context.getContentResolver().applyBatch( | 
			
		
	
	
		
			
				
					|  |  |  | @ -250,4 +303,4 @@ public class Note { | 
			
		
	
		
			
				
					|  |  |  |  |             return null; | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | } |