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

Commit 4b86ad48 authored by Android Build Coastguard Worker's avatar Android Build Coastguard Worker
Browse files

Snap for 9921839 from f1be5264 to udc-release

Change-Id: I386f2751029b29f0b21963fc1a2ecc7b8f9631b6
parents 4d311693 f1be5264
Loading
Loading
Loading
Loading
+87 −59
Original line number Diff line number Diff line
@@ -23,12 +23,14 @@ import android.content.Context;
import android.net.Uri;
import android.os.Bundle;
import android.os.PersistableBundle;
import android.os.UserHandle;
import android.telecom.PhoneAccount;
import android.telecom.PhoneAccountHandle;
import android.telecom.TelecomManager;
import android.telephony.CarrierConfigManager;
import android.telephony.Rlog;
import android.telephony.SmsMessage;
import android.telephony.SubscriptionManager;
import android.text.TextUtils;

import java.time.Instant;
@@ -152,9 +154,6 @@ public class MissedIncomingCallSmsFilter {
     * @return {@code true} if the SMS message has been processed as a missed incoming call SMS.
     */
    private boolean processSms(@NonNull SmsMessage message) {
        long missedCallTime = 0;
        String callerId = null;

        String[] smsPatterns = mCarrierConfig.getStringArray(CarrierConfigManager
                .KEY_MISSED_INCOMING_CALL_SMS_PATTERN_STRING_ARRAY);
        if (smsPatterns == null || smsPatterns.length == 0) {
@@ -162,6 +161,12 @@ public class MissedIncomingCallSmsFilter {
            return false;
        }

        boolean result = false;
        String[] missedCallMsgs = splitTheMultipleCalls(message.getMessageBody());
        if (missedCallMsgs != null && missedCallMsgs.length > 0) {
            for (String parsedMsg : missedCallMsgs) {
                long missedCallTime = 0;
                String callerId = null;
                for (String smsPattern : smsPatterns) {
                    Pattern pattern;
                    try {
@@ -172,7 +177,7 @@ public class MissedIncomingCallSmsFilter {
                        continue;
                    }

            Matcher matcher = pattern.matcher(message.getMessageBody());
                    Matcher matcher = pattern.matcher(parsedMsg);
                    String year = null, month = null, day = null, hour = null, minute = null;
                    if (matcher.find()) {
                        try {
@@ -220,18 +225,41 @@ public class MissedIncomingCallSmsFilter {
                            Rlog.d(TAG, "Caller id is not provided or can't be parsed.");
                        }
                        createMissedIncomingCallEvent(missedCallTime, callerId);
                return true;
                        result = true;
                        break;
                    }
                }

            }
        }
        if (!result) {
            Rlog.d(TAG, "SMS did not match any missed incoming call SMS pattern.");
        return false;
        }
        return result;
    }

    private String[] splitTheMultipleCalls(String messageBody) {
        String[] messages = null;
        if (messageBody != null) {
            messages = messageBody.split("\\n" + "\\n");
            Rlog.d(TAG,
                    "splitTheMultipleCalls no of calls = " + ((messages != null) ? messages.length
                            : 0));
        }
        return messages;
    }

    // Create phone account. The logic is copied from PhoneUtils.makePstnPhoneAccountHandleWithId.
    private static PhoneAccountHandle makePstnPhoneAccountHandle(Phone phone) {
    private PhoneAccountHandle makePstnPhoneAccountHandle(Phone phone) {
        SubscriptionManager subscriptionManager =
                (SubscriptionManager) phone.getContext().getSystemService(
                        Context.TELEPHONY_SUBSCRIPTION_SERVICE);
        UserHandle userHandle = subscriptionManager.getSubscriptionUserHandle(phone.getSubId());
        if (userHandle != null) {
            return new PhoneAccountHandle(PSTN_CONNECTION_SERVICE_COMPONENT,
                    String.valueOf(phone.getSubId()), userHandle);
        }
        return new PhoneAccountHandle(PSTN_CONNECTION_SERVICE_COMPONENT,
                String.valueOf(phone.getSubId()), phone.getUserHandle());
                String.valueOf(phone.getSubId()));
    }

    /**
+16 −1
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ import android.os.AsyncResult;
import android.os.Binder;
import android.telephony.Rlog;
import android.telephony.SubscriptionManager;
import android.telephony.satellite.AntennaPosition;
import android.telephony.satellite.PointingInfo;
import android.telephony.satellite.SatelliteCapabilities;
import android.telephony.satellite.SatelliteDatagram;
@@ -39,6 +40,8 @@ import com.android.internal.telephony.SubscriptionController;
import com.android.internal.telephony.subscription.SubscriptionManagerService;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.stream.Collectors;

/**
@@ -157,11 +160,23 @@ public class SatelliteServiceUtils {
        if (capabilities == null) return null;
        int[] radioTechnologies = capabilities.supportedRadioTechnologies == null
                ? new int[0] : capabilities.supportedRadioTechnologies;

        Map<Integer, AntennaPosition> antennaPositionMap = new HashMap<>();
        int[] antennaPositionKeys = capabilities.antennaPositionKeys;
        AntennaPosition[] antennaPositionValues = capabilities.antennaPositionValues;
        if (antennaPositionKeys != null && antennaPositionValues != null &&
                antennaPositionKeys.length == antennaPositionValues.length) {
            for(int i = 0; i < antennaPositionKeys.length; i++) {
                antennaPositionMap.put(antennaPositionKeys[i], antennaPositionValues[i]);
            }
        }

        return new SatelliteCapabilities(
                Arrays.stream(radioTechnologies)
                        .map(SatelliteServiceUtils::fromSatelliteRadioTechnology)
                        .boxed().collect(Collectors.toSet()),
                capabilities.isPointingRequired, capabilities.maxBytesPerOutgoingDatagram);
                capabilities.isPointingRequired, capabilities.maxBytesPerOutgoingDatagram,
                antennaPositionMap);
    }

    /**
+52 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2023 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.internal.telephony.satellite;

import static com.google.common.truth.Truth.assertThat;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals;

import android.os.Parcel;
import android.telephony.satellite.AntennaDirection;

import org.junit.Test;

public class AntennaDirectionTest {

    @Test
    public void testParcel() {
        AntennaDirection antennaDirection = new AntennaDirection(1, 2, 3);

        Parcel p = Parcel.obtain();
        antennaDirection.writeToParcel(p, 0);
        p.setDataPosition(0);

        AntennaDirection fromParcel = AntennaDirection.CREATOR.createFromParcel(p);
        assertThat(antennaDirection).isEqualTo(fromParcel);
    }

    @Test
    public void testEquals() {
        AntennaDirection antennaDirection1 = new AntennaDirection(1.12f, 1.13f, 1.14f);
        AntennaDirection antennaDirection2 = new AntennaDirection(1.12f, 1.13f, 1.14f);
        assertEquals(antennaDirection1, antennaDirection2);

        AntennaDirection antennaDirection3 = new AntennaDirection(1.121f, 1.131f, 1.141f);
        assertNotEquals(antennaDirection1, antennaDirection3);
    }
}
+60 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2023 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.internal.telephony.satellite;

import static com.google.common.truth.Truth.assertThat;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals;

import android.os.Parcel;
import android.telephony.satellite.AntennaDirection;
import android.telephony.satellite.AntennaPosition;
import android.telephony.satellite.SatelliteManager;

import org.junit.Test;

public class AntennaPositionTest {

    private AntennaDirection mAntennaDirection = new AntennaDirection(1,1,1);

    @Test
    public void testParcel() {
        AntennaPosition antennaPosition = new AntennaPosition(mAntennaDirection,
                SatelliteManager.DEVICE_HOLD_POSITION_PORTRAIT);

        Parcel p = Parcel.obtain();
        antennaPosition.writeToParcel(p, 0);
        p.setDataPosition(0);

        AntennaPosition fromParcel = AntennaPosition.CREATOR.createFromParcel(p);
        assertThat(antennaPosition).isEqualTo(fromParcel);
    }

    @Test
    public void testEquals() {
        AntennaPosition antennaPosition1 = new AntennaPosition(mAntennaDirection,
                SatelliteManager.DEVICE_HOLD_POSITION_PORTRAIT);
        AntennaPosition antennaPosition2 = new AntennaPosition(mAntennaDirection,
                SatelliteManager.DEVICE_HOLD_POSITION_PORTRAIT);
        assertEquals(antennaPosition1, antennaPosition2);

        AntennaPosition antennaPosition3 = new AntennaPosition(mAntennaDirection,
                SatelliteManager.DEVICE_HOLD_POSITION_LANDSCAPE_LEFT);
        assertNotEquals(antennaPosition1, antennaPosition3);
    }
}
+134 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2023 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.internal.telephony.satellite;

import static com.google.common.truth.Truth.assertThat;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals;

import android.os.Parcel;
import android.telephony.satellite.AntennaDirection;
import android.telephony.satellite.AntennaPosition;
import android.telephony.satellite.SatelliteCapabilities;
import android.telephony.satellite.SatelliteManager;

import org.junit.Test;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

public class SatelliteCapabilitiesTest {

    private AntennaDirection mAntennaDirection = new AntennaDirection(1,1,1);

    @Test
    public void testParcel() {
        Set<Integer> satelliteRadioTechnologies = new HashSet<>();
        satelliteRadioTechnologies.add(SatelliteManager.NT_RADIO_TECHNOLOGY_NB_IOT_NTN);
        satelliteRadioTechnologies.add(SatelliteManager.NT_RADIO_TECHNOLOGY_NR_NTN);

        Map<Integer, AntennaPosition> antennaPositionMap = new HashMap<>();
        AntennaPosition antennaPosition = new AntennaPosition(mAntennaDirection,
                SatelliteManager.DEVICE_HOLD_POSITION_PORTRAIT);
        antennaPositionMap.put(SatelliteManager.DISPLAY_MODE_OPENED, antennaPosition);

        SatelliteCapabilities capabilities = new SatelliteCapabilities(satelliteRadioTechnologies,
                true, 10, antennaPositionMap);

        Parcel p = Parcel.obtain();
        capabilities.writeToParcel(p, 0);
        p.setDataPosition(0);

        SatelliteCapabilities fromParcel = SatelliteCapabilities.CREATOR.createFromParcel(p);
        assertThat(capabilities).isEqualTo(fromParcel);
    }

    @Test
    public void testParcel_emptySatelliteRadioTechnologies() {
        Set<Integer> satelliteRadioTechnologies = new HashSet<>();

        Map<Integer, AntennaPosition> antennaPositionMap = new HashMap<>();
        AntennaPosition antennaPosition1 = new AntennaPosition(mAntennaDirection,
                SatelliteManager.DEVICE_HOLD_POSITION_PORTRAIT);
        AntennaPosition antennaPosition2 = new AntennaPosition(mAntennaDirection,
                SatelliteManager.DEVICE_HOLD_POSITION_LANDSCAPE_LEFT);
        antennaPositionMap.put(SatelliteManager.DISPLAY_MODE_OPENED, antennaPosition1);
        antennaPositionMap.put(SatelliteManager.DISPLAY_MODE_CLOSED, antennaPosition2);

        SatelliteCapabilities capabilities = new SatelliteCapabilities(satelliteRadioTechnologies,
                false, 100, antennaPositionMap);

        Parcel p = Parcel.obtain();
        capabilities.writeToParcel(p, 0);
        p.setDataPosition(0);

        SatelliteCapabilities fromParcel = SatelliteCapabilities.CREATOR.createFromParcel(p);
        assertThat(capabilities).isEqualTo(fromParcel);
    }


    @Test
    public void testParcel_emptyAntennaPosition() {
        Set<Integer> satelliteRadioTechnologies = new HashSet<>();
        satelliteRadioTechnologies.add(SatelliteManager.NT_RADIO_TECHNOLOGY_EMTC_NTN);

        SatelliteCapabilities capabilities = new SatelliteCapabilities(satelliteRadioTechnologies,
                true, 0, new HashMap<>());

        Parcel p = Parcel.obtain();
        capabilities.writeToParcel(p, 0);
        p.setDataPosition(0);

        SatelliteCapabilities fromParcel = SatelliteCapabilities.CREATOR.createFromParcel(p);
        assertThat(capabilities).isEqualTo(fromParcel);
    }

    @Test
    public void testEquals() {
        Set<Integer> satelliteRadioTechnologies = new HashSet<>();
        satelliteRadioTechnologies.add(SatelliteManager.NT_RADIO_TECHNOLOGY_NB_IOT_NTN);
        satelliteRadioTechnologies.add(SatelliteManager.NT_RADIO_TECHNOLOGY_NR_NTN);

        AntennaPosition antennaPosition1 = new AntennaPosition(mAntennaDirection,
                SatelliteManager.DEVICE_HOLD_POSITION_PORTRAIT);
        AntennaPosition antennaPosition2 = new AntennaPosition(mAntennaDirection,
                SatelliteManager.DEVICE_HOLD_POSITION_LANDSCAPE_LEFT);

        Map<Integer, AntennaPosition> antennaPositionMap1 = new HashMap<>();
        antennaPositionMap1.put(SatelliteManager.DISPLAY_MODE_OPENED, antennaPosition1);
        antennaPositionMap1.put(SatelliteManager.DISPLAY_MODE_CLOSED, antennaPosition2);

        SatelliteCapabilities satelliteCapabilities1 =
                new SatelliteCapabilities(satelliteRadioTechnologies, true, 10,
                        antennaPositionMap1);
        SatelliteCapabilities satelliteCapabilities2 =
                new SatelliteCapabilities(satelliteRadioTechnologies, true, 10,
                        antennaPositionMap1);
        assertEquals(satelliteCapabilities1, satelliteCapabilities2);

        Map<Integer, AntennaPosition> antennaPositionMap2 = new HashMap<>();
        antennaPositionMap2.put(SatelliteManager.DISPLAY_MODE_CLOSED, antennaPosition1);
        antennaPositionMap2.put(SatelliteManager.DISPLAY_MODE_OPENED, antennaPosition2);
        satelliteCapabilities2 =
                new SatelliteCapabilities(satelliteRadioTechnologies, true, 10,
                        antennaPositionMap2);
        assertNotEquals(satelliteCapabilities1, satelliteCapabilities2);
    }
}