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

Commit 0daa2155 authored by Aishwarya Mallampati's avatar Aishwarya Mallampati Committed by Automerger Merge Worker
Browse files

Merge "Check if device is connected to satellite within hysteresis per phone...

Merge "Check if device is connected to satellite within hysteresis per phone object." into 24D1-dev am: e9cd4727

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/opt/telephony/+/26500558



Change-Id: I3aeab9e617ab4c5860ce27359c07bddc198c5f22
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 052f6252 e9cd4727
Loading
Loading
Loading
Loading
+98 −22
Original line number Original line Diff line number Diff line
@@ -78,6 +78,7 @@ import android.os.SystemProperties;
import android.os.UserHandle;
import android.os.UserHandle;
import android.provider.Settings;
import android.provider.Settings;
import android.telephony.CarrierConfigManager;
import android.telephony.CarrierConfigManager;
import android.telephony.NetworkRegistrationInfo;
import android.telephony.Rlog;
import android.telephony.Rlog;
import android.telephony.ServiceState;
import android.telephony.ServiceState;
import android.telephony.SubscriptionManager;
import android.telephony.SubscriptionManager;
@@ -334,6 +335,14 @@ public class SatelliteController extends Handler {
    @NonNull private final SparseBooleanArray
    @NonNull private final SparseBooleanArray
            mWasSatelliteConnectedViaCarrier = new SparseBooleanArray();
            mWasSatelliteConnectedViaCarrier = new SparseBooleanArray();


    /**
     * Key: Subscription ID; Value: set of
     * {@link android.telephony.NetworkRegistrationInfo.ServiceType}
     */
    @GuardedBy("mSatelliteConnectedLock")
    @NonNull private final Map<Integer, List<Integer>>
            mSatModeCapabilitiesForCarrierRoaming = new HashMap<>();

    @GuardedBy("mSatelliteConnectedLock")
    @GuardedBy("mSatelliteConnectedLock")
    @NonNull private final SparseBooleanArray
    @NonNull private final SparseBooleanArray
            mIsSatelliteConnectedViaCarrierHysteresisTimeExpired = new SparseBooleanArray();
            mIsSatelliteConnectedViaCarrierHysteresisTimeExpired = new SparseBooleanArray();
@@ -2566,13 +2575,49 @@ public class SatelliteController extends Handler {
            return true;
            return true;
        }
        }
        for (Phone phone : PhoneFactory.getPhones()) {
        for (Phone phone : PhoneFactory.getPhones()) {
            if (isSatelliteSupportedViaCarrier(phone.getSubId())) {
            if (isInSatelliteModeForCarrierRoaming(phone)) {
                logd("isSatelliteConnectedViaCarrierWithinHysteresisTime: "
                        + "subId:" + phone.getSubId()
                        + " is connected to satellite within hysteresis time");
                return true;
            }
        }
        return false;
    }

    /**
     * Get whether device is connected to satellite via carrier.
     *
     * @param phone phone object
     * @return {@code true} if the device is connected to satellite using the phone within the
     * {@link CarrierConfigManager#KEY_SATELLITE_CONNECTION_HYSTERESIS_SEC_INT}
     * duration, {@code false} otherwise.
     */
    public boolean isInSatelliteModeForCarrierRoaming(@Nullable Phone phone) {
        if (!mFeatureFlags.carrierEnabledSatelliteFlag()) {
            logd("isInSatelliteModeForCarrierRoaming: carrierEnabledSatelliteFlag is disabled");
            return false;
        }

        if (phone == null) {
            return false;
        }

        if (!isSatelliteSupportedViaCarrier(phone.getSubId())) {
            return false;
        }

        ServiceState serviceState = phone.getServiceState();
        if (serviceState != null && serviceState.isUsingNonTerrestrialNetwork()) {
            return true;
        }

        synchronized (mSatelliteConnectedLock) {
        synchronized (mSatelliteConnectedLock) {
            Boolean isHysteresisTimeExpired =
            Boolean isHysteresisTimeExpired =
                    mIsSatelliteConnectedViaCarrierHysteresisTimeExpired.get(
                    mIsSatelliteConnectedViaCarrierHysteresisTimeExpired.get(
                            phone.getSubId());
                            phone.getSubId());
            if (isHysteresisTimeExpired != null && isHysteresisTimeExpired) {
            if (isHysteresisTimeExpired != null && isHysteresisTimeExpired) {
                        continue;
                return false;
            }
            }


            Long lastDisconnectedTime =
            Long lastDisconnectedTime =
@@ -2586,11 +2631,34 @@ public class SatelliteController extends Handler {
            } else {
            } else {
                mIsSatelliteConnectedViaCarrierHysteresisTimeExpired.put(
                mIsSatelliteConnectedViaCarrierHysteresisTimeExpired.put(
                        phone.getSubId(), true);
                        phone.getSubId(), true);
                mSatModeCapabilitiesForCarrierRoaming.remove(phone.getSubId());
                return false;
            }
            }
        }
        }
    }
    }

    /**
     * Return capabilities of carrier roaming satellite network.
     *
     * @param phone phone object
     * @return The list of services supported by the carrier associated with the {@code subId}
     */
    @NonNull
    public List<Integer> getCapabilitiesForCarrierRoamingSatelliteMode(Phone phone) {
        if (!mFeatureFlags.carrierEnabledSatelliteFlag()) {
            logd("getCapabilitiesForCarrierRoamingSatelliteMode: carrierEnabledSatelliteFlag"
                    + " is disabled");
            return new ArrayList<>();
        }

        synchronized (mSatelliteConnectedLock) {
            int subId = phone.getSubId();
            if (mSatModeCapabilitiesForCarrierRoaming.containsKey(subId)) {
                return mSatModeCapabilitiesForCarrierRoaming.get(subId);
            }
            }
        return false;
        }

        return new ArrayList<>();
    }
    }


    @VisibleForTesting(visibility = VisibleForTesting.Visibility.PRIVATE)
    @VisibleForTesting(visibility = VisibleForTesting.Visibility.PRIVATE)
@@ -3716,6 +3784,14 @@ public class SatelliteController extends Handler {
                        mWasSatelliteConnectedViaCarrier.put(phone.getSubId(), true);
                        mWasSatelliteConnectedViaCarrier.put(phone.getSubId(), true);
                        mIsSatelliteConnectedViaCarrierHysteresisTimeExpired.put(
                        mIsSatelliteConnectedViaCarrierHysteresisTimeExpired.put(
                                phone.getSubId(), false);
                                phone.getSubId(), false);

                        for (NetworkRegistrationInfo nri
                                : serviceState.getNetworkRegistrationInfoList()) {
                            if (nri.isNonTerrestrialNetwork()) {
                                mSatModeCapabilitiesForCarrierRoaming.put(phone.getSubId(),
                                        nri.getAvailableServices());
                            }
                        }
                    } else {
                    } else {
                        Boolean connected = mWasSatelliteConnectedViaCarrier.get(phone.getSubId());
                        Boolean connected = mWasSatelliteConnectedViaCarrier.get(phone.getSubId());
                        if (connected != null && connected) {
                        if (connected != null && connected) {
+10 −0
Original line number Original line Diff line number Diff line
@@ -2477,12 +2477,16 @@ public class SatelliteControllerTest extends TelephonyTest {
        processAllMessages();
        processAllMessages();
        mSatelliteControllerUT.elapsedRealtime = 0;
        mSatelliteControllerUT.elapsedRealtime = 0;
        assertFalse(mSatelliteControllerUT.isSatelliteConnectedViaCarrierWithinHysteresisTime());
        assertFalse(mSatelliteControllerUT.isSatelliteConnectedViaCarrierWithinHysteresisTime());
        assertFalse(mSatelliteControllerUT.isInSatelliteModeForCarrierRoaming(mPhone));
        assertFalse(mSatelliteControllerUT.isInSatelliteModeForCarrierRoaming(mPhone2));


        when(mServiceState.isUsingNonTerrestrialNetwork()).thenReturn(false);
        when(mServiceState.isUsingNonTerrestrialNetwork()).thenReturn(false);
        when(mServiceState2.isUsingNonTerrestrialNetwork()).thenReturn(false);
        when(mServiceState2.isUsingNonTerrestrialNetwork()).thenReturn(false);
        sendServiceStateChangedEvent();
        sendServiceStateChangedEvent();
        processAllMessages();
        processAllMessages();
        assertFalse(mSatelliteControllerUT.isSatelliteConnectedViaCarrierWithinHysteresisTime());
        assertFalse(mSatelliteControllerUT.isSatelliteConnectedViaCarrierWithinHysteresisTime());
        assertFalse(mSatelliteControllerUT.isInSatelliteModeForCarrierRoaming(mPhone));
        assertFalse(mSatelliteControllerUT.isInSatelliteModeForCarrierRoaming(mPhone2));


        // Last satellite connected time of Phone2 should be 0
        // Last satellite connected time of Phone2 should be 0
        when(mServiceState2.isUsingNonTerrestrialNetwork()).thenReturn(true);
        when(mServiceState2.isUsingNonTerrestrialNetwork()).thenReturn(true);
@@ -2492,6 +2496,8 @@ public class SatelliteControllerTest extends TelephonyTest {
        mSatelliteControllerUT.elapsedRealtime = 2 * 60 * 1000;
        mSatelliteControllerUT.elapsedRealtime = 2 * 60 * 1000;
        // But Phone2 is connected to NTN right now
        // But Phone2 is connected to NTN right now
        assertTrue(mSatelliteControllerUT.isSatelliteConnectedViaCarrierWithinHysteresisTime());
        assertTrue(mSatelliteControllerUT.isSatelliteConnectedViaCarrierWithinHysteresisTime());
        assertFalse(mSatelliteControllerUT.isInSatelliteModeForCarrierRoaming(mPhone));
        assertTrue(mSatelliteControllerUT.isInSatelliteModeForCarrierRoaming(mPhone2));


        // Last satellite disconnected time of Phone2 should be 2 * 60 * 1000
        // Last satellite disconnected time of Phone2 should be 2 * 60 * 1000
        when(mServiceState2.isUsingNonTerrestrialNetwork()).thenReturn(false);
        when(mServiceState2.isUsingNonTerrestrialNetwork()).thenReturn(false);
@@ -2499,10 +2505,14 @@ public class SatelliteControllerTest extends TelephonyTest {
        processAllMessages();
        processAllMessages();
        // Current time (2) - last disconnected time (2) < hysteresis timeout (1)
        // Current time (2) - last disconnected time (2) < hysteresis timeout (1)
        assertTrue(mSatelliteControllerUT.isSatelliteConnectedViaCarrierWithinHysteresisTime());
        assertTrue(mSatelliteControllerUT.isSatelliteConnectedViaCarrierWithinHysteresisTime());
        assertFalse(mSatelliteControllerUT.isInSatelliteModeForCarrierRoaming(mPhone));
        assertTrue(mSatelliteControllerUT.isInSatelliteModeForCarrierRoaming(mPhone2));


        // Current time (4) - last disconnected time (2) > hysteresis timeout (1)
        // Current time (4) - last disconnected time (2) > hysteresis timeout (1)
        mSatelliteControllerUT.elapsedRealtime = 4 * 60 * 1000;
        mSatelliteControllerUT.elapsedRealtime = 4 * 60 * 1000;
        assertFalse(mSatelliteControllerUT.isSatelliteConnectedViaCarrierWithinHysteresisTime());
        assertFalse(mSatelliteControllerUT.isSatelliteConnectedViaCarrierWithinHysteresisTime());
        assertFalse(mSatelliteControllerUT.isInSatelliteModeForCarrierRoaming(mPhone));
        assertFalse(mSatelliteControllerUT.isInSatelliteModeForCarrierRoaming(mPhone2));
    }
    }


    @Test
    @Test