/*******************************************************************************
* Copyright (c) 2014 CodingBad.
* All rights reserved. This file is part of ASA.
*
* ASA is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* ASA is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with ASA. If not, see <http://www.gnu.org/licenses/>.
*
* Contributors:
* Ayelén Chavez - ashy.on.line@gmail.com
* Joaquín Rinaudo - jmrinaudo@gmail.com
******************************************************************************/
package com.thesis.asa.provider;
import android.content.ContentProvider;
import android.content.ContentValues;
import android.content.UriMatcher;
import android.database.Cursor;
import android.database.sqlite.SQLiteQueryBuilder;
import android.net.Uri;
import android.util.Log;
import android.provider.Settings.System;
public class ASASettings extends ContentProvider {
static final String TAG = "SettingsProvider";
static final String AUTHORITY = "com.thesis.asa.settings";
static final String DEFAULT_PATH = "default_settings";
static final String CONTACTS_PATH = "contacts_settings";
static final String WIFI_PATH = "wifi_settings";
static final String LOCATION_PATH = "location_settings";
static final String DEVICE_DATA_PATH = "device_data_settings";
static final String INTERNET_PATH = "internet_settings";
public static final Uri CONTENT_URI = Uri.parse("content://"+AUTHORITY);
static final String SINGLE_RECORD_MIME_TYPE = "vnd.android.cursor.item/vnd.com.thesis.asa.status";
static final String MULTIPLE_RECORDS_MIME_TYPE = "vnd.android.cursor.dir/vnd.com.thesis.asa.status";
private static final UriMatcher URI_MATCHER;
private static final int DEFAULT_CODE = 0;
private static final int CONTACTS_CODE = 1;
private static final int LOCATION_CODE = 2;
private static final int DEVICE_DATA_CODE = 3;
private static final int WIFI_CODE = 4;
private static final int INTERNET_CODE = 5;
//prepare the UriMatcher
static {
URI_MATCHER = new UriMatcher(UriMatcher.NO_MATCH);
URI_MATCHER.addURI(AUTHORITY, DEFAULT_PATH, DEFAULT_CODE);
URI_MATCHER.addURI(AUTHORITY, CONTACTS_PATH, CONTACTS_CODE);
URI_MATCHER.addURI(AUTHORITY, LOCATION_PATH, LOCATION_CODE);
URI_MATCHER.addURI(AUTHORITY, DEVICE_DATA_PATH, DEVICE_DATA_CODE);
URI_MATCHER.addURI(AUTHORITY, WIFI_PATH, WIFI_CODE);
URI_MATCHER.addURI(AUTHORITY, INTERNET_PATH, INTERNET_CODE);
}
private SettingsDB settingsDB;
@Override
public boolean onCreate() {
Log.d(TAG, "onCreate: "+CONTENT_URI.toString());
settingsDB = new SettingsDB(getContext());
return true;
}
@Override
public String getType(Uri uri) {
String ret = getContext().getContentResolver().getType(System.CONTENT_URI);
Log.d(TAG, "getType returning: " + ret);
return ret;
}
@Override
public Uri insert(Uri uri, ContentValues values) {
Log.e(TAG, "Insert not supported for this content provider");
return null;
}
@Override
public int update(Uri uri, ContentValues values, String selection,
String[] selectionArgs) {
Log.e(TAG, "Update not supported for this content provider");
return 0;
}
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
Log.e(TAG, "Delete not supported for this content provider");
return 0;
}
@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder();
int uriType = URI_MATCHER.match(uri);
switch (uriType) {
case DEFAULT_CODE:
queryBuilder.setTables(SettingsDB.DEFAULT_TABLE);
break;
case CONTACTS_CODE:
queryBuilder.setTables(SettingsDB.CONTACTS_TABLE);
break;
case LOCATION_CODE:
queryBuilder.setTables(SettingsDB.LOCATION_TABLE);
break;
case DEVICE_DATA_CODE:
queryBuilder.setTables(SettingsDB.DEVICE_DATA_TABLE);
break;
case WIFI_CODE:
queryBuilder.setTables(SettingsDB.WIFI_TABLE);
break;
case INTERNET_CODE:
queryBuilder.setTables(SettingsDB.INTERNET_TABLE);
break;
default:
throw new IllegalArgumentException("Unknown URI");
}
Cursor cursor = queryBuilder.query(settingsDB.getReadableDatabase(),
projection, selection, selectionArgs, null, null, sortOrder);
cursor.setNotificationUri(getContext().getContentResolver(), uri);
return cursor;
}
}