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.
526 lines
37 KiB
526 lines
37 KiB
<html>
|
|
<head>
|
|
<title>SqlNote.java</title>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
|
<style type="text/css">
|
|
.s0 { color: #8c8c8c; font-style: italic;}
|
|
.s1 { color: #080808;}
|
|
.s2 { color: #0033b3;}
|
|
.s3 { color: #1750eb;}
|
|
.s4 { color: #067d17;}
|
|
</style>
|
|
</head>
|
|
<body bgcolor="#ffffff">
|
|
<table CELLSPACING=0 CELLPADDING=5 COLS=1 WIDTH="100%" BGCOLOR="#c0c0c0" >
|
|
<tr><td><center>
|
|
<font face="Arial, Helvetica" color="#000000">
|
|
SqlNote.java</font>
|
|
</center></td></tr></table>
|
|
<pre><span class="s0">/*
|
|
* 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.
|
|
*/</span>
|
|
|
|
<span class="s2">package </span><span class="s1">net.micode.notes.gtask.data;</span>
|
|
|
|
<span class="s2">import </span><span class="s1">android.appwidget.AppWidgetManager;</span>
|
|
<span class="s2">import </span><span class="s1">android.content.ContentResolver;</span>
|
|
<span class="s2">import </span><span class="s1">android.content.ContentValues;</span>
|
|
<span class="s2">import </span><span class="s1">android.content.Context;</span>
|
|
<span class="s2">import </span><span class="s1">android.database.Cursor;</span>
|
|
<span class="s2">import </span><span class="s1">android.net.Uri;</span>
|
|
<span class="s2">import </span><span class="s1">android.util.Log;</span>
|
|
|
|
<span class="s2">import </span><span class="s1">net.micode.notes.data.Notes;</span>
|
|
<span class="s2">import </span><span class="s1">net.micode.notes.data.Notes.DataColumns;</span>
|
|
<span class="s2">import </span><span class="s1">net.micode.notes.data.Notes.NoteColumns;</span>
|
|
<span class="s2">import </span><span class="s1">net.micode.notes.gtask.exception.ActionFailureException;</span>
|
|
<span class="s2">import </span><span class="s1">net.micode.notes.tool.GTaskStringUtils;</span>
|
|
<span class="s2">import </span><span class="s1">net.micode.notes.tool.ResourceParser;</span>
|
|
|
|
<span class="s2">import </span><span class="s1">org.json.JSONArray;</span>
|
|
<span class="s2">import </span><span class="s1">org.json.JSONException;</span>
|
|
<span class="s2">import </span><span class="s1">org.json.JSONObject;</span>
|
|
|
|
<span class="s2">import </span><span class="s1">java.util.ArrayList;</span>
|
|
|
|
|
|
<span class="s2">public class </span><span class="s1">SqlNote {</span>
|
|
<span class="s2">private static final </span><span class="s1">String TAG = SqlNote.</span><span class="s2">class</span><span class="s1">.getSimpleName();</span>
|
|
|
|
<span class="s2">private static final int </span><span class="s1">INVALID_ID = -</span><span class="s3">99999</span><span class="s1">;</span>
|
|
|
|
<span class="s2">public static final </span><span class="s1">String[] PROJECTION_NOTE = </span><span class="s2">new </span><span class="s1">String[] {</span>
|
|
<span class="s1">NoteColumns.ID, NoteColumns.ALERTED_DATE, NoteColumns.BG_COLOR_ID,</span>
|
|
<span class="s1">NoteColumns.CREATED_DATE, NoteColumns.HAS_ATTACHMENT, NoteColumns.MODIFIED_DATE,</span>
|
|
<span class="s1">NoteColumns.NOTES_COUNT, NoteColumns.PARENT_ID, NoteColumns.SNIPPET, NoteColumns.TYPE,</span>
|
|
<span class="s1">NoteColumns.WIDGET_ID, NoteColumns.WIDGET_TYPE, NoteColumns.SYNC_ID,</span>
|
|
<span class="s1">NoteColumns.LOCAL_MODIFIED, NoteColumns.ORIGIN_PARENT_ID, NoteColumns.GTASK_ID,</span>
|
|
<span class="s1">NoteColumns.VERSION</span>
|
|
<span class="s1">};</span>
|
|
|
|
<span class="s2">public static final int </span><span class="s1">ID_COLUMN = </span><span class="s3">0</span><span class="s1">;</span>
|
|
|
|
<span class="s2">public static final int </span><span class="s1">ALERTED_DATE_COLUMN = </span><span class="s3">1</span><span class="s1">;</span>
|
|
|
|
<span class="s2">public static final int </span><span class="s1">BG_COLOR_ID_COLUMN = </span><span class="s3">2</span><span class="s1">;</span>
|
|
|
|
<span class="s2">public static final int </span><span class="s1">CREATED_DATE_COLUMN = </span><span class="s3">3</span><span class="s1">;</span>
|
|
|
|
<span class="s2">public static final int </span><span class="s1">HAS_ATTACHMENT_COLUMN = </span><span class="s3">4</span><span class="s1">;</span>
|
|
|
|
<span class="s2">public static final int </span><span class="s1">MODIFIED_DATE_COLUMN = </span><span class="s3">5</span><span class="s1">;</span>
|
|
|
|
<span class="s2">public static final int </span><span class="s1">NOTES_COUNT_COLUMN = </span><span class="s3">6</span><span class="s1">;</span>
|
|
|
|
<span class="s2">public static final int </span><span class="s1">PARENT_ID_COLUMN = </span><span class="s3">7</span><span class="s1">;</span>
|
|
|
|
<span class="s2">public static final int </span><span class="s1">SNIPPET_COLUMN = </span><span class="s3">8</span><span class="s1">;</span>
|
|
|
|
<span class="s2">public static final int </span><span class="s1">TYPE_COLUMN = </span><span class="s3">9</span><span class="s1">;</span>
|
|
|
|
<span class="s2">public static final int </span><span class="s1">WIDGET_ID_COLUMN = </span><span class="s3">10</span><span class="s1">;</span>
|
|
|
|
<span class="s2">public static final int </span><span class="s1">WIDGET_TYPE_COLUMN = </span><span class="s3">11</span><span class="s1">;</span>
|
|
|
|
<span class="s2">public static final int </span><span class="s1">SYNC_ID_COLUMN = </span><span class="s3">12</span><span class="s1">;</span>
|
|
|
|
<span class="s2">public static final int </span><span class="s1">LOCAL_MODIFIED_COLUMN = </span><span class="s3">13</span><span class="s1">;</span>
|
|
|
|
<span class="s2">public static final int </span><span class="s1">ORIGIN_PARENT_ID_COLUMN = </span><span class="s3">14</span><span class="s1">;</span>
|
|
|
|
<span class="s2">public static final int </span><span class="s1">GTASK_ID_COLUMN = </span><span class="s3">15</span><span class="s1">;</span>
|
|
|
|
<span class="s2">public static final int </span><span class="s1">VERSION_COLUMN = </span><span class="s3">16</span><span class="s1">;</span>
|
|
|
|
<span class="s2">private </span><span class="s1">Context mContext;</span>
|
|
|
|
<span class="s2">private </span><span class="s1">ContentResolver mContentResolver;</span>
|
|
|
|
<span class="s2">private boolean </span><span class="s1">mIsCreate;</span>
|
|
|
|
<span class="s2">private long </span><span class="s1">mId;</span>
|
|
|
|
<span class="s2">private long </span><span class="s1">mAlertDate;</span>
|
|
|
|
<span class="s2">private int </span><span class="s1">mBgColorId;</span>
|
|
|
|
<span class="s2">private long </span><span class="s1">mCreatedDate;</span>
|
|
|
|
<span class="s2">private int </span><span class="s1">mHasAttachment;</span>
|
|
|
|
<span class="s2">private long </span><span class="s1">mModifiedDate;</span>
|
|
|
|
<span class="s2">private long </span><span class="s1">mParentId;</span>
|
|
|
|
<span class="s2">private </span><span class="s1">String mSnippet;</span>
|
|
|
|
<span class="s2">private int </span><span class="s1">mType;</span>
|
|
|
|
<span class="s2">private int </span><span class="s1">mWidgetId;</span>
|
|
|
|
<span class="s2">private int </span><span class="s1">mWidgetType;</span>
|
|
|
|
<span class="s2">private long </span><span class="s1">mOriginParent;</span>
|
|
|
|
<span class="s2">private long </span><span class="s1">mVersion;</span>
|
|
|
|
<span class="s2">private </span><span class="s1">ContentValues mDiffNoteValues;</span>
|
|
|
|
<span class="s2">private </span><span class="s1">ArrayList<SqlData> mDataList;</span>
|
|
|
|
<span class="s2">public </span><span class="s1">SqlNote(Context context) {</span>
|
|
<span class="s1">mContext = context;</span>
|
|
<span class="s1">mContentResolver = context.getContentResolver();</span>
|
|
<span class="s1">mIsCreate = </span><span class="s2">true</span><span class="s1">;</span>
|
|
<span class="s1">mId = INVALID_ID;</span>
|
|
<span class="s1">mAlertDate = </span><span class="s3">0</span><span class="s1">;</span>
|
|
<span class="s1">mBgColorId = ResourceParser.getDefaultBgId(context);</span>
|
|
<span class="s1">mCreatedDate = System.currentTimeMillis();</span>
|
|
<span class="s1">mHasAttachment = </span><span class="s3">0</span><span class="s1">;</span>
|
|
<span class="s1">mModifiedDate = System.currentTimeMillis();</span>
|
|
<span class="s1">mParentId = </span><span class="s3">0</span><span class="s1">;</span>
|
|
<span class="s1">mSnippet = </span><span class="s4">""</span><span class="s1">;</span>
|
|
<span class="s1">mType = Notes.TYPE_NOTE;</span>
|
|
<span class="s1">mWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID;</span>
|
|
<span class="s1">mWidgetType = Notes.TYPE_WIDGET_INVALIDE;</span>
|
|
<span class="s1">mOriginParent = </span><span class="s3">0</span><span class="s1">;</span>
|
|
<span class="s1">mVersion = </span><span class="s3">0</span><span class="s1">;</span>
|
|
<span class="s1">mDiffNoteValues = </span><span class="s2">new </span><span class="s1">ContentValues();</span>
|
|
<span class="s1">mDataList = </span><span class="s2">new </span><span class="s1">ArrayList<SqlData>();</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s2">public </span><span class="s1">SqlNote(Context context, Cursor c) {</span>
|
|
<span class="s1">mContext = context;</span>
|
|
<span class="s1">mContentResolver = context.getContentResolver();</span>
|
|
<span class="s1">mIsCreate = </span><span class="s2">false</span><span class="s1">;</span>
|
|
<span class="s1">loadFromCursor(c);</span>
|
|
<span class="s1">mDataList = </span><span class="s2">new </span><span class="s1">ArrayList<SqlData>();</span>
|
|
<span class="s2">if </span><span class="s1">(mType == Notes.TYPE_NOTE)</span>
|
|
<span class="s1">loadDataContent();</span>
|
|
<span class="s1">mDiffNoteValues = </span><span class="s2">new </span><span class="s1">ContentValues();</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s2">public </span><span class="s1">SqlNote(Context context, </span><span class="s2">long </span><span class="s1">id) {</span>
|
|
<span class="s1">mContext = context;</span>
|
|
<span class="s1">mContentResolver = context.getContentResolver();</span>
|
|
<span class="s1">mIsCreate = </span><span class="s2">false</span><span class="s1">;</span>
|
|
<span class="s1">loadFromCursor(id);</span>
|
|
<span class="s1">mDataList = </span><span class="s2">new </span><span class="s1">ArrayList<SqlData>();</span>
|
|
<span class="s2">if </span><span class="s1">(mType == Notes.TYPE_NOTE)</span>
|
|
<span class="s1">loadDataContent();</span>
|
|
<span class="s1">mDiffNoteValues = </span><span class="s2">new </span><span class="s1">ContentValues();</span>
|
|
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s2">private void </span><span class="s1">loadFromCursor(</span><span class="s2">long </span><span class="s1">id) {</span>
|
|
<span class="s1">Cursor c = </span><span class="s2">null</span><span class="s1">;</span>
|
|
<span class="s2">try </span><span class="s1">{</span>
|
|
<span class="s1">c = mContentResolver.query(Notes.CONTENT_NOTE_URI, PROJECTION_NOTE, </span><span class="s4">"(_id=?)"</span><span class="s1">,</span>
|
|
<span class="s2">new </span><span class="s1">String[] {</span>
|
|
<span class="s1">String.valueOf(id)</span>
|
|
<span class="s1">}, </span><span class="s2">null</span><span class="s1">);</span>
|
|
<span class="s2">if </span><span class="s1">(c != </span><span class="s2">null</span><span class="s1">) {</span>
|
|
<span class="s1">c.moveToNext();</span>
|
|
<span class="s1">loadFromCursor(c);</span>
|
|
<span class="s1">} </span><span class="s2">else </span><span class="s1">{</span>
|
|
<span class="s1">Log.w(TAG, </span><span class="s4">"loadFromCursor: cursor = null"</span><span class="s1">);</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">} </span><span class="s2">finally </span><span class="s1">{</span>
|
|
<span class="s2">if </span><span class="s1">(c != </span><span class="s2">null</span><span class="s1">)</span>
|
|
<span class="s1">c.close();</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s2">private void </span><span class="s1">loadFromCursor(Cursor c) {</span>
|
|
<span class="s1">mId = c.getLong(ID_COLUMN);</span>
|
|
<span class="s1">mAlertDate = c.getLong(ALERTED_DATE_COLUMN);</span>
|
|
<span class="s1">mBgColorId = c.getInt(BG_COLOR_ID_COLUMN);</span>
|
|
<span class="s1">mCreatedDate = c.getLong(CREATED_DATE_COLUMN);</span>
|
|
<span class="s1">mHasAttachment = c.getInt(HAS_ATTACHMENT_COLUMN);</span>
|
|
<span class="s1">mModifiedDate = c.getLong(MODIFIED_DATE_COLUMN);</span>
|
|
<span class="s1">mParentId = c.getLong(PARENT_ID_COLUMN);</span>
|
|
<span class="s1">mSnippet = c.getString(SNIPPET_COLUMN);</span>
|
|
<span class="s1">mType = c.getInt(TYPE_COLUMN);</span>
|
|
<span class="s1">mWidgetId = c.getInt(WIDGET_ID_COLUMN);</span>
|
|
<span class="s1">mWidgetType = c.getInt(WIDGET_TYPE_COLUMN);</span>
|
|
<span class="s1">mVersion = c.getLong(VERSION_COLUMN);</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s2">private void </span><span class="s1">loadDataContent() {</span>
|
|
<span class="s1">Cursor c = </span><span class="s2">null</span><span class="s1">;</span>
|
|
<span class="s1">mDataList.clear();</span>
|
|
<span class="s2">try </span><span class="s1">{</span>
|
|
<span class="s1">c = mContentResolver.query(Notes.CONTENT_DATA_URI, SqlData.PROJECTION_DATA,</span>
|
|
<span class="s4">"(note_id=?)"</span><span class="s1">, </span><span class="s2">new </span><span class="s1">String[] {</span>
|
|
<span class="s1">String.valueOf(mId)</span>
|
|
<span class="s1">}, </span><span class="s2">null</span><span class="s1">);</span>
|
|
<span class="s2">if </span><span class="s1">(c != </span><span class="s2">null</span><span class="s1">) {</span>
|
|
<span class="s2">if </span><span class="s1">(c.getCount() == </span><span class="s3">0</span><span class="s1">) {</span>
|
|
<span class="s1">Log.w(TAG, </span><span class="s4">"it seems that the note has not data"</span><span class="s1">);</span>
|
|
<span class="s2">return</span><span class="s1">;</span>
|
|
<span class="s1">}</span>
|
|
<span class="s2">while </span><span class="s1">(c.moveToNext()) {</span>
|
|
<span class="s1">SqlData data = </span><span class="s2">new </span><span class="s1">SqlData(mContext, c);</span>
|
|
<span class="s1">mDataList.add(data);</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">} </span><span class="s2">else </span><span class="s1">{</span>
|
|
<span class="s1">Log.w(TAG, </span><span class="s4">"loadDataContent: cursor = null"</span><span class="s1">);</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">} </span><span class="s2">finally </span><span class="s1">{</span>
|
|
<span class="s2">if </span><span class="s1">(c != </span><span class="s2">null</span><span class="s1">)</span>
|
|
<span class="s1">c.close();</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s2">public boolean </span><span class="s1">setContent(JSONObject js) {</span>
|
|
<span class="s2">try </span><span class="s1">{</span>
|
|
<span class="s1">JSONObject note = js.getJSONObject(GTaskStringUtils.META_HEAD_NOTE);</span>
|
|
<span class="s2">if </span><span class="s1">(note.getInt(NoteColumns.TYPE) == Notes.TYPE_SYSTEM) {</span>
|
|
<span class="s1">Log.w(TAG, </span><span class="s4">"cannot set system folder"</span><span class="s1">);</span>
|
|
<span class="s1">} </span><span class="s2">else if </span><span class="s1">(note.getInt(NoteColumns.TYPE) == Notes.TYPE_FOLDER) {</span>
|
|
<span class="s0">// for folder we can only update the snnipet and type</span>
|
|
<span class="s1">String snippet = note.has(NoteColumns.SNIPPET) ? note</span>
|
|
<span class="s1">.getString(NoteColumns.SNIPPET) : </span><span class="s4">""</span><span class="s1">;</span>
|
|
<span class="s2">if </span><span class="s1">(mIsCreate || !mSnippet.equals(snippet)) {</span>
|
|
<span class="s1">mDiffNoteValues.put(NoteColumns.SNIPPET, snippet);</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">mSnippet = snippet;</span>
|
|
|
|
<span class="s2">int </span><span class="s1">type = note.has(NoteColumns.TYPE) ? note.getInt(NoteColumns.TYPE)</span>
|
|
<span class="s1">: Notes.TYPE_NOTE;</span>
|
|
<span class="s2">if </span><span class="s1">(mIsCreate || mType != type) {</span>
|
|
<span class="s1">mDiffNoteValues.put(NoteColumns.TYPE, type);</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">mType = type;</span>
|
|
<span class="s1">} </span><span class="s2">else if </span><span class="s1">(note.getInt(NoteColumns.TYPE) == Notes.TYPE_NOTE) {</span>
|
|
<span class="s1">JSONArray dataArray = js.getJSONArray(GTaskStringUtils.META_HEAD_DATA);</span>
|
|
<span class="s2">long </span><span class="s1">id = note.has(NoteColumns.ID) ? note.getLong(NoteColumns.ID) : INVALID_ID;</span>
|
|
<span class="s2">if </span><span class="s1">(mIsCreate || mId != id) {</span>
|
|
<span class="s1">mDiffNoteValues.put(NoteColumns.ID, id);</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">mId = id;</span>
|
|
|
|
<span class="s2">long </span><span class="s1">alertDate = note.has(NoteColumns.ALERTED_DATE) ? note</span>
|
|
<span class="s1">.getLong(NoteColumns.ALERTED_DATE) : </span><span class="s3">0</span><span class="s1">;</span>
|
|
<span class="s2">if </span><span class="s1">(mIsCreate || mAlertDate != alertDate) {</span>
|
|
<span class="s1">mDiffNoteValues.put(NoteColumns.ALERTED_DATE, alertDate);</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">mAlertDate = alertDate;</span>
|
|
|
|
<span class="s2">int </span><span class="s1">bgColorId = note.has(NoteColumns.BG_COLOR_ID) ? note</span>
|
|
<span class="s1">.getInt(NoteColumns.BG_COLOR_ID) : ResourceParser.getDefaultBgId(mContext);</span>
|
|
<span class="s2">if </span><span class="s1">(mIsCreate || mBgColorId != bgColorId) {</span>
|
|
<span class="s1">mDiffNoteValues.put(NoteColumns.BG_COLOR_ID, bgColorId);</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">mBgColorId = bgColorId;</span>
|
|
|
|
<span class="s2">long </span><span class="s1">createDate = note.has(NoteColumns.CREATED_DATE) ? note</span>
|
|
<span class="s1">.getLong(NoteColumns.CREATED_DATE) : System.currentTimeMillis();</span>
|
|
<span class="s2">if </span><span class="s1">(mIsCreate || mCreatedDate != createDate) {</span>
|
|
<span class="s1">mDiffNoteValues.put(NoteColumns.CREATED_DATE, createDate);</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">mCreatedDate = createDate;</span>
|
|
|
|
<span class="s2">int </span><span class="s1">hasAttachment = note.has(NoteColumns.HAS_ATTACHMENT) ? note</span>
|
|
<span class="s1">.getInt(NoteColumns.HAS_ATTACHMENT) : </span><span class="s3">0</span><span class="s1">;</span>
|
|
<span class="s2">if </span><span class="s1">(mIsCreate || mHasAttachment != hasAttachment) {</span>
|
|
<span class="s1">mDiffNoteValues.put(NoteColumns.HAS_ATTACHMENT, hasAttachment);</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">mHasAttachment = hasAttachment;</span>
|
|
|
|
<span class="s2">long </span><span class="s1">modifiedDate = note.has(NoteColumns.MODIFIED_DATE) ? note</span>
|
|
<span class="s1">.getLong(NoteColumns.MODIFIED_DATE) : System.currentTimeMillis();</span>
|
|
<span class="s2">if </span><span class="s1">(mIsCreate || mModifiedDate != modifiedDate) {</span>
|
|
<span class="s1">mDiffNoteValues.put(NoteColumns.MODIFIED_DATE, modifiedDate);</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">mModifiedDate = modifiedDate;</span>
|
|
|
|
<span class="s2">long </span><span class="s1">parentId = note.has(NoteColumns.PARENT_ID) ? note</span>
|
|
<span class="s1">.getLong(NoteColumns.PARENT_ID) : </span><span class="s3">0</span><span class="s1">;</span>
|
|
<span class="s2">if </span><span class="s1">(mIsCreate || mParentId != parentId) {</span>
|
|
<span class="s1">mDiffNoteValues.put(NoteColumns.PARENT_ID, parentId);</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">mParentId = parentId;</span>
|
|
|
|
<span class="s1">String snippet = note.has(NoteColumns.SNIPPET) ? note</span>
|
|
<span class="s1">.getString(NoteColumns.SNIPPET) : </span><span class="s4">""</span><span class="s1">;</span>
|
|
<span class="s2">if </span><span class="s1">(mIsCreate || !mSnippet.equals(snippet)) {</span>
|
|
<span class="s1">mDiffNoteValues.put(NoteColumns.SNIPPET, snippet);</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">mSnippet = snippet;</span>
|
|
|
|
<span class="s2">int </span><span class="s1">type = note.has(NoteColumns.TYPE) ? note.getInt(NoteColumns.TYPE)</span>
|
|
<span class="s1">: Notes.TYPE_NOTE;</span>
|
|
<span class="s2">if </span><span class="s1">(mIsCreate || mType != type) {</span>
|
|
<span class="s1">mDiffNoteValues.put(NoteColumns.TYPE, type);</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">mType = type;</span>
|
|
|
|
<span class="s2">int </span><span class="s1">widgetId = note.has(NoteColumns.WIDGET_ID) ? note.getInt(NoteColumns.WIDGET_ID)</span>
|
|
<span class="s1">: AppWidgetManager.INVALID_APPWIDGET_ID;</span>
|
|
<span class="s2">if </span><span class="s1">(mIsCreate || mWidgetId != widgetId) {</span>
|
|
<span class="s1">mDiffNoteValues.put(NoteColumns.WIDGET_ID, widgetId);</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">mWidgetId = widgetId;</span>
|
|
|
|
<span class="s2">int </span><span class="s1">widgetType = note.has(NoteColumns.WIDGET_TYPE) ? note</span>
|
|
<span class="s1">.getInt(NoteColumns.WIDGET_TYPE) : Notes.TYPE_WIDGET_INVALIDE;</span>
|
|
<span class="s2">if </span><span class="s1">(mIsCreate || mWidgetType != widgetType) {</span>
|
|
<span class="s1">mDiffNoteValues.put(NoteColumns.WIDGET_TYPE, widgetType);</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">mWidgetType = widgetType;</span>
|
|
|
|
<span class="s2">long </span><span class="s1">originParent = note.has(NoteColumns.ORIGIN_PARENT_ID) ? note</span>
|
|
<span class="s1">.getLong(NoteColumns.ORIGIN_PARENT_ID) : </span><span class="s3">0</span><span class="s1">;</span>
|
|
<span class="s2">if </span><span class="s1">(mIsCreate || mOriginParent != originParent) {</span>
|
|
<span class="s1">mDiffNoteValues.put(NoteColumns.ORIGIN_PARENT_ID, originParent);</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">mOriginParent = originParent;</span>
|
|
|
|
<span class="s2">for </span><span class="s1">(</span><span class="s2">int </span><span class="s1">i = </span><span class="s3">0</span><span class="s1">; i < dataArray.length(); i++) {</span>
|
|
<span class="s1">JSONObject data = dataArray.getJSONObject(i);</span>
|
|
<span class="s1">SqlData sqlData = </span><span class="s2">null</span><span class="s1">;</span>
|
|
<span class="s2">if </span><span class="s1">(data.has(DataColumns.ID)) {</span>
|
|
<span class="s2">long </span><span class="s1">dataId = data.getLong(DataColumns.ID);</span>
|
|
<span class="s2">for </span><span class="s1">(SqlData temp : mDataList) {</span>
|
|
<span class="s2">if </span><span class="s1">(dataId == temp.getId()) {</span>
|
|
<span class="s1">sqlData = temp;</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s2">if </span><span class="s1">(sqlData == </span><span class="s2">null</span><span class="s1">) {</span>
|
|
<span class="s1">sqlData = </span><span class="s2">new </span><span class="s1">SqlData(mContext);</span>
|
|
<span class="s1">mDataList.add(sqlData);</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s1">sqlData.setContent(data);</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">} </span><span class="s2">catch </span><span class="s1">(JSONException e) {</span>
|
|
<span class="s1">Log.e(TAG, e.toString());</span>
|
|
<span class="s1">e.printStackTrace();</span>
|
|
<span class="s2">return false</span><span class="s1">;</span>
|
|
<span class="s1">}</span>
|
|
<span class="s2">return true</span><span class="s1">;</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s2">public </span><span class="s1">JSONObject getContent() {</span>
|
|
<span class="s2">try </span><span class="s1">{</span>
|
|
<span class="s1">JSONObject js = </span><span class="s2">new </span><span class="s1">JSONObject();</span>
|
|
|
|
<span class="s2">if </span><span class="s1">(mIsCreate) {</span>
|
|
<span class="s1">Log.e(TAG, </span><span class="s4">"it seems that we haven't created this in database yet"</span><span class="s1">);</span>
|
|
<span class="s2">return null</span><span class="s1">;</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s1">JSONObject note = </span><span class="s2">new </span><span class="s1">JSONObject();</span>
|
|
<span class="s2">if </span><span class="s1">(mType == Notes.TYPE_NOTE) {</span>
|
|
<span class="s1">note.put(NoteColumns.ID, mId);</span>
|
|
<span class="s1">note.put(NoteColumns.ALERTED_DATE, mAlertDate);</span>
|
|
<span class="s1">note.put(NoteColumns.BG_COLOR_ID, mBgColorId);</span>
|
|
<span class="s1">note.put(NoteColumns.CREATED_DATE, mCreatedDate);</span>
|
|
<span class="s1">note.put(NoteColumns.HAS_ATTACHMENT, mHasAttachment);</span>
|
|
<span class="s1">note.put(NoteColumns.MODIFIED_DATE, mModifiedDate);</span>
|
|
<span class="s1">note.put(NoteColumns.PARENT_ID, mParentId);</span>
|
|
<span class="s1">note.put(NoteColumns.SNIPPET, mSnippet);</span>
|
|
<span class="s1">note.put(NoteColumns.TYPE, mType);</span>
|
|
<span class="s1">note.put(NoteColumns.WIDGET_ID, mWidgetId);</span>
|
|
<span class="s1">note.put(NoteColumns.WIDGET_TYPE, mWidgetType);</span>
|
|
<span class="s1">note.put(NoteColumns.ORIGIN_PARENT_ID, mOriginParent);</span>
|
|
<span class="s1">js.put(GTaskStringUtils.META_HEAD_NOTE, note);</span>
|
|
|
|
<span class="s1">JSONArray dataArray = </span><span class="s2">new </span><span class="s1">JSONArray();</span>
|
|
<span class="s2">for </span><span class="s1">(SqlData sqlData : mDataList) {</span>
|
|
<span class="s1">JSONObject data = sqlData.getContent();</span>
|
|
<span class="s2">if </span><span class="s1">(data != </span><span class="s2">null</span><span class="s1">) {</span>
|
|
<span class="s1">dataArray.put(data);</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">js.put(GTaskStringUtils.META_HEAD_DATA, dataArray);</span>
|
|
<span class="s1">} </span><span class="s2">else if </span><span class="s1">(mType == Notes.TYPE_FOLDER || mType == Notes.TYPE_SYSTEM) {</span>
|
|
<span class="s1">note.put(NoteColumns.ID, mId);</span>
|
|
<span class="s1">note.put(NoteColumns.TYPE, mType);</span>
|
|
<span class="s1">note.put(NoteColumns.SNIPPET, mSnippet);</span>
|
|
<span class="s1">js.put(GTaskStringUtils.META_HEAD_NOTE, note);</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s2">return </span><span class="s1">js;</span>
|
|
<span class="s1">} </span><span class="s2">catch </span><span class="s1">(JSONException e) {</span>
|
|
<span class="s1">Log.e(TAG, e.toString());</span>
|
|
<span class="s1">e.printStackTrace();</span>
|
|
<span class="s1">}</span>
|
|
<span class="s2">return null</span><span class="s1">;</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s2">public void </span><span class="s1">setParentId(</span><span class="s2">long </span><span class="s1">id) {</span>
|
|
<span class="s1">mParentId = id;</span>
|
|
<span class="s1">mDiffNoteValues.put(NoteColumns.PARENT_ID, id);</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s2">public void </span><span class="s1">setGtaskId(String gid) {</span>
|
|
<span class="s1">mDiffNoteValues.put(NoteColumns.GTASK_ID, gid);</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s2">public void </span><span class="s1">setSyncId(</span><span class="s2">long </span><span class="s1">syncId) {</span>
|
|
<span class="s1">mDiffNoteValues.put(NoteColumns.SYNC_ID, syncId);</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s2">public void </span><span class="s1">resetLocalModified() {</span>
|
|
<span class="s1">mDiffNoteValues.put(NoteColumns.LOCAL_MODIFIED, </span><span class="s3">0</span><span class="s1">);</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s2">public long </span><span class="s1">getId() {</span>
|
|
<span class="s2">return </span><span class="s1">mId;</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s2">public long </span><span class="s1">getParentId() {</span>
|
|
<span class="s2">return </span><span class="s1">mParentId;</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s2">public </span><span class="s1">String getSnippet() {</span>
|
|
<span class="s2">return </span><span class="s1">mSnippet;</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s2">public boolean </span><span class="s1">isNoteType() {</span>
|
|
<span class="s2">return </span><span class="s1">mType == Notes.TYPE_NOTE;</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s2">public void </span><span class="s1">commit(</span><span class="s2">boolean </span><span class="s1">validateVersion) {</span>
|
|
<span class="s2">if </span><span class="s1">(mIsCreate) {</span>
|
|
<span class="s2">if </span><span class="s1">(mId == INVALID_ID && mDiffNoteValues.containsKey(NoteColumns.ID)) {</span>
|
|
<span class="s1">mDiffNoteValues.remove(NoteColumns.ID);</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s1">Uri uri = mContentResolver.insert(Notes.CONTENT_NOTE_URI, mDiffNoteValues);</span>
|
|
<span class="s2">try </span><span class="s1">{</span>
|
|
<span class="s1">mId = Long.valueOf(uri.getPathSegments().get(</span><span class="s3">1</span><span class="s1">));</span>
|
|
<span class="s1">} </span><span class="s2">catch </span><span class="s1">(NumberFormatException e) {</span>
|
|
<span class="s1">Log.e(TAG, </span><span class="s4">"Get note id error :" </span><span class="s1">+ e.toString());</span>
|
|
<span class="s2">throw new </span><span class="s1">ActionFailureException(</span><span class="s4">"create note failed"</span><span class="s1">);</span>
|
|
<span class="s1">}</span>
|
|
<span class="s2">if </span><span class="s1">(mId == </span><span class="s3">0</span><span class="s1">) {</span>
|
|
<span class="s2">throw new </span><span class="s1">IllegalStateException(</span><span class="s4">"Create thread id failed"</span><span class="s1">);</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s2">if </span><span class="s1">(mType == Notes.TYPE_NOTE) {</span>
|
|
<span class="s2">for </span><span class="s1">(SqlData sqlData : mDataList) {</span>
|
|
<span class="s1">sqlData.commit(mId, </span><span class="s2">false</span><span class="s1">, -</span><span class="s3">1</span><span class="s1">);</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">} </span><span class="s2">else </span><span class="s1">{</span>
|
|
<span class="s2">if </span><span class="s1">(mId <= </span><span class="s3">0 </span><span class="s1">&& mId != Notes.ID_ROOT_FOLDER && mId != Notes.ID_CALL_RECORD_FOLDER) {</span>
|
|
<span class="s1">Log.e(TAG, </span><span class="s4">"No such note"</span><span class="s1">);</span>
|
|
<span class="s2">throw new </span><span class="s1">IllegalStateException(</span><span class="s4">"Try to update note with invalid id"</span><span class="s1">);</span>
|
|
<span class="s1">}</span>
|
|
<span class="s2">if </span><span class="s1">(mDiffNoteValues.size() > </span><span class="s3">0</span><span class="s1">) {</span>
|
|
<span class="s1">mVersion ++;</span>
|
|
<span class="s2">int </span><span class="s1">result = </span><span class="s3">0</span><span class="s1">;</span>
|
|
<span class="s2">if </span><span class="s1">(!validateVersion) {</span>
|
|
<span class="s1">result = mContentResolver.update(Notes.CONTENT_NOTE_URI, mDiffNoteValues, </span><span class="s4">"("</span>
|
|
<span class="s1">+ NoteColumns.ID + </span><span class="s4">"=?)"</span><span class="s1">, </span><span class="s2">new </span><span class="s1">String[] {</span>
|
|
<span class="s1">String.valueOf(mId)</span>
|
|
<span class="s1">});</span>
|
|
<span class="s1">} </span><span class="s2">else </span><span class="s1">{</span>
|
|
<span class="s1">result = mContentResolver.update(Notes.CONTENT_NOTE_URI, mDiffNoteValues, </span><span class="s4">"("</span>
|
|
<span class="s1">+ NoteColumns.ID + </span><span class="s4">"=?) AND (" </span><span class="s1">+ NoteColumns.VERSION + </span><span class="s4">"<=?)"</span><span class="s1">,</span>
|
|
<span class="s2">new </span><span class="s1">String[] {</span>
|
|
<span class="s1">String.valueOf(mId), String.valueOf(mVersion)</span>
|
|
<span class="s1">});</span>
|
|
<span class="s1">}</span>
|
|
<span class="s2">if </span><span class="s1">(result == </span><span class="s3">0</span><span class="s1">) {</span>
|
|
<span class="s1">Log.w(TAG, </span><span class="s4">"there is no update. maybe user updates note when syncing"</span><span class="s1">);</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s2">if </span><span class="s1">(mType == Notes.TYPE_NOTE) {</span>
|
|
<span class="s2">for </span><span class="s1">(SqlData sqlData : mDataList) {</span>
|
|
<span class="s1">sqlData.commit(mId, validateVersion, mVersion);</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s0">// refresh local info</span>
|
|
<span class="s1">loadFromCursor(mId);</span>
|
|
<span class="s2">if </span><span class="s1">(mType == Notes.TYPE_NOTE)</span>
|
|
<span class="s1">loadDataContent();</span>
|
|
|
|
<span class="s1">mDiffNoteValues.clear();</span>
|
|
<span class="s1">mIsCreate = </span><span class="s2">false</span><span class="s1">;</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">}</span>
|
|
</pre>
|
|
</body>
|
|
</html> |