Merge "Listen to IMS capability status for RTT"
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index ce774d8..59f61eb 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -258,39 +258,6 @@
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:exported="false"/>
- <!-- "Mobile network settings" screen, used on both
- non-voice-capable tablets and regular phone devices. -->
- <activity android:name="MobileNetworkSettings"
- android:label="@string/network_settings_title"
- android:theme="@style/NetworkOperatorsSettingsTheme">
- <intent-filter>
- <action android:name="android.intent.action.VIEW" />
- <action android:name="android.intent.action.MAIN" />
- <action android:name="android.settings.NETWORK_OPERATOR_SETTINGS" />
- <action android:name="android.settings.DATA_ROAMING_SETTINGS" />
- <category android:name="android.intent.category.DEFAULT" />
- </intent-filter>
- </activity>
-
- <activity-alias android:name="Settings"
- android:targetActivity="MobileNetworkSettings" />
-
- <!-- networks setting -->
- <!-- "Choose network" screen. Used only when the Automatically
- select network turned off-->
- <activity android:name="NetworkSelectSettingActivity"
- android:label="@string/choose_network_title"
- android:theme="@style/NetworkOperatorsSettingsTheme"
- android:configChanges="orientation|screenSize">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.DEFAULT" />
- </intent-filter>
- </activity>
-
- <!-- service to handle network query requests sent to RIL -->
- <service android:name="NetworkQueryService" />
-
<activity android:name="GsmUmtsCallOptions"
android:label="@string/gsm_umts_options"
android:theme="@style/DialerSettingsLight">
diff --git a/src/com/android/phone/CallFeaturesSetting.java b/src/com/android/phone/CallFeaturesSetting.java
index 8d2d71f..c1bbf2d 100644
--- a/src/com/android/phone/CallFeaturesSetting.java
+++ b/src/com/android/phone/CallFeaturesSetting.java
@@ -35,7 +35,6 @@
import android.provider.Settings;
import android.telecom.PhoneAccountHandle;
import android.telecom.TelecomManager;
-import android.telephony.AccessNetworkConstants.TransportType;
import android.telephony.CarrierConfigManager;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
@@ -304,7 +303,7 @@
if (mImsMgr.isVtEnabledByPlatform() && mImsMgr.isVtProvisionedOnDevice()
&& (carrierConfig.getBoolean(
CarrierConfigManager.KEY_IGNORE_DATA_ENABLED_CHANGED_FOR_VIDEO_CALLS)
- || mPhone.getDcTracker(TransportType.WWAN).isDataEnabled())) {
+ || mPhone.getDataEnabledSettings().isDataEnabled())) {
boolean currentValue =
mImsMgr.isEnhanced4gLteModeSettingEnabledByUser()
? mImsMgr.isVtEnabledByUser() : false;
diff --git a/src/com/android/phone/PhoneInterfaceManager.java b/src/com/android/phone/PhoneInterfaceManager.java
index 43ecbd7..7b7eb0f 100755
--- a/src/com/android/phone/PhoneInterfaceManager.java
+++ b/src/com/android/phone/PhoneInterfaceManager.java
@@ -78,6 +78,7 @@
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyHistogram;
import android.telephony.TelephonyManager;
+import android.telephony.UiccCardInfo;
import android.telephony.UiccSlotInfo;
import android.telephony.UssdResponse;
import android.telephony.VisualVoicemailSmsFilterSettings;
@@ -151,6 +152,7 @@
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
+import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
@@ -1689,7 +1691,7 @@
int subId = mSubscriptionController.getDefaultDataSubId();
final Phone phone = getPhone(subId);
if (phone != null) {
- phone.setUserDataEnabled(true);
+ phone.getDataEnabledSettings().setUserDataEnabled(true);
return true;
} else {
return false;
@@ -1709,7 +1711,7 @@
int subId = mSubscriptionController.getDefaultDataSubId();
final Phone phone = getPhone(subId);
if (phone != null) {
- phone.setUserDataEnabled(false);
+ phone.getDataEnabledSettings().setUserDataEnabled(false);
return true;
} else {
return false;
@@ -4035,7 +4037,7 @@
Phone phone = PhoneFactory.getPhone(phoneId);
if (phone != null) {
if (DBG) log("setUserDataEnabled: subId=" + subId + " enable=" + enable);
- phone.setUserDataEnabled(enable);
+ phone.getDataEnabledSettings().setUserDataEnabled(enable);
} else {
loge("setUserDataEnabled: no phone found. Invalid subId=" + subId);
}
@@ -4123,7 +4125,7 @@
if (DBG) log("isDataEnabled: subId=" + subId + " phoneId=" + phoneId);
Phone phone = PhoneFactory.getPhone(phoneId);
if (phone != null) {
- boolean retVal = phone.isDataEnabled();
+ boolean retVal = phone.getDataEnabledSettings().isDataEnabled();
if (DBG) log("isDataEnabled: subId=" + subId + " retVal=" + retVal);
return retVal;
} else {
@@ -5428,7 +5430,7 @@
try {
Phone phone = getPhone(subId);
if (phone != null) {
- phone.setPolicyDataEnabled(enabled);
+ phone.getDataEnabledSettings().setPolicyDataEnabled(enabled);
}
} finally {
Binder.restoreCallingIdentity(identity);
@@ -5650,6 +5652,19 @@
}
@Override
+ public UiccCardInfo[] getUiccCardsInfo() {
+ enforceReadPrivilegedPermission("getUiccCardsInfo");
+
+ final long identity = Binder.clearCallingIdentity();
+ try {
+ ArrayList<UiccCardInfo> cards = UiccController.getInstance().getAllUiccCardInfos();
+ return cards.toArray(new UiccCardInfo[cards.size()]);
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
+ }
+
+ @Override
public UiccSlotInfo[] getUiccSlotsInfo() {
enforceReadPrivilegedPermission("getUiccSlotsInfo");
@@ -5980,14 +5995,121 @@
@Override
public Map<Integer, List<EmergencyNumber>> getCurrentEmergencyNumberList(
String callingPackage) {
- // TODO connect with internal content
- return null;
+ if (!TelephonyPermissions.checkCallingOrSelfReadPhoneState(
+ mApp, getDefaultSubscription(), callingPackage, "getCurrentEmergencyNumberList")) {
+ throw new SecurityException("Requires READ_PHONE_STATE permission.");
+ }
+ final long identity = Binder.clearCallingIdentity();
+ try {
+ Map<Integer, List<EmergencyNumber>> emergencyNumberListInternal = new HashMap<>();
+ for (Phone phone: PhoneFactory.getPhones()) {
+ if (phone.getEmergencyNumberTracker() != null
+ && phone.getEmergencyNumberTracker().getEmergencyNumberList() != null) {
+ emergencyNumberListInternal.put(
+ phone.getSubId(),
+ phone.getEmergencyNumberTracker().getEmergencyNumberList());
+ }
+ }
+ return emergencyNumberListInternal;
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
}
@Override
- public boolean isCurrentEmergencyNumber(String number) {
- // TODO connect with internal content
- return false;
+ public boolean isCurrentEmergencyNumber(String number, boolean exactMatch) {
+ final Phone defaultPhone = getDefaultPhone();
+ if (!exactMatch) {
+ TelephonyPermissions
+ .enforeceCallingOrSelfReadPrivilegedPhoneStatePermissionOrCarrierPrivilege(
+ mApp, defaultPhone.getSubId(), "isCurrentEmergencyNumber(Potential)");
+ }
+ final long identity = Binder.clearCallingIdentity();
+ try {
+ for (Phone phone: PhoneFactory.getPhones()) {
+ if (phone.getEmergencyNumberTracker() != null
+ && phone.getEmergencyNumberTracker() != null) {
+ if (phone.getEmergencyNumberTracker().isEmergencyNumber(
+ number, exactMatch)) {
+ return true;
+ }
+ }
+ }
+ return false;
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
+ }
+
+ private Map<Integer, List<EmergencyNumber>> getEmergencyNumberListInternal() {
+ Map<Integer, List<EmergencyNumber>> emergencyNumberListInternal = new HashMap<>();
+
+ for (Phone phone: PhoneFactory.getPhones()) {
+ if (phone.getEmergencyNumberTracker() != null
+ && phone.getEmergencyNumberTracker().getEmergencyNumberList() != null) {
+ emergencyNumberListInternal.put(
+ phone.getSubId(),
+ phone.getEmergencyNumberTracker().getEmergencyNumberList());
+ }
+ }
+ return emergencyNumberListInternal;
+ }
+
+ private List<EmergencyNumber> getEmergencyNumberListFromEccList(int subscriptionId) {
+ SubscriptionManager sm = (SubscriptionManager) mApp.getSystemService(
+ Context.TELEPHONY_SUBSCRIPTION_SERVICE);
+ List<EmergencyNumber> emergencyNumberList = new ArrayList<>();
+ int slotId = sm.getSlotIndex(subscriptionId);
+
+ String ecclist = (slotId <= 0) ? "ril.ecclist" : ("ril.ecclist" + slotId);
+ String emergencyNumbers = SystemProperties.get(ecclist, "");
+ if (TextUtils.isEmpty(emergencyNumbers)) {
+ // then read-only ecclist property since old RIL only uses this
+ emergencyNumbers = SystemProperties.get("ro.ril.ecclist");
+ }
+ if (!TextUtils.isEmpty(emergencyNumbers)) {
+ // searches through the comma-separated list for a match,
+ // return true if one is found.
+ for (String emergencyNum : emergencyNumbers.split(",")) {
+ emergencyNumberList.add(new EmergencyNumber(emergencyNum, "", "",
+ EmergencyNumber.EMERGENCY_SERVICE_CATEGORY_UNSPECIFIED, 0));
+ }
+ }
+ emergencyNumbers = ((slotId < 0) ? "112,911,000,08,110,118,119,999" : "112,911");
+ for (String emergencyNum : emergencyNumbers.split(",")) {
+ emergencyNumberList.add(new EmergencyNumber(emergencyNum, "", "",
+ EmergencyNumber.EMERGENCY_SERVICE_CATEGORY_UNSPECIFIED, 0));
+ }
+ EmergencyNumber.mergeSameNumbersInEmergencyNumberList(emergencyNumberList);
+ return emergencyNumberList;
+ }
+
+ /**
+ * Get Emergency number list based on EccList. This util is used for solving backward
+ * compatibility if device does not support the 1.4 IRadioIndication HAL that reports
+ * emergency number list.
+ *
+ * @return Map including the key as the active subscription ID (Note: if there is no active
+ * subscription, the key is {@link SubscriptionManager#getDefaultSubscriptionId})
+ * and the value as the list of {@link EmergencyNumber}.
+ */
+ private Map<Integer, List<EmergencyNumber>> getEmergencyNumberListFromEccList() {
+ Map<Integer, List<EmergencyNumber>> results = new HashMap<>();
+ SubscriptionManager sm = (SubscriptionManager) mApp.getSystemService(
+ Context.TELEPHONY_SUBSCRIPTION_SERVICE);
+ int[] activeSubscriptionIds = sm.getActiveSubscriptionIdList();
+
+ if (activeSubscriptionIds.length == 0) {
+ int defaultSubscriptionId = getDefaultSubscription();
+ results.put(defaultSubscriptionId,
+ getEmergencyNumberListFromEccList(defaultSubscriptionId));
+ } else {
+ for (int activeSubscriptionId : activeSubscriptionIds) {
+ results.put(activeSubscriptionId,
+ getEmergencyNumberListFromEccList(activeSubscriptionId));
+ }
+ }
+ return results;
}
@Override