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; 222269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackbornimport android.database.AbstractCursor; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.database.Cursor; 242269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackbornimport android.database.CursorWindow; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.net.Uri; 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.SystemProperties; 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.RemoteException; 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.ServiceManager; 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.text.TextUtils; 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.Log; 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.ArrayList; 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.List; 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3504e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Savilleimport com.android.internal.telephony.IccConstants; 3604e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Savilleimport com.android.internal.telephony.AdnRecord; 3704e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Savilleimport com.android.internal.telephony.IIccPhoneBook; 3804e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville 392269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn/** 402269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn * XXX old code -- should be replaced with MatrixCursor. 412269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn * @deprecated This is has been replaced by MatrixCursor. 422269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn*/ 432269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackbornclass ArrayListCursor extends AbstractCursor { 442269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn private String[] mColumnNames; 452269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn private ArrayList<Object>[] mRows; 462269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn 472269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn @SuppressWarnings({"unchecked"}) 482269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn public ArrayListCursor(String[] columnNames, ArrayList<ArrayList> rows) { 492269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn int colCount = columnNames.length; 502269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn boolean foundID = false; 512269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn // Add an _id column if not in columnNames 522269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn for (int i = 0; i < colCount; ++i) { 532269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn if (columnNames[i].compareToIgnoreCase("_id") == 0) { 542269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn mColumnNames = columnNames; 552269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn foundID = true; 562269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn break; 572269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn } 582269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn } 592269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn 602269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn if (!foundID) { 612269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn mColumnNames = new String[colCount + 1]; 622269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn System.arraycopy(columnNames, 0, mColumnNames, 0, columnNames.length); 632269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn mColumnNames[colCount] = "_id"; 642269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn } 652269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn 662269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn int rowCount = rows.size(); 672269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn mRows = new ArrayList[rowCount]; 682269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn 692269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn for (int i = 0; i < rowCount; ++i) { 702269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn mRows[i] = rows.get(i); 712269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn if (!foundID) { 722269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn mRows[i].add(i); 732269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn } 742269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn } 752269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn } 762269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn 772269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn @Override 782269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn public void fillWindow(int position, CursorWindow window) { 792269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn if (position < 0 || position > getCount()) { 802269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn return; 812269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn } 822269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn 832269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn window.acquireReference(); 842269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn try { 852269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn int oldpos = mPos; 862269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn mPos = position - 1; 872269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn window.clear(); 882269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn window.setStartPosition(position); 892269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn int columnNum = getColumnCount(); 902269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn window.setNumColumns(columnNum); 912269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn while (moveToNext() && window.allocRow()) { 922269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn for (int i = 0; i < columnNum; i++) { 932269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn final Object data = mRows[mPos].get(i); 942269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn if (data != null) { 952269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn if (data instanceof byte[]) { 962269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn byte[] field = (byte[]) data; 972269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn if (!window.putBlob(field, mPos, i)) { 982269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn window.freeLastRow(); 992269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn break; 1002269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn } 1012269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn } else { 1022269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn String field = data.toString(); 1032269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn if (!window.putString(field, mPos, i)) { 1042269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn window.freeLastRow(); 1052269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn break; 1062269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn } 1072269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn } 1082269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn } else { 1092269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn if (!window.putNull(mPos, i)) { 1102269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn window.freeLastRow(); 1112269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn break; 1122269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn } 1132269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn } 1142269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn } 1152269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn } 1162269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn 1172269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn mPos = oldpos; 1182269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn } catch (IllegalStateException e){ 1192269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn // simply ignore it 1202269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn } finally { 1212269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn window.releaseReference(); 1222269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn } 1232269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn } 1242269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn 1252269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn @Override 1262269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn public int getCount() { 1272269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn return mRows.length; 1282269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn } 1292269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn 1302269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn @Override 1312269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn public String[] getColumnNames() { 1322269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn return mColumnNames; 1332269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn } 1342269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn 1352269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn @Override 1362269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn public byte[] getBlob(int columnIndex) { 1372269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn return (byte[]) mRows[mPos].get(columnIndex); 1382269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn } 1392269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn 1402269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn @Override 1412269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn public String getString(int columnIndex) { 1422269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn Object cell = mRows[mPos].get(columnIndex); 1432269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn return (cell == null) ? null : cell.toString(); 1442269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn } 1452269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn 1462269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn @Override 1472269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn public short getShort(int columnIndex) { 1482269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn Number num = (Number) mRows[mPos].get(columnIndex); 1492269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn return num.shortValue(); 1502269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn } 1512269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn 1522269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn @Override 1532269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn public int getInt(int columnIndex) { 1542269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn Number num = (Number) mRows[mPos].get(columnIndex); 1552269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn return num.intValue(); 1562269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn } 1572269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn 1582269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn @Override 1592269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn public long getLong(int columnIndex) { 1602269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn Number num = (Number) mRows[mPos].get(columnIndex); 1612269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn return num.longValue(); 1622269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn } 1632269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn 1642269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn @Override 1652269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn public float getFloat(int columnIndex) { 1662269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn Number num = (Number) mRows[mPos].get(columnIndex); 1672269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn return num.floatValue(); 1682269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn } 1692269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn 1702269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn @Override 1712269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn public double getDouble(int columnIndex) { 1722269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn Number num = (Number) mRows[mPos].get(columnIndex); 1732269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn return num.doubleValue(); 1742269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn } 1752269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn 1762269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn @Override 1772269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn public boolean isNull(int columnIndex) { 1782269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn return mRows[mPos].get(columnIndex) == null; 1792269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn } 1802269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn} 1812269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn 18204e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@hide} 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 18604e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Savillepublic class IccProvider extends ContentProvider { 18704e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville private static final String TAG = "IccProvider"; 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final boolean DBG = false; 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final String[] ADDRESS_BOOK_COLUMN_NAMES = new String[] { 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "name", 19334efc39f256d5833687c7bd7d83258d6394c9307Jaikumar Ganesh "number", 19434efc39f256d5833687c7bd7d83258d6394c9307Jaikumar Ganesh "emails" 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int ADN = 1; 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int FDN = 2; 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int SDN = 3; 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final String STR_TAG = "tag"; 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final String STR_NUMBER = "number"; 20334efc39f256d5833687c7bd7d83258d6394c9307Jaikumar Ganesh private static final String STR_EMAILS = "emails"; 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final String STR_PIN2 = "pin2"; 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final UriMatcher URL_MATCHER = 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new UriMatcher(UriMatcher.NO_MATCH); 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static { 21004e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville URL_MATCHER.addURI("icc", "adn", ADN); 21104e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville URL_MATCHER.addURI("icc", "fdn", FDN); 21204e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville URL_MATCHER.addURI("icc", "sdn", SDN); 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean mSimulator; 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean onCreate() { 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String device = SystemProperties.get("ro.product.device"); 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!TextUtils.isEmpty(device)) { 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSimulator = false; 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // simulator 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSimulator = true; 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Cursor query(Uri url, String[] projection, String selection, 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String[] selectionArgs, String sort) { 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ArrayList<ArrayList> results; 23504e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!mSimulator) { 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch (URL_MATCHER.match(url)) { 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case ADN: 23904e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville results = loadFromEf(IccConstants.EF_ADN); 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 24104e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case FDN: 24304e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville results = loadFromEf(IccConstants.EF_FDN); 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 24504e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case SDN: 24704e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville results = loadFromEf(IccConstants.EF_SDN); 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 24904e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project default: 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new IllegalArgumentException("Unknown URL " + url); 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Fake up some data for the simulator 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project results = new ArrayList<ArrayList>(4); 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ArrayList<String> contact; 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project contact = new ArrayList<String>(); 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project contact.add("Ron Stevens/H"); 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project contact.add("512-555-5038"); 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project results.add(contact); 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project contact = new ArrayList<String>(); 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project contact.add("Ron Stevens/M"); 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project contact.add("512-555-8305"); 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project results.add(contact); 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project contact = new ArrayList<String>(); 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project contact.add("Melissa Owens"); 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project contact.add("512-555-8305"); 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project results.add(contact); 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project contact = new ArrayList<String>(); 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project contact.add("Directory Assistence"); 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project contact.add("411"); 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project results.add(contact); 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new ArrayListCursor(ADDRESS_BOOK_COLUMN_NAMES, results); 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getType(Uri url) { 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch (URL_MATCHER.match(url)) { 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case ADN: 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case FDN: 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case SDN: 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return "vnd.android.cursor.dir/sim-contact"; 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project default: 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new IllegalArgumentException("Unknown URL " + url); 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Uri insert(Uri url, ContentValues initialValues) { 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uri resultUri; 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int efType; 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String pin2 = null; 3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (DBG) log("insert"); 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int match = URL_MATCHER.match(url); 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch (match) { 3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case ADN: 30604e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville efType = IccConstants.EF_ADN; 3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case FDN: 31004e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville efType = IccConstants.EF_FDN; 3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pin2 = initialValues.getAsString("pin2"); 3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project default: 3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new UnsupportedOperationException( 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "Cannot insert into URL: " + url); 3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String tag = initialValues.getAsString("tag"); 3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String number = initialValues.getAsString("number"); 32134efc39f256d5833687c7bd7d83258d6394c9307Jaikumar Ganesh // TODO(): Read email instead of sending null. 32234efc39f256d5833687c7bd7d83258d6394c9307Jaikumar Ganesh boolean success = addIccRecordToEf(efType, tag, number, null, pin2); 3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!success) { 3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 32812f413d29e1fb32f00213b1eaae6d45c856dc0d6jsh StringBuilder buf = new StringBuilder("content://icc/"); 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch (match) { 3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case ADN: 3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project buf.append("adn/"); 3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case FDN: 3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project buf.append("fdn/"); 3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 33804e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville 3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // TODO: we need to find out the rowId for the newly added record 3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project buf.append(0); 3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project resultUri = Uri.parse(buf.toString()); 3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* 3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // notify interested parties that an insertion happened 3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getContext().getContentResolver().notifyInsert( 3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project resultUri, rowID, null); 3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return resultUri; 3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private String normalizeValue(String inVal) { 3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int len = inVal.length(); 3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String retVal = inVal; 3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (inVal.charAt(0) == '\'' && inVal.charAt(len-1) == '\'') { 3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project retVal = inVal.substring(1, len-1); 3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return retVal; 3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int delete(Uri url, String where, String[] whereArgs) { 3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int efType; 3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (DBG) log("delete"); 3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int match = URL_MATCHER.match(url); 3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch (match) { 3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case ADN: 37304e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville efType = IccConstants.EF_ADN; 3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case FDN: 37704e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville efType = IccConstants.EF_FDN; 3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project default: 3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new UnsupportedOperationException( 3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "Cannot insert into URL: " + url); 3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // parse where clause 3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String tag = null; 3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String number = null; 38834efc39f256d5833687c7bd7d83258d6394c9307Jaikumar Ganesh String[] emails = null; 3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String pin2 = null; 3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String[] tokens = where.split("AND"); 3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int n = tokens.length; 3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project while (--n >= 0) { 3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String param = tokens[n]; 3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (DBG) log("parsing '" + param + "'"); 3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String[] pair = param.split("="); 3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (pair.length != 2) { 4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.e(TAG, "resolve: bad whereClause parameter: " + param); 4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project continue; 4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String key = pair[0].trim(); 4069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String val = pair[1].trim(); 4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (STR_TAG.equals(key)) { 4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project tag = normalizeValue(val); 4109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else if (STR_NUMBER.equals(key)) { 4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project number = normalizeValue(val); 41234efc39f256d5833687c7bd7d83258d6394c9307Jaikumar Ganesh } else if (STR_EMAILS.equals(key)) { 41334efc39f256d5833687c7bd7d83258d6394c9307Jaikumar Ganesh //TODO(): Email is null. 41434efc39f256d5833687c7bd7d83258d6394c9307Jaikumar Ganesh emails = null; 4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else if (STR_PIN2.equals(key)) { 4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pin2 = normalizeValue(val); 4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 420ac6461c69e213d66aac61e0c19602a2ac331e84dMikael Danielsson if (TextUtils.isEmpty(number)) { 4219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return 0; 4229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4249f36f51844a6d8936f27af925ce8c22729a63f27Jake Hamby if (efType == IccConstants.EF_FDN && TextUtils.isEmpty(pin2)) { 4259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return 0; 4269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 42834efc39f256d5833687c7bd7d83258d6394c9307Jaikumar Ganesh boolean success = deleteIccRecordFromEf(efType, tag, number, emails, pin2); 4299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!success) { 4309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return 0; 4319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return 1; 4349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 4379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int update(Uri url, ContentValues values, String where, String[] whereArgs) { 4389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int efType; 4399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String pin2 = null; 4409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (DBG) log("update"); 4429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int match = URL_MATCHER.match(url); 4449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch (match) { 4459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case ADN: 44604e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville efType = IccConstants.EF_ADN; 4479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 4489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case FDN: 45004e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville efType = IccConstants.EF_FDN; 4519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pin2 = values.getAsString("pin2"); 4529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 4539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project default: 4559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new UnsupportedOperationException( 4569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "Cannot insert into URL: " + url); 4579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String tag = values.getAsString("tag"); 4609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String number = values.getAsString("number"); 46134efc39f256d5833687c7bd7d83258d6394c9307Jaikumar Ganesh String[] emails = null; 4629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String newTag = values.getAsString("newTag"); 4639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String newNumber = values.getAsString("newNumber"); 46434efc39f256d5833687c7bd7d83258d6394c9307Jaikumar Ganesh String[] newEmails = null; 46534efc39f256d5833687c7bd7d83258d6394c9307Jaikumar Ganesh // TODO(): Update for email. 46604e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville boolean success = updateIccRecordInEf(efType, tag, number, 4679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project newTag, newNumber, pin2); 4689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!success) { 4709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return 0; 4719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return 1; 4749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private ArrayList<ArrayList> loadFromEf(int efType) { 4779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ArrayList<ArrayList> results = new ArrayList<ArrayList>(); 4789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project List<AdnRecord> adnRecords = null; 4799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (DBG) log("loadFromEf: efType=" + efType); 4819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 48304e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville IIccPhoneBook iccIpb = IIccPhoneBook.Stub.asInterface( 4849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ServiceManager.getService("simphonebook")); 48504e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville if (iccIpb != null) { 48604e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville adnRecords = iccIpb.getAdnRecordsInEf(efType); 4879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException ex) { 4899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // ignore it 4909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (SecurityException ex) { 4919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (DBG) log(ex.toString()); 4929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (adnRecords != null) { 4949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Load the results 4959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int N = adnRecords.size(); 4979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (DBG) log("adnRecords.size=" + N); 4989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < N ; i++) { 4999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project loadRecord(adnRecords.get(i), results); 5009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 5029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // No results to load 5039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.w(TAG, "Cannot load ADN records"); 5049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project results.clear(); 5059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (DBG) log("loadFromEf: return results"); 5079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return results; 5089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean 51134efc39f256d5833687c7bd7d83258d6394c9307Jaikumar Ganesh addIccRecordToEf(int efType, String name, String number, String[] emails, String pin2) { 51204e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville if (DBG) log("addIccRecordToEf: efType=" + efType + ", name=" + name + 51334efc39f256d5833687c7bd7d83258d6394c9307Jaikumar Ganesh ", number=" + number + ", emails=" + emails); 5149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean success = false; 5169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // TODO: do we need to call getAdnRecordsInEf() before calling 5189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // updateAdnRecordsInEfBySearch()? In any case, we will leave 5199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // the UI level logic to fill that prereq if necessary. But 5209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // hopefully, we can remove this requirement. 52104e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville 5229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 52304e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville IIccPhoneBook iccIpb = IIccPhoneBook.Stub.asInterface( 5249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ServiceManager.getService("simphonebook")); 52504e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville if (iccIpb != null) { 52604e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville success = iccIpb.updateAdnRecordsInEfBySearch(efType, "", "", 5279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project name, number, pin2); 5289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException ex) { 5309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // ignore it 5319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (SecurityException ex) { 5329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (DBG) log(ex.toString()); 5339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 53404e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville if (DBG) log("addIccRecordToEf: " + success); 5359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return success; 5369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean 53904e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville updateIccRecordInEf(int efType, String oldName, String oldNumber, 54034efc39f256d5833687c7bd7d83258d6394c9307Jaikumar Ganesh String newName, String newNumber, String pin2) { 54104e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville if (DBG) log("updateIccRecordInEf: efType=" + efType + 5429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ", oldname=" + oldName + ", oldnumber=" + oldNumber + 5439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ", newname=" + newName + ", newnumber=" + newNumber); 5449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean success = false; 5459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 54704e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville IIccPhoneBook iccIpb = IIccPhoneBook.Stub.asInterface( 5489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ServiceManager.getService("simphonebook")); 54904e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville if (iccIpb != null) { 55004e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville success = iccIpb.updateAdnRecordsInEfBySearch(efType, 5519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project oldName, oldNumber, newName, newNumber, pin2); 5529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException ex) { 5549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // ignore it 5559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (SecurityException ex) { 5569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (DBG) log(ex.toString()); 5579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 55804e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville if (DBG) log("updateIccRecordInEf: " + success); 5599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return success; 5609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 56334efc39f256d5833687c7bd7d83258d6394c9307Jaikumar Ganesh private boolean deleteIccRecordFromEf(int efType, String name, String number, String[] emails, 56434efc39f256d5833687c7bd7d83258d6394c9307Jaikumar Ganesh String pin2) { 56504e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville if (DBG) log("deleteIccRecordFromEf: efType=" + efType + 56634efc39f256d5833687c7bd7d83258d6394c9307Jaikumar Ganesh ", name=" + name + ", number=" + number + ", emails=" + emails + ", pin2=" + pin2); 5679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean success = false; 5699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 57104e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville IIccPhoneBook iccIpb = IIccPhoneBook.Stub.asInterface( 5729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ServiceManager.getService("simphonebook")); 57304e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville if (iccIpb != null) { 57404e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville success = iccIpb.updateAdnRecordsInEfBySearch(efType, 57504e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville name, number, "", "", pin2); 5769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException ex) { 5789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // ignore it 5799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (SecurityException ex) { 5809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (DBG) log(ex.toString()); 5819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 58204e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville if (DBG) log("deleteIccRecordFromEf: " + success); 5839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return success; 5849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Loads an AdnRecord into an ArrayList. Must be called with mLock held. 5889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param record the ADN record to load from 5909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param results the array list to put the results in 5919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void loadRecord(AdnRecord record, 5939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ArrayList<ArrayList> results) { 5949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!record.isEmpty()) { 59534efc39f256d5833687c7bd7d83258d6394c9307Jaikumar Ganesh ArrayList<String> contact = new ArrayList<String>(); 5969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String alphaTag = record.getAlphaTag(); 5979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String number = record.getNumber(); 59834efc39f256d5833687c7bd7d83258d6394c9307Jaikumar Ganesh String[] emails = record.getEmails(); 5999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 60034efc39f256d5833687c7bd7d83258d6394c9307Jaikumar Ganesh if (DBG) log("loadRecord: " + alphaTag + ", " + number + ","); 6019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project contact.add(alphaTag); 6029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project contact.add(number); 60334efc39f256d5833687c7bd7d83258d6394c9307Jaikumar Ganesh StringBuilder emailString = new StringBuilder(); 60434efc39f256d5833687c7bd7d83258d6394c9307Jaikumar Ganesh 60534efc39f256d5833687c7bd7d83258d6394c9307Jaikumar Ganesh if (emails != null) { 60634efc39f256d5833687c7bd7d83258d6394c9307Jaikumar Ganesh for (String email: emails) { 60734efc39f256d5833687c7bd7d83258d6394c9307Jaikumar Ganesh if (DBG) log("Adding email:" + email); 60834efc39f256d5833687c7bd7d83258d6394c9307Jaikumar Ganesh emailString.append(email); 60934efc39f256d5833687c7bd7d83258d6394c9307Jaikumar Ganesh emailString.append(","); 61034efc39f256d5833687c7bd7d83258d6394c9307Jaikumar Ganesh } 61134efc39f256d5833687c7bd7d83258d6394c9307Jaikumar Ganesh contact.add(emailString.toString()); 61234efc39f256d5833687c7bd7d83258d6394c9307Jaikumar Ganesh } else { 61334efc39f256d5833687c7bd7d83258d6394c9307Jaikumar Ganesh contact.add(null); 61434efc39f256d5833687c7bd7d83258d6394c9307Jaikumar Ganesh } 6159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project results.add(contact); 6169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void log(String msg) { 62004e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville Log.d(TAG, "[IccProvider] " + msg); 6219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 624