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