Loading src/java/com/android/internal/telephony/satellite/SatelliteSOSMessageRecommender.java +31 −6 Original line number Diff line number Diff line Loading @@ -44,6 +44,7 @@ import android.os.SystemProperties; import android.provider.DeviceConfig; import android.telecom.Connection; import android.telephony.AccessNetworkConstants; import android.telephony.CellIdentity; import android.telephony.DropBoxManagerLoggerBackend; import android.telephony.NetworkRegistrationInfo; import android.telephony.PersistentLogger; Loading Loading @@ -465,11 +466,13 @@ public class SatelliteSOSMessageRecommender extends Handler { return false; } private boolean isSatellitePlmn(int subId, @NonNull ServiceState serviceState) { /** Check whether device is connected to satellite PLMN */ @VisibleForTesting(visibility = VisibleForTesting.Visibility.PRIVATE) public boolean isSatellitePlmn(int subId, @NonNull ServiceState serviceState) { List<String> satellitePlmnList = mSatelliteController.getSatellitePlmnsForCarrier(subId); if (satellitePlmnList.isEmpty()) { logv("isSatellitePlmn: satellitePlmnList is empty"); plogd("isSatellitePlmn: satellitePlmnList is empty"); return false; } Loading @@ -477,19 +480,23 @@ public class SatelliteSOSMessageRecommender extends Handler { serviceState.getNetworkRegistrationInfoListForTransportType( AccessNetworkConstants.TRANSPORT_TYPE_WWAN)) { String registeredPlmn = nri.getRegisteredPlmn(); String mccmnc = nri.getCellIdentity().getMccString() + nri.getCellIdentity().getMncString(); if (TextUtils.isEmpty(registeredPlmn)) { plogd("isSatellitePlmn: registeredPlmn is empty"); continue; } String mccmnc = getMccMnc(nri); for (String satellitePlmn : satellitePlmnList) { if (TextUtils.equals(satellitePlmn, registeredPlmn) || TextUtils.equals(satellitePlmn, mccmnc)) { logv("isSatellitePlmn: return true, satellitePlmn:" + satellitePlmn plogd("isSatellitePlmn: return true, satellitePlmn:" + satellitePlmn + " registeredPlmn:" + registeredPlmn + " mccmnc:" + mccmnc); return true; } } } logv("isSatellitePlmn: return false"); plogd("isSatellitePlmn: return false"); return false; } Loading Loading @@ -829,6 +836,24 @@ public class SatelliteSOSMessageRecommender extends Handler { } } @Nullable private String getMccMnc(@NonNull NetworkRegistrationInfo nri) { CellIdentity cellIdentity = nri.getCellIdentity(); if (cellIdentity == null) { plogd("getMccMnc: cellIdentity is null"); return null; } String mcc = cellIdentity.getMccString(); String mnc = cellIdentity.getMncString(); if (mcc == null || mnc == null) { plogd("getMccMnc: mcc or mnc is null. mcc=" + mcc + " mnc=" + mnc); return null; } return mcc + mnc; } private void plogd(@NonNull String log) { Rlog.d(TAG, log); if (mPersistentLogger != null) { Loading tests/telephonytests/src/com/android/internal/telephony/satellite/SatelliteSOSMessageRecommenderTest.java +72 −0 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; Loading @@ -46,7 +47,9 @@ import android.os.OutcomeReceiver; import android.os.RemoteException; import android.telecom.Connection; import android.telecom.TelecomManager; import android.telephony.AccessNetworkConstants; import android.telephony.BinderCacheManager; import android.telephony.NetworkRegistrationInfo; import android.telephony.ServiceState; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; Loading Loading @@ -552,6 +555,75 @@ public class SatelliteSOSMessageRecommenderTest extends TelephonyTest { assertEquals(carrierTimeoutMillis, mTestSOSMessageRecommender.getTimeOutMillis()); } @Test public void testIsSatellitePlmn() { int subId = 1; // Satellite PLMN list is empty SatelliteSOSMessageRecommender sosMessageRecommender = new TestSOSMessageRecommender( mContext, Looper.myLooper(), mSatelliteController, mTestImsManager); when(mSatelliteController.getSatellitePlmnsForCarrier(eq(subId))) .thenReturn(new ArrayList<>()); assertFalse(sosMessageRecommender.isSatellitePlmn(subId, mServiceState)); // registered PLMN is null NetworkRegistrationInfo nri = new NetworkRegistrationInfo.Builder() .setRegisteredPlmn(null) .build(); when(mServiceState.getNetworkRegistrationInfoListForTransportType( eq(AccessNetworkConstants.TRANSPORT_TYPE_WWAN))) .thenReturn(List.of(nri)); assertFalse(sosMessageRecommender.isSatellitePlmn(subId, mServiceState)); // cell identity is null when(mSatelliteController.getSatellitePlmnsForCarrier(eq(subId))).thenReturn( List.of("120260")); nri = new NetworkRegistrationInfo.Builder() .setRegisteredPlmn("123456") .setCellIdentity(null) .build(); when(mServiceState.getNetworkRegistrationInfoListForTransportType( eq(AccessNetworkConstants.TRANSPORT_TYPE_WWAN))) .thenReturn(List.of(nri)); assertFalse(sosMessageRecommender.isSatellitePlmn(subId, mServiceState)); // mcc and mnc are null when(mCellIdentity.getMccString()).thenReturn(null); when(mCellIdentity.getMncString()).thenReturn(null); nri = new NetworkRegistrationInfo.Builder() .setRegisteredPlmn("123456") .setCellIdentity(mCellIdentity) .build(); when(mServiceState.getNetworkRegistrationInfoListForTransportType( eq(AccessNetworkConstants.TRANSPORT_TYPE_WWAN))) .thenReturn(List.of(nri)); assertFalse(sosMessageRecommender.isSatellitePlmn(subId, mServiceState)); // mccmnc equal to satellite PLMN when(mCellIdentity.getMccString()).thenReturn("120"); when(mCellIdentity.getMncString()).thenReturn("260"); nri = new NetworkRegistrationInfo.Builder() .setRegisteredPlmn("123456") .setCellIdentity(mCellIdentity) .build(); when(mServiceState.getNetworkRegistrationInfoListForTransportType( eq(AccessNetworkConstants.TRANSPORT_TYPE_WWAN))) .thenReturn(List.of(nri)); assertTrue(sosMessageRecommender.isSatellitePlmn(subId, mServiceState)); // registered PLMN equal to satellite PLMN when(mCellIdentity.getMccString()).thenReturn("123"); when(mCellIdentity.getMncString()).thenReturn("456"); nri = new NetworkRegistrationInfo.Builder() .setRegisteredPlmn("120260") .setCellIdentity(mCellIdentity) .build(); when(mServiceState.getNetworkRegistrationInfoListForTransportType( eq(AccessNetworkConstants.TRANSPORT_TYPE_WWAN))) .thenReturn(List.of(nri)); assertTrue(sosMessageRecommender.isSatellitePlmn(subId, mServiceState)); } private void testStopTrackingCallBeforeTimeout( @Connection.ConnectionState int connectionState) { mTestSOSMessageRecommender.onEmergencyCallStarted(mTestConnection); Loading Loading
src/java/com/android/internal/telephony/satellite/SatelliteSOSMessageRecommender.java +31 −6 Original line number Diff line number Diff line Loading @@ -44,6 +44,7 @@ import android.os.SystemProperties; import android.provider.DeviceConfig; import android.telecom.Connection; import android.telephony.AccessNetworkConstants; import android.telephony.CellIdentity; import android.telephony.DropBoxManagerLoggerBackend; import android.telephony.NetworkRegistrationInfo; import android.telephony.PersistentLogger; Loading Loading @@ -465,11 +466,13 @@ public class SatelliteSOSMessageRecommender extends Handler { return false; } private boolean isSatellitePlmn(int subId, @NonNull ServiceState serviceState) { /** Check whether device is connected to satellite PLMN */ @VisibleForTesting(visibility = VisibleForTesting.Visibility.PRIVATE) public boolean isSatellitePlmn(int subId, @NonNull ServiceState serviceState) { List<String> satellitePlmnList = mSatelliteController.getSatellitePlmnsForCarrier(subId); if (satellitePlmnList.isEmpty()) { logv("isSatellitePlmn: satellitePlmnList is empty"); plogd("isSatellitePlmn: satellitePlmnList is empty"); return false; } Loading @@ -477,19 +480,23 @@ public class SatelliteSOSMessageRecommender extends Handler { serviceState.getNetworkRegistrationInfoListForTransportType( AccessNetworkConstants.TRANSPORT_TYPE_WWAN)) { String registeredPlmn = nri.getRegisteredPlmn(); String mccmnc = nri.getCellIdentity().getMccString() + nri.getCellIdentity().getMncString(); if (TextUtils.isEmpty(registeredPlmn)) { plogd("isSatellitePlmn: registeredPlmn is empty"); continue; } String mccmnc = getMccMnc(nri); for (String satellitePlmn : satellitePlmnList) { if (TextUtils.equals(satellitePlmn, registeredPlmn) || TextUtils.equals(satellitePlmn, mccmnc)) { logv("isSatellitePlmn: return true, satellitePlmn:" + satellitePlmn plogd("isSatellitePlmn: return true, satellitePlmn:" + satellitePlmn + " registeredPlmn:" + registeredPlmn + " mccmnc:" + mccmnc); return true; } } } logv("isSatellitePlmn: return false"); plogd("isSatellitePlmn: return false"); return false; } Loading Loading @@ -829,6 +836,24 @@ public class SatelliteSOSMessageRecommender extends Handler { } } @Nullable private String getMccMnc(@NonNull NetworkRegistrationInfo nri) { CellIdentity cellIdentity = nri.getCellIdentity(); if (cellIdentity == null) { plogd("getMccMnc: cellIdentity is null"); return null; } String mcc = cellIdentity.getMccString(); String mnc = cellIdentity.getMncString(); if (mcc == null || mnc == null) { plogd("getMccMnc: mcc or mnc is null. mcc=" + mcc + " mnc=" + mnc); return null; } return mcc + mnc; } private void plogd(@NonNull String log) { Rlog.d(TAG, log); if (mPersistentLogger != null) { Loading
tests/telephonytests/src/com/android/internal/telephony/satellite/SatelliteSOSMessageRecommenderTest.java +72 −0 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; Loading @@ -46,7 +47,9 @@ import android.os.OutcomeReceiver; import android.os.RemoteException; import android.telecom.Connection; import android.telecom.TelecomManager; import android.telephony.AccessNetworkConstants; import android.telephony.BinderCacheManager; import android.telephony.NetworkRegistrationInfo; import android.telephony.ServiceState; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; Loading Loading @@ -552,6 +555,75 @@ public class SatelliteSOSMessageRecommenderTest extends TelephonyTest { assertEquals(carrierTimeoutMillis, mTestSOSMessageRecommender.getTimeOutMillis()); } @Test public void testIsSatellitePlmn() { int subId = 1; // Satellite PLMN list is empty SatelliteSOSMessageRecommender sosMessageRecommender = new TestSOSMessageRecommender( mContext, Looper.myLooper(), mSatelliteController, mTestImsManager); when(mSatelliteController.getSatellitePlmnsForCarrier(eq(subId))) .thenReturn(new ArrayList<>()); assertFalse(sosMessageRecommender.isSatellitePlmn(subId, mServiceState)); // registered PLMN is null NetworkRegistrationInfo nri = new NetworkRegistrationInfo.Builder() .setRegisteredPlmn(null) .build(); when(mServiceState.getNetworkRegistrationInfoListForTransportType( eq(AccessNetworkConstants.TRANSPORT_TYPE_WWAN))) .thenReturn(List.of(nri)); assertFalse(sosMessageRecommender.isSatellitePlmn(subId, mServiceState)); // cell identity is null when(mSatelliteController.getSatellitePlmnsForCarrier(eq(subId))).thenReturn( List.of("120260")); nri = new NetworkRegistrationInfo.Builder() .setRegisteredPlmn("123456") .setCellIdentity(null) .build(); when(mServiceState.getNetworkRegistrationInfoListForTransportType( eq(AccessNetworkConstants.TRANSPORT_TYPE_WWAN))) .thenReturn(List.of(nri)); assertFalse(sosMessageRecommender.isSatellitePlmn(subId, mServiceState)); // mcc and mnc are null when(mCellIdentity.getMccString()).thenReturn(null); when(mCellIdentity.getMncString()).thenReturn(null); nri = new NetworkRegistrationInfo.Builder() .setRegisteredPlmn("123456") .setCellIdentity(mCellIdentity) .build(); when(mServiceState.getNetworkRegistrationInfoListForTransportType( eq(AccessNetworkConstants.TRANSPORT_TYPE_WWAN))) .thenReturn(List.of(nri)); assertFalse(sosMessageRecommender.isSatellitePlmn(subId, mServiceState)); // mccmnc equal to satellite PLMN when(mCellIdentity.getMccString()).thenReturn("120"); when(mCellIdentity.getMncString()).thenReturn("260"); nri = new NetworkRegistrationInfo.Builder() .setRegisteredPlmn("123456") .setCellIdentity(mCellIdentity) .build(); when(mServiceState.getNetworkRegistrationInfoListForTransportType( eq(AccessNetworkConstants.TRANSPORT_TYPE_WWAN))) .thenReturn(List.of(nri)); assertTrue(sosMessageRecommender.isSatellitePlmn(subId, mServiceState)); // registered PLMN equal to satellite PLMN when(mCellIdentity.getMccString()).thenReturn("123"); when(mCellIdentity.getMncString()).thenReturn("456"); nri = new NetworkRegistrationInfo.Builder() .setRegisteredPlmn("120260") .setCellIdentity(mCellIdentity) .build(); when(mServiceState.getNetworkRegistrationInfoListForTransportType( eq(AccessNetworkConstants.TRANSPORT_TYPE_WWAN))) .thenReturn(List.of(nri)); assertTrue(sosMessageRecommender.isSatellitePlmn(subId, mServiceState)); } private void testStopTrackingCallBeforeTimeout( @Connection.ConnectionState int connectionState) { mTestSOSMessageRecommender.onEmergencyCallStarted(mTestConnection); Loading