add support to query carrier list version
Bug: 64131637
Test: run test --path CarrierIdProvider#testGetVersion
Change-Id: I88df8789c28929d387d954d524cfdeeb22d9a2e9
diff --git a/src/com/android/providers/telephony/CarrierIdProvider.java b/src/com/android/providers/telephony/CarrierIdProvider.java
index 7acea68..95b17e4 100644
--- a/src/com/android/providers/telephony/CarrierIdProvider.java
+++ b/src/com/android/providers/telephony/CarrierIdProvider.java
@@ -23,6 +23,7 @@
import android.content.SharedPreferences;
import android.content.UriMatcher;
import android.database.Cursor;
+import android.database.MatrixCursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteQueryBuilder;
@@ -70,12 +71,13 @@
private static final int DATABASE_VERSION = 3;
private static final String ASSETS_PB_FILE = "carrier_list.pb";
- private static final String VERSION_PREF_KEY = "version";
+ private static final String VERSION_KEY = "version";
private static final String OTA_UPDATED_PB_PATH = "misc/carrierid/" + ASSETS_PB_FILE;
private static final String PREF_FILE = CarrierIdProvider.class.getSimpleName();
private static final UriMatcher s_urlMatcher = new UriMatcher(UriMatcher.NO_MATCH);
private static final int URL_UPDATE_FROM_PB = 1;
+ private static final int URL_GET_VERSION = 2;
/**
* index 0: {@link CarrierIdentification#MCCMNC}
@@ -162,6 +164,7 @@
mDbHelper = new CarrierIdDatabaseHelper(getContext());
mDbHelper.getReadableDatabase();
s_urlMatcher.addURI(AUTHORITY, "update_db", URL_UPDATE_FROM_PB);
+ s_urlMatcher.addURI(AUTHORITY, "get_version", URL_GET_VERSION);
initDatabaseFromPb(mDbHelper.getWritableDatabase());
return true;
}
@@ -182,11 +185,20 @@
+ " selection=" + selection
+ " selectionArgs=" + Arrays.toString(selectionArgs));
}
- SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
- qb.setTables(CARRIER_ID_TABLE);
- SQLiteDatabase db = getReadableDatabase();
- return qb.query(db, projectionIn, selection, selectionArgs, null, null, sortOrder);
+ final int match = s_urlMatcher.match(uri);
+ switch (match) {
+ case URL_GET_VERSION:
+ final MatrixCursor cursor = new MatrixCursor(new String[] {VERSION_KEY});
+ cursor.addRow(new Object[] {getAppliedVersion()});
+ return cursor;
+ default:
+ SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
+ qb.setTables(CARRIER_ID_TABLE);
+
+ SQLiteDatabase db = getReadableDatabase();
+ return qb.query(db, projectionIn, selection, selectionArgs, null, null, sortOrder);
+ }
}
@Override
@@ -454,13 +466,13 @@
private int getAppliedVersion() {
final SharedPreferences sp = getContext().getSharedPreferences(PREF_FILE, Context.MODE_PRIVATE);
- return sp.getInt(VERSION_PREF_KEY, -1);
+ return sp.getInt(VERSION_KEY, -1);
}
private void setAppliedVersion(int version) {
final SharedPreferences sp = getContext().getSharedPreferences(PREF_FILE, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
- editor.putInt(VERSION_PREF_KEY, version);
+ editor.putInt(VERSION_KEY, version);
editor.apply();
}
diff --git a/tests/src/com/android/providers/telephony/CarrierIdProviderTest.java b/tests/src/com/android/providers/telephony/CarrierIdProviderTest.java
index 2bf069b..be600f6 100644
--- a/tests/src/com/android/providers/telephony/CarrierIdProviderTest.java
+++ b/tests/src/com/android/providers/telephony/CarrierIdProviderTest.java
@@ -17,6 +17,7 @@
package com.android.providers.telephony;
import android.content.ContentValues;
+import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.content.pm.ProviderInfo;
import android.database.ContentObserver;
@@ -24,6 +25,7 @@
import android.database.SQLException;
import android.net.Uri;
import android.os.Handler;
+import android.provider.Telephony;
import android.provider.Telephony.CarrierIdentification;
import android.test.mock.MockContentResolver;
import android.test.mock.MockContext;
@@ -34,6 +36,11 @@
import org.junit.Assert;
import org.junit.Test;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
+
/**
* Tests for testing CRUD operations of CarrierIdProvider.
* Uses CarrierIdProviderTestable to set up in-memory database
@@ -64,6 +71,7 @@
private MockContentResolver mContentResolver;
private CarrierIdProviderTestable mCarrierIdProviderTestable;
private FakeContentObserver mContentObserver;
+ private SharedPreferences mSharedPreferences = mock(SharedPreferences.class);
private class FakeContentResolver extends MockContentResolver {
@Override
@@ -124,6 +132,11 @@
public int checkCallingOrSelfPermission(String permission) {
return PackageManager.PERMISSION_GRANTED;
}
+
+ @Override
+ public SharedPreferences getSharedPreferences(String name, int mode) {
+ return mSharedPreferences;
+ }
}
@Override
@@ -297,6 +310,22 @@
assertEquals(dummy_iccid_prefix, findEntry.getString(1));
}
+ @Test
+ public void testGetVersion() {
+ doReturn(5).when(mSharedPreferences).getInt(eq("version"), anyInt());
+ int version = 0;
+ try {
+ Cursor cursor = mContext.getContentResolver().query(
+ Uri.withAppendedPath(Telephony.CarrierIdentification.CONTENT_URI,
+ "get_version"), null, null, null);
+ cursor.moveToFirst();
+ version = cursor.getInt(0);
+ } catch (Exception e) {
+ Log.d(TAG, "Error querying carrier list version:" + e);
+ }
+ assertEquals(5, version);
+ }
+
private static ContentValues createCarrierInfoInternal() {
ContentValues contentValues = new ContentValues();
contentValues.put(CarrierIdentification.MCCMNC, dummy_mccmnc);