diff options
author | Santos Cordon <santoscordon@google.com> | 2015-02-11 22:21:00 -0800 |
---|---|---|
committer | Santos Cordon <santoscordon@google.com> | 2015-02-19 23:42:50 -0800 |
commit | 423f9bc8fed50e2caacd6f99f3160494f15c0a67 (patch) | |
tree | 311498ccba2fa39497934d94716ad8aea3bbee1d | |
parent | ddd1e137585848bc58823e4f6e997ccf61b1b244 (diff) | |
download | packages_providers_ContactsProvider-423f9bc8fed50e2caacd6f99f3160494f15c0a67.zip packages_providers_ContactsProvider-423f9bc8fed50e2caacd6f99f3160494f15c0a67.tar.gz packages_providers_ContactsProvider-423f9bc8fed50e2caacd6f99f3160494f15c0a67.tar.bz2 |
Upgrade calllog DB to use ICC ID & source_phone_number.
To accomodate backup and restore of the call log, we have to convert the
existing sub-ID to an ICC ID. Also, add the source_phone_number to the
list of call log columns.
The ICC ID improves backup and restore because it is persistent across
different devices where a sub ID is not. If the user completely changes
their SIM card, the source_phone_number will be helpful in identifying
that scenario if the user kept their old phone.
Change-Id: Ib35e25216691e580b5ea539929ff16b2e3d30b88
3 files changed, 43 insertions, 3 deletions
diff --git a/src/com/android/providers/contacts/CallLogProvider.java b/src/com/android/providers/contacts/CallLogProvider.java index d4339b0..6bf913e 100644 --- a/src/com/android/providers/contacts/CallLogProvider.java +++ b/src/com/android/providers/contacts/CallLogProvider.java @@ -108,6 +108,7 @@ public class CallLogProvider extends ContentProvider { sCallsProjectionMap.put(Calls.FEATURES, Calls.FEATURES); sCallsProjectionMap.put(Calls.PHONE_ACCOUNT_COMPONENT_NAME, Calls.PHONE_ACCOUNT_COMPONENT_NAME); sCallsProjectionMap.put(Calls.PHONE_ACCOUNT_ID, Calls.PHONE_ACCOUNT_ID); + sCallsProjectionMap.put(Calls.PHONE_ACCOUNT_ADDRESS, Calls.PHONE_ACCOUNT_ADDRESS); sCallsProjectionMap.put(Calls.NEW, Calls.NEW); sCallsProjectionMap.put(Calls.VOICEMAIL_URI, Calls.VOICEMAIL_URI); sCallsProjectionMap.put(Calls.TRANSCRIPTION, Calls.TRANSCRIPTION); diff --git a/src/com/android/providers/contacts/ContactsDatabaseHelper.java b/src/com/android/providers/contacts/ContactsDatabaseHelper.java index e4688ee..fc4d343 100644 --- a/src/com/android/providers/contacts/ContactsDatabaseHelper.java +++ b/src/com/android/providers/contacts/ContactsDatabaseHelper.java @@ -16,6 +16,7 @@ package com.android.providers.contacts; +import android.content.ComponentName; import android.content.ContentResolver; import android.content.ContentValues; import android.content.Context; @@ -73,6 +74,8 @@ import android.provider.ContactsContract.StreamItems; import android.provider.VoicemailContract; import android.provider.VoicemailContract.Voicemails; import android.telephony.PhoneNumberUtils; +import android.telephony.SubscriptionInfo; +import android.telephony.SubscriptionManager; import android.text.TextUtils; import android.text.util.Rfc822Token; import android.text.util.Rfc822Tokenizer; @@ -84,7 +87,6 @@ import com.android.providers.contacts.database.ContactsTableUtil; import com.android.providers.contacts.database.DeletedContactsTableUtil; import com.android.providers.contacts.database.MoreDatabaseUtils; import com.android.providers.contacts.util.NeededForTesting; - import com.google.android.collect.Sets; import com.google.common.annotations.VisibleForTesting; @@ -119,7 +121,7 @@ public class ContactsDatabaseHelper extends SQLiteOpenHelper { * 1000-1100 M * </pre> */ - static final int DATABASE_VERSION = 1002; + static final int DATABASE_VERSION = 1003; public interface Tables { public static final String CONTACTS = "contacts"; @@ -1516,6 +1518,7 @@ public class ContactsDatabaseHelper extends SQLiteOpenHelper { Calls.FEATURES + " INTEGER NOT NULL DEFAULT 0," + Calls.PHONE_ACCOUNT_COMPONENT_NAME + " TEXT," + Calls.PHONE_ACCOUNT_ID + " TEXT," + + Calls.PHONE_ACCOUNT_ADDRESS + " TEXT," + Calls.SUB_ID + " INTEGER DEFAULT -1," + Calls.NEW + " INTEGER," + Calls.CACHED_NAME + " TEXT," + @@ -2873,6 +2876,11 @@ public class ContactsDatabaseHelper extends SQLiteOpenHelper { oldVersion = 1002; } + if (oldVersion < 1003) { + upgradeToVersion1003(db); + oldVersion = 1003; + } + if (upgradeViewsAndTriggers) { createContactsViews(db); createGroupsView(db); @@ -4335,6 +4343,37 @@ public class ContactsDatabaseHelper extends SQLiteOpenHelper { "expiration INTEGER NOT NULL DEFAULT 0);"); } + public void upgradeToVersion1003(SQLiteDatabase db) { + db.execSQL("ALTER TABLE calls ADD phone_account_address TEXT;"); + + // After version 1003, we are using the ICC ID as the phone-account ID. This code updates + // any existing telephony connection-service calllog entries to the ICC ID from the + // previously used subscription ID. + // TODO: This is inconsistent, depending on the initialization state of SubscriptionManager. + // Sometimes it returns zero subscriptions. May want to move this upgrade to run after + // ON_BOOT_COMPLETE instead of PRE_BOOT_COMPLETE. + SubscriptionManager sm = SubscriptionManager.from(mContext); + if (sm != null) { + Log.i(TAG, "count: " + sm.getAllSubscriptionInfoCount()); + for (SubscriptionInfo info : sm.getAllSubscriptionInfoList()) { + String iccId = info.getIccId(); + int subId = info.getSubscriptionId(); + if (!TextUtils.isEmpty(iccId) && + subId != SubscriptionManager.INVALID_SUBSCRIPTION_ID) { + StringBuilder sb = new StringBuilder(); + sb.append("UPDATE calls SET subscription_id="); + DatabaseUtils.appendEscapedSQLString(sb, iccId); + sb.append(" WHERE subscription_id="); + sb.append(subId); + sb.append(" AND subscription_component_name='com.android.phone/" + + "com.android.services.telephony.TelephonyConnectionService';"); + + db.execSQL(sb.toString()); + } + } + } + } + public String extractHandleFromEmailAddress(String email) { Rfc822Token[] tokens = Rfc822Tokenizer.tokenize(email); if (tokens.length == 0) { diff --git a/tests/src/com/android/providers/contacts/CallLogProviderTest.java b/tests/src/com/android/providers/contacts/CallLogProviderTest.java index d879dd9..b8233f6 100644 --- a/tests/src/com/android/providers/contacts/CallLogProviderTest.java +++ b/tests/src/com/android/providers/contacts/CallLogProviderTest.java @@ -62,7 +62,7 @@ public class CallLogProviderTest extends BaseContactsProvider2Test { Voicemails.SOURCE_DATA, Voicemails.STATE}; /** Total number of columns exposed by call_log provider. */ - private static final int NUM_CALLLOG_FIELDS = 24; + private static final int NUM_CALLLOG_FIELDS = 25; private CallLogProvider mCallLogProvider; |