TelephonyProviderpublic class TelephonyProvider extends ContentProvider
Fields Summary |
---|
private static final String | DATABASE_NAME | private static final int | DATABASE_VERSION | private static final int | URL_TELEPHONY | private static final int | URL_CURRENT | private static final int | URL_ID | private static final int | URL_RESTOREAPN | private static final int | URL_PREFERAPN | private static final String | TAG | private static final String | CARRIERS_TABLE | private static final String | PREF_FILE | private static final String | COLUMN_APN_ID | private static final String | PARTNER_APNS_PATH | private static final UriMatcher | s_urlMatcher | private static final ContentValues | s_currentNullMap | private static final ContentValues | s_currentSetMap | private android.database.sqlite.SQLiteOpenHelper | mOpenHelper |
Methods Summary |
---|
private void | checkPermission()
// Check the permissions
getContext().enforceCallingOrSelfPermission("android.permission.WRITE_APN_SETTINGS",
"No permission to write APN settings");
| public int | delete(android.net.Uri url, java.lang.String where, java.lang.String[] whereArgs)
int count;
checkPermission();
SQLiteDatabase db = mOpenHelper.getWritableDatabase();
int match = s_urlMatcher.match(url);
switch (match)
{
case URL_TELEPHONY:
{
count = db.delete(CARRIERS_TABLE, where, whereArgs);
break;
}
case URL_CURRENT:
{
count = db.delete(CARRIERS_TABLE, where, whereArgs);
break;
}
case URL_ID:
{
count = db.delete(CARRIERS_TABLE, Telephony.Carriers._ID + "=?",
new String[] { url.getLastPathSegment() });
break;
}
case URL_RESTOREAPN: {
count = 1;
restoreDefaultAPN();
break;
}
case URL_PREFERAPN:
{
setPreferredApnId((long)-1);
count = 1;
break;
}
default: {
throw new UnsupportedOperationException("Cannot delete that URL: " + url);
}
}
if (count > 0) {
getContext().getContentResolver().notifyChange(Telephony.Carriers.CONTENT_URI, null);
}
return count;
| private long | getPreferredApnId()
SharedPreferences sp = getContext().getSharedPreferences(PREF_FILE, Context.MODE_PRIVATE);
return sp.getLong(COLUMN_APN_ID, -1);
| public java.lang.String | getType(android.net.Uri url)
switch (s_urlMatcher.match(url)) {
case URL_TELEPHONY:
return "vnd.android.cursor.dir/telephony-carrier";
case URL_ID:
return "vnd.android.cursor.item/telephony-carrier";
case URL_PREFERAPN:
return "vnd.android.cursor.item/telephony-carrier";
default:
throw new IllegalArgumentException("Unknown URL " + url);
}
| public android.net.Uri | insert(android.net.Uri url, ContentValues initialValues)
Uri result = null;
checkPermission();
SQLiteDatabase db = mOpenHelper.getWritableDatabase();
int match = s_urlMatcher.match(url);
boolean notify = false;
switch (match)
{
case URL_TELEPHONY:
{
ContentValues values;
if (initialValues != null) {
values = new ContentValues(initialValues);
} else {
values = new ContentValues();
}
// TODO Review this. This code should probably not bet here.
// It is valid for the database to return a null string.
if (values.containsKey(Telephony.Carriers.NAME) == false) {
values.put(Telephony.Carriers.NAME, "");
}
if (values.containsKey(Telephony.Carriers.APN) == false) {
values.put(Telephony.Carriers.APN, "");
}
if (values.containsKey(Telephony.Carriers.PORT) == false) {
values.put(Telephony.Carriers.PORT, "");
}
if (values.containsKey(Telephony.Carriers.PROXY) == false) {
values.put(Telephony.Carriers.PROXY, "");
}
if (values.containsKey(Telephony.Carriers.USER) == false) {
values.put(Telephony.Carriers.USER, "");
}
if (values.containsKey(Telephony.Carriers.SERVER) == false) {
values.put(Telephony.Carriers.SERVER, "");
}
if (values.containsKey(Telephony.Carriers.PASSWORD) == false) {
values.put(Telephony.Carriers.PASSWORD, "");
}
if (values.containsKey(Telephony.Carriers.MMSPORT) == false) {
values.put(Telephony.Carriers.MMSPORT, "");
}
if (values.containsKey(Telephony.Carriers.MMSPROXY) == false) {
values.put(Telephony.Carriers.MMSPROXY, "");
}
long rowID = db.insert(CARRIERS_TABLE, null, values);
if (rowID > 0)
{
result = ContentUris.withAppendedId(Telephony.Carriers.CONTENT_URI, rowID);
notify = true;
}
if (Config.LOGD) Log.d(TAG, "inserted " + values.toString() + " rowID = " + rowID);
break;
}
case URL_CURRENT:
{
// null out the previous operator
db.update("carriers", s_currentNullMap, "current IS NOT NULL", null);
String numeric = initialValues.getAsString("numeric");
int updated = db.update("carriers", s_currentSetMap,
"numeric = '" + numeric + "'", null);
if (updated > 0)
{
if (Config.LOGD) {
Log.d(TAG, "Setting numeric '" + numeric + "' to be the current operator");
}
}
else
{
Log.e(TAG, "Failed setting numeric '" + numeric + "' to the current operator");
}
break;
}
case URL_PREFERAPN:
{
if (initialValues != null) {
if(initialValues.containsKey(COLUMN_APN_ID)) {
setPreferredApnId(initialValues.getAsLong(COLUMN_APN_ID));
}
}
break;
}
}
if (notify) {
getContext().getContentResolver().notifyChange(Telephony.Carriers.CONTENT_URI, null);
}
return result;
| public boolean | onCreate()
mOpenHelper = new DatabaseHelper(getContext());
return true;
| public android.database.Cursor | query(android.net.Uri url, java.lang.String[] projectionIn, java.lang.String selection, java.lang.String[] selectionArgs, java.lang.String sort)
SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
qb.setTables("carriers");
int match = s_urlMatcher.match(url);
switch (match) {
// do nothing
case URL_TELEPHONY: {
break;
}
case URL_CURRENT: {
qb.appendWhere("current IS NOT NULL");
// ignore the selection
selection = null;
break;
}
case URL_ID: {
qb.appendWhere("_id = " + url.getPathSegments().get(1));
break;
}
case URL_PREFERAPN: {
qb.appendWhere("_id = " + getPreferredApnId());
break;
}
default: {
return null;
}
}
SQLiteDatabase db = mOpenHelper.getReadableDatabase();
Cursor ret = qb.query(db, projectionIn, selection, selectionArgs, null, null, sort);
ret.setNotificationUri(getContext().getContentResolver(), url);
return ret;
| private void | restoreDefaultAPN()
SQLiteDatabase db = mOpenHelper.getWritableDatabase();
db.delete(CARRIERS_TABLE, null, null);
setPreferredApnId((long)-1);
((DatabaseHelper) mOpenHelper).initDatabase(db);
| private void | setPreferredApnId(java.lang.Long id)
SharedPreferences sp = getContext().getSharedPreferences(PREF_FILE, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
editor.putLong(COLUMN_APN_ID, id != null ? id.longValue() : -1);
editor.commit();
| public int | update(android.net.Uri url, ContentValues values, java.lang.String where, java.lang.String[] whereArgs)
int count = 0;
checkPermission();
SQLiteDatabase db = mOpenHelper.getWritableDatabase();
int match = s_urlMatcher.match(url);
switch (match)
{
case URL_TELEPHONY:
{
count = db.update(CARRIERS_TABLE, values, where, whereArgs);
break;
}
case URL_CURRENT:
{
count = db.update(CARRIERS_TABLE, values, where, whereArgs);
break;
}
case URL_ID:
{
if (where != null || whereArgs != null) {
throw new UnsupportedOperationException(
"Cannot update URL " + url + " with a where clause");
}
count = db.update(CARRIERS_TABLE, values, Telephony.Carriers._ID + "=?",
new String[] { url.getLastPathSegment() });
break;
}
case URL_PREFERAPN:
{
if (values != null) {
if (values.containsKey(COLUMN_APN_ID)) {
setPreferredApnId(values.getAsLong(COLUMN_APN_ID));
count = 1;
}
}
break;
}
default: {
throw new UnsupportedOperationException("Cannot update that URL: " + url);
}
}
if (count > 0) {
getContext().getContentResolver().notifyChange(Telephony.Carriers.CONTENT_URI, null);
}
return count;
|
|