diff options
4 files changed, 78 insertions, 3 deletions
diff --git a/api/system-current.txt b/api/system-current.txt index f07f0c309346..187285336d95 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -6711,6 +6711,7 @@ package android.telephony.ims {      method public int getServiceType();      method public static int getVideoStateFromCallType(int);      method public static int getVideoStateFromImsCallProfile(android.telephony.ims.ImsCallProfile); +    method public boolean isEmergencyCallTesting();      method public boolean isVideoCall();      method public boolean isVideoPaused();      method public static int presentationToOir(int); @@ -6719,6 +6720,7 @@ package android.telephony.ims {      method public void setCallExtraInt(String, int);      method public void setCallRestrictCause(int);      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 updateCallExtras(android.telephony.ims.ImsCallProfile); diff --git a/telephony/java/android/telephony/emergency/EmergencyNumber.java b/telephony/java/android/telephony/emergency/EmergencyNumber.java index a5f56bbebd75..e68256d086bc 100644 --- a/telephony/java/android/telephony/emergency/EmergencyNumber.java +++ b/telephony/java/android/telephony/emergency/EmergencyNumber.java @@ -27,6 +27,7 @@ import android.telephony.Rlog;  import java.lang.annotation.Retention;  import java.lang.annotation.RetentionPolicy;  import java.util.ArrayList; +import java.util.Collections;  import java.util.HashSet;  import java.util.List;  import java.util.Objects; @@ -176,6 +177,12 @@ public final class EmergencyNumber implements Parcelable, Comparable<EmergencyNu       * Bit-field which indicates the number is from the platform-maintained database.       */      public static final int EMERGENCY_NUMBER_SOURCE_DATABASE =  1 << 4; +    /** +     * Bit-field which indicates the number is from test mode. +     * +     * @hide +     */ +    public static final int EMERGENCY_NUMBER_SOURCE_TEST =  1 << 5;      /** Bit-field which indicates the number is from the modem config. */      public static final int EMERGENCY_NUMBER_SOURCE_MODEM_CONFIG =              EmergencyNumberSource.MODEM_CONFIG; @@ -327,6 +334,21 @@ public final class EmergencyNumber implements Parcelable, Comparable<EmergencyNu      }      /** +     * Returns the bitmask of emergency service categories of the emergency number for +     * internal dialing. +     * +     * @return bitmask of the emergency service categories +     * +     * @hide +     */ +    public @EmergencyServiceCategories int getEmergencyServiceCategoryBitmaskInternalDial() { +        if (mEmergencyNumberSourceBitmask == EMERGENCY_NUMBER_SOURCE_DATABASE) { +            return EMERGENCY_SERVICE_CATEGORY_UNSPECIFIED; +        } +        return mEmergencyServiceCategoryBitmask; +    } + +    /**       * Returns the emergency service categories of the emergency number.       *       * Note: if the emergency number is in {@link #EMERGENCY_SERVICE_CATEGORY_UNSPECIFIED}, only @@ -577,6 +599,7 @@ public final class EmergencyNumber implements Parcelable, Comparable<EmergencyNu                  emergencyNumberList.remove(i--);              }          } +        Collections.sort(emergencyNumberList);      }      /** @@ -613,6 +636,12 @@ public final class EmergencyNumber implements Parcelable, Comparable<EmergencyNu          if (first.getEmergencyCallRouting() != second.getEmergencyCallRouting()) {              return false;          } +        // Never merge two numbers if one of them is from test mode but the other one is not; +        // This supports to remove a number from the test mode. +        if (first.isFromSources(EMERGENCY_NUMBER_SOURCE_TEST) +                ^ second.isFromSources(EMERGENCY_NUMBER_SOURCE_TEST)) { +            return false; +        }          return true;      } @@ -638,4 +667,13 @@ public final class EmergencyNumber implements Parcelable, Comparable<EmergencyNu          }          return null;      } + +    /** +     * Validate Emergency Number address that only allows '0'-'9', '*', or '#' +     * +     * @hide +     */ +    public static boolean validateEmergencyNumberAddress(String address) { +        return address.matches("[0-9*#]+"); +    }  } diff --git a/telephony/java/android/telephony/ims/ImsCallProfile.java b/telephony/java/android/telephony/ims/ImsCallProfile.java index 525a96a4dae9..59167b7d5bba 100644 --- a/telephony/java/android/telephony/ims/ImsCallProfile.java +++ b/telephony/java/android/telephony/ims/ImsCallProfile.java @@ -347,6 +347,9 @@ public final class ImsCallProfile implements Parcelable {      private @EmergencyCallRouting int mEmergencyCallRouting =              EmergencyNumber.EMERGENCY_CALL_ROUTING_UNKNOWN; +    /** Indicates if the call is for testing purpose */ +    private boolean mEmergencyCallTesting = false; +      /**       * Extras associated with this {@link ImsCallProfile}.       * <p> @@ -534,9 +537,10 @@ public final class ImsCallProfile implements Parcelable {                  + ", callType=" + mCallType                  + ", restrictCause=" + mRestrictCause                  + ", mediaProfile=" + mMediaProfile.toString() -                + ", emergencyServiceCategories=" + mEmergencyCallRouting +                + ", emergencyServiceCategories=" + mEmergencyServiceCategories                  + ", emergencyUrns=" + mEmergencyUrns -                + ", emergencyCallRouting=" + mEmergencyCallRouting + " }"; +                + ", emergencyCallRouting=" + mEmergencyCallRouting +                + ", emergencyCallTesting=" + mEmergencyCallTesting + " }";      }      @Override @@ -554,6 +558,7 @@ public final class ImsCallProfile implements Parcelable {          out.writeInt(mEmergencyServiceCategories);          out.writeStringList(mEmergencyUrns);          out.writeInt(mEmergencyCallRouting); +        out.writeBoolean(mEmergencyCallTesting);      }      private void readFromParcel(Parcel in) { @@ -564,6 +569,7 @@ public final class ImsCallProfile implements Parcelable {          mEmergencyServiceCategories = in.readInt();          mEmergencyUrns = in.createStringArrayList();          mEmergencyCallRouting = in.readInt(); +        mEmergencyCallTesting = in.readBoolean();      }      public static final Creator<ImsCallProfile> CREATOR = new Creator<ImsCallProfile>() { @@ -784,9 +790,11 @@ public final class ImsCallProfile implements Parcelable {       * @hide       */      public void setEmergencyCallInfo(EmergencyNumber num) { -        setEmergencyServiceCategories(num.getEmergencyServiceCategoryBitmask()); +        setEmergencyServiceCategories(num.getEmergencyServiceCategoryBitmaskInternalDial());          setEmergencyUrns(num.getEmergencyUrns());          setEmergencyCallRouting(num.getEmergencyCallRouting()); +        setEmergencyCallTesting(num.getEmergencyNumberSourceBitmask() +                == EmergencyNumber.EMERGENCY_NUMBER_SOURCE_TEST);      }      /** @@ -843,6 +851,15 @@ public final class ImsCallProfile implements Parcelable {      }      /** +     * Set if this is for testing emergency call, only valid if {@link #getServiceType} returns +     * {@link #SERVICE_TYPE_EMERGENCY}. +     */ +    @VisibleForTesting +    public void setEmergencyCallTesting(boolean isTesting) { +        mEmergencyCallTesting = isTesting; +    } + +    /**       * Get the emergency service categories, only valid if {@link #getServiceType} returns       * {@link #SERVICE_TYPE_EMERGENCY}       * @@ -892,4 +909,11 @@ public final class ImsCallProfile implements Parcelable {      public @EmergencyCallRouting int getEmergencyCallRouting() {          return mEmergencyCallRouting;      } + +    /** +     * Get if the emergency call is for testing purpose. +     */ +    public boolean isEmergencyCallTesting() { +        return mEmergencyCallTesting; +    }  } diff --git a/telephony/java/com/android/internal/telephony/ITelephony.aidl b/telephony/java/com/android/internal/telephony/ITelephony.aidl index 26fcf8344921..2b4349b7e85f 100644 --- a/telephony/java/com/android/internal/telephony/ITelephony.aidl +++ b/telephony/java/com/android/internal/telephony/ITelephony.aidl @@ -42,6 +42,7 @@ import android.telephony.ServiceState;  import android.telephony.SignalStrength;  import android.telephony.TelephonyHistogram;  import android.telephony.VisualVoicemailSmsFilterSettings; +import android.telephony.emergency.EmergencyNumber;  import android.telephony.ims.aidl.IImsCapabilityCallback;  import android.telephony.ims.aidl.IImsConfig;  import android.telephony.ims.aidl.IImsConfigCallback; @@ -1794,6 +1795,16 @@ interface ITelephony {      int setImsProvisioningString(int subId, int key, String value);      /** +     * Update Emergency Number List for Test Mode. +     */ +    void updateEmergencyNumberListTestMode(int action, in EmergencyNumber num); + +    /** +     * Get the full emergency number list for Test Mode. +     */ +    List<String> getEmergencyNumberListTestMode(); + +    /**       * Enable or disable a logical modem stack associated with the slotIndex.       */      boolean enableModemForSlot(int slotIndex, boolean enable);  |