From 37121d467c3e2fe56dc30cc2a6f6a37231791d7a Mon Sep 17 00:00:00 2001 From: Brad Ebinger Date: Thu, 29 Mar 2018 11:12:24 -0700 Subject: Unhide @SystemApi Constructor There are a few small classes that never got properly exposed as @SystemApi. These classes were not caught because vendors currently build against the source directly and have access to hidden APIs. We can not change the vendor code at this point (different vendor code for each year for all supported devices), but we can start pulling back the API for new devices. 1) Keep all public mutable fields @hide and put todo (and file bug b/74402619) to make fields private or final. 2) Add public constructor that populates all fields so that @hide public mutable fields can be set to private/final in the future. 3) Provide getters for fields that will not be public in the future. In this way, we can make minimal API changes for P, support new vendor/3rd party ImsServices, and phase out old ImsService implementations that still build against the source instead of using the correct @SystemApi. Bug: 77278031 Bug: 74402619 Test: Manual Change-Id: Ifa3b6d0cbdb12e92efc699b760ca874768a89a7c --- api/system-current.txt | 5 +- .../android/telephony/ims/ImsCallForwardInfo.java | 20 ++ .../java/android/telephony/ims/ImsSsData.java | 309 ++++++++++++++++++--- .../java/android/telephony/ims/ImsSsInfo.java | 24 ++ 4 files changed, 318 insertions(+), 40 deletions(-) diff --git a/api/system-current.txt b/api/system-current.txt index 1e2fe3df0d2c..b7a976f726c9 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -5535,6 +5535,7 @@ package android.telephony.euicc { package android.telephony.ims { public final class ImsCallForwardInfo implements android.os.Parcelable { + ctor public ImsCallForwardInfo(int, int, int, int, java.lang.String, int); method public int describeContents(); method public int getCondition(); method public java.lang.String getNumber(); @@ -5848,7 +5849,7 @@ package android.telephony.ims { } public final class ImsSsData implements android.os.Parcelable { - ctor public ImsSsData(); + ctor public ImsSsData(int, int, int, int, int); method public int describeContents(); method public boolean isTypeBarring(); method public boolean isTypeCf(); @@ -5899,7 +5900,7 @@ package android.telephony.ims { } public final class ImsSsInfo implements android.os.Parcelable { - ctor public ImsSsInfo(); + ctor public ImsSsInfo(int, java.lang.String); method public int describeContents(); method public java.lang.String getIcbNum(); method public int getStatus(); diff --git a/telephony/java/android/telephony/ims/ImsCallForwardInfo.java b/telephony/java/android/telephony/ims/ImsCallForwardInfo.java index 6d7218179067..283112793d87 100644 --- a/telephony/java/android/telephony/ims/ImsCallForwardInfo.java +++ b/telephony/java/android/telephony/ims/ImsCallForwardInfo.java @@ -29,27 +29,47 @@ import android.os.Parcelable; public final class ImsCallForwardInfo implements Parcelable { // Refer to ImsUtInterface#CDIV_CF_XXX /** @hide */ + // TODO: Make private, do not modify this field directly, use getter. public int mCondition; // 0: disabled, 1: enabled /** @hide */ + // TODO: Make private, do not modify this field directly, use getter. public int mStatus; // 0x91: International, 0x81: Unknown /** @hide */ + // TODO: Make private, do not modify this field directly, use getter. public int mToA; // Service class /** @hide */ + // TODO: Make private, do not modify this field directly, use getter. public int mServiceClass; // Number (it will not include the "sip" or "tel" URI scheme) /** @hide */ + // TODO: Make private, do not modify this field directly, use getter. public String mNumber; // No reply timer for CF /** @hide */ + // TODO: Make private, do not modify this field directly, use getter. public int mTimeSeconds; /** @hide */ + // TODO: Will be removed in the future, use public constructor instead. public ImsCallForwardInfo() { } + /** + * IMS Call Forward Information. + */ + public ImsCallForwardInfo(int condition, int status, int toA, int serviceClass, String number, + int replyTimerSec) { + mCondition = condition; + mStatus = status; + mToA = toA; + mServiceClass = serviceClass; + mNumber = number; + mTimeSeconds = replyTimerSec; + } + /** @hide */ public ImsCallForwardInfo(Parcel in) { readFromParcel(in); diff --git a/telephony/java/android/telephony/ims/ImsSsData.java b/telephony/java/android/telephony/ims/ImsSsData.java index 1ddf1994f26b..49ead770b42a 100644 --- a/telephony/java/android/telephony/ims/ImsSsData.java +++ b/telephony/java/android/telephony/ims/ImsSsData.java @@ -15,19 +15,24 @@ */ package android.telephony.ims; +import android.annotation.IntDef; import android.annotation.SystemApi; import android.os.Parcel; import android.os.Parcelable; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + /** - * Provided STK Call Control Suplementary Service information + * Provides STK Call Control Supplementary Service information. * * {@hide} */ @SystemApi public final class ImsSsData implements Parcelable { - //ServiceType + // Supplementary Service Type + // Call Forwarding public static final int SS_CFU = 0; public static final int SS_CF_BUSY = 1; public static final int SS_CF_NO_REPLY = 2; @@ -35,12 +40,16 @@ public final class ImsSsData implements Parcelable { public static final int SS_CF_ALL = 4; public static final int SS_CF_ALL_CONDITIONAL = 5; public static final int SS_CFUT = 6; + // Called Line Presentation public static final int SS_CLIP = 7; public static final int SS_CLIR = 8; public static final int SS_COLP = 9; public static final int SS_COLR = 10; + // Calling Name Presentation public static final int SS_CNAP = 11; + // Call Waiting public static final int SS_WAIT = 12; + // Call Barring public static final int SS_BAOC = 13; public static final int SS_BAOIC = 14; public static final int SS_BAOIC_EXC_HOME = 15; @@ -52,14 +61,14 @@ public final class ImsSsData implements Parcelable { public static final int SS_INCOMING_BARRING_DN = 21; public static final int SS_INCOMING_BARRING_ANONYMOUS = 22; - //SSRequestType + //Supplementary Service Request Types public static final int SS_ACTIVATION = 0; public static final int SS_DEACTIVATION = 1; public static final int SS_INTERROGATION = 2; public static final int SS_REGISTRATION = 3; public static final int SS_ERASURE = 4; - //TeleserviceType + // Supplementary Service Teleservice Type public static final int SS_ALL_TELE_AND_BEARER_SERVICES = 0; public static final int SS_ALL_TELESEVICES = 1; public static final int SS_TELEPHONY = 2; @@ -67,40 +76,226 @@ public final class ImsSsData implements Parcelable { public static final int SS_SMS_SERVICES = 4; public static final int SS_ALL_TELESERVICES_EXCEPT_SMS = 5; - // Refer to ServiceType + // Service Class of Supplementary Service + // See 27.007 +CCFC or +CLCK /** @hide */ - public int serviceType; - // Refere to SSRequestType + public static final int SERVICE_CLASS_NONE = 0; // no user input /** @hide */ - public int requestType; - // Refer to TeleserviceType + public static final int SERVICE_CLASS_VOICE = 1; /** @hide */ - public int teleserviceType; - // Service Class + public static final int SERVICE_CLASS_DATA = (1 << 1); /** @hide */ - public int serviceClass; - // Error information + public static final int SERVICE_CLASS_FAX = (1 << 2); /** @hide */ - public int result; - + public static final int SERVICE_CLASS_SMS = (1 << 3); + /** @hide */ + public static final int SERVICE_CLASS_DATA_SYNC = (1 << 4); + /** @hide */ + public static final int SERVICE_CLASS_DATA_ASYNC = (1 << 5); /** @hide */ - public int[] ssInfo; /* Valid for all supplementary services. - This field will be empty for RequestType SS_INTERROGATION - and ServiceType SS_CF_*, SS_INCOMING_BARRING_DN, - SS_INCOMING_BARRING_ANONYMOUS.*/ + public static final int SERVICE_CLASS_PACKET = (1 << 6); + /** @hide */ + public static final int SERVICE_CLASS_PAD = (1 << 7); + + /** + * Result code used if the operation was successful. See {@link #result}. + * @hide + */ + public static final int RESULT_SUCCESS = 0; /** @hide */ - public ImsCallForwardInfo[] cfInfo; /* Valid only for supplementary services - ServiceType SS_CF_* and RequestType SS_INTERROGATION */ + @IntDef(flag = true, prefix = { "SS_" }, value = { + SS_CFU, + SS_CF_BUSY, + SS_CF_NO_REPLY, + SS_CF_NOT_REACHABLE, + SS_CF_ALL, + SS_CF_ALL_CONDITIONAL, + SS_CFUT, + SS_CLIP, + SS_CLIR, + SS_COLP, + SS_COLR, + SS_CNAP, + SS_WAIT, + SS_BAOC, + SS_BAOIC, + SS_BAOIC_EXC_HOME, + SS_BAIC, + SS_BAIC_ROAMING, + SS_ALL_BARRING, + SS_OUTGOING_BARRING, + SS_INCOMING_BARRING, + SS_INCOMING_BARRING_DN, + SS_INCOMING_BARRING_ANONYMOUS + }) + @Retention(RetentionPolicy.SOURCE) + public @interface ServiceType{} /** @hide */ - public ImsSsInfo[] imsSsInfo; /* Valid only for ServiceType SS_INCOMING_BARRING_DN and - ServiceType SS_INCOMING_BARRING_ANONYMOUS */ + @IntDef(flag = true, prefix = { "SERVICE_CLASS" }, value = { + SERVICE_CLASS_NONE, + SERVICE_CLASS_VOICE, + SERVICE_CLASS_DATA, + SERVICE_CLASS_FAX, + SERVICE_CLASS_SMS, + SERVICE_CLASS_DATA_SYNC, + SERVICE_CLASS_DATA_ASYNC, + SERVICE_CLASS_PACKET, + SERVICE_CLASS_PAD + }) + @Retention(RetentionPolicy.SOURCE) + public @interface ServiceClass{} + + /** + * The Service type of this Supplementary service. Valid values include: + * SS_CFU, + * SS_CF_BUSY, + * SS_CF_NO_REPLY, + * SS_CF_NOT_REACHABLE, + * SS_CF_ALL, + * SS_CF_ALL_CONDITIONAL, + * SS_CFUT, + * SS_CLIP, + * SS_CLIR, + * SS_COLP, + * SS_COLR, + * SS_CNAP, + * SS_WAIT, + * SS_BAOC, + * SS_BAOIC, + * SS_BAOIC_EXC_HOME, + * SS_BAIC, + * SS_BAIC_ROAMING, + * SS_ALL_BARRING, + * SS_OUTGOING_BARRING, + * SS_INCOMING_BARRING, + * SS_INCOMING_BARRING_DN, + * SS_INCOMING_BARRING_ANONYMOUS + * + * @hide + */ + // TODO: Make final, do not modify this field directly! + public int serviceType; + + /** + * Supplementary Service request Type. Valid values are: + * SS_ACTIVATION, + * SS_DEACTIVATION, + * SS_INTERROGATION, + * SS_REGISTRATION, + * SS_ERASURE + * + * @hide + */ + // TODO: Make final, do not modify this field directly! + public int requestType; + + /** + * Supplementary Service teleservice type: + * SS_TELESERVICE_ALL_TELE_AND_BEARER, + * SS_TELESERVICE_ALL_TELESEVICES, + * SS_TELESERVICE_TELEPHONY, + * SS_TELESERVICE_ALL_DATA, + * SS_TELESERVICE_SMS, + * SS_TELESERVICE_ALL_TELESERVICES_EXCEPT_SMS + * + * @hide + */ + // TODO: Make this param final! Do not try to modify this param directly. + public int teleserviceType; + + /** + * Supplementary Service service class. Valid values are: + * SERVICE_CLASS_NONE, + * SERVICE_CLASS_VOICE, + * SERVICE_CLASS_DATA, + * SERVICE_CLASS_FAX, + * SERVICE_CLASS_SMS, + * SERVICE_CLASS_DATA_SYNC, + * SERVICE_CLASS_DATA_ASYNC, + * SERVICE_CLASS_PACKET, + * SERVICE_CLASS_PAD + * + * @hide + */ + // TODO: Make this param final! Do not try to modify this param directly. + public int serviceClass; + + /** + * Result of Supplementary Service operation. Valid values are: + * RESULT_SUCCESS if the result is success, or + * ImsReasonInfo code if the result is a failure. + * + * @hide + */ + // TODO: Make this param final! Do not try to modify this param directly. + public final int result; + + private int[] mSsInfo; + private ImsCallForwardInfo[] mCfInfo; + private ImsSsInfo[] mImsSsInfo; - public ImsSsData() {} + /** + * Generate IMS Supplementary Service information. + * @param serviceType The Supplementary Service type. Valid entries: + * SS_CFU, + * SS_CF_BUSY, + * SS_CF_NO_REPLY, + * SS_CF_NOT_REACHABLE, + * SS_CF_ALL, + * SS_CF_ALL_CONDITIONAL, + * SS_CFUT, + * SS_CLIP, + * SS_CLIR, + * SS_COLP, + * SS_COLR, + * SS_CNAP, + * SS_WAIT, + * SS_BAOC, + * SS_BAOIC, + * SS_BAOIC_EXC_HOME, + * SS_BAIC, + * SS_BAIC_ROAMING, + * SS_ALL_BARRING, + * SS_OUTGOING_BARRING, + * SS_INCOMING_BARRING, + * SS_INCOMING_BARRING_DN, + * SS_INCOMING_BARRING_ANONYMOUS + * @param requestType Supplementary Service request Type. Valid values are: + * SS_ACTIVATION, + * SS_DEACTIVATION, + * SS_INTERROGATION, + * SS_REGISTRATION, + * SS_ERASURE + * @param teleserviceType Supplementary Service teleservice type: + * SS_TELESERVICE_ALL_TELE_AND_BEARER, + * SS_TELESERVICE_ALL_TELESEVICES, + * SS_TELESERVICE_TELEPHONY, + * SS_TELESERVICE_ALL_DATA, + * SS_TELESERVICE_SMS, + * SS_TELESERVICE_ALL_TELESERVICES_EXCEPT_SMS + * @param serviceClass Supplementary Service service class. See See 27.007 +CCFC or +CLCK. + * @param result Result of Supplementary Service operation. Valid values are 0 if the result is + * success, or ImsReasonInfo code if the result is a failure. + */ + public ImsSsData(@ServiceType int serviceType, int requestType, int teleserviceType, + @ServiceClass int serviceClass, int result) { + this.serviceType = serviceType; + this.requestType = requestType; + this.teleserviceType = teleserviceType; + this.serviceClass = serviceClass; + this.result = result; + } private ImsSsData(Parcel in) { - readFromParcel(in); + serviceType = in.readInt(); + requestType = in.readInt(); + teleserviceType = in.readInt(); + serviceClass = in.readInt(); + result = in.readInt(); + mSsInfo = in.createIntArray(); + mCfInfo = (ImsCallForwardInfo[])in.readParcelableArray(this.getClass().getClassLoader()); } public static final Creator CREATOR = new Creator() { @@ -122,18 +317,8 @@ public final class ImsSsData implements Parcelable { out.writeInt(teleserviceType); out.writeInt(serviceClass); out.writeInt(result); - out.writeIntArray(ssInfo); - out.writeParcelableArray(cfInfo, 0); - } - - private void readFromParcel(Parcel in) { - serviceType = in.readInt(); - requestType = in.readInt(); - teleserviceType = in.readInt(); - serviceClass = in.readInt(); - result = in.readInt(); - ssInfo = in.createIntArray(); - cfInfo = (ImsCallForwardInfo[])in.readParcelableArray(this.getClass().getClassLoader()); + out.writeIntArray(mSsInfo); + out.writeParcelableArray(mCfInfo, 0); } @Override @@ -200,7 +385,55 @@ public final class ImsSsData implements Parcelable { } public boolean isTypeInterrogation() { - return (requestType == SS_INTERROGATION); + return (serviceType == SS_INTERROGATION); + } + + /** @hide */ + public void setSuppServiceInfo(int[] ssInfo) { + mSsInfo = ssInfo; + } + + /** @hide */ + public void setImsSpecificSuppServiceInfo(ImsSsInfo[] imsSsInfo) { + mImsSsInfo = imsSsInfo; + } + + /** @hide */ + public void setCallForwardingInfo(ImsCallForwardInfo[] cfInfo) { + mCfInfo = cfInfo; + } + + /** + * This field will be null for RequestType SS_INTERROGATION + * and ServiceType SS_CF_*, SS_INCOMING_BARRING_DN, + * SS_INCOMING_BARRING_ANONYMOUS. + * + * @hide + */ + public int[] getSuppServiceInfo() { + return mSsInfo; + } + + /** + * Valid only for ServiceTypes + * - SS_INCOMING_BARRING_DN and + * - ServiceType SS_INCOMING_BARRING_ANONYMOUS. + * Will be null otherwise. + * @hide + */ + public ImsSsInfo[] getImsSpecificSuppServiceInfo() { + return mImsSsInfo; + } + + /** + * Valid only for supplementary services + * - ServiceType SS_CF_* and + * - RequestType SS_INTERROGATION. + * Will be null otherwise. + * @hide + **/ + public ImsCallForwardInfo[] getCallForwardInfo() { + return mCfInfo; } public String toString() { diff --git a/telephony/java/android/telephony/ims/ImsSsInfo.java b/telephony/java/android/telephony/ims/ImsSsInfo.java index 1d1292fb9f72..c6f8622f3fd9 100644 --- a/telephony/java/android/telephony/ims/ImsSsInfo.java +++ b/telephony/java/android/telephony/ims/ImsSsInfo.java @@ -36,13 +36,31 @@ public final class ImsSsInfo implements Parcelable { // 0: disabled, 1: enabled /** @hide */ + // TODO: Make private, do not modify this field directly, use getter! public int mStatus; /** @hide */ + // TODO: Make private, do not modify this field directly, use getter! public String mIcbNum; + /**@hide*/ + // TODO: Remove! Do not use this constructor, instead use public version. public ImsSsInfo() { } + /** + * + * @param status The status of the service registration of activation/deactiviation. Valid + * entries include: + * {@link #NOT_REGISTERED}, + * {@link #DISABLED}, + * {@link #ENABLED} + * @param icbNum The Incoming barring number. + */ + public ImsSsInfo(int status, String icbNum) { + mStatus = status; + mIcbNum = icbNum; + } + private ImsSsInfo(Parcel in) { readFromParcel(in); } @@ -81,6 +99,12 @@ public final class ImsSsInfo implements Parcelable { } }; + /** + * @return Supplementary Service Configuration status. Valid Values are: + * {@link #NOT_REGISTERED}, + * {@link #DISABLED}, + * {@link #ENABLED} + */ public int getStatus() { return mStatus; } -- cgit v1.2.3-59-g8ed1b