Merge "Emergency API review"
am: 853983ef32
Change-Id: Idcfa450fba2e08d825bbe2b95094a7e7f070421b
diff --git a/api/current.txt b/api/current.txt
index c09f0d4..02fb50c 100755
--- a/api/current.txt
+++ b/api/current.txt
@@ -43034,14 +43034,14 @@
method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) @WorkerThread public android.os.PersistableBundle getCarrierConfig();
method public int getCarrierIdFromSimMccMnc();
method @Deprecated @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public android.telephony.CellLocation getCellLocation();
- method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) @Nullable public java.util.Map<java.lang.Integer,java.util.List<android.telephony.emergency.EmergencyNumber>> getCurrentEmergencyNumberList();
- method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) @Nullable public java.util.Map<java.lang.Integer,java.util.List<android.telephony.emergency.EmergencyNumber>> getCurrentEmergencyNumberList(int);
method public int getDataActivity();
method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public int getDataNetworkType();
method public int getDataState();
method @Deprecated @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public String getDeviceId();
method @Deprecated @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public String getDeviceId(int);
method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public String getDeviceSoftwareVersion();
+ method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) @NonNull public java.util.Map<java.lang.Integer,java.util.List<android.telephony.emergency.EmergencyNumber>> getEmergencyNumberList();
+ method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) @NonNull public java.util.Map<java.lang.Integer,java.util.List<android.telephony.emergency.EmergencyNumber>> getEmergencyNumberList(int);
method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public String[] getForbiddenPlmns();
method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public String getGroupIdLevel1();
method public String getIccAuthentication(int, int, String);
@@ -43093,9 +43093,9 @@
method public String iccTransmitApduBasicChannel(int, int, int, int, int, String);
method public String iccTransmitApduLogicalChannel(int, int, int, int, int, int, String);
method public boolean isConcurrentVoiceAndDataSupported();
- method public boolean isCurrentEmergencyNumber(@NonNull String);
method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_NETWORK_STATE, android.Manifest.permission.MODIFY_PHONE_STATE}) public boolean isDataEnabled();
method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_NETWORK_STATE, android.Manifest.permission.READ_PHONE_STATE}) public boolean isDataRoamingEnabled();
+ method public boolean isEmergencyNumber(@NonNull String);
method public boolean isHearingAidCompatibilitySupported();
method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public boolean isMultisimSupported();
method public boolean isNetworkRoaming();
@@ -43414,15 +43414,13 @@
public final class EmergencyNumber implements java.lang.Comparable<android.telephony.emergency.EmergencyNumber> android.os.Parcelable {
method public int compareTo(@NonNull android.telephony.emergency.EmergencyNumber);
method public int describeContents();
- method public String getCountryIso();
+ method @NonNull public String getCountryIso();
method public int getEmergencyCallRouting();
- method public int getEmergencyNumberSourceBitmask();
- method public java.util.List<java.lang.Integer> getEmergencyNumberSources();
- method public java.util.List<java.lang.Integer> getEmergencyServiceCategories();
- method public int getEmergencyServiceCategoryBitmask();
+ method @NonNull public java.util.List<java.lang.Integer> getEmergencyNumberSources();
+ method @NonNull public java.util.List<java.lang.Integer> getEmergencyServiceCategories();
method @NonNull public java.util.List<java.lang.String> getEmergencyUrns();
- method public String getMnc();
- method public String getNumber();
+ method @NonNull public String getMnc();
+ method @NonNull public String getNumber();
method public boolean isFromSources(int);
method public boolean isInEmergencyServiceCategories(int);
method public void writeToParcel(android.os.Parcel, int);
diff --git a/api/system-current.txt b/api/system-current.txt
index e6f5252..859e975 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -6401,10 +6401,10 @@
method @Nullable @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public android.telephony.IccOpenLogicalChannelResponse iccOpenLogicalChannelBySlot(int, @Nullable String, int);
method @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public String iccTransmitApduBasicChannelBySlot(int, int, int, int, int, int, @Nullable String);
method @Nullable @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public String iccTransmitApduLogicalChannelBySlot(int, int, int, int, int, int, int, @Nullable String);
- method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean isCurrentPotentialEmergencyNumber(@NonNull String);
method public boolean isDataConnectivityPossible();
method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.READ_PHONE_STATE}) public boolean isIdle();
method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.READ_PHONE_STATE}) public boolean isOffhook();
+ method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean isPotentialEmergencyNumber(@NonNull String);
method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.READ_PHONE_STATE}) public boolean isRadioOn();
method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean isRebootRequiredForModemConfigChange();
method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.READ_PHONE_STATE}) public boolean isRinging();
@@ -6788,7 +6788,7 @@
method public static int getCallTypeFromVideoState(int);
method public int getEmergencyCallRouting();
method public int getEmergencyServiceCategories();
- method public java.util.List<java.lang.String> getEmergencyUrns();
+ method @NonNull public java.util.List<java.lang.String> getEmergencyUrns();
method public android.telephony.ims.ImsStreamMediaProfile getMediaProfile();
method public int getRestrictCause();
method public int getServiceType();
@@ -6806,7 +6806,7 @@
method public void setEmergencyCallRouting(int);
method public void setEmergencyCallTesting(boolean);
method public void setEmergencyServiceCategories(int);
- method public void setEmergencyUrns(java.util.List<java.lang.String>);
+ method public void setEmergencyUrns(@NonNull java.util.List<java.lang.String>);
method public void setHasKnownUserIntentEmergency(boolean);
method public void updateCallExtras(android.telephony.ims.ImsCallProfile);
method public void updateCallType(android.telephony.ims.ImsCallProfile);
diff --git a/services/core/java/com/android/server/TelephonyRegistry.java b/services/core/java/com/android/server/TelephonyRegistry.java
index e78ae55..d2a0d7b 100644
--- a/services/core/java/com/android/server/TelephonyRegistry.java
+++ b/services/core/java/com/android/server/TelephonyRegistry.java
@@ -1806,7 +1806,7 @@
synchronized (mRecords) {
TelephonyManager tm = (TelephonyManager) mContext.getSystemService(
Context.TELEPHONY_SERVICE);
- mEmergencyNumberList = tm.getCurrentEmergencyNumberList();
+ mEmergencyNumberList = tm.getEmergencyNumberList();
for (Record r : mRecords) {
if (r.matchPhoneStateListenerEvent(
diff --git a/telephony/java/android/telephony/PhoneNumberUtils.java b/telephony/java/android/telephony/PhoneNumberUtils.java
index 4dcb410..549c044 100644
--- a/telephony/java/android/telephony/PhoneNumberUtils.java
+++ b/telephony/java/android/telephony/PhoneNumberUtils.java
@@ -25,12 +25,11 @@
import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.content.Intent;
-import android.content.res.Resources;
import android.database.Cursor;
import android.location.CountryDetector;
import android.net.Uri;
-import android.os.SystemProperties;
import android.os.PersistableBundle;
+import android.os.SystemProperties;
import android.provider.Contacts;
import android.provider.ContactsContract;
import android.telecom.PhoneAccount;
@@ -1738,7 +1737,7 @@
* @return true if the number is in the list of emergency numbers
* listed in the RIL / SIM, otherwise return false.
*
- * @deprecated Please use {@link TelephonyManager#isCurrentEmergencyNumber(String)} instead.
+ * @deprecated Please use {@link TelephonyManager#isEmergencyNumber(String)} instead.
*/
@Deprecated
public static boolean isEmergencyNumber(String number) {
@@ -1754,7 +1753,7 @@
* @return true if the number is in the list of emergency numbers
* listed in the RIL / SIM, otherwise return false.
*
- * @deprecated Please use {@link TelephonyManager#isCurrentEmergencyNumber(String)}
+ * @deprecated Please use {@link TelephonyManager#isEmergencyNumber(String)}
* instead.
*
* @hide
@@ -1785,7 +1784,7 @@
* listed in the RIL / SIM, *or* if the number starts with the
* same digits as any of those emergency numbers.
*
- * @deprecated Please use {@link TelephonyManager#isCurrentPotentialEmergencyNumber(String)}
+ * @deprecated Please use {@link TelephonyManager#isPotentialEmergencyNumber(String)}
* instead.
*
* @hide
@@ -1814,7 +1813,7 @@
* listed in the RIL / SIM, *or* if the number starts with the
* same digits as any of those emergency numbers.
*
- * @deprecated Please use {@link TelephonyManager#isCurrentPotentialEmergencyNumber(String)}
+ * @deprecated Please use {@link TelephonyManager#isPotentialEmergencyNumber(String)}
* instead.
*
* @hide
@@ -1883,7 +1882,7 @@
* @return if the number is an emergency number for the specific country, then return true,
* otherwise false
*
- * @deprecated Please use {@link TelephonyManager#isCurrentEmergencyNumber(String)}
+ * @deprecated Please use {@link TelephonyManager#isEmergencyNumber(String)}
* instead.
*
* @hide
@@ -1903,7 +1902,7 @@
* @return if the number is an emergency number for the specific country, then return true,
* otherwise false
*
- * @deprecated Please use {@link TelephonyManager#isCurrentEmergencyNumber(String)}
+ * @deprecated Please use {@link TelephonyManager#isEmergencyNumber(String)}
* instead.
*
* @hide
@@ -1934,7 +1933,7 @@
* country, *or* if the number starts with the same digits as
* any of those emergency numbers.
*
- * @deprecated Please use {@link TelephonyManager#isCurrentPotentialEmergencyNumber(String)}
+ * @deprecated Please use {@link TelephonyManager#isPotentialEmergencyNumber(String)}
* instead.
*
* @hide
@@ -1964,7 +1963,7 @@
* country, *or* if the number starts with the same digits as
* any of those emergency numbers.
*
- * @deprecated Please use {@link TelephonyManager#isCurrentPotentialEmergencyNumber(String)}
+ * @deprecated Please use {@link TelephonyManager#isPotentialEmergencyNumber(String)}
* instead.
*
* @hide
@@ -2017,7 +2016,7 @@
private static boolean isEmergencyNumberInternal(int subId, String number,
String defaultCountryIso,
boolean useExactMatch) {
- return TelephonyManager.getDefault().isCurrentEmergencyNumber(number);
+ return TelephonyManager.getDefault().isEmergencyNumber(number);
}
/**
@@ -2028,7 +2027,7 @@
* @return true if the specified number is an emergency number for the country the user
* is currently in.
*
- * @deprecated Please use {@link TelephonyManager#isCurrentEmergencyNumber(String)}
+ * @deprecated Please use {@link TelephonyManager#isEmergencyNumber(String)}
* instead.
*/
@Deprecated
@@ -2045,7 +2044,7 @@
* @return true if the specified number is an emergency number for the country the user
* is currently in.
*
- * @deprecated Please use {@link TelephonyManager#isCurrentEmergencyNumber(String)}
+ * @deprecated Please use {@link TelephonyManager#isEmergencyNumber(String)}
* instead.
*
* @hide
@@ -2079,7 +2078,7 @@
*
* @see android.location.CountryDetector
*
- * @deprecated Please use {@link TelephonyManager#isCurrentPotentialEmergencyNumber(String)}
+ * @deprecated Please use {@link TelephonyManager#isPotentialEmergencyNumber(String)}
* instead.
*
* @hide
@@ -2110,7 +2109,7 @@
* @return true if the specified number is an emergency number for a local country, based on the
* CountryDetector.
*
- * @deprecated Please use {@link TelephonyManager#isCurrentPotentialEmergencyNumber(String)}
+ * @deprecated Please use {@link TelephonyManager#isPotentialEmergencyNumber(String)}
* instead.
*
* @hide
diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java
index 1e24db5..cbe9bf2 100644
--- a/telephony/java/android/telephony/TelephonyManager.java
+++ b/telephony/java/android/telephony/TelephonyManager.java
@@ -10162,18 +10162,21 @@
* a SecurityException if the caller does not have the permission.
*/
@RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
- @Nullable
- public Map<Integer, List<EmergencyNumber>> getCurrentEmergencyNumberList() {
+ @NonNull
+ public Map<Integer, List<EmergencyNumber>> getEmergencyNumberList() {
+ Map<Integer, List<EmergencyNumber>> emergencyNumberList = new HashMap<>();
try {
ITelephony telephony = getITelephony();
- if (telephony == null) {
- return null;
+ if (telephony != null) {
+ return telephony.getEmergencyNumberList(mContext.getOpPackageName());
+ } else {
+ throw new IllegalStateException("telephony service is null.");
}
- return telephony.getCurrentEmergencyNumberList(mContext.getOpPackageName());
} catch (RemoteException ex) {
- Log.e(TAG, "getCurrentEmergencyNumberList RemoteException", ex);
+ Log.e(TAG, "getEmergencyNumberList RemoteException", ex);
+ ex.rethrowAsRuntimeException();
}
- return null;
+ return emergencyNumberList;
}
/**
@@ -10212,31 +10215,34 @@
* a SecurityException if the caller does not have the permission.
*/
@RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
- @Nullable
- public Map<Integer, List<EmergencyNumber>> getCurrentEmergencyNumberList(
+ @NonNull
+ public Map<Integer, List<EmergencyNumber>> getEmergencyNumberList(
@EmergencyServiceCategories int categories) {
+ Map<Integer, List<EmergencyNumber>> emergencyNumberList = new HashMap<>();
try {
ITelephony telephony = getITelephony();
- if (telephony == null) {
- return null;
- }
- Map<Integer, List<EmergencyNumber>> numberMap = telephony
- .getCurrentEmergencyNumberList(mContext.getOpPackageName());
- if (numberMap != null) {
- for (Integer subscriptionId : numberMap.keySet()) {
- List<EmergencyNumber> numberList = numberMap.get(subscriptionId);
- for (EmergencyNumber number : numberList) {
- if (!number.isInEmergencyServiceCategories(categories)) {
- numberList.remove(number);
+ if (telephony != null) {
+ emergencyNumberList = telephony.getEmergencyNumberList(
+ mContext.getOpPackageName());
+ if (emergencyNumberList != null) {
+ for (Integer subscriptionId : emergencyNumberList.keySet()) {
+ List<EmergencyNumber> numberList = emergencyNumberList.get(subscriptionId);
+ for (EmergencyNumber number : numberList) {
+ if (!number.isInEmergencyServiceCategories(categories)) {
+ numberList.remove(number);
+ }
}
}
}
+ return emergencyNumberList;
+ } else {
+ throw new IllegalStateException("telephony service is null.");
}
- return numberMap;
} catch (RemoteException ex) {
- Log.e(TAG, "getCurrentEmergencyNumberList with Categories RemoteException", ex);
+ Log.e(TAG, "getEmergencyNumberList with Categories RemoteException", ex);
+ ex.rethrowAsRuntimeException();
}
- return null;
+ return emergencyNumberList;
}
/**
@@ -10250,15 +10256,17 @@
* @return {@code true} if the given number is an emergency number based on current locale,
* sim, modem and network; {@code false} otherwise.
*/
- public boolean isCurrentEmergencyNumber(@NonNull String number) {
+ public boolean isEmergencyNumber(@NonNull String number) {
try {
ITelephony telephony = getITelephony();
- if (telephony == null) {
- return false;
+ if (telephony != null) {
+ return telephony.isEmergencyNumber(number, true);
+ } else {
+ throw new IllegalStateException("telephony service is null.");
}
- return telephony.isCurrentEmergencyNumber(number, true);
} catch (RemoteException ex) {
- Log.e(TAG, "isCurrentEmergencyNumber RemoteException", ex);
+ Log.e(TAG, "isEmergencyNumber RemoteException", ex);
+ ex.rethrowAsRuntimeException();
}
return false;
}
@@ -10287,15 +10295,17 @@
*/
@SystemApi
@RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
- public boolean isCurrentPotentialEmergencyNumber(@NonNull String number) {
+ public boolean isPotentialEmergencyNumber(@NonNull String number) {
try {
ITelephony telephony = getITelephony();
- if (telephony == null) {
- return false;
+ if (telephony != null) {
+ return telephony.isEmergencyNumber(number, false);
+ } else {
+ throw new IllegalStateException("telephony service is null.");
}
- return telephony.isCurrentEmergencyNumber(number, false);
} catch (RemoteException ex) {
- Log.e(TAG, "isCurrentEmergencyNumber RemoteException", ex);
+ Log.e(TAG, "isEmergencyNumber RemoteException", ex);
+ ex.rethrowAsRuntimeException();
}
return false;
}
diff --git a/telephony/java/android/telephony/emergency/EmergencyNumber.java b/telephony/java/android/telephony/emergency/EmergencyNumber.java
index e68256d..397975f 100644
--- a/telephony/java/android/telephony/emergency/EmergencyNumber.java
+++ b/telephony/java/android/telephony/emergency/EmergencyNumber.java
@@ -302,7 +302,7 @@
*
* @return the dialing number.
*/
- public String getNumber() {
+ public @NonNull String getNumber() {
return mNumber;
}
@@ -311,7 +311,7 @@
*
* @return the country code string (lowercase character) in ISO 3166 format.
*/
- public String getCountryIso() {
+ public @NonNull String getCountryIso() {
return mCountryIso;
}
@@ -320,7 +320,7 @@
*
* @return the Mobile Network Code of the emergency number.
*/
- public String getMnc() {
+ public @NonNull String getMnc() {
return mMnc;
}
@@ -328,6 +328,8 @@
* Returns the bitmask of emergency service categories of the emergency number.
*
* @return bitmask of the emergency service categories
+ *
+ * @hide
*/
public @EmergencyServiceCategories int getEmergencyServiceCategoryBitmask() {
return mEmergencyServiceCategoryBitmask;
@@ -357,7 +359,7 @@
*
* @return a list of the emergency service categories
*/
- public List<Integer> getEmergencyServiceCategories() {
+ public @NonNull List<Integer> getEmergencyServiceCategories() {
List<Integer> categories = new ArrayList<>();
if (serviceUnspecified()) {
categories.add(EMERGENCY_SERVICE_CATEGORY_UNSPECIFIED);
@@ -384,7 +386,7 @@
* number does not have a specified emergency Uniform Resource Name.
*/
public @NonNull List<String> getEmergencyUrns() {
- return mEmergencyUrns;
+ return Collections.unmodifiableList(mEmergencyUrns);
}
/**
@@ -421,6 +423,8 @@
* Returns the bitmask of the sources of the emergency number.
*
* @return bitmask of the emergency number sources
+ *
+ * @hide
*/
public @EmergencyNumberSources int getEmergencyNumberSourceBitmask() {
return mEmergencyNumberSourceBitmask;
@@ -431,7 +435,7 @@
*
* @return a list of emergency number sources
*/
- public List<Integer> getEmergencyNumberSources() {
+ public @NonNull List<Integer> getEmergencyNumberSources() {
List<Integer> sources = new ArrayList<>();
for (Integer source : EMERGENCY_NUMBER_SOURCE_SET) {
if ((mEmergencyNumberSourceBitmask & source) == source) {
diff --git a/telephony/java/android/telephony/ims/ImsCallProfile.java b/telephony/java/android/telephony/ims/ImsCallProfile.java
index 907dbbd..568c11b 100644
--- a/telephony/java/android/telephony/ims/ImsCallProfile.java
+++ b/telephony/java/android/telephony/ims/ImsCallProfile.java
@@ -17,6 +17,7 @@
package android.telephony.ims;
import android.annotation.IntDef;
+import android.annotation.NonNull;
import android.annotation.SystemApi;
import android.annotation.UnsupportedAppUsage;
import android.os.Bundle;
@@ -837,7 +838,7 @@
* 3gpp 22.101, Section 10 - Emergency Calls.
*/
@VisibleForTesting
- public void setEmergencyUrns(List<String> emergencyUrns) {
+ public void setEmergencyUrns(@NonNull List<String> emergencyUrns) {
mEmergencyUrns = emergencyUrns;
}
@@ -911,7 +912,7 @@
* Reference: 3gpp 24.503, Section 5.1.6.8.1 - General;
* 3gpp 22.101, Section 10 - Emergency Calls.
*/
- public List<String> getEmergencyUrns() {
+ public @NonNull List<String> getEmergencyUrns() {
return mEmergencyUrns;
}
diff --git a/telephony/java/com/android/internal/telephony/ITelephony.aidl b/telephony/java/com/android/internal/telephony/ITelephony.aidl
index 672ea0b..e7a31a9 100644
--- a/telephony/java/com/android/internal/telephony/ITelephony.aidl
+++ b/telephony/java/com/android/internal/telephony/ITelephony.aidl
@@ -1840,12 +1840,12 @@
/**
* Return the emergency number list from all the active subscriptions.
*/
- Map getCurrentEmergencyNumberList(String callingPackage);
+ Map getEmergencyNumberList(String callingPackage);
/**
* Identify if the number is emergency number, based on all the active subscriptions.
*/
- boolean isCurrentEmergencyNumber(String number, boolean exactMatch);
+ boolean isEmergencyNumber(String number, boolean exactMatch);
/**
* Return a list of certs in hex string from loaded carrier privileges access rules.