1a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville/* 2a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * Copyright (C) 2008 The Android Open Source Project 3a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * Copyright (c) 2011-2013, The Linux Foundation. All rights reserved. 4a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * Not a Contribution. 5a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * 6a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * Licensed under the Apache License, Version 2.0 (the "License"); 7a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * you may not use this file except in compliance with the License. 8a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * You may obtain a copy of the License at 9a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * 10a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * http://www.apache.org/licenses/LICENSE-2.0 11a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * 12a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * Unless required by applicable law or agreed to in writing, software 13a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * distributed under the License is distributed on an "AS IS" BASIS, 14a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * See the License for the specific language governing permissions and 16a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * limitations under the License. 17a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville */ 18a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 19a8467dd0c524787104b1ccdddc5e8af10ba729edWink Savillepackage com.android.internal.telephony; 20a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 21a8467dd0c524787104b1ccdddc5e8af10ba729edWink Savilleimport android.os.ServiceManager; 22a8467dd0c524787104b1ccdddc5e8af10ba729edWink Savilleimport android.telephony.Rlog; 23a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 24a8467dd0c524787104b1ccdddc5e8af10ba729edWink Savilleimport com.android.internal.telephony.IIccPhoneBook; 25a8467dd0c524787104b1ccdddc5e8af10ba729edWink Savilleimport com.android.internal.telephony.uicc.AdnRecord; 26a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 27a8467dd0c524787104b1ccdddc5e8af10ba729edWink Savilleimport java.lang.ArrayIndexOutOfBoundsException; 28a8467dd0c524787104b1ccdddc5e8af10ba729edWink Savilleimport java.lang.NullPointerException; 29a8467dd0c524787104b1ccdddc5e8af10ba729edWink Savilleimport java.util.List; 30a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 31a8467dd0c524787104b1ccdddc5e8af10ba729edWink Savillepublic class UiccPhoneBookController extends IIccPhoneBook.Stub { 32a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville private static final String TAG = "UiccPhoneBookController"; 33a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville private Phone[] mPhone; 34a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 35a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville /* only one UiccPhoneBookController exists */ 36a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville public UiccPhoneBookController(Phone[] phone) { 37a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville if (ServiceManager.getService("simphonebook") == null) { 38a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville ServiceManager.addService("simphonebook", this); 39a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 40a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville mPhone = phone; 41a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 42a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 43b237a11044ed842d2865ff8c8716befb06b6ca25Wink Saville @Override 44a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville public boolean 45a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville updateAdnRecordsInEfBySearch (int efid, String oldTag, String oldPhoneNumber, 46a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville String newTag, String newPhoneNumber, String pin2) throws android.os.RemoteException { 476a5ef38e6ae3d3a3ad90ae180388fe85de0495a2Wink Saville return updateAdnRecordsInEfBySearchForSubscriber(getDefaultSubscription(), efid, oldTag, 48a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville oldPhoneNumber, newTag, newPhoneNumber, pin2); 49a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 50a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 51b237a11044ed842d2865ff8c8716befb06b6ca25Wink Saville @Override 52a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville public boolean 53b237a11044ed842d2865ff8c8716befb06b6ca25Wink Saville updateAdnRecordsInEfBySearchForSubscriber(int subId, int efid, String oldTag, 54a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville String oldPhoneNumber, String newTag, String newPhoneNumber, 55a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville String pin2) throws android.os.RemoteException { 562549bbfd0439b8b549712a2d255dcf05bca7f1ebAmit Mahajan IccPhoneBookInterfaceManager iccPbkIntMgr = 572549bbfd0439b8b549712a2d255dcf05bca7f1ebAmit Mahajan getIccPhoneBookInterfaceManager(subId); 582549bbfd0439b8b549712a2d255dcf05bca7f1ebAmit Mahajan if (iccPbkIntMgr != null) { 592549bbfd0439b8b549712a2d255dcf05bca7f1ebAmit Mahajan return iccPbkIntMgr.updateAdnRecordsInEfBySearch(efid, oldTag, 60a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville oldPhoneNumber, newTag, newPhoneNumber, pin2); 61a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } else { 622549bbfd0439b8b549712a2d255dcf05bca7f1ebAmit Mahajan Rlog.e(TAG,"updateAdnRecordsInEfBySearch iccPbkIntMgr is" + 63a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville " null for Subscription:"+subId); 64a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville return false; 65a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 66a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 67a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 68b237a11044ed842d2865ff8c8716befb06b6ca25Wink Saville @Override 69a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville public boolean 70a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville updateAdnRecordsInEfByIndex(int efid, String newTag, 71a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville String newPhoneNumber, int index, String pin2) throws android.os.RemoteException { 726a5ef38e6ae3d3a3ad90ae180388fe85de0495a2Wink Saville return updateAdnRecordsInEfByIndexForSubscriber(getDefaultSubscription(), efid, newTag, 73a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville newPhoneNumber, index, pin2); 74a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 75a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 76b237a11044ed842d2865ff8c8716befb06b6ca25Wink Saville @Override 77a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville public boolean 78b237a11044ed842d2865ff8c8716befb06b6ca25Wink Saville updateAdnRecordsInEfByIndexForSubscriber(int subId, int efid, String newTag, 79a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville String newPhoneNumber, int index, String pin2) throws android.os.RemoteException { 802549bbfd0439b8b549712a2d255dcf05bca7f1ebAmit Mahajan IccPhoneBookInterfaceManager iccPbkIntMgr = 812549bbfd0439b8b549712a2d255dcf05bca7f1ebAmit Mahajan getIccPhoneBookInterfaceManager(subId); 822549bbfd0439b8b549712a2d255dcf05bca7f1ebAmit Mahajan if (iccPbkIntMgr != null) { 832549bbfd0439b8b549712a2d255dcf05bca7f1ebAmit Mahajan return iccPbkIntMgr.updateAdnRecordsInEfByIndex(efid, newTag, 84a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville newPhoneNumber, index, pin2); 85a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } else { 862549bbfd0439b8b549712a2d255dcf05bca7f1ebAmit Mahajan Rlog.e(TAG,"updateAdnRecordsInEfByIndex iccPbkIntMgr is" + 87a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville " null for Subscription:"+subId); 88a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville return false; 89a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 90a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 91a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 92b237a11044ed842d2865ff8c8716befb06b6ca25Wink Saville @Override 93a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville public int[] getAdnRecordsSize(int efid) throws android.os.RemoteException { 946a5ef38e6ae3d3a3ad90ae180388fe85de0495a2Wink Saville return getAdnRecordsSizeForSubscriber(getDefaultSubscription(), efid); 95a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 96a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 97b237a11044ed842d2865ff8c8716befb06b6ca25Wink Saville @Override 98a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville public int[] 99b237a11044ed842d2865ff8c8716befb06b6ca25Wink Saville getAdnRecordsSizeForSubscriber(int subId, int efid) throws android.os.RemoteException { 1002549bbfd0439b8b549712a2d255dcf05bca7f1ebAmit Mahajan IccPhoneBookInterfaceManager iccPbkIntMgr = 1012549bbfd0439b8b549712a2d255dcf05bca7f1ebAmit Mahajan getIccPhoneBookInterfaceManager(subId); 1022549bbfd0439b8b549712a2d255dcf05bca7f1ebAmit Mahajan if (iccPbkIntMgr != null) { 1032549bbfd0439b8b549712a2d255dcf05bca7f1ebAmit Mahajan return iccPbkIntMgr.getAdnRecordsSize(efid); 104a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } else { 1052549bbfd0439b8b549712a2d255dcf05bca7f1ebAmit Mahajan Rlog.e(TAG,"getAdnRecordsSize iccPbkIntMgr is" + 106a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville " null for Subscription:"+subId); 107a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville return null; 108a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 109a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 110a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 111b237a11044ed842d2865ff8c8716befb06b6ca25Wink Saville @Override 112a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville public List<AdnRecord> getAdnRecordsInEf(int efid) throws android.os.RemoteException { 1136a5ef38e6ae3d3a3ad90ae180388fe85de0495a2Wink Saville return getAdnRecordsInEfForSubscriber(getDefaultSubscription(), efid); 114a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 115a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 116b237a11044ed842d2865ff8c8716befb06b6ca25Wink Saville @Override 117b237a11044ed842d2865ff8c8716befb06b6ca25Wink Saville public List<AdnRecord> getAdnRecordsInEfForSubscriber(int subId, int efid) 118a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville throws android.os.RemoteException { 1192549bbfd0439b8b549712a2d255dcf05bca7f1ebAmit Mahajan IccPhoneBookInterfaceManager iccPbkIntMgr = 1202549bbfd0439b8b549712a2d255dcf05bca7f1ebAmit Mahajan getIccPhoneBookInterfaceManager(subId); 1212549bbfd0439b8b549712a2d255dcf05bca7f1ebAmit Mahajan if (iccPbkIntMgr != null) { 1222549bbfd0439b8b549712a2d255dcf05bca7f1ebAmit Mahajan return iccPbkIntMgr.getAdnRecordsInEf(efid); 123a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } else { 1242549bbfd0439b8b549712a2d255dcf05bca7f1ebAmit Mahajan Rlog.e(TAG,"getAdnRecordsInEf iccPbkIntMgr is" + 125a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville "null for Subscription:"+subId); 126a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville return null; 127a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 128a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 129a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 130a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville /** 1312549bbfd0439b8b549712a2d255dcf05bca7f1ebAmit Mahajan * get phone book interface manager object based on subscription. 132a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville **/ 1332549bbfd0439b8b549712a2d255dcf05bca7f1ebAmit Mahajan private IccPhoneBookInterfaceManager 1342549bbfd0439b8b549712a2d255dcf05bca7f1ebAmit Mahajan getIccPhoneBookInterfaceManager(int subId) { 135a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 136b237a11044ed842d2865ff8c8716befb06b6ca25Wink Saville int phoneId = SubscriptionController.getInstance().getPhoneId(subId); 137a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville try { 1382549bbfd0439b8b549712a2d255dcf05bca7f1ebAmit Mahajan return mPhone[phoneId].getIccPhoneBookInterfaceManager(); 139a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } catch (NullPointerException e) { 140a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville Rlog.e(TAG, "Exception is :"+e.toString()+" For subscription :"+subId ); 141a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville e.printStackTrace(); //To print stack trace 142a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville return null; 143a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } catch (ArrayIndexOutOfBoundsException e) { 144a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville Rlog.e(TAG, "Exception is :"+e.toString()+" For subscription :"+subId ); 145a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville e.printStackTrace(); 146a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville return null; 147a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 148a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 149a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 150b237a11044ed842d2865ff8c8716befb06b6ca25Wink Saville private int getDefaultSubscription() { 151a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville return PhoneFactory.getDefaultSubscription(); 152a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 153a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville} 154