From 3b5f87f96532b674cf6fc4c230e21c401b5ad77f Mon Sep 17 00:00:00 2001 From: sqian Date: Fri, 22 Feb 2019 15:54:47 -0800 Subject: Emergency API review 1) Remove 'current' in Emergency APIs 2) Remove nullable 3) Handled the null Telephony service case 4) Hide getEmergencyServiceCategoryBitmask 5) Make getEmergencyUrns unmodifiable Test: Treehugger Bug: 122368381 Bug: 126699022 Bug: 126701211 Merged-In: I6eb1d8a3ae1625ff3f43f983c488c2969649713b Change-Id: I6eb1d8a3ae1625ff3f43f983c488c2969649713b --- api/current.txt | 18 +++-- api/system-current.txt | 6 +- .../java/com/android/server/TelephonyRegistry.java | 2 +- .../java/android/telephony/PhoneNumberUtils.java | 29 ++++----- .../java/android/telephony/TelephonyManager.java | 76 ++++++++++++---------- .../telephony/emergency/EmergencyNumber.java | 16 +++-- .../java/android/telephony/ims/ImsCallProfile.java | 5 +- .../com/android/internal/telephony/ITelephony.aidl | 4 +- 8 files changed, 84 insertions(+), 72 deletions(-) diff --git a/api/current.txt b/api/current.txt index 0fa6cc623bef..981b627baec4 100755 --- a/api/current.txt +++ b/api/current.txt @@ -43034,14 +43034,14 @@ package android.telephony { 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> getCurrentEmergencyNumberList(); - method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) @Nullable public java.util.Map> 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> getEmergencyNumberList(); + method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) @NonNull public java.util.Map> 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 @@ package android.telephony { 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 @@ package android.telephony.emergency { public final class EmergencyNumber implements java.lang.Comparable 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 getEmergencyNumberSources(); - method public java.util.List getEmergencyServiceCategories(); - method public int getEmergencyServiceCategoryBitmask(); + method @NonNull public java.util.List getEmergencyNumberSources(); + method @NonNull public java.util.List getEmergencyServiceCategories(); method @NonNull public java.util.List 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 a40fbbc1f423..2a6a187e3d04 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -6401,10 +6401,10 @@ package android.telephony { 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 @@ package android.telephony.ims { method public static int getCallTypeFromVideoState(int); method public int getEmergencyCallRouting(); method public int getEmergencyServiceCategories(); - method public java.util.List getEmergencyUrns(); + method @NonNull public java.util.List getEmergencyUrns(); method public android.telephony.ims.ImsStreamMediaProfile getMediaProfile(); method public int getRestrictCause(); method public int getServiceType(); @@ -6806,7 +6806,7 @@ package android.telephony.ims { method public void setEmergencyCallRouting(int); method public void setEmergencyCallTesting(boolean); method public void setEmergencyServiceCategories(int); - method public void setEmergencyUrns(java.util.List); + method public void setEmergencyUrns(@NonNull java.util.List); 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 e78ae5547b5a..d2a0d7bc23fa 100644 --- a/services/core/java/com/android/server/TelephonyRegistry.java +++ b/services/core/java/com/android/server/TelephonyRegistry.java @@ -1806,7 +1806,7 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub { 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 4dcb410e277a..549c04420ce0 100644 --- a/telephony/java/android/telephony/PhoneNumberUtils.java +++ b/telephony/java/android/telephony/PhoneNumberUtils.java @@ -25,12 +25,11 @@ import android.annotation.IntDef; 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 @@ public class PhoneNumberUtils { * @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 @@ public class PhoneNumberUtils { * @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 @@ public class PhoneNumberUtils { * 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 @@ public class PhoneNumberUtils { * 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 @@ public class PhoneNumberUtils { * @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 @@ public class PhoneNumberUtils { * @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 @@ public class PhoneNumberUtils { * 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 @@ public class PhoneNumberUtils { * 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 @@ public class PhoneNumberUtils { 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 @@ public class PhoneNumberUtils { * @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 @@ public class PhoneNumberUtils { * @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 @@ public class PhoneNumberUtils { * * @see android.location.CountryDetector * - * @deprecated Please use {@link TelephonyManager#isCurrentPotentialEmergencyNumber(String)} + * @deprecated Please use {@link TelephonyManager#isPotentialEmergencyNumber(String)} * instead. * * @hide @@ -2110,7 +2109,7 @@ public class PhoneNumberUtils { * @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 1fbb3179d0a1..88046e8ebb50 100644 --- a/telephony/java/android/telephony/TelephonyManager.java +++ b/telephony/java/android/telephony/TelephonyManager.java @@ -10137,18 +10137,21 @@ public class TelephonyManager { * a SecurityException if the caller does not have the permission. */ @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) - @Nullable - public Map> getCurrentEmergencyNumberList() { + @NonNull + public Map> getEmergencyNumberList() { + Map> 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; } /** @@ -10187,31 +10190,34 @@ public class TelephonyManager { * a SecurityException if the caller does not have the permission. */ @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) - @Nullable - public Map> getCurrentEmergencyNumberList( + @NonNull + public Map> getEmergencyNumberList( @EmergencyServiceCategories int categories) { + Map> emergencyNumberList = new HashMap<>(); try { ITelephony telephony = getITelephony(); - if (telephony == null) { - return null; - } - Map> numberMap = telephony - .getCurrentEmergencyNumberList(mContext.getOpPackageName()); - if (numberMap != null) { - for (Integer subscriptionId : numberMap.keySet()) { - List 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 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; } /** @@ -10225,15 +10231,17 @@ public class TelephonyManager { * @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; } @@ -10262,15 +10270,17 @@ public class TelephonyManager { */ @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 e68256d086bc..397975fe58cf 100644 --- a/telephony/java/android/telephony/emergency/EmergencyNumber.java +++ b/telephony/java/android/telephony/emergency/EmergencyNumber.java @@ -302,7 +302,7 @@ public final class EmergencyNumber implements Parcelable, Comparable getEmergencyServiceCategories() { + public @NonNull List getEmergencyServiceCategories() { List categories = new ArrayList<>(); if (serviceUnspecified()) { categories.add(EMERGENCY_SERVICE_CATEGORY_UNSPECIFIED); @@ -384,7 +386,7 @@ public final class EmergencyNumber implements Parcelable, Comparable getEmergencyUrns() { - return mEmergencyUrns; + return Collections.unmodifiableList(mEmergencyUrns); } /** @@ -421,6 +423,8 @@ public final class EmergencyNumber implements Parcelable, Comparable getEmergencyNumberSources() { + public @NonNull List getEmergencyNumberSources() { List 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 907dbbd20403..568c11be9077 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 @@ public final class ImsCallProfile implements Parcelable { * 3gpp 22.101, Section 10 - Emergency Calls. */ @VisibleForTesting - public void setEmergencyUrns(List emergencyUrns) { + public void setEmergencyUrns(@NonNull List emergencyUrns) { mEmergencyUrns = emergencyUrns; } @@ -911,7 +912,7 @@ public final class ImsCallProfile implements Parcelable { * Reference: 3gpp 24.503, Section 5.1.6.8.1 - General; * 3gpp 22.101, Section 10 - Emergency Calls. */ - public List getEmergencyUrns() { + public @NonNull List getEmergencyUrns() { return mEmergencyUrns; } diff --git a/telephony/java/com/android/internal/telephony/ITelephony.aidl b/telephony/java/com/android/internal/telephony/ITelephony.aidl index 2f1100db0781..02a5bc8937ee 100644 --- a/telephony/java/com/android/internal/telephony/ITelephony.aidl +++ b/telephony/java/com/android/internal/telephony/ITelephony.aidl @@ -1832,12 +1832,12 @@ interface ITelephony { /** * 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. -- cgit v1.2.3-59-g8ed1b