Merge "Clear binding identity before calling satellite provision APIs" into main
diff --git a/assets/CarrierRestrictionOperatorDetails.json b/assets/CarrierRestrictionOperatorDetails.json
index a088f94..4f650a0 100644
--- a/assets/CarrierRestrictionOperatorDetails.json
+++ b/assets/CarrierRestrictionOperatorDetails.json
@@ -2,6 +2,7 @@
"_comment": "Operator should register with its application package name, carrierId and all the corresponding SHA256IDs",
"_comment": "Example format :: << \"packageName\" : {\"carrierId\":[<int>], \"callerSHA256Ids\":[<SHAID1>, <SHAID2>]} >>",
"com.vzw.hss.myverizon":{"carrierIds":[1839],"callerSHA256Ids":["AE23A03436DF07B0CD70FE881CDA2EC1D21215D7B7B0CC68E67B67F5DF89526A"]},
+ "com.verizon.mips.services":{"carrierIds":[1839],"callerSHA256Ids":["FF82050BF6BED1F152AC1A12DC83CACBAD401775161882872C6665FC5E15C8F2"]},
"com.google.android.apps.tycho":{"carrierIds":[1989],"callerSHA256Ids":["B9CFCE1C47A6AC713442718F15EF55B00B3A6D1A6D48CB46249FA8EB51465350","4C36AF4A5BDAD97C1F3D8B283416D244496C2AC5EAFE8226079EF6F676FD1859"]},
"com.comcast.mobile.mxs":{"carrierIds": [2032,2532,2556],"callerSHA256Ids":["914C26403B57D2D482359FC235CC825AD00D52B0121C18EF2B2B9D4DDA4B8996"]},
"com.xfinity.digitalhome": {"carrierIds": [2032,2532,2556],"callerSHA256Ids":["31b4c17315c2269040d535f7b6a79cf4d11517c664d9de8f1ddf4f8a785aad47"]},
diff --git a/src/com/android/phone/PhoneGlobals.java b/src/com/android/phone/PhoneGlobals.java
index 149e1c2..dcddf2b 100644
--- a/src/com/android/phone/PhoneGlobals.java
+++ b/src/com/android/phone/PhoneGlobals.java
@@ -44,6 +44,7 @@
import android.telecom.TelecomManager;
import android.telephony.AnomalyReporter;
import android.telephony.CarrierConfigManager;
+import android.telephony.NetworkRegistrationInfo;
import android.telephony.ServiceState;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
@@ -373,12 +374,16 @@
break;
case EVENT_DATA_ROAMING_DISCONNECTED:
+ Log.d(LOG_TAG, "EVENT_DATA_ROAMING_DISCONNECTED");
if (SubscriptionManagerService.getInstance()
.isEsimBootStrapProvisioningActiveForSubId(msg.arg1)) {
Log.i(LOG_TAG,
"skip notification/warnings during esim bootstrap activation");
+ } else if (skipDataRoamingDisconnectedNotificationInSatelliteMode((msg.arg1))) {
+ Log.i(LOG_TAG, "skip data roaming disconnected notification when device is "
+ + "connected to satellite network that does not support data.");
} else {
- notificationMgr.showDataRoamingNotification(msg.arg1, false);
+ notificationMgr.showDataRoamingNotification((msg.arg1), false);
}
break;
@@ -1496,4 +1501,32 @@
}
pw.println("------- End PhoneGlobals -------");
}
+
+ private boolean skipDataRoamingDisconnectedNotificationInSatelliteMode(int subId) {
+ SatelliteController satelliteController = SatelliteController.getInstance();
+ if (satelliteController.isSatelliteEnabledOrBeingEnabled()) {
+ Log.d(LOG_TAG, "skipDataRoamingDisconnected - skip notification as "
+ + "satellite is enabled or being enabled");
+ return true;
+ }
+
+ int phoneId = SubscriptionManager.getPhoneId(subId);
+ Phone phone = PhoneFactory.getPhone(phoneId);
+ ServiceState serviceState = phone.getServiceState();
+ if (serviceState != null && serviceState.isUsingNonTerrestrialNetwork()) {
+ Log.d(LOG_TAG, "skipDataRoamingDisconnected - isUsingNtn");
+ List<Integer> capabilities =
+ satelliteController.getCapabilitiesForCarrierRoamingSatelliteMode(phone);
+ if (!capabilities.contains(NetworkRegistrationInfo.SERVICE_TYPE_DATA)) {
+ // Skip data roaming disconnected notification as device is connected to
+ // non-terrestrial network that does not support data.
+ Log.d(LOG_TAG, "skipDataRoamingDisconnected - skip notification as "
+ + "NTN does not support data");
+ return true;
+ }
+ }
+
+ Log.d(LOG_TAG, "skipDataRoamingDisconnected - do not skip notification.");
+ return false;
+ }
}
diff --git a/src/com/android/services/telephony/TelephonyConnectionService.java b/src/com/android/services/telephony/TelephonyConnectionService.java
index 4226635..c69880d 100644
--- a/src/com/android/services/telephony/TelephonyConnectionService.java
+++ b/src/com/android/services/telephony/TelephonyConnectionService.java
@@ -1202,20 +1202,17 @@
}
}
- boolean forNormalRoutingEmergencyCall = false;
if (mDomainSelectionResolver.isDomainSelectionSupported()) {
- if (isEmergencyNumber) {
- // Normal routing emergency number shall be handled by normal call domain selector.
- int routing = getEmergencyCallRouting(phone, number, needToTurnOnRadio);
- if (routing != EmergencyNumber.EMERGENCY_CALL_ROUTING_NORMAL) {
- final Connection resultConnection =
- placeEmergencyConnection(phone,
- request, numberToDial, isTestEmergencyNumber,
- handle, needToTurnOnRadio, routing);
- if (resultConnection != null) return resultConnection;
- }
- forNormalRoutingEmergencyCall = true;
- Log.d(this, "onCreateOutgoingConnection, forNormalRoutingEmergencyCall");
+ // Normal routing emergency number shall be handled by normal call domain selector.
+ int routing = (isEmergencyNumber)
+ ? getEmergencyCallRouting(phone, number, needToTurnOnRadio)
+ : EmergencyNumber.EMERGENCY_CALL_ROUTING_UNKNOWN;
+ if (isEmergencyNumber && routing != EmergencyNumber.EMERGENCY_CALL_ROUTING_NORMAL) {
+ final Connection resultConnection =
+ placeEmergencyConnection(phone,
+ request, numberToDial, isTestEmergencyNumber,
+ handle, needToTurnOnRadio, routing);
+ if (resultConnection != null) return resultConnection;
}
}
@@ -1303,7 +1300,7 @@
}
}
}, isEmergencyNumber && !isTestEmergencyNumber, phone, isTestEmergencyNumber,
- timeoutToOnTimeoutCallback, forNormalRoutingEmergencyCall);
+ timeoutToOnTimeoutCallback);
// Return the still unconnected GsmConnection and wait for the Radios to boot before
// connecting it to the underlying Phone.
return resultConnection;
diff --git a/tests/src/com/android/services/telephony/ImsConferenceTest.java b/tests/src/com/android/services/telephony/ImsConferenceTest.java
index ca16bc7..b6cb11a 100644
--- a/tests/src/com/android/services/telephony/ImsConferenceTest.java
+++ b/tests/src/com/android/services/telephony/ImsConferenceTest.java
@@ -124,6 +124,30 @@
}
/**
+ * Verifies that the default address presentation of an ImsConference is
+ * {@link TelecomManager#PRESENTATION_UNKNOWN}
+ */
+ @Test
+ @SmallTest
+ public void testDefaultNumberPresentationIsValid() {
+ when(mMockTelecomAccountRegistry.isUsingSimCallManager(any(PhoneAccountHandle.class)))
+ .thenReturn(false);
+ mConferenceHost.setConnectionProperties(Connection.PROPERTY_ASSISTED_DIALING
+ | Connection.PROPERTY_WIFI);
+ Bundle extras = new Bundle();
+ extras.putInt(TelecomManager.EXTRA_CALL_NETWORK_TYPE, TelephonyManager.NETWORK_TYPE_IWLAN);
+ mConferenceHost.putTelephonyExtras(extras);
+ mConferenceHost.setStatusHints(new StatusHints("WIFIs", null, null));
+
+ ImsConference imsConference = new ImsConference(mMockTelecomAccountRegistry,
+ mMockTelephonyConnectionServiceProxy, mConferenceHost,
+ null /* phoneAccountHandle */, () -> true /* featureFlagProxy */,
+ new ImsConference.CarrierConfiguration.Builder().build());
+
+ assertEquals(TelecomManager.PRESENTATION_UNKNOWN, imsConference.getAddressPresentation());
+ }
+
+ /**
* Verifies that an ImsConference will inform listeners when the "fullness" of the conference
* changes as participants come and go.
*/
diff --git a/tests/src/com/android/services/telephony/TelephonyConnectionServiceTest.java b/tests/src/com/android/services/telephony/TelephonyConnectionServiceTest.java
index e8b84d9..5618770 100644
--- a/tests/src/com/android/services/telephony/TelephonyConnectionServiceTest.java
+++ b/tests/src/com/android/services/telephony/TelephonyConnectionServiceTest.java
@@ -1309,7 +1309,7 @@
ArgumentCaptor<RadioOnStateListener.Callback> callback =
ArgumentCaptor.forClass(RadioOnStateListener.Callback.class);
verify(mRadioOnHelper).triggerRadioOnAndListen(callback.capture(), eq(true),
- eq(testPhone), eq(false), eq(0), eq(false));
+ eq(testPhone), eq(false), eq(0));
assertFalse(callback.getValue()
.isOkToCall(testPhone, ServiceState.STATE_OUT_OF_SERVICE, false));
@@ -1337,7 +1337,7 @@
ArgumentCaptor<RadioOnStateListener.Callback> callback =
ArgumentCaptor.forClass(RadioOnStateListener.Callback.class);
verify(mRadioOnHelper).triggerRadioOnAndListen(callback.capture(), eq(true),
- eq(testPhone), eq(false), eq(0), eq(false));
+ eq(testPhone), eq(false), eq(0));
assertFalse(callback.getValue()
.isOkToCall(testPhone, ServiceState.STATE_OUT_OF_SERVICE, false));
@@ -1449,7 +1449,7 @@
ArgumentCaptor<RadioOnStateListener.Callback> callback =
ArgumentCaptor.forClass(RadioOnStateListener.Callback.class);
verify(mRadioOnHelper).triggerRadioOnAndListen(callback.capture(), eq(true),
- eq(testPhone), eq(false), eq(0), eq(false));
+ eq(testPhone), eq(false), eq(0));
assertFalse(callback.getValue()
.isOkToCall(testPhone, ServiceState.STATE_OUT_OF_SERVICE, false));
@@ -1600,7 +1600,7 @@
PHONE_ACCOUNT_HANDLE_1, connectionRequest);
verify(mRadioOnHelper).triggerRadioOnAndListen(any(), eq(false),
- eq(testPhone0), eq(false), eq(0), eq(false));
+ eq(testPhone0), eq(false), eq(0));
}
/**
@@ -1634,7 +1634,7 @@
PHONE_ACCOUNT_HANDLE_1, connectionRequest);
verify(mRadioOnHelper).triggerRadioOnAndListen(any(), eq(false),
- eq(testPhone0), eq(false), eq(0), eq(false));
+ eq(testPhone0), eq(false), eq(0));
}
/**
@@ -1667,7 +1667,7 @@
PHONE_ACCOUNT_HANDLE_1, connectionRequest);
verify(mRadioOnHelper, times(0)).triggerRadioOnAndListen(any(),
- eq(true), eq(testPhone0), eq(false), eq(0), eq(false));
+ eq(true), eq(testPhone0), eq(false), eq(0));
}
/**
@@ -2820,7 +2820,7 @@
ArgumentCaptor<RadioOnStateListener.Callback> callback =
ArgumentCaptor.forClass(RadioOnStateListener.Callback.class);
verify(mRadioOnHelper).triggerRadioOnAndListen(callback.capture(), eq(true),
- eq(testPhone), eq(false), eq(TIMEOUT_TO_DYNAMIC_ROUTING_MS), eq(true));
+ eq(testPhone), eq(false), eq(TIMEOUT_TO_DYNAMIC_ROUTING_MS));
ServiceState ss = new ServiceState();
ss.setState(ServiceState.STATE_OUT_OF_SERVICE);
@@ -2859,7 +2859,7 @@
ArgumentCaptor<RadioOnStateListener.Callback> callback =
ArgumentCaptor.forClass(RadioOnStateListener.Callback.class);
verify(mRadioOnHelper).triggerRadioOnAndListen(callback.capture(), eq(true),
- eq(testPhone), eq(false), eq(TIMEOUT_TO_DYNAMIC_ROUTING_MS), eq(true));
+ eq(testPhone), eq(false), eq(TIMEOUT_TO_DYNAMIC_ROUTING_MS));
ServiceState ss = new ServiceState();
ss.setState(ServiceState.STATE_OUT_OF_SERVICE);
@@ -2884,7 +2884,7 @@
ArgumentCaptor<RadioOnStateListener.Callback> callback =
ArgumentCaptor.forClass(RadioOnStateListener.Callback.class);
verify(mRadioOnHelper).triggerRadioOnAndListen(callback.capture(), eq(true),
- eq(testPhone), eq(false), eq(TIMEOUT_TO_DYNAMIC_ROUTING_MS), eq(true));
+ eq(testPhone), eq(false), eq(TIMEOUT_TO_DYNAMIC_ROUTING_MS));
ServiceState ss = new ServiceState();
ss.setState(ServiceState.STATE_IN_SERVICE);
@@ -2920,7 +2920,7 @@
ArgumentCaptor<RadioOnStateListener.Callback> callback =
ArgumentCaptor.forClass(RadioOnStateListener.Callback.class);
verify(mRadioOnHelper).triggerRadioOnAndListen(callback.capture(), eq(true),
- eq(testPhone), eq(false), eq(TIMEOUT_TO_DYNAMIC_ROUTING_MS), eq(true));
+ eq(testPhone), eq(false), eq(TIMEOUT_TO_DYNAMIC_ROUTING_MS));
ServiceState ss = new ServiceState();
ss.setState(ServiceState.STATE_IN_SERVICE);
@@ -2957,7 +2957,7 @@
ArgumentCaptor<RadioOnStateListener.Callback> callback =
ArgumentCaptor.forClass(RadioOnStateListener.Callback.class);
verify(mRadioOnHelper).triggerRadioOnAndListen(callback.capture(), eq(true),
- eq(testPhone), eq(false), eq(TIMEOUT_TO_DYNAMIC_ROUTING_MS), eq(true));
+ eq(testPhone), eq(false), eq(TIMEOUT_TO_DYNAMIC_ROUTING_MS));
ServiceState ss = new ServiceState();
ss.setState(ServiceState.STATE_IN_SERVICE);
@@ -2994,7 +2994,7 @@
ArgumentCaptor<RadioOnStateListener.Callback> callback =
ArgumentCaptor.forClass(RadioOnStateListener.Callback.class);
verify(mRadioOnHelper).triggerRadioOnAndListen(callback.capture(), eq(true),
- eq(testPhone), eq(false), eq(TIMEOUT_TO_DYNAMIC_ROUTING_MS), eq(true));
+ eq(testPhone), eq(false), eq(TIMEOUT_TO_DYNAMIC_ROUTING_MS));
mConnection.setDisconnected(null);