From b304fc0aafe067e422ce219ba5edb4bc7a68924c Mon Sep 17 00:00:00 2001 From: Etan Cohen Date: Thu, 28 May 2015 15:53:20 -0700 Subject: [PATCH 1/3] Rename VoLTE/WFC enable API to available - add VT available API. Renamed API to use consistent semantics: available refers to the current state of the service rather then whether feature is enabled by device/carrier/ user. Added VT API to match VoLTE/WFC. Change-Id: Ifb31f123db77e731e75a982b8594168f59a289e7 --- .../android/telephony/TelephonyManager.java | 38 +++++++++++++------ .../internal/telephony/ITelephony.aidl | 15 +++++--- 2 files changed, 35 insertions(+), 18 deletions(-) diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java index 68f71f29ddbd1..721157002921e 100644 --- a/telephony/java/android/telephony/TelephonyManager.java +++ b/telephony/java/android/telephony/TelephonyManager.java @@ -4285,13 +4285,13 @@ public class TelephonyManager { } } - /** - * Returns the Status of Volte - *@hide - */ - public boolean isVolteEnabled() { + /** + * Returns the Status of Volte + * @hide + */ + public boolean isVolteAvailable() { try { - return getITelephony().isVolteEnabled(); + return getITelephony().isVolteAvailable(); } catch (RemoteException ex) { return false; } catch (NullPointerException ex) { @@ -4299,13 +4299,27 @@ public class TelephonyManager { } } - /** - * Returns the Status of Wi-Fi Calling - *@hide - */ - public boolean isWifiCallingEnabled() { + /** + * Returns the Status of video telephony (VT) + * @hide + */ + public boolean isVideoTelephonyAvailable() { + try { + return getITelephony().isVideoTelephonyAvailable(); + } catch (RemoteException ex) { + return false; + } catch (NullPointerException ex) { + return false; + } + } + + /** + * Returns the Status of Wi-Fi Calling + * @hide + */ + public boolean isWifiCallingAvailable() { try { - return getITelephony().isWifiCallingEnabled(); + return getITelephony().isWifiCallingAvailable(); } catch (RemoteException ex) { return false; } catch (NullPointerException ex) { diff --git a/telephony/java/com/android/internal/telephony/ITelephony.aidl b/telephony/java/com/android/internal/telephony/ITelephony.aidl index 7dc71ede8fc10..6e50e9bdc1e95 100644 --- a/telephony/java/com/android/internal/telephony/ITelephony.aidl +++ b/telephony/java/com/android/internal/telephony/ITelephony.aidl @@ -936,6 +936,7 @@ interface ITelephony { * @return {@code true} if the device supports hearing aid compatibility. */ boolean isHearingAidCompatibilitySupported(); + /** * Get IMS Registration Status */ @@ -943,15 +944,18 @@ interface ITelephony { /** * Returns the Status of Wi-Fi Calling - *@hide */ - boolean isWifiCallingEnabled(); + boolean isWifiCallingAvailable(); + + /** + * Returns the Status of Volte + */ + boolean isVolteAvailable(); /** - * Returns the Status of Volte - *@hide + * Returns the Status of VT (video telephony) */ - boolean isVolteEnabled(); + boolean isVideoTelephonyAvailable(); /** * Returns the unique device ID of phone, for example, the IMEI for @@ -980,7 +984,6 @@ interface ITelephony { /** * Return the modem activity info. - *@hide */ ModemActivityInfo getModemActivityInfo(); } From ddf570e8226bd21448b44b3327d4bcb2608f4d00 Mon Sep 17 00:00:00 2001 From: Shriram Ganesh Date: Sun, 31 May 2015 09:18:48 -0700 Subject: [PATCH 2/3] MWI,phantom call,Suppl services, error codes 1. IMS MWI Feature - Add new API to update waiting voice message count, for UI propagation based on RFC 3842 2. phantom call support Supplementary services 3. IMS : Incoming Call Barring - Modified existing API to support request like registration,activation, deactivation,erasure,interogation. 4.Unsol supplementary service notification - send unsol supplementary notification to UI - add call history info Miscellaneous 5. Ims: Originate conference call in DIALING state 6. IMS: Addition of Extras to ImsCallProfile - Add EXTRA string definitions to ImsCallProfile 7. IMS: Definition of error code - answered elsewhere - FDN call failure 8. - Propagate IMS supplementary services to telephony framework - Introduce call forwarding history info. Bug: 21725750 Squash of 2 earlier CLs: Change-Id: I52a64e9a5df3479189f62921a01655a50fb386fc Change-Id: Idc3a433785e84a3d683cbcfc7fb90f0b89dced12 Change-Id: I428ce3c6a043e43b86dea41622e0a828d8b45e53 --- telecomm/java/android/telecom/Call.java | 9 +- telecomm/java/android/telecom/Connection.java | 7 ++ telecomm/java/android/telecom/Phone.java | 3 +- .../java/com/android/ims/ImsCallProfile.java | 8 ++ .../java/com/android/ims/ImsReasonInfo.java | 9 ++ telephony/java/com/android/ims/ImsSsInfo.java | 3 + .../ims/ImsSuppServiceNotification.aidl | 20 ++++ .../ims/ImsSuppServiceNotification.java | 101 ++++++++++++++++++ .../ims/internal/IImsCallSessionListener.aidl | 7 ++ .../internal/IImsRegistrationListener.aidl | 6 ++ .../java/com/android/ims/internal/IImsUt.aidl | 2 +- 11 files changed, 172 insertions(+), 3 deletions(-) create mode 100644 telephony/java/com/android/ims/ImsSuppServiceNotification.aidl create mode 100644 telephony/java/com/android/ims/ImsSuppServiceNotification.java diff --git a/telecomm/java/android/telecom/Call.java b/telecomm/java/android/telecom/Call.java index e756a577613f1..6c1c1187140da 100644 --- a/telecomm/java/android/telecom/Call.java +++ b/telecomm/java/android/telecom/Call.java @@ -968,7 +968,6 @@ public final class Call { unregisterCallback(listener); } - /** {@hide} */ Call(Phone phone, String telecomCallId, InCallAdapter inCallAdapter) { mPhone = phone; @@ -977,6 +976,14 @@ public final class Call { mState = STATE_NEW; } + /** {@hide} */ + Call(Phone phone, String telecomCallId, InCallAdapter inCallAdapter, int state) { + mPhone = phone; + mTelecomCallId = telecomCallId; + mInCallAdapter = inCallAdapter; + mState = state; + } + /** {@hide} */ final String internalGetCallId() { return mTelecomCallId; diff --git a/telecomm/java/android/telecom/Connection.java b/telecomm/java/android/telecom/Connection.java index f304d1d966a94..93cea97ea5fe5 100644 --- a/telecomm/java/android/telecom/Connection.java +++ b/telecomm/java/android/telecom/Connection.java @@ -252,6 +252,13 @@ public abstract class Connection extends Conferenceable { // Next CAPABILITY value: 0x00400000 //********************************************************************************************** + /** + * Call extras key to pack/unpack call history info. + * The value for this key should be an ArrayList of Strings. + * @hide + */ + public static final String EXTRA_CALL_HISTORY_INFO = "EXTRA_CALL_HISTORY_INFO"; + // Flag controlling whether PII is emitted into the logs private static final boolean PII_DEBUG = Log.isLoggable(android.util.Log.DEBUG); diff --git a/telecomm/java/android/telecom/Phone.java b/telecomm/java/android/telecom/Phone.java index 8eb091b732af2..47154da242f49 100644 --- a/telecomm/java/android/telecom/Phone.java +++ b/telecomm/java/android/telecom/Phone.java @@ -122,7 +122,8 @@ public final class Phone { } final void internalAddCall(ParcelableCall parcelableCall) { - Call call = new Call(this, parcelableCall.getId(), mInCallAdapter); + Call call = new Call(this, parcelableCall.getId(), mInCallAdapter, + parcelableCall.getState()); mCallByTelecomCallId.put(parcelableCall.getId(), call); mCalls.add(call); checkCallTree(parcelableCall); diff --git a/telephony/java/com/android/ims/ImsCallProfile.java b/telephony/java/com/android/ims/ImsCallProfile.java index 2c4354b953df6..f263b4da7b29e 100644 --- a/telephony/java/com/android/ims/ImsCallProfile.java +++ b/telephony/java/com/android/ims/ImsCallProfile.java @@ -174,11 +174,19 @@ public class ImsCallProfile implements Parcelable { * cna : Calling name * ussd : For network-initiated USSD, MT only * remote_uri : Connected user identity (it can be used for the conference) + * ChildNum: Child number info. + * Codec: Codec info. + * DisplayText: Display text for the call. + * AdditionalCallInfo: Additional call info. */ 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 static final String EXTRA_CHILD_NUMBER = "ChildNum"; + public static final String EXTRA_CODEC = "Codec"; + public static final String EXTRA_DISPLAY_TEXT = "DisplayText"; + public static final String EXTRA_ADDITIONAL_CALL_INFO = "AdditionalCallInfo"; public int mServiceType; public int mCallType; diff --git a/telephony/java/com/android/ims/ImsReasonInfo.java b/telephony/java/com/android/ims/ImsReasonInfo.java index 96289158cc055..2769a2b279683 100644 --- a/telephony/java/com/android/ims/ImsReasonInfo.java +++ b/telephony/java/com/android/ims/ImsReasonInfo.java @@ -99,6 +99,9 @@ public class ImsReasonInfo implements Parcelable { // MT : No action from user after alerting the call public static final int CODE_TIMEOUT_NO_ANSWER_CALL_UPDATE = 203; + //Call failures for FDN + public static final int CODE_FDN_BLOCKED = 241; + /** * STATUSCODE (SIP response code) (IMS -> Telephony) */ @@ -226,6 +229,12 @@ public class ImsReasonInfo implements Parcelable { */ public static final int CODE_CALL_DROP_IWLAN_TO_LTE_UNAVAILABLE = 1100; + /** + * MT call has ended due to a release from the network + * because the call was answered elsewhere + */ + public static final int CODE_ANSWERED_ELSEWHERE = 1014; + /** * Network string error messages. * mExtraMessage may have these values. diff --git a/telephony/java/com/android/ims/ImsSsInfo.java b/telephony/java/com/android/ims/ImsSsInfo.java index dbde1c62c5153..7acc3bfd45c95 100644 --- a/telephony/java/com/android/ims/ImsSsInfo.java +++ b/telephony/java/com/android/ims/ImsSsInfo.java @@ -34,6 +34,7 @@ public class ImsSsInfo implements Parcelable { // 0: disabled, 1: enabled public int mStatus; + public String mIcbNum; public ImsSsInfo() { } @@ -50,6 +51,7 @@ public class ImsSsInfo implements Parcelable { @Override public void writeToParcel(Parcel out, int flags) { out.writeInt(mStatus); + out.writeString(mIcbNum); } @Override @@ -59,6 +61,7 @@ public class ImsSsInfo implements Parcelable { private void readFromParcel(Parcel in) { mStatus = in.readInt(); + mIcbNum = in.readString(); } public static final Creator CREATOR = diff --git a/telephony/java/com/android/ims/ImsSuppServiceNotification.aidl b/telephony/java/com/android/ims/ImsSuppServiceNotification.aidl new file mode 100644 index 0000000000000..6b4479f467c2e --- /dev/null +++ b/telephony/java/com/android/ims/ImsSuppServiceNotification.aidl @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2015 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 ImsSuppServiceNotification; diff --git a/telephony/java/com/android/ims/ImsSuppServiceNotification.java b/telephony/java/com/android/ims/ImsSuppServiceNotification.java new file mode 100644 index 0000000000000..faf749972b91b --- /dev/null +++ b/telephony/java/com/android/ims/ImsSuppServiceNotification.java @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2015 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; + +import java.util.Arrays; + + +/** + * Parcelable object to handle IMS supplementary service notifications. + * + * @hide + */ +public class ImsSuppServiceNotification implements Parcelable { + private static final String TAG = "ImsSuppServiceNotification"; + + /** Type of notification: 0 = MO; 1 = MT */ + public int notificationType; + /** TS 27.007 7.17 "code1" or "code2" */ + public int code; + /** TS 27.007 7.17 "index" - Not used currently*/ + public int index; + /** TS 27.007 7.17 "type" (MT only) - Not used currently */ + public int type; + /** TS 27.007 7.17 "number" (MT only) */ + public String number; + /** List of forwarded numbers, if any */ + public String[] history; + + public ImsSuppServiceNotification() { + } + + public ImsSuppServiceNotification(Parcel in) { + readFromParcel(in); + } + + @Override + public String toString() { + return "{ notificationType=" + notificationType + + ", code=" + code + + ", index=" + index + + ", type=" + type + + ", number=" + number + + ", history=" + Arrays.toString(history) + + " }"; + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel out, int flags) { + out.writeInt(notificationType); + out.writeInt(code); + out.writeInt(index); + out.writeInt(type); + out.writeString(number); + out.writeStringArray(history); + } + + private void readFromParcel(Parcel in) { + notificationType = in.readInt(); + code = in.readInt(); + index = in.readInt(); + type = in.readInt(); + number = in.readString(); + history = in.createStringArray(); + } + + public static final Creator CREATOR = + new Creator() { + @Override + public ImsSuppServiceNotification createFromParcel(Parcel in) { + return new ImsSuppServiceNotification(in); + } + + @Override + public ImsSuppServiceNotification[] newArray(int size) { + return new ImsSuppServiceNotification[size]; + } + }; +} diff --git a/telephony/java/com/android/ims/internal/IImsCallSessionListener.aidl b/telephony/java/com/android/ims/internal/IImsCallSessionListener.aidl index 0443c3edb9747..d562eccd83fc1 100644 --- a/telephony/java/com/android/ims/internal/IImsCallSessionListener.aidl +++ b/telephony/java/com/android/ims/internal/IImsCallSessionListener.aidl @@ -21,6 +21,7 @@ import com.android.ims.ImsCallProfile; import com.android.ims.ImsReasonInfo; import com.android.ims.ImsConferenceState; import com.android.ims.internal.IImsCallSession; +import com.android.ims.ImsSuppServiceNotification; /** * A listener type for receiving notification on IMS call session events. @@ -123,4 +124,10 @@ interface IImsCallSessionListener { * @param isMultiParty {@code true} if the session became multiparty, {@code false} otherwise. */ void callSessionMultipartyStateChanged(in IImsCallSession session, in boolean isMultiParty); + + /** + * Notifies the supplementary service information for the current session. + */ + void callSessionSuppServiceReceived(in IImsCallSession session, + in ImsSuppServiceNotification suppSrvNotification); } diff --git a/telephony/java/com/android/ims/internal/IImsRegistrationListener.aidl b/telephony/java/com/android/ims/internal/IImsRegistrationListener.aidl index c91060019c606..a6a26584411ba 100644 --- a/telephony/java/com/android/ims/internal/IImsRegistrationListener.aidl +++ b/telephony/java/com/android/ims/internal/IImsRegistrationListener.aidl @@ -72,4 +72,10 @@ interface IImsRegistrationListener { */ void registrationFeatureCapabilityChanged(int serviceClass, out int[] enabledFeatures, out int[] disabledFeatures); + + /** + * Updates the application with the waiting voice message count. + * @param count The number of waiting voice messages. + */ + void voiceMessageCountUpdate(int count); } diff --git a/telephony/java/com/android/ims/internal/IImsUt.aidl b/telephony/java/com/android/ims/internal/IImsUt.aidl index c531ea59ce454..4ab5ee3c4f8c7 100644 --- a/telephony/java/com/android/ims/internal/IImsUt.aidl +++ b/telephony/java/com/android/ims/internal/IImsUt.aidl @@ -74,7 +74,7 @@ interface IImsUt { /** * Updates the configuration of the call barring. */ - int updateCallBarring(int cbType, boolean enable, in String[] barrList); + int updateCallBarring(int cbType, int action, in String[] barrList); /** * Updates the configuration of the call forward. From 6bf35acd7c0206d90f9a4a36735bcd4d5bfec75e Mon Sep 17 00:00:00 2001 From: Shriram Ganesh Date: Thu, 11 Dec 2014 17:53:38 -0800 Subject: [PATCH 3/3] Added support for mid-call enabled SRVCC conference call When TelephonyConnection is created for an unknown connection, the recalculation of conference participants have to be retriggered. This is because, unless that TelephonyConnection is added to ConnectionService, it cannot be added as part of a conference call in CallsManager. Change-Id: Ic9359104f02eddff655d84fd25f5c28c9158e5f4 --- .../java/android/telecom/ConnectionService.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/telecomm/java/android/telecom/ConnectionService.java b/telecomm/java/android/telecom/ConnectionService.java index d2e7a74977e02..966b2ae126144 100644 --- a/telecomm/java/android/telecom/ConnectionService.java +++ b/telecomm/java/android/telecom/ConnectionService.java @@ -655,6 +655,9 @@ public abstract class ConnectionService extends Service { connection.getDisconnectCause(), createIdList(connection.getConferenceables()), connection.getExtras())); + if (isUnknown) { + triggerConferenceRecalculate(); + } } private void abort(String callId) { @@ -1013,6 +1016,16 @@ public abstract class ConnectionService extends Service { return null; } + /** + * Trigger recalculate functinality for conference calls. This is used when a Telephony + * Connection is part of a conference controller but is not yet added to Connection + * Service and hence cannot be added to the conference call. + * + * @hide + */ + public void triggerConferenceRecalculate() { + } + /** * Create a {@code Connection} given an outgoing request. This is used to initiate new * outgoing calls.