diff options
author | Chinmay Dhodapkar <chinmayd@google.com> | 2022-05-19 00:02:31 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2022-05-19 00:02:31 +0000 |
commit | 0644cdb55b1569368cac43ffa544947d0adc15e0 (patch) | |
tree | 9566e0dbee7dc1d7ab956b4879f91e0ae2168c3c | |
parent | 4bffa3006251b5479b76e869e931e7705afbb933 (diff) | |
parent | 3b4d76d9018e21d1ebe04136986e00b054a9c0b5 (diff) | |
download | CallLogProvider-0644cdb55b1569368cac43ffa544947d0adc15e0.tar.gz |
add null check for accountComponentName am: 041fa0d8e0 am: 4085f33fc2 am: 3b4d76d901
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/providers/CallLogProvider/+/18457757
Change-Id: I40e7738f9590dbc90e6925e6c037b454a81c52f1
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r-- | src/com/android/calllogbackup/CallLogBackupAgent.java | 6 | ||||
-rw-r--r-- | tests/src/com/android/calllogbackup/CallLogBackupAgentTest.java | 219 |
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; |