summaryrefslogtreecommitdiffstats
path: root/src/com/android/providers/telephony/TelephonyProvider.java
diff options
context:
space:
mode:
authorWink Saville <wink@google.com>2011-06-04 08:58:31 -0700
committerAndroid Git Automerger <android-git-automerger@android.com>2011-06-04 08:58:31 -0700
commit87f6b905c950777f038ce8902a66f6527ef57de4 (patch)
treebf7ba9a62e22d926883da1a385d662fde37d14d6 /src/com/android/providers/telephony/TelephonyProvider.java
parentb9bd35d3c07b3dbab97dcabb521d7909304670c9 (diff)
parent607ead75c55146786d79e09f36d069cf3a81eb60 (diff)
downloadandroid_packages_providers_TelephonyProvider-87f6b905c950777f038ce8902a66f6527ef57de4.tar.gz
android_packages_providers_TelephonyProvider-87f6b905c950777f038ce8902a66f6527ef57de4.tar.bz2
android_packages_providers_TelephonyProvider-87f6b905c950777f038ce8902a66f6527ef57de4.zip
am 607ead75: am d7c9350a: Rebuild Carriers table if apns-conf.xml changes.
* commit '607ead75c55146786d79e09f36d069cf3a81eb60': Rebuild Carriers table if apns-conf.xml changes.
Diffstat (limited to 'src/com/android/providers/telephony/TelephonyProvider.java')
-rw-r--r--src/com/android/providers/telephony/TelephonyProvider.java59
1 files changed, 55 insertions, 4 deletions
diff --git a/src/com/android/providers/telephony/TelephonyProvider.java b/src/com/android/providers/telephony/TelephonyProvider.java
index 6097636..5f136e9 100644
--- a/src/com/android/providers/telephony/TelephonyProvider.java
+++ b/src/com/android/providers/telephony/TelephonyProvider.java
@@ -31,10 +31,13 @@ import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteQueryBuilder;
import android.net.Uri;
import android.os.Environment;
+import android.os.FileUtils;
import android.provider.Telephony;
import android.util.Log;
import android.util.Xml;
+import com.android.internal.telephony.BaseCommands;
+import com.android.internal.telephony.Phone;
import com.android.internal.util.XmlUtils;
import org.xmlpull.v1.XmlPullParser;
@@ -45,9 +48,11 @@ import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
+
public class TelephonyProvider extends ContentProvider
{
private static final String DATABASE_NAME = "telephony.db";
+ private static final boolean DBG = true;
private static final int DATABASE_VERSION = 6 << 16;
private static final int URL_TELEPHONY = 1;
@@ -61,6 +66,7 @@ public class TelephonyProvider extends ContentProvider
private static final String PREF_FILE = "preferred-apn";
private static final String COLUMN_APN_ID = "apn_id";
+ private static final String APN_CONFIG_CHECKSUM = "apn_conf_checksum";
private static final String PARTNER_APNS_PATH = "etc/apns-conf.xml";
@@ -90,8 +96,7 @@ public class TelephonyProvider extends ContentProvider
/**
* DatabaseHelper helper class for loading apns into a database.
*
- * @param parser the system-default parser for apns.xml
- * @param confidential an optional parser for confidential APNS (stored separately)
+ * @param context of the user.
*/
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, getVersion(context));
@@ -326,10 +331,44 @@ public class TelephonyProvider extends ContentProvider
@Override
public boolean onCreate() {
+ long oldCheckSum = getAPNConfigCheckSum();
+ File confFile = new File(Environment.getRootDirectory(), PARTNER_APNS_PATH);
+ long newCheckSum = -1L;
+
+ if (DBG) {
+ Log.w(TAG, "onCreate: confFile=" + confFile.getAbsolutePath() +
+ " oldCheckSum=" + oldCheckSum);
+ }
mOpenHelper = new DatabaseHelper(getContext());
+
+ if (isLteOnCdma()) {
+ // Check to see if apns-conf.xml file changed. If so, generate db again.
+ //
+ // TODO: Generalize so we can handle apns-conf.xml updates
+ // and preserve any modifications the user might make. For
+ // now its safe on LteOnCdma devices because the user cannot
+ // make changes.
+ try {
+ newCheckSum = FileUtils.checksumCrc32(confFile);
+ if (DBG) Log.w(TAG, "onCreate: newCheckSum=" + newCheckSum);
+ if (oldCheckSum != newCheckSum) {
+ Log.w(TAG, "Rebuilding Telephony.db");
+ restoreDefaultAPN();
+ setAPNConfigCheckSum(newCheckSum);
+ }
+ } catch (FileNotFoundException e) {
+ Log.e(TAG, "FileNotFoundException: '" + confFile.getAbsolutePath() + "'", e);
+ } catch (IOException e) {
+ Log.e(TAG, "IOException: '" + confFile.getAbsolutePath() + "'", e);
+ }
+ }
return true;
}
+ private boolean isLteOnCdma() {
+ return BaseCommands.getLteOnCdmaModeStatic() == Phone.LTE_ON_CDMA_TRUE;
+ }
+
private void setPreferredApnId(Long id) {
SharedPreferences sp = getContext().getSharedPreferences(PREF_FILE, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
@@ -342,6 +381,18 @@ public class TelephonyProvider extends ContentProvider
return sp.getLong(COLUMN_APN_ID, -1);
}
+ private long getAPNConfigCheckSum() {
+ SharedPreferences sp = getContext().getSharedPreferences(PREF_FILE, Context.MODE_PRIVATE);
+ return sp.getLong(APN_CONFIG_CHECKSUM, -1);
+ }
+
+ private void setAPNConfigCheckSum(long id) {
+ SharedPreferences sp = getContext().getSharedPreferences(PREF_FILE, Context.MODE_PRIVATE);
+ SharedPreferences.Editor editor = sp.edit();
+ editor.putLong(APN_CONFIG_CHECKSUM, id);
+ editor.apply();
+ }
+
@Override
public Cursor query(Uri url, String[] projectionIn, String selection,
String[] selectionArgs, String sort) {
@@ -632,13 +683,13 @@ public class TelephonyProvider extends ContentProvider
"No permission to write APN settings");
}
- private SQLiteOpenHelper mOpenHelper;
+ private DatabaseHelper mOpenHelper;
private void restoreDefaultAPN() {
SQLiteDatabase db = mOpenHelper.getWritableDatabase();
db.delete(CARRIERS_TABLE, null, null);
setPreferredApnId((long)-1);
- ((DatabaseHelper) mOpenHelper).initDatabase(db);
+ mOpenHelper.initDatabase(db);
}
}