1ef36ef67e009449300b0150c60c9f637e205d79eWink Saville/* 2ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Copyright (c) 2013 The Android Open Source Project 3ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * 4ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Licensed under the Apache License, Version 2.0 (the "License"); 5ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * you may not use this file except in compliance with the License. 6ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * You may obtain a copy of the License at 7ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * 8ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * http://www.apache.org/licenses/LICENSE-2.0 9ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * 10ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Unless required by applicable law or agreed to in writing, software 11ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * distributed under the License is distributed on an "AS IS" BASIS, 12ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * See the License for the specific language governing permissions and 14ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * limitations under the License. 15ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 16ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 17ef36ef67e009449300b0150c60c9f637e205d79eWink Savillepackage com.android.ims; 18ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 19ef36ef67e009449300b0150c60c9f637e205d79eWink Savilleimport java.util.HashMap; 20ef36ef67e009449300b0150c60c9f637e205d79eWink Savilleimport java.util.Map; 21ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 22ef36ef67e009449300b0150c60c9f637e205d79eWink Savilleimport android.os.AsyncResult; 23ef36ef67e009449300b0150c60c9f637e205d79eWink Savilleimport android.os.Bundle; 24ef36ef67e009449300b0150c60c9f637e205d79eWink Savilleimport android.os.Message; 25ef36ef67e009449300b0150c60c9f637e205d79eWink Savilleimport android.os.RemoteException; 26ef36ef67e009449300b0150c60c9f637e205d79eWink Savilleimport android.telephony.Rlog; 27ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 28ef36ef67e009449300b0150c60c9f637e205d79eWink Savilleimport com.android.ims.internal.IImsUt; 29ef36ef67e009449300b0150c60c9f637e205d79eWink Savilleimport com.android.ims.internal.IImsUtListener; 30ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 31ef36ef67e009449300b0150c60c9f637e205d79eWink Saville/** 32ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Provides APIs for the supplementary service settings using IMS (Ut interface). 33ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * It is created from 3GPP TS 24.623 (XCAP(XML Configuration Access Protocol) 34ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * over the Ut interface for manipulating supplementary services). 35ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * 36ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * @hide 37ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 38ef36ef67e009449300b0150c60c9f637e205d79eWink Savillepublic class ImsUt implements ImsUtInterface { 39ef36ef67e009449300b0150c60c9f637e205d79eWink Saville /** 40ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Key string for an additional supplementary service configurations. 41ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 42ef36ef67e009449300b0150c60c9f637e205d79eWink Saville /** 43ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Actions : string format of ImsUtInterface#ACTION_xxx 44ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * "0" (deactivation), "1" (activation), "2" (not_used), 45ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * "3" (registration), "4" (erasure), "5" (Interrogation) 46ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 47ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public static final String KEY_ACTION = "action"; 48ef36ef67e009449300b0150c60c9f637e205d79eWink Saville /** 49ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Categories : 50ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * "OIP", "OIR", "TIP", "TIR", "CDIV", "CB", "CW", "CONF", 51ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * "ACR", "MCID", "ECT", "CCBS", "AOC", "MWI", "FA", "CAT" 52ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * 53ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Detailed parameter name will be determined according to the properties 54ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * of the supplementary service configuration. 55ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 56ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public static final String KEY_CATEGORY = "category"; 57ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public static final String CATEGORY_OIP = "OIP"; 58ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public static final String CATEGORY_OIR = "OIR"; 59ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public static final String CATEGORY_TIP = "TIP"; 60ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public static final String CATEGORY_TIR = "TIR"; 61ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public static final String CATEGORY_CDIV = "CDIV"; 62ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public static final String CATEGORY_CB = "CB"; 63ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public static final String CATEGORY_CW = "CW"; 64ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public static final String CATEGORY_CONF = "CONF"; 65ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 66ef36ef67e009449300b0150c60c9f637e205d79eWink Saville private static final String TAG = "ImsUt"; 67ef36ef67e009449300b0150c60c9f637e205d79eWink Saville private static final boolean DBG = true; 68ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 69ef36ef67e009449300b0150c60c9f637e205d79eWink Saville // For synchronization of private variables 70ef36ef67e009449300b0150c60c9f637e205d79eWink Saville private Object mLockObj = new Object(); 71ef36ef67e009449300b0150c60c9f637e205d79eWink Saville private final IImsUt miUt; 72ef36ef67e009449300b0150c60c9f637e205d79eWink Saville private HashMap<Integer, Message> mPendingCmds = 73ef36ef67e009449300b0150c60c9f637e205d79eWink Saville new HashMap<Integer, Message>(); 74ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 75ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public ImsUt(IImsUt iUt) { 76ef36ef67e009449300b0150c60c9f637e205d79eWink Saville miUt = iUt; 77ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 78ef36ef67e009449300b0150c60c9f637e205d79eWink Saville if (miUt != null) { 79ef36ef67e009449300b0150c60c9f637e205d79eWink Saville try { 80ef36ef67e009449300b0150c60c9f637e205d79eWink Saville miUt.setListener(new IImsUtListenerProxy()); 81ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } catch (RemoteException e) { 82ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 83ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 84ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 85ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 86ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public void close() { 87ef36ef67e009449300b0150c60c9f637e205d79eWink Saville synchronized(mLockObj) { 88ef36ef67e009449300b0150c60c9f637e205d79eWink Saville if (miUt != null) { 89ef36ef67e009449300b0150c60c9f637e205d79eWink Saville try { 90ef36ef67e009449300b0150c60c9f637e205d79eWink Saville miUt.close(); 91ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } catch (RemoteException e) { 92ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 93ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 94ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 95ef36ef67e009449300b0150c60c9f637e205d79eWink Saville if (!mPendingCmds.isEmpty()) { 96ef36ef67e009449300b0150c60c9f637e205d79eWink Saville Map.Entry<Integer, Message>[] entries = 97ef36ef67e009449300b0150c60c9f637e205d79eWink Saville mPendingCmds.entrySet().toArray(new Map.Entry[mPendingCmds.size()]); 98ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 99ef36ef67e009449300b0150c60c9f637e205d79eWink Saville for (Map.Entry<Integer, Message> entry : entries) { 100ef36ef67e009449300b0150c60c9f637e205d79eWink Saville sendFailureReport(entry.getValue(), 101f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh new ImsReasonInfo(ImsReasonInfo.CODE_UT_SERVICE_UNAVAILABLE, 0)); 102ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 103ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 104ef36ef67e009449300b0150c60c9f637e205d79eWink Saville mPendingCmds.clear(); 105ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 106ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 107ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 108ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 109ef36ef67e009449300b0150c60c9f637e205d79eWink Saville /** 110ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Operations for the supplementary service configuration 111ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 112ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 113ef36ef67e009449300b0150c60c9f637e205d79eWink Saville /** 114ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Retrieves the configuration of the call barring. 115ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * 116ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * @param cbType type of call barring to be queried; ImsUtInterface#CB_XXX 117ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * @param result message to pass the result of this operation 118ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * The return value of ((AsyncResult)result.obj) is an array of {@link ImsSsInfo}. 119ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 120ef36ef67e009449300b0150c60c9f637e205d79eWink Saville @Override 121ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public void queryCallBarring(int cbType, Message result) { 122ef36ef67e009449300b0150c60c9f637e205d79eWink Saville if (DBG) { 123ef36ef67e009449300b0150c60c9f637e205d79eWink Saville log("queryCallBarring :: Ut=" + miUt + ", cbType=" + cbType); 124ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 125ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 126ef36ef67e009449300b0150c60c9f637e205d79eWink Saville synchronized(mLockObj) { 127ef36ef67e009449300b0150c60c9f637e205d79eWink Saville try { 128ef36ef67e009449300b0150c60c9f637e205d79eWink Saville int id = miUt.queryCallBarring(cbType); 129ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 130ef36ef67e009449300b0150c60c9f637e205d79eWink Saville if (id < 0) { 131f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh sendFailureReport(result, 132f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh new ImsReasonInfo(ImsReasonInfo.CODE_UT_SERVICE_UNAVAILABLE, 0)); 133ef36ef67e009449300b0150c60c9f637e205d79eWink Saville return; 134ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 135ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 136ef36ef67e009449300b0150c60c9f637e205d79eWink Saville mPendingCmds.put(Integer.valueOf(id), result); 137ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } catch (RemoteException e) { 138f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh sendFailureReport(result, 139f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh new ImsReasonInfo(ImsReasonInfo.CODE_UT_SERVICE_UNAVAILABLE, 0)); 140ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 141ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 142ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 143ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 144ef36ef67e009449300b0150c60c9f637e205d79eWink Saville /** 145ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Retrieves the configuration of the call forward. 146ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * The return value of ((AsyncResult)result.obj) is an array of {@link ImsCallForwardInfo}. 147ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 148ef36ef67e009449300b0150c60c9f637e205d79eWink Saville @Override 149ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public void queryCallForward(int condition, String number, Message result) { 150ef36ef67e009449300b0150c60c9f637e205d79eWink Saville if (DBG) { 151ef36ef67e009449300b0150c60c9f637e205d79eWink Saville log("queryCallForward :: Ut=" + miUt + ", condition=" + condition 152ef36ef67e009449300b0150c60c9f637e205d79eWink Saville + ", number=" + number); 153ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 154ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 155ef36ef67e009449300b0150c60c9f637e205d79eWink Saville synchronized(mLockObj) { 156ef36ef67e009449300b0150c60c9f637e205d79eWink Saville try { 157ef36ef67e009449300b0150c60c9f637e205d79eWink Saville int id = miUt.queryCallForward(condition, number); 158ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 159ef36ef67e009449300b0150c60c9f637e205d79eWink Saville if (id < 0) { 160f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh sendFailureReport(result, 161f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh new ImsReasonInfo(ImsReasonInfo.CODE_UT_SERVICE_UNAVAILABLE, 0)); 162ef36ef67e009449300b0150c60c9f637e205d79eWink Saville return; 163ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 164ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 165ef36ef67e009449300b0150c60c9f637e205d79eWink Saville mPendingCmds.put(Integer.valueOf(id), result); 166ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } catch (RemoteException e) { 167f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh sendFailureReport(result, 168f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh new ImsReasonInfo(ImsReasonInfo.CODE_UT_SERVICE_UNAVAILABLE, 0)); 169ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 170ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 171ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 172ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 173ef36ef67e009449300b0150c60c9f637e205d79eWink Saville /** 174ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Retrieves the configuration of the call waiting. 175ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * The return value of ((AsyncResult)result.obj) is an array of {@link ImsSsInfo}. 176ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 177ef36ef67e009449300b0150c60c9f637e205d79eWink Saville @Override 178ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public void queryCallWaiting(Message result) { 179ef36ef67e009449300b0150c60c9f637e205d79eWink Saville if (DBG) { 180ef36ef67e009449300b0150c60c9f637e205d79eWink Saville log("queryCallWaiting :: Ut=" + miUt); 181ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 182ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 183ef36ef67e009449300b0150c60c9f637e205d79eWink Saville synchronized(mLockObj) { 184ef36ef67e009449300b0150c60c9f637e205d79eWink Saville try { 185ef36ef67e009449300b0150c60c9f637e205d79eWink Saville int id = miUt.queryCallWaiting(); 186ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 187ef36ef67e009449300b0150c60c9f637e205d79eWink Saville if (id < 0) { 188f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh sendFailureReport(result, 189f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh new ImsReasonInfo(ImsReasonInfo.CODE_UT_SERVICE_UNAVAILABLE, 0)); 190ef36ef67e009449300b0150c60c9f637e205d79eWink Saville return; 191ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 192ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 193ef36ef67e009449300b0150c60c9f637e205d79eWink Saville mPendingCmds.put(Integer.valueOf(id), result); 194ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } catch (RemoteException e) { 195f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh sendFailureReport(result, 196f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh new ImsReasonInfo(ImsReasonInfo.CODE_UT_SERVICE_UNAVAILABLE, 0)); 197ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 198ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 199ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 200ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 201ef36ef67e009449300b0150c60c9f637e205d79eWink Saville /** 2029b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen * Retrieves the default CLIR setting. 2039b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen */ 2049b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen @Override 2059b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen public void queryCLIR(Message result) { 2069b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen if (DBG) { 2079b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen log("queryCLIR :: Ut=" + miUt); 2089b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen } 2099b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen 2109b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen synchronized(mLockObj) { 2119b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen try { 2129b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen int id = miUt.queryCLIR(); 2139b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen 2149b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen if (id < 0) { 215f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh sendFailureReport(result, 216f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh new ImsReasonInfo(ImsReasonInfo.CODE_UT_SERVICE_UNAVAILABLE, 0)); 2179b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen return; 2189b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen } 2199b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen 2209b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen mPendingCmds.put(Integer.valueOf(id), result); 2219b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen } catch (RemoteException e) { 222f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh sendFailureReport(result, 223f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh new ImsReasonInfo(ImsReasonInfo.CODE_UT_SERVICE_UNAVAILABLE, 0)); 2249b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen } 2259b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen } 2269b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen } 2279b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen 2289b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen /** 2299b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen * Retrieves the CLIP call setting. 2309b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen */ 2319b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen public void queryCLIP(Message result) { 2329b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen if (DBG) { 2339b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen log("queryCLIP :: Ut=" + miUt); 2349b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen } 2359b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen 2369b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen synchronized(mLockObj) { 2379b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen try { 2389b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen int id = miUt.queryCLIP(); 2399b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen 2409b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen if (id < 0) { 241f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh sendFailureReport(result, 242f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh new ImsReasonInfo(ImsReasonInfo.CODE_UT_SERVICE_UNAVAILABLE, 0)); 2439b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen return; 2449b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen } 2459b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen 2469b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen mPendingCmds.put(Integer.valueOf(id), result); 2479b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen } catch (RemoteException e) { 248f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh sendFailureReport(result, 249f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh new ImsReasonInfo(ImsReasonInfo.CODE_UT_SERVICE_UNAVAILABLE, 0)); 2509b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen } 2519b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen } 2529b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen } 2539b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen 2549b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen /** 2559b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen * Retrieves the COLR call setting. 2569b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen */ 2579b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen public void queryCOLR(Message result) { 2589b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen if (DBG) { 2599b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen log("queryCOLR :: Ut=" + miUt); 2609b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen } 2619b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen 2629b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen synchronized(mLockObj) { 2639b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen try { 2649b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen int id = miUt.queryCOLR(); 2659b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen 2669b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen if (id < 0) { 267f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh sendFailureReport(result, 268f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh new ImsReasonInfo(ImsReasonInfo.CODE_UT_SERVICE_UNAVAILABLE, 0)); 2699b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen return; 2709b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen } 2719b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen 2729b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen mPendingCmds.put(Integer.valueOf(id), result); 2739b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen } catch (RemoteException e) { 274f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh sendFailureReport(result, 275f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh new ImsReasonInfo(ImsReasonInfo.CODE_UT_SERVICE_UNAVAILABLE, 0)); 2769b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen } 2779b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen } 2789b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen } 2799b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen 2809b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen /** 2819b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen * Retrieves the COLP call setting. 2829b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen */ 2839b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen public void queryCOLP(Message result) { 2849b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen if (DBG) { 2859b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen log("queryCOLP :: Ut=" + miUt); 2869b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen } 2879b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen 2889b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen synchronized(mLockObj) { 2899b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen try { 2909b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen int id = miUt.queryCOLP(); 2919b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen 2929b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen if (id < 0) { 293f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh sendFailureReport(result, 294f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh new ImsReasonInfo(ImsReasonInfo.CODE_UT_SERVICE_UNAVAILABLE, 0)); 2959b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen return; 2969b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen } 2979b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen 2989b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen mPendingCmds.put(Integer.valueOf(id), result); 2999b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen } catch (RemoteException e) { 300f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh sendFailureReport(result, 301f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh new ImsReasonInfo(ImsReasonInfo.CODE_UT_SERVICE_UNAVAILABLE, 0)); 3029b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen } 3039b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen } 3049b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen } 3059b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen 3069b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen /** 307ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Modifies the configuration of the call barring. 308ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 309ef36ef67e009449300b0150c60c9f637e205d79eWink Saville @Override 310f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh public void updateCallBarring(int cbType, boolean enable, Message result, String[] barrList) { 311ef36ef67e009449300b0150c60c9f637e205d79eWink Saville if (DBG) { 312f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh if (barrList != null) { 313f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh String bList = new String(); 314f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh for (int i = 0; i < barrList.length; i++) { 315f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh bList.concat(barrList[i] + " "); 316f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh } 317f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh log("updateCallBarring :: Ut=" + miUt + ", cbType=" + cbType 318f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh + ", enable=" + enable + ", barrList=" + bList); 319f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh } 320f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh else { 321f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh log("updateCallBarring :: Ut=" + miUt + ", cbType=" + cbType 322f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh + ", enable=" + enable); 323f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh } 324ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 325ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 326ef36ef67e009449300b0150c60c9f637e205d79eWink Saville synchronized(mLockObj) { 327ef36ef67e009449300b0150c60c9f637e205d79eWink Saville try { 328f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh int id = miUt.updateCallBarring(cbType, enable, barrList); 329ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 330ef36ef67e009449300b0150c60c9f637e205d79eWink Saville if (id < 0) { 331f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh sendFailureReport(result, 332f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh new ImsReasonInfo(ImsReasonInfo.CODE_UT_SERVICE_UNAVAILABLE, 0)); 333ef36ef67e009449300b0150c60c9f637e205d79eWink Saville return; 334ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 335ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 336ef36ef67e009449300b0150c60c9f637e205d79eWink Saville mPendingCmds.put(Integer.valueOf(id), result); 337ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } catch (RemoteException e) { 338f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh sendFailureReport(result, 339f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh new ImsReasonInfo(ImsReasonInfo.CODE_UT_SERVICE_UNAVAILABLE, 0)); 340ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 341ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 342ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 343ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 344ef36ef67e009449300b0150c60c9f637e205d79eWink Saville /** 345ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Modifies the configuration of the call forward. 346ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 347ef36ef67e009449300b0150c60c9f637e205d79eWink Saville @Override 348ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public void updateCallForward(int action, int condition, String number, 349ef36ef67e009449300b0150c60c9f637e205d79eWink Saville int timeSeconds, Message result) { 350ef36ef67e009449300b0150c60c9f637e205d79eWink Saville if (DBG) { 351ef36ef67e009449300b0150c60c9f637e205d79eWink Saville log("updateCallForward :: Ut=" + miUt + ", action=" + action 352ef36ef67e009449300b0150c60c9f637e205d79eWink Saville + ", condition=" + condition + ", number=" + number 353ef36ef67e009449300b0150c60c9f637e205d79eWink Saville + ", timeSeconds=" + timeSeconds); 354ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 355ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 356ef36ef67e009449300b0150c60c9f637e205d79eWink Saville synchronized(mLockObj) { 357ef36ef67e009449300b0150c60c9f637e205d79eWink Saville try { 358ef36ef67e009449300b0150c60c9f637e205d79eWink Saville int id = miUt.updateCallForward(action, condition, number, timeSeconds); 359ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 360ef36ef67e009449300b0150c60c9f637e205d79eWink Saville if (id < 0) { 361f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh sendFailureReport(result, 362f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh new ImsReasonInfo(ImsReasonInfo.CODE_UT_SERVICE_UNAVAILABLE, 0)); 363ef36ef67e009449300b0150c60c9f637e205d79eWink Saville return; 364ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 365ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 366ef36ef67e009449300b0150c60c9f637e205d79eWink Saville mPendingCmds.put(Integer.valueOf(id), result); 367ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } catch (RemoteException e) { 368f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh sendFailureReport(result, 369f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh new ImsReasonInfo(ImsReasonInfo.CODE_UT_SERVICE_UNAVAILABLE, 0)); 370ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 371ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 372ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 373ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 374ef36ef67e009449300b0150c60c9f637e205d79eWink Saville /** 375ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Modifies the configuration of the call waiting. 376ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 377ef36ef67e009449300b0150c60c9f637e205d79eWink Saville @Override 378ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public void updateCallWaiting(boolean enable, Message result) { 379ef36ef67e009449300b0150c60c9f637e205d79eWink Saville if (DBG) { 380ef36ef67e009449300b0150c60c9f637e205d79eWink Saville log("updateCallWaiting :: Ut=" + miUt + ", enable=" + enable); 381ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 382ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 383ef36ef67e009449300b0150c60c9f637e205d79eWink Saville synchronized(mLockObj) { 384ef36ef67e009449300b0150c60c9f637e205d79eWink Saville try { 385ef36ef67e009449300b0150c60c9f637e205d79eWink Saville int id = miUt.updateCallWaiting(enable); 386ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 387ef36ef67e009449300b0150c60c9f637e205d79eWink Saville if (id < 0) { 388f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh sendFailureReport(result, 389f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh new ImsReasonInfo(ImsReasonInfo.CODE_UT_SERVICE_UNAVAILABLE, 0)); 390ef36ef67e009449300b0150c60c9f637e205d79eWink Saville return; 391ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 392ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 393ef36ef67e009449300b0150c60c9f637e205d79eWink Saville mPendingCmds.put(Integer.valueOf(id), result); 394ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } catch (RemoteException e) { 395f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh sendFailureReport(result, 396f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh new ImsReasonInfo(ImsReasonInfo.CODE_UT_SERVICE_UNAVAILABLE, 0)); 397ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 398ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 399ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 400ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 4019b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen /** 4029b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen * Updates the configuration of the CLIR supplementary service. 4039b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen */ 4049b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen @Override 4059b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen public void updateCLIR(int clirMode, Message result) { 4069b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen if (DBG) { 4079b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen log("updateCLIR :: Ut=" + miUt + ", clirMode=" + clirMode); 4089b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen } 4099b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen 4109b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen synchronized(mLockObj) { 4119b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen try { 4129b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen int id = miUt.updateCLIR(clirMode); 4139b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen 4149b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen if (id < 0) { 415f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh sendFailureReport(result, 416f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh new ImsReasonInfo(ImsReasonInfo.CODE_UT_SERVICE_UNAVAILABLE, 0)); 4179b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen return; 4189b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen } 4199b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen 4209b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen mPendingCmds.put(Integer.valueOf(id), result); 4219b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen } catch (RemoteException e) { 422f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh sendFailureReport(result, 423f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh new ImsReasonInfo(ImsReasonInfo.CODE_UT_SERVICE_UNAVAILABLE, 0)); 4249b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen } 4259b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen } 4269b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen } 4279b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen 4289b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen /** 4299b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen * Updates the configuration of the CLIP supplementary service. 4309b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen */ 4319b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen @Override 4329b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen public void updateCLIP(boolean enable, Message result) { 4339b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen if (DBG) { 4349b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen log("updateCLIP :: Ut=" + miUt + ", enable=" + enable); 4359b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen } 4369b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen 4379b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen synchronized(mLockObj) { 4389b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen try { 4399b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen int id = miUt.updateCLIP(enable); 4409b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen 4419b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen if (id < 0) { 442f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh sendFailureReport(result, 443f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh new ImsReasonInfo(ImsReasonInfo.CODE_UT_SERVICE_UNAVAILABLE, 0)); 4449b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen return; 4459b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen } 4469b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen 4479b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen mPendingCmds.put(Integer.valueOf(id), result); 4489b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen } catch (RemoteException e) { 449f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh sendFailureReport(result, 450f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh new ImsReasonInfo(ImsReasonInfo.CODE_UT_SERVICE_UNAVAILABLE, 0)); 4519b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen } 4529b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen } 4539b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen } 4549b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen 4559b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen /** 4569b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen * Updates the configuration of the COLR supplementary service. 4579b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen */ 4589b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen @Override 4599b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen public void updateCOLR(int presentation, Message result) { 4609b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen if (DBG) { 4619b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen log("updateCOLR :: Ut=" + miUt + ", presentation=" + presentation); 4629b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen } 4639b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen 4649b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen synchronized(mLockObj) { 4659b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen try { 4669b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen int id = miUt.updateCOLR(presentation); 4679b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen 4689b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen if (id < 0) { 469f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh sendFailureReport(result, 470f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh new ImsReasonInfo(ImsReasonInfo.CODE_UT_SERVICE_UNAVAILABLE, 0)); 4719b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen return; 4729b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen } 4739b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen 4749b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen mPendingCmds.put(Integer.valueOf(id), result); 4759b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen } catch (RemoteException e) { 476f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh sendFailureReport(result, 477f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh new ImsReasonInfo(ImsReasonInfo.CODE_UT_SERVICE_UNAVAILABLE, 0)); 4789b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen } 4799b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen } 4809b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen } 4819b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen 4829b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen /** 4839b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen * Updates the configuration of the COLP supplementary service. 4849b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen */ 4859b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen @Override 4869b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen public void updateCOLP(boolean enable, Message result) { 4879b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen if (DBG) { 4889b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen log("updateCallWaiting :: Ut=" + miUt + ", enable=" + enable); 4899b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen } 4909b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen 4919b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen synchronized(mLockObj) { 4929b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen try { 4939b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen int id = miUt.updateCOLP(enable); 4949b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen 4959b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen if (id < 0) { 496f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh sendFailureReport(result, 497f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh new ImsReasonInfo(ImsReasonInfo.CODE_UT_SERVICE_UNAVAILABLE, 0)); 4989b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen return; 4999b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen } 5009b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen 5019b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen mPendingCmds.put(Integer.valueOf(id), result); 5029b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen } catch (RemoteException e) { 503f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh sendFailureReport(result, 504f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh new ImsReasonInfo(ImsReasonInfo.CODE_UT_SERVICE_UNAVAILABLE, 0)); 5059b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen } 5069b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen } 5079b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen } 5089b4ca89882b8b403b36462972b826ac9199a34a4Etan Cohen 509ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public void transact(Bundle ssInfo, Message result) { 510ef36ef67e009449300b0150c60c9f637e205d79eWink Saville if (DBG) { 511ef36ef67e009449300b0150c60c9f637e205d79eWink Saville log("transact :: Ut=" + miUt + ", ssInfo=" + ssInfo); 512ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 513ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 514ef36ef67e009449300b0150c60c9f637e205d79eWink Saville synchronized(mLockObj) { 515ef36ef67e009449300b0150c60c9f637e205d79eWink Saville try { 516ef36ef67e009449300b0150c60c9f637e205d79eWink Saville int id = miUt.transact(ssInfo); 517ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 518ef36ef67e009449300b0150c60c9f637e205d79eWink Saville if (id < 0) { 519f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh sendFailureReport(result, 520f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh new ImsReasonInfo(ImsReasonInfo.CODE_UT_SERVICE_UNAVAILABLE, 0)); 521ef36ef67e009449300b0150c60c9f637e205d79eWink Saville return; 522ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 523ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 524ef36ef67e009449300b0150c60c9f637e205d79eWink Saville mPendingCmds.put(Integer.valueOf(id), result); 525ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } catch (RemoteException e) { 526f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh sendFailureReport(result, 527f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh new ImsReasonInfo(ImsReasonInfo.CODE_UT_SERVICE_UNAVAILABLE, 0)); 528ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 529ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 530ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 531ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 532f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh private void sendFailureReport(Message result, ImsReasonInfo error) { 533f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh if (result == null || error == null) { 534ef36ef67e009449300b0150c60c9f637e205d79eWink Saville return; 535ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 536ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 537f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh String errorString; 538f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh // If ImsReasonInfo object does not have a String error code, use a 539f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh // default error string. 540f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh if (error.mExtraMessage == null) { 541f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh errorString = new String("IMS UT exception"); 542f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh } 543f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh else { 544f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh errorString = new String(error.mExtraMessage); 545f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh } 546f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh AsyncResult.forMessage(result, null, new ImsException(errorString, error.mCode)); 547ef36ef67e009449300b0150c60c9f637e205d79eWink Saville result.sendToTarget(); 548ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 549ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 550ef36ef67e009449300b0150c60c9f637e205d79eWink Saville private void sendSuccessReport(Message result) { 551ef36ef67e009449300b0150c60c9f637e205d79eWink Saville if (result == null) { 552ef36ef67e009449300b0150c60c9f637e205d79eWink Saville return; 553ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 554ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 555ef36ef67e009449300b0150c60c9f637e205d79eWink Saville AsyncResult.forMessage(result, null, null); 556ef36ef67e009449300b0150c60c9f637e205d79eWink Saville result.sendToTarget(); 557ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 558ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 559ef36ef67e009449300b0150c60c9f637e205d79eWink Saville private void sendSuccessReport(Message result, Object ssInfo) { 560ef36ef67e009449300b0150c60c9f637e205d79eWink Saville if (result == null) { 561ef36ef67e009449300b0150c60c9f637e205d79eWink Saville return; 562ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 563ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 564ef36ef67e009449300b0150c60c9f637e205d79eWink Saville AsyncResult.forMessage(result, ssInfo, null); 565ef36ef67e009449300b0150c60c9f637e205d79eWink Saville result.sendToTarget(); 566ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 567ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 568ef36ef67e009449300b0150c60c9f637e205d79eWink Saville private void log(String s) { 569ef36ef67e009449300b0150c60c9f637e205d79eWink Saville Rlog.d(TAG, s); 570ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 571ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 572ef36ef67e009449300b0150c60c9f637e205d79eWink Saville private void loge(String s) { 573ef36ef67e009449300b0150c60c9f637e205d79eWink Saville Rlog.e(TAG, s); 574ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 575ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 576ef36ef67e009449300b0150c60c9f637e205d79eWink Saville private void loge(String s, Throwable t) { 577ef36ef67e009449300b0150c60c9f637e205d79eWink Saville Rlog.e(TAG, s, t); 578ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 579ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 580ef36ef67e009449300b0150c60c9f637e205d79eWink Saville /** 581ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * A listener type for the result of the supplementary service configuration. 582ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 583ef36ef67e009449300b0150c60c9f637e205d79eWink Saville private class IImsUtListenerProxy extends IImsUtListener.Stub { 584ef36ef67e009449300b0150c60c9f637e205d79eWink Saville /** 585ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Notifies the result of the supplementary service configuration udpate. 586ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 587ef36ef67e009449300b0150c60c9f637e205d79eWink Saville @Override 588ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public void utConfigurationUpdated(IImsUt ut, int id) { 589ef36ef67e009449300b0150c60c9f637e205d79eWink Saville Integer key = Integer.valueOf(id); 590ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 591ef36ef67e009449300b0150c60c9f637e205d79eWink Saville synchronized(mLockObj) { 592ef36ef67e009449300b0150c60c9f637e205d79eWink Saville sendSuccessReport(mPendingCmds.get(key)); 593ef36ef67e009449300b0150c60c9f637e205d79eWink Saville mPendingCmds.remove(key); 594ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 595ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 596ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 597ef36ef67e009449300b0150c60c9f637e205d79eWink Saville @Override 598f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh public void utConfigurationUpdateFailed(IImsUt ut, int id, ImsReasonInfo error) { 599ef36ef67e009449300b0150c60c9f637e205d79eWink Saville Integer key = Integer.valueOf(id); 600ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 601ef36ef67e009449300b0150c60c9f637e205d79eWink Saville synchronized(mLockObj) { 602f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh sendFailureReport(mPendingCmds.get(key), error); 603ef36ef67e009449300b0150c60c9f637e205d79eWink Saville mPendingCmds.remove(key); 604ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 605ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 606ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 607ef36ef67e009449300b0150c60c9f637e205d79eWink Saville /** 608ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Notifies the result of the supplementary service configuration query. 609ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 610ef36ef67e009449300b0150c60c9f637e205d79eWink Saville @Override 611ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public void utConfigurationQueried(IImsUt ut, int id, Bundle ssInfo) { 612ef36ef67e009449300b0150c60c9f637e205d79eWink Saville Integer key = Integer.valueOf(id); 613ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 614ef36ef67e009449300b0150c60c9f637e205d79eWink Saville synchronized(mLockObj) { 615ef36ef67e009449300b0150c60c9f637e205d79eWink Saville sendSuccessReport(mPendingCmds.get(key), ssInfo); 616ef36ef67e009449300b0150c60c9f637e205d79eWink Saville mPendingCmds.remove(key); 617ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 618ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 619ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 620ef36ef67e009449300b0150c60c9f637e205d79eWink Saville @Override 621f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh public void utConfigurationQueryFailed(IImsUt ut, int id, ImsReasonInfo error) { 622ef36ef67e009449300b0150c60c9f637e205d79eWink Saville Integer key = Integer.valueOf(id); 623ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 624ef36ef67e009449300b0150c60c9f637e205d79eWink Saville synchronized(mLockObj) { 625f54a9cc3d97915245086cdbf32cc2fbe8bfaea8cShriram Ganesh sendFailureReport(mPendingCmds.get(key), error); 626ef36ef67e009449300b0150c60c9f637e205d79eWink Saville mPendingCmds.remove(key); 627ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 628ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 629ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 630ef36ef67e009449300b0150c60c9f637e205d79eWink Saville /** 631ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Notifies the status of the call barring supplementary service. 632ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 633ef36ef67e009449300b0150c60c9f637e205d79eWink Saville @Override 634ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public void utConfigurationCallBarringQueried(IImsUt ut, 635ef36ef67e009449300b0150c60c9f637e205d79eWink Saville int id, ImsSsInfo[] cbInfo) { 636ef36ef67e009449300b0150c60c9f637e205d79eWink Saville Integer key = Integer.valueOf(id); 637ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 638ef36ef67e009449300b0150c60c9f637e205d79eWink Saville synchronized(mLockObj) { 639ef36ef67e009449300b0150c60c9f637e205d79eWink Saville sendSuccessReport(mPendingCmds.get(key), cbInfo); 640ef36ef67e009449300b0150c60c9f637e205d79eWink Saville mPendingCmds.remove(key); 641ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 642ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 643ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 644ef36ef67e009449300b0150c60c9f637e205d79eWink Saville /** 645ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Notifies the status of the call forwarding supplementary service. 646ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 647ef36ef67e009449300b0150c60c9f637e205d79eWink Saville @Override 648ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public void utConfigurationCallForwardQueried(IImsUt ut, 649ef36ef67e009449300b0150c60c9f637e205d79eWink Saville int id, ImsCallForwardInfo[] cfInfo) { 650ef36ef67e009449300b0150c60c9f637e205d79eWink Saville Integer key = Integer.valueOf(id); 651ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 652ef36ef67e009449300b0150c60c9f637e205d79eWink Saville synchronized(mLockObj) { 653ef36ef67e009449300b0150c60c9f637e205d79eWink Saville sendSuccessReport(mPendingCmds.get(key), cfInfo); 654ef36ef67e009449300b0150c60c9f637e205d79eWink Saville mPendingCmds.remove(key); 655ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 656ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 657ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 658ef36ef67e009449300b0150c60c9f637e205d79eWink Saville /** 659ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Notifies the status of the call waiting supplementary service. 660ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 661ef36ef67e009449300b0150c60c9f637e205d79eWink Saville @Override 662ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public void utConfigurationCallWaitingQueried(IImsUt ut, 663ef36ef67e009449300b0150c60c9f637e205d79eWink Saville int id, ImsSsInfo[] cwInfo) { 664ef36ef67e009449300b0150c60c9f637e205d79eWink Saville Integer key = Integer.valueOf(id); 665ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 666ef36ef67e009449300b0150c60c9f637e205d79eWink Saville synchronized(mLockObj) { 667ef36ef67e009449300b0150c60c9f637e205d79eWink Saville sendSuccessReport(mPendingCmds.get(key), cwInfo); 668ef36ef67e009449300b0150c60c9f637e205d79eWink Saville mPendingCmds.remove(key); 669ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 670ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 671ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 672ef36ef67e009449300b0150c60c9f637e205d79eWink Saville} 673