IccProvider.java revision 12f413d29e1fb32f00213b1eaae6d45c856dc0d6
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 18412f413d29e1fb32f00213b1eaae6d45c856dc0d6jsh StringBuilder buf = new StringBuilder("content://icc/"); 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