summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChinmay Dhodapkar <chinmayd@google.com>2022-05-18 23:07:42 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2022-05-18 23:07:42 +0000
commit3b4d76d9018e21d1ebe04136986e00b054a9c0b5 (patch)
tree9566e0dbee7dc1d7ab956b4879f91e0ae2168c3c
parent4bffa3006251b5479b76e869e931e7705afbb933 (diff)
parent4085f33fc2b0ba121d2c49272cd7d9d9e8d66086 (diff)
downloadCallLogProvider-android13-qpr3-c-s4-release.tar.gz
add null check for accountComponentName am: 041fa0d8e0 am: 4085f33fc2android-13.0.0_r83android-13.0.0_r82android-13.0.0_r81android-13.0.0_r80android-13.0.0_r79android-13.0.0_r78android-13.0.0_r77android-13.0.0_r76android-13.0.0_r75android-13.0.0_r74android-13.0.0_r73android-13.0.0_r72android-13.0.0_r71android-13.0.0_r70android-13.0.0_r69android-13.0.0_r68android-13.0.0_r67android-13.0.0_r66android-13.0.0_r65android-13.0.0_r64android-13.0.0_r63android-13.0.0_r62android-13.0.0_r61android-13.0.0_r60android-13.0.0_r59android-13.0.0_r58android-13.0.0_r56android-13.0.0_r54android-13.0.0_r53android-13.0.0_r52android-13.0.0_r51android-13.0.0_r50android-13.0.0_r49android-13.0.0_r48android-13.0.0_r47android-13.0.0_r46android-13.0.0_r45android-13.0.0_r44android-13.0.0_r43android-13.0.0_r42android-13.0.0_r41android-13.0.0_r40android-13.0.0_r39android-13.0.0_r38android-13.0.0_r37android-13.0.0_r36android-13.0.0_r35android-13.0.0_r34android-13.0.0_r33android-13.0.0_r32android13-qpr3-s9-releaseandroid13-qpr3-s8-releaseandroid13-qpr3-s7-releaseandroid13-qpr3-s6-releaseandroid13-qpr3-s5-releaseandroid13-qpr3-s4-releaseandroid13-qpr3-s3-releaseandroid13-qpr3-s2-releaseandroid13-qpr3-s14-releaseandroid13-qpr3-s13-releaseandroid13-qpr3-s12-releaseandroid13-qpr3-s11-releaseandroid13-qpr3-s10-releaseandroid13-qpr3-s1-releaseandroid13-qpr3-releaseandroid13-qpr3-c-s8-releaseandroid13-qpr3-c-s7-releaseandroid13-qpr3-c-s6-releaseandroid13-qpr3-c-s5-releaseandroid13-qpr3-c-s4-releaseandroid13-qpr3-c-s3-releaseandroid13-qpr3-c-s2-releaseandroid13-qpr3-c-s12-releaseandroid13-qpr3-c-s11-releaseandroid13-qpr3-c-s10-releaseandroid13-qpr3-c-s1-releaseandroid13-qpr2-s9-releaseandroid13-qpr2-s8-releaseandroid13-qpr2-s7-releaseandroid13-qpr2-s6-releaseandroid13-qpr2-s5-releaseandroid13-qpr2-s3-releaseandroid13-qpr2-s2-releaseandroid13-qpr2-s12-releaseandroid13-qpr2-s11-releaseandroid13-qpr2-s10-releaseandroid13-qpr2-s1-releaseandroid13-qpr2-releaseandroid13-qpr2-b-s1-releaseandroid13-d4-s2-releaseandroid13-d4-s1-releaseandroid13-d4-release
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/providers/CallLogProvider/+/18457757 Change-Id: I37dd75f24b54835ea1ce1d15c84b2ed7da720977 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r--src/com/android/calllogbackup/CallLogBackupAgent.java6
-rw-r--r--tests/src/com/android/calllogbackup/CallLogBackupAgentTest.java219
2 files changed, 224 insertions, 1 deletions
diff --git a/src/com/android/calllogbackup/CallLogBackupAgent.java b/src/com/android/calllogbackup/CallLogBackupAgent.java
index a64a373..8b58f99 100644
--- a/src/com/android/calllogbackup/CallLogBackupAgent.java
+++ b/src/com/android/calllogbackup/CallLogBackupAgent.java
@@ -448,7 +448,8 @@ public class CallLogBackupAgent extends BackupAgent {
Log.e(TAG, "Subscription database is not available.");
return false;
}
- if (accountComponentName.equals(TELEPHONY_PHONE_ACCOUNT_HANDLE_COMPONENT_NAME)
+ if (accountComponentName != null
+ && accountComponentName.equals(TELEPHONY_PHONE_ACCOUNT_HANDLE_COMPONENT_NAME)
&& isPhoneAccountMigrationPending != 1) {
return true;
}
@@ -501,7 +502,10 @@ public class CallLogBackupAgent extends BackupAgent {
iccId = mSubscriptionInfoMap.get(Integer.parseInt(call.accountId));
} catch (NullPointerException e) {
// Ignore, iccId will be null;
+ } catch(NumberFormatException e) {
+ // Ignore, iccId will be null;
}
+
if (iccId != null) {
Log.i(TAG, "processing PhoneAccountMigration Found Subid during Backup: "
+ call.accountId);
diff --git a/tests/src/com/android/calllogbackup/CallLogBackupAgentTest.java b/tests/src/com/android/calllogbackup/CallLogBackupAgentTest.java
index 9172330..4567e40 100644
--- a/tests/src/com/android/calllogbackup/CallLogBackupAgentTest.java
+++ b/tests/src/com/android/calllogbackup/CallLogBackupAgentTest.java
@@ -217,6 +217,53 @@ public class CallLogBackupAgentTest extends AndroidTestCase {
assertEquals(0, call.isPhoneAccountMigrationPending);
}
+ public void testReadCallFromCursor_WithNullAccountComponentName() throws Exception {
+ testReadCallFromCursor_WithNullField(CallLog.Calls.PHONE_ACCOUNT_COMPONENT_NAME);
+ }
+
+ public void testReadCallFromCursor_WithNullNumber() throws Exception {
+ testReadCallFromCursor_WithNullField(CallLog.Calls.NUMBER);
+ }
+
+ public void testReadCallFromCursor_WithNullPostDialDigits() throws Exception {
+ testReadCallFromCursor_WithNullField(CallLog.Calls.POST_DIAL_DIGITS);
+ }
+
+ public void testReadCallFromCursor_WithNullViaNumber() throws Exception {
+ testReadCallFromCursor_WithNullField(CallLog.Calls.VIA_NUMBER);
+ }
+
+ public void testReadCallFromCursor_WithNullPhoneAccountId() throws Exception {
+ testReadCallFromCursor_WithNullField(CallLog.Calls.PHONE_ACCOUNT_ID);
+ }
+
+ public void testReadCallFromCursor_WithNullCallAccountAddress() throws Exception {
+ testReadCallFromCursor_WithNullField(CallLog.Calls.PHONE_ACCOUNT_ADDRESS);
+ }
+
+ public void testReadCallFromCursor_WithNullCallScreeningAppName() throws Exception {
+ testReadCallFromCursor_WithNullField(CallLog.Calls.CALL_SCREENING_APP_NAME);
+ }
+
+ public void testReadCallFromCursor_WithNullCallScreeningComponentName() throws Exception {
+ testReadCallFromCursor_WithNullField(CallLog.Calls.CALL_SCREENING_COMPONENT_NAME);
+ }
+
+ public void testReadCallFromCursor_WithNullMissedReason() throws Exception {
+ testReadCallFromCursor_WithNullField(CallLog.Calls.MISSED_REASON);
+ }
+
+ private void testReadCallFromCursor_WithNullField(String field) throws Exception {
+ Map<Integer, String> subscriptionInfoMap = new HashMap<>();
+ subscriptionInfoMap.put(TEST_PHONE_ACCOUNT_HANDLE_SUB_ID_INT,
+ TEST_PHONE_ACCOUNT_HANDLE_ICC_ID);
+ mCallLogBackupAgent.mSubscriptionInfoMap = subscriptionInfoMap;
+
+ //read from cursor and not throw exception
+ mockCursorWithNullFields(mCursor, field);
+ Call call = mCallLogBackupAgent.readCallFromCursor(mCursor);
+ }
+
public void testRunBackup_MultipleCall() throws Exception {
CallLogBackupState state = new CallLogBackupState();
state.version = CallLogBackupAgent.VERSION;
@@ -385,6 +432,178 @@ public class CallLogBackupAgentTest extends AndroidTestCase {
CALL_IS_PHONE_ACCOUNT_MIGRATION_PENDING);
}
+ //sets up the mock cursor with specified column data (string) set to null
+ private static void mockCursorWithNullFields(Cursor cursor, String columnToNullify) {
+ when(cursor.moveToNext()).thenReturn(true).thenReturn(false);
+
+ int CALLS_ID_COLUMN_INDEX = 1;
+ int CALL_ID = 9;
+ when(cursor.getColumnIndex(CallLog.Calls._ID)).thenReturn(CALLS_ID_COLUMN_INDEX);
+ when(cursor.getInt(CALLS_ID_COLUMN_INDEX)).thenReturn(CALL_ID);
+
+ int CALLS_DATE_COLUMN_INDEX = 2;
+ long CALL_DATE = 20991231;
+ when(cursor.getColumnIndex(CallLog.Calls.DATE)).thenReturn(CALLS_DATE_COLUMN_INDEX);
+ when(cursor.getLong(CALLS_DATE_COLUMN_INDEX)).thenReturn(CALL_DATE);
+
+ int CALLS_DURATION_COLUMN_INDEX = 3;
+ long CALL_DURATION = 987654321;
+ when(cursor.getColumnIndex(CallLog.Calls.DURATION)).thenReturn(
+ CALLS_DURATION_COLUMN_INDEX);
+ when(cursor.getLong(CALLS_DURATION_COLUMN_INDEX)).thenReturn(CALL_DURATION);
+
+ int CALLS_NUMBER_COLUMN_INDEX = 4;
+ String CALL_NUMBER = "6316056461";
+ when(cursor.getColumnIndex(CallLog.Calls.NUMBER)).thenReturn(
+ CALLS_NUMBER_COLUMN_INDEX);
+ if (CallLog.Calls.NUMBER.equals(columnToNullify)) {
+ when(cursor.getString(CALLS_NUMBER_COLUMN_INDEX)).thenReturn(null);
+ } else {
+ when(cursor.getString(CALLS_NUMBER_COLUMN_INDEX)).thenReturn(CALL_NUMBER);
+ }
+
+ int CALLS_POST_DIAL_DIGITS_COLUMN_INDEX = 5;
+ String CALL_POST_DIAL_DIGITS = "54321";
+ when(cursor.getColumnIndex(CallLog.Calls.POST_DIAL_DIGITS)).thenReturn(
+ CALLS_POST_DIAL_DIGITS_COLUMN_INDEX);
+ if (CallLog.Calls.POST_DIAL_DIGITS.equals(columnToNullify)) {
+ when(cursor.getString(CALLS_POST_DIAL_DIGITS_COLUMN_INDEX)).thenReturn(
+ null);
+ } else {
+ when(cursor.getString(CALLS_POST_DIAL_DIGITS_COLUMN_INDEX)).thenReturn(
+ CALL_POST_DIAL_DIGITS);
+ }
+
+ int CALLS_VIA_NUMBER_COLUMN_INDEX = 6;
+ String CALL_VIA_NUMBER = "via_number";
+ when(cursor.getColumnIndex(CallLog.Calls.VIA_NUMBER)).thenReturn(
+ CALLS_VIA_NUMBER_COLUMN_INDEX);
+ if (CallLog.Calls.VIA_NUMBER.equals(columnToNullify)) {
+ when(cursor.getString(CALLS_VIA_NUMBER_COLUMN_INDEX)).thenReturn(
+ null);
+ } else {
+ when(cursor.getString(CALLS_VIA_NUMBER_COLUMN_INDEX)).thenReturn(
+ CALL_VIA_NUMBER);
+ }
+
+ int CALLS_TYPE_COLUMN_INDEX = 7;
+ int CALL_TYPE = CallLog.Calls.OUTGOING_TYPE;
+ when(cursor.getColumnIndex(CallLog.Calls.TYPE)).thenReturn(CALLS_TYPE_COLUMN_INDEX);
+ when(cursor.getInt(CALLS_TYPE_COLUMN_INDEX)).thenReturn(CALL_TYPE);
+
+ int CALLS_NUMBER_PRESENTATION_COLUMN_INDEX = 8;
+ int CALL_NUMBER_PRESENTATION = CallLog.Calls.PRESENTATION_ALLOWED;
+ when(cursor.getColumnIndex(CallLog.Calls.NUMBER_PRESENTATION)).thenReturn(
+ CALLS_NUMBER_PRESENTATION_COLUMN_INDEX);
+ when(cursor.getInt(CALLS_NUMBER_PRESENTATION_COLUMN_INDEX)).thenReturn(
+ CALL_NUMBER_PRESENTATION);
+
+ int CALLS_ACCOUNT_COMPONENT_NAME_COLUMN_INDEX = 9;
+ String CALL_ACCOUNT_COMPONENT_NAME = TELEPHONY_COMPONENT;
+ when(cursor.getColumnIndex(CallLog.Calls.PHONE_ACCOUNT_COMPONENT_NAME)).thenReturn(
+ CALLS_ACCOUNT_COMPONENT_NAME_COLUMN_INDEX);
+ if (CallLog.Calls.PHONE_ACCOUNT_COMPONENT_NAME.equals(columnToNullify)) {
+ when(cursor.getString(CALLS_ACCOUNT_COMPONENT_NAME_COLUMN_INDEX)).thenReturn(
+ null);
+ } else {
+ when(cursor.getString(CALLS_ACCOUNT_COMPONENT_NAME_COLUMN_INDEX)).thenReturn(
+ CALL_ACCOUNT_COMPONENT_NAME);
+ }
+
+ int CALLS_ACCOUNT_ID_COLUMN_INDEX = 10;
+ String CALL_ACCOUNT_ID = TEST_PHONE_ACCOUNT_HANDLE_SUB_ID;
+ when(cursor.getColumnIndex(CallLog.Calls.PHONE_ACCOUNT_ID)).thenReturn(
+ CALLS_ACCOUNT_ID_COLUMN_INDEX);
+ if (CallLog.Calls.PHONE_ACCOUNT_ID.equals(columnToNullify)) {
+ when(cursor.getString(CALLS_ACCOUNT_ID_COLUMN_INDEX)).thenReturn(
+ null);
+ } else {
+ when(cursor.getString(CALLS_ACCOUNT_ID_COLUMN_INDEX)).thenReturn(
+ CALL_ACCOUNT_ID);
+ }
+
+ int CALLS_ACCOUNT_ADDRESS_COLUMN_INDEX = 11;
+ String CALL_ACCOUNT_ADDRESS = "CALL_ACCOUNT_ADDRESS";
+ when(cursor.getColumnIndex(CallLog.Calls.PHONE_ACCOUNT_ADDRESS)).thenReturn(
+ CALLS_ACCOUNT_ADDRESS_COLUMN_INDEX);
+ if (CallLog.Calls.PHONE_ACCOUNT_ADDRESS.equals(columnToNullify)) {
+ when(cursor.getString(CALLS_ACCOUNT_ADDRESS_COLUMN_INDEX)).thenReturn(
+ null);
+ } else {
+ when(cursor.getString(CALLS_ACCOUNT_ADDRESS_COLUMN_INDEX)).thenReturn(
+ CALL_ACCOUNT_ADDRESS);
+ }
+
+ int CALLS_DATA_USAGE_COLUMN_INDEX = 12;
+ long CALL_DATA_USAGE = 987654321;
+ when(cursor.getColumnIndex(CallLog.Calls.DATA_USAGE)).thenReturn(
+ CALLS_DATA_USAGE_COLUMN_INDEX);
+ when(cursor.getLong(CALLS_DATA_USAGE_COLUMN_INDEX)).thenReturn(CALL_DATA_USAGE);
+
+ int CALLS_FEATURES_COLUMN_INDEX = 13;
+ int CALL_FEATURES = 777;
+ when(cursor.getColumnIndex(CallLog.Calls.FEATURES)).thenReturn(
+ CALLS_FEATURES_COLUMN_INDEX);
+ when(cursor.getInt(CALLS_FEATURES_COLUMN_INDEX)).thenReturn(CALL_FEATURES);
+
+ int CALLS_ADD_FOR_ALL_USERS_COLUMN_INDEX = 14;
+ int CALL_ADD_FOR_ALL_USERS = 1;
+ when(cursor.getColumnIndex(CallLog.Calls.ADD_FOR_ALL_USERS)).thenReturn(
+ CALLS_ADD_FOR_ALL_USERS_COLUMN_INDEX);
+ when(cursor.getInt(CALLS_ADD_FOR_ALL_USERS_COLUMN_INDEX)).thenReturn(
+ CALL_ADD_FOR_ALL_USERS);
+
+ int CALLS_BLOCK_REASON_COLUMN_INDEX = 15;
+ int CALL_BLOCK_REASON = CallLog.Calls.BLOCK_REASON_NOT_BLOCKED;
+ when(cursor.getColumnIndex(CallLog.Calls.BLOCK_REASON)).thenReturn(
+ CALLS_BLOCK_REASON_COLUMN_INDEX);
+ when(cursor.getInt(CALLS_BLOCK_REASON_COLUMN_INDEX)).thenReturn(
+ CALL_BLOCK_REASON);
+
+ int CALLS_CALL_SCREENING_APP_NAME_COLUMN_INDEX = 16;
+ String CALL_CALL_SCREENING_APP_NAME = "CALL_CALL_SCREENING_APP_NAME";
+ when(cursor.getColumnIndex(CallLog.Calls.CALL_SCREENING_APP_NAME)).thenReturn(
+ CALLS_CALL_SCREENING_APP_NAME_COLUMN_INDEX);
+ if (CallLog.Calls.CALL_SCREENING_APP_NAME.equals(columnToNullify)) {
+ when(cursor.getString(CALLS_CALL_SCREENING_APP_NAME_COLUMN_INDEX)).thenReturn(
+ null);
+ } else {
+ when(cursor.getString(CALLS_CALL_SCREENING_APP_NAME_COLUMN_INDEX)).thenReturn(
+ CALL_CALL_SCREENING_APP_NAME);
+ }
+
+ int CALLS_CALL_SCREENING_COMPONENT_NAME_COLUMN_INDEX = 17;
+ String CALL_CALL_SCREENING_COMPONENT_NAME = "CALL_CALL_SCREENING_COMPONENT_NAME";
+ when(cursor.getColumnIndex(CallLog.Calls.CALL_SCREENING_COMPONENT_NAME)).thenReturn(
+ CALLS_CALL_SCREENING_COMPONENT_NAME_COLUMN_INDEX);
+ if (CallLog.Calls.CALL_SCREENING_COMPONENT_NAME.equals(columnToNullify)) {
+ when(cursor.getString(CALLS_CALL_SCREENING_COMPONENT_NAME_COLUMN_INDEX)).thenReturn(
+ null);
+ } else {
+ when(cursor.getString(CALLS_CALL_SCREENING_COMPONENT_NAME_COLUMN_INDEX)).thenReturn(
+ CALL_CALL_SCREENING_COMPONENT_NAME);
+ }
+
+ int CALLS_MISSED_REASON_COLUMN_INDEX = 18;
+ String CALL_MISSED_REASON = "CALL_MISSED_REASON";
+ when(cursor.getColumnIndex(CallLog.Calls.MISSED_REASON)).thenReturn(
+ CALLS_MISSED_REASON_COLUMN_INDEX);
+ if (CallLog.Calls.MISSED_REASON.equals(columnToNullify)) {
+ when(cursor.getString(CALLS_MISSED_REASON_COLUMN_INDEX)).thenReturn(
+ null);
+ } else {
+ when(cursor.getString(CALLS_MISSED_REASON_COLUMN_INDEX)).thenReturn(
+ CALL_MISSED_REASON);
+ }
+
+ int CALLS_IS_PHONE_ACCOUNT_MIGRATION_PENDING_COLUMN_INDEX = 19;
+ int CALL_IS_PHONE_ACCOUNT_MIGRATION_PENDING = 0;
+ when(cursor.getColumnIndex(CallLog.Calls.IS_PHONE_ACCOUNT_MIGRATION_PENDING)).thenReturn(
+ CALLS_IS_PHONE_ACCOUNT_MIGRATION_PENDING_COLUMN_INDEX);
+ when(cursor.getInt(CALLS_IS_PHONE_ACCOUNT_MIGRATION_PENDING_COLUMN_INDEX)).thenReturn(
+ CALL_IS_PHONE_ACCOUNT_MIGRATION_PENDING);
+ }
+
private static Call makeCall(int id, long date, long duration, String number) {
Call c = new Call();
c.id = id;