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.
327 lines
28 KiB
327 lines
28 KiB
<html>
|
|
<head>
|
|
<title>NotesProvider.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: #067d17;}
|
|
.s4 { color: #1750eb;}
|
|
.s5 { color: #0037a6;}
|
|
</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">
|
|
NotesProvider.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.data;</span>
|
|
|
|
|
|
<span class="s2">import </span><span class="s1">android.app.SearchManager;</span>
|
|
<span class="s2">import </span><span class="s1">android.content.ContentProvider;</span>
|
|
<span class="s2">import </span><span class="s1">android.content.ContentUris;</span>
|
|
<span class="s2">import </span><span class="s1">android.content.ContentValues;</span>
|
|
<span class="s2">import </span><span class="s1">android.content.Intent;</span>
|
|
<span class="s2">import </span><span class="s1">android.content.UriMatcher;</span>
|
|
<span class="s2">import </span><span class="s1">android.database.Cursor;</span>
|
|
<span class="s2">import </span><span class="s1">android.database.sqlite.SQLiteDatabase;</span>
|
|
<span class="s2">import </span><span class="s1">android.net.Uri;</span>
|
|
<span class="s2">import </span><span class="s1">android.text.TextUtils;</span>
|
|
<span class="s2">import </span><span class="s1">android.util.Log;</span>
|
|
|
|
<span class="s2">import </span><span class="s1">net.micode.notes.R;</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.data.NotesDatabaseHelper.TABLE;</span>
|
|
|
|
|
|
<span class="s2">public class </span><span class="s1">NotesProvider </span><span class="s2">extends </span><span class="s1">ContentProvider {</span>
|
|
<span class="s2">private static final </span><span class="s1">UriMatcher mMatcher;</span>
|
|
|
|
<span class="s2">private </span><span class="s1">NotesDatabaseHelper mHelper;</span>
|
|
|
|
<span class="s2">private static final </span><span class="s1">String TAG = </span><span class="s3">"NotesProvider"</span><span class="s1">;</span>
|
|
|
|
<span class="s2">private static final int </span><span class="s1">URI_NOTE = </span><span class="s4">1</span><span class="s1">;</span>
|
|
<span class="s2">private static final int </span><span class="s1">URI_NOTE_ITEM = </span><span class="s4">2</span><span class="s1">;</span>
|
|
<span class="s2">private static final int </span><span class="s1">URI_DATA = </span><span class="s4">3</span><span class="s1">;</span>
|
|
<span class="s2">private static final int </span><span class="s1">URI_DATA_ITEM = </span><span class="s4">4</span><span class="s1">;</span>
|
|
|
|
<span class="s2">private static final int </span><span class="s1">URI_SEARCH = </span><span class="s4">5</span><span class="s1">;</span>
|
|
<span class="s2">private static final int </span><span class="s1">URI_SEARCH_SUGGEST = </span><span class="s4">6</span><span class="s1">;</span>
|
|
|
|
<span class="s2">static </span><span class="s1">{</span>
|
|
<span class="s1">mMatcher = </span><span class="s2">new </span><span class="s1">UriMatcher(UriMatcher.NO_MATCH);</span>
|
|
<span class="s1">mMatcher.addURI(Notes.AUTHORITY, </span><span class="s3">"note"</span><span class="s1">, URI_NOTE);</span>
|
|
<span class="s1">mMatcher.addURI(Notes.AUTHORITY, </span><span class="s3">"note/#"</span><span class="s1">, URI_NOTE_ITEM);</span>
|
|
<span class="s1">mMatcher.addURI(Notes.AUTHORITY, </span><span class="s3">"data"</span><span class="s1">, URI_DATA);</span>
|
|
<span class="s1">mMatcher.addURI(Notes.AUTHORITY, </span><span class="s3">"data/#"</span><span class="s1">, URI_DATA_ITEM);</span>
|
|
<span class="s1">mMatcher.addURI(Notes.AUTHORITY, </span><span class="s3">"search"</span><span class="s1">, URI_SEARCH);</span>
|
|
<span class="s1">mMatcher.addURI(Notes.AUTHORITY, SearchManager.SUGGEST_URI_PATH_QUERY, URI_SEARCH_SUGGEST);</span>
|
|
<span class="s1">mMatcher.addURI(Notes.AUTHORITY, SearchManager.SUGGEST_URI_PATH_QUERY + </span><span class="s3">"/*"</span><span class="s1">, URI_SEARCH_SUGGEST);</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s0">/**</span>
|
|
<span class="s0">* x'0A' represents the '\n' character in sqlite. For title and content in the search result,</span>
|
|
<span class="s0">* we will trim '\n' and white space in order to show more information.</span>
|
|
<span class="s0">*/</span>
|
|
<span class="s2">private static final </span><span class="s1">String NOTES_SEARCH_PROJECTION = NoteColumns.ID + </span><span class="s3">","</span>
|
|
<span class="s1">+ NoteColumns.ID + </span><span class="s3">" AS " </span><span class="s1">+ SearchManager.SUGGEST_COLUMN_INTENT_EXTRA_DATA + </span><span class="s3">","</span>
|
|
<span class="s1">+ </span><span class="s3">"TRIM(REPLACE(" </span><span class="s1">+ NoteColumns.SNIPPET + </span><span class="s3">", x'0A','')) AS " </span><span class="s1">+ SearchManager.SUGGEST_COLUMN_TEXT_1 + </span><span class="s3">","</span>
|
|
<span class="s1">+ </span><span class="s3">"TRIM(REPLACE(" </span><span class="s1">+ NoteColumns.SNIPPET + </span><span class="s3">", x'0A','')) AS " </span><span class="s1">+ SearchManager.SUGGEST_COLUMN_TEXT_2 + </span><span class="s3">","</span>
|
|
<span class="s1">+ R.drawable.search_result + </span><span class="s3">" AS " </span><span class="s1">+ SearchManager.SUGGEST_COLUMN_ICON_1 + </span><span class="s3">","</span>
|
|
<span class="s1">+ </span><span class="s3">"'" </span><span class="s1">+ Intent.ACTION_VIEW + </span><span class="s3">"' AS " </span><span class="s1">+ SearchManager.SUGGEST_COLUMN_INTENT_ACTION + </span><span class="s3">","</span>
|
|
<span class="s1">+ </span><span class="s3">"'" </span><span class="s1">+ Notes.TextNote.CONTENT_TYPE + </span><span class="s3">"' AS " </span><span class="s1">+ SearchManager.SUGGEST_COLUMN_INTENT_DATA;</span>
|
|
|
|
<span class="s2">private static </span><span class="s1">String NOTES_SNIPPET_SEARCH_QUERY = </span><span class="s3">"SELECT " </span><span class="s1">+ NOTES_SEARCH_PROJECTION</span>
|
|
<span class="s1">+ </span><span class="s3">" FROM " </span><span class="s1">+ TABLE.NOTE</span>
|
|
<span class="s1">+ </span><span class="s3">" WHERE " </span><span class="s1">+ NoteColumns.SNIPPET + </span><span class="s3">" LIKE ?"</span>
|
|
<span class="s1">+ </span><span class="s3">" AND " </span><span class="s1">+ NoteColumns.PARENT_ID + </span><span class="s3">"<>" </span><span class="s1">+ Notes.ID_TRASH_FOLER</span>
|
|
<span class="s1">+ </span><span class="s3">" AND " </span><span class="s1">+ NoteColumns.TYPE + </span><span class="s3">"=" </span><span class="s1">+ Notes.TYPE_NOTE;</span>
|
|
|
|
<span class="s1">@Override</span>
|
|
<span class="s2">public boolean </span><span class="s1">onCreate() {</span>
|
|
<span class="s1">mHelper = NotesDatabaseHelper.getInstance(getContext());</span>
|
|
<span class="s2">return true</span><span class="s1">;</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s1">@Override</span>
|
|
<span class="s2">public </span><span class="s1">Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,</span>
|
|
<span class="s1">String sortOrder) {</span>
|
|
<span class="s1">Cursor c = </span><span class="s2">null</span><span class="s1">;</span>
|
|
<span class="s1">SQLiteDatabase db = mHelper.getReadableDatabase();</span>
|
|
<span class="s1">String id = </span><span class="s2">null</span><span class="s1">;</span>
|
|
<span class="s2">switch </span><span class="s1">(mMatcher.match(uri)) {</span>
|
|
<span class="s2">case </span><span class="s1">URI_NOTE:</span>
|
|
<span class="s1">c = db.query(TABLE.NOTE, projection, selection, selectionArgs, </span><span class="s2">null</span><span class="s1">, </span><span class="s2">null</span><span class="s1">,</span>
|
|
<span class="s1">sortOrder);</span>
|
|
<span class="s2">break</span><span class="s1">;</span>
|
|
<span class="s2">case </span><span class="s1">URI_NOTE_ITEM:</span>
|
|
<span class="s1">id = uri.getPathSegments().get(</span><span class="s4">1</span><span class="s1">);</span>
|
|
<span class="s1">c = db.query(TABLE.NOTE, projection, NoteColumns.ID + </span><span class="s3">"=" </span><span class="s1">+ id</span>
|
|
<span class="s1">+ parseSelection(selection), selectionArgs, </span><span class="s2">null</span><span class="s1">, </span><span class="s2">null</span><span class="s1">, sortOrder);</span>
|
|
<span class="s2">break</span><span class="s1">;</span>
|
|
<span class="s2">case </span><span class="s1">URI_DATA:</span>
|
|
<span class="s1">c = db.query(TABLE.DATA, projection, selection, selectionArgs, </span><span class="s2">null</span><span class="s1">, </span><span class="s2">null</span><span class="s1">,</span>
|
|
<span class="s1">sortOrder);</span>
|
|
<span class="s2">break</span><span class="s1">;</span>
|
|
<span class="s2">case </span><span class="s1">URI_DATA_ITEM:</span>
|
|
<span class="s1">id = uri.getPathSegments().get(</span><span class="s4">1</span><span class="s1">);</span>
|
|
<span class="s1">c = db.query(TABLE.DATA, projection, DataColumns.ID + </span><span class="s3">"=" </span><span class="s1">+ id</span>
|
|
<span class="s1">+ parseSelection(selection), selectionArgs, </span><span class="s2">null</span><span class="s1">, </span><span class="s2">null</span><span class="s1">, sortOrder);</span>
|
|
<span class="s2">break</span><span class="s1">;</span>
|
|
<span class="s2">case </span><span class="s1">URI_SEARCH:</span>
|
|
<span class="s2">case </span><span class="s1">URI_SEARCH_SUGGEST:</span>
|
|
<span class="s2">if </span><span class="s1">(sortOrder != </span><span class="s2">null </span><span class="s1">|| projection != </span><span class="s2">null</span><span class="s1">) {</span>
|
|
<span class="s2">throw new </span><span class="s1">IllegalArgumentException(</span>
|
|
<span class="s3">"do not specify sortOrder, selection, selectionArgs, or projection" </span><span class="s1">+ </span><span class="s3">"with this query"</span><span class="s1">);</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s1">String searchString = </span><span class="s2">null</span><span class="s1">;</span>
|
|
<span class="s2">if </span><span class="s1">(mMatcher.match(uri) == URI_SEARCH_SUGGEST) {</span>
|
|
<span class="s2">if </span><span class="s1">(uri.getPathSegments().size() > </span><span class="s4">1</span><span class="s1">) {</span>
|
|
<span class="s1">searchString = uri.getPathSegments().get(</span><span class="s4">1</span><span class="s1">);</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">} </span><span class="s2">else </span><span class="s1">{</span>
|
|
<span class="s1">searchString = uri.getQueryParameter(</span><span class="s3">"pattern"</span><span class="s1">);</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s2">if </span><span class="s1">(TextUtils.isEmpty(searchString)) {</span>
|
|
<span class="s2">return null</span><span class="s1">;</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s2">try </span><span class="s1">{</span>
|
|
<span class="s1">searchString = String.format(</span><span class="s3">"%%%s%%"</span><span class="s1">, searchString);</span>
|
|
<span class="s1">c = db.rawQuery(NOTES_SNIPPET_SEARCH_QUERY,</span>
|
|
<span class="s2">new </span><span class="s1">String[] { searchString });</span>
|
|
<span class="s1">} </span><span class="s2">catch </span><span class="s1">(IllegalStateException ex) {</span>
|
|
<span class="s1">Log.e(TAG, </span><span class="s3">"got exception: " </span><span class="s1">+ ex.toString());</span>
|
|
<span class="s1">}</span>
|
|
<span class="s2">break</span><span class="s1">;</span>
|
|
<span class="s2">default</span><span class="s1">:</span>
|
|
<span class="s2">throw new </span><span class="s1">IllegalArgumentException(</span><span class="s3">"Unknown URI " </span><span class="s1">+ uri);</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.setNotificationUri(getContext().getContentResolver(), uri);</span>
|
|
<span class="s1">}</span>
|
|
<span class="s2">return </span><span class="s1">c;</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s1">@Override</span>
|
|
<span class="s2">public </span><span class="s1">Uri insert(Uri uri, ContentValues values) {</span>
|
|
<span class="s1">SQLiteDatabase db = mHelper.getWritableDatabase();</span>
|
|
<span class="s2">long </span><span class="s1">dataId = </span><span class="s4">0</span><span class="s1">, noteId = </span><span class="s4">0</span><span class="s1">, insertedId = </span><span class="s4">0</span><span class="s1">;</span>
|
|
<span class="s2">switch </span><span class="s1">(mMatcher.match(uri)) {</span>
|
|
<span class="s2">case </span><span class="s1">URI_NOTE:</span>
|
|
<span class="s1">insertedId = noteId = db.insert(TABLE.NOTE, </span><span class="s2">null</span><span class="s1">, values);</span>
|
|
<span class="s2">break</span><span class="s1">;</span>
|
|
<span class="s2">case </span><span class="s1">URI_DATA:</span>
|
|
<span class="s2">if </span><span class="s1">(values.containsKey(DataColumns.NOTE_ID)) {</span>
|
|
<span class="s1">noteId = values.getAsLong(DataColumns.NOTE_ID);</span>
|
|
<span class="s1">} </span><span class="s2">else </span><span class="s1">{</span>
|
|
<span class="s1">Log.d(TAG, </span><span class="s3">"Wrong data format without note id:" </span><span class="s1">+ values.toString());</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">insertedId = dataId = db.insert(TABLE.DATA, </span><span class="s2">null</span><span class="s1">, values);</span>
|
|
<span class="s2">break</span><span class="s1">;</span>
|
|
<span class="s2">default</span><span class="s1">:</span>
|
|
<span class="s2">throw new </span><span class="s1">IllegalArgumentException(</span><span class="s3">"Unknown URI " </span><span class="s1">+ uri);</span>
|
|
<span class="s1">}</span>
|
|
<span class="s0">// Notify the note uri</span>
|
|
<span class="s2">if </span><span class="s1">(noteId > </span><span class="s4">0</span><span class="s1">) {</span>
|
|
<span class="s1">getContext().getContentResolver().notifyChange(</span>
|
|
<span class="s1">ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, noteId), </span><span class="s2">null</span><span class="s1">);</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s0">// Notify the data uri</span>
|
|
<span class="s2">if </span><span class="s1">(dataId > </span><span class="s4">0</span><span class="s1">) {</span>
|
|
<span class="s1">getContext().getContentResolver().notifyChange(</span>
|
|
<span class="s1">ContentUris.withAppendedId(Notes.CONTENT_DATA_URI, dataId), </span><span class="s2">null</span><span class="s1">);</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s2">return </span><span class="s1">ContentUris.withAppendedId(uri, insertedId);</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s1">@Override</span>
|
|
<span class="s2">public int </span><span class="s1">delete(Uri uri, String selection, String[] selectionArgs) {</span>
|
|
<span class="s2">int </span><span class="s1">count = </span><span class="s4">0</span><span class="s1">;</span>
|
|
<span class="s1">String id = </span><span class="s2">null</span><span class="s1">;</span>
|
|
<span class="s1">SQLiteDatabase db = mHelper.getWritableDatabase();</span>
|
|
<span class="s2">boolean </span><span class="s1">deleteData = </span><span class="s2">false</span><span class="s1">;</span>
|
|
<span class="s2">switch </span><span class="s1">(mMatcher.match(uri)) {</span>
|
|
<span class="s2">case </span><span class="s1">URI_NOTE:</span>
|
|
<span class="s1">selection = </span><span class="s3">"(" </span><span class="s1">+ selection + </span><span class="s3">") AND " </span><span class="s1">+ NoteColumns.ID + </span><span class="s3">">0 "</span><span class="s1">;</span>
|
|
<span class="s1">count = db.delete(TABLE.NOTE, selection, selectionArgs);</span>
|
|
<span class="s2">break</span><span class="s1">;</span>
|
|
<span class="s2">case </span><span class="s1">URI_NOTE_ITEM:</span>
|
|
<span class="s1">id = uri.getPathSegments().get(</span><span class="s4">1</span><span class="s1">);</span>
|
|
<span class="s0">/**</span>
|
|
<span class="s0">* ID that smaller than 0 is system folder which is not allowed to</span>
|
|
<span class="s0">* trash</span>
|
|
<span class="s0">*/</span>
|
|
<span class="s2">long </span><span class="s1">noteId = Long.valueOf(id);</span>
|
|
<span class="s2">if </span><span class="s1">(noteId <= </span><span class="s4">0</span><span class="s1">) {</span>
|
|
<span class="s2">break</span><span class="s1">;</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">count = db.delete(TABLE.NOTE,</span>
|
|
<span class="s1">NoteColumns.ID + </span><span class="s3">"=" </span><span class="s1">+ id + parseSelection(selection), selectionArgs);</span>
|
|
<span class="s2">break</span><span class="s1">;</span>
|
|
<span class="s2">case </span><span class="s1">URI_DATA:</span>
|
|
<span class="s1">count = db.delete(TABLE.DATA, selection, selectionArgs);</span>
|
|
<span class="s1">deleteData = </span><span class="s2">true</span><span class="s1">;</span>
|
|
<span class="s2">break</span><span class="s1">;</span>
|
|
<span class="s2">case </span><span class="s1">URI_DATA_ITEM:</span>
|
|
<span class="s1">id = uri.getPathSegments().get(</span><span class="s4">1</span><span class="s1">);</span>
|
|
<span class="s1">count = db.delete(TABLE.DATA,</span>
|
|
<span class="s1">DataColumns.ID + </span><span class="s3">"=" </span><span class="s1">+ id + parseSelection(selection), selectionArgs);</span>
|
|
<span class="s1">deleteData = </span><span class="s2">true</span><span class="s1">;</span>
|
|
<span class="s2">break</span><span class="s1">;</span>
|
|
<span class="s2">default</span><span class="s1">:</span>
|
|
<span class="s2">throw new </span><span class="s1">IllegalArgumentException(</span><span class="s3">"Unknown URI " </span><span class="s1">+ uri);</span>
|
|
<span class="s1">}</span>
|
|
<span class="s2">if </span><span class="s1">(count > </span><span class="s4">0</span><span class="s1">) {</span>
|
|
<span class="s2">if </span><span class="s1">(deleteData) {</span>
|
|
<span class="s1">getContext().getContentResolver().notifyChange(Notes.CONTENT_NOTE_URI, </span><span class="s2">null</span><span class="s1">);</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">getContext().getContentResolver().notifyChange(uri, </span><span class="s2">null</span><span class="s1">);</span>
|
|
<span class="s1">}</span>
|
|
<span class="s2">return </span><span class="s1">count;</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s1">@Override</span>
|
|
<span class="s2">public int </span><span class="s1">update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {</span>
|
|
<span class="s2">int </span><span class="s1">count = </span><span class="s4">0</span><span class="s1">;</span>
|
|
<span class="s1">String id = </span><span class="s2">null</span><span class="s1">;</span>
|
|
<span class="s1">SQLiteDatabase db = mHelper.getWritableDatabase();</span>
|
|
<span class="s2">boolean </span><span class="s1">updateData = </span><span class="s2">false</span><span class="s1">;</span>
|
|
<span class="s2">switch </span><span class="s1">(mMatcher.match(uri)) {</span>
|
|
<span class="s2">case </span><span class="s1">URI_NOTE:</span>
|
|
<span class="s1">increaseNoteVersion(-</span><span class="s4">1</span><span class="s1">, selection, selectionArgs);</span>
|
|
<span class="s1">count = db.update(TABLE.NOTE, values, selection, selectionArgs);</span>
|
|
<span class="s2">break</span><span class="s1">;</span>
|
|
<span class="s2">case </span><span class="s1">URI_NOTE_ITEM:</span>
|
|
<span class="s1">id = uri.getPathSegments().get(</span><span class="s4">1</span><span class="s1">);</span>
|
|
<span class="s1">increaseNoteVersion(Long.valueOf(id), selection, selectionArgs);</span>
|
|
<span class="s1">count = db.update(TABLE.NOTE, values, NoteColumns.ID + </span><span class="s3">"=" </span><span class="s1">+ id</span>
|
|
<span class="s1">+ parseSelection(selection), selectionArgs);</span>
|
|
<span class="s2">break</span><span class="s1">;</span>
|
|
<span class="s2">case </span><span class="s1">URI_DATA:</span>
|
|
<span class="s1">count = db.update(TABLE.DATA, values, selection, selectionArgs);</span>
|
|
<span class="s1">updateData = </span><span class="s2">true</span><span class="s1">;</span>
|
|
<span class="s2">break</span><span class="s1">;</span>
|
|
<span class="s2">case </span><span class="s1">URI_DATA_ITEM:</span>
|
|
<span class="s1">id = uri.getPathSegments().get(</span><span class="s4">1</span><span class="s1">);</span>
|
|
<span class="s1">count = db.update(TABLE.DATA, values, DataColumns.ID + </span><span class="s3">"=" </span><span class="s1">+ id</span>
|
|
<span class="s1">+ parseSelection(selection), selectionArgs);</span>
|
|
<span class="s1">updateData = </span><span class="s2">true</span><span class="s1">;</span>
|
|
<span class="s2">break</span><span class="s1">;</span>
|
|
<span class="s2">default</span><span class="s1">:</span>
|
|
<span class="s2">throw new </span><span class="s1">IllegalArgumentException(</span><span class="s3">"Unknown URI " </span><span class="s1">+ uri);</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s2">if </span><span class="s1">(count > </span><span class="s4">0</span><span class="s1">) {</span>
|
|
<span class="s2">if </span><span class="s1">(updateData) {</span>
|
|
<span class="s1">getContext().getContentResolver().notifyChange(Notes.CONTENT_NOTE_URI, </span><span class="s2">null</span><span class="s1">);</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">getContext().getContentResolver().notifyChange(uri, </span><span class="s2">null</span><span class="s1">);</span>
|
|
<span class="s1">}</span>
|
|
<span class="s2">return </span><span class="s1">count;</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s2">private </span><span class="s1">String parseSelection(String selection) {</span>
|
|
<span class="s2">return </span><span class="s1">(!TextUtils.isEmpty(selection) ? </span><span class="s3">" AND (" </span><span class="s1">+ selection + </span><span class="s3">')' </span><span class="s1">: </span><span class="s3">""</span><span class="s1">);</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s2">private void </span><span class="s1">increaseNoteVersion(</span><span class="s2">long </span><span class="s1">id, String selection, String[] selectionArgs) {</span>
|
|
<span class="s1">StringBuilder sql = </span><span class="s2">new </span><span class="s1">StringBuilder(</span><span class="s4">120</span><span class="s1">);</span>
|
|
<span class="s1">sql.append(</span><span class="s3">"UPDATE "</span><span class="s1">);</span>
|
|
<span class="s1">sql.append(TABLE.NOTE);</span>
|
|
<span class="s1">sql.append(</span><span class="s3">" SET "</span><span class="s1">);</span>
|
|
<span class="s1">sql.append(NoteColumns.VERSION);</span>
|
|
<span class="s1">sql.append(</span><span class="s3">"=" </span><span class="s1">+ NoteColumns.VERSION + </span><span class="s3">"+1 "</span><span class="s1">);</span>
|
|
|
|
<span class="s2">if </span><span class="s1">(id > </span><span class="s4">0 </span><span class="s1">|| !TextUtils.isEmpty(selection)) {</span>
|
|
<span class="s1">sql.append(</span><span class="s3">" WHERE "</span><span class="s1">);</span>
|
|
<span class="s1">}</span>
|
|
<span class="s2">if </span><span class="s1">(id > </span><span class="s4">0</span><span class="s1">) {</span>
|
|
<span class="s1">sql.append(NoteColumns.ID + </span><span class="s3">"=" </span><span class="s1">+ String.valueOf(id));</span>
|
|
<span class="s1">}</span>
|
|
<span class="s2">if </span><span class="s1">(!TextUtils.isEmpty(selection)) {</span>
|
|
<span class="s1">String selectString = id > </span><span class="s4">0 </span><span class="s1">? parseSelection(selection) : selection;</span>
|
|
<span class="s2">for </span><span class="s1">(String args : selectionArgs) {</span>
|
|
<span class="s1">selectString = selectString.replaceFirst(</span><span class="s3">"</span><span class="s5">\\</span><span class="s3">?"</span><span class="s1">, args);</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">sql.append(selectString);</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s1">mHelper.getWritableDatabase().execSQL(sql.toString());</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s1">@Override</span>
|
|
<span class="s2">public </span><span class="s1">String getType(Uri uri) {</span>
|
|
<span class="s0">// TODO Auto-generated method stub</span>
|
|
<span class="s2">return null</span><span class="s1">;</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s1">}</span>
|
|
</pre>
|
|
</body>
|
|
</html> |