@Override
  public int update(Uri uri, ContentValues values, String where, String[] whereArgs) {
    String table = null;

    switch (uriMatcher.match(uri)) {
      case CONTACT:
        table = ContactTable.TABLE_NAME;
        break;

      case CONTACT_REQUEST:
        table = ContactRequestTable.TABLE_NAME;
        break;

      case CONTACT_REQUEST_ID:
        table = ContactRequestTable.TABLE_NAME;
        where =
            DatabaseUtils.concatenateWhere(
                ContactRequestTable._ID + " = " + ContentUris.parseId(uri), where);
        break;

      case CHAT_MESSAGE_ID:
        table = ChatMessageTable.TABLE_NAME;
        where =
            DatabaseUtils.concatenateWhere(
                ChatMessageTable._ID + " = " + ContentUris.parseId(uri), where);
        break;

      case CONVERSATION:
        table = ConversationTable.TABLE_NAME;
        break;

      case CONVERSATION_ID:
        table = ConversationTable.TABLE_NAME;
        where =
            DatabaseUtils.concatenateWhere(
                ConversationTable._ID + " = " + ContentUris.parseId(uri), where);
        break;

      default:
        throw new IllegalArgumentException("Unknown URI " + uri);
    }

    SQLiteDatabase db = dbHelper.getWritableDatabase();
    int count = db.update(table, values, where, whereArgs);
    getContext().getContentResolver().notifyChange(uri, null);

    return count;
  }
  @Override
  public ContentProviderResult[] applyBatch(ArrayList<ContentProviderOperation> operations) {
    SQLiteDatabase db = dbHelper.getWritableDatabase();
    db.beginTransaction();
    try {
      ContentProviderResult[] results = super.applyBatch(operations);
      db.setTransactionSuccessful();

      return results;
    } catch (OperationApplicationException e) {
      e.printStackTrace();
      return null;
    } finally {
      db.endTransaction();
    }
  }
  @Override
  public Uri insert(Uri uri, ContentValues values) {
    Uri contentUri = null;
    String table = null;
    SQLiteDatabase db = dbHelper.getWritableDatabase();

    switch (uriMatcher.match(uri)) {
      case CONTACT:
        table = ContactTable.TABLE_NAME;
        contentUri = ContactTable.CONTENT_URI;
        break;

      case CONTACT_REQUEST:
        table = ContactRequestTable.TABLE_NAME;
        contentUri = ContactRequestTable.CONTENT_URI;
        break;

      case CHAT_MESSAGE:
        table = ChatMessageTable.TABLE_NAME;
        contentUri = ChatMessageTable.CONTENT_URI;
        break;

      case CONVERSATION:
        table = ConversationTable.TABLE_NAME;
        contentUri = ConversationTable.CONTENT_URI;
        break;

      default:
        throw new IllegalArgumentException("Unknown URI " + uri);
    }

    long rowId = db.insert(table, null, values);
    if (rowId > 0) {
      Uri noteUri = ContentUris.withAppendedId(contentUri, rowId);
      getContext().getContentResolver().notifyChange(noteUri, null);
      return noteUri;
    }

    throw new SQLException("Failed to insert row into " + uri);
  }