IccProvider.java revision 34efc39f256d5833687c7bd7d83258d6394c9307
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2006 The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License.
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License.
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1704e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Savillepackage com.android.internal.telephony;
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.ContentProvider;
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.UriMatcher;
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.ContentValues;
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport com.android.internal.database.ArrayListCursor;
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.database.Cursor;
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.net.Uri;
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.SystemProperties;
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.RemoteException;
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.ServiceManager;
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.text.TextUtils;
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.Log;
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.ArrayList;
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.List;
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3404e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Savilleimport com.android.internal.telephony.IccConstants;
3504e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Savilleimport com.android.internal.telephony.AdnRecord;
3604e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Savilleimport com.android.internal.telephony.IIccPhoneBook;
3704e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville
3804e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@hide}
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
4204e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Savillepublic class IccProvider extends ContentProvider {
4304e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    private static final String TAG = "IccProvider";
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private static final boolean DBG = false;
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private static final String[] ADDRESS_BOOK_COLUMN_NAMES = new String[] {
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        "name",
4934efc39f256d5833687c7bd7d83258d6394c9307Jaikumar Ganesh        "number",
5034efc39f256d5833687c7bd7d83258d6394c9307Jaikumar Ganesh        "emails"
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    };
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private static final int ADN = 1;
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private static final int FDN = 2;
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private static final int SDN = 3;
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private static final String STR_TAG = "tag";
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private static final String STR_NUMBER = "number";
5934efc39f256d5833687c7bd7d83258d6394c9307Jaikumar Ganesh    private static final String STR_EMAILS = "emails";
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private static final String STR_PIN2 = "pin2";
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private static final UriMatcher URL_MATCHER =
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            new UriMatcher(UriMatcher.NO_MATCH);
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    static {
6604e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville        URL_MATCHER.addURI("icc", "adn", ADN);
6704e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville        URL_MATCHER.addURI("icc", "fdn", FDN);
6804e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville        URL_MATCHER.addURI("icc", "sdn", SDN);
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private boolean mSimulator;
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Override
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public boolean onCreate() {
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        String device = SystemProperties.get("ro.product.device");
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (!TextUtils.isEmpty(device)) {
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mSimulator = false;
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } else {
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            // simulator
819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mSimulator = true;
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return true;
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Override
889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public Cursor query(Uri url, String[] projection, String selection,
899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            String[] selectionArgs, String sort) {
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        ArrayList<ArrayList> results;
9104e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (!mSimulator) {
939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            switch (URL_MATCHER.match(url)) {
949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                case ADN:
9504e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville                    results = loadFromEf(IccConstants.EF_ADN);
969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    break;
9704e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville
989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                case FDN:
9904e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville                    results = loadFromEf(IccConstants.EF_FDN);
1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    break;
10104e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville
1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                case SDN:
10304e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville                    results = loadFromEf(IccConstants.EF_SDN);
1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    break;
10504e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville
1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                default:
1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    throw new IllegalArgumentException("Unknown URL " + url);
1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } else {
1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            // Fake up some data for the simulator
1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            results = new ArrayList<ArrayList>(4);
1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            ArrayList<String> contact;
1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            contact = new ArrayList<String>();
1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            contact.add("Ron Stevens/H");
1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            contact.add("512-555-5038");
1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            results.add(contact);
1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            contact = new ArrayList<String>();
1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            contact.add("Ron Stevens/M");
1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            contact.add("512-555-8305");
1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            results.add(contact);
1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            contact = new ArrayList<String>();
1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            contact.add("Melissa Owens");
1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            contact.add("512-555-8305");
1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            results.add(contact);
1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            contact = new ArrayList<String>();
1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            contact.add("Directory Assistence");
1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            contact.add("411");
1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            results.add(contact);
1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return new ArrayListCursor(ADDRESS_BOOK_COLUMN_NAMES, results);
1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Override
1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String getType(Uri url) {
1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        switch (URL_MATCHER.match(url)) {
1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case ADN:
1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case FDN:
1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case SDN:
1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return "vnd.android.cursor.dir/sim-contact";
1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            default:
1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                throw new IllegalArgumentException("Unknown URL " + url);
1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Override
1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public Uri insert(Uri url, ContentValues initialValues) {
1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Uri resultUri;
1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int efType;
1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        String pin2 = null;
1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (DBG) log("insert");
1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int match = URL_MATCHER.match(url);
1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        switch (match) {
1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case ADN:
16204e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville                efType = IccConstants.EF_ADN;
1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                break;
1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case FDN:
16604e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville                efType = IccConstants.EF_FDN;
1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                pin2 = initialValues.getAsString("pin2");
1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                break;
1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            default:
1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                throw new UnsupportedOperationException(
1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        "Cannot insert into URL: " + url);
1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        String tag = initialValues.getAsString("tag");
1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        String number = initialValues.getAsString("number");
17734efc39f256d5833687c7bd7d83258d6394c9307Jaikumar Ganesh        // TODO(): Read email instead of sending null.
17834efc39f256d5833687c7bd7d83258d6394c9307Jaikumar Ganesh        boolean success = addIccRecordToEf(efType, tag, number, null, pin2);
1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (!success) {
1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return null;
1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        StringBuilder buf = new StringBuilder("content://im/");
1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        switch (match) {
1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case ADN:
1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                buf.append("adn/");
1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                break;
1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case FDN:
1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                buf.append("fdn/");
1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                break;
1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
19404e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville
1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // TODO: we need to find out the rowId for the newly added record
1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        buf.append(0);
1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        resultUri = Uri.parse(buf.toString());
1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /*
2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // notify interested parties that an insertion happened
2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        getContext().getContentResolver().notifyInsert(
2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                resultUri, rowID, null);
2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        */
2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return resultUri;
2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private String normalizeValue(String inVal) {
2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int len = inVal.length();
2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        String retVal = inVal;
2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (inVal.charAt(0) == '\'' && inVal.charAt(len-1) == '\'') {
2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            retVal = inVal.substring(1, len-1);
2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return retVal;
2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Override
2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int delete(Uri url, String where, String[] whereArgs) {
2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int efType;
2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (DBG) log("delete");
2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int match = URL_MATCHER.match(url);
2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        switch (match) {
2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case ADN:
22904e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville                efType = IccConstants.EF_ADN;
2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                break;
2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case FDN:
23304e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville                efType = IccConstants.EF_FDN;
2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                break;
2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            default:
2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                throw new UnsupportedOperationException(
2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        "Cannot insert into URL: " + url);
2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // parse where clause
2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        String tag = null;
2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        String number = null;
24434efc39f256d5833687c7bd7d83258d6394c9307Jaikumar Ganesh        String[] emails = null;
2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        String pin2 = null;
2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        String[] tokens = where.split("AND");
2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int n = tokens.length;
2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        while (--n >= 0) {
2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            String param = tokens[n];
2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (DBG) log("parsing '" + param + "'");
2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            String[] pair = param.split("=");
2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (pair.length != 2) {
2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Log.e(TAG, "resolve: bad whereClause parameter: " + param);
2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                continue;
2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            String key = pair[0].trim();
2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            String val = pair[1].trim();
2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (STR_TAG.equals(key)) {
2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                tag = normalizeValue(val);
2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            } else if (STR_NUMBER.equals(key)) {
2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                number = normalizeValue(val);
26834efc39f256d5833687c7bd7d83258d6394c9307Jaikumar Ganesh            } else if (STR_EMAILS.equals(key)) {
26934efc39f256d5833687c7bd7d83258d6394c9307Jaikumar Ganesh                //TODO(): Email is null.
27034efc39f256d5833687c7bd7d83258d6394c9307Jaikumar Ganesh                emails = null;
2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            } else if (STR_PIN2.equals(key)) {
2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                pin2 = normalizeValue(val);
2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (TextUtils.isEmpty(tag)) {
2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return 0;
2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (efType == FDN && TextUtils.isEmpty(pin2)) {
2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return 0;
2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
28434efc39f256d5833687c7bd7d83258d6394c9307Jaikumar Ganesh        boolean success = deleteIccRecordFromEf(efType, tag, number, emails, pin2);
2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (!success) {
2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return 0;
2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return 1;
2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Override
2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int update(Uri url, ContentValues values, String where, String[] whereArgs) {
2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int efType;
2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        String pin2 = null;
2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (DBG) log("update");
2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int match = URL_MATCHER.match(url);
3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        switch (match) {
3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case ADN:
30204e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville                efType = IccConstants.EF_ADN;
3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                break;
3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case FDN:
30604e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville                efType = IccConstants.EF_FDN;
3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                pin2 = values.getAsString("pin2");
3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                break;
3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            default:
3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                throw new UnsupportedOperationException(
3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        "Cannot insert into URL: " + url);
3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        String tag = values.getAsString("tag");
3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        String number = values.getAsString("number");
31734efc39f256d5833687c7bd7d83258d6394c9307Jaikumar Ganesh        String[] emails = null;
3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        String newTag = values.getAsString("newTag");
3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        String newNumber = values.getAsString("newNumber");
32034efc39f256d5833687c7bd7d83258d6394c9307Jaikumar Ganesh        String[] newEmails = null;
32134efc39f256d5833687c7bd7d83258d6394c9307Jaikumar Ganesh        // TODO(): Update for email.
32204e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville        boolean success = updateIccRecordInEf(efType, tag, number,
3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                newTag, newNumber, pin2);
3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (!success) {
3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return 0;
3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return 1;
3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private ArrayList<ArrayList> loadFromEf(int efType) {
3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        ArrayList<ArrayList> results = new ArrayList<ArrayList>();
3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        List<AdnRecord> adnRecords = null;
3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (DBG) log("loadFromEf: efType=" + efType);
3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
33904e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville            IIccPhoneBook iccIpb = IIccPhoneBook.Stub.asInterface(
3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    ServiceManager.getService("simphonebook"));
34104e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville            if (iccIpb != null) {
34204e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville                adnRecords = iccIpb.getAdnRecordsInEf(efType);
3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } catch (RemoteException ex) {
3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            // ignore it
3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } catch (SecurityException ex) {
3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (DBG) log(ex.toString());
3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (adnRecords != null) {
3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            // Load the results
3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int N = adnRecords.size();
3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (DBG) log("adnRecords.size=" + N);
3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            for (int i = 0; i < N ; i++) {
3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                loadRecord(adnRecords.get(i), results);
3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } else {
3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            // No results to load
3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.w(TAG, "Cannot load ADN records");
3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            results.clear();
3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (DBG) log("loadFromEf: return results");
3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return results;
3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private boolean
36734efc39f256d5833687c7bd7d83258d6394c9307Jaikumar Ganesh    addIccRecordToEf(int efType, String name, String number, String[] emails, String pin2) {
36804e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville        if (DBG) log("addIccRecordToEf: efType=" + efType + ", name=" + name +
36934efc39f256d5833687c7bd7d83258d6394c9307Jaikumar Ganesh                ", number=" + number + ", emails=" + emails);
3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        boolean success = false;
3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // TODO: do we need to call getAdnRecordsInEf() before calling
3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // updateAdnRecordsInEfBySearch()? In any case, we will leave
3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // the UI level logic to fill that prereq if necessary. But
3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // hopefully, we can remove this requirement.
37704e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville
3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
37904e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville            IIccPhoneBook iccIpb = IIccPhoneBook.Stub.asInterface(
3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    ServiceManager.getService("simphonebook"));
38104e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville            if (iccIpb != null) {
38204e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville                success = iccIpb.updateAdnRecordsInEfBySearch(efType, "", "",
3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        name, number, pin2);
3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } catch (RemoteException ex) {
3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            // ignore it
3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } catch (SecurityException ex) {
3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (DBG) log(ex.toString());
3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
39004e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville        if (DBG) log("addIccRecordToEf: " + success);
3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return success;
3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private boolean
39504e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    updateIccRecordInEf(int efType, String oldName, String oldNumber,
39634efc39f256d5833687c7bd7d83258d6394c9307Jaikumar Ganesh            String newName, String newNumber, String pin2) {
39704e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville        if (DBG) log("updateIccRecordInEf: efType=" + efType +
3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                ", oldname=" + oldName + ", oldnumber=" + oldNumber +
3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                ", newname=" + newName + ", newnumber=" + newNumber);
4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        boolean success = false;
4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
40304e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville            IIccPhoneBook iccIpb = IIccPhoneBook.Stub.asInterface(
4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    ServiceManager.getService("simphonebook"));
40504e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville            if (iccIpb != null) {
40604e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville                success = iccIpb.updateAdnRecordsInEfBySearch(efType,
4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        oldName, oldNumber, newName, newNumber, pin2);
4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } catch (RemoteException ex) {
4109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            // ignore it
4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } catch (SecurityException ex) {
4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (DBG) log(ex.toString());
4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
41404e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville        if (DBG) log("updateIccRecordInEf: " + success);
4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return success;
4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
41934efc39f256d5833687c7bd7d83258d6394c9307Jaikumar Ganesh    private boolean deleteIccRecordFromEf(int efType, String name, String number, String[] emails,
42034efc39f256d5833687c7bd7d83258d6394c9307Jaikumar Ganesh            String pin2) {
42104e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville        if (DBG) log("deleteIccRecordFromEf: efType=" + efType +
42234efc39f256d5833687c7bd7d83258d6394c9307Jaikumar Ganesh                ", name=" + name + ", number=" + number + ", emails=" + emails + ", pin2=" + pin2);
4239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        boolean success = false;
4259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
42704e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville            IIccPhoneBook iccIpb = IIccPhoneBook.Stub.asInterface(
4289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    ServiceManager.getService("simphonebook"));
42904e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville            if (iccIpb != null) {
43004e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville                success = iccIpb.updateAdnRecordsInEfBySearch(efType,
43104e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville                        name, number, "", "", pin2);
4329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
4339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } catch (RemoteException ex) {
4349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            // ignore it
4359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } catch (SecurityException ex) {
4369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (DBG) log(ex.toString());
4379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
43804e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville        if (DBG) log("deleteIccRecordFromEf: " + success);
4399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return success;
4409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
4439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Loads an AdnRecord into an ArrayList. Must be called with mLock held.
4449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
4459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param record the ADN record to load from
4469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param results the array list to put the results in
4479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
4489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private void loadRecord(AdnRecord record,
4499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            ArrayList<ArrayList> results) {
4509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (!record.isEmpty()) {
45134efc39f256d5833687c7bd7d83258d6394c9307Jaikumar Ganesh            ArrayList<String> contact = new ArrayList<String>();
4529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            String alphaTag = record.getAlphaTag();
4539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            String number = record.getNumber();
45434efc39f256d5833687c7bd7d83258d6394c9307Jaikumar Ganesh            String[] emails = record.getEmails();
4559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
45634efc39f256d5833687c7bd7d83258d6394c9307Jaikumar Ganesh            if (DBG) log("loadRecord: " + alphaTag + ", " + number + ",");
4579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            contact.add(alphaTag);
4589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            contact.add(number);
45934efc39f256d5833687c7bd7d83258d6394c9307Jaikumar Ganesh            StringBuilder emailString = new StringBuilder();
46034efc39f256d5833687c7bd7d83258d6394c9307Jaikumar Ganesh
46134efc39f256d5833687c7bd7d83258d6394c9307Jaikumar Ganesh            if (emails != null) {
46234efc39f256d5833687c7bd7d83258d6394c9307Jaikumar Ganesh                for (String email: emails) {
46334efc39f256d5833687c7bd7d83258d6394c9307Jaikumar Ganesh                    if (DBG) log("Adding email:" + email);
46434efc39f256d5833687c7bd7d83258d6394c9307Jaikumar Ganesh                    emailString.append(email);
46534efc39f256d5833687c7bd7d83258d6394c9307Jaikumar Ganesh                    emailString.append(",");
46634efc39f256d5833687c7bd7d83258d6394c9307Jaikumar Ganesh                }
46734efc39f256d5833687c7bd7d83258d6394c9307Jaikumar Ganesh                contact.add(emailString.toString());
46834efc39f256d5833687c7bd7d83258d6394c9307Jaikumar Ganesh            } else {
46934efc39f256d5833687c7bd7d83258d6394c9307Jaikumar Ganesh                contact.add(null);
47034efc39f256d5833687c7bd7d83258d6394c9307Jaikumar Ganesh            }
4719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            results.add(contact);
4729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
4739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private void log(String msg) {
47604e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville        Log.d(TAG, "[IccProvider] " + msg);
4779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
480