Loading src/java/com/android/internal/telephony/satellite/SatelliteController.java +23 −11 Original line number Diff line number Diff line Loading @@ -3961,28 +3961,30 @@ public class SatelliteController extends Handler { } /** * @return {@code true} if the device is connected to satellite via any carrier within the * @return {@code true} and the corresponding subId if the device is connected to * satellite via any carrier within the * {@link CarrierConfigManager#KEY_SATELLITE_CONNECTION_HYSTERESIS_SEC_INT} * duration, {@code false} otherwise. * duration, {@code false} and null otherwise. */ public boolean isSatelliteConnectedViaCarrierWithinHysteresisTime() { public Pair<Boolean, Integer> isSatelliteConnectedViaCarrierWithinHysteresisTime() { if (!mFeatureFlags.carrierEnabledSatelliteFlag()) { logd("isSatelliteConnectedViaCarrierWithinHysteresisTime: carrierEnabledSatelliteFlag" + " is disabled"); return false; return new Pair<>(false, null); } if (isUsingNonTerrestrialNetworkViaCarrier().first) { return true; Pair<Boolean, Integer> ntnConnectedState = isUsingNonTerrestrialNetworkViaCarrier(); if (ntnConnectedState.first) { return ntnConnectedState; } for (Phone phone : PhoneFactory.getPhones()) { if (isInSatelliteModeForCarrierRoaming(phone)) { logd("isSatelliteConnectedViaCarrierWithinHysteresisTime: " + "subId:" + phone.getSubId() + " is connected to satellite within hysteresis time"); return true; return new Pair<>(true, phone.getSubId()); } } return false; return new Pair<>(false, null); } /** Loading Loading @@ -4185,7 +4187,7 @@ public class SatelliteController extends Handler { return DEFAULT_CARRIER_EMERGENCY_CALL_WAIT_FOR_CONNECTION_TIMEOUT_MILLIS; } private int getCarrierEmergencyCallWaitForConnectionTimeoutMillis(int subId) { public int getCarrierEmergencyCallWaitForConnectionTimeoutMillis(int subId) { PersistableBundle config = getPersistableBundle(subId); return config.getInt(KEY_EMERGENCY_CALL_TO_SATELLITE_T911_HANDOVER_TIMEOUT_MILLIS_INT); } Loading Loading @@ -4546,12 +4548,22 @@ public class SatelliteController extends Handler { return null; } String iccid = subInfo.getIccId(); String apn = getConfigForSubId(subId).getString(KEY_SATELLITE_NIDD_APN_NAME_STRING, ""); String apn = getNiddApnName(subId); return new SatelliteModemEnableRequestAttributes( arg.enableSatellite, arg.enableDemoMode, arg.isEmergency, new SatelliteSubscriptionInfo(iccid, apn)); } @NonNull private String getNiddApnName(int subId) { if (SatelliteServiceUtils.isNtnOnlySubscriptionId(subId)) { String apn = mContext.getResources().getString(R.string.config_satellite_nidd_apn_name); if (!TextUtils.isEmpty(apn)) { return apn; } } return getConfigForSubId(subId).getString(KEY_SATELLITE_NIDD_APN_NAME_STRING, ""); } private void handleRequestSatelliteAttachRestrictionForCarrierCmd( SatelliteControllerHandlerRequest request) { RequestHandleSatelliteAttachRestrictionForCarrierArgument argument = Loading Loading @@ -6532,7 +6544,7 @@ public class SatelliteController extends Handler { /*visible*/ true); } } else if (mIsNotificationShowing && !isSatelliteConnectedViaCarrierWithinHysteresisTime()) { && !isSatelliteConnectedViaCarrierWithinHysteresisTime().first) { // Dismiss the notification if it is still displaying. dismissSatelliteNotification(); } Loading src/java/com/android/internal/telephony/satellite/SatelliteSOSMessageRecommender.java +40 −15 Original line number Diff line number Diff line Loading @@ -52,6 +52,7 @@ import android.telephony.DropBoxManagerLoggerBackend; import android.telephony.PersistentLogger; import android.telephony.Rlog; import android.telephony.ServiceState; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; import android.telephony.ims.ImsReasonInfo; import android.telephony.ims.ImsRegistrationAttributes; Loading Loading @@ -79,6 +80,7 @@ import com.android.internal.telephony.metrics.SatelliteStats; import java.util.Arrays; import java.util.List; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; /** Loading Loading @@ -119,8 +121,10 @@ public class SatelliteSOSMessageRecommender extends Handler { private boolean mCheckingAccessRestrictionInProgress = false; protected long mTimeoutMillis = 0; private final long mOemEnabledTimeoutMillis; private final AtomicBoolean mIsSatelliteConnectedViaCarrierWithinHysteresisTime = protected final AtomicBoolean mIsSatelliteConnectedViaCarrierWithinHysteresisTime = new AtomicBoolean(false); protected final AtomicInteger mSubIdOfSatelliteConnectedViaCarrierWithinHysteresisTime = new AtomicInteger(SubscriptionManager.INVALID_SUBSCRIPTION_ID); @GuardedBy("mLock") private boolean mIsTimerTimedOut = false; protected int mCountOfTimerStarted = 0; Loading Loading @@ -238,8 +242,7 @@ public class SatelliteSOSMessageRecommender extends Handler { * should do this check now so that we have higher chance of sending the event * EVENT_DISPLAY_EMERGENCY_MESSAGE to Dialer. */ mIsSatelliteConnectedViaCarrierWithinHysteresisTime.set( mSatelliteController.isSatelliteConnectedViaCarrierWithinHysteresisTime()); updateSatelliteConnectedViaCarrierWithinHysteresisTimeState(); sendMessage(obtainMessage(EVENT_EMERGENCY_CALL_STARTED, connection)); } Loading Loading @@ -377,8 +380,7 @@ public class SatelliteSOSMessageRecommender extends Handler { private void updateSatelliteViaCarrierAvailability() { if (!mIsSatelliteConnectedViaCarrierWithinHysteresisTime.get()) { mIsSatelliteConnectedViaCarrierWithinHysteresisTime.set( mSatelliteController.isSatelliteConnectedViaCarrierWithinHysteresisTime()); updateSatelliteConnectedViaCarrierWithinHysteresisTimeState(); } } Loading Loading @@ -571,11 +573,20 @@ public class SatelliteSOSMessageRecommender extends Handler { private void selectEmergencyCallWaitForConnectionTimeoutDuration() { if (isSatelliteConnectedViaCarrierWithinHysteresisTime()) { int satelliteSubId = mSubIdOfSatelliteConnectedViaCarrierWithinHysteresisTime.get(); mTimeoutMillis = mSatelliteController.getCarrierEmergencyCallWaitForConnectionTimeoutMillis(); mSatelliteController.getCarrierEmergencyCallWaitForConnectionTimeoutMillis( satelliteSubId); } else { int satelliteSubId = mSatelliteController.getSelectedSatelliteSubId(); if (!SatelliteServiceUtils.isNtnOnlySubscriptionId(satelliteSubId)) { mTimeoutMillis = mSatelliteController.getCarrierEmergencyCallWaitForConnectionTimeoutMillis( satelliteSubId); } else { mTimeoutMillis = mOemEnabledTimeoutMillis; } } plogd("mTimeoutMillis = " + mTimeoutMillis); } Loading Loading @@ -763,19 +774,20 @@ public class SatelliteSOSMessageRecommender extends Handler { @VisibleForTesting(visibility = VisibleForTesting.Visibility.PRIVATE) public int getEmergencyCallToSatelliteHandoverType() { if (Flags.carrierRoamingNbIotNtn() && isDeviceProvisioned() && isSatelliteAllowedByReasons() && isSatelliteConnectedViaCarrierWithinHysteresisTime()) { int satelliteSubId = mSatelliteController.getSelectedSatelliteSubId(); if (isSatelliteConnectedViaCarrierWithinHysteresisTime()) { int satelliteSubId = mSubIdOfSatelliteConnectedViaCarrierWithinHysteresisTime.get(); return mSatelliteController.getCarrierRoamingNtnEmergencyCallToSatelliteHandoverType( satelliteSubId); } else if (isSatelliteConnectedViaCarrierWithinHysteresisTime()) { return EMERGENCY_CALL_TO_SATELLITE_HANDOVER_TYPE_T911; } else { int satelliteSubId = mSatelliteController.getSelectedSatelliteSubId(); if (!SatelliteServiceUtils.isNtnOnlySubscriptionId(satelliteSubId)) { return mSatelliteController .getCarrierRoamingNtnEmergencyCallToSatelliteHandoverType(satelliteSubId); } else { return EMERGENCY_CALL_TO_SATELLITE_HANDOVER_TYPE_SOS; } } } private void requestIsSatelliteAllowedForCurrentLocation() { synchronized (mLock) { Loading Loading @@ -831,6 +843,19 @@ public class SatelliteSOSMessageRecommender extends Handler { return (provisioned != null) && provisioned; } private void updateSatelliteConnectedViaCarrierWithinHysteresisTimeState() { Pair<Boolean, Integer> satelliteConnectedState = mSatelliteController.isSatelliteConnectedViaCarrierWithinHysteresisTime(); mIsSatelliteConnectedViaCarrierWithinHysteresisTime.set(satelliteConnectedState.first); if (satelliteConnectedState.first) { mSubIdOfSatelliteConnectedViaCarrierWithinHysteresisTime.set( satelliteConnectedState.second); } else { mSubIdOfSatelliteConnectedViaCarrierWithinHysteresisTime.set( SubscriptionManager.INVALID_SUBSCRIPTION_ID); } } private static void logv(@NonNull String log) { Rlog.v(TAG, log); } Loading src/java/com/android/internal/telephony/satellite/SatelliteServiceUtils.java +23 −0 Original line number Diff line number Diff line Loading @@ -365,6 +365,29 @@ public class SatelliteServiceUtils { return subId; } /** * Check if the subscription ID is a NTN only subscription ID. * * @return {@code true} if the subscription ID is a NTN only subscription ID, * {@code false} otherwise. */ public static boolean isNtnOnlySubscriptionId(int subId) { SubscriptionManagerService subscriptionManagerService = SubscriptionManagerService.getInstance(); if (subscriptionManagerService == null) { logd("isNtnOnlySubscriptionId: subscriptionManagerService is null"); return false; } SubscriptionInfo subInfo = subscriptionManagerService.getSubscriptionInfo(subId); if (subInfo == null) { logd("isNtnOnlySubscriptionId: subInfo is null for subId=" + subId); return false; } return subInfo.isOnlyNonTerrestrialNetwork(); } /** * Expected format of the input dictionary bundle is: * <ul> Loading tests/telephonytests/src/com/android/internal/telephony/satellite/SatelliteControllerTest.java +12 −6 Original line number Diff line number Diff line Loading @@ -2974,7 +2974,8 @@ public class SatelliteControllerTest extends TelephonyTest { @Test public void testCarrierEnabledSatelliteConnectionHysteresisTime() throws Exception { when(mFeatureFlags.carrierEnabledSatelliteFlag()).thenReturn(false); assertFalse(mSatelliteControllerUT.isSatelliteConnectedViaCarrierWithinHysteresisTime()); assertFalse(mSatelliteControllerUT .isSatelliteConnectedViaCarrierWithinHysteresisTime().first); when(mServiceState.getState()).thenReturn(ServiceState.STATE_OUT_OF_SERVICE); when(mServiceState2.getState()).thenReturn(ServiceState.STATE_OUT_OF_SERVICE); Loading @@ -2994,7 +2995,8 @@ public class SatelliteControllerTest extends TelephonyTest { doReturn(cellSignalStrengthList).when(mSignalStrength).getCellSignalStrengths(); processAllMessages(); mSatelliteControllerUT.elapsedRealtime = 0; assertFalse(mSatelliteControllerUT.isSatelliteConnectedViaCarrierWithinHysteresisTime()); assertFalse(mSatelliteControllerUT .isSatelliteConnectedViaCarrierWithinHysteresisTime().first); assertFalse(mSatelliteControllerUT.isInSatelliteModeForCarrierRoaming(mPhone)); assertFalse(mSatelliteControllerUT.isInSatelliteModeForCarrierRoaming(mPhone2)); Loading @@ -3002,7 +3004,8 @@ public class SatelliteControllerTest extends TelephonyTest { when(mServiceState2.isUsingNonTerrestrialNetwork()).thenReturn(false); sendServiceStateChangedEvent(); processAllMessages(); assertFalse(mSatelliteControllerUT.isSatelliteConnectedViaCarrierWithinHysteresisTime()); assertFalse(mSatelliteControllerUT .isSatelliteConnectedViaCarrierWithinHysteresisTime().first); assertFalse(mSatelliteControllerUT.isInSatelliteModeForCarrierRoaming(mPhone)); assertFalse(mSatelliteControllerUT.isInSatelliteModeForCarrierRoaming(mPhone2)); verify(mPhone, times(1)).notifyCarrierRoamingNtnModeChanged(eq(false)); Loading @@ -3017,7 +3020,8 @@ public class SatelliteControllerTest extends TelephonyTest { // 2 minutes later and hysteresis timeout is 1 minute mSatelliteControllerUT.elapsedRealtime = 2 * 60 * 1000; // But Phone2 is connected to NTN right now assertTrue(mSatelliteControllerUT.isSatelliteConnectedViaCarrierWithinHysteresisTime()); assertTrue(mSatelliteControllerUT .isSatelliteConnectedViaCarrierWithinHysteresisTime().first); assertFalse(mSatelliteControllerUT.isInSatelliteModeForCarrierRoaming(mPhone)); assertTrue(mSatelliteControllerUT.isInSatelliteModeForCarrierRoaming(mPhone2)); verify(mPhone, times(0)).notifyCarrierRoamingNtnModeChanged(eq(false)); Loading @@ -3030,7 +3034,8 @@ public class SatelliteControllerTest extends TelephonyTest { sendServiceStateChangedEvent(); processAllMessages(); // Current time (2) - last disconnected time (2) < hysteresis timeout (1) assertTrue(mSatelliteControllerUT.isSatelliteConnectedViaCarrierWithinHysteresisTime()); assertTrue(mSatelliteControllerUT .isSatelliteConnectedViaCarrierWithinHysteresisTime().first); assertFalse(mSatelliteControllerUT.isInSatelliteModeForCarrierRoaming(mPhone)); assertTrue(mSatelliteControllerUT.isInSatelliteModeForCarrierRoaming(mPhone2)); verify(mPhone, times(0)).notifyCarrierRoamingNtnModeChanged(eq(false)); Loading @@ -3042,7 +3047,8 @@ public class SatelliteControllerTest extends TelephonyTest { mSatelliteControllerUT.elapsedRealtime = 4 * 60 * 1000; moveTimeForward(2 * 60 * 1000); processAllMessages(); assertFalse(mSatelliteControllerUT.isSatelliteConnectedViaCarrierWithinHysteresisTime()); assertFalse(mSatelliteControllerUT .isSatelliteConnectedViaCarrierWithinHysteresisTime().first); assertFalse(mSatelliteControllerUT.isInSatelliteModeForCarrierRoaming(mPhone)); assertFalse(mSatelliteControllerUT.isInSatelliteModeForCarrierRoaming(mPhone2)); verify(mPhone, times(0)).notifyCarrierRoamingNtnModeChanged(eq(false)); Loading tests/telephonytests/src/com/android/internal/telephony/satellite/SatelliteSOSMessageRecommenderTest.java +141 −47 File changed.Preview size limit exceeded, changes collapsed. Show changes Loading
src/java/com/android/internal/telephony/satellite/SatelliteController.java +23 −11 Original line number Diff line number Diff line Loading @@ -3961,28 +3961,30 @@ public class SatelliteController extends Handler { } /** * @return {@code true} if the device is connected to satellite via any carrier within the * @return {@code true} and the corresponding subId if the device is connected to * satellite via any carrier within the * {@link CarrierConfigManager#KEY_SATELLITE_CONNECTION_HYSTERESIS_SEC_INT} * duration, {@code false} otherwise. * duration, {@code false} and null otherwise. */ public boolean isSatelliteConnectedViaCarrierWithinHysteresisTime() { public Pair<Boolean, Integer> isSatelliteConnectedViaCarrierWithinHysteresisTime() { if (!mFeatureFlags.carrierEnabledSatelliteFlag()) { logd("isSatelliteConnectedViaCarrierWithinHysteresisTime: carrierEnabledSatelliteFlag" + " is disabled"); return false; return new Pair<>(false, null); } if (isUsingNonTerrestrialNetworkViaCarrier().first) { return true; Pair<Boolean, Integer> ntnConnectedState = isUsingNonTerrestrialNetworkViaCarrier(); if (ntnConnectedState.first) { return ntnConnectedState; } for (Phone phone : PhoneFactory.getPhones()) { if (isInSatelliteModeForCarrierRoaming(phone)) { logd("isSatelliteConnectedViaCarrierWithinHysteresisTime: " + "subId:" + phone.getSubId() + " is connected to satellite within hysteresis time"); return true; return new Pair<>(true, phone.getSubId()); } } return false; return new Pair<>(false, null); } /** Loading Loading @@ -4185,7 +4187,7 @@ public class SatelliteController extends Handler { return DEFAULT_CARRIER_EMERGENCY_CALL_WAIT_FOR_CONNECTION_TIMEOUT_MILLIS; } private int getCarrierEmergencyCallWaitForConnectionTimeoutMillis(int subId) { public int getCarrierEmergencyCallWaitForConnectionTimeoutMillis(int subId) { PersistableBundle config = getPersistableBundle(subId); return config.getInt(KEY_EMERGENCY_CALL_TO_SATELLITE_T911_HANDOVER_TIMEOUT_MILLIS_INT); } Loading Loading @@ -4546,12 +4548,22 @@ public class SatelliteController extends Handler { return null; } String iccid = subInfo.getIccId(); String apn = getConfigForSubId(subId).getString(KEY_SATELLITE_NIDD_APN_NAME_STRING, ""); String apn = getNiddApnName(subId); return new SatelliteModemEnableRequestAttributes( arg.enableSatellite, arg.enableDemoMode, arg.isEmergency, new SatelliteSubscriptionInfo(iccid, apn)); } @NonNull private String getNiddApnName(int subId) { if (SatelliteServiceUtils.isNtnOnlySubscriptionId(subId)) { String apn = mContext.getResources().getString(R.string.config_satellite_nidd_apn_name); if (!TextUtils.isEmpty(apn)) { return apn; } } return getConfigForSubId(subId).getString(KEY_SATELLITE_NIDD_APN_NAME_STRING, ""); } private void handleRequestSatelliteAttachRestrictionForCarrierCmd( SatelliteControllerHandlerRequest request) { RequestHandleSatelliteAttachRestrictionForCarrierArgument argument = Loading Loading @@ -6532,7 +6544,7 @@ public class SatelliteController extends Handler { /*visible*/ true); } } else if (mIsNotificationShowing && !isSatelliteConnectedViaCarrierWithinHysteresisTime()) { && !isSatelliteConnectedViaCarrierWithinHysteresisTime().first) { // Dismiss the notification if it is still displaying. dismissSatelliteNotification(); } Loading
src/java/com/android/internal/telephony/satellite/SatelliteSOSMessageRecommender.java +40 −15 Original line number Diff line number Diff line Loading @@ -52,6 +52,7 @@ import android.telephony.DropBoxManagerLoggerBackend; import android.telephony.PersistentLogger; import android.telephony.Rlog; import android.telephony.ServiceState; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; import android.telephony.ims.ImsReasonInfo; import android.telephony.ims.ImsRegistrationAttributes; Loading Loading @@ -79,6 +80,7 @@ import com.android.internal.telephony.metrics.SatelliteStats; import java.util.Arrays; import java.util.List; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; /** Loading Loading @@ -119,8 +121,10 @@ public class SatelliteSOSMessageRecommender extends Handler { private boolean mCheckingAccessRestrictionInProgress = false; protected long mTimeoutMillis = 0; private final long mOemEnabledTimeoutMillis; private final AtomicBoolean mIsSatelliteConnectedViaCarrierWithinHysteresisTime = protected final AtomicBoolean mIsSatelliteConnectedViaCarrierWithinHysteresisTime = new AtomicBoolean(false); protected final AtomicInteger mSubIdOfSatelliteConnectedViaCarrierWithinHysteresisTime = new AtomicInteger(SubscriptionManager.INVALID_SUBSCRIPTION_ID); @GuardedBy("mLock") private boolean mIsTimerTimedOut = false; protected int mCountOfTimerStarted = 0; Loading Loading @@ -238,8 +242,7 @@ public class SatelliteSOSMessageRecommender extends Handler { * should do this check now so that we have higher chance of sending the event * EVENT_DISPLAY_EMERGENCY_MESSAGE to Dialer. */ mIsSatelliteConnectedViaCarrierWithinHysteresisTime.set( mSatelliteController.isSatelliteConnectedViaCarrierWithinHysteresisTime()); updateSatelliteConnectedViaCarrierWithinHysteresisTimeState(); sendMessage(obtainMessage(EVENT_EMERGENCY_CALL_STARTED, connection)); } Loading Loading @@ -377,8 +380,7 @@ public class SatelliteSOSMessageRecommender extends Handler { private void updateSatelliteViaCarrierAvailability() { if (!mIsSatelliteConnectedViaCarrierWithinHysteresisTime.get()) { mIsSatelliteConnectedViaCarrierWithinHysteresisTime.set( mSatelliteController.isSatelliteConnectedViaCarrierWithinHysteresisTime()); updateSatelliteConnectedViaCarrierWithinHysteresisTimeState(); } } Loading Loading @@ -571,11 +573,20 @@ public class SatelliteSOSMessageRecommender extends Handler { private void selectEmergencyCallWaitForConnectionTimeoutDuration() { if (isSatelliteConnectedViaCarrierWithinHysteresisTime()) { int satelliteSubId = mSubIdOfSatelliteConnectedViaCarrierWithinHysteresisTime.get(); mTimeoutMillis = mSatelliteController.getCarrierEmergencyCallWaitForConnectionTimeoutMillis(); mSatelliteController.getCarrierEmergencyCallWaitForConnectionTimeoutMillis( satelliteSubId); } else { int satelliteSubId = mSatelliteController.getSelectedSatelliteSubId(); if (!SatelliteServiceUtils.isNtnOnlySubscriptionId(satelliteSubId)) { mTimeoutMillis = mSatelliteController.getCarrierEmergencyCallWaitForConnectionTimeoutMillis( satelliteSubId); } else { mTimeoutMillis = mOemEnabledTimeoutMillis; } } plogd("mTimeoutMillis = " + mTimeoutMillis); } Loading Loading @@ -763,19 +774,20 @@ public class SatelliteSOSMessageRecommender extends Handler { @VisibleForTesting(visibility = VisibleForTesting.Visibility.PRIVATE) public int getEmergencyCallToSatelliteHandoverType() { if (Flags.carrierRoamingNbIotNtn() && isDeviceProvisioned() && isSatelliteAllowedByReasons() && isSatelliteConnectedViaCarrierWithinHysteresisTime()) { int satelliteSubId = mSatelliteController.getSelectedSatelliteSubId(); if (isSatelliteConnectedViaCarrierWithinHysteresisTime()) { int satelliteSubId = mSubIdOfSatelliteConnectedViaCarrierWithinHysteresisTime.get(); return mSatelliteController.getCarrierRoamingNtnEmergencyCallToSatelliteHandoverType( satelliteSubId); } else if (isSatelliteConnectedViaCarrierWithinHysteresisTime()) { return EMERGENCY_CALL_TO_SATELLITE_HANDOVER_TYPE_T911; } else { int satelliteSubId = mSatelliteController.getSelectedSatelliteSubId(); if (!SatelliteServiceUtils.isNtnOnlySubscriptionId(satelliteSubId)) { return mSatelliteController .getCarrierRoamingNtnEmergencyCallToSatelliteHandoverType(satelliteSubId); } else { return EMERGENCY_CALL_TO_SATELLITE_HANDOVER_TYPE_SOS; } } } private void requestIsSatelliteAllowedForCurrentLocation() { synchronized (mLock) { Loading Loading @@ -831,6 +843,19 @@ public class SatelliteSOSMessageRecommender extends Handler { return (provisioned != null) && provisioned; } private void updateSatelliteConnectedViaCarrierWithinHysteresisTimeState() { Pair<Boolean, Integer> satelliteConnectedState = mSatelliteController.isSatelliteConnectedViaCarrierWithinHysteresisTime(); mIsSatelliteConnectedViaCarrierWithinHysteresisTime.set(satelliteConnectedState.first); if (satelliteConnectedState.first) { mSubIdOfSatelliteConnectedViaCarrierWithinHysteresisTime.set( satelliteConnectedState.second); } else { mSubIdOfSatelliteConnectedViaCarrierWithinHysteresisTime.set( SubscriptionManager.INVALID_SUBSCRIPTION_ID); } } private static void logv(@NonNull String log) { Rlog.v(TAG, log); } Loading
src/java/com/android/internal/telephony/satellite/SatelliteServiceUtils.java +23 −0 Original line number Diff line number Diff line Loading @@ -365,6 +365,29 @@ public class SatelliteServiceUtils { return subId; } /** * Check if the subscription ID is a NTN only subscription ID. * * @return {@code true} if the subscription ID is a NTN only subscription ID, * {@code false} otherwise. */ public static boolean isNtnOnlySubscriptionId(int subId) { SubscriptionManagerService subscriptionManagerService = SubscriptionManagerService.getInstance(); if (subscriptionManagerService == null) { logd("isNtnOnlySubscriptionId: subscriptionManagerService is null"); return false; } SubscriptionInfo subInfo = subscriptionManagerService.getSubscriptionInfo(subId); if (subInfo == null) { logd("isNtnOnlySubscriptionId: subInfo is null for subId=" + subId); return false; } return subInfo.isOnlyNonTerrestrialNetwork(); } /** * Expected format of the input dictionary bundle is: * <ul> Loading
tests/telephonytests/src/com/android/internal/telephony/satellite/SatelliteControllerTest.java +12 −6 Original line number Diff line number Diff line Loading @@ -2974,7 +2974,8 @@ public class SatelliteControllerTest extends TelephonyTest { @Test public void testCarrierEnabledSatelliteConnectionHysteresisTime() throws Exception { when(mFeatureFlags.carrierEnabledSatelliteFlag()).thenReturn(false); assertFalse(mSatelliteControllerUT.isSatelliteConnectedViaCarrierWithinHysteresisTime()); assertFalse(mSatelliteControllerUT .isSatelliteConnectedViaCarrierWithinHysteresisTime().first); when(mServiceState.getState()).thenReturn(ServiceState.STATE_OUT_OF_SERVICE); when(mServiceState2.getState()).thenReturn(ServiceState.STATE_OUT_OF_SERVICE); Loading @@ -2994,7 +2995,8 @@ public class SatelliteControllerTest extends TelephonyTest { doReturn(cellSignalStrengthList).when(mSignalStrength).getCellSignalStrengths(); processAllMessages(); mSatelliteControllerUT.elapsedRealtime = 0; assertFalse(mSatelliteControllerUT.isSatelliteConnectedViaCarrierWithinHysteresisTime()); assertFalse(mSatelliteControllerUT .isSatelliteConnectedViaCarrierWithinHysteresisTime().first); assertFalse(mSatelliteControllerUT.isInSatelliteModeForCarrierRoaming(mPhone)); assertFalse(mSatelliteControllerUT.isInSatelliteModeForCarrierRoaming(mPhone2)); Loading @@ -3002,7 +3004,8 @@ public class SatelliteControllerTest extends TelephonyTest { when(mServiceState2.isUsingNonTerrestrialNetwork()).thenReturn(false); sendServiceStateChangedEvent(); processAllMessages(); assertFalse(mSatelliteControllerUT.isSatelliteConnectedViaCarrierWithinHysteresisTime()); assertFalse(mSatelliteControllerUT .isSatelliteConnectedViaCarrierWithinHysteresisTime().first); assertFalse(mSatelliteControllerUT.isInSatelliteModeForCarrierRoaming(mPhone)); assertFalse(mSatelliteControllerUT.isInSatelliteModeForCarrierRoaming(mPhone2)); verify(mPhone, times(1)).notifyCarrierRoamingNtnModeChanged(eq(false)); Loading @@ -3017,7 +3020,8 @@ public class SatelliteControllerTest extends TelephonyTest { // 2 minutes later and hysteresis timeout is 1 minute mSatelliteControllerUT.elapsedRealtime = 2 * 60 * 1000; // But Phone2 is connected to NTN right now assertTrue(mSatelliteControllerUT.isSatelliteConnectedViaCarrierWithinHysteresisTime()); assertTrue(mSatelliteControllerUT .isSatelliteConnectedViaCarrierWithinHysteresisTime().first); assertFalse(mSatelliteControllerUT.isInSatelliteModeForCarrierRoaming(mPhone)); assertTrue(mSatelliteControllerUT.isInSatelliteModeForCarrierRoaming(mPhone2)); verify(mPhone, times(0)).notifyCarrierRoamingNtnModeChanged(eq(false)); Loading @@ -3030,7 +3034,8 @@ public class SatelliteControllerTest extends TelephonyTest { sendServiceStateChangedEvent(); processAllMessages(); // Current time (2) - last disconnected time (2) < hysteresis timeout (1) assertTrue(mSatelliteControllerUT.isSatelliteConnectedViaCarrierWithinHysteresisTime()); assertTrue(mSatelliteControllerUT .isSatelliteConnectedViaCarrierWithinHysteresisTime().first); assertFalse(mSatelliteControllerUT.isInSatelliteModeForCarrierRoaming(mPhone)); assertTrue(mSatelliteControllerUT.isInSatelliteModeForCarrierRoaming(mPhone2)); verify(mPhone, times(0)).notifyCarrierRoamingNtnModeChanged(eq(false)); Loading @@ -3042,7 +3047,8 @@ public class SatelliteControllerTest extends TelephonyTest { mSatelliteControllerUT.elapsedRealtime = 4 * 60 * 1000; moveTimeForward(2 * 60 * 1000); processAllMessages(); assertFalse(mSatelliteControllerUT.isSatelliteConnectedViaCarrierWithinHysteresisTime()); assertFalse(mSatelliteControllerUT .isSatelliteConnectedViaCarrierWithinHysteresisTime().first); assertFalse(mSatelliteControllerUT.isInSatelliteModeForCarrierRoaming(mPhone)); assertFalse(mSatelliteControllerUT.isInSatelliteModeForCarrierRoaming(mPhone2)); verify(mPhone, times(0)).notifyCarrierRoamingNtnModeChanged(eq(false)); Loading
tests/telephonytests/src/com/android/internal/telephony/satellite/SatelliteSOSMessageRecommenderTest.java +141 −47 File changed.Preview size limit exceeded, changes collapsed. Show changes