/* * Copyright (C) 2008 The Android Open Source Project * Copyright (c) 2011-2013, The Linux Foundation. All rights reserved. * Not a Contribution. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.internal.telephony; import android.os.ServiceManager; import android.os.RemoteException; import android.telephony.Rlog; import com.android.internal.telephony.IccPhoneBookInterfaceManagerProxy; import com.android.internal.telephony.IIccPhoneBook; import com.android.internal.telephony.Phone; import com.android.internal.telephony.uicc.AdnRecord; import java.lang.ArrayIndexOutOfBoundsException; import java.lang.NullPointerException; import java.util.List; public class UiccPhoneBookController extends IIccPhoneBook.Stub { private static final String TAG = "UiccPhoneBookController"; private Phone[] mPhone; /* only one UiccPhoneBookController exists */ public UiccPhoneBookController(Phone[] phone) { if (ServiceManager.getService("simphonebook") == null) { ServiceManager.addService("simphonebook", this); } mPhone = phone; } @Override public boolean updateAdnRecordsInEfBySearch (int efid, String oldTag, String oldPhoneNumber, String newTag, String newPhoneNumber, String pin2) throws android.os.RemoteException { return updateAdnRecordsInEfBySearchForSubscriber(getDefaultSubscription(), efid, oldTag, oldPhoneNumber, newTag, newPhoneNumber, pin2); } @Override public boolean updateAdnRecordsInEfBySearchForSubscriber(int subId, int efid, String oldTag, String oldPhoneNumber, String newTag, String newPhoneNumber, String pin2) throws android.os.RemoteException { IccPhoneBookInterfaceManagerProxy iccPbkIntMgrProxy = getIccPhoneBookInterfaceManagerProxy(subId); if (iccPbkIntMgrProxy != null) { return iccPbkIntMgrProxy.updateAdnRecordsInEfBySearch(efid, oldTag, oldPhoneNumber, newTag, newPhoneNumber, pin2); } else { Rlog.e(TAG,"updateAdnRecordsInEfBySearch iccPbkIntMgrProxy is" + " null for Subscription:"+subId); return false; } } @Override public boolean updateAdnRecordsInEfByIndex(int efid, String newTag, String newPhoneNumber, int index, String pin2) throws android.os.RemoteException { return updateAdnRecordsInEfByIndexForSubscriber(getDefaultSubscription(), efid, newTag, newPhoneNumber, index, pin2); } @Override public boolean updateAdnRecordsInEfByIndexForSubscriber(int subId, int efid, String newTag, String newPhoneNumber, int index, String pin2) throws android.os.RemoteException { IccPhoneBookInterfaceManagerProxy iccPbkIntMgrProxy = getIccPhoneBookInterfaceManagerProxy(subId); if (iccPbkIntMgrProxy != null) { return iccPbkIntMgrProxy.updateAdnRecordsInEfByIndex(efid, newTag, newPhoneNumber, index, pin2); } else { Rlog.e(TAG,"updateAdnRecordsInEfByIndex iccPbkIntMgrProxy is" + " null for Subscription:"+subId); return false; } } @Override public int[] getAdnRecordsSize(int efid) throws android.os.RemoteException { return getAdnRecordsSizeForSubscriber(getDefaultSubscription(), efid); } @Override public int[] getAdnRecordsSizeForSubscriber(int subId, int efid) throws android.os.RemoteException { IccPhoneBookInterfaceManagerProxy iccPbkIntMgrProxy = getIccPhoneBookInterfaceManagerProxy(subId); if (iccPbkIntMgrProxy != null) { return iccPbkIntMgrProxy.getAdnRecordsSize(efid); } else { Rlog.e(TAG,"getAdnRecordsSize iccPbkIntMgrProxy is" + " null for Subscription:"+subId); return null; } } @Override public List<AdnRecord> getAdnRecordsInEf(int efid) throws android.os.RemoteException { return getAdnRecordsInEfForSubscriber(getDefaultSubscription(), efid); } @Override public List<AdnRecord> getAdnRecordsInEfForSubscriber(int subId, int efid) throws android.os.RemoteException { IccPhoneBookInterfaceManagerProxy iccPbkIntMgrProxy = getIccPhoneBookInterfaceManagerProxy(subId); if (iccPbkIntMgrProxy != null) { return iccPbkIntMgrProxy.getAdnRecordsInEf(efid); } else { Rlog.e(TAG,"getAdnRecordsInEf iccPbkIntMgrProxy is" + "null for Subscription:"+subId); return null; } } /** * get phone book interface manager proxy object based on subscription. **/ private IccPhoneBookInterfaceManagerProxy getIccPhoneBookInterfaceManagerProxy(int subId) { int phoneId = SubscriptionController.getInstance().getPhoneId(subId); try { return ((PhoneProxy)mPhone[(int)phoneId]).getIccPhoneBookInterfaceManagerProxy(); } catch (NullPointerException e) { Rlog.e(TAG, "Exception is :"+e.toString()+" For subscription :"+subId ); e.printStackTrace(); //To print stack trace return null; } catch (ArrayIndexOutOfBoundsException e) { Rlog.e(TAG, "Exception is :"+e.toString()+" For subscription :"+subId ); e.printStackTrace(); return null; } } private int getDefaultSubscription() { return PhoneFactory.getDefaultSubscription(); } }