|
|
/*
|
|
|
* 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.
|
|
|
*/
|
|
|
|
|
|
package net.micode.notes.data;
|
|
|
|
|
|
|
|
|
import android.app.SearchManager;
|
|
|
import android.content.ContentProvider;
|
|
|
import android.content.ContentUris;
|
|
|
import android.content.ContentValues;
|
|
|
import android.content.Intent;
|
|
|
import android.content.UriMatcher;
|
|
|
import android.database.Cursor;
|
|
|
import android.database.sqlite.SQLiteDatabase;
|
|
|
import android.net.Uri;
|
|
|
import android.text.TextUtils;
|
|
|
import android.util.Log;
|
|
|
|
|
|
import net.micode.notes.R;
|
|
|
import net.micode.notes.data.Notes.DataColumns;
|
|
|
import net.micode.notes.data.Notes.NoteColumns;
|
|
|
import net.micode.notes.data.NotesDatabaseHelper.TABLE;
|
|
|
|
|
|
|
|
|
public class NotesProvider extends ContentProvider {
|
|
|
// 定义一个静态的UriMatcher对象,用于匹配URI
|
|
|
private static final UriMatcher mMatcher;
|
|
|
|
|
|
// 创建一个NotesDatabaseHelper实例
|
|
|
private NotesDatabaseHelper mHelper;
|
|
|
|
|
|
// 定义一个常量TAG,用于日志记录
|
|
|
private static final String TAG = "NotesProvider";
|
|
|
|
|
|
// 定义一些常量URI,用于匹配不同的数据表或操作
|
|
|
private static final int URI_NOTE = 1;
|
|
|
private static final int URI_NOTE_ITEM = 2;
|
|
|
private static final int URI_DATA = 3;
|
|
|
private static final int URI_DATA_ITEM = 4;
|
|
|
private static final int URI_SEARCH = 5;
|
|
|
private static final int URI_SEARCH_SUGGEST = 6;
|
|
|
|
|
|
// 在静态代码块中初始化mMatcher,添加匹配规则
|
|
|
static {
|
|
|
mMatcher = new UriMatcher(UriMatcher.NO_MATCH);
|
|
|
mMatcher.addURI(Notes.AUTHORITY, "note", URI_NOTE);
|
|
|
mMatcher.addURI(Notes.AUTHORITY, "note/#", URI_NOTE_ITEM);
|
|
|
mMatcher.addURI(Notes.AUTHORITY, "data", URI_DATA);
|
|
|
mMatcher.addURI(Notes.AUTHORITY, "data/#", URI_DATA_ITEM);
|
|
|
mMatcher.addURI(Notes.AUTHORITY, "search", URI_SEARCH);
|
|
|
mMatcher.addURI(Notes.AUTHORITY, SearchManager.SUGGEST_URI_PATH_QUERY, URI_SEARCH_SUGGEST);
|
|
|
mMatcher.addURI(Notes.AUTHORITY, SearchManager.SUGGEST_URI_PATH_QUERY + "/*", URI_SEARCH_SUGGEST);
|
|
|
}
|
|
|
|
|
|
// 定义一个常量字符串,用于搜索结果的投影
|
|
|
private static final String NOTES_SEARCH_PROJECTION = ... //省略具体实现
|
|
|
|
|
|
// 定义一个常量字符串,用于搜索查询语句
|
|
|
private static final String NOTES_SNIPPET_SEARCH_QUERY = ... //省略具体实现
|
|
|
|
|
|
@Override
|
|
|
public boolean onCreate() {
|
|
|
// 创建NotesDatabaseHelper实例并返回true
|
|
|
mHelper = NotesDatabaseHelper.getInstance(getContext());
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
|
|
|
String sortOrder) {
|
|
|
// 根据传入的URI进行匹配,执行相应的数据库查询操作
|
|
|
Cursor c = null;
|
|
|
SQLiteDatabase db = mHelper.getReadableDatabase();
|
|
|
String id = null;
|
|
|
switch (mMatcher.match(uri)) {
|
|
|
// ...省略其他case的处理逻辑...
|
|
|
}
|
|
|
// 如果Cursor不为空,设置通知URI并返回Cursor
|
|
|
if (c != null) {
|
|
|
c.setNotificationUri(getContext().getContentResolver(), uri);
|
|
|
}
|
|
|
return c;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public Uri insert(Uri uri, ContentValues values) {
|
|
|
// 根据传入的URI进行匹配,执行相应的数据库插入操作
|
|
|
SQLiteDatabase db = mHelper.getWritableDatabase();
|
|
|
long dataId = 0, noteId = 0, insertedId = 0;
|
|
|
switch (mMatcher.match(uri)) {
|
|
|
// ...省略其他case的处理逻辑...
|
|
|
}
|
|
|
// 如果有对应的noteId或dataId,通知相应的URI变化
|
|
|
// ...省略通知逻辑...
|
|
|
// 返回新插入数据的URI
|
|
|
return ContentUris.withAppendedId(uri, insertedId);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public int delete(Uri uri, String selection, String[] selectionArgs) {
|
|
|
// 根据传入的URI进行匹配,执行相应的数据库删除操作
|
|
|
int count = 0;
|
|
|
String id = null;
|
|
|
SQLiteDatabase db = mHelper.getWritableDatabase();
|
|
|
boolean deleteData = false;
|
|
|
switch (mMatcher.match(uri)) {
|
|
|
// ...省略其他case的处理逻辑...
|
|
|
}
|
|
|
// 返回删除的数据条数
|
|
|
return count;
|
|
|
}
|
|
|
|
|
|
// ...省略其他方法的实现...
|
|
|
}
|