package com.yyquan.jzh.xmpp;
import android.content.ContentProvider;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.Context;
import android.content.UriMatcher;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.net.Uri;
import android.support.annotation.Nullable;
import android.util.Log;
import com.yyquan.jzh.entity.XmppChat;
import com.yyquan.jzh.entity.XmppMessage;
import com.yyquan.jzh.util.TimeUtil;
/**
* Created by Administrator on 2016/1/10.
*/
public class XmppContentProvider extends ContentProvider {
static final String PROVIDER_NAME =
"com.yyquan.jzh.xmpp";
//用来区分操作的是单条数据还是多条数据
private static final int MESSAGE = 1;
private static final int MESSAGES = 2;
private static UriMatcher matcher;
private MyDataBaseHelper dbHelper;
private SQLiteDatabase db;
public static final Uri CONTENT_MESSAGE_URI = Uri.parse("content://" + PROVIDER_NAME + "/message");
public static final Uri CONTENT_MESSAGES_URI = Uri.parse("content://" + PROVIDER_NAME + "/messages");
static {
matcher = new UriMatcher(UriMatcher.NO_MATCH);
//为UriMatcher注册一个uri
matcher.addURI(PROVIDER_NAME, "message", MESSAGE);
matcher.addURI(PROVIDER_NAME, "messages", MESSAGES);
}
/**
* 插入一条消息
*
* @param xm
*/
public static void add_message(XmppMessage xm) {
ContentValues values = new ContentValues();
values.put("main", xm.getMain());
values.put("name", xm.getUser().getName());
values.put("username", xm.getUser().getUserName());
values.put("too", xm.getTo());
values.put("type", xm.getType());
values.put("content", xm.getContent());
values.put("time", xm.getTime());
values.put("result", xm.getResult());
XmppService.resolver.insert(XmppContentProvider.CONTENT_MESSAGES_URI, values);
}
@Override
public boolean onCreate() {
dbHelper = new MyDataBaseHelper(this.getContext());
db = dbHelper.getWritableDatabase();
return db == null ? false : true;
}
@Nullable
@Override
public String getType(Uri uri) {
switch (matcher.match(uri)) {
case MESSAGE:
return "vnd.android.cursor.item/com.yyquan.jzh";
case MESSAGES:
return "vnd.android.cursor.dir/com.yyquan.jzh";
default:
throw new IllegalArgumentException("未知uri:" + uri);
}
}
@Nullable
@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
switch (matcher.match(uri)) {
case MESSAGE:
Log.i("provider", "数据查询成功");
return db.query("message", projection, selection, selectionArgs, null, null, sortOrder);
case MESSAGES:
Log.i("provider", "数据查询成功");
return db.query("message", projection, selection, selectionArgs, null, null, sortOrder);
default:
throw new IllegalArgumentException("未知uri:" + uri);
}
}
@Nullable
@Override
public Uri insert(Uri uri, ContentValues values) {
switch (matcher.match(uri)) {
case MESSAGES:
long rowId = db.insert("message", null, values);
if (rowId > 0) {
Uri wordUri = ContentUris.withAppendedId(uri, rowId);
Log.i("provider", "数据插入成功");
getContext().getContentResolver().notifyChange(wordUri, null);
return wordUri;
}
break;
default:
throw new IllegalArgumentException("未知uri:" + uri);
}
return null;
}
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
int num = 0;
switch (matcher.match(uri)) {
case MESSAGE:
long id = ContentUris.parseId(uri);
String whereClause = "id=" + id;
if (selection != null && !selection.equals("")) {
whereClause = whereClause + "and" + selection;
}
num = db.delete("message", whereClause, selectionArgs);
break;
case MESSAGES:
num = db.delete("message", selection, selectionArgs);
break;
default:
throw new IllegalArgumentException("未知uri:" + uri);
}
getContext().getContentResolver().notifyChange(uri, null);
return num;
}
@Override
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
int num = 0;
switch (matcher.match(uri)) {
case MESSAGE:
long id = ContentUris.parseId(uri);
String whereClause = "id=" + id;
if (selection != null && !selection.equals("")) {
whereClause = whereClause + "and" + selection;
}
num = db.update("message", values, whereClause, selectionArgs);
Log.i("provider", "数据更新成功");
break;
case MESSAGES:
num = db.update("message", values, selection, selectionArgs);
Log.i("provider", "数据更新成功");
break;
default:
throw new IllegalArgumentException("未知uri:" + uri);
}
getContext().getContentResolver().notifyChange(uri, null);
return num;
}
private class MyDataBaseHelper extends SQLiteOpenHelper {
public MyDataBaseHelper(Context context) {
super(context, "xmpp.db", null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
String sql = "create table message(id integer primary key autoincrement,main text,too text,name text,username text,type text,content text,time text,result integer)";
db.execSQL(sql); // 执行一个sql语句
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
}