diff options
author | Wink Saville <wink@google.com> | 2014-06-25 16:08:02 -0700 |
---|---|---|
committer | Wink Saville <wink@google.com> | 2014-06-26 02:37:08 +0000 |
commit | f8458ff9d97f8961d67c41ee107129ecba873f36 (patch) | |
tree | b77a1aa833ceea56d849fe2a1142c0e4fc81bdd0 | |
parent | 226a51958d645a8e2be3e40a6b6daaca558b4913 (diff) | |
download | frameworks_base-f8458ff9d97f8961d67c41ee107129ecba873f36.zip frameworks_base-f8458ff9d97f8961d67c41ee107129ecba873f36.tar.gz frameworks_base-f8458ff9d97f8961d67c41ee107129ecba873f36.tar.bz2 |
Fix lpdk build.
Move aidl files from frameworks/opt/net/ims to frameworks/base so lpdk
compiles. The reason is lpdk doesn't have frameworks/base sources so
references to Pending and Bundle in aidl files breaks the pdk build.
I had to move all of them and the ims/*java files for dependency reasons.
Change-Id: I92452562591b157cecdfc01bcd892c4f35f5965c
21 files changed, 1756 insertions, 0 deletions
@@ -336,6 +336,13 @@ LOCAL_SRC_FILES += \ telecomm/java/com/android/internal/telecomm/IInCallService.aidl \ telecomm/java/com/android/internal/telecomm/ITelecommService.aidl \ telecomm/java/com/android/internal/telecomm/RemoteServiceCallback.aidl \ + telephony/java/com/android/ims/internal/IImsCallSession.aidl \ + telephony/java/com/android/ims/internal/IImsCallSessionListener.aidl \ + telephony/java/com/android/ims/internal/IImsRegistrationListener.aidl \ + telephony/java/com/android/ims/internal/IImsService.aidl \ + telephony/java/com/android/ims/internal/IImsStreamMediaSession.aidl \ + telephony/java/com/android/ims/internal/IImsUt.aidl \ + telephony/java/com/android/ims/internal/IImsUtListener.aidl \ telephony/java/com/android/internal/telephony/IPhoneStateListener.aidl \ telephony/java/com/android/internal/telephony/IPhoneSubInfo.aidl \ telephony/java/com/android/internal/telephony/ITelephony.aidl \ diff --git a/CleanSpec.mk b/CleanSpec.mk index b6a47f2..73f370d 100644 --- a/CleanSpec.mk +++ b/CleanSpec.mk @@ -203,6 +203,8 @@ $(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/framew $(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/android_stubs_current_intermediates/classes/android/app/maintenance) $(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/android_stubs_current_intermediates/src/android/app/maintenance) $(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/services_intermediates) +$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/framework-base_intermediates) +$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/framework-base_intermediates) # ****************************************************************** # NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST ABOVE THIS BANNER diff --git a/telephony/java/com/android/ims/ImsCallForwardInfo.aidl b/telephony/java/com/android/ims/ImsCallForwardInfo.aidl new file mode 100644 index 0000000..a7c3f9a --- /dev/null +++ b/telephony/java/com/android/ims/ImsCallForwardInfo.aidl @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.ims; + +parcelable ImsCallForwardInfo; diff --git a/telephony/java/com/android/ims/ImsCallForwardInfo.java b/telephony/java/com/android/ims/ImsCallForwardInfo.java new file mode 100644 index 0000000..3f8fd19 --- /dev/null +++ b/telephony/java/com/android/ims/ImsCallForwardInfo.java @@ -0,0 +1,88 @@ +/* + * Copyright (c) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.ims; + +import android.os.Parcel; +import android.os.Parcelable; + +/** + * Provides the call forward information for the supplementary service configuration. + * + * @hide + */ +public class ImsCallForwardInfo implements Parcelable { + // Refer to ImsUtInterface#CDIV_CF_XXX + public int mCondition; + // 0: disabled, 1: enabled + public int mStatus; + // 0x91: International, 0x81: Unknown + public int mToA; + // Number (it will not include the "sip" or "tel" URI scheme) + public String mNumber; + // No reply timer for CF + public int mTimeSeconds; + + public ImsCallForwardInfo() { + } + + public ImsCallForwardInfo(Parcel in) { + readFromParcel(in); + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel out, int flags) { + out.writeInt(mCondition); + out.writeInt(mStatus); + out.writeInt(mToA); + out.writeString(mNumber); + out.writeInt(mTimeSeconds); + } + + @Override + public String toString() { + return super.toString() + ", Condition: " + mCondition + + ", Status: " + ((mStatus == 0) ? "disabled" : "enabled") + + ", ToA: " + mToA + ", Number=" + mNumber + + ", Time (seconds): " + mTimeSeconds; + } + + private void readFromParcel(Parcel in) { + mCondition = in.readInt(); + mStatus = in.readInt(); + mToA = in.readInt(); + mNumber = in.readString(); + mTimeSeconds = in.readInt(); + } + + public static final Creator<ImsCallForwardInfo> CREATOR = + new Creator<ImsCallForwardInfo>() { + @Override + public ImsCallForwardInfo createFromParcel(Parcel in) { + return new ImsCallForwardInfo(in); + } + + @Override + public ImsCallForwardInfo[] newArray(int size) { + return new ImsCallForwardInfo[size]; + } + }; +} diff --git a/telephony/java/com/android/ims/ImsCallProfile.aidl b/telephony/java/com/android/ims/ImsCallProfile.aidl new file mode 100644 index 0000000..a356d13 --- /dev/null +++ b/telephony/java/com/android/ims/ImsCallProfile.aidl @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.ims; + +parcelable ImsCallProfile; diff --git a/telephony/java/com/android/ims/ImsCallProfile.java b/telephony/java/com/android/ims/ImsCallProfile.java new file mode 100644 index 0000000..208f467 --- /dev/null +++ b/telephony/java/com/android/ims/ImsCallProfile.java @@ -0,0 +1,289 @@ +/* + * Copyright (c) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.ims; + +import android.os.Bundle; +import android.os.Parcel; +import android.os.Parcelable; + +/** + * Parcelable object to handle IMS call profile. + * It is created from GSMA IR.92/IR.94, 3GPP TS 24.229/TS 26.114/TS26.111. + * It provides the service and call type, the additional information related to the call. + * + * @hide + */ +public class ImsCallProfile implements Parcelable { + private static final String TAG = "ImsCallProfile"; + + /** + * Service types + */ + /** + * It is for a special case. It helps that the application can make a call + * without IMS connection (not registered). + * In the moment of the call initiation, the device try to connect to the IMS network + * and initiates the call. + */ + public static final int SERVICE_TYPE_NONE = 0; + /** + * It is a default type and can be selected when the device is connected to the IMS network. + */ + public static final int SERVICE_TYPE_NORMAL = 1; + /** + * It is for an emergency call. + */ + public static final int SERVICE_TYPE_EMERGENCY = 2; + + /** + * Call types + */ + /** + * IMSPhone to support IR.92 & IR.94 (voice + video upgrade/downgrade) + */ + public static final int CALL_TYPE_VOICE_N_VIDEO = 1; + /** + * IR.92 (Voice only) + */ + public static final int CALL_TYPE_VOICE = 2; + /** + * VT to support IR.92 & IR.94 (voice + video upgrade/downgrade) + */ + public static final int CALL_TYPE_VIDEO_N_VOICE = 3; + /** + * Video Telephony (audio / video two way) + */ + public static final int CALL_TYPE_VT = 4; + /** + * Video Telephony (audio two way / video TX one way) + */ + public static final int CALL_TYPE_VT_TX = 5; + /** + * Video Telephony (audio two way / video RX one way) + */ + public static final int CALL_TYPE_VT_RX = 6; + /** + * Video Telephony (audio two way / video inactive) + */ + public static final int CALL_TYPE_VT_NODIR = 7; + /** + * VideoShare (video two way) + */ + public static final int CALL_TYPE_VS = 8; + /** + * VideoShare (video TX one way) + */ + public static final int CALL_TYPE_VS_TX = 9; + /** + * VideoShare (video RX one way) + */ + public static final int CALL_TYPE_VS_RX = 10; + + /** + * Extra properties for IMS call. + */ + /** + * Boolean extra properties - "true" / "false" + * conference : Indicates if the session is for the conference call or not. + * e_call : Indicates if the session is for the emergency call or not. + * vms : Indicates if the session is connected to the voice mail system or not. + * call_mode_changeable : Indicates if the session is able to upgrade/downgrade + * the video during voice call. + * conference_avail : Indicates if the session can be extended to the conference. + */ + public static final String EXTRA_CONFERENCE = "conference"; + public static final String EXTRA_E_CALL = "e_call"; + public static final String EXTRA_VMS = "vms"; + public static final String EXTRA_CALL_MODE_CHANGEABLE = "call_mode_changeable"; + public static final String EXTRA_CONFERENCE_AVAIL = "conference_avail"; + + /** + * Integer extra properties + * oir : Rule for originating identity (number) presentation, MO/MT. + * {@link ImsCallProfile#OIR_DEFAULT} + * {@link ImsCallProfile#OIR_PRESENTATION_RESTRICTED} + * {@link ImsCallProfile#OIR_PRESENTATION_NOT_RESTRICTED} + * cnap : Rule for calling name presentation + * {@link ImsCallProfile#OIR_DEFAULT} + * {@link ImsCallProfile#OIR_PRESENTATION_RESTRICTED} + * {@link ImsCallProfile#OIR_PRESENTATION_NOT_RESTRICTED} + * dialstring : To identify the Ims call type, MO + * {@link ImsCallProfile#DIALSTRING_NORMAL_CALL} + * {@link ImsCallProfile#DIALSTRING_SS_CONF} + * {@link ImsCallProfile#DIALSTRING_USSD} + */ + public static final String EXTRA_OIR = "oir"; + public static final String EXTRA_CNAP = "cnap"; + public static final String EXTRA_DIALSTRING = "dialstring"; + + /** + * Values for EXTRA_OIR / EXTRA_CNAP + */ + public static final int OIR_DEFAULT = 0; // "user subscription default value" + public static final int OIR_PRESENTATION_RESTRICTED = 1; + public static final int OIR_PRESENTATION_NOT_RESTRICTED = 2; + + /** + * Values for EXTRA_DIALSTRING + */ + // default (normal call) + public static final int DIALSTRING_NORMAL = 0; + // Call for SIP-based user configuration + public static final int DIALSTRING_SS_CONF = 1; + // Call for USSD message + public static final int DIALSTRING_USSD = 2; + + /** + * String extra properties + * oi : Originating identity (number), MT only + * cna : Calling name + * ussd : For network-initiated USSD, MT only + * remote_uri : Connected user identity (it can be used for the conference) + */ + public static final String EXTRA_OI = "oi"; + public static final String EXTRA_CNA = "cna"; + public static final String EXTRA_USSD = "ussd"; + public static final String EXTRA_REMOTE_URI = "remote_uri"; + + public int mServiceType; + public int mCallType; + public Bundle mCallExtras; + public ImsStreamMediaProfile mMediaProfile; + + + + public ImsCallProfile(Parcel in) { + readFromParcel(in); + } + + public ImsCallProfile() { + mServiceType = SERVICE_TYPE_NORMAL; + mCallType = CALL_TYPE_VOICE_N_VIDEO; + mCallExtras = new Bundle(); + mMediaProfile = new ImsStreamMediaProfile(); + } + + public ImsCallProfile(int serviceType, int callType) { + mServiceType = serviceType; + mCallType = callType; + mCallExtras = new Bundle(); + mMediaProfile = new ImsStreamMediaProfile(); + } + + public String getCallExtra(String name) { + return getCallExtra(name, ""); + } + + public String getCallExtra(String name, String defaultValue) { + if (mCallExtras == null) { + return defaultValue; + } + + return mCallExtras.getString(name, defaultValue); + } + + public boolean getCallExtraBoolean(String name) { + return getCallExtraBoolean(name, false); + } + + public boolean getCallExtraBoolean(String name, boolean defaultValue) { + if (mCallExtras == null) { + return defaultValue; + } + + return mCallExtras.getBoolean(name, defaultValue); + } + + public int getCallExtraInt(String name) { + return getCallExtraInt(name, -1); + } + + public int getCallExtraInt(String name, int defaultValue) { + if (mCallExtras == null) { + return defaultValue; + } + + return mCallExtras.getInt(name, defaultValue); + } + + public void setCallExtra(String name, String value) { + if (mCallExtras != null) { + mCallExtras.putString(name, value); + } + } + + public void setCallExtraBoolean(String name, boolean value) { + if (mCallExtras != null) { + mCallExtras.putBoolean(name, value); + } + } + + public void setCallExtraInt(String name, int value) { + if (mCallExtras != null) { + mCallExtras.putInt(name, value); + } + } + + public void updateCallType(ImsCallProfile profile) { + mCallType = profile.mCallType; + } + + public void updateCallExtras(ImsCallProfile profile) { + mCallExtras.clear(); + mCallExtras = (Bundle) profile.mCallExtras.clone(); + } + + @Override + public String toString() { + return "{ serviceType=" + mServiceType + + ", callType=" + mCallType + + ", callExtras=" + mCallExtras.toString() + + ", mediaProfile=" + mMediaProfile.toString() + " }"; + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel out, int flags) { + out.writeInt(mServiceType); + out.writeInt(mCallType); + out.writeParcelable(mCallExtras, 0); + out.writeParcelable(mMediaProfile, 0); + } + + private void readFromParcel(Parcel in) { + mServiceType = in.readInt(); + mCallType = in.readInt(); + mCallExtras = in.readParcelable(null); + mMediaProfile = in.readParcelable(null); + } + + public static final Creator<ImsCallProfile> CREATOR = new Creator<ImsCallProfile>() { + @Override + public ImsCallProfile createFromParcel(Parcel in) { + return new ImsCallProfile(in); + } + + @Override + public ImsCallProfile[] newArray(int size) { + return new ImsCallProfile[size]; + } + }; +} diff --git a/telephony/java/com/android/ims/ImsConferenceState.aidl b/telephony/java/com/android/ims/ImsConferenceState.aidl new file mode 100644 index 0000000..2fc029f --- /dev/null +++ b/telephony/java/com/android/ims/ImsConferenceState.aidl @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.ims; + +parcelable ImsConferenceState; diff --git a/telephony/java/com/android/ims/ImsConferenceState.java b/telephony/java/com/android/ims/ImsConferenceState.java new file mode 100644 index 0000000..f708d5b --- /dev/null +++ b/telephony/java/com/android/ims/ImsConferenceState.java @@ -0,0 +1,142 @@ +/* + * Copyright (c) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.ims; + +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map.Entry; +import java.util.Set; + +import android.os.Bundle; +import android.os.Parcel; +import android.os.Parcelable; + +/** + * Provides the conference information (defined in RFC 4575) for IMS conference call. + * + * @hide + */ +public class ImsConferenceState implements Parcelable { + /** + * conference-info : user + */ + // user (String) : Tel or SIP URI + public static final String USER = "user"; + // user > display text (String) + public static final String DISPLAY_TEXT = "display-text"; + // user > endpoint (String) : URI or GRUU or Phone number + public static final String ENDPOINT = "endpoint"; + // user > endpoint > status + public static final String STATUS = "status"; + + /** + * status-type (String) : + * "pending" : Endpoint is not yet in the session, but it is anticipated that he/she will + * join in the near future. + * "dialing-out" : Focus has dialed out to connect the endpoint to the conference, + * but the endpoint is not yet in the roster (probably being authenticated). + * "dialing-in" : Endpoint is dialing into the conference, not yet in the roster + * (probably being authenticated). + * "alerting" : PSTN alerting or SIP 180 Ringing was returned for the outbound call; + * endpoint is being alerted. + * "on-hold" : Active signaling dialog exists between an endpoint and a focus, + * but endpoint is "on-hold" for this conference, i.e., he/she is neither "hearing" + * the conference mix nor is his/her media being mixed in the conference. + * "connected" : Endpoint is a participant in the conference. Depending on the media policies, + * he/she can send and receive media to and from other participants. + * "disconnecting" : Focus is in the process of disconnecting the endpoint + * (e.g. in SIP a DISCONNECT or BYE was sent to the endpoint). + * "disconnected" : Endpoint is not a participant in the conference, and no active dialog + * exists between the endpoint and the focus. + * "muted-via-focus" : Active signaling dialog exists beween an endpoint and a focus and + * the endpoint can "listen" to the conference, but the endpoint's media is not being + * mixed into the conference. + * "connect-fail" : Endpoint fails to join the conference by rejecting the conference call. + */ + public static final String STATUS_PENDING = "pending"; + public static final String STATUS_DIALING_OUT = "dialing-out"; + public static final String STATUS_DIALING_IN = "dialing-in"; + public static final String STATUS_ALERTING = "alerting"; + public static final String STATUS_ON_HOLD = "on-hold"; + public static final String STATUS_CONNECTED = "connected"; + public static final String STATUS_DISCONNECTING = "disconnecting"; + public static final String STATUS_DISCONNECTED = "disconnected"; + public static final String STATUS_MUTED_VIA_FOCUS = "muted-via-focus"; + public static final String STATUS_CONNECT_FAIL = "connect-fail"; + + /** + * conference-info : SIP status code (integer) + */ + public static final String SIP_STATUS_CODE = "sipstatuscode"; + + public HashMap<String, Bundle> mParticipants = new HashMap<String, Bundle>(); + + public ImsConferenceState() { + } + + public ImsConferenceState(Parcel in) { + readFromParcel(in); + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel out, int flags) { + out.writeInt(mParticipants.size()); + + if (mParticipants.size() > 0) { + Set<Entry<String, Bundle>> entries = mParticipants.entrySet(); + + if (entries != null) { + Iterator<Entry<String, Bundle>> iterator = entries.iterator(); + + while (iterator.hasNext()) { + Entry<String, Bundle> entry = iterator.next(); + + out.writeString(entry.getKey()); + out.writeParcelable(entry.getValue(), 0); + } + } + } + } + + private void readFromParcel(Parcel in) { + int size = in.readInt(); + + for (int i = 0; i < size; ++i) { + String user = in.readString(); + Bundle state = in.readParcelable(null); + mParticipants.put(user, state); + } + } + + public static final Creator<ImsConferenceState> CREATOR = + new Creator<ImsConferenceState>() { + @Override + public ImsConferenceState createFromParcel(Parcel in) { + return new ImsConferenceState(in); + } + + @Override + public ImsConferenceState[] newArray(int size) { + return new ImsConferenceState[size]; + } + }; +} diff --git a/telephony/java/com/android/ims/ImsReasonInfo.aidl b/telephony/java/com/android/ims/ImsReasonInfo.aidl new file mode 100644 index 0000000..17e6d3a --- /dev/null +++ b/telephony/java/com/android/ims/ImsReasonInfo.aidl @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.ims; + +parcelable ImsReasonInfo; diff --git a/telephony/java/com/android/ims/ImsReasonInfo.java b/telephony/java/com/android/ims/ImsReasonInfo.java new file mode 100644 index 0000000..99faba6 --- /dev/null +++ b/telephony/java/com/android/ims/ImsReasonInfo.java @@ -0,0 +1,326 @@ +/* + * Copyright (c) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.ims; + +import android.os.Parcel; +import android.os.Parcelable; + +/** + * This class enables an application to get details on why a method call failed. + * + * @hide + */ +public class ImsReasonInfo implements Parcelable { + + /** + * Reason types, defines the error category. + * UNSPECIFIED - unknown error reason + * LOCAL - indicates the local/device error reason + * LOCAL_TIMEOUT - indicates the local error reason when a specific timer is expired + * STATUSCODE - indicates the interworking error reason by SIP status code received + * from the network + * MEDIA - indicates the media error reason (local resource, SDP parameter, etc.) + * USER - indicates the error reason by the local or remote user + * UT - indicates the error reason for the supplementary service configuration + */ + public static final int TYPE_UNSPECIFIED = 0; + public static final int TYPE_LOCAL = 1; + public static final int TYPE_TIMEOUT = 2; + public static final int TYPE_STATUSCODE = 3; + public static final int TYPE_MEDIA = 4; + public static final int TYPE_USER = 5; + public static final int TYPE_UT = 8; + + /** + * Specific code of each types + */ + public static final int CODE_UNSPECIFIED = 0; + + /** + * LOCAL + */ + // IMS -> Telephony + // The passed argument is an invalid + public static final int CODE_LOCAL_ILLEGAL_ARGUMENT = 101; + // The operation is invoked in invalid call state + public static final int CODE_LOCAL_ILLEGAL_STATE = 102; + // IMS service internal error + public static final int CODE_LOCAL_INTERNAL_ERROR = 103; + // IMS service goes down (service connection is lost) + public static final int CODE_LOCAL_IMS_SERVICE_DOWN = 106; + // No pending incoming call exists + public static final int CODE_LOCAL_NO_PENDING_CALL = 107; + + // IMS -> Telephony + // Service unavailable; by power off + public static final int CODE_LOCAL_POWER_OFF = 111; + // Service unavailable; by low battery + public static final int CODE_LOCAL_LOW_BATTERY = 112; + // Service unavailable; by out of service (data service state) + public static final int CODE_LOCAL_NETWORK_NO_SERVICE = 121; + // Service unavailable; by no LTE coverage + // (VoLTE is not supported even though IMS is registered) + public static final int CODE_LOCAL_NETWORK_NO_LTE_COVERAGE = 122; + // Service unavailable; by located in roaming area + public static final int CODE_LOCAL_NETWORK_ROAMING = 123; + // Service unavailable; by IP changed + public static final int CODE_LOCAL_NETWORK_IP_CHANGED = 124; + // Service unavailable; other + public static final int CODE_LOCAL_SERVICE_UNAVAILABLE = 131; + // Service unavailable; IMS connection is lost (IMS is not registered) + public static final int CODE_LOCAL_NOT_REGISTERED = 132; + + // IMS <-> Telephony + // Max call exceeded + public static final int CODE_LOCAL_CALL_EXCEEDED = 141; + // IMS <- Telephony + // Call busy + public static final int CODE_LOCAL_CALL_BUSY = 142; + // Call decline + public static final int CODE_LOCAL_CALL_DECLINE = 143; + // IMS -> Telephony + // SRVCC is in progress + public static final int CODE_LOCAL_CALL_VCC_ON_PROGRESSING = 144; + // Resource reservation is failed (QoS precondition) + public static final int CODE_LOCAL_CALL_RESOURCE_RESERVATION_FAILED = 145; + // Retry CS call; VoLTE service can't be provided by the network or remote end + // Resolve the extra code(EXTRA_CODE_CALL_RETRY_*) if the below code is set + public static final int CODE_LOCAL_CALL_CS_RETRY_REQUIRED = 146; + // Retry VoLTE call; VoLTE service can't be provided by the network temporarily + public static final int CODE_LOCAL_CALL_VOLTE_RETRY_REQUIRED = 147; + // IMS call is already terminated (in TERMINATED state) + public static final int CODE_LOCAL_CALL_TERMINATED = 148; + + /** + * TIMEOUT (IMS -> Telephony) + */ + // 1xx waiting timer is expired after sending INVITE request (MO only) + public static final int CODE_TIMEOUT_1XX_WAITING = 201; + // User no answer during call setup operation (MO/MT) + // MO : 200 OK to INVITE request is not received, + // MT : No action from user after alerting the call + public static final int CODE_TIMEOUT_NO_ANSWER = 202; + // User no answer during call update operation (MO/MT) + // MO : 200 OK to re-INVITE request is not received, + // MT : No action from user after alerting the call + public static final int CODE_TIMEOUT_NO_ANSWER_CALL_UPDATE = 203; + + /** + * STATUSCODE (SIP response code) (IMS -> Telephony) + */ + // 3xx responses + // SIP request is redirected + public static final int CODE_SIP_REDIRECTED = 321; + // 4xx responses + // 400 : Bad Request + public static final int CODE_SIP_BAD_REQUEST = 331; + // 403 : Forbidden + public static final int CODE_SIP_FORBIDDEN = 332; + // 404 : Not Found + public static final int CODE_SIP_NOT_FOUND = 333; + // 415 : Unsupported Media Type + // 416 : Unsupported URI Scheme + // 420 : Bad Extension + public static final int CODE_SIP_NOT_SUPPORTED = 334; + // 408 : Request Timeout + public static final int CODE_SIP_REQUEST_TIMEOUT = 335; + // 480 : Temporarily Unavailable + public static final int CODE_SIP_TEMPRARILY_UNAVAILABLE = 336; + // 484 : Address Incomplete + public static final int CODE_SIP_BAD_ADDRESS = 337; + // 486 : Busy Here + // 600 : Busy Everywhere + public static final int CODE_SIP_BUSY = 338; + // 487 : Request Terminated + public static final int CODE_SIP_REQUEST_CANCELLED = 339; + // 406 : Not Acceptable + // 488 : Not Acceptable Here + // 606 : Not Acceptable + public static final int CODE_SIP_NOT_ACCEPTABLE = 340; + // 410 : Gone + // 604 : Does Not Exist Anywhere + public static final int CODE_SIP_NOT_REACHABLE = 341; + // Others + public static final int CODE_SIP_CLIENT_ERROR = 342; + // 5xx responses + // 501 : Server Internal Error + public static final int CODE_SIP_SERVER_INTERNAL_ERROR = 351; + // 503 : Service Unavailable + public static final int CODE_SIP_SERVICE_UNAVAILABLE = 352; + // 504 : Server Time-out + public static final int CODE_SIP_SERVER_TIMEOUT = 353; + // Others + public static final int CODE_SIP_SERVER_ERROR = 354; + // 6xx responses + // 603 : Decline + public static final int CODE_SIP_USER_REJECTED = 361; + // Others + public static final int CODE_SIP_GLOBAL_ERROR = 362; + + /** + * MEDIA (IMS -> Telephony) + */ + // Media resource initialization failed + public static final int CODE_MEDIA_INIT_FAILED = 401; + // RTP timeout (no audio / video traffic in the session) + public static final int CODE_MEDIA_NO_DATA = 402; + // Media is not supported; so dropped the call + public static final int CODE_MEDIA_NOT_ACCEPTABLE = 403; + // Unknown media related errors + public static final int CODE_MEDIA_UNSPECIFIED = 404; + + /** + * USER + */ + // Telephony -> IMS + // User triggers the call end + public static final int CODE_USER_TERMINATED = 501; + // No action while an incoming call is ringing + public static final int CODE_USER_NOANSWER = 502; + // User ignores an incoming call + public static final int CODE_USER_IGNORE = 503; + // User declines an incoming call + public static final int CODE_USER_DECLINE = 504; + // IMS -> Telephony + // The call is terminated by the network or remote user + public static final int CODE_USER_TERMINATED_BY_REMOTE = 510; + + /** + * Extra codes for the specific code value + * This value can be referred when the code is CODE_LOCAL_CALL_CS_RETRY_REQUIRED. + */ + // Try to connect CS call; normal + public static final int EXTRA_CODE_CALL_RETRY_NORMAL = 1; + // Try to connect CS call without the notification to user + public static final int EXTRA_CODE_CALL_RETRY_SILENT_REDIAL = 2; + // Try to connect CS call by the settings of the menu + public static final int EXTRA_CODE_CALL_RETRY_BY_SETTINGS = 3; + + /** + * UT + */ + public static final int CODE_UT_NOT_SUPPORTED = 801; + public static final int CODE_UT_SERVICE_UNAVAILABLE = 802; + public static final int CODE_UT_OPERATION_NOT_ALLOWED = 803; + public static final int CODE_UT_CB_PASSWORD_MISMATCH = 821; + + + + // For reason type + public int mReasonType; + // For main reason code + public int mCode; + // For the extra code value; it depends on the code value. + public int mExtraCode; + // For the additional message of the reason info. + public String mExtraMessage; + + public ImsReasonInfo() { + mReasonType = TYPE_UNSPECIFIED; + mCode = CODE_UNSPECIFIED; + mExtraCode = CODE_UNSPECIFIED; + mExtraMessage = null; + } + + public ImsReasonInfo(Parcel in) { + readFromParcel(in); + } + + public ImsReasonInfo(int code, int extraCode) { + mReasonType = (int) (code / 100); + mCode = code; + mExtraCode = extraCode; + mExtraMessage = null; + } + + public ImsReasonInfo(int code, int extraCode, String extraMessage) { + mReasonType = (int) (code / 100); + mCode = code; + mExtraCode = extraCode; + mExtraMessage = extraMessage; + } + + /** + * + */ + public int getCode() { + return mCode; + } + + /** + * + */ + public int getExtraCode() { + return mExtraCode; + } + + /** + * + */ + public String getExtraMessage() { + return mExtraMessage; + } + + /** + * + */ + public int getReasonType() { + return mReasonType; + } + + /** + * Returns the string format of {@link ImsReasonInfo} + * + * @return the string format of {@link ImsReasonInfo} + */ + public String toString() { + return "ImsReasonInfo :: {" + mReasonType + ", " + + mCode + ", " + mExtraCode + ", " + mExtraMessage + "}"; + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel out, int flags) { + out.writeInt(mReasonType); + out.writeInt(mCode); + out.writeInt(mExtraCode); + out.writeString(mExtraMessage); + } + + private void readFromParcel(Parcel in) { + mReasonType = in.readInt(); + mCode = in.readInt(); + mExtraCode = in.readInt(); + mExtraMessage = in.readString(); + } + + public static final Creator<ImsReasonInfo> CREATOR = new Creator<ImsReasonInfo>() { + @Override + public ImsReasonInfo createFromParcel(Parcel in) { + return new ImsReasonInfo(in); + } + + @Override + public ImsReasonInfo[] newArray(int size) { + return new ImsReasonInfo[size]; + } + }; +} diff --git a/telephony/java/com/android/ims/ImsSsInfo.aidl b/telephony/java/com/android/ims/ImsSsInfo.aidl new file mode 100644 index 0000000..0ac598b --- /dev/null +++ b/telephony/java/com/android/ims/ImsSsInfo.aidl @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.ims; + +parcelable ImsSsInfo; diff --git a/telephony/java/com/android/ims/ImsSsInfo.java b/telephony/java/com/android/ims/ImsSsInfo.java new file mode 100644 index 0000000..dbde1c6 --- /dev/null +++ b/telephony/java/com/android/ims/ImsSsInfo.java @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.ims; + +import android.os.Parcel; +import android.os.Parcelable; + +/** + * Provides the result to the update operation for the supplementary service configuration. + * + * @hide + */ +public class ImsSsInfo implements Parcelable { + /** + * For the status of service registration or activation/deactivation. + */ + public static final int NOT_REGISTERED = (-1); + public static final int DISABLED = 0; + public static final int ENABLED = 1; + + // 0: disabled, 1: enabled + public int mStatus; + + public ImsSsInfo() { + } + + public ImsSsInfo(Parcel in) { + readFromParcel(in); + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel out, int flags) { + out.writeInt(mStatus); + } + + @Override + public String toString() { + return super.toString() + ", Status: " + ((mStatus == 0) ? "disabled" : "enabled"); + } + + private void readFromParcel(Parcel in) { + mStatus = in.readInt(); + } + + public static final Creator<ImsSsInfo> CREATOR = + new Creator<ImsSsInfo>() { + @Override + public ImsSsInfo createFromParcel(Parcel in) { + return new ImsSsInfo(in); + } + + @Override + public ImsSsInfo[] newArray(int size) { + return new ImsSsInfo[size]; + } + }; +} diff --git a/telephony/java/com/android/ims/ImsStreamMediaProfile.aidl b/telephony/java/com/android/ims/ImsStreamMediaProfile.aidl new file mode 100644 index 0000000..d648a35 --- /dev/null +++ b/telephony/java/com/android/ims/ImsStreamMediaProfile.aidl @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.ims; + +parcelable ImsStreamMediaProfile; diff --git a/telephony/java/com/android/ims/ImsStreamMediaProfile.java b/telephony/java/com/android/ims/ImsStreamMediaProfile.java new file mode 100644 index 0000000..003499c --- /dev/null +++ b/telephony/java/com/android/ims/ImsStreamMediaProfile.java @@ -0,0 +1,132 @@ +/* + * Copyright (c) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.ims; + +import android.os.Parcel; +import android.os.Parcelable; + +/** + * Parcelable object to handle IMS stream media profile. + * It provides the media direction, quality of audio and/or video. + * + * @hide + */ +public class ImsStreamMediaProfile implements Parcelable { + private static final String TAG = "ImsStreamMediaProfile"; + + /** + * Media directions + */ + public static final int DIRECTION_INVALID = (-1); + public static final int DIRECTION_INACTIVE = 0; + public static final int DIRECTION_RECEIVE = 1; + public static final int DIRECTION_SEND = 2; + public static final int DIRECTION_SEND_RECEIVE = 3; + + /** + * Audio information + */ + public static final int AUDIO_QUALITY_NONE = 0; + public static final int AUDIO_QUALITY_AMR = (1 << 0); + public static final int AUDIO_QUALITY_AMR_WB = (1 << 1); + + /** + * Video information + */ + public static final int VIDEO_QUALITY_NONE = 0; + public static final int VIDEO_QUALITY_QCIF = (1 << 0); + public static final int VIDEO_QUALITY_QVGA_LANDSCAPE = (1 << 1); + public static final int VIDEO_QUALITY_QVGA_PORTRAIT = (1 << 2); + public static final int VIDEO_QUALITY_VGA_LANDSCAPE = (1 << 3); + public static final int VIDEO_QUALITY_VGA_PORTRAIT = (1 << 4); + + // Audio related information + public int mAudioQuality; + public int mAudioDirection; + // Video related information + public int mVideoQuality; + public int mVideoDirection; + + + + public ImsStreamMediaProfile(Parcel in) { + readFromParcel(in); + } + + public ImsStreamMediaProfile() { + mAudioQuality = AUDIO_QUALITY_AMR_WB; + mAudioDirection = DIRECTION_SEND_RECEIVE; + mVideoQuality = VIDEO_QUALITY_NONE; + mVideoDirection = DIRECTION_INVALID; + } + + public ImsStreamMediaProfile(int audioQuality, int audioDirection, + int videoQuality, int videoDirection) { + mAudioQuality = audioQuality; + mAudioDirection = audioDirection; + mVideoQuality = videoQuality; + mVideoDirection = videoDirection; + } + + public void copyFrom(ImsStreamMediaProfile profile) { + mAudioQuality = profile.mAudioQuality; + mAudioDirection = profile.mAudioDirection; + mVideoQuality = profile.mVideoQuality; + mVideoDirection = profile.mVideoDirection; + } + + @Override + public String toString() { + return "{ audioQuality=" + mAudioQuality + + ", audioDirection=" + mAudioDirection + + ", videoQuality=" + mVideoQuality + + ", videoDirection=" + mVideoDirection + " }"; + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel out, int flags) { + out.writeInt(mAudioQuality); + out.writeInt(mAudioDirection); + out.writeInt(mVideoQuality); + out.writeInt(mVideoDirection); + } + + private void readFromParcel(Parcel in) { + mAudioQuality = in.readInt(); + mAudioDirection = in.readInt(); + mVideoQuality = in.readInt(); + mVideoDirection = in.readInt(); + } + + public static final Creator<ImsStreamMediaProfile> CREATOR = + new Creator<ImsStreamMediaProfile>() { + @Override + public ImsStreamMediaProfile createFromParcel(Parcel in) { + return new ImsStreamMediaProfile(in); + } + + @Override + public ImsStreamMediaProfile[] newArray(int size) { + return new ImsStreamMediaProfile[size]; + } + }; +} diff --git a/telephony/java/com/android/ims/internal/IImsCallSession.aidl b/telephony/java/com/android/ims/internal/IImsCallSession.aidl new file mode 100644 index 0000000..aa2204e --- /dev/null +++ b/telephony/java/com/android/ims/internal/IImsCallSession.aidl @@ -0,0 +1,219 @@ +/* + * Copyright (c) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.ims.internal; + +import com.android.ims.ImsCallProfile; +import com.android.ims.ImsStreamMediaProfile; +import com.android.ims.internal.IImsCallSessionListener; + +/** + * An IMS session that is associated with a SIP dialog which is established from/to + * INVITE request or a mid-call transaction to control the session. + * {@hide} + */ +interface IImsCallSession { + /** + * Closes the object. This object is not usable after being closed. + */ + void close(); + + /** + * Gets the call ID of the session. + * + * @return the call ID + */ + String getCallId(); + + /** + * Gets the call profile that this session is associated with + * + * @return the call profile that this session is associated with + */ + ImsCallProfile getCallProfile(); + + /** + * Gets the local call profile that this session is associated with + * + * @return the local call profile that this session is associated with + */ + ImsCallProfile getLocalCallProfile(); + + /** + * Gets the value associated with the specified property of this session. + * + * @return the string value associated with the specified property + */ + String getProperty(String name); + + /** + * Gets the session state. The value returned must be one of the states in + * {@link ImsCallSession#State}. + * + * @return the session state + */ + int getState(); + + /** + * Checks if the session is in a call. + * + * @return true if the session is in a call + */ + boolean isInCall(); + + /** + * Sets the listener to listen to the session events. A {@link IImsCallSession} + * can only hold one listener at a time. Subsequent calls to this method + * override the previous listener. + * + * @param listener to listen to the session events of this object + */ + void setListener(in IImsCallSessionListener listener); + + /** + * Mutes or unmutes the mic for the active call. + * + * @param muted true if the call is muted, false otherwise + */ + void setMute(boolean muted); + + /** + * Initiates an IMS call with the specified target and call profile. + * The session listener is called back upon defined session events. + * The method is only valid to call when the session state is in + * {@link ImsCallSession#State#IDLE}. + * + * @param callee dialed string to make the call to + * @param profile call profile to make the call with the specified service type, + * call type and media information + * @see Listener#callSessionStarted, Listener#callSessionStartFailed + */ + void start(String callee, in ImsCallProfile profile); + + /** + * Initiates an IMS call with the specified participants and call profile. + * The session listener is called back upon defined session events. + * The method is only valid to call when the session state is in + * {@link ImsCallSession#State#IDLE}. + * + * @param participants participant list to initiate an IMS conference call + * @param profile call profile to make the call with the specified service type, + * call type and media information + * @see Listener#callSessionStarted, Listener#callSessionStartFailed + */ + void startConference(in String[] participants, in ImsCallProfile profile); + + /** + * Accepts an incoming call or session update. + * + * @param callType call type specified in {@link ImsCallProfile} to be answered + * @param profile stream media profile {@link ImsStreamMediaProfile} to be answered + * @see Listener#callSessionStarted + */ + void accept(int callType, in ImsStreamMediaProfile profile); + + /** + * Rejects an incoming call or session update. + * + * @param reason reason code to reject an incoming call + * @see Listener#callSessionStartFailed + */ + void reject(int reason); + + /** + * Terminates a call. + * + * @see Listener#callSessionTerminated + */ + void terminate(int reason); + + /** + * Puts a call on hold. When it succeeds, {@link Listener#callSessionHeld} is called. + * + * @param profile stream media profile {@link ImsStreamMediaProfile} to hold the call + * @see Listener#callSessionHeld, Listener#callSessionHoldFailed + */ + void hold(in ImsStreamMediaProfile profile); + + /** + * Continues a call that's on hold. When it succeeds, {@link Listener#callSessionResumed} + * is called. + * + * @param profile stream media profile {@link ImsStreamMediaProfile} to resume the call + * @see Listener#callSessionResumed, Listener#callSessionResumeFailed + */ + void resume(in ImsStreamMediaProfile profile); + + /** + * Merges the active & hold call. When it succeeds, {@link Listener#callSessionMerged} + * is called. + * + * @see Listener#callSessionMerged, Listener#callSessionMergeFailed + */ + void merge(); + + /** + * Updates the current call's properties (ex. call mode change: video upgrade / downgrade). + * + * @param callType call type specified in {@link ImsCallProfile} to be updated + * @param profile stream media profile {@link ImsStreamMediaProfile} to be updated + * @see Listener#callSessionUpdated, Listener#callSessionUpdateFailed + */ + void update(int callType, in ImsStreamMediaProfile profile); + + /** + * Extends this call to the conference call with the specified recipients. + * + * @participants participant list to be invited to the conference call after extending the call + * @see Listener#sessionConferenceExtened, Listener#sessionConferenceExtendFailed + */ + void extendToConference(in String[] participants); + + /** + * Requests the conference server to invite an additional participants to the conference. + * + * @participants participant list to be invited to the conference call + * @see Listener#sessionInviteParticipantsRequestDelivered, + * Listener#sessionInviteParticipantsRequestFailed + */ + void inviteParticipants(in String[] participants); + + /** + * Requests the conference server to remove the specified participants from the conference. + * + * @param participants participant list to be removed from the conference call + * @see Listener#sessionRemoveParticipantsRequestDelivered, + * Listener#sessionRemoveParticipantsRequestFailed + */ + void removeParticipants(in String[] participants); + + /** + * Sends a DTMF code. According to <a href="http://tools.ietf.org/html/rfc2833">RFC 2833</a>, + * event 0 ~ 9 maps to decimal value 0 ~ 9, '*' to 10, '#' to 11, event 'A' ~ 'D' to 12 ~ 15, + * and event flash to 16. Currently, event flash is not supported. + * + * @param code the DTMF to send. Value 0 to 15 (inclusive) are valid inputs. + * @param duration the interval in milli-seconds between the DTMFs + */ + void sendDtmf(int code, int duration); + + /** + * Sends an USSD message. + * + * @param ussdMessage USSD message to send + */ + void sendUssd(String ussdMessage); +} diff --git a/telephony/java/com/android/ims/internal/IImsCallSessionListener.aidl b/telephony/java/com/android/ims/internal/IImsCallSessionListener.aidl new file mode 100644 index 0000000..f36cf39 --- /dev/null +++ b/telephony/java/com/android/ims/internal/IImsCallSessionListener.aidl @@ -0,0 +1,99 @@ +/* + * Copyright (c) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.ims.internal; + +import com.android.ims.ImsStreamMediaProfile; +import com.android.ims.ImsCallProfile; +import com.android.ims.ImsReasonInfo; +import com.android.ims.ImsConferenceState; +import com.android.ims.internal.IImsCallSession; + +/** + * A listener type for receiving notification on IMS call session events. + * When an event is generated for an {@link IImsCallSession}, the application is notified + * by having one of the methods called on the {@link IImsCallSessionListener}. + * {@hide} + */ +interface IImsCallSessionListener { + /** + * Notifies the result of the basic session operation (setup / terminate). + */ + void callSessionProgressing(in IImsCallSession session, in ImsStreamMediaProfile profile); + void callSessionStarted(in IImsCallSession session, in ImsCallProfile profile); + void callSessionStartFailed(in IImsCallSession session, in ImsReasonInfo reasonInfo); + void callSessionTerminated(in IImsCallSession session, in ImsReasonInfo reasonInfo); + + /** + * Notifies the result of the call hold/resume operation. + */ + void callSessionHeld(in IImsCallSession session, in ImsCallProfile profile); + void callSessionHoldFailed(in IImsCallSession session, in ImsReasonInfo reasonInfo); + void callSessionHoldReceived(in IImsCallSession session, in ImsCallProfile profile); + void callSessionResumed(in IImsCallSession session, in ImsCallProfile profile); + void callSessionResumeFailed(in IImsCallSession session, in ImsReasonInfo reasonInfo); + void callSessionResumeReceived(in IImsCallSession session, in ImsCallProfile profile); + + /** + * Notifiies the result of call merge operation. + */ + void callSessionMerged(in IImsCallSession session, + in IImsCallSession newSession, in ImsCallProfile profile); + void callSessionMergeFailed(in IImsCallSession session, + in ImsReasonInfo reasonInfo); + + /** + * Notifies the result of call upgrade / downgrade or any other call updates. + */ + void callSessionUpdated(in IImsCallSession session, + in ImsCallProfile profile); + void callSessionUpdateFailed(in IImsCallSession session, + in ImsReasonInfo reasonInfo); + void callSessionUpdateReceived(in IImsCallSession session, + in ImsCallProfile profile); + + /** + * Notifies the result of conference extension. + */ + void callSessionConferenceExtended(in IImsCallSession session, + in IImsCallSession newSession, in ImsCallProfile profile); + void callSessionConferenceExtendFailed(in IImsCallSession session, + in ImsReasonInfo reasonInfo); + void callSessionConferenceExtendReceived(in IImsCallSession session, + in IImsCallSession newSession, in ImsCallProfile profile); + + /** + * Notifies the result of the participant invitation / removal to/from the conference session. + */ + void callSessionInviteParticipantsRequestDelivered(in IImsCallSession session); + void callSessionInviteParticipantsRequestFailed(in IImsCallSession session, + in ImsReasonInfo reasonInfo); + void callSessionRemoveParticipantsRequestDelivered(in IImsCallSession session); + void callSessionRemoveParticipantsRequestFailed(in IImsCallSession session, + in ImsReasonInfo reasonInfo); + + /** + * Notifies the changes of the conference info. in the conference session. + */ + void callSessionConferenceStateUpdated(in IImsCallSession session, + in ImsConferenceState state); + + /** + * Notifies the incoming USSD message. + */ + void callSessionUssdMessageReceived(in IImsCallSession session, + int mode, String ussdMessage); +} diff --git a/telephony/java/com/android/ims/internal/IImsRegistrationListener.aidl b/telephony/java/com/android/ims/internal/IImsRegistrationListener.aidl new file mode 100644 index 0000000..5f243a0 --- /dev/null +++ b/telephony/java/com/android/ims/internal/IImsRegistrationListener.aidl @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.ims.internal; + +/** + * A listener type for receiving notifications about the changes to + * the IMS connection(registration). + * + * {@hide} + */ +interface IImsRegistrationListener { + /** + * Notifies the application when the device is connected to the IMS network. + */ + void registrationConnected(); + + /** + * Notifies the application when the device is disconnected from the IMS network. + */ + void registrationDisconnected(); + + /** + * Notifies the application when its suspended IMS connection is resumed, + * meaning the connection now allows throughput. + */ + void registrationResumed(); + + /** + * Notifies the application when its current IMS connection is suspended, + * meaning there is no data throughput. + */ + void registrationSuspended(); + + /** + * Notifies the application when its current IMS connection is updated + * since the service setting is changed or the service is added/removed. + * + * @param serviceClass a service class specified in {@link ImsServiceClass} + * @param event an event type when this callback is called + * If {@code event} is 0, meaning the specified service is removed from the IMS connection. + * Else ({@code event} is 1), meaning the specified service is added to the IMS connection. + */ + void registrationServiceCapabilityChanged(int serviceClass, int event); +} diff --git a/telephony/java/com/android/ims/internal/IImsService.aidl b/telephony/java/com/android/ims/internal/IImsService.aidl new file mode 100644 index 0000000..bac5651 --- /dev/null +++ b/telephony/java/com/android/ims/internal/IImsService.aidl @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.ims.internal; + +import android.app.PendingIntent; + +import com.android.ims.ImsCallProfile; +import com.android.ims.internal.IImsRegistrationListener; +import com.android.ims.internal.IImsCallSession; +import com.android.ims.internal.IImsCallSessionListener; +import com.android.ims.internal.IImsUt; + +/** + * {@hide} + */ +interface IImsService { + int open(int serviceClass, in PendingIntent incomingCallIntent, + in IImsRegistrationListener listener); + void close(int serviceId); + boolean isConnected(int serviceId, int serviceType, int callType); + boolean isOpened(int serviceId); + void setRegistrationListener(int serviceId, in IImsRegistrationListener listener); + + ImsCallProfile createCallProfile(int serviceId, int serviceType, int callType); + + IImsCallSession createCallSession(int serviceId, in ImsCallProfile profile, + in IImsCallSessionListener listener); + IImsCallSession getPendingCallSession(int serviceId, String callId); + + /** + * Ut interface for the supplementary service configuration. + */ + IImsUt getUtInterface(int serviceId); +} diff --git a/telephony/java/com/android/ims/internal/IImsStreamMediaSession.aidl b/telephony/java/com/android/ims/internal/IImsStreamMediaSession.aidl new file mode 100644 index 0000000..459c685 --- /dev/null +++ b/telephony/java/com/android/ims/internal/IImsStreamMediaSession.aidl @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.ims.internal; + +/** + * + * {@hide} + */ +interface IImsStreamMediaSession { + void close(); +} diff --git a/telephony/java/com/android/ims/internal/IImsUt.aidl b/telephony/java/com/android/ims/internal/IImsUt.aidl new file mode 100644 index 0000000..32929ed --- /dev/null +++ b/telephony/java/com/android/ims/internal/IImsUt.aidl @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.ims.internal; + +import android.os.Bundle; + +import com.android.ims.internal.IImsUtListener; + +/** + * Provides the Ut interface interworking to get/set the supplementary service configuration. + * + * {@hide} + */ +interface IImsUt { + /** + * Closes the object. This object is not usable after being closed. + */ + void close(); + + /** + * Retrieves the configuration of the call barring. + */ + int queryCallBarring(int cbType); + + /** + * Retrieves the configuration of the call forward. + */ + int queryCallForward(int condition, String number); + + /** + * Retrieves the configuration of the call waiting. + */ + int queryCallWaiting(); + + /** + * Updates or retrieves the supplementary service configuration. + */ + int transact(in Bundle ssInfo); + + /** + * Updates the configuration of the call barring. + */ + int updateCallBarring(int cbType, boolean enable); + + /** + * Updates the configuration of the call forward. + */ + int updateCallForward(int action, int condition, String number, int timeSeconds); + + /** + * Updates the configuration of the call waiting. + */ + int updateCallWaiting(boolean enable); + + /** + * Sets the listener. + */ + void setListener(in IImsUtListener listener); +} diff --git a/telephony/java/com/android/ims/internal/IImsUtListener.aidl b/telephony/java/com/android/ims/internal/IImsUtListener.aidl new file mode 100644 index 0000000..3f1b5a7 --- /dev/null +++ b/telephony/java/com/android/ims/internal/IImsUtListener.aidl @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.ims.internal; + +import android.os.Bundle; + +import com.android.ims.ImsCallForwardInfo; +import com.android.ims.ImsSsInfo; +import com.android.ims.internal.IImsUt; + +/** + * {@hide} + */ +interface IImsUtListener { + /** + * Notifies the result of the supplementary service configuration udpate. + */ + void utConfigurationUpdated(in IImsUt ut, int id); + void utConfigurationUpdateFailed(in IImsUt ut, int id, int errorCode); + + /** + * Notifies the result of the supplementary service configuration query. + */ + void utConfigurationQueried(in IImsUt ut, int id, in Bundle ssInfo); + void utConfigurationQueryFailed(in IImsUt ut, int id, int errorCode); + + /** + * Notifies the status of the call barring supplementary service. + */ + void utConfigurationCallBarringQueried(in IImsUt ut, + int id, in ImsSsInfo[] cbInfo); + + /** + * Notifies the status of the call forwarding supplementary service. + */ + void utConfigurationCallForwardQueried(in IImsUt ut, + int id, in ImsCallForwardInfo[] cfInfo); + + /** + * Notifies the status of the call waiting supplementary service. + */ + void utConfigurationCallWaitingQueried(in IImsUt ut, + int id, in ImsSsInfo[] cwInfo); +} |