Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 998be8b4 authored by Hall Liu's avatar Hall Liu Committed by android-build-merger
Browse files

Don't insert certain numbers into the call log am: d92a693e

am: 5e593ade

Change-Id: I19d8ebf99f92c46b3e552d4610716d699f20101f
parents 7ceefe1f 5e593ade
Loading
Loading
Loading
Loading
+24 −1
Original line number Diff line number Diff line
@@ -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
@@ -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);

@@ -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.
     *
+52 −0
Original line number Diff line number Diff line
@@ -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;
@@ -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() {