Merge "Add API to check extended APDU Supported" into pi-dev
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 08819ef..38c5468 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -369,7 +369,7 @@
<!-- Available networks screen, text when no networks are found -->
<string name="empty_networks_list">No networks found.</string>
<!-- Available networks screen, toast when an error is encountered when searching for networks -->
- <string name="network_query_error">Error while searching for networks.</string>
+ <string name="network_query_error">Couldn\'t find networks. Try again.</string>
<!-- Available networks screen, toast when registering on a specific network -->
<string name="register_on_network">Registering on <xliff:g id="network">%s</xliff:g>\u2026</string>
<!-- Available networks screen, toast when SIM card isn't allowed on a network -->
diff --git a/src/com/android/phone/NetworkQueryService.java b/src/com/android/phone/NetworkQueryService.java
index 86f4b11..22b5509 100644
--- a/src/com/android/phone/NetworkQueryService.java
+++ b/src/com/android/phone/NetworkQueryService.java
@@ -79,7 +79,7 @@
private static final boolean INCREMENTAL_RESULTS = true;
// The parameters below are in seconds
private static final int SEARCH_PERIODICITY_SEC = 5;
- private static final int MAX_SEARCH_TIME_SEC = 60;
+ private static final int MAX_SEARCH_TIME_SEC = 300;
private static final int INCREMENTAL_RESULTS_PERIODICITY_SEC = 3;
/**
diff --git a/src/com/android/phone/PhoneInterfaceManager.java b/src/com/android/phone/PhoneInterfaceManager.java
index e70e89d..ccf2154 100755
--- a/src/com/android/phone/PhoneInterfaceManager.java
+++ b/src/com/android/phone/PhoneInterfaceManager.java
@@ -1264,7 +1264,7 @@
@Override
public boolean isOffhookForSubscriber(int subId, String callingPackage) {
if (!TelephonyPermissions.checkCallingOrSelfReadPhoneState(
- mApp, callingPackage, "isOffhookForSubscriber")) {
+ mApp, subId, callingPackage, "isOffhookForSubscriber")) {
return false;
}
@@ -1284,7 +1284,7 @@
@Override
public boolean isRingingForSubscriber(int subId, String callingPackage) {
if (!TelephonyPermissions.checkCallingOrSelfReadPhoneState(
- mApp, callingPackage, "isRingingForSubscriber")) {
+ mApp, subId, callingPackage, "isRingingForSubscriber")) {
return false;
}
@@ -1304,7 +1304,7 @@
@Override
public boolean isIdleForSubscriber(int subId, String callingPackage) {
if (!TelephonyPermissions.checkCallingOrSelfReadPhoneState(
- mApp, callingPackage, "isIdleForSubscriber")) {
+ mApp, subId, callingPackage, "isIdleForSubscriber")) {
return false;
}
@@ -1480,7 +1480,7 @@
@Override
public boolean isRadioOnForSubscriber(int subId, String callingPackage) {
if (!TelephonyPermissions.checkCallingOrSelfReadPhoneState(
- mApp, callingPackage, "isRadioOnForSubscriber")) {
+ mApp, subId, callingPackage, "isRadioOnForSubscriber")) {
return false;
}
return isRadioOnForSubscriber(subId);
@@ -1793,32 +1793,44 @@
@Override
public String getImeiForSlot(int slotIndex, String callingPackage) {
- if (!TelephonyPermissions.checkCallingOrSelfReadPhoneState(
- mApp, callingPackage, "getImeiForSlot")) {
+ Phone phone = PhoneFactory.getPhone(slotIndex);
+ if (phone == null) {
return null;
}
- Phone phone = PhoneFactory.getPhone(slotIndex);
- return phone == null ? null : phone.getImei();
+ int subId = phone.getSubId();
+ if (!TelephonyPermissions.checkCallingOrSelfReadPhoneState(
+ mApp, subId, callingPackage, "getImeiForSlot")) {
+ return null;
+ }
+ return phone.getImei();
}
@Override
public String getMeidForSlot(int slotIndex, String callingPackage) {
- if (!TelephonyPermissions.checkCallingOrSelfReadPhoneState(
- mApp, callingPackage, "getMeidForSlot")) {
+ Phone phone = PhoneFactory.getPhone(slotIndex);
+ if (phone == null) {
return null;
}
- Phone phone = PhoneFactory.getPhone(slotIndex);
- return phone == null ? null : phone.getMeid();
+ int subId = phone.getSubId();
+ if (!TelephonyPermissions.checkCallingOrSelfReadPhoneState(
+ mApp, subId, callingPackage, "getMeidForSlot")) {
+ return null;
+ }
+ return phone.getMeid();
}
@Override
public String getDeviceSoftwareVersionForSlot(int slotIndex, String callingPackage) {
- if (!TelephonyPermissions.checkCallingOrSelfReadPhoneState(
- mApp, callingPackage, "getDeviceSoftwareVersionForSlot")) {
+ Phone phone = PhoneFactory.getPhone(slotIndex);
+ if (phone == null) {
return null;
}
- Phone phone = PhoneFactory.getPhone(slotIndex);
- return phone == null ? null : phone.getDeviceSvn();
+ int subId = phone.getSubId();
+ if (!TelephonyPermissions.checkCallingOrSelfReadPhoneState(
+ mApp, subId, callingPackage, "getDeviceSoftwareVersionForSlot")) {
+ return null;
+ }
+ return phone.getDeviceSvn();
}
@Override
@@ -1907,7 +1919,7 @@
@Override
public int getCdmaEriIconIndexForSubscriber(int subId, String callingPackage) {
if (!TelephonyPermissions.checkCallingOrSelfReadPhoneState(
- mApp, callingPackage, "getCdmaEriIconIndexForSubscriber")) {
+ mApp, subId, callingPackage, "getCdmaEriIconIndexForSubscriber")) {
return -1;
}
final Phone phone = getPhone(subId);
@@ -1931,7 +1943,7 @@
@Override
public int getCdmaEriIconModeForSubscriber(int subId, String callingPackage) {
if (!TelephonyPermissions.checkCallingOrSelfReadPhoneState(
- mApp, callingPackage, "getCdmaEriIconModeForSubscriber")) {
+ mApp, subId, callingPackage, "getCdmaEriIconModeForSubscriber")) {
return -1;
}
final Phone phone = getPhone(subId);
@@ -1953,7 +1965,7 @@
@Override
public String getCdmaEriTextForSubscriber(int subId, String callingPackage) {
if (!TelephonyPermissions.checkCallingOrSelfReadPhoneState(
- mApp, callingPackage, "getCdmaEriIconTextForSubscriber")) {
+ mApp, subId, callingPackage, "getCdmaEriIconTextForSubscriber")) {
return null;
}
final Phone phone = getPhone(subId);
@@ -2030,7 +2042,7 @@
public String getVisualVoicemailPackageName(String callingPackage, int subId) {
mAppOps.checkPackage(Binder.getCallingUid(), callingPackage);
if (!TelephonyPermissions.checkCallingOrSelfReadPhoneState(
- mApp, callingPackage, "getVisualVoicemailPackageName")) {
+ mApp, subId, callingPackage, "getVisualVoicemailPackageName")) {
return null;
}
return RemoteVvmTaskManager.getRemotePackage(mPhone.getContext(), subId).getPackageName();
@@ -2215,7 +2227,7 @@
@Override
public int getNetworkTypeForSubscriber(int subId, String callingPackage) {
if (!TelephonyPermissions.checkCallingOrSelfReadPhoneState(
- mApp, callingPackage, "getNetworkTypeForSubscriber")) {
+ mApp, subId, callingPackage, "getNetworkTypeForSubscriber")) {
return TelephonyManager.NETWORK_TYPE_UNKNOWN;
}
@@ -2241,7 +2253,7 @@
@Override
public int getDataNetworkTypeForSubscriber(int subId, String callingPackage) {
if (!TelephonyPermissions.checkCallingOrSelfReadPhoneState(
- mApp, callingPackage, "getDataNetworkTypeForSubscriber")) {
+ mApp, subId, callingPackage, "getDataNetworkTypeForSubscriber")) {
return TelephonyManager.NETWORK_TYPE_UNKNOWN;
}
@@ -2259,7 +2271,7 @@
@Override
public int getVoiceNetworkTypeForSubscriber(int subId, String callingPackage) {
if (!TelephonyPermissions.checkCallingOrSelfReadPhoneState(
- mApp, callingPackage, "getDataNetworkTypeForSubscriber")) {
+ mApp, subId, callingPackage, "getDataNetworkTypeForSubscriber")) {
return TelephonyManager.NETWORK_TYPE_UNKNOWN;
}
@@ -2310,7 +2322,7 @@
@Override
public int getLteOnCdmaModeForSubscriber(int subId, String callingPackage) {
if (!TelephonyPermissions.checkCallingOrSelfReadPhoneState(
- mApp, callingPackage, "getLteOnCdmaModeForSubscriber")) {
+ mApp, subId, callingPackage, "getLteOnCdmaModeForSubscriber")) {
return PhoneConstants.LTE_ON_CDMA_UNKNOWN;
}
@@ -2509,6 +2521,7 @@
* on a particular subscription
*/
public String[] getForbiddenPlmns(int subId, int appType) {
+ // TODO(b/73884967): Migrate to TelephonyPermissions check.
mApp.enforceCallingOrSelfPermission(android.Manifest.permission.READ_PHONE_STATE,
"Requires READ_PHONE_STATE");
if (appType != TelephonyManager.APPTYPE_USIM && appType != TelephonyManager.APPTYPE_SIM) {
@@ -2622,7 +2635,7 @@
public String[] getPcscfAddress(String apnType, String callingPackage) {
if (!TelephonyPermissions.checkCallingOrSelfReadPhoneState(
- mApp, callingPackage, "getPcscfAddress")) {
+ mApp, mPhone.getSubId(), callingPackage, "getPcscfAddress")) {
return new String[0];
}
@@ -2696,6 +2709,15 @@
return PhoneFactory.getImsResolver().isEmergencyMmTelAvailable(slotId);
}
+ /**
+ * @return true if the IMS resolver is busy resolving a binding and should not be considered
+ * available, false if the IMS resolver is idle.
+ */
+ public boolean isResolvingImsBinding() {
+ enforceModifyPermission();
+ return PhoneFactory.getImsResolver().isResolvingBinding();
+ }
+
public void setImsRegistrationState(boolean registered) {
enforceModifyPermission();
mPhone.setImsRegistrationState(registered);
@@ -2784,7 +2806,7 @@
@Override
public int getCalculatedPreferredNetworkType(String callingPackage) {
if (!TelephonyPermissions.checkCallingOrSelfReadPhoneState(
- mApp, callingPackage, "getCalculatedPreferredNetworkType")) {
+ mApp, mPhone.getSubId(), callingPackage, "getCalculatedPreferredNetworkType")) {
return RILConstants.PREFERRED_NETWORK_MODE;
}
@@ -3129,7 +3151,7 @@
public String getLine1NumberForDisplay(int subId, String callingPackage) {
// This is open to apps with WRITE_SMS.
if (!TelephonyPermissions.checkCallingOrSelfReadPhoneNumber(
- mApp, callingPackage, "getLine1NumberForDisplay")) {
+ mApp, subId, callingPackage, "getLine1NumberForDisplay")) {
if (DBG_MERGE) log("getLine1NumberForDisplay returning null due to permission");
return null;
}
@@ -3150,7 +3172,7 @@
@Override
public String getLine1AlphaTagForDisplay(int subId, String callingPackage) {
if (!TelephonyPermissions.checkCallingOrSelfReadPhoneState(
- mApp, callingPackage, "getLine1AlphaTagForDisplay")) {
+ mApp, subId, callingPackage, "getLine1AlphaTagForDisplay")) {
return null;
}
@@ -3164,8 +3186,11 @@
@Override
public String[] getMergedSubscriberIds(String callingPackage) {
+ // This API isn't public, so no need to provide a valid subscription ID - we're not worried
+ // about carrier-privileged callers not having access.
if (!TelephonyPermissions.checkCallingOrSelfReadPhoneState(
- mApp, callingPackage, "getMergedSubscriberIds")) {
+ mApp, SubscriptionManager.INVALID_SUBSCRIPTION_ID, callingPackage,
+ "getMergedSubscriberIds")) {
return null;
}
final Context context = mPhone.getContext();
@@ -3268,8 +3293,13 @@
@Override
public int getRadioAccessFamily(int phoneId, String callingPackage) {
+ Phone phone = PhoneFactory.getPhone(phoneId);
+ if (phone == null) {
+ return RadioAccessFamily.RAF_UNKNOWN;
+ }
+ int subId = phone.getSubId();
if (!TelephonyPermissions.checkCallingOrSelfReadPhoneState(
- mApp, callingPackage, "getRadioAccessFamily")) {
+ mApp, subId, callingPackage, "getRadioAccessFamily")) {
return RadioAccessFamily.RAF_UNKNOWN;
}
@@ -3285,7 +3315,7 @@
@Override
public boolean isVideoCallingEnabled(String callingPackage) {
if (!TelephonyPermissions.checkCallingOrSelfReadPhoneState(
- mApp, callingPackage, "isVideoCallingEnabled")) {
+ mApp, mPhone.getSubId(), callingPackage, "isVideoCallingEnabled")) {
return false;
}
@@ -3339,17 +3369,16 @@
*/
@Override
public String getDeviceId(String callingPackage) {
- if (!TelephonyPermissions.checkCallingOrSelfReadPhoneState(
- mApp, callingPackage, "getDeviceId")) {
- return null;
- }
-
final Phone phone = PhoneFactory.getPhone(0);
- if (phone != null) {
- return phone.getDeviceId();
- } else {
+ if (phone == null) {
return null;
}
+ int subId = phone.getSubId();
+ if (!TelephonyPermissions.checkCallingOrSelfReadPhoneState(
+ mApp, subId, callingPackage, "getDeviceId")) {
+ return null;
+ }
+ return phone.getDeviceId();
}
/**
@@ -3584,7 +3613,7 @@
public ServiceState getServiceStateForSubscriber(int subId, String callingPackage) {
if (!TelephonyPermissions.checkCallingOrSelfReadPhoneState(
- mApp, callingPackage, "getServiceStateForSubscriber")) {
+ mApp, subId, callingPackage, "getServiceStateForSubscriber")) {
return null;
}
@@ -3970,7 +3999,7 @@
@Override
public List<ClientRequestStats> getClientRequestStats(String callingPackage, int subId) {
if (!TelephonyPermissions.checkCallingOrSelfReadPhoneState(
- mApp, callingPackage, "getClientRequestStats")) {
+ mApp, subId, callingPackage, "getClientRequestStats")) {
return null;
}
diff --git a/src/com/android/phone/euicc/EuiccUiDispatcherActivity.java b/src/com/android/phone/euicc/EuiccUiDispatcherActivity.java
index 19ef9f7..8297c18 100644
--- a/src/com/android/phone/euicc/EuiccUiDispatcherActivity.java
+++ b/src/com/android/phone/euicc/EuiccUiDispatcherActivity.java
@@ -89,15 +89,13 @@
String action = getIntent().getAction();
Intent intent = new Intent();
+ intent.putExtras(getIntent());
switch (action) {
case EuiccManager.ACTION_MANAGE_EMBEDDED_SUBSCRIPTIONS:
intent.setAction(EuiccService.ACTION_MANAGE_EMBEDDED_SUBSCRIPTIONS);
break;
case EuiccManager.ACTION_PROVISION_EMBEDDED_SUBSCRIPTION:
intent.setAction(EuiccService.ACTION_PROVISION_EMBEDDED_SUBSCRIPTION);
- intent.putExtra(
- EuiccManager.EXTRA_FORCE_PROVISION,
- getIntent().getBooleanExtra(EuiccManager.EXTRA_FORCE_PROVISION, false));
break;
default:
Log.w(TAG, "Unsupported action: " + action);
diff --git a/src/com/android/phone/vvm/RemoteVvmTaskManager.java b/src/com/android/phone/vvm/RemoteVvmTaskManager.java
index 3a18c7e..98cb959 100644
--- a/src/com/android/phone/vvm/RemoteVvmTaskManager.java
+++ b/src/com/android/phone/vvm/RemoteVvmTaskManager.java
@@ -139,6 +139,8 @@
TelecomManager telecomManager = context.getSystemService(TelecomManager.class);
List<String> packages = new ArrayList<>();
packages.add(telecomManager.getDefaultDialerPackage());
+ // TODO(b/73136824): Check permissions in the calling function and avoid relying on the
+ // binder caller's permissions to access the carrier config.
PersistableBundle carrierConfig = context
.getSystemService(CarrierConfigManager.class).getConfigForSubId(subId);
packages.add(
diff --git a/src/com/android/services/telephony/TelephonyConnection.java b/src/com/android/services/telephony/TelephonyConnection.java
index a7bd2f2..f7d1747 100644
--- a/src/com/android/services/telephony/TelephonyConnection.java
+++ b/src/com/android/services/telephony/TelephonyConnection.java
@@ -1706,6 +1706,7 @@
private boolean isRtt() {
return mOriginalConnection != null
&& mOriginalConnection.getPhoneType() == PhoneConstants.PHONE_TYPE_IMS
+ && mOriginalConnection instanceof ImsPhoneConnection
&& ((ImsPhoneConnection) mOriginalConnection).isRttEnabledForCall();
}
diff --git a/testapps/ImsTestService/AndroidManifest.xml b/testapps/ImsTestService/AndroidManifest.xml
index 4d81ffd..f47210e 100644
--- a/testapps/ImsTestService/AndroidManifest.xml
+++ b/testapps/ImsTestService/AndroidManifest.xml
@@ -40,9 +40,8 @@
android:enabled="true"
android:persistent="true"
android:permission="android.permission.BIND_IMS_SERVICE">
- <meta-data android:name="android.telephony.ims.MMTEL_FEATURE" android:value="true"/>
- <!--meta-data android:name="android.telephony.ims.EMERGENCY_MMTEL_FEATURE"
- android:value="true" /-->
+ <!--meta-data android:name="android.telephony.ims.MMTEL_FEATURE" android:value="true"/-->
+ <!-- No features means we will get queried for dynamic config. -->
<intent-filter>
<action android:name="android.telephony.ims.ImsService" />
</intent-filter>
diff --git a/testapps/ImsTestService/src/com/android/phone/testapps/imstestapp/TestImsConfigImpl.java b/testapps/ImsTestService/src/com/android/phone/testapps/imstestapp/TestImsConfigImpl.java
index 4b8842a..3269a5a 100644
--- a/testapps/ImsTestService/src/com/android/phone/testapps/imstestapp/TestImsConfigImpl.java
+++ b/testapps/ImsTestService/src/com/android/phone/testapps/imstestapp/TestImsConfigImpl.java
@@ -55,6 +55,10 @@
return sTestImsConfigImpl;
}
+ private TestImsConfigImpl() {
+ super();
+ }
+
public void setConfigListener(ImsConfigListener listener) {
mListener = listener;
}
diff --git a/testapps/ImsTestService/src/com/android/phone/testapps/imstestapp/TestImsService.java b/testapps/ImsTestService/src/com/android/phone/testapps/imstestapp/TestImsService.java
index 434cdb5..71323d8 100644
--- a/testapps/ImsTestService/src/com/android/phone/testapps/imstestapp/TestImsService.java
+++ b/testapps/ImsTestService/src/com/android/phone/testapps/imstestapp/TestImsService.java
@@ -17,9 +17,11 @@
package com.android.phone.testapps.imstestapp;
import android.telephony.ims.ImsService;
+import android.telephony.ims.feature.ImsFeature;
import android.telephony.ims.feature.MmTelFeature;
import android.telephony.ims.feature.RcsFeature;
import android.telephony.ims.stub.ImsConfigImplBase;
+import android.telephony.ims.stub.ImsFeatureConfiguration;
import android.telephony.ims.stub.ImsRegistrationImplBase;
import android.util.Log;
@@ -54,8 +56,16 @@
}
@Override
+ public ImsFeatureConfiguration querySupportedImsFeatures() {
+ return new ImsFeatureConfiguration.Builder()
+ .addFeature(0, ImsFeature.FEATURE_EMERGENCY_MMTEL)
+ .addFeature(0, ImsFeature.FEATURE_MMTEL)
+ .build();
+ }
+
+ @Override
public MmTelFeature createMmTelFeature(int slotId) {
- Log.i(LOG_TAG, "TestImsService: onCreateEmergencyMMTelImsFeature");
+ Log.i(LOG_TAG, "TestImsService: onCreateMmTelImsFeature");
return mTestMmTelFeature;
}
diff --git a/tests/src/com/android/phone/euicc/EuiccUiDispatcherActivityTest.java b/tests/src/com/android/phone/euicc/EuiccUiDispatcherActivityTest.java
index 901ad9e..5ecebc3 100644
--- a/tests/src/com/android/phone/euicc/EuiccUiDispatcherActivityTest.java
+++ b/tests/src/com/android/phone/euicc/EuiccUiDispatcherActivityTest.java
@@ -15,6 +15,7 @@
*/
package com.android.phone.euicc;
+import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.mockito.Mockito.when;
@@ -94,6 +95,15 @@
assertNotNull(mActivity.resolveEuiccUiIntent());
}
+ @Test
+ public void testExtrasPropagated() {
+ mIntent.putExtra("foo", "bar");
+
+ Intent euiccUiIntent = mActivity.resolveEuiccUiIntent();
+ assertNotNull(euiccUiIntent);
+ assertEquals("bar", euiccUiIntent.getStringExtra("foo"));
+ }
+
class TestEuiccUiDispatcherActivity extends EuiccUiDispatcherActivity {
public TestEuiccUiDispatcherActivity() {
attachBaseContext(mMockContext);