diff options
author | Wink Saville <wink@google.com> | 2011-06-04 08:58:31 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2011-06-04 08:58:31 -0700 |
commit | 87f6b905c950777f038ce8902a66f6527ef57de4 (patch) | |
tree | bf7ba9a62e22d926883da1a385d662fde37d14d6 /src/com/android/providers/telephony/TelephonyProvider.java | |
parent | b9bd35d3c07b3dbab97dcabb521d7909304670c9 (diff) | |
parent | 607ead75c55146786d79e09f36d069cf3a81eb60 (diff) | |
download | android_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.java | 59 |
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); } } |