aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrad Ebinger <breadley@google.com>2017-02-23 20:14:00 +0000
committerandroid-build-merger <android-build-merger@google.com>2017-02-23 20:14:00 +0000
commit126dabe57449fff57a6186b113c14711e2ca2076 (patch)
treec591f3e6ccfdd180a531a48185ae72c684b768ef
parentf72f113ad587adbf58ecf17a8dd1bd3ae671007e (diff)
parent0f92c09a64af8a148f42c27ddbf96a4b7c762a82 (diff)
downloadims-126dabe57449fff57a6186b113c14711e2ca2076.tar.gz
Moving classes that must be used by an ImsService to base/ am: ffc6936284
am: 0f92c09a64 Change-Id: Ic434b23c4a2839d4b1212b8818afa74e6a2e101e
-rw-r--r--src/java/com/android/ims/ImsCallSessionListenerBase.java243
-rw-r--r--src/java/com/android/ims/ImsConfig.java695
-rw-r--r--src/java/com/android/ims/ImsException.java52
-rw-r--r--src/java/com/android/ims/ImsServiceClass.java1
-rw-r--r--src/java/com/android/ims/ImsUtInterface.java179
-rw-r--r--src/java/com/android/ims/internal/ImsCallSession.java1288
-rw-r--r--src/java/com/android/ims/internal/ImsVideoCallProvider.java291
7 files changed, 1 insertions, 2748 deletions
diff --git a/src/java/com/android/ims/ImsCallSessionListenerBase.java b/src/java/com/android/ims/ImsCallSessionListenerBase.java
deleted file mode 100644
index e2ad6ccd..00000000
--- a/src/java/com/android/ims/ImsCallSessionListenerBase.java
+++ /dev/null
@@ -1,243 +0,0 @@
-/*
- * 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 compliance with the License.
- * You may obtaa copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to 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 com.android.ims.internal.IImsCallSession;
-import com.android.ims.internal.IImsCallSessionListener;
-
-/*
- * Stub for IImsCallSessionListener interface. To enable forward compatibility during
- * development - empty APIs should not be deployed. To be used in vendor code - not in
- * framework code (since framework should be updated whenever interface is updated).
- *
- * @hide
- */
-public abstract class ImsCallSessionListenerBase extends IImsCallSessionListener.Stub {
- /**
- * Notifies the result of the basic session operation (setup / terminate).
- */
- @Override
- public void callSessionProgressing(IImsCallSession session, ImsStreamMediaProfile profile) {
- // no-op
- }
-
- @Override
- public void callSessionStarted(IImsCallSession session, ImsCallProfile profile) {
- // no-op
- }
-
- @Override
- public void callSessionStartFailed(IImsCallSession session, ImsReasonInfo reasonInfo) {
- // no-op
- }
-
- @Override
- public void callSessionTerminated(IImsCallSession session, ImsReasonInfo reasonInfo) {
- // no-op
- }
-
- /**
- * Notifies the result of the call hold/resume operation.
- */
- @Override
- public void callSessionHeld(IImsCallSession session, ImsCallProfile profile) {
- // no-op
- }
-
- @Override
- public void callSessionHoldFailed(IImsCallSession session, ImsReasonInfo reasonInfo) {
- // no-op
- }
-
- @Override
- public void callSessionHoldReceived(IImsCallSession session, ImsCallProfile profile) {
- // no-op
- }
-
- @Override
- public void callSessionResumed(IImsCallSession session, ImsCallProfile profile) {
- // no-op
- }
-
- @Override
- public void callSessionResumeFailed(IImsCallSession session, ImsReasonInfo reasonInfo) {
- // no-op
- }
-
- @Override
- public void callSessionResumeReceived(IImsCallSession session, ImsCallProfile profile) {
- // no-op
- }
-
- /**
- * Notifies the result of call merge operation.
- */
- @Override
- public void callSessionMergeStarted(IImsCallSession session, IImsCallSession newSession,
- ImsCallProfile profile) {
- // no-op
- }
-
- @Override
- public void callSessionMergeComplete(IImsCallSession session) {
- // no-op
- }
-
- @Override
- public void callSessionMergeFailed(IImsCallSession session, ImsReasonInfo reasonInfo) {
- // no-op
- }
-
- /**
- * Notifies the result of call upgrade / downgrade or any other call
- * updates.
- */
- @Override
- public void callSessionUpdated(IImsCallSession session, ImsCallProfile profile) {
- // no-op
- }
-
- @Override
- public void callSessionUpdateFailed(IImsCallSession session, ImsReasonInfo reasonInfo) {
- // no-op
- }
-
- @Override
- public void callSessionUpdateReceived(IImsCallSession session, ImsCallProfile profile) {
- // no-op
- }
-
- /**
- * Notifies the result of conference extension.
- */
- @Override
- public void callSessionConferenceExtended(IImsCallSession session, IImsCallSession newSession,
- ImsCallProfile profile) {
- // no-op
- }
-
- @Override
- public void callSessionConferenceExtendFailed(IImsCallSession session,
- ImsReasonInfo reasonInfo) {
- // no-op
- }
-
- @Override
- public void callSessionConferenceExtendReceived(IImsCallSession session,
- IImsCallSession newSession,
- ImsCallProfile profile) {
- // no-op
- }
-
- /**
- * Notifies the result of the participant invitation / removal to/from the
- * conference session.
- */
- @Override
- public void callSessionInviteParticipantsRequestDelivered(IImsCallSession session) {
- // no-op
- }
-
- @Override
- public void callSessionInviteParticipantsRequestFailed(IImsCallSession session,
- ImsReasonInfo reasonInfo) {
- // no-op
- }
-
- @Override
- public void callSessionRemoveParticipantsRequestDelivered(IImsCallSession session) {
- // no-op
- }
-
- @Override
- public void callSessionRemoveParticipantsRequestFailed(IImsCallSession session,
- ImsReasonInfo reasonInfo) {
- // no-op
- }
-
- /**
- * Notifies the changes of the conference info. the conference session.
- */
- @Override
- public void callSessionConferenceStateUpdated(IImsCallSession session,
- ImsConferenceState state) {
- // no-op
- }
-
- /**
- * Notifies the incoming USSD message.
- */
- @Override
- public void callSessionUssdMessageReceived(IImsCallSession session, int mode,
- String ussdMessage) {
- // no-op
- }
-
- /**
- * Notifies of handover information for this call
- */
- @Override
- public void callSessionHandover(IImsCallSession session, int srcAccessTech,
- int targetAccessTech,
- ImsReasonInfo reasonInfo) {
- // no-op
- }
-
- @Override
- public void callSessionHandoverFailed(IImsCallSession session, int srcAccessTech,
- int targetAccessTech,
- ImsReasonInfo reasonInfo) {
- // no-op
- }
-
- /**
- * Notifies the TTY mode change by remote party.
- *
- * @param mode one of the following: -
- * {@link com.android.internal.telephony.Phone#TTY_MODE_OFF} -
- * {@link com.android.internal.telephony.Phone#TTY_MODE_FULL} -
- * {@link com.android.internal.telephony.Phone#TTY_MODE_HCO} -
- * {@link com.android.internal.telephony.Phone#TTY_MODE_VCO}
- */
- @Override
- public void callSessionTtyModeReceived(IImsCallSession session, int mode) {
- // no-op
- }
-
- /**
- * Notifies of a change to the multiparty state for this
- * {@code ImsCallSession}.
- *
- * @param session The call session.
- * @param isMultiParty {@code true} if the session became multiparty,
- * {@code false} otherwise.
- */
- @Override
- public void callSessionMultipartyStateChanged(IImsCallSession session, boolean isMultiParty) {
- // no-op
- }
-
- /**
- * Notifies the supplementary service information for the current session.
- */
- @Override
- public void callSessionSuppServiceReceived(IImsCallSession session,
- ImsSuppServiceNotification suppSrvNotification) {
- // no-op
- }
-}
-
diff --git a/src/java/com/android/ims/ImsConfig.java b/src/java/com/android/ims/ImsConfig.java
deleted file mode 100644
index b572b18b..00000000
--- a/src/java/com/android/ims/ImsConfig.java
+++ /dev/null
@@ -1,695 +0,0 @@
-/*
- * Copyright (c) 2014 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.content.Context;
-import android.os.RemoteException;
-import android.telephony.Rlog;
-
-import com.android.ims.ImsConfigListener;
-import com.android.ims.ImsReasonInfo;
-import com.android.ims.internal.IImsConfig;
-
-/**
- * Provides APIs to get/set the IMS service feature/capability/parameters.
- * The config items include:
- * 1) Items provisioned by the operator.
- * 2) Items configured by user. Mainly service feature class.
- *
- * @hide
- */
-public class ImsConfig {
- private static final String TAG = "ImsConfig";
- private boolean DBG = true;
- private final IImsConfig miConfig;
- private Context mContext;
-
- /**
- * Broadcast action: the feature enable status was changed
- *
- * @hide
- */
- public static final String ACTION_IMS_FEATURE_CHANGED =
- "com.android.intent.action.IMS_FEATURE_CHANGED";
-
- /**
- * Broadcast action: the configuration was changed
- *
- * @hide
- */
- public static final String ACTION_IMS_CONFIG_CHANGED =
- "com.android.intent.action.IMS_CONFIG_CHANGED";
-
- /**
- * Extra parameter "item" of intent ACTION_IMS_FEATURE_CHANGED and ACTION_IMS_CONFIG_CHANGED.
- * It is the value of FeatureConstants or ConfigConstants.
- *
- * @hide
- */
- public static final String EXTRA_CHANGED_ITEM = "item";
-
- /**
- * Extra parameter "value" of intent ACTION_IMS_FEATURE_CHANGED and ACTION_IMS_CONFIG_CHANGED.
- * It is the new value of "item".
- *
- * @hide
- */
- public static final String EXTRA_NEW_VALUE = "value";
-
- /**
- * Defines IMS service/capability feature constants.
- */
- public static class FeatureConstants {
- public static final int FEATURE_TYPE_UNKNOWN = -1;
-
- /**
- * FEATURE_TYPE_VOLTE supports features defined in 3GPP and
- * GSMA IR.92 over LTE.
- */
- public static final int FEATURE_TYPE_VOICE_OVER_LTE = 0;
-
- /**
- * FEATURE_TYPE_LVC supports features defined in 3GPP and
- * GSMA IR.94 over LTE.
- */
- public static final int FEATURE_TYPE_VIDEO_OVER_LTE = 1;
-
- /**
- * FEATURE_TYPE_VOICE_OVER_WIFI supports features defined in 3GPP and
- * GSMA IR.92 over WiFi.
- */
- public static final int FEATURE_TYPE_VOICE_OVER_WIFI = 2;
-
- /**
- * FEATURE_TYPE_VIDEO_OVER_WIFI supports features defined in 3GPP and
- * GSMA IR.94 over WiFi.
- */
- public static final int FEATURE_TYPE_VIDEO_OVER_WIFI = 3;
-
- /**
- * FEATURE_TYPE_UT supports features defined in 3GPP and
- * GSMA IR.92 over LTE.
- */
- public static final int FEATURE_TYPE_UT_OVER_LTE = 4;
-
- /**
- * FEATURE_TYPE_UT_OVER_WIFI supports features defined in 3GPP and
- * GSMA IR.92 over WiFi.
- */
- public static final int FEATURE_TYPE_UT_OVER_WIFI = 5;
- }
-
- /**
- * Defines IMS service/capability parameters.
- */
- public static class ConfigConstants {
-
- // Define IMS config items
- public static final int CONFIG_START = 0;
-
- // Define operator provisioned config items
- public static final int PROVISIONED_CONFIG_START = CONFIG_START;
-
- /**
- * AMR CODEC Mode Value set, 0-7 in comma separated sequence.
- * Value is in String format.
- */
- public static final int VOCODER_AMRMODESET = CONFIG_START;
-
- /**
- * Wide Band AMR CODEC Mode Value set,0-7 in comma separated sequence.
- * Value is in String format.
- */
- public static final int VOCODER_AMRWBMODESET = 1;
-
- /**
- * SIP Session Timer value (seconds).
- * Value is in Integer format.
- */
- public static final int SIP_SESSION_TIMER = 2;
-
- /**
- * Minimum SIP Session Expiration Timer in (seconds).
- * Value is in Integer format.
- */
- public static final int MIN_SE = 3;
-
- /**
- * SIP_INVITE cancellation time out value (in milliseconds). Integer format.
- * Value is in Integer format.
- */
- public static final int CANCELLATION_TIMER = 4;
-
- /**
- * Delay time when an iRAT transition from eHRPD/HRPD/1xRTT to LTE.
- * Value is in Integer format.
- */
- public static final int TDELAY = 5;
-
- /**
- * Silent redial status of Enabled (True), or Disabled (False).
- * Value is in Integer format.
- */
- public static final int SILENT_REDIAL_ENABLE = 6;
-
- /**
- * SIP T1 timer value in milliseconds. See RFC 3261 for define.
- * Value is in Integer format.
- */
- public static final int SIP_T1_TIMER = 7;
-
- /**
- * SIP T2 timer value in milliseconds. See RFC 3261 for define.
- * Value is in Integer format.
- */
- public static final int SIP_T2_TIMER = 8;
-
- /**
- * SIP TF timer value in milliseconds. See RFC 3261 for define.
- * Value is in Integer format.
- */
- public static final int SIP_TF_TIMER = 9;
-
- /**
- * VoLTE status for VLT/s status of Enabled (1), or Disabled (0).
- * Value is in Integer format.
- */
- public static final int VLT_SETTING_ENABLED = 10;
-
- /**
- * VoLTE status for LVC/s status of Enabled (1), or Disabled (0).
- * Value is in Integer format.
- */
- public static final int LVC_SETTING_ENABLED = 11;
- /**
- * Domain Name for the device to populate the request URI for REGISTRATION.
- * Value is in String format.
- */
- public static final int DOMAIN_NAME = 12;
- /**
- * Device Outgoing SMS based on either 3GPP or 3GPP2 standards.
- * Value is in Integer format. 3GPP2(0), 3GPP(1)
- */
- public static final int SMS_FORMAT = 13;
- /**
- * Turns IMS ON/OFF on the device.
- * Value is in Integer format. ON (1), OFF(0).
- */
- public static final int SMS_OVER_IP = 14;
- /**
- * Requested expiration for Published Online availability.
- * Value is in Integer format.
- */
- public static final int PUBLISH_TIMER = 15;
- /**
- * Requested expiration for Published Offline availability.
- * Value is in Integer format.
- */
- public static final int PUBLISH_TIMER_EXTENDED = 16;
- /**
- *
- * Value is in Integer format.
- */
- public static final int CAPABILITY_DISCOVERY_ENABLED = 17;
- /**
- * Period of time the capability information of the contact is cached on handset.
- * Value is in Integer format.
- */
- public static final int CAPABILITIES_CACHE_EXPIRATION = 18;
- /**
- * Peiod of time the availability information of a contact is cached on device.
- * Value is in Integer format.
- */
- public static final int AVAILABILITY_CACHE_EXPIRATION = 19;
- /**
- * Interval between successive capabilities polling.
- * Value is in Integer format.
- */
- public static final int CAPABILITIES_POLL_INTERVAL = 20;
- /**
- * Minimum time between two published messages from the device.
- * Value is in Integer format.
- */
- public static final int SOURCE_THROTTLE_PUBLISH = 21;
- /**
- * The Maximum number of MDNs contained in one Request Contained List.
- * Value is in Integer format.
- */
- public static final int MAX_NUMENTRIES_IN_RCL = 22;
- /**
- * Expiration timer for subscription of a Request Contained List, used in capability polling.
- * Value is in Integer format.
- */
- public static final int CAPAB_POLL_LIST_SUB_EXP = 23;
- /**
- * Applies compression to LIST Subscription.
- * Value is in Integer format. Enable (1), Disable(0).
- */
- public static final int GZIP_FLAG = 24;
- /**
- * VOLTE Status for EAB/s status of Enabled (1), or Disabled (0).
- * Value is in Integer format.
- */
- public static final int EAB_SETTING_ENABLED = 25;
- /**
- * Wi-Fi calling roaming status.
- * Value is in Integer format. ON (1), OFF(0).
- */
- public static final int VOICE_OVER_WIFI_ROAMING = 26;
- /**
- * Wi-Fi calling modem - WfcModeFeatureValueConstants.
- * Value is in Integer format.
- */
- public static final int VOICE_OVER_WIFI_MODE = 27;
- /**
- * VOLTE Status for voice over wifi status of Enabled (1), or Disabled (0).
- * Value is in Integer format.
- */
- public static final int VOICE_OVER_WIFI_SETTING_ENABLED = 28;
- /**
- * Mobile data enabled.
- * Value is in Integer format. On (1), OFF(0).
- */
- public static final int MOBILE_DATA_ENABLED = 29;
- /**
- * VoLTE user opted in status.
- * Value is in Integer format. Opted-in (1) Opted-out (0).
- */
- public static final int VOLTE_USER_OPT_IN_STATUS = 30;
- /**
- * Proxy for Call Session Control Function(P-CSCF) address for Local-BreakOut(LBO).
- * Value is in String format.
- */
- public static final int LBO_PCSCF_ADDRESS = 31;
- /**
- * Keep Alive Enabled for SIP.
- * Value is in Integer format. On(1), OFF(0).
- */
- public static final int KEEP_ALIVE_ENABLED = 32;
- /**
- * Registration retry Base Time value in seconds.
- * Value is in Integer format.
- */
- public static final int REGISTRATION_RETRY_BASE_TIME_SEC = 33;
- /**
- * Registration retry Max Time value in seconds.
- * Value is in Integer format.
- */
- public static final int REGISTRATION_RETRY_MAX_TIME_SEC = 34;
- /**
- * Smallest RTP port for speech codec.
- * Value is in integer format.
- */
- public static final int SPEECH_START_PORT = 35;
- /**
- * Largest RTP port for speech code.
- * Value is in Integer format.
- */
- public static final int SPEECH_END_PORT = 36;
- /**
- * SIP Timer A's value in milliseconds. Timer A is the INVITE request
- * retransmit interval, for UDP only.
- * Value is in Integer format.
- */
- public static final int SIP_INVITE_REQ_RETX_INTERVAL_MSEC = 37;
- /**
- * SIP Timer B's value in milliseconds. Timer B is the wait time for
- * INVITE message to be acknowledged.
- * Value is in Integer format.
- */
- public static final int SIP_INVITE_RSP_WAIT_TIME_MSEC = 38;
- /**
- * SIP Timer D's value in milliseconds. Timer D is the wait time for
- * response retransmits of the invite client transactions.
- * Value is in Integer format.
- */
- public static final int SIP_INVITE_RSP_RETX_WAIT_TIME_MSEC = 39;
- /**
- * SIP Timer E's value in milliseconds. Timer E is the value Non-INVITE
- * request retransmit interval, for UDP only.
- * Value is in Integer format.
- */
- public static final int SIP_NON_INVITE_REQ_RETX_INTERVAL_MSEC = 40;
- /**
- * SIP Timer F's value in milliseconds. Timer F is the Non-INVITE transaction
- * timeout timer.
- * Value is in Integer format.
- */
- public static final int SIP_NON_INVITE_TXN_TIMEOUT_TIMER_MSEC = 41;
- /**
- * SIP Timer G's value in milliseconds. Timer G is the value of INVITE response
- * retransmit interval.
- * Value is in Integer format.
- */
- public static final int SIP_INVITE_RSP_RETX_INTERVAL_MSEC = 42;
- /**
- * SIP Timer H's value in milliseconds. Timer H is the value of wait time for
- * ACK receipt.
- * Value is in Integer format.
- */
- public static final int SIP_ACK_RECEIPT_WAIT_TIME_MSEC = 43;
- /**
- * SIP Timer I's value in milliseconds. Timer I is the value of wait time for
- * ACK retransmits.
- * Value is in Integer format.
- */
- public static final int SIP_ACK_RETX_WAIT_TIME_MSEC = 44;
- /**
- * SIP Timer J's value in milliseconds. Timer J is the value of wait time for
- * non-invite request retransmission.
- * Value is in Integer format.
- */
- public static final int SIP_NON_INVITE_REQ_RETX_WAIT_TIME_MSEC = 45;
- /**
- * SIP Timer K's value in milliseconds. Timer K is the value of wait time for
- * non-invite response retransmits.
- * Value is in Integer format.
- */
- public static final int SIP_NON_INVITE_RSP_RETX_WAIT_TIME_MSEC = 46;
- /**
- * AMR WB octet aligned dynamic payload type.
- * Value is in Integer format.
- */
- public static final int AMR_WB_OCTET_ALIGNED_PT = 47;
- /**
- * AMR WB bandwidth efficient payload type.
- * Value is in Integer format.
- */
- public static final int AMR_WB_BANDWIDTH_EFFICIENT_PT = 48;
- /**
- * AMR octet aligned dynamic payload type.
- * Value is in Integer format.
- */
- public static final int AMR_OCTET_ALIGNED_PT = 49;
- /**
- * AMR bandwidth efficient payload type.
- * Value is in Integer format.
- */
- public static final int AMR_BANDWIDTH_EFFICIENT_PT = 50;
- /**
- * DTMF WB payload type.
- * Value is in Integer format.
- */
- public static final int DTMF_WB_PT = 51;
- /**
- * DTMF NB payload type.
- * Value is in Integer format.
- */
- public static final int DTMF_NB_PT = 52;
- /**
- * AMR Default encoding mode.
- * Value is in Integer format.
- */
- public static final int AMR_DEFAULT_MODE = 53;
- /**
- * SMS Public Service Identity.
- * Value is in String format.
- */
- public static final int SMS_PSI = 54;
- /**
- * Video Quality - VideoQualityFeatureValuesConstants.
- * Value is in Integer format.
- */
- public static final int VIDEO_QUALITY = 55;
- /**
- * LTE threshold.
- * Handover from LTE to WiFi if LTE < THLTE1 and WiFi >= VOWT_A.
- */
- public static final int TH_LTE1 = 56;
- /**
- * LTE threshold.
- * Handover from WiFi to LTE if LTE >= THLTE3 or (WiFi < VOWT_B and LTE >= THLTE2).
- */
- public static final int TH_LTE2 = 57;
- /**
- * LTE threshold.
- * Handover from WiFi to LTE if LTE >= THLTE3 or (WiFi < VOWT_B and LTE >= THLTE2).
- */
- public static final int TH_LTE3 = 58;
- /**
- * 1x threshold.
- * Handover from 1x to WiFi if 1x < TH1x
- */
- public static final int TH_1x = 59;
- /**
- * WiFi threshold.
- * Handover from LTE to WiFi if LTE < THLTE1 and WiFi >= VOWT_A.
- */
- public static final int VOWT_A = 60;
- /**
- * WiFi threshold.
- * Handover from WiFi to LTE if LTE >= THLTE3 or (WiFi < VOWT_B and LTE >= THLTE2).
- */
- public static final int VOWT_B = 61;
- /**
- * LTE ePDG timer.
- * Device shall not handover back to LTE until the T_ePDG_LTE timer expires.
- */
- public static final int T_EPDG_LTE = 62;
- /**
- * WiFi ePDG timer.
- * Device shall not handover back to WiFi until the T_ePDG_WiFi timer expires.
- */
- public static final int T_EPDG_WIFI = 63;
- /**
- * 1x ePDG timer.
- * Device shall not re-register on 1x until the T_ePDG_1x timer expires.
- */
- public static final int T_EPDG_1X = 64;
- /**
- * MultiEndpoint status: Enabled (1), or Disabled (0).
- * Value is in Integer format.
- */
- public static final int VICE_SETTING_ENABLED = 65;
-
- // Expand the operator config items as needed here, need to change
- // PROVISIONED_CONFIG_END after that.
- public static final int PROVISIONED_CONFIG_END = VICE_SETTING_ENABLED;
-
- // Expand the operator config items as needed here.
- }
-
- /**
- * Defines IMS set operation status.
- */
- public static class OperationStatusConstants {
- public static final int UNKNOWN = -1;
- public static final int SUCCESS = 0;
- public static final int FAILED = 1;
- public static final int UNSUPPORTED_CAUSE_NONE = 2;
- public static final int UNSUPPORTED_CAUSE_RAT = 3;
- public static final int UNSUPPORTED_CAUSE_DISABLED = 4;
- }
-
- /**
- * Defines IMS get operation values.
- */
- public static class OperationValuesConstants {
- /**
- * Values related to Video Quality
- */
- public static final int VIDEO_QUALITY_UNKNOWN = -1;
- public static final int VIDEO_QUALITY_LOW = 0;
- public static final int VIDEO_QUALITY_HIGH = 1;
- }
-
- /**
- * Defines IMS video quality feature value.
- */
- public static class VideoQualityFeatureValuesConstants {
- public static final int LOW = 0;
- public static final int HIGH = 1;
- }
-
- /**
- * Defines IMS feature value.
- */
- public static class FeatureValueConstants {
- public static final int OFF = 0;
- public static final int ON = 1;
- }
-
- /**
- * Defines IMS feature value.
- */
- public static class WfcModeFeatureValueConstants {
- public static final int WIFI_ONLY = 0;
- public static final int CELLULAR_PREFERRED = 1;
- public static final int WIFI_PREFERRED = 2;
- }
-
- public ImsConfig(IImsConfig iconfig, Context context) {
- if (DBG) Rlog.d(TAG, "ImsConfig creates");
- miConfig = iconfig;
- mContext = context;
- }
-
- /**
- * Gets the provisioned value for IMS service/capabilities parameters used by IMS stack.
- * This function should not be called from the mainthread as it could block the
- * mainthread.
- *
- * @param item, as defined in com.android.ims.ImsConfig#ConfigConstants.
- * @return the value in Integer format.
- *
- * @throws ImsException if calling the IMS service results in an error.
- */
- public int getProvisionedValue(int item) throws ImsException {
- int ret = 0;
- try {
- ret = miConfig.getProvisionedValue(item);
- } catch (RemoteException e) {
- throw new ImsException("getValue()", e,
- ImsReasonInfo.CODE_LOCAL_SERVICE_UNAVAILABLE);
- }
- if (DBG) Rlog.d(TAG, "getProvisionedValue(): item = " + item + ", ret =" + ret);
-
- return ret;
- }
-
- /**
- * Gets the provisioned value for IMS service/capabilities parameters used by IMS stack.
- * This function should not be called from the mainthread as it could block the
- * mainthread.
- *
- * @param item, as defined in com.android.ims.ImsConfig#ConfigConstants.
- * @return value in String format.
- *
- * @throws ImsException if calling the IMS service results in an error.
- */
- public String getProvisionedStringValue(int item) throws ImsException {
- String ret = "Unknown";
- try {
- ret = miConfig.getProvisionedStringValue(item);
- } catch (RemoteException e) {
- throw new ImsException("getProvisionedStringValue()", e,
- ImsReasonInfo.CODE_LOCAL_SERVICE_UNAVAILABLE);
- }
- if (DBG) Rlog.d(TAG, "getProvisionedStringValue(): item = " + item + ", ret =" + ret);
-
- return ret;
- }
-
- /**
- * Sets the value for IMS service/capabilities parameters by
- * the operator device management entity.
- * This function should not be called from main thread as it could block
- * mainthread.
- *
- * @param item, as defined in com.android.ims.ImsConfig#ConfigConstants.
- * @param value in Integer format.
- * @return as defined in com.android.ims.ImsConfig#OperationStatusConstants
- *
- * @throws ImsException if calling the IMS service results in an error.
- */
- public int setProvisionedValue(int item, int value)
- throws ImsException {
- int ret = ImsConfig.OperationStatusConstants.UNKNOWN;
- if (DBG) {
- Rlog.d(TAG, "setProvisionedValue(): item = " + item +
- "value = " + value);
- }
- try {
- ret = miConfig.setProvisionedValue(item, value);
- } catch (RemoteException e) {
- throw new ImsException("setProvisionedValue()", e,
- ImsReasonInfo.CODE_LOCAL_SERVICE_UNAVAILABLE);
- }
- if (DBG) {
- Rlog.d(TAG, "setProvisionedValue(): item = " + item +
- " value = " + value + " ret = " + ret);
- }
- return ret;
- }
-
- /**
- * Sets the value for IMS service/capabilities parameters by
- * the operator device management entity.
- * This function should not be called from main thread as it could block
- * mainthread.
- *
- * @param item, as defined in com.android.ims.ImsConfig#ConfigConstants.
- * @param value in String format.
- * @return as defined in com.android.ims.ImsConfig#OperationStatusConstants
- *
- * @throws ImsException if calling the IMS service results in an error.
- */
- public int setProvisionedStringValue(int item, String value)
- throws ImsException {
- int ret = ImsConfig.OperationStatusConstants.UNKNOWN;
- try {
- ret = miConfig.setProvisionedStringValue(item, value);
- } catch (RemoteException e) {
- throw new ImsException("setProvisionedStringValue()", e,
- ImsReasonInfo.CODE_LOCAL_SERVICE_UNAVAILABLE);
- }
- if (DBG) {
- Rlog.d(TAG, "setProvisionedStringValue(): item = " + item +
- ", value =" + value);
- }
- return ret;
- }
-
- /**
- * Gets the value for IMS feature item for specified network type.
- *
- * @param feature, defined as in FeatureConstants.
- * @param network, defined as in android.telephony.TelephonyManager#NETWORK_TYPE_XXX.
- * @param listener, provided to be notified for the feature on/off status.
- * @return void
- *
- * @throws ImsException if calling the IMS service results in an error.
- */
- public void getFeatureValue(int feature, int network,
- ImsConfigListener listener) throws ImsException {
- if (DBG) {
- Rlog.d(TAG, "getFeatureValue: feature = " + feature + ", network =" + network +
- ", listener =" + listener);
- }
- try {
- miConfig.getFeatureValue(feature, network, listener);
- } catch (RemoteException e) {
- throw new ImsException("getFeatureValue()", e,
- ImsReasonInfo.CODE_LOCAL_SERVICE_UNAVAILABLE);
- }
- }
-
- /**
- * Sets the value for IMS feature item for specified network type.
- *
- * @param feature, as defined in FeatureConstants.
- * @param network, as defined in android.telephony.TelephonyManager#NETWORK_TYPE_XXX.
- * @param value, as defined in FeatureValueConstants.
- * @param listener, provided if caller needs to be notified for set result.
- * @return void
- *
- * @throws ImsException if calling the IMS service results in an error.
- */
- public void setFeatureValue(int feature, int network, int value,
- ImsConfigListener listener) throws ImsException {
- if (DBG) {
- Rlog.d(TAG, "setFeatureValue: feature = " + feature + ", network =" + network +
- ", value =" + value + ", listener =" + listener);
- }
- try {
- miConfig.setFeatureValue(feature, network, value, listener);
- } catch (RemoteException e) {
- throw new ImsException("setFeatureValue()", e,
- ImsReasonInfo.CODE_LOCAL_SERVICE_UNAVAILABLE);
- }
- }
-}
diff --git a/src/java/com/android/ims/ImsException.java b/src/java/com/android/ims/ImsException.java
deleted file mode 100644
index 74b20f47..00000000
--- a/src/java/com/android/ims/ImsException.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * 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;
-
-/**
- * This class defines a general IMS-related exception.
- *
- * @hide
- */
-public class ImsException extends Exception {
-
- /**
- * Refer to CODE_LOCAL_* in {@link ImsReasonInfo}
- */
- private int mCode;
-
- public ImsException() {
- }
-
- public ImsException(String message, int code) {
- super(message + ", code = " + code);
- mCode = code;
- }
-
- public ImsException(String message, Throwable cause, int code) {
- super(message, cause);
- mCode = code;
- }
-
- /**
- * Gets the detailed exception code when ImsException is throwed
- *
- * @return the exception code in {@link ImsReasonInfo}
- */
- public int getCode() {
- return mCode;
- }
-}
diff --git a/src/java/com/android/ims/ImsServiceClass.java b/src/java/com/android/ims/ImsServiceClass.java
index 478dcb72..8677b9d9 100644
--- a/src/java/com/android/ims/ImsServiceClass.java
+++ b/src/java/com/android/ims/ImsServiceClass.java
@@ -19,6 +19,7 @@ package com.android.ims;
/**
* This class defines an identifier for each IMS service category.
*
+ * @deprecated Use {@link android.telephony.ims.feature.ImsFeature} definitions instead.
* @hide
*/
public class ImsServiceClass {
diff --git a/src/java/com/android/ims/ImsUtInterface.java b/src/java/com/android/ims/ImsUtInterface.java
deleted file mode 100644
index 5984e789..00000000
--- a/src/java/com/android/ims/ImsUtInterface.java
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- * 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.Message;
-
-/**
- * Provides APIs for the supplementary service settings using IMS (Ut interface).
- * It is created from 3GPP TS 24.623 (XCAP(XML Configuration Access Protocol)
- * over the Ut interface for manipulating supplementary services).
- *
- * @hide
- */
-public interface ImsUtInterface {
- /**
- * Actions
- * @hide
- */
- public static final int ACTION_DEACTIVATION = 0;
- public static final int ACTION_ACTIVATION = 1;
- public static final int ACTION_REGISTRATION = 3;
- public static final int ACTION_ERASURE = 4;
- public static final int ACTION_INTERROGATION = 5;
-
- /**
- * OIR (Originating Identification Restriction, 3GPP TS 24.607)
- * OIP (Originating Identification Presentation, 3GPP TS 24.607)
- * TIR (Terminating Identification Restriction, 3GPP TS 24.608)
- * TIP (Terminating Identification Presentation, 3GPP TS 24.608)
- */
- 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;
-
- /**
- * CW (Communication Waiting, 3GPP TS 24.615)
- */
-
- /**
- * CDIV (Communication Diversion, 3GPP TS 24.604)
- * actions: target, no reply timer
- */
- public static final int CDIV_CF_UNCONDITIONAL = 0;
- public static final int CDIV_CF_BUSY = 1;
- public static final int CDIV_CF_NO_REPLY = 2;
- public static final int CDIV_CF_NOT_REACHABLE = 3;
- // For CS service code: 002
- public static final int CDIV_CF_ALL = 4;
- // For CS service code: 004
- public static final int CDIV_CF_ALL_CONDITIONAL = 5;
- // It's only supported in the IMS service (CS does not define it).
- // IR.92 recommends that an UE activates both the CFNRc and the CFNL
- // (CDIV using condition not-registered) to the same target.
- public static final int CDIV_CF_NOT_LOGGED_IN = 6;
-
- /**
- * CB (Communication Barring, 3GPP TS 24.611)
- */
- // Barring of All Incoming Calls
- public static final int CB_BAIC = 1;
- // Barring of All Outgoing Calls
- public static final int CB_BAOC = 2;
- // Barring of Outgoing International Calls
- public static final int CB_BOIC = 3;
- // Barring of Outgoing International Calls - excluding Home Country
- public static final int CB_BOIC_EXHC = 4;
- // Barring of Incoming Calls - when roaming
- public static final int CB_BIC_WR = 5;
- // Barring of Anonymous Communication Rejection (ACR) - a particular case of ICB service
- public static final int CB_BIC_ACR = 6;
- // Barring of All Calls
- public static final int CB_BA_ALL = 7;
- // Barring of Outgoing Services (Service Code 333 - 3GPP TS 22.030 Table B-1)
- public static final int CB_BA_MO = 8;
- // Barring of Incoming Services (Service Code 353 - 3GPP TS 22.030 Table B-1)
- public static final int CB_BA_MT = 9;
- // Barring of Specific Incoming calls
- public static final int CB_BS_MT = 10;
-
- /**
- * Invalid result value.
- */
- public static final int INVALID = (-1);
-
-
-
- /**
- * Operations for the supplementary service configuration
- */
-
- /**
- * Retrieves the configuration of the call barring.
- * The return value of ((AsyncResult)result.obj) is an array of {@link ImsSsInfo}.
- */
- public void queryCallBarring(int cbType, Message result);
-
- /**
- * Retrieves the configuration of the call forward.
- * The return value of ((AsyncResult)result.obj) is an array of {@link ImsCallForwardInfo}.
- */
- public void queryCallForward(int condition, String number, Message result);
-
- /**
- * Retrieves the configuration of the call waiting.
- * The return value of ((AsyncResult)result.obj) is an array of {@link ImsSsInfo}.
- */
- public void queryCallWaiting(Message result);
-
- /**
- * Retrieves the default CLIR setting.
- */
- public void queryCLIR(Message result);
-
- /**
- * Retrieves the CLIP call setting.
- */
- public void queryCLIP(Message result);
-
- /**
- * Retrieves the COLR call setting.
- */
- public void queryCOLR(Message result);
-
- /**
- * Retrieves the COLP call setting.
- */
- public void queryCOLP(Message result);
-
- /**
- * Modifies the configuration of the call barring.
- */
- public void updateCallBarring(int cbType, int action,
- Message result, String[] barrList);
-
- /**
- * Modifies the configuration of the call forward.
- */
- public void updateCallForward(int action, int condition, String number,
- int serviceClass, int timeSeconds, Message result);
-
- /**
- * Modifies the configuration of the call waiting.
- */
- public void updateCallWaiting(boolean enable, int serviceClass, Message result);
-
- /**
- * Updates the configuration of the CLIR supplementary service.
- */
- public void updateCLIR(int clirMode, Message result);
-
- /**
- * Updates the configuration of the CLIP supplementary service.
- */
- public void updateCLIP(boolean enable, Message result);
-
- /**
- * Updates the configuration of the COLR supplementary service.
- */
- public void updateCOLR(int presentation, Message result);
-
- /**
- * Updates the configuration of the COLP supplementary service.
- */
- public void updateCOLP(boolean enable, Message result);
-}
diff --git a/src/java/com/android/ims/internal/ImsCallSession.java b/src/java/com/android/ims/internal/ImsCallSession.java
deleted file mode 100644
index d8614e3c..00000000
--- a/src/java/com/android/ims/internal/ImsCallSession.java
+++ /dev/null
@@ -1,1288 +0,0 @@
-/*
- * 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.Message;
-import android.os.RemoteException;
-import android.telecom.Connection;
-
-import java.util.Objects;
-import android.util.Log;
-import com.android.ims.ImsCallProfile;
-import com.android.ims.ImsConferenceState;
-import com.android.ims.ImsReasonInfo;
-import com.android.ims.ImsStreamMediaProfile;
-import com.android.ims.ImsSuppServiceNotification;
-
-/**
- * Provides the call initiation/termination, and media exchange between two IMS endpoints.
- * It directly communicates with IMS service which implements the IMS protocol behavior.
- *
- * @hide
- */
-public class ImsCallSession {
- private static final String TAG = "ImsCallSession";
-
- /**
- * Defines IMS call session state.
- */
- public static class State {
- public static final int IDLE = 0;
- public static final int INITIATED = 1;
- public static final int NEGOTIATING = 2;
- public static final int ESTABLISHING = 3;
- public static final int ESTABLISHED = 4;
-
- public static final int RENEGOTIATING = 5;
- public static final int REESTABLISHING = 6;
-
- public static final int TERMINATING = 7;
- public static final int TERMINATED = 8;
-
- public static final int INVALID = (-1);
-
- /**
- * Converts the state to string.
- */
- public static String toString(int state) {
- switch (state) {
- case IDLE:
- return "IDLE";
- case INITIATED:
- return "INITIATED";
- case NEGOTIATING:
- return "NEGOTIATING";
- case ESTABLISHING:
- return "ESTABLISHING";
- case ESTABLISHED:
- return "ESTABLISHED";
- case RENEGOTIATING:
- return "RENEGOTIATING";
- case REESTABLISHING:
- return "REESTABLISHING";
- case TERMINATING:
- return "TERMINATING";
- case TERMINATED:
- return "TERMINATED";
- default:
- return "UNKNOWN";
- }
- }
-
- private State() {
- }
- }
-
- /**
- * Listener for events relating to an IMS session, such as when a session is being
- * recieved ("on ringing") or a call is outgoing ("on calling").
- * <p>Many of these events are also received by {@link ImsCall.Listener}.</p>
- */
- public static class Listener {
- /**
- * Called when a request is sent out to initiate a new session
- * and 1xx response is received from the network.
- *
- * @param session the session object that carries out the IMS session
- */
- public void callSessionProgressing(ImsCallSession session,
- ImsStreamMediaProfile profile) {
- // no-op
- }
-
- /**
- * Called when the session is established.
- *
- * @param session the session object that carries out the IMS session
- */
- public void callSessionStarted(ImsCallSession session,
- ImsCallProfile profile) {
- // no-op
- }
-
- /**
- * Called when the session establishment is failed.
- *
- * @param session the session object that carries out the IMS session
- * @param reasonInfo detailed reason of the session establishment failure
- */
- public void callSessionStartFailed(ImsCallSession session,
- ImsReasonInfo reasonInfo) {
- }
-
- /**
- * Called when the session is terminated.
- *
- * @param session the session object that carries out the IMS session
- * @param reasonInfo detailed reason of the session termination
- */
- public void callSessionTerminated(ImsCallSession session,
- ImsReasonInfo reasonInfo) {
- }
-
- /**
- * Called when the session is in hold.
- *
- * @param session the session object that carries out the IMS session
- */
- public void callSessionHeld(ImsCallSession session,
- ImsCallProfile profile) {
- }
-
- /**
- * Called when the session hold is failed.
- *
- * @param session the session object that carries out the IMS session
- * @param reasonInfo detailed reason of the session hold failure
- */
- public void callSessionHoldFailed(ImsCallSession session,
- ImsReasonInfo reasonInfo) {
- }
-
- /**
- * Called when the session hold is received from the remote user.
- *
- * @param session the session object that carries out the IMS session
- */
- public void callSessionHoldReceived(ImsCallSession session,
- ImsCallProfile profile) {
- }
-
- /**
- * Called when the session resume is done.
- *
- * @param session the session object that carries out the IMS session
- */
- public void callSessionResumed(ImsCallSession session,
- ImsCallProfile profile) {
- }
-
- /**
- * Called when the session resume is failed.
- *
- * @param session the session object that carries out the IMS session
- * @param reasonInfo detailed reason of the session resume failure
- */
- public void callSessionResumeFailed(ImsCallSession session,
- ImsReasonInfo reasonInfo) {
- }
-
- /**
- * Called when the session resume is received from the remote user.
- *
- * @param session the session object that carries out the IMS session
- */
- public void callSessionResumeReceived(ImsCallSession session,
- ImsCallProfile profile) {
- }
-
- /**
- * Called when the session merge has been started. At this point, the {@code newSession}
- * represents the session which has been initiated to the IMS conference server for the
- * new merged conference.
- *
- * @param session the session object that carries out the IMS session
- * @param newSession the session object that is merged with an active & hold session
- */
- public void callSessionMergeStarted(ImsCallSession session,
- ImsCallSession newSession, ImsCallProfile profile) {
- }
-
- /**
- * Called when the session merge is successful and the merged session is active.
- *
- * @param session the session object that carries out the IMS session
- */
- public void callSessionMergeComplete(ImsCallSession session) {
- }
-
- /**
- * Called when the session merge has failed.
- *
- * @param session the session object that carries out the IMS session
- * @param reasonInfo detailed reason of the call merge failure
- */
- public void callSessionMergeFailed(ImsCallSession session,
- ImsReasonInfo reasonInfo) {
- }
-
- /**
- * Called when the session is updated (except for hold/unhold).
- *
- * @param call the call object that carries out the IMS call
- */
- public void callSessionUpdated(ImsCallSession session,
- ImsCallProfile profile) {
- }
-
- /**
- * Called when the session update is failed.
- *
- * @param session the session object that carries out the IMS session
- * @param reasonInfo detailed reason of the session update failure
- */
- public void callSessionUpdateFailed(ImsCallSession session,
- ImsReasonInfo reasonInfo) {
- }
-
- /**
- * Called when the session update is received from the remote user.
- *
- * @param session the session object that carries out the IMS session
- */
- public void callSessionUpdateReceived(ImsCallSession session,
- ImsCallProfile profile) {
- // no-op
- }
-
- /**
- * Called when the session is extended to the conference session.
- *
- * @param session the session object that carries out the IMS session
- * @param newSession the session object that is extended to the conference
- * from the active session
- */
- public void callSessionConferenceExtended(ImsCallSession session,
- ImsCallSession newSession, ImsCallProfile profile) {
- }
-
- /**
- * Called when the conference extension is failed.
- *
- * @param session the session object that carries out the IMS session
- * @param reasonInfo detailed reason of the conference extension failure
- */
- public void callSessionConferenceExtendFailed(ImsCallSession session,
- ImsReasonInfo reasonInfo) {
- }
-
- /**
- * Called when the conference extension is received from the remote user.
- *
- * @param session the session object that carries out the IMS session
- */
- public void callSessionConferenceExtendReceived(ImsCallSession session,
- ImsCallSession newSession, ImsCallProfile profile) {
- // no-op
- }
-
- /**
- * Called when the invitation request of the participants is delivered to the conference
- * server.
- *
- * @param session the session object that carries out the IMS session
- */
- public void callSessionInviteParticipantsRequestDelivered(ImsCallSession session) {
- // no-op
- }
-
- /**
- * Called when the invitation request of the participants is failed.
- *
- * @param session the session object that carries out the IMS session
- * @param reasonInfo detailed reason of the conference invitation failure
- */
- public void callSessionInviteParticipantsRequestFailed(ImsCallSession session,
- ImsReasonInfo reasonInfo) {
- // no-op
- }
-
- /**
- * Called when the removal request of the participants is delivered to the conference
- * server.
- *
- * @param session the session object that carries out the IMS session
- */
- public void callSessionRemoveParticipantsRequestDelivered(ImsCallSession session) {
- // no-op
- }
-
- /**
- * Called when the removal request of the participants is failed.
- *
- * @param session the session object that carries out the IMS session
- * @param reasonInfo detailed reason of the conference removal failure
- */
- public void callSessionRemoveParticipantsRequestFailed(ImsCallSession session,
- ImsReasonInfo reasonInfo) {
- // no-op
- }
-
- /**
- * Called when the conference state is updated.
- *
- * @param session the session object that carries out the IMS session
- */
- public void callSessionConferenceStateUpdated(ImsCallSession session,
- ImsConferenceState state) {
- // no-op
- }
-
- /**
- * Called when the USSD message is received from the network.
- *
- * @param mode mode of the USSD message (REQUEST / NOTIFY)
- * @param ussdMessage USSD message
- */
- public void callSessionUssdMessageReceived(ImsCallSession session,
- int mode, String ussdMessage) {
- // no-op
- }
-
- /**
- * Called when session access technology changes
- *
- * @param session IMS session object
- * @param srcAccessTech original access technology
- * @param targetAccessTech new access technology
- * @param reasonInfo
- */
- public void callSessionHandover(ImsCallSession session,
- int srcAccessTech, int targetAccessTech,
- ImsReasonInfo reasonInfo) {
- // no-op
- }
-
- /**
- * Called when session access technology change fails
- *
- * @param session IMS session object
- * @param srcAccessTech original access technology
- * @param targetAccessTech new access technology
- * @param reasonInfo handover failure reason
- */
- public void callSessionHandoverFailed(ImsCallSession session,
- int srcAccessTech, int targetAccessTech,
- ImsReasonInfo reasonInfo) {
- // no-op
- }
-
- /**
- * Called when TTY mode of remote party changed
- *
- * @param session IMS session object
- * @param mode TTY mode of remote party
- */
- public void callSessionTtyModeReceived(ImsCallSession session,
- int mode) {
- // no-op
- }
-
- /**
- * Notifies of a change to the multiparty state for this {@code ImsCallSession}.
- *
- * @param session The call session.
- * @param isMultiParty {@code true} if the session became multiparty, {@code false}
- * otherwise.
- */
- public void callSessionMultipartyStateChanged(ImsCallSession session,
- boolean isMultiParty) {
- // no-op
- }
-
- /**
- * Called when the session supplementary service is received
- *
- * @param session the session object that carries out the IMS session
- */
- public void callSessionSuppServiceReceived(ImsCallSession session,
- ImsSuppServiceNotification suppServiceInfo) {
- }
- }
-
- private final IImsCallSession miSession;
- private boolean mClosed = false;
- private Listener mListener;
-
- public ImsCallSession(IImsCallSession iSession) {
- miSession = iSession;
-
- if (iSession != null) {
- try {
- iSession.setListener(new IImsCallSessionListenerProxy());
- } catch (RemoteException e) {
- }
- } else {
- mClosed = true;
- }
- }
-
- public ImsCallSession(IImsCallSession iSession, Listener listener) {
- this(iSession);
- setListener(listener);
- }
-
- /**
- * Closes this object. This object is not usable after being closed.
- */
- public synchronized void close() {
- if (mClosed) {
- return;
- }
-
- try {
- miSession.close();
- mClosed = true;
- } catch (RemoteException e) {
- }
- }
-
- /**
- * Gets the call ID of the session.
- *
- * @return the call ID
- */
- public String getCallId() {
- if (mClosed) {
- return null;
- }
-
- try {
- return miSession.getCallId();
- } catch (RemoteException e) {
- return null;
- }
- }
-
- /**
- * Gets the call profile that this session is associated with
- *
- * @return the call profile that this session is associated with
- */
- public ImsCallProfile getCallProfile() {
- if (mClosed) {
- return null;
- }
-
- try {
- return miSession.getCallProfile();
- } catch (RemoteException e) {
- return null;
- }
- }
-
- /**
- * Gets the local call profile that this session is associated with
- *
- * @return the local call profile that this session is associated with
- */
- public ImsCallProfile getLocalCallProfile() {
- if (mClosed) {
- return null;
- }
-
- try {
- return miSession.getLocalCallProfile();
- } catch (RemoteException e) {
- return null;
- }
- }
-
- /**
- * Gets the remote call profile that this session is associated with
- *
- * @return the remote call profile that this session is associated with
- */
- public ImsCallProfile getRemoteCallProfile() {
- if (mClosed) {
- return null;
- }
-
- try {
- return miSession.getRemoteCallProfile();
- } catch (RemoteException e) {
- return null;
- }
- }
-
- /**
- * Gets the video call provider for the session.
- *
- * @return The video call provider.
- */
- public IImsVideoCallProvider getVideoCallProvider() {
- if (mClosed) {
- return null;
- }
-
- try {
- return miSession.getVideoCallProvider();
- } catch (RemoteException e) {
- return null;
- }
- }
-
- /**
- * Gets the value associated with the specified property of this session.
- *
- * @return the string value associated with the specified property
- */
- public String getProperty(String name) {
- if (mClosed) {
- return null;
- }
-
- try {
- return miSession.getProperty(name);
- } catch (RemoteException e) {
- return null;
- }
- }
-
- /**
- * Gets the session state.
- * The value returned must be one of the states in {@link State}.
- *
- * @return the session state
- */
- public int getState() {
- if (mClosed) {
- return State.INVALID;
- }
-
- try {
- return miSession.getState();
- } catch (RemoteException e) {
- return State.INVALID;
- }
- }
-
- /**
- * Determines if the {@link ImsCallSession} is currently alive (e.g. not in a terminated or
- * closed state).
- *
- * @return {@code True} if the session is alive.
- */
- public boolean isAlive() {
- if (mClosed) {
- return false;
- }
-
- int state = getState();
- switch (state) {
- case State.IDLE:
- case State.INITIATED:
- case State.NEGOTIATING:
- case State.ESTABLISHING:
- case State.ESTABLISHED:
- case State.RENEGOTIATING:
- case State.REESTABLISHING:
- return true;
- default:
- return false;
- }
- }
-
- /**
- * Gets the native IMS call session.
- * @hide
- */
- public IImsCallSession getSession() {
- return miSession;
- }
-
- /**
- * Checks if the session is in call.
- *
- * @return true if the session is in call
- */
- public boolean isInCall() {
- if (mClosed) {
- return false;
- }
-
- try {
- return miSession.isInCall();
- } catch (RemoteException e) {
- return false;
- }
- }
-
- /**
- * Sets the listener to listen to the session events. A {@link ImsCallSession}
- * 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
- */
- public void setListener(Listener listener) {
- mListener = listener;
- }
-
- /**
- * Mutes or unmutes the mic for the active call.
- *
- * @param muted true if the call is muted, false otherwise
- */
- public void setMute(boolean muted) {
- if (mClosed) {
- return;
- }
-
- try {
- miSession.setMute(muted);
- } catch (RemoteException e) {
- }
- }
-
- /**
- * 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
- */
- public void start(String callee, ImsCallProfile profile) {
- if (mClosed) {
- return;
- }
-
- try {
- miSession.start(callee, profile);
- } catch (RemoteException e) {
- }
- }
-
- /**
- * Initiates an IMS conference 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 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
- */
- public void start(String[] participants, ImsCallProfile profile) {
- if (mClosed) {
- return;
- }
-
- try {
- miSession.startConference(participants, profile);
- } catch (RemoteException e) {
- }
- }
-
- /**
- * 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
- */
- public void accept(int callType, ImsStreamMediaProfile profile) {
- if (mClosed) {
- return;
- }
-
- try {
- miSession.accept(callType, profile);
- } catch (RemoteException e) {
- }
- }
-
- /**
- * Rejects an incoming call or session update.
- *
- * @param reason reason code to reject an incoming call
- * @see Listener#callSessionStartFailed
- */
- public void reject(int reason) {
- if (mClosed) {
- return;
- }
-
- try {
- miSession.reject(reason);
- } catch (RemoteException e) {
- }
- }
-
- /**
- * Terminates a call.
- *
- * @see Listener#callSessionTerminated
- */
- public void terminate(int reason) {
- if (mClosed) {
- return;
- }
-
- try {
- miSession.terminate(reason);
- } catch (RemoteException e) {
- }
- }
-
- /**
- * 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
- */
- public void hold(ImsStreamMediaProfile profile) {
- if (mClosed) {
- return;
- }
-
- try {
- miSession.hold(profile);
- } catch (RemoteException e) {
- }
- }
-
- /**
- * 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
- */
- public void resume(ImsStreamMediaProfile profile) {
- if (mClosed) {
- return;
- }
-
- try {
- miSession.resume(profile);
- } catch (RemoteException e) {
- }
- }
-
- /**
- * Merges the active & hold call. When it succeeds,
- * {@link Listener#callSessionMergeStarted} is called.
- *
- * @see Listener#callSessionMergeStarted , Listener#callSessionMergeFailed
- */
- public void merge() {
- if (mClosed) {
- return;
- }
-
- try {
- miSession.merge();
- } catch (RemoteException e) {
- }
- }
-
- /**
- * 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
- */
- public void update(int callType, ImsStreamMediaProfile profile) {
- if (mClosed) {
- return;
- }
-
- try {
- miSession.update(callType, profile);
- } catch (RemoteException e) {
- }
- }
-
- /**
- * 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
- */
- public void extendToConference(String[] participants) {
- if (mClosed) {
- return;
- }
-
- try {
- miSession.extendToConference(participants);
- } catch (RemoteException e) {
- }
- }
-
- /**
- * 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
- */
- public void inviteParticipants(String[] participants) {
- if (mClosed) {
- return;
- }
-
- try {
- miSession.inviteParticipants(participants);
- } catch (RemoteException e) {
- }
- }
-
- /**
- * 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
- */
- public void removeParticipants(String[] participants) {
- if (mClosed) {
- return;
- }
-
- try {
- miSession.removeParticipants(participants);
- } catch (RemoteException e) {
- }
- }
-
-
- /**
- * 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 c the DTMF to send. '0' ~ '9', 'A' ~ 'D', '*', '#' are valid inputs.
- */
- public void sendDtmf(char c, Message result) {
- if (mClosed) {
- return;
- }
-
- try {
- miSession.sendDtmf(c, result);
- } catch (RemoteException e) {
- }
- }
-
- /**
- * Starts 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 c the DTMF to send. '0' ~ '9', 'A' ~ 'D', '*', '#' are valid inputs.
- */
- public void startDtmf(char c) {
- if (mClosed) {
- return;
- }
-
- try {
- miSession.startDtmf(c);
- } catch (RemoteException e) {
- }
- }
-
- /**
- * Stops a DTMF code.
- */
- public void stopDtmf() {
- if (mClosed) {
- return;
- }
-
- try {
- miSession.stopDtmf();
- } catch (RemoteException e) {
- }
- }
-
- /**
- * Sends an USSD message.
- *
- * @param ussdMessage USSD message to send
- */
- public void sendUssd(String ussdMessage) {
- if (mClosed) {
- return;
- }
-
- try {
- miSession.sendUssd(ussdMessage);
- } catch (RemoteException e) {
- }
- }
-
- /**
- * Determines if the session is multiparty.
- *
- * @return {@code True} if the session is multiparty.
- */
- public boolean isMultiparty() {
- if (mClosed) {
- return false;
- }
-
- try {
- return miSession.isMultiparty();
- } catch (RemoteException e) {
- return false;
- }
- }
-
- /**
- * 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}.
- */
- private class IImsCallSessionListenerProxy extends IImsCallSessionListener.Stub {
- /**
- * Notifies the result of the basic session operation (setup / terminate).
- */
- @Override
- public void callSessionProgressing(IImsCallSession session,
- ImsStreamMediaProfile profile) {
- if (mListener != null) {
- mListener.callSessionProgressing(ImsCallSession.this, profile);
- }
- }
-
- @Override
- public void callSessionStarted(IImsCallSession session,
- ImsCallProfile profile) {
- if (mListener != null) {
- mListener.callSessionStarted(ImsCallSession.this, profile);
- }
- }
-
- @Override
- public void callSessionStartFailed(IImsCallSession session,
- ImsReasonInfo reasonInfo) {
- if (mListener != null) {
- mListener.callSessionStartFailed(ImsCallSession.this, reasonInfo);
- }
- }
-
- @Override
- public void callSessionTerminated(IImsCallSession session,
- ImsReasonInfo reasonInfo) {
- if (mListener != null) {
- mListener.callSessionTerminated(ImsCallSession.this, reasonInfo);
- }
- }
-
- /**
- * Notifies the result of the call hold/resume operation.
- */
- @Override
- public void callSessionHeld(IImsCallSession session,
- ImsCallProfile profile) {
- if (mListener != null) {
- mListener.callSessionHeld(ImsCallSession.this, profile);
- }
- }
-
- @Override
- public void callSessionHoldFailed(IImsCallSession session,
- ImsReasonInfo reasonInfo) {
- if (mListener != null) {
- mListener.callSessionHoldFailed(ImsCallSession.this, reasonInfo);
- }
- }
-
- @Override
- public void callSessionHoldReceived(IImsCallSession session,
- ImsCallProfile profile) {
- if (mListener != null) {
- mListener.callSessionHoldReceived(ImsCallSession.this, profile);
- }
- }
-
- @Override
- public void callSessionResumed(IImsCallSession session,
- ImsCallProfile profile) {
- if (mListener != null) {
- mListener.callSessionResumed(ImsCallSession.this, profile);
- }
- }
-
- @Override
- public void callSessionResumeFailed(IImsCallSession session,
- ImsReasonInfo reasonInfo) {
- if (mListener != null) {
- mListener.callSessionResumeFailed(ImsCallSession.this, reasonInfo);
- }
- }
-
- @Override
- public void callSessionResumeReceived(IImsCallSession session,
- ImsCallProfile profile) {
- if (mListener != null) {
- mListener.callSessionResumeReceived(ImsCallSession.this, profile);
- }
- }
-
- /**
- * Notifies the start of a call merge operation.
- *
- * @param session The call session.
- * @param newSession The merged call session.
- * @param profile The call profile.
- */
- @Override
- public void callSessionMergeStarted(IImsCallSession session,
- IImsCallSession newSession, ImsCallProfile profile) {
- // This callback can be used for future use to add additional
- // functionality that may be needed between conference start and complete
- Log.d(TAG, "callSessionMergeStarted");
- }
-
- /**
- * Notifies the successful completion of a call merge operation.
- *
- * @param session The call session.
- */
- @Override
- public void callSessionMergeComplete(IImsCallSession newSession) {
- if (mListener != null) {
- if (newSession != null) {
- // Check if the active session is the same session that was
- // active before the merge request was sent.
- ImsCallSession validActiveSession = ImsCallSession.this;
- try {
- if (!Objects.equals(miSession.getCallId(), newSession.getCallId())) {
- // New session created after conference
- validActiveSession = new ImsCallSession(newSession);
- }
- } catch (RemoteException rex) {
- Log.e(TAG, "callSessionMergeComplete: exception for getCallId!");
- }
- mListener.callSessionMergeComplete(validActiveSession);
- } else {
- // Session already exists. Hence no need to pass
- mListener.callSessionMergeComplete(null);
- }
- }
- }
-
- /**
- * Notifies of a failure to perform a call merge operation.
- *
- * @param session The call session.
- * @param reasonInfo The merge failure reason.
- */
- @Override
- public void callSessionMergeFailed(IImsCallSession session,
- ImsReasonInfo reasonInfo) {
- if (mListener != null) {
- mListener.callSessionMergeFailed(ImsCallSession.this, reasonInfo);
- }
- }
-
- /**
- * Notifies the result of call upgrade / downgrade or any other call updates.
- */
- @Override
- public void callSessionUpdated(IImsCallSession session,
- ImsCallProfile profile) {
- if (mListener != null) {
- mListener.callSessionUpdated(ImsCallSession.this, profile);
- }
- }
-
- @Override
- public void callSessionUpdateFailed(IImsCallSession session,
- ImsReasonInfo reasonInfo) {
- if (mListener != null) {
- mListener.callSessionUpdateFailed(ImsCallSession.this, reasonInfo);
- }
- }
-
- @Override
- public void callSessionUpdateReceived(IImsCallSession session,
- ImsCallProfile profile) {
- if (mListener != null) {
- mListener.callSessionUpdateReceived(ImsCallSession.this, profile);
- }
- }
-
- /**
- * Notifies the result of conference extension.
- */
- @Override
- public void callSessionConferenceExtended(IImsCallSession session,
- IImsCallSession newSession, ImsCallProfile profile) {
- if (mListener != null) {
- mListener.callSessionConferenceExtended(ImsCallSession.this,
- new ImsCallSession(newSession), profile);
- }
- }
-
- @Override
- public void callSessionConferenceExtendFailed(IImsCallSession session,
- ImsReasonInfo reasonInfo) {
- if (mListener != null) {
- mListener.callSessionConferenceExtendFailed(ImsCallSession.this, reasonInfo);
- }
- }
-
- @Override
- public void callSessionConferenceExtendReceived(IImsCallSession session,
- IImsCallSession newSession, ImsCallProfile profile) {
- if (mListener != null) {
- mListener.callSessionConferenceExtendReceived(ImsCallSession.this,
- new ImsCallSession(newSession), profile);
- }
- }
-
- /**
- * Notifies the result of the participant invitation / removal to/from
- * the conference session.
- */
- @Override
- public void callSessionInviteParticipantsRequestDelivered(IImsCallSession session) {
- if (mListener != null) {
- mListener.callSessionInviteParticipantsRequestDelivered(ImsCallSession.this);
- }
- }
-
- @Override
- public void callSessionInviteParticipantsRequestFailed(IImsCallSession session,
- ImsReasonInfo reasonInfo) {
- if (mListener != null) {
- mListener.callSessionInviteParticipantsRequestFailed(ImsCallSession.this,
- reasonInfo);
- }
- }
-
- @Override
- public void callSessionRemoveParticipantsRequestDelivered(IImsCallSession session) {
- if (mListener != null) {
- mListener.callSessionRemoveParticipantsRequestDelivered(ImsCallSession.this);
- }
- }
-
- @Override
- public void callSessionRemoveParticipantsRequestFailed(IImsCallSession session,
- ImsReasonInfo reasonInfo) {
- if (mListener != null) {
- mListener.callSessionRemoveParticipantsRequestFailed(ImsCallSession.this,
- reasonInfo);
- }
- }
-
- /**
- * Notifies the changes of the conference info. in the conference session.
- */
- @Override
- public void callSessionConferenceStateUpdated(IImsCallSession session,
- ImsConferenceState state) {
- if (mListener != null) {
- mListener.callSessionConferenceStateUpdated(ImsCallSession.this, state);
- }
- }
-
- /**
- * Notifies the incoming USSD message.
- */
- @Override
- public void callSessionUssdMessageReceived(IImsCallSession session,
- int mode, String ussdMessage) {
- if (mListener != null) {
- mListener.callSessionUssdMessageReceived(ImsCallSession.this, mode, ussdMessage);
- }
- }
-
- /**
- * Notifies of handover information for this call
- */
- @Override
- public void callSessionHandover(IImsCallSession session,
- int srcAccessTech, int targetAccessTech,
- ImsReasonInfo reasonInfo) {
- if (mListener != null) {
- mListener.callSessionHandover(ImsCallSession.this, srcAccessTech,
- targetAccessTech, reasonInfo);
- }
- }
-
- /**
- * Notifies of handover failure info for this call
- */
- @Override
- public void callSessionHandoverFailed(IImsCallSession session,
- int srcAccessTech, int targetAccessTech,
- ImsReasonInfo reasonInfo) {
- if (mListener != null) {
- mListener.callSessionHandoverFailed(ImsCallSession.this, srcAccessTech,
- targetAccessTech, reasonInfo);
- }
- }
-
- /**
- * Notifies the TTY mode received from remote party.
- */
- @Override
- public void callSessionTtyModeReceived(IImsCallSession session,
- int mode) {
- if (mListener != null) {
- mListener.callSessionTtyModeReceived(ImsCallSession.this, mode);
- }
- }
-
- /**
- * Notifies of a change to the multiparty state for this {@code ImsCallSession}.
- *
- * @param session The call session.
- * @param isMultiParty {@code true} if the session became multiparty, {@code false}
- * otherwise.
- */
- public void callSessionMultipartyStateChanged(IImsCallSession session,
- boolean isMultiParty) {
-
- if (mListener != null) {
- mListener.callSessionMultipartyStateChanged(ImsCallSession.this, isMultiParty);
- }
- }
-
- @Override
- public void callSessionSuppServiceReceived(IImsCallSession session,
- ImsSuppServiceNotification suppServiceInfo ) {
- if (mListener != null) {
- mListener.callSessionSuppServiceReceived(ImsCallSession.this, suppServiceInfo);
- }
- }
-
- }
-
- /**
- * Provides a string representation of the {@link ImsCallSession}. Primarily intended for
- * use in log statements.
- *
- * @return String representation of session.
- */
- @Override
- public String toString() {
- StringBuilder sb = new StringBuilder();
- sb.append("[ImsCallSession objId:");
- sb.append(System.identityHashCode(this));
- sb.append(" state:");
- sb.append(State.toString(getState()));
- sb.append(" callId:");
- sb.append(getCallId());
- sb.append("]");
- return sb.toString();
- }
-}
diff --git a/src/java/com/android/ims/internal/ImsVideoCallProvider.java b/src/java/com/android/ims/internal/ImsVideoCallProvider.java
deleted file mode 100644
index 25aa6945..00000000
--- a/src/java/com/android/ims/internal/ImsVideoCallProvider.java
+++ /dev/null
@@ -1,291 +0,0 @@
-/*
- * Copyright (C) 2014 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.internal.os.SomeArgs;
-
-import android.net.Uri;
-import android.os.Handler;
-import android.os.Looper;
-import android.os.Message;
-import android.os.RemoteException;
-import android.telecom.Connection;
-import android.telecom.VideoProfile;
-import android.telecom.VideoProfile.CameraCapabilities;
-import android.view.Surface;
-
-public abstract class ImsVideoCallProvider {
- private static final int MSG_SET_CALLBACK = 1;
- private static final int MSG_SET_CAMERA = 2;
- private static final int MSG_SET_PREVIEW_SURFACE = 3;
- private static final int MSG_SET_DISPLAY_SURFACE = 4;
- private static final int MSG_SET_DEVICE_ORIENTATION = 5;
- private static final int MSG_SET_ZOOM = 6;
- private static final int MSG_SEND_SESSION_MODIFY_REQUEST = 7;
- private static final int MSG_SEND_SESSION_MODIFY_RESPONSE = 8;
- private static final int MSG_REQUEST_CAMERA_CAPABILITIES = 9;
- private static final int MSG_REQUEST_CALL_DATA_USAGE = 10;
- private static final int MSG_SET_PAUSE_IMAGE = 11;
-
- private final ImsVideoCallProviderBinder mBinder;
-
- private IImsVideoCallCallback mCallback;
-
- /**
- * Default handler used to consolidate binder method calls onto a single thread.
- */
- private final Handler mProviderHandler = new Handler(Looper.getMainLooper()) {
- @Override
- public void handleMessage(Message msg) {
- switch (msg.what) {
- case MSG_SET_CALLBACK:
- mCallback = (IImsVideoCallCallback) msg.obj;
- break;
- case MSG_SET_CAMERA:
- {
- SomeArgs args = (SomeArgs) msg.obj;
- try {
- onSetCamera((String) args.arg1);
- onSetCamera((String) args.arg1, args.argi1);
- } finally {
- args.recycle();
- }
- break;
- }
- case MSG_SET_PREVIEW_SURFACE:
- onSetPreviewSurface((Surface) msg.obj);
- break;
- case MSG_SET_DISPLAY_SURFACE:
- onSetDisplaySurface((Surface) msg.obj);
- break;
- case MSG_SET_DEVICE_ORIENTATION:
- onSetDeviceOrientation(msg.arg1);
- break;
- case MSG_SET_ZOOM:
- onSetZoom((Float) msg.obj);
- break;
- case MSG_SEND_SESSION_MODIFY_REQUEST: {
- SomeArgs args = (SomeArgs) msg.obj;
- try {
- VideoProfile fromProfile = (VideoProfile) args.arg1;
- VideoProfile toProfile = (VideoProfile) args.arg2;
-
- onSendSessionModifyRequest(fromProfile, toProfile);
- } finally {
- args.recycle();
- }
- break;
- }
- case MSG_SEND_SESSION_MODIFY_RESPONSE:
- onSendSessionModifyResponse((VideoProfile) msg.obj);
- break;
- case MSG_REQUEST_CAMERA_CAPABILITIES:
- onRequestCameraCapabilities();
- break;
- case MSG_REQUEST_CALL_DATA_USAGE:
- onRequestCallDataUsage();
- break;
- case MSG_SET_PAUSE_IMAGE:
- onSetPauseImage((Uri) msg.obj);
- break;
- default:
- break;
- }
- }
- };
-
- /**
- * IImsVideoCallProvider stub implementation.
- */
- private final class ImsVideoCallProviderBinder extends IImsVideoCallProvider.Stub {
- public void setCallback(IImsVideoCallCallback callback) {
- mProviderHandler.obtainMessage(MSG_SET_CALLBACK, callback).sendToTarget();
- }
-
- public void setCamera(String cameraId, int uid) {
- SomeArgs args = SomeArgs.obtain();
- args.arg1 = cameraId;
- args.argi1 = uid;
- mProviderHandler.obtainMessage(MSG_SET_CAMERA, args).sendToTarget();
- }
-
- public void setPreviewSurface(Surface surface) {
- mProviderHandler.obtainMessage(MSG_SET_PREVIEW_SURFACE, surface).sendToTarget();
- }
-
- public void setDisplaySurface(Surface surface) {
- mProviderHandler.obtainMessage(MSG_SET_DISPLAY_SURFACE, surface).sendToTarget();
- }
-
- public void setDeviceOrientation(int rotation) {
- mProviderHandler.obtainMessage(MSG_SET_DEVICE_ORIENTATION, rotation, 0).sendToTarget();
- }
-
- public void setZoom(float value) {
- mProviderHandler.obtainMessage(MSG_SET_ZOOM, value).sendToTarget();
- }
-
- public void sendSessionModifyRequest(VideoProfile fromProfile, VideoProfile toProfile) {
- SomeArgs args = SomeArgs.obtain();
- args.arg1 = fromProfile;
- args.arg2 = toProfile;
- mProviderHandler.obtainMessage(MSG_SEND_SESSION_MODIFY_REQUEST, args).sendToTarget();
- }
-
- public void sendSessionModifyResponse(VideoProfile responseProfile) {
- mProviderHandler.obtainMessage(
- MSG_SEND_SESSION_MODIFY_RESPONSE, responseProfile).sendToTarget();
- }
-
- public void requestCameraCapabilities() {
- mProviderHandler.obtainMessage(MSG_REQUEST_CAMERA_CAPABILITIES).sendToTarget();
- }
-
- public void requestCallDataUsage() {
- mProviderHandler.obtainMessage(MSG_REQUEST_CALL_DATA_USAGE).sendToTarget();
- }
-
- public void setPauseImage(Uri uri) {
- mProviderHandler.obtainMessage(MSG_SET_PAUSE_IMAGE, uri).sendToTarget();
- }
- }
-
- public ImsVideoCallProvider() {
- mBinder = new ImsVideoCallProviderBinder();
- }
-
- /**
- * Returns binder object which can be used across IPC methods.
- */
- public final IImsVideoCallProvider getInterface() {
- return mBinder;
- }
-
- /** @see Connection.VideoProvider#onSetCamera */
- public abstract void onSetCamera(String cameraId);
-
- /**
- * Similar to {@link #onSetCamera(String)}, except includes the UID of the calling process which
- * the IMS service uses when opening the camera. This ensures camera permissions are verified
- * by the camera service.
- *
- * @param cameraId The id of the camera to be opened.
- * @param uid The uid of the caller, used when opening the camera for permission verification.
- * @see Connection.VideoProvider#onSetCamera
- */
- public void onSetCamera(String cameraId, int uid) {
- }
-
- /** @see Connection.VideoProvider#onSetPreviewSurface */
- public abstract void onSetPreviewSurface(Surface surface);
-
- /** @see Connection.VideoProvider#onSetDisplaySurface */
- public abstract void onSetDisplaySurface(Surface surface);
-
- /** @see Connection.VideoProvider#onSetDeviceOrientation */
- public abstract void onSetDeviceOrientation(int rotation);
-
- /** @see Connection.VideoProvider#onSetZoom */
- public abstract void onSetZoom(float value);
-
- /** @see Connection.VideoProvider#onSendSessionModifyRequest */
- public abstract void onSendSessionModifyRequest(VideoProfile fromProfile,
- VideoProfile toProfile);
-
- /** @see Connection.VideoProvider#onSendSessionModifyResponse */
- public abstract void onSendSessionModifyResponse(VideoProfile responseProfile);
-
- /** @see Connection.VideoProvider#onRequestCameraCapabilities */
- public abstract void onRequestCameraCapabilities();
-
- /** @see Connection.VideoProvider#onRequestCallDataUsage */
- public abstract void onRequestCallDataUsage();
-
- /** @see Connection.VideoProvider#onSetPauseImage */
- public abstract void onSetPauseImage(Uri uri);
-
- /** @see Connection.VideoProvider#receiveSessionModifyRequest */
- public void receiveSessionModifyRequest(VideoProfile VideoProfile) {
- if (mCallback != null) {
- try {
- mCallback.receiveSessionModifyRequest(VideoProfile);
- } catch (RemoteException ignored) {
- }
- }
- }
-
- /** @see Connection.VideoProvider#receiveSessionModifyResponse */
- public void receiveSessionModifyResponse(
- int status, VideoProfile requestedProfile, VideoProfile responseProfile) {
- if (mCallback != null) {
- try {
- mCallback.receiveSessionModifyResponse(status, requestedProfile, responseProfile);
- } catch (RemoteException ignored) {
- }
- }
- }
-
- /** @see Connection.VideoProvider#handleCallSessionEvent */
- public void handleCallSessionEvent(int event) {
- if (mCallback != null) {
- try {
- mCallback.handleCallSessionEvent(event);
- } catch (RemoteException ignored) {
- }
- }
- }
-
- /** @see Connection.VideoProvider#changePeerDimensions */
- public void changePeerDimensions(int width, int height) {
- if (mCallback != null) {
- try {
- mCallback.changePeerDimensions(width, height);
- } catch (RemoteException ignored) {
- }
- }
- }
-
- /** @see Connection.VideoProvider#changeCallDataUsage */
- public void changeCallDataUsage(long dataUsage) {
- if (mCallback != null) {
- try {
- mCallback.changeCallDataUsage(dataUsage);
- } catch (RemoteException ignored) {
- }
- }
- }
-
- /** @see Connection.VideoProvider#changeCameraCapabilities */
- public void changeCameraCapabilities(CameraCapabilities CameraCapabilities) {
- if (mCallback != null) {
- try {
- mCallback.changeCameraCapabilities(CameraCapabilities);
- } catch (RemoteException ignored) {
- }
- }
- }
-
- /** @see Connection.VideoProvider#changeVideoQuality */
- public void changeVideoQuality(int videoQuality) {
- if (mCallback != null) {
- try {
- mCallback.changeVideoQuality(videoQuality);
- } catch (RemoteException ignored) {
- }
- }
- }
-}