Loading src/com/android/server/telecom/CallLogManager.java +24 −1 Original line number Diff line number Diff line Loading @@ -40,7 +40,14 @@ import android.telephony.PhoneNumberUtils; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.telephony.CallerInfo; import java.util.Arrays; import java.util.HashSet; import java.util.LinkedHashSet; import java.util.Locale; import java.util.Objects; import java.util.Set; import java.util.stream.Collectors; import java.util.stream.Stream; /** * Helper class that provides functionality to write information about calls and their associated Loading Loading @@ -290,7 +297,8 @@ public final class CallLogManager extends CallsManagerListenerBase { } // Don't log emergency numbers if the device doesn't allow it. final boolean isOkToLogThisCall = !isEmergency || okToLogEmergencyNumber; final boolean isOkToLogThisCall = (!isEmergency || okToLogEmergencyNumber) && !isUnloggableNumber(number, configBundle); sendAddCallBroadcast(callType, duration); Loading @@ -313,6 +321,21 @@ public final class CallLogManager extends CallsManagerListenerBase { } } private boolean isUnloggableNumber(String callNumber, PersistableBundle carrierConfig) { String normalizedNumber = PhoneNumberUtils.normalizeNumber(callNumber); String[] unloggableNumbersFromCarrierConfig = carrierConfig == null ? null : carrierConfig.getStringArray( CarrierConfigManager.KEY_UNLOGGABLE_NUMBERS_STRING_ARRAY); String[] unloggableNumbersFromMccConfig = mContext.getResources() .getStringArray(com.android.internal.R.array.unloggable_phone_numbers); return Stream.concat( unloggableNumbersFromCarrierConfig == null ? Stream.empty() : Arrays.stream(unloggableNumbersFromCarrierConfig), unloggableNumbersFromMccConfig == null ? Stream.empty() : Arrays.stream(unloggableNumbersFromMccConfig) ).anyMatch(unloggableNumber -> Objects.equals(unloggableNumber, normalizedNumber)); } /** * Based on the video state of the call, determines the call features applicable for the call. * Loading tests/src/com/android/server/telecom/tests/CallLogManagerTest.java +52 −0 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ import android.content.ContentValues; import android.content.Context; import android.content.IContentProvider; import android.content.pm.UserInfo; import android.content.res.Resources; import android.location.Country; import android.location.CountryDetector; import android.location.CountryListener; Loading Loading @@ -214,6 +215,57 @@ public class CallLogManagerTest extends TelecomTestCase { verifyNoInsertion(); } @MediumTest @Test public void testDontLogUnloggableNumbers() { // Set up the carrier config source String number1 = "90000"; String number2 = "80000"; CarrierConfigManager mockCarrierConfigManager = (CarrierConfigManager) mComponentContextFixture.getTestDouble() .getApplicationContext().getSystemService(Context.CARRIER_CONFIG_SERVICE); PersistableBundle bundle = new PersistableBundle(); bundle.putStringArray(CarrierConfigManager.KEY_UNLOGGABLE_NUMBERS_STRING_ARRAY, new String[] {number1}); when(mockCarrierConfigManager.getConfig()).thenReturn(bundle); Resources mockResources = mContext.getResources(); when(mockResources.getStringArray(com.android.internal.R.array.unloggable_phone_numbers)) .thenReturn(new String[] {number2}); Call fakeCall1 = makeFakeCall( DisconnectCause.OTHER, // disconnectCauseCode false, // isConference false, // isIncoming 1L, // creationTimeMillis 1000L, // ageMillis Uri.parse("tel:" + number1), EMERGENCY_ACCT_HANDLE, // phoneAccountHandle NO_VIDEO_STATE, // callVideoState POST_DIAL_STRING, // postDialDigits VIA_NUMBER_STRING, // viaNumber UserHandle.of(CURRENT_USER_ID) ); Call fakeCall2 = makeFakeCall( DisconnectCause.OTHER, // disconnectCauseCode false, // isConference false, // isIncoming 1L, // creationTimeMillis 1000L, // ageMillis Uri.parse("tel:" + number2), EMERGENCY_ACCT_HANDLE, // phoneAccountHandle NO_VIDEO_STATE, // callVideoState POST_DIAL_STRING, // postDialDigits VIA_NUMBER_STRING, // viaNumber UserHandle.of(CURRENT_USER_ID) ); mCallLogManager.onCallStateChanged(fakeCall1, CallState.ACTIVE, CallState.DISCONNECTED); mCallLogManager.onCallStateChanged(fakeCall2, CallState.ACTIVE, CallState.DISCONNECTED); verifyNoInsertion(); } @MediumTest @Test public void testDontLogCallsFromEmergencyAccount() { Loading Loading
src/com/android/server/telecom/CallLogManager.java +24 −1 Original line number Diff line number Diff line Loading @@ -40,7 +40,14 @@ import android.telephony.PhoneNumberUtils; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.telephony.CallerInfo; import java.util.Arrays; import java.util.HashSet; import java.util.LinkedHashSet; import java.util.Locale; import java.util.Objects; import java.util.Set; import java.util.stream.Collectors; import java.util.stream.Stream; /** * Helper class that provides functionality to write information about calls and their associated Loading Loading @@ -290,7 +297,8 @@ public final class CallLogManager extends CallsManagerListenerBase { } // Don't log emergency numbers if the device doesn't allow it. final boolean isOkToLogThisCall = !isEmergency || okToLogEmergencyNumber; final boolean isOkToLogThisCall = (!isEmergency || okToLogEmergencyNumber) && !isUnloggableNumber(number, configBundle); sendAddCallBroadcast(callType, duration); Loading @@ -313,6 +321,21 @@ public final class CallLogManager extends CallsManagerListenerBase { } } private boolean isUnloggableNumber(String callNumber, PersistableBundle carrierConfig) { String normalizedNumber = PhoneNumberUtils.normalizeNumber(callNumber); String[] unloggableNumbersFromCarrierConfig = carrierConfig == null ? null : carrierConfig.getStringArray( CarrierConfigManager.KEY_UNLOGGABLE_NUMBERS_STRING_ARRAY); String[] unloggableNumbersFromMccConfig = mContext.getResources() .getStringArray(com.android.internal.R.array.unloggable_phone_numbers); return Stream.concat( unloggableNumbersFromCarrierConfig == null ? Stream.empty() : Arrays.stream(unloggableNumbersFromCarrierConfig), unloggableNumbersFromMccConfig == null ? Stream.empty() : Arrays.stream(unloggableNumbersFromMccConfig) ).anyMatch(unloggableNumber -> Objects.equals(unloggableNumber, normalizedNumber)); } /** * Based on the video state of the call, determines the call features applicable for the call. * Loading
tests/src/com/android/server/telecom/tests/CallLogManagerTest.java +52 −0 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ import android.content.ContentValues; import android.content.Context; import android.content.IContentProvider; import android.content.pm.UserInfo; import android.content.res.Resources; import android.location.Country; import android.location.CountryDetector; import android.location.CountryListener; Loading Loading @@ -214,6 +215,57 @@ public class CallLogManagerTest extends TelecomTestCase { verifyNoInsertion(); } @MediumTest @Test public void testDontLogUnloggableNumbers() { // Set up the carrier config source String number1 = "90000"; String number2 = "80000"; CarrierConfigManager mockCarrierConfigManager = (CarrierConfigManager) mComponentContextFixture.getTestDouble() .getApplicationContext().getSystemService(Context.CARRIER_CONFIG_SERVICE); PersistableBundle bundle = new PersistableBundle(); bundle.putStringArray(CarrierConfigManager.KEY_UNLOGGABLE_NUMBERS_STRING_ARRAY, new String[] {number1}); when(mockCarrierConfigManager.getConfig()).thenReturn(bundle); Resources mockResources = mContext.getResources(); when(mockResources.getStringArray(com.android.internal.R.array.unloggable_phone_numbers)) .thenReturn(new String[] {number2}); Call fakeCall1 = makeFakeCall( DisconnectCause.OTHER, // disconnectCauseCode false, // isConference false, // isIncoming 1L, // creationTimeMillis 1000L, // ageMillis Uri.parse("tel:" + number1), EMERGENCY_ACCT_HANDLE, // phoneAccountHandle NO_VIDEO_STATE, // callVideoState POST_DIAL_STRING, // postDialDigits VIA_NUMBER_STRING, // viaNumber UserHandle.of(CURRENT_USER_ID) ); Call fakeCall2 = makeFakeCall( DisconnectCause.OTHER, // disconnectCauseCode false, // isConference false, // isIncoming 1L, // creationTimeMillis 1000L, // ageMillis Uri.parse("tel:" + number2), EMERGENCY_ACCT_HANDLE, // phoneAccountHandle NO_VIDEO_STATE, // callVideoState POST_DIAL_STRING, // postDialDigits VIA_NUMBER_STRING, // viaNumber UserHandle.of(CURRENT_USER_ID) ); mCallLogManager.onCallStateChanged(fakeCall1, CallState.ACTIVE, CallState.DISCONNECTED); mCallLogManager.onCallStateChanged(fakeCall2, CallState.ACTIVE, CallState.DISCONNECTED); verifyNoInsertion(); } @MediumTest @Test public void testDontLogCallsFromEmergencyAccount() { Loading