1076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com/*
2076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com * Copyright (c) 2014 The Android Open Source Project
3076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com *
4076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com * Licensed under the Apache License, Version 2.0 (the "License");
5076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com * you may not use this file except in compliance with the License.
6076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com * You may obtain a copy of the License at
7076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com *
8076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com *      http://www.apache.org/licenses/LICENSE-2.0
9076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com *
10076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com * Unless required by applicable law or agreed to in writing, software
11076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com * distributed under the License is distributed on an "AS IS" BASIS,
12076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com * See the License for the specific language governing permissions and
14076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com * limitations under the License.
15076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com */
16076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com
17076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.compackage com.android.ims;
18076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com
19076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.comimport android.os.RemoteException;
20076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.comimport android.telephony.Rlog;
21076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com
22076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.comimport com.android.ims.ImsConfigListener;
23076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.comimport com.android.ims.ImsReasonInfo;
24076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.comimport com.android.ims.internal.IImsConfig;
25076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com/**
26076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com * Provides APIs to get/set the IMS service feature/capability/parameters.
27076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com * The config items include:
28076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com * 1) Items provisioned by the operator.
29076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com * 2) Items configured by user. Mainly service feature class.
30076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com *
31076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com * @hide
32076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com */
33076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.compublic class ImsConfig {
34076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com    private static final String TAG = "ImsConfig";
35076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com    private boolean DBG = true;
36076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com    private final IImsConfig miConfig;
37076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com
38076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com    /**
39076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com    * Defines IMS service/capability feature constants.
40076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com    */
41076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com    public static class FeatureConstants {
42076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        public static final int FEATURE_TYPE_UNKNOWN = -1;
43076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com
44076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        /**
457da5a11accec318cc3da2087fb3a891db4f661f7ram         * FEATURE_TYPE_VOLTE supports features defined in 3GPP and
467da5a11accec318cc3da2087fb3a891db4f661f7ram         * GSMA IR.92 over LTE.
47076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com         */
487da5a11accec318cc3da2087fb3a891db4f661f7ram        public static final int FEATURE_TYPE_VOICE_OVER_LTE = 0;
49076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com
50076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        /**
517da5a11accec318cc3da2087fb3a891db4f661f7ram         * FEATURE_TYPE_LVC supports features defined in 3GPP and
527da5a11accec318cc3da2087fb3a891db4f661f7ram         * GSMA IR.94 over LTE.
53076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com         */
547da5a11accec318cc3da2087fb3a891db4f661f7ram        public static final int FEATURE_TYPE_VIDEO_OVER_LTE = 1;
55076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com
56076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        /**
577da5a11accec318cc3da2087fb3a891db4f661f7ram         * FEATURE_TYPE_VOICE_OVER_WIFI supports features defined in 3GPP and
587da5a11accec318cc3da2087fb3a891db4f661f7ram         * GSMA IR.92 over WiFi.
59076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com         */
607da5a11accec318cc3da2087fb3a891db4f661f7ram        public static final int FEATURE_TYPE_VOICE_OVER_WIFI = 2;
617da5a11accec318cc3da2087fb3a891db4f661f7ram
627da5a11accec318cc3da2087fb3a891db4f661f7ram        /**
637da5a11accec318cc3da2087fb3a891db4f661f7ram         * FEATURE_TYPE_VIDEO_OVER_WIFI supports features defined in 3GPP and
647da5a11accec318cc3da2087fb3a891db4f661f7ram         * GSMA IR.94 over WiFi.
657da5a11accec318cc3da2087fb3a891db4f661f7ram         */
667da5a11accec318cc3da2087fb3a891db4f661f7ram        public static final int FEATURE_TYPE_VIDEO_OVER_WIFI = 3;
67076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com    }
68076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com
69076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com    /**
70076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com    * Defines IMS service/capability parameters.
71076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com    */
72076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com    public static class ConfigConstants {
73076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com
74076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        // Define IMS config items
75076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        public static final int CONFIG_START = 0;
76076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com
77076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        // Define operator provisioned config items
78076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        public static final int PROVISIONED_CONFIG_START = CONFIG_START;
79076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com
80076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        /**
81076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com         * AMR CODEC Mode Value set, 0-7 in comma separated sequence.
82076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com         * Value is in String format.
83076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com         */
84076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        public static final int VOCODER_AMRMODESET = CONFIG_START;
85076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com
86076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        /**
87076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com         * Wide Band AMR CODEC Mode Value set,0-7 in comma separated sequence.
88076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com         * Value is in String format.
89076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com         */
90076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        public static final int VOCODER_AMRWBMODESET = 1;
91076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com
92076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        /**
93076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com         * SIP Session Timer value (seconds).
94076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com         * Value is in Integer format.
95076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com         */
96076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        public static final int SIP_SESSION_TIMER = 2;
97076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com
98076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        /**
99076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com         * Minimum SIP Session Expiration Timer in (seconds).
100076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com         * Value is in Integer format.
101076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com         */
102076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        public static final int MIN_SE = 3;
103076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com
104076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        /**
105076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com         * SIP_INVITE cancellation time out value. Integer format.
106076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com         * Value is in Integer format.
107076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com         */
108076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        public static final int CANCELLATION_TIMER = 4;
109076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com
110076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        /**
111076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com         * Delay time when an iRAT transition from eHRPD/HRPD/1xRTT to LTE.
112076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com         * Value is in Integer format.
113076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com         */
114076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        public static final int TDELAY = 5;
115076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com
116076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        /**
117076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com         * Silent redial status of Enabled (True), or Disabled (False).
118076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com         * Value is in Integer format.
119076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com         */
120076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        public static final int SILENT_REDIAL_ENABLE = 6;
121076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com
122076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        /**
123076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com         * SIP T1 timer value in seconds. See RFC 3261 for define.
124076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com         * Value is in Integer format.
125076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com         */
126076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        public static final int SIP_T1_TIMER = 7;
127076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com
128076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        /**
129076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com         * SIP T2 timer value in seconds.  See RFC 3261 for define.
130076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com         * Value is in Integer format.
131076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com         */
132076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        public static final int SIP_T2_TIMER  = 8;
133076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com
134076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com         /**
135076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com         * SIP TF timer value in seconds.  See RFC 3261 for define.
136076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com         * Value is in Integer format.
137076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com         */
138076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        public static final int SIP_TF_TIMER = 9;
139076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com
140076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        /**
141076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com         * VoLTE status for VLT/s status of Enabled (1), or Disabled (0).
142076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com         * Value is in Integer format.
143076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com         */
144076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        public static final int VLT_SETTING_ENABLED = 10;
145076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com
146076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        /**
147076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com         * VoLTE status for LVC/s status of Enabled (1), or Disabled (0).
148076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com         * Value is in Integer format.
149076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com         */
150076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        public static final int LVC_SETTING_ENABLED = 11;
151076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com
152076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        // Expand the operator config items as needed here, need to change
153076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        // PROVISIONED_CONFIG_END after that.
154076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        public static final int PROVISIONED_CONFIG_END = LVC_SETTING_ENABLED;
155076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com
156076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        // Expand the operator config items as needed here.
157076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com    }
158076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com
159076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com    /**
160076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com    * Defines IMS set operation status.
161076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com    */
162076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com    public static class OperationStatusConstants {
163076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        public static final int UNKNOWN = -1;
164076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        public static final int SUCCESS = 0;
165076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        public static final int FAILED =  1;
166076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        public static final int UNSUPPORTED_CAUSE_NONE = 2;
167076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        public static final int UNSUPPORTED_CAUSE_RAT = 3;
168076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        public static final int UNSUPPORTED_CAUSE_DISABLED = 4;
169076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com    }
170076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com
171076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com   /**
172076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com    * Defines IMS feature value.
173076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com    */
174076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com    public static class FeatureValueConstants {
175076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        public static final int OFF = 0;
176076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        public static final int ON = 1;
177076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com    }
178076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com
179076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com    public ImsConfig(IImsConfig iconfig) {
180076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        if (DBG) Rlog.d(TAG, "ImsConfig creates");
181076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        miConfig = iconfig;
182076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com    }
183076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com
184076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com    /**
185076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com     * Gets the value for IMS service/capabilities parameters used by IMS stack.
186076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com     * This function should not be called from the mainthread as it could block the
187076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com     * mainthread to cause ANR.
188076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com     *
189076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com     * @param item, as defined in com.android.ims.ImsConfig#ConfigConstants.
190076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com     * @return the value in Integer format.
191076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com     *
192076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com     * @throws ImsException if calling the IMS service results in an error.
193076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com     */
194076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com    public int getMasterValue(int item) throws ImsException {
195076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        int ret = 0;
196076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        try {
197076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com            ret = miConfig.getMasterValue(item);
198076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        }  catch (RemoteException e) {
199076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com            throw new ImsException("getValue()", e,
200076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com                    ImsReasonInfo.CODE_LOCAL_SERVICE_UNAVAILABLE);
201076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        }
2025216bd9de165e7fd1ec9b1caea983ab6ca50784eLibin.Tang@motorola.com        if (DBG) Rlog.d(TAG, "getMasterValue(): item = " + item + ", ret =" + ret);
203076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com
204076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        return ret;
205076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com    }
206076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com
207076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com    /**
208076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com     * Gets the value for IMS service/capabilities parameters used by IMS stack.
209076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com     * This function should not be called from the mainthread as it could block the
210076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com     * mainthread to cause ANR.
211076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com     *
212076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com     * @param item, as defined in com.android.ims.ImsConfig#ConfigConstants.
213076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com     * @return value in String format.
214076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com     *
215076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com     * @throws ImsException if calling the IMS service results in an error.
216076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com     */
217076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com    public String getMasterStringValue(int item) throws ImsException {
218076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        String ret = "Unknown";
219076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        try {
220076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com            ret = miConfig.getMasterStringValue(item);
221076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        }  catch (RemoteException e) {
222076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com            throw new ImsException("getStringValue()", e,
223076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com                    ImsReasonInfo.CODE_LOCAL_SERVICE_UNAVAILABLE);
224076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        }
2255216bd9de165e7fd1ec9b1caea983ab6ca50784eLibin.Tang@motorola.com        if (DBG) Rlog.d(TAG, "getMasterStringValue(): item = " + item + ", ret =" + ret);
226076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com
227076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        return ret;
228076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com    }
229076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com
230076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com    /**
231076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com     * Sets the value for IMS service/capabilities parameters by
232076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com     * the operator device management entity.
233076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com     * This function should not be called from main thread as it could block
234076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com     * mainthread to cause ANR.
235076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com     *
236076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com     * @param item, as defined in com.android.ims.ImsConfig#ConfigConstants.
237076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com     * @param value in Integer format.
238076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com     * @return void
239076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com     *
240076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com     * @throws ImsException if calling the IMS service results in an error.
241076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com     */
242076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com    public void setProvisionedValue(int item, int value)
243076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com            throws ImsException {
244076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        // TODO: ADD PERMISSION CHECK
245076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        if (DBG) {
246076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com            Rlog.d(TAG, "setProvisionedValue(): item = " + item +
247076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com                    "value = " + value);
248076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        }
249076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        try {
250076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com            miConfig.setProvisionedValue(item, value);
251076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        }  catch (RemoteException e) {
252076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com            throw new ImsException("setProvisionedValue()", e,
253076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com                    ImsReasonInfo.CODE_LOCAL_SERVICE_UNAVAILABLE);
254076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        }
255076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com    }
256076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com
257076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com    /**
258076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com     * Sets the value for IMS service/capabilities parameters by
259076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com     * the operator device management entity.
260076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com     *
261076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com     * @param item, as defined in com.android.ims.ImsConfig#ConfigConstants.
262076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com     * @param value in String format.
263076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com     * @return void.
264076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com     *
265076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com     * @throws ImsException if calling the IMS service results in an error.
266076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com     */
267076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com    public void setProvisionedStringValue(int item, String value)
268076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com            throws ImsException {
269076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        // TODO: ADD PERMISSION CHECK
270076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        if (DBG) {
271076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com            Rlog.d(TAG, "setProvisionedStringValue(): item = " + item +
272076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com                    ", value =" + value);
273076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        }
274076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        try {
275076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com            miConfig.setProvisionedStringValue(item, value);
276076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        }  catch (RemoteException e) {
277076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com            throw new ImsException("setProvisionedStringValue()", e,
278076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com                    ImsReasonInfo.CODE_LOCAL_SERVICE_UNAVAILABLE);
279076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        }
280076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com    }
281076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com
282076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com    /**
283076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com     * Gets the value for IMS feature item for specified network type.
284076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com     *
285076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com     * @param feature, defined as in FeatureConstants.
286076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com     * @param network, defined as in android.telephony.TelephonyManager#NETWORK_TYPE_XXX.
287076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com     * @param listener, provided to be notified for the feature on/off status.
288076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com     * @return void
289076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com     *
290076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com     * @throws ImsException if calling the IMS service results in an error.
291076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com     */
292076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com    public void getFeatureValue(int feature, int network,
293076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com            ImsConfigListener listener) throws ImsException {
294076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        if (DBG) {
2955216bd9de165e7fd1ec9b1caea983ab6ca50784eLibin.Tang@motorola.com            Rlog.d(TAG, "getFeatureValue: feature = " + feature + ", network =" + network +
296076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com                    ", listener =" + listener);
297076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        }
298076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        try {
299076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com            miConfig.getFeatureValue(feature, network, listener);
300076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        } catch (RemoteException e) {
3015216bd9de165e7fd1ec9b1caea983ab6ca50784eLibin.Tang@motorola.com            throw new ImsException("getFeatureValue()", e,
302076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com                    ImsReasonInfo.CODE_LOCAL_SERVICE_UNAVAILABLE);
303076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        }
304076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com    }
305076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com
306076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com    /**
307076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com     * Sets the value for IMS feature item for specified network type.
308076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com     *
309076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com     * @param feature, as defined in FeatureConstants.
310076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com     * @param network, as defined in android.telephony.TelephonyManager#NETWORK_TYPE_XXX.
311076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com     * @param value, as defined in FeatureValueConstants.
312076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com     * @param listener, provided if caller needs to be notified for set result.
313076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com     * @return void
314076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com     *
315076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com     * @throws ImsException if calling the IMS service results in an error.
316076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com     */
317076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com    public void setFeatureValue(int feature, int network, int value,
318076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com            ImsConfigListener listener) throws ImsException {
319076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        // TODO: ADD PERMISSION CHECK (should there be permission, same as provisioning?)
320076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        if (DBG) {
3215216bd9de165e7fd1ec9b1caea983ab6ca50784eLibin.Tang@motorola.com            Rlog.d(TAG, "setFeatureValue: feature = " + feature + ", network =" + network +
322076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com                    ", value =" + value + ", listener =" + listener);
323076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        }
324076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        try {
325076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com            miConfig.setFeatureValue(feature, network, value, listener);
326076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        } catch (RemoteException e) {
327076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com            throw new ImsException("setFeatureValue()", e,
328076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com                    ImsReasonInfo.CODE_LOCAL_SERVICE_UNAVAILABLE);
329076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com        }
330076c55df56906453aade4a741b435f1df72778a2Libin.Tang@motorola.com    }
3317da5a11accec318cc3da2087fb3a891db4f661f7ram}
332