170be005a18a35ec5fcb46152f0dfbe82156efa3aKim Schulzpackage com.android.bluetooth.tests; 270be005a18a35ec5fcb46152f0dfbe82156efa3aKim Schulz 35a60e47497f21f64e6d79420dc4c56c1907df22akschulzimport java.io.FileInputStream; 45a60e47497f21f64e6d79420dc4c56c1907df22akschulzimport java.io.FileNotFoundException; 55a60e47497f21f64e6d79420dc4c56c1907df22akschulzimport java.io.FileOutputStream; 65a60e47497f21f64e6d79420dc4c56c1907df22akschulzimport java.io.IOException; 75a60e47497f21f64e6d79420dc4c56c1907df22akschulzimport java.io.InputStream; 85a60e47497f21f64e6d79420dc4c56c1907df22akschulzimport java.io.UnsupportedEncodingException; 970be005a18a35ec5fcb46152f0dfbe82156efa3aKim Schulzimport java.text.SimpleDateFormat; 105a60e47497f21f64e6d79420dc4c56c1907df22akschulzimport java.util.ArrayList; 1170be005a18a35ec5fcb46152f0dfbe82156efa3aKim Schulzimport java.util.Date; 125a60e47497f21f64e6d79420dc4c56c1907df22akschulzimport java.util.LinkedHashMap; 1370be005a18a35ec5fcb46152f0dfbe82156efa3aKim Schulz 145a60e47497f21f64e6d79420dc4c56c1907df22akschulzimport android.annotation.TargetApi; 155a60e47497f21f64e6d79420dc4c56c1907df22akschulzimport android.content.ContentResolver; 165a60e47497f21f64e6d79420dc4c56c1907df22akschulzimport android.content.ContentValues; 175a60e47497f21f64e6d79420dc4c56c1907df22akschulzimport android.content.Context; 185a60e47497f21f64e6d79420dc4c56c1907df22akschulzimport android.database.Cursor; 195a60e47497f21f64e6d79420dc4c56c1907df22akschulzimport android.net.Uri; 205a60e47497f21f64e6d79420dc4c56c1907df22akschulzimport android.os.Bundle; 215a60e47497f21f64e6d79420dc4c56c1907df22akschulzimport android.os.Debug; 225a60e47497f21f64e6d79420dc4c56c1907df22akschulzimport android.os.ParcelFileDescriptor; 235a60e47497f21f64e6d79420dc4c56c1907df22akschulzimport android.provider.BaseColumns; 245a60e47497f21f64e6d79420dc4c56c1907df22akschulzimport android.provider.Telephony.Mms; 255a60e47497f21f64e6d79420dc4c56c1907df22akschulzimport android.provider.Telephony.MmsSms; 265a60e47497f21f64e6d79420dc4c56c1907df22akschulzimport android.provider.Telephony.Threads; 275a60e47497f21f64e6d79420dc4c56c1907df22akschulzimport android.test.AndroidTestCase; 285a60e47497f21f64e6d79420dc4c56c1907df22akschulzimport android.util.Log; 2970be005a18a35ec5fcb46152f0dfbe82156efa3aKim Schulz 305a60e47497f21f64e6d79420dc4c56c1907df22akschulzimport com.android.bluetooth.map.BluetoothMapMasInstance; 315a60e47497f21f64e6d79420dc4c56c1907df22akschulzimport com.android.bluetooth.map.BluetoothMapAccountItem; 325a60e47497f21f64e6d79420dc4c56c1907df22akschulzimport com.android.bluetooth.map.BluetoothMapAccountLoader; 335a60e47497f21f64e6d79420dc4c56c1907df22akschulzimport com.android.bluetooth.map.BluetoothMapAppParams; 345a60e47497f21f64e6d79420dc4c56c1907df22akschulzimport com.android.bluetooth.map.BluetoothMapContent; 355a60e47497f21f64e6d79420dc4c56c1907df22akschulzimport com.android.bluetooth.map.BluetoothMapFolderElement; 365a60e47497f21f64e6d79420dc4c56c1907df22akschulzimport com.android.bluetooth.map.BluetoothMapMessageListing; 375a60e47497f21f64e6d79420dc4c56c1907df22akschulzimport com.android.bluetooth.map.BluetoothMapUtils; 385a60e47497f21f64e6d79420dc4c56c1907df22akschulzimport com.android.bluetooth.map.BluetoothMapUtils.TYPE; 395a60e47497f21f64e6d79420dc4c56c1907df22akschulzimport com.android.bluetooth.map.MapContact; 405a60e47497f21f64e6d79420dc4c56c1907df22akschulzimport com.android.bluetooth.map.SmsMmsContacts; 415a60e47497f21f64e6d79420dc4c56c1907df22akschulzimport com.android.bluetooth.mapapi.BluetoothMapContract; 4270be005a18a35ec5fcb46152f0dfbe82156efa3aKim Schulz 4370be005a18a35ec5fcb46152f0dfbe82156efa3aKim Schulzpublic class BluetoothMapContentTest extends AndroidTestCase { 445a60e47497f21f64e6d79420dc4c56c1907df22akschulz 4570be005a18a35ec5fcb46152f0dfbe82156efa3aKim Schulz private static final String TAG = "BluetoothMapContentTest"; 4670be005a18a35ec5fcb46152f0dfbe82156efa3aKim Schulz 4770be005a18a35ec5fcb46152f0dfbe82156efa3aKim Schulz private static final boolean D = true; 4870be005a18a35ec5fcb46152f0dfbe82156efa3aKim Schulz 4970be005a18a35ec5fcb46152f0dfbe82156efa3aKim Schulz private Context mContext; 5070be005a18a35ec5fcb46152f0dfbe82156efa3aKim Schulz private ContentResolver mResolver; 515a60e47497f21f64e6d79420dc4c56c1907df22akschulz private SmsMmsContacts mContacts = new SmsMmsContacts(); 5270be005a18a35ec5fcb46152f0dfbe82156efa3aKim Schulz 535a60e47497f21f64e6d79420dc4c56c1907df22akschulz private BluetoothMapFolderElement mCurrentFolder; 545a60e47497f21f64e6d79420dc4c56c1907df22akschulz private BluetoothMapAccountItem mAccount = null; 555a60e47497f21f64e6d79420dc4c56c1907df22akschulz 565a60e47497f21f64e6d79420dc4c56c1907df22akschulz private static final int MAS_ID = 0; 575a60e47497f21f64e6d79420dc4c56c1907df22akschulz private static final int REMOTE_FEATURE_MASK = 0x07FFFFFF; 585a60e47497f21f64e6d79420dc4c56c1907df22akschulz private static final BluetoothMapMasInstance mMasInstance = 595a60e47497f21f64e6d79420dc4c56c1907df22akschulz new MockMasInstance(MAS_ID, REMOTE_FEATURE_MASK); 605a60e47497f21f64e6d79420dc4c56c1907df22akschulz 6170be005a18a35ec5fcb46152f0dfbe82156efa3aKim Schulz 625a60e47497f21f64e6d79420dc4c56c1907df22akschulz private Uri mEmailUri = null; 635a60e47497f21f64e6d79420dc4c56c1907df22akschulz private Uri mEmailMessagesUri = null; 645a60e47497f21f64e6d79420dc4c56c1907df22akschulz private Uri mEmailFolderUri = null; 655a60e47497f21f64e6d79420dc4c56c1907df22akschulz private Uri mEmailAccountUri = null; 665a60e47497f21f64e6d79420dc4c56c1907df22akschulz 675a60e47497f21f64e6d79420dc4c56c1907df22akschulz static final String[] EMAIL_ACCOUNT_PROJECTION = new String[] { 685a60e47497f21f64e6d79420dc4c56c1907df22akschulz BluetoothMapContract.MessageColumns.FOLDER_ID, 695a60e47497f21f64e6d79420dc4c56c1907df22akschulz BluetoothMapContract.MessageColumns.ACCOUNT_ID, 7070be005a18a35ec5fcb46152f0dfbe82156efa3aKim Schulz }; 7170be005a18a35ec5fcb46152f0dfbe82156efa3aKim Schulz 725a60e47497f21f64e6d79420dc4c56c1907df22akschulz private void printAccountInfo(Cursor c) { 735a60e47497f21f64e6d79420dc4c56c1907df22akschulz if (D) Log.d(TAG, BluetoothMapContract.MessageColumns.ACCOUNT_ID + " : " + 745a60e47497f21f64e6d79420dc4c56c1907df22akschulz c.getInt(c.getColumnIndex(BluetoothMapContract.MessageColumns.ACCOUNT_ID)) ); 755a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 765a60e47497f21f64e6d79420dc4c56c1907df22akschulz 775a60e47497f21f64e6d79420dc4c56c1907df22akschulz static final String[] BT_MESSAGE_ID_PROJECTION = new String[] { 785a60e47497f21f64e6d79420dc4c56c1907df22akschulz BluetoothMapContract.MessageColumns._ID, 795a60e47497f21f64e6d79420dc4c56c1907df22akschulz BluetoothMapContract.MessageColumns.DATE, 8070be005a18a35ec5fcb46152f0dfbe82156efa3aKim Schulz }; 8170be005a18a35ec5fcb46152f0dfbe82156efa3aKim Schulz 825a60e47497f21f64e6d79420dc4c56c1907df22akschulz static final String[] BT_MESSAGE_PROJECTION = BluetoothMapContract.BT_MESSAGE_PROJECTION; 835a60e47497f21f64e6d79420dc4c56c1907df22akschulz 845a60e47497f21f64e6d79420dc4c56c1907df22akschulz static final String[] BT_ACCOUNT_PROJECTION = BluetoothMapContract.BT_ACCOUNT_PROJECTION; 855a60e47497f21f64e6d79420dc4c56c1907df22akschulz 865a60e47497f21f64e6d79420dc4c56c1907df22akschulz static final String[] BT_FOLDER_PROJECTION = BluetoothMapContract.BT_FOLDER_PROJECTION; 875a60e47497f21f64e6d79420dc4c56c1907df22akschulz 885a60e47497f21f64e6d79420dc4c56c1907df22akschulz BluetoothMapAccountLoader loader; 895a60e47497f21f64e6d79420dc4c56c1907df22akschulz LinkedHashMap<BluetoothMapAccountItem, ArrayList<BluetoothMapAccountItem>> mFullList; 905a60e47497f21f64e6d79420dc4c56c1907df22akschulz 915a60e47497f21f64e6d79420dc4c56c1907df22akschulz public BluetoothMapContentTest() { 925a60e47497f21f64e6d79420dc4c56c1907df22akschulz super(); 935a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 945a60e47497f21f64e6d79420dc4c56c1907df22akschulz 955a60e47497f21f64e6d79420dc4c56c1907df22akschulz private void initTestSetup(){ 965a60e47497f21f64e6d79420dc4c56c1907df22akschulz mContext = this.getContext(); 975a60e47497f21f64e6d79420dc4c56c1907df22akschulz mResolver = mContext.getContentResolver(); 985a60e47497f21f64e6d79420dc4c56c1907df22akschulz 995a60e47497f21f64e6d79420dc4c56c1907df22akschulz // find enabled account 1005a60e47497f21f64e6d79420dc4c56c1907df22akschulz loader = new BluetoothMapAccountLoader(mContext); 1015a60e47497f21f64e6d79420dc4c56c1907df22akschulz mFullList = loader.parsePackages(false); 1025a60e47497f21f64e6d79420dc4c56c1907df22akschulz String accountId = getEnabledAccount(); 1035a60e47497f21f64e6d79420dc4c56c1907df22akschulz Uri tmpEmailUri = Uri.parse("content://com.android.email.bluetoothprovider/"); 1045a60e47497f21f64e6d79420dc4c56c1907df22akschulz 1055a60e47497f21f64e6d79420dc4c56c1907df22akschulz mEmailUri = Uri.withAppendedPath(tmpEmailUri, accountId + "/"); 1065a60e47497f21f64e6d79420dc4c56c1907df22akschulz mEmailMessagesUri = Uri.parse(mEmailUri + BluetoothMapContract.TABLE_MESSAGE); 1075a60e47497f21f64e6d79420dc4c56c1907df22akschulz mEmailFolderUri = Uri.parse(mEmailUri + BluetoothMapContract.TABLE_FOLDER); 1085a60e47497f21f64e6d79420dc4c56c1907df22akschulz mEmailAccountUri = Uri.parse(tmpEmailUri + BluetoothMapContract.TABLE_ACCOUNT); 1095a60e47497f21f64e6d79420dc4c56c1907df22akschulz 1105a60e47497f21f64e6d79420dc4c56c1907df22akschulz buildFolderStructure(); 1115a60e47497f21f64e6d79420dc4c56c1907df22akschulz 1125a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 1135a60e47497f21f64e6d79420dc4c56c1907df22akschulz 1145a60e47497f21f64e6d79420dc4c56c1907df22akschulz public String getEnabledAccount(){ 1155a60e47497f21f64e6d79420dc4c56c1907df22akschulz if(D)Log.d(TAG,"getEnabledAccountItems()\n"); 1165a60e47497f21f64e6d79420dc4c56c1907df22akschulz String account = null; 1175a60e47497f21f64e6d79420dc4c56c1907df22akschulz for(BluetoothMapAccountItem app:mFullList.keySet()){ 1185a60e47497f21f64e6d79420dc4c56c1907df22akschulz ArrayList<BluetoothMapAccountItem> accountList = mFullList.get(app); 1195a60e47497f21f64e6d79420dc4c56c1907df22akschulz for(BluetoothMapAccountItem acc: accountList){ 1205a60e47497f21f64e6d79420dc4c56c1907df22akschulz mAccount = acc; 1215a60e47497f21f64e6d79420dc4c56c1907df22akschulz account = acc.getId(); 1225a60e47497f21f64e6d79420dc4c56c1907df22akschulz break; 1235a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 1245a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 1255a60e47497f21f64e6d79420dc4c56c1907df22akschulz return account; 1265a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 1275a60e47497f21f64e6d79420dc4c56c1907df22akschulz 1285a60e47497f21f64e6d79420dc4c56c1907df22akschulz private void buildFolderStructure(){ 1295a60e47497f21f64e6d79420dc4c56c1907df22akschulz mCurrentFolder = new BluetoothMapFolderElement("root", null); // This will be the root element 1305a60e47497f21f64e6d79420dc4c56c1907df22akschulz BluetoothMapFolderElement tmpFolder; 1315a60e47497f21f64e6d79420dc4c56c1907df22akschulz tmpFolder = mCurrentFolder.addFolder("telecom"); // root/telecom 1325a60e47497f21f64e6d79420dc4c56c1907df22akschulz tmpFolder = tmpFolder.addFolder("msg"); // root/telecom/msg 1335a60e47497f21f64e6d79420dc4c56c1907df22akschulz if(mEmailFolderUri != null) { 1345a60e47497f21f64e6d79420dc4c56c1907df22akschulz addEmailFolders(tmpFolder); 1355a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 1365a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 1375a60e47497f21f64e6d79420dc4c56c1907df22akschulz 1385a60e47497f21f64e6d79420dc4c56c1907df22akschulz private void addEmailFolders(BluetoothMapFolderElement parentFolder) { 1395a60e47497f21f64e6d79420dc4c56c1907df22akschulz BluetoothMapFolderElement newFolder; 1405a60e47497f21f64e6d79420dc4c56c1907df22akschulz String where = BluetoothMapContract.FolderColumns.PARENT_FOLDER_ID + 1415a60e47497f21f64e6d79420dc4c56c1907df22akschulz " = " + parentFolder.getFolderId(); 1425a60e47497f21f64e6d79420dc4c56c1907df22akschulz Cursor c = mContext.getContentResolver().query(mEmailFolderUri, 1435a60e47497f21f64e6d79420dc4c56c1907df22akschulz BluetoothMapContract.BT_FOLDER_PROJECTION, where, null, null); 1445a60e47497f21f64e6d79420dc4c56c1907df22akschulz if (c != null) { 1455a60e47497f21f64e6d79420dc4c56c1907df22akschulz c.moveToPosition(-1); 1465a60e47497f21f64e6d79420dc4c56c1907df22akschulz while (c.moveToNext()) { 1475a60e47497f21f64e6d79420dc4c56c1907df22akschulz String name = c.getString(c.getColumnIndex(BluetoothMapContract.FolderColumns.NAME)); 1485a60e47497f21f64e6d79420dc4c56c1907df22akschulz long id = c.getLong(c.getColumnIndex(BluetoothMapContract.FolderColumns._ID)); 1495a60e47497f21f64e6d79420dc4c56c1907df22akschulz newFolder = parentFolder.addEmailFolder(name, id); 1505a60e47497f21f64e6d79420dc4c56c1907df22akschulz addEmailFolders(newFolder); // Use recursion to add any sub folders 1515a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 1525a60e47497f21f64e6d79420dc4c56c1907df22akschulz c.close(); 1535a60e47497f21f64e6d79420dc4c56c1907df22akschulz } else { 1545a60e47497f21f64e6d79420dc4c56c1907df22akschulz if (D) Log.d(TAG, "addEmailFolders(): no elements found"); 1555a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 1565a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 1575a60e47497f21f64e6d79420dc4c56c1907df22akschulz 1585a60e47497f21f64e6d79420dc4c56c1907df22akschulz private BluetoothMapFolderElement getInbox() { 1595a60e47497f21f64e6d79420dc4c56c1907df22akschulz BluetoothMapFolderElement tmpFolderElement = null; 1605a60e47497f21f64e6d79420dc4c56c1907df22akschulz 1615a60e47497f21f64e6d79420dc4c56c1907df22akschulz tmpFolderElement = mCurrentFolder.getSubFolder("telecom"); 1625a60e47497f21f64e6d79420dc4c56c1907df22akschulz tmpFolderElement = tmpFolderElement.getSubFolder("msg"); 1635a60e47497f21f64e6d79420dc4c56c1907df22akschulz tmpFolderElement = tmpFolderElement.getSubFolder("inbox"); 1645a60e47497f21f64e6d79420dc4c56c1907df22akschulz return tmpFolderElement; 1655a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 1665a60e47497f21f64e6d79420dc4c56c1907df22akschulz 1675a60e47497f21f64e6d79420dc4c56c1907df22akschulz private BluetoothMapFolderElement getOutbox() { 1685a60e47497f21f64e6d79420dc4c56c1907df22akschulz BluetoothMapFolderElement tmpFolderElement = null; 1695a60e47497f21f64e6d79420dc4c56c1907df22akschulz 1705a60e47497f21f64e6d79420dc4c56c1907df22akschulz tmpFolderElement = mCurrentFolder.getSubFolder("telecom"); 1715a60e47497f21f64e6d79420dc4c56c1907df22akschulz tmpFolderElement = tmpFolderElement.getSubFolder("msg"); 1725a60e47497f21f64e6d79420dc4c56c1907df22akschulz tmpFolderElement = tmpFolderElement.getSubFolder("outbox"); 1735a60e47497f21f64e6d79420dc4c56c1907df22akschulz return tmpFolderElement; 1745a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 1755a60e47497f21f64e6d79420dc4c56c1907df22akschulz 1765a60e47497f21f64e6d79420dc4c56c1907df22akschulz 17770be005a18a35ec5fcb46152f0dfbe82156efa3aKim Schulz private String getDateTimeString(long timestamp) { 17870be005a18a35ec5fcb46152f0dfbe82156efa3aKim Schulz SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd'T'HHmmss"); 17970be005a18a35ec5fcb46152f0dfbe82156efa3aKim Schulz Date date = new Date(timestamp); 18070be005a18a35ec5fcb46152f0dfbe82156efa3aKim Schulz return format.format(date); // Format to YYYYMMDDTHHMMSS local time 18170be005a18a35ec5fcb46152f0dfbe82156efa3aKim Schulz } 18270be005a18a35ec5fcb46152f0dfbe82156efa3aKim Schulz 1835a60e47497f21f64e6d79420dc4c56c1907df22akschulz private void printCursor(Cursor c) { 1845a60e47497f21f64e6d79420dc4c56c1907df22akschulz StringBuilder sb = new StringBuilder(); 1855a60e47497f21f64e6d79420dc4c56c1907df22akschulz sb.append("\nprintCursor:\n"); 1865a60e47497f21f64e6d79420dc4c56c1907df22akschulz for(int i = 0; i < c.getColumnCount(); i++) { 1875a60e47497f21f64e6d79420dc4c56c1907df22akschulz if(c.getColumnName(i).equals(BluetoothMapContract.MessageColumns.DATE)){ 1885a60e47497f21f64e6d79420dc4c56c1907df22akschulz sb.append(" ").append(c.getColumnName(i)) 1895a60e47497f21f64e6d79420dc4c56c1907df22akschulz .append(" : ").append(getDateTimeString(c.getLong(i))).append("\n"); 1905a60e47497f21f64e6d79420dc4c56c1907df22akschulz } else { 1915a60e47497f21f64e6d79420dc4c56c1907df22akschulz sb.append(" ").append(c.getColumnName(i)) 1925a60e47497f21f64e6d79420dc4c56c1907df22akschulz .append(" : ").append(c.getString(i)).append("\n"); 1935a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 1945a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 1955a60e47497f21f64e6d79420dc4c56c1907df22akschulz Log.d(TAG, sb.toString()); 1965a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 1975a60e47497f21f64e6d79420dc4c56c1907df22akschulz 1985a60e47497f21f64e6d79420dc4c56c1907df22akschulz private void dumpMessageContent(Cursor c) { 1995a60e47497f21f64e6d79420dc4c56c1907df22akschulz long id = c.getLong(c.getColumnIndex(BluetoothMapContract.MessageColumns._ID)); 2005a60e47497f21f64e6d79420dc4c56c1907df22akschulz Uri uri = Uri.parse(mEmailMessagesUri + "/" + id 2015a60e47497f21f64e6d79420dc4c56c1907df22akschulz + "/" + BluetoothMapContract.FILE_MSG_NO_ATTACHMENTS); 2025a60e47497f21f64e6d79420dc4c56c1907df22akschulz FileInputStream is = null; 2035a60e47497f21f64e6d79420dc4c56c1907df22akschulz ParcelFileDescriptor fd = null; 2045a60e47497f21f64e6d79420dc4c56c1907df22akschulz int count; 2055a60e47497f21f64e6d79420dc4c56c1907df22akschulz try { 2065a60e47497f21f64e6d79420dc4c56c1907df22akschulz fd = mResolver.openFileDescriptor(uri, "r"); 2075a60e47497f21f64e6d79420dc4c56c1907df22akschulz is = new FileInputStream(fd.getFileDescriptor()); 2085a60e47497f21f64e6d79420dc4c56c1907df22akschulz byte[] buffer = new byte[1024]; 2095a60e47497f21f64e6d79420dc4c56c1907df22akschulz 2105a60e47497f21f64e6d79420dc4c56c1907df22akschulz while((count = is.read(buffer)) != -1) { 2115a60e47497f21f64e6d79420dc4c56c1907df22akschulz Log.d(TAG, new String(buffer,0, count)); 2125a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 2135a60e47497f21f64e6d79420dc4c56c1907df22akschulz 2145a60e47497f21f64e6d79420dc4c56c1907df22akschulz 2155a60e47497f21f64e6d79420dc4c56c1907df22akschulz } catch (FileNotFoundException e) { 2165a60e47497f21f64e6d79420dc4c56c1907df22akschulz Log.w(TAG, e); 2175a60e47497f21f64e6d79420dc4c56c1907df22akschulz } catch (IOException e) { 2185a60e47497f21f64e6d79420dc4c56c1907df22akschulz Log.w(TAG, e); 2195a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 2205a60e47497f21f64e6d79420dc4c56c1907df22akschulz finally { 2215a60e47497f21f64e6d79420dc4c56c1907df22akschulz try { 2225a60e47497f21f64e6d79420dc4c56c1907df22akschulz if(is != null) 2235a60e47497f21f64e6d79420dc4c56c1907df22akschulz is.close(); 2245a60e47497f21f64e6d79420dc4c56c1907df22akschulz } catch (IOException e) {} 2255a60e47497f21f64e6d79420dc4c56c1907df22akschulz try { 2265a60e47497f21f64e6d79420dc4c56c1907df22akschulz if(fd != null) 2275a60e47497f21f64e6d79420dc4c56c1907df22akschulz fd.close(); 2285a60e47497f21f64e6d79420dc4c56c1907df22akschulz } catch (IOException e) {} 2295a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 2305a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 2315a60e47497f21f64e6d79420dc4c56c1907df22akschulz 2325a60e47497f21f64e6d79420dc4c56c1907df22akschulz /** 2335a60e47497f21f64e6d79420dc4c56c1907df22akschulz * Create a new message in the database outbox, based on the content of c. 2345a60e47497f21f64e6d79420dc4c56c1907df22akschulz * @param c 2355a60e47497f21f64e6d79420dc4c56c1907df22akschulz */ 2365a60e47497f21f64e6d79420dc4c56c1907df22akschulz private void writeMessageContent(Cursor c) { 2375a60e47497f21f64e6d79420dc4c56c1907df22akschulz long id = c.getLong(c.getColumnIndex(BluetoothMapContract.MessageColumns._ID)); 2385a60e47497f21f64e6d79420dc4c56c1907df22akschulz Uri uri = Uri.parse(mEmailMessagesUri + "/" + id + "/" 2395a60e47497f21f64e6d79420dc4c56c1907df22akschulz + BluetoothMapContract.FILE_MSG_NO_ATTACHMENTS); 2405a60e47497f21f64e6d79420dc4c56c1907df22akschulz FileInputStream is = null; 2415a60e47497f21f64e6d79420dc4c56c1907df22akschulz ParcelFileDescriptor fd = null; 2425a60e47497f21f64e6d79420dc4c56c1907df22akschulz FileOutputStream os = null; 2435a60e47497f21f64e6d79420dc4c56c1907df22akschulz ParcelFileDescriptor fdOut = null; 2445a60e47497f21f64e6d79420dc4c56c1907df22akschulz 2455a60e47497f21f64e6d79420dc4c56c1907df22akschulz ContentValues newMessage = new ContentValues(); 2465a60e47497f21f64e6d79420dc4c56c1907df22akschulz BluetoothMapFolderElement outFolder = getOutbox(); 2475a60e47497f21f64e6d79420dc4c56c1907df22akschulz newMessage.put(BluetoothMapContract.MessageColumns.FOLDER_ID, outFolder.getFolderId()); 2485a60e47497f21f64e6d79420dc4c56c1907df22akschulz // Now insert the empty message into outbox (Maybe it should be draft first, and then a move?) 2495a60e47497f21f64e6d79420dc4c56c1907df22akschulz // TODO: Examine if we need to set some additional flags, e.g. visable? 2505a60e47497f21f64e6d79420dc4c56c1907df22akschulz Uri uriOut = mResolver.insert(mEmailMessagesUri, newMessage); 2515a60e47497f21f64e6d79420dc4c56c1907df22akschulz int count; 2525a60e47497f21f64e6d79420dc4c56c1907df22akschulz try { 2535a60e47497f21f64e6d79420dc4c56c1907df22akschulz fd = mResolver.openFileDescriptor(uri, "r"); 2545a60e47497f21f64e6d79420dc4c56c1907df22akschulz is = new FileInputStream(fd.getFileDescriptor()); 2555a60e47497f21f64e6d79420dc4c56c1907df22akschulz fdOut = mResolver.openFileDescriptor(uri, "w"); 2565a60e47497f21f64e6d79420dc4c56c1907df22akschulz os = new FileOutputStream(fdOut.getFileDescriptor()); 2575a60e47497f21f64e6d79420dc4c56c1907df22akschulz byte[] buffer = new byte[1024]; 2585a60e47497f21f64e6d79420dc4c56c1907df22akschulz 2595a60e47497f21f64e6d79420dc4c56c1907df22akschulz while((count = is.read(buffer)) != -1) { 2605a60e47497f21f64e6d79420dc4c56c1907df22akschulz Log.d(TAG, new String(buffer,0, count)); 2615a60e47497f21f64e6d79420dc4c56c1907df22akschulz os.write(buffer, 0, count); 2625a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 2635a60e47497f21f64e6d79420dc4c56c1907df22akschulz } catch (FileNotFoundException e) { 2645a60e47497f21f64e6d79420dc4c56c1907df22akschulz Log.w(TAG, e); 2655a60e47497f21f64e6d79420dc4c56c1907df22akschulz } catch (IOException e) { 2665a60e47497f21f64e6d79420dc4c56c1907df22akschulz Log.w(TAG, e); 2675a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 2685a60e47497f21f64e6d79420dc4c56c1907df22akschulz finally { 2695a60e47497f21f64e6d79420dc4c56c1907df22akschulz try { 2705a60e47497f21f64e6d79420dc4c56c1907df22akschulz if(is != null) 2715a60e47497f21f64e6d79420dc4c56c1907df22akschulz is.close(); 2725a60e47497f21f64e6d79420dc4c56c1907df22akschulz } catch (IOException e) {} 2735a60e47497f21f64e6d79420dc4c56c1907df22akschulz try { 2745a60e47497f21f64e6d79420dc4c56c1907df22akschulz if(fd != null) 2755a60e47497f21f64e6d79420dc4c56c1907df22akschulz fd.close(); 2765a60e47497f21f64e6d79420dc4c56c1907df22akschulz } catch (IOException e) {} 2775a60e47497f21f64e6d79420dc4c56c1907df22akschulz try { 2785a60e47497f21f64e6d79420dc4c56c1907df22akschulz if(os != null) 2795a60e47497f21f64e6d79420dc4c56c1907df22akschulz os.close(); 2805a60e47497f21f64e6d79420dc4c56c1907df22akschulz } catch (IOException e) {} 2815a60e47497f21f64e6d79420dc4c56c1907df22akschulz try { 2825a60e47497f21f64e6d79420dc4c56c1907df22akschulz if(fdOut != null) 2835a60e47497f21f64e6d79420dc4c56c1907df22akschulz fdOut.close(); 2845a60e47497f21f64e6d79420dc4c56c1907df22akschulz } catch (IOException e) {} 2855a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 2865a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 2875a60e47497f21f64e6d79420dc4c56c1907df22akschulz 2885a60e47497f21f64e6d79420dc4c56c1907df22akschulz private void writeMessage(Cursor c) { 2895a60e47497f21f64e6d79420dc4c56c1907df22akschulz Log.d(TAG, "c.getCount() = " + c.getCount()); 2905a60e47497f21f64e6d79420dc4c56c1907df22akschulz c.moveToPosition(-1); 2915a60e47497f21f64e6d79420dc4c56c1907df22akschulz if (c.moveToNext()) { 2925a60e47497f21f64e6d79420dc4c56c1907df22akschulz writeMessageContent(c); 2935a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 2945a60e47497f21f64e6d79420dc4c56c1907df22akschulz c.close(); 2955a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 2965a60e47497f21f64e6d79420dc4c56c1907df22akschulz 2975a60e47497f21f64e6d79420dc4c56c1907df22akschulz 2985a60e47497f21f64e6d79420dc4c56c1907df22akschulz private void dumpCursor(Cursor c) { 2995a60e47497f21f64e6d79420dc4c56c1907df22akschulz Log.d(TAG, "c.getCount() = " + c.getCount()); 3005a60e47497f21f64e6d79420dc4c56c1907df22akschulz c.moveToPosition(-1); 3015a60e47497f21f64e6d79420dc4c56c1907df22akschulz while (c.moveToNext()) { 3025a60e47497f21f64e6d79420dc4c56c1907df22akschulz printCursor(c); 3035a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 3045a60e47497f21f64e6d79420dc4c56c1907df22akschulz c.close(); 3055a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 3065a60e47497f21f64e6d79420dc4c56c1907df22akschulz 3075a60e47497f21f64e6d79420dc4c56c1907df22akschulz private void callBluetoothProvider() { 3085a60e47497f21f64e6d79420dc4c56c1907df22akschulz Log.d(TAG, "**** Test call into email provider ****"); 3095a60e47497f21f64e6d79420dc4c56c1907df22akschulz int accountId = 0; 3105a60e47497f21f64e6d79420dc4c56c1907df22akschulz int mailboxId = 0; 3115a60e47497f21f64e6d79420dc4c56c1907df22akschulz 3125a60e47497f21f64e6d79420dc4c56c1907df22akschulz Log.d(TAG, "contentUri = " + mEmailMessagesUri); 3135a60e47497f21f64e6d79420dc4c56c1907df22akschulz 3145a60e47497f21f64e6d79420dc4c56c1907df22akschulz Cursor c = mResolver.query(mEmailMessagesUri, EMAIL_ACCOUNT_PROJECTION, 3155a60e47497f21f64e6d79420dc4c56c1907df22akschulz null, null, "_id DESC"); 31670be005a18a35ec5fcb46152f0dfbe82156efa3aKim Schulz if (c != null) { 31770be005a18a35ec5fcb46152f0dfbe82156efa3aKim Schulz Log.d(TAG, "c.getCount() = " + c.getCount()); 31870be005a18a35ec5fcb46152f0dfbe82156efa3aKim Schulz c.moveToPosition(-1); 31970be005a18a35ec5fcb46152f0dfbe82156efa3aKim Schulz while (c.moveToNext()) { 3205a60e47497f21f64e6d79420dc4c56c1907df22akschulz printAccountInfo(c); 3215a60e47497f21f64e6d79420dc4c56c1907df22akschulz mailboxId = c.getInt(c.getColumnIndex( 3225a60e47497f21f64e6d79420dc4c56c1907df22akschulz BluetoothMapContract.MessageColumns.FOLDER_ID)); 3235a60e47497f21f64e6d79420dc4c56c1907df22akschulz accountId = c.getInt(c.getColumnIndex( 3245a60e47497f21f64e6d79420dc4c56c1907df22akschulz BluetoothMapContract.MessageColumns.ACCOUNT_ID)); 32570be005a18a35ec5fcb46152f0dfbe82156efa3aKim Schulz } 3265a60e47497f21f64e6d79420dc4c56c1907df22akschulz c.close(); 32770be005a18a35ec5fcb46152f0dfbe82156efa3aKim Schulz } else { 32870be005a18a35ec5fcb46152f0dfbe82156efa3aKim Schulz Log.d(TAG, "query failed"); 32970be005a18a35ec5fcb46152f0dfbe82156efa3aKim Schulz } 3305a60e47497f21f64e6d79420dc4c56c1907df22akschulz 3315a60e47497f21f64e6d79420dc4c56c1907df22akschulz final Bundle extras = new Bundle(2); 3325a60e47497f21f64e6d79420dc4c56c1907df22akschulz /* TODO: find mailbox from DB */ 3335a60e47497f21f64e6d79420dc4c56c1907df22akschulz extras.putLong(BluetoothMapContract.EXTRA_UPDATE_FOLDER_ID, mailboxId); 3345a60e47497f21f64e6d79420dc4c56c1907df22akschulz extras.putLong(BluetoothMapContract.EXTRA_UPDATE_ACCOUNT_ID, accountId); 3355a60e47497f21f64e6d79420dc4c56c1907df22akschulz Bundle myBundle = mResolver.call(mEmailUri, BluetoothMapContract.METHOD_UPDATE_FOLDER, 3365a60e47497f21f64e6d79420dc4c56c1907df22akschulz null, extras); 33770be005a18a35ec5fcb46152f0dfbe82156efa3aKim Schulz } 33870be005a18a35ec5fcb46152f0dfbe82156efa3aKim Schulz 3395a60e47497f21f64e6d79420dc4c56c1907df22akschulz 3405a60e47497f21f64e6d79420dc4c56c1907df22akschulz public void testMsgListing() { 3415a60e47497f21f64e6d79420dc4c56c1907df22akschulz initTestSetup(); 3425a60e47497f21f64e6d79420dc4c56c1907df22akschulz BluetoothMapContent mBtMapContent = new BluetoothMapContent(mContext, mAccount, 3435a60e47497f21f64e6d79420dc4c56c1907df22akschulz mMasInstance); 3445a60e47497f21f64e6d79420dc4c56c1907df22akschulz BluetoothMapAppParams appParams = new BluetoothMapAppParams(); 3455a60e47497f21f64e6d79420dc4c56c1907df22akschulz Log.d(TAG, "**** testMsgListing **** "); 3465a60e47497f21f64e6d79420dc4c56c1907df22akschulz BluetoothMapFolderElement fe = getInbox(); 3475a60e47497f21f64e6d79420dc4c56c1907df22akschulz 3485a60e47497f21f64e6d79420dc4c56c1907df22akschulz if (fe != null) { 3495a60e47497f21f64e6d79420dc4c56c1907df22akschulz if (D) Log.d(TAG, "folder name=" + fe.getName()); 3505a60e47497f21f64e6d79420dc4c56c1907df22akschulz 3515a60e47497f21f64e6d79420dc4c56c1907df22akschulz appParams.setFilterMessageType(0x0B); 3525a60e47497f21f64e6d79420dc4c56c1907df22akschulz appParams.setMaxListCount(1024); 3535a60e47497f21f64e6d79420dc4c56c1907df22akschulz appParams.setStartOffset(0); 3545a60e47497f21f64e6d79420dc4c56c1907df22akschulz 3555a60e47497f21f64e6d79420dc4c56c1907df22akschulz BluetoothMapMessageListing msgListing = mBtMapContent.msgListing(fe, appParams); 3565a60e47497f21f64e6d79420dc4c56c1907df22akschulz int listCount = msgListing.getCount(); 3575a60e47497f21f64e6d79420dc4c56c1907df22akschulz int msgListingSize = mBtMapContent.msgListingSize(fe, appParams); 3585a60e47497f21f64e6d79420dc4c56c1907df22akschulz 3595a60e47497f21f64e6d79420dc4c56c1907df22akschulz if (listCount == msgListingSize) { 3605a60e47497f21f64e6d79420dc4c56c1907df22akschulz Log.d(TAG, "testMsgListing - " + listCount ); 3615a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 3625a60e47497f21f64e6d79420dc4c56c1907df22akschulz else { 3635a60e47497f21f64e6d79420dc4c56c1907df22akschulz Log.d(TAG, "testMsgListing - None"); 3645a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 3655a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 3665a60e47497f21f64e6d79420dc4c56c1907df22akschulz else { 3675a60e47497f21f64e6d79420dc4c56c1907df22akschulz Log.d(TAG, "testMsgListing - failed "); 3685a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 3695a60e47497f21f64e6d79420dc4c56c1907df22akschulz 3705a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 3715a60e47497f21f64e6d79420dc4c56c1907df22akschulz 3725a60e47497f21f64e6d79420dc4c56c1907df22akschulz public void testMsgListingUnread() { 3735a60e47497f21f64e6d79420dc4c56c1907df22akschulz initTestSetup(); 3745a60e47497f21f64e6d79420dc4c56c1907df22akschulz BluetoothMapContent mBtMapContent = new BluetoothMapContent(mContext, mAccount, 3755a60e47497f21f64e6d79420dc4c56c1907df22akschulz mMasInstance); 3765a60e47497f21f64e6d79420dc4c56c1907df22akschulz BluetoothMapAppParams appParams = new BluetoothMapAppParams(); 3775a60e47497f21f64e6d79420dc4c56c1907df22akschulz Log.d(TAG, "**** testMsgListingUnread **** "); 3785a60e47497f21f64e6d79420dc4c56c1907df22akschulz BluetoothMapFolderElement fe = getInbox(); 3795a60e47497f21f64e6d79420dc4c56c1907df22akschulz 3805a60e47497f21f64e6d79420dc4c56c1907df22akschulz if (fe != null) { 3815a60e47497f21f64e6d79420dc4c56c1907df22akschulz 3825a60e47497f21f64e6d79420dc4c56c1907df22akschulz appParams.setFilterReadStatus(0x01); 3835a60e47497f21f64e6d79420dc4c56c1907df22akschulz appParams.setFilterMessageType(0x0B); 3845a60e47497f21f64e6d79420dc4c56c1907df22akschulz appParams.setMaxListCount(1024); 3855a60e47497f21f64e6d79420dc4c56c1907df22akschulz appParams.setStartOffset(0); 3865a60e47497f21f64e6d79420dc4c56c1907df22akschulz 3875a60e47497f21f64e6d79420dc4c56c1907df22akschulz BluetoothMapMessageListing msgListing = mBtMapContent.msgListing(fe, appParams); 3885a60e47497f21f64e6d79420dc4c56c1907df22akschulz 3895a60e47497f21f64e6d79420dc4c56c1907df22akschulz int listCount = msgListing.getCount(); 3905a60e47497f21f64e6d79420dc4c56c1907df22akschulz if (msgListing.getCount() > 0) { 3915a60e47497f21f64e6d79420dc4c56c1907df22akschulz Log.d(TAG, "testMsgListingUnread - " + listCount ); 3925a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 3935a60e47497f21f64e6d79420dc4c56c1907df22akschulz else { 3945a60e47497f21f64e6d79420dc4c56c1907df22akschulz Log.d(TAG, "testMsgListingUnread - None"); 3955a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 3965a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 3975a60e47497f21f64e6d79420dc4c56c1907df22akschulz else { 3985a60e47497f21f64e6d79420dc4c56c1907df22akschulz Log.d(TAG, "testMsgListingUnread - getInbox failed "); 3995a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 4005a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 4015a60e47497f21f64e6d79420dc4c56c1907df22akschulz 4025a60e47497f21f64e6d79420dc4c56c1907df22akschulz public void testMsgListingWithOriginator() { 4035a60e47497f21f64e6d79420dc4c56c1907df22akschulz initTestSetup(); 4045a60e47497f21f64e6d79420dc4c56c1907df22akschulz BluetoothMapContent mBtMapContent = new BluetoothMapContent(mContext, mAccount, 4055a60e47497f21f64e6d79420dc4c56c1907df22akschulz mMasInstance); 4065a60e47497f21f64e6d79420dc4c56c1907df22akschulz BluetoothMapAppParams appParams = new BluetoothMapAppParams(); 4075a60e47497f21f64e6d79420dc4c56c1907df22akschulz Log.d(TAG, "**** testMsgListingUnread **** "); 4085a60e47497f21f64e6d79420dc4c56c1907df22akschulz BluetoothMapFolderElement fe = getInbox(); 4095a60e47497f21f64e6d79420dc4c56c1907df22akschulz 4105a60e47497f21f64e6d79420dc4c56c1907df22akschulz if (fe != null) { 4115a60e47497f21f64e6d79420dc4c56c1907df22akschulz 4125a60e47497f21f64e6d79420dc4c56c1907df22akschulz appParams.setFilterOriginator("*scsc.*"); 4135a60e47497f21f64e6d79420dc4c56c1907df22akschulz appParams.setFilterMessageType(0x0B); 4145a60e47497f21f64e6d79420dc4c56c1907df22akschulz appParams.setMaxListCount(1024); 4155a60e47497f21f64e6d79420dc4c56c1907df22akschulz appParams.setStartOffset(0); 4165a60e47497f21f64e6d79420dc4c56c1907df22akschulz 4175a60e47497f21f64e6d79420dc4c56c1907df22akschulz BluetoothMapMessageListing msgListing = mBtMapContent.msgListing(fe, appParams); 4185a60e47497f21f64e6d79420dc4c56c1907df22akschulz 4195a60e47497f21f64e6d79420dc4c56c1907df22akschulz int listCount = msgListing.getCount(); 4205a60e47497f21f64e6d79420dc4c56c1907df22akschulz if (msgListing.getCount() > 0) { 4215a60e47497f21f64e6d79420dc4c56c1907df22akschulz Log.d(TAG, "testMsgListingWithOriginator - " + listCount ); 4225a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 4235a60e47497f21f64e6d79420dc4c56c1907df22akschulz else { 4245a60e47497f21f64e6d79420dc4c56c1907df22akschulz Log.d(TAG, "testMsgListingWithOriginator - None"); 4255a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 4265a60e47497f21f64e6d79420dc4c56c1907df22akschulz } else { 4275a60e47497f21f64e6d79420dc4c56c1907df22akschulz Log.d(TAG, "testMsgListingWithOriginator - getInbox failed "); 4285a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 4295a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 4305a60e47497f21f64e6d79420dc4c56c1907df22akschulz 4315a60e47497f21f64e6d79420dc4c56c1907df22akschulz public void testGetMessages() { 4325a60e47497f21f64e6d79420dc4c56c1907df22akschulz initTestSetup(); 4335a60e47497f21f64e6d79420dc4c56c1907df22akschulz BluetoothMapContent mBtMapContent = new BluetoothMapContent(mContext, mAccount, 4345a60e47497f21f64e6d79420dc4c56c1907df22akschulz mMasInstance); 4355a60e47497f21f64e6d79420dc4c56c1907df22akschulz BluetoothMapAppParams appParams = new BluetoothMapAppParams(); 4365a60e47497f21f64e6d79420dc4c56c1907df22akschulz Log.d(TAG, "**** testGetMessages **** "); 4375a60e47497f21f64e6d79420dc4c56c1907df22akschulz BluetoothMapFolderElement fe = getInbox(); 4385a60e47497f21f64e6d79420dc4c56c1907df22akschulz 4395a60e47497f21f64e6d79420dc4c56c1907df22akschulz if (fe != null) { 4405a60e47497f21f64e6d79420dc4c56c1907df22akschulz appParams.setAttachment(0); 4415a60e47497f21f64e6d79420dc4c56c1907df22akschulz appParams.setCharset(BluetoothMapContent.MAP_MESSAGE_CHARSET_UTF8); 4425a60e47497f21f64e6d79420dc4c56c1907df22akschulz 4435a60e47497f21f64e6d79420dc4c56c1907df22akschulz //get message handles 4445a60e47497f21f64e6d79420dc4c56c1907df22akschulz Cursor c = mResolver.query(mEmailMessagesUri, BT_MESSAGE_ID_PROJECTION, 4455a60e47497f21f64e6d79420dc4c56c1907df22akschulz null, null, "_id DESC"); 4465a60e47497f21f64e6d79420dc4c56c1907df22akschulz if (c != null) { 4475a60e47497f21f64e6d79420dc4c56c1907df22akschulz c.moveToPosition(-1); 4485a60e47497f21f64e6d79420dc4c56c1907df22akschulz while (c.moveToNext()) { 4495a60e47497f21f64e6d79420dc4c56c1907df22akschulz Long id = c.getLong(c.getColumnIndex(BluetoothMapContract.MessageColumns._ID)); 4505a60e47497f21f64e6d79420dc4c56c1907df22akschulz String handle = BluetoothMapUtils.getMapHandle(id, TYPE.EMAIL); 4515a60e47497f21f64e6d79420dc4c56c1907df22akschulz try { 4525a60e47497f21f64e6d79420dc4c56c1907df22akschulz // getMessage 4535a60e47497f21f64e6d79420dc4c56c1907df22akschulz byte[] bytes = mBtMapContent.getMessage(handle, appParams, fe, "1.1"); 4545a60e47497f21f64e6d79420dc4c56c1907df22akschulz Log.d(TAG, "testGetMessages id=" + id + ", handle=" + handle + 4555a60e47497f21f64e6d79420dc4c56c1907df22akschulz ", length=" + bytes.length ); 4565a60e47497f21f64e6d79420dc4c56c1907df22akschulz String testPrint = new String(bytes); 4575a60e47497f21f64e6d79420dc4c56c1907df22akschulz Log.d(TAG, "testGetMessage (only dump first part):\n" + testPrint ); 4585a60e47497f21f64e6d79420dc4c56c1907df22akschulz } catch (UnsupportedEncodingException e) { 4595a60e47497f21f64e6d79420dc4c56c1907df22akschulz Log.w(TAG, e); 4605a60e47497f21f64e6d79420dc4c56c1907df22akschulz } finally { 4615a60e47497f21f64e6d79420dc4c56c1907df22akschulz 4625a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 4635a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 4645a60e47497f21f64e6d79420dc4c56c1907df22akschulz } else { 4655a60e47497f21f64e6d79420dc4c56c1907df22akschulz Log.d(TAG, "testGetMessages - no cursor "); 4665a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 4675a60e47497f21f64e6d79420dc4c56c1907df22akschulz } else { 4685a60e47497f21f64e6d79420dc4c56c1907df22akschulz Log.d(TAG, "testGetMessages - getInbox failed "); 4695a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 4705a60e47497f21f64e6d79420dc4c56c1907df22akschulz 4715a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 4725a60e47497f21f64e6d79420dc4c56c1907df22akschulz 4735a60e47497f21f64e6d79420dc4c56c1907df22akschulz public void testDumpAccounts() { 4745a60e47497f21f64e6d79420dc4c56c1907df22akschulz initTestSetup(); 4755a60e47497f21f64e6d79420dc4c56c1907df22akschulz Log.d(TAG, "**** testDumpAccounts **** \n from: " + mEmailAccountUri.toString()); 4765a60e47497f21f64e6d79420dc4c56c1907df22akschulz Cursor c = mResolver.query(mEmailAccountUri, BT_ACCOUNT_PROJECTION, null, null, "_id DESC"); 4775a60e47497f21f64e6d79420dc4c56c1907df22akschulz if (c != null) { 4785a60e47497f21f64e6d79420dc4c56c1907df22akschulz dumpCursor(c); 4795a60e47497f21f64e6d79420dc4c56c1907df22akschulz } else { 4805a60e47497f21f64e6d79420dc4c56c1907df22akschulz Log.d(TAG, "query failed"); 4815a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 4825a60e47497f21f64e6d79420dc4c56c1907df22akschulz Log.w(TAG, "testDumpAccounts(): ThreadId: " + Thread.currentThread().getId()); 4835a60e47497f21f64e6d79420dc4c56c1907df22akschulz 4845a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 4855a60e47497f21f64e6d79420dc4c56c1907df22akschulz 4865a60e47497f21f64e6d79420dc4c56c1907df22akschulz public void testAccountUpdate() { 4875a60e47497f21f64e6d79420dc4c56c1907df22akschulz initTestSetup(); 4885a60e47497f21f64e6d79420dc4c56c1907df22akschulz Log.d(TAG, "**** testAccountUpdate **** \n of: " + mEmailAccountUri.toString()); 4895a60e47497f21f64e6d79420dc4c56c1907df22akschulz Cursor c = mResolver.query(mEmailAccountUri, BT_ACCOUNT_PROJECTION, null, null, "_id DESC"); 4905a60e47497f21f64e6d79420dc4c56c1907df22akschulz 4915a60e47497f21f64e6d79420dc4c56c1907df22akschulz if (c != null) { 4925a60e47497f21f64e6d79420dc4c56c1907df22akschulz c.moveToPosition(-1); 4935a60e47497f21f64e6d79420dc4c56c1907df22akschulz while (c.moveToNext()) { 4945a60e47497f21f64e6d79420dc4c56c1907df22akschulz printCursor(c); 4955a60e47497f21f64e6d79420dc4c56c1907df22akschulz Long id = c.getLong(c.getColumnIndex(BluetoothMapContract.AccountColumns._ID)); 4965a60e47497f21f64e6d79420dc4c56c1907df22akschulz int exposeFlag = c.getInt( 4975a60e47497f21f64e6d79420dc4c56c1907df22akschulz c.getColumnIndex(BluetoothMapContract.AccountColumns.FLAG_EXPOSE)); 4985a60e47497f21f64e6d79420dc4c56c1907df22akschulz String where = BluetoothMapContract.AccountColumns._ID + " = " + id; 4995a60e47497f21f64e6d79420dc4c56c1907df22akschulz ContentValues values = new ContentValues(); 5005a60e47497f21f64e6d79420dc4c56c1907df22akschulz if(exposeFlag == 1) { 5015a60e47497f21f64e6d79420dc4c56c1907df22akschulz values.put(BluetoothMapContract.AccountColumns.FLAG_EXPOSE, (int) 0); 5025a60e47497f21f64e6d79420dc4c56c1907df22akschulz } else { 5035a60e47497f21f64e6d79420dc4c56c1907df22akschulz values.put(BluetoothMapContract.AccountColumns.FLAG_EXPOSE, (int) 1); 5045a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 5055a60e47497f21f64e6d79420dc4c56c1907df22akschulz Log.i(TAG, "Calling update() with selection: " + where + 5065a60e47497f21f64e6d79420dc4c56c1907df22akschulz "values(exposeFlag): " + 5075a60e47497f21f64e6d79420dc4c56c1907df22akschulz values.getAsInteger(BluetoothMapContract.AccountColumns.FLAG_EXPOSE)); 5085a60e47497f21f64e6d79420dc4c56c1907df22akschulz mResolver.update(mEmailAccountUri, values, where, null); 5095a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 5105a60e47497f21f64e6d79420dc4c56c1907df22akschulz c.close(); 5115a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 5125a60e47497f21f64e6d79420dc4c56c1907df22akschulz 51370be005a18a35ec5fcb46152f0dfbe82156efa3aKim Schulz } 51470be005a18a35ec5fcb46152f0dfbe82156efa3aKim Schulz 51570be005a18a35ec5fcb46152f0dfbe82156efa3aKim Schulz public void testDumpMessages() { 5165a60e47497f21f64e6d79420dc4c56c1907df22akschulz initTestSetup(); 5175a60e47497f21f64e6d79420dc4c56c1907df22akschulz 5185a60e47497f21f64e6d79420dc4c56c1907df22akschulz if (D) Log.d(TAG, "**** testDumpMessages **** \n uri=" + mEmailMessagesUri.toString()); 5195a60e47497f21f64e6d79420dc4c56c1907df22akschulz BluetoothMapFolderElement fe = getInbox(); 5205a60e47497f21f64e6d79420dc4c56c1907df22akschulz if (fe != null) 5215a60e47497f21f64e6d79420dc4c56c1907df22akschulz { 5225a60e47497f21f64e6d79420dc4c56c1907df22akschulz String where =""; 5235a60e47497f21f64e6d79420dc4c56c1907df22akschulz //where = BluetoothMapContract.MessageColumns.FOLDER_ID + " = " + fe.getEmailFolderId(); 5245a60e47497f21f64e6d79420dc4c56c1907df22akschulz Cursor c = mResolver.query(mEmailMessagesUri, BT_MESSAGE_PROJECTION, 5255a60e47497f21f64e6d79420dc4c56c1907df22akschulz where, null, "_id DESC"); 5265a60e47497f21f64e6d79420dc4c56c1907df22akschulz if (c != null) { 5275a60e47497f21f64e6d79420dc4c56c1907df22akschulz dumpCursor(c); 5285a60e47497f21f64e6d79420dc4c56c1907df22akschulz } else { 5295a60e47497f21f64e6d79420dc4c56c1907df22akschulz if (D) Log.d(TAG, "query failed"); 5305a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 5315a60e47497f21f64e6d79420dc4c56c1907df22akschulz if (D) Log.w(TAG, "dumpMessage(): ThreadId: " + Thread.currentThread().getId()); 5325a60e47497f21f64e6d79420dc4c56c1907df22akschulz } else { 5335a60e47497f21f64e6d79420dc4c56c1907df22akschulz if (D) Log.w(TAG, "dumpMessage(): ThreadId: " + Thread.currentThread().getId()); 5345a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 5355a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 5365a60e47497f21f64e6d79420dc4c56c1907df22akschulz 5375a60e47497f21f64e6d79420dc4c56c1907df22akschulz public void testDumpMessageContent() { 5385a60e47497f21f64e6d79420dc4c56c1907df22akschulz initTestSetup(); 5395a60e47497f21f64e6d79420dc4c56c1907df22akschulz 5405a60e47497f21f64e6d79420dc4c56c1907df22akschulz Log.d(TAG, "**** testDumpMessageContent **** from: " + mEmailMessagesUri.toString()); 5415a60e47497f21f64e6d79420dc4c56c1907df22akschulz// BluetoothMapFolderElement fe = getInbox(); 5425a60e47497f21f64e6d79420dc4c56c1907df22akschulz// String where = BluetoothMapContract.MessageColumns.FOLDER_ID + " = " + fe.getEmailFolderId(); 5435a60e47497f21f64e6d79420dc4c56c1907df22akschulz// where += " AND " + BluetoothMapContract.MessageColumns.FLAG_HIGH_PRIORITY + " = 0"; 5445a60e47497f21f64e6d79420dc4c56c1907df22akschulz 5455a60e47497f21f64e6d79420dc4c56c1907df22akschulz Cursor c = mResolver.query(mEmailMessagesUri, BT_MESSAGE_PROJECTION, null, null, "_id DESC"); 5465a60e47497f21f64e6d79420dc4c56c1907df22akschulz if (c != null && c.moveToNext()) { 5475a60e47497f21f64e6d79420dc4c56c1907df22akschulz dumpMessageContent(c); 5485a60e47497f21f64e6d79420dc4c56c1907df22akschulz } else { 5495a60e47497f21f64e6d79420dc4c56c1907df22akschulz Log.d(TAG, "query failed"); 5505a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 5515a60e47497f21f64e6d79420dc4c56c1907df22akschulz Log.w(TAG, "dumpMessage(): ThreadId: " + Thread.currentThread().getId()); 5525a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 5535a60e47497f21f64e6d79420dc4c56c1907df22akschulz 5545a60e47497f21f64e6d79420dc4c56c1907df22akschulz public void testWriteMessageContent() { 5555a60e47497f21f64e6d79420dc4c56c1907df22akschulz initTestSetup(); 5565a60e47497f21f64e6d79420dc4c56c1907df22akschulz Log.d(TAG, "**** testWriteMessageContent **** from: " + mEmailMessagesUri.toString()); 5575a60e47497f21f64e6d79420dc4c56c1907df22akschulz BluetoothMapFolderElement fe = getInbox(); 5585a60e47497f21f64e6d79420dc4c56c1907df22akschulz String where = BluetoothMapContract.MessageColumns.FOLDER_ID + " = " + fe.getFolderId(); 5595a60e47497f21f64e6d79420dc4c56c1907df22akschulz// where += " AND " + BluetoothMapContract.MessageColumns.HIGH_PRIORITY + " = 0"; 5605a60e47497f21f64e6d79420dc4c56c1907df22akschulz Cursor c = mResolver.query(mEmailMessagesUri, BT_MESSAGE_PROJECTION, where, null, "_id DESC"); 5615a60e47497f21f64e6d79420dc4c56c1907df22akschulz if (c != null) { 5625a60e47497f21f64e6d79420dc4c56c1907df22akschulz writeMessage(c); 5635a60e47497f21f64e6d79420dc4c56c1907df22akschulz } else { 5645a60e47497f21f64e6d79420dc4c56c1907df22akschulz Log.d(TAG, "query failed"); 5655a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 5665a60e47497f21f64e6d79420dc4c56c1907df22akschulz Log.w(TAG, "writeMessage(): ThreadId: " + Thread.currentThread().getId()); 5675a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 5685a60e47497f21f64e6d79420dc4c56c1907df22akschulz 5695a60e47497f21f64e6d79420dc4c56c1907df22akschulz /* 5705a60e47497f21f64e6d79420dc4c56c1907df22akschulz * Handle test cases 5715a60e47497f21f64e6d79420dc4c56c1907df22akschulz */ 5725a60e47497f21f64e6d79420dc4c56c1907df22akschulz private static final long HANDLE_TYPE_SMS_CDMA_MASK = (((long)0x1)<<60); 5735a60e47497f21f64e6d79420dc4c56c1907df22akschulz 5745a60e47497f21f64e6d79420dc4c56c1907df22akschulz public void testHandle() { 5755a60e47497f21f64e6d79420dc4c56c1907df22akschulz String handleStr = null; 5765a60e47497f21f64e6d79420dc4c56c1907df22akschulz Debug.startMethodTracing("str_format"); 5775a60e47497f21f64e6d79420dc4c56c1907df22akschulz for(long i = 0; i < 10000; i++) { 5785a60e47497f21f64e6d79420dc4c56c1907df22akschulz handleStr = String.format("%016X",(i | HANDLE_TYPE_SMS_CDMA_MASK)); 5795a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 5805a60e47497f21f64e6d79420dc4c56c1907df22akschulz Debug.stopMethodTracing(); 5815a60e47497f21f64e6d79420dc4c56c1907df22akschulz Debug.startMethodTracing("getHandleString"); 5825a60e47497f21f64e6d79420dc4c56c1907df22akschulz for(long i = 0; i < 10000; i++) { 5835a60e47497f21f64e6d79420dc4c56c1907df22akschulz handleStr = BluetoothMapUtils.getLongAsString(i | HANDLE_TYPE_SMS_CDMA_MASK); 5845a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 5855a60e47497f21f64e6d79420dc4c56c1907df22akschulz Debug.stopMethodTracing(); 5865a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 5875a60e47497f21f64e6d79420dc4c56c1907df22akschulz 5885a60e47497f21f64e6d79420dc4c56c1907df22akschulz /* 5895a60e47497f21f64e6d79420dc4c56c1907df22akschulz * Folder test cases 5905a60e47497f21f64e6d79420dc4c56c1907df22akschulz */ 5915a60e47497f21f64e6d79420dc4c56c1907df22akschulz 5925a60e47497f21f64e6d79420dc4c56c1907df22akschulz public void testDumpEmailFolders() { 5935a60e47497f21f64e6d79420dc4c56c1907df22akschulz initTestSetup(); 5945a60e47497f21f64e6d79420dc4c56c1907df22akschulz Debug.startMethodTracing(); 5955a60e47497f21f64e6d79420dc4c56c1907df22akschulz String where = null; 5965a60e47497f21f64e6d79420dc4c56c1907df22akschulz Cursor c = mResolver.query(mEmailFolderUri, BT_FOLDER_PROJECTION, where, null, "_id DESC"); 5975a60e47497f21f64e6d79420dc4c56c1907df22akschulz if (c != null) { 5985a60e47497f21f64e6d79420dc4c56c1907df22akschulz dumpCursor(c); 5995a60e47497f21f64e6d79420dc4c56c1907df22akschulz c.close(); 6005a60e47497f21f64e6d79420dc4c56c1907df22akschulz } else { 6015a60e47497f21f64e6d79420dc4c56c1907df22akschulz Log.d(TAG, "query failed"); 6025a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 6035a60e47497f21f64e6d79420dc4c56c1907df22akschulz Debug.stopMethodTracing(); 6045a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 6055a60e47497f21f64e6d79420dc4c56c1907df22akschulz 6065a60e47497f21f64e6d79420dc4c56c1907df22akschulz public void testFolderPath() { 6075a60e47497f21f64e6d79420dc4c56c1907df22akschulz initTestSetup(); 6085a60e47497f21f64e6d79420dc4c56c1907df22akschulz Log.d(TAG, "**** testFolderPath **** "); 6095a60e47497f21f64e6d79420dc4c56c1907df22akschulz BluetoothMapFolderElement fe = getInbox(); 6105a60e47497f21f64e6d79420dc4c56c1907df22akschulz BluetoothMapFolderElement folder = fe.getFolderById(fe.getFolderId()); 6115a60e47497f21f64e6d79420dc4c56c1907df22akschulz if(folder == null) { 6125a60e47497f21f64e6d79420dc4c56c1907df22akschulz Log.d(TAG, "**** testFolderPath unable to find the folder with id: " + 6135a60e47497f21f64e6d79420dc4c56c1907df22akschulz fe.getFolderId()); 6145a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 6155a60e47497f21f64e6d79420dc4c56c1907df22akschulz else { 6165a60e47497f21f64e6d79420dc4c56c1907df22akschulz Log.d(TAG, "**** testFolderPath found the folder with id: " + 6175a60e47497f21f64e6d79420dc4c56c1907df22akschulz fe.getFolderId() + "\nFull path: " + 6185a60e47497f21f64e6d79420dc4c56c1907df22akschulz folder.getFullPath()); 6195a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 6205a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 6215a60e47497f21f64e6d79420dc4c56c1907df22akschulz 6225a60e47497f21f64e6d79420dc4c56c1907df22akschulz public void testFolderElement() { 6235a60e47497f21f64e6d79420dc4c56c1907df22akschulz Log.d(TAG, "**** testFolderElement **** "); 6245a60e47497f21f64e6d79420dc4c56c1907df22akschulz BluetoothMapFolderElement fe = new BluetoothMapFolderElement("root", null); 6255a60e47497f21f64e6d79420dc4c56c1907df22akschulz fe = fe.addEmailFolder("MsG", 1); 6265a60e47497f21f64e6d79420dc4c56c1907df22akschulz fe.addEmailFolder("Outbox", 100); 6275a60e47497f21f64e6d79420dc4c56c1907df22akschulz fe.addEmailFolder("Sent", 200); 6285a60e47497f21f64e6d79420dc4c56c1907df22akschulz BluetoothMapFolderElement inbox = fe.addEmailFolder("Inbox", 300); 6295a60e47497f21f64e6d79420dc4c56c1907df22akschulz fe.addEmailFolder("Draft", 400); 6305a60e47497f21f64e6d79420dc4c56c1907df22akschulz fe.addEmailFolder("Deleted", 500); 6315a60e47497f21f64e6d79420dc4c56c1907df22akschulz inbox.addEmailFolder("keep", 301); 6325a60e47497f21f64e6d79420dc4c56c1907df22akschulz inbox.addEmailFolder("private", 302); 6335a60e47497f21f64e6d79420dc4c56c1907df22akschulz inbox.addEmailFolder("junk", 303); 6345a60e47497f21f64e6d79420dc4c56c1907df22akschulz 6355a60e47497f21f64e6d79420dc4c56c1907df22akschulz BluetoothMapFolderElement folder = fe.getFolderById(400); 6365a60e47497f21f64e6d79420dc4c56c1907df22akschulz assertEquals("draft", folder.getName()); 6375a60e47497f21f64e6d79420dc4c56c1907df22akschulz assertEquals("private", fe.getFolderById(302).getName()); 6385a60e47497f21f64e6d79420dc4c56c1907df22akschulz assertEquals("junk", fe.getRoot().getFolderById(303).getName()); 6395a60e47497f21f64e6d79420dc4c56c1907df22akschulz assertEquals("msg/inbox/keep", fe.getFolderById(301).getFullPath()); 6405a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 6415a60e47497f21f64e6d79420dc4c56c1907df22akschulz 6425a60e47497f21f64e6d79420dc4c56c1907df22akschulz /* 6435a60e47497f21f64e6d79420dc4c56c1907df22akschulz * SMS test cases 6445a60e47497f21f64e6d79420dc4c56c1907df22akschulz */ 6455a60e47497f21f64e6d79420dc4c56c1907df22akschulz public void testAddSmsEntries() { 6465a60e47497f21f64e6d79420dc4c56c1907df22akschulz int count = 1000; 6475a60e47497f21f64e6d79420dc4c56c1907df22akschulz mContext = this.getContext(); 6485a60e47497f21f64e6d79420dc4c56c1907df22akschulz mResolver = mContext.getContentResolver(); 6495a60e47497f21f64e6d79420dc4c56c1907df22akschulz ContentValues values[] = new ContentValues[count]; 6505a60e47497f21f64e6d79420dc4c56c1907df22akschulz long date = System.currentTimeMillis(); 6515a60e47497f21f64e6d79420dc4c56c1907df22akschulz Log.i(TAG, "Preparing messages..."); 6525a60e47497f21f64e6d79420dc4c56c1907df22akschulz for (int x=0;x<count;x++){ 6535a60e47497f21f64e6d79420dc4c56c1907df22akschulz //if (D) Log.d(TAG, "*** Adding dummy sms #"+x); 6545a60e47497f21f64e6d79420dc4c56c1907df22akschulz 6555a60e47497f21f64e6d79420dc4c56c1907df22akschulz ContentValues item = new ContentValues(4); 6565a60e47497f21f64e6d79420dc4c56c1907df22akschulz item.put("address", "1234"); 6575a60e47497f21f64e6d79420dc4c56c1907df22akschulz item.put("body", "test message "+x); 6585a60e47497f21f64e6d79420dc4c56c1907df22akschulz item.put("date", date); 6595a60e47497f21f64e6d79420dc4c56c1907df22akschulz item.put("read", "0"); 6605a60e47497f21f64e6d79420dc4c56c1907df22akschulz 6615a60e47497f21f64e6d79420dc4c56c1907df22akschulz values[x] = item; 6625a60e47497f21f64e6d79420dc4c56c1907df22akschulz // Uri mUri = mResolver.insert(Uri.parse("content://sms"), item); 6635a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 6645a60e47497f21f64e6d79420dc4c56c1907df22akschulz Log.i(TAG, "Starting bulk insert..."); 6655a60e47497f21f64e6d79420dc4c56c1907df22akschulz mResolver.bulkInsert(Uri.parse("content://sms"), values); 6665a60e47497f21f64e6d79420dc4c56c1907df22akschulz Log.i(TAG, "Bulk insert done."); 6675a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 6685a60e47497f21f64e6d79420dc4c56c1907df22akschulz 6695a60e47497f21f64e6d79420dc4c56c1907df22akschulz public void testAddSms() { 6705a60e47497f21f64e6d79420dc4c56c1907df22akschulz mContext = this.getContext(); 6715a60e47497f21f64e6d79420dc4c56c1907df22akschulz mResolver = mContext.getContentResolver(); 6725a60e47497f21f64e6d79420dc4c56c1907df22akschulz if (D) Log.d(TAG, "*** Adding dummy sms #"); 6735a60e47497f21f64e6d79420dc4c56c1907df22akschulz 6745a60e47497f21f64e6d79420dc4c56c1907df22akschulz ContentValues item = new ContentValues(); 6755a60e47497f21f64e6d79420dc4c56c1907df22akschulz item.put("address", "1234"); 6765a60e47497f21f64e6d79420dc4c56c1907df22akschulz item.put("body", "test message"); 6775a60e47497f21f64e6d79420dc4c56c1907df22akschulz item.put("date", System.currentTimeMillis()); 6785a60e47497f21f64e6d79420dc4c56c1907df22akschulz item.put("read", "0"); 6795a60e47497f21f64e6d79420dc4c56c1907df22akschulz 6805a60e47497f21f64e6d79420dc4c56c1907df22akschulz Uri mUri = mResolver.insert(Uri.parse("content://sms"), item); 6815a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 6825a60e47497f21f64e6d79420dc4c56c1907df22akschulz 6835a60e47497f21f64e6d79420dc4c56c1907df22akschulz public void testServiceSms() { 68470be005a18a35ec5fcb46152f0dfbe82156efa3aKim Schulz mContext = this.getContext(); 68570be005a18a35ec5fcb46152f0dfbe82156efa3aKim Schulz mResolver = mContext.getContentResolver(); 6865a60e47497f21f64e6d79420dc4c56c1907df22akschulz if (D) Log.d(TAG, "*** Adding dummy sms #"); 6875a60e47497f21f64e6d79420dc4c56c1907df22akschulz 6885a60e47497f21f64e6d79420dc4c56c1907df22akschulz ContentValues item = new ContentValues(); 6895a60e47497f21f64e6d79420dc4c56c1907df22akschulz item.put("address", "C-Bonde"); 6905a60e47497f21f64e6d79420dc4c56c1907df22akschulz item.put("body", "test message"); 6915a60e47497f21f64e6d79420dc4c56c1907df22akschulz item.put("date", System.currentTimeMillis()); 6925a60e47497f21f64e6d79420dc4c56c1907df22akschulz item.put("read", "0"); 6935a60e47497f21f64e6d79420dc4c56c1907df22akschulz 6945a60e47497f21f64e6d79420dc4c56c1907df22akschulz Uri mUri = mResolver.insert(Uri.parse("content://sms"), item); 6955a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 6965a60e47497f21f64e6d79420dc4c56c1907df22akschulz 6975a60e47497f21f64e6d79420dc4c56c1907df22akschulz /* 6985a60e47497f21f64e6d79420dc4c56c1907df22akschulz * MMS content test cases 6995a60e47497f21f64e6d79420dc4c56c1907df22akschulz */ 7005a60e47497f21f64e6d79420dc4c56c1907df22akschulz public static final int MMS_FROM = 0x89; 7015a60e47497f21f64e6d79420dc4c56c1907df22akschulz public static final int MMS_TO = 0x97; 7025a60e47497f21f64e6d79420dc4c56c1907df22akschulz public static final int MMS_BCC = 0x81; 7035a60e47497f21f64e6d79420dc4c56c1907df22akschulz public static final int MMS_CC = 0x82; 7045a60e47497f21f64e6d79420dc4c56c1907df22akschulz 7055a60e47497f21f64e6d79420dc4c56c1907df22akschulz private void printMmsAddr(long id) { 7065a60e47497f21f64e6d79420dc4c56c1907df22akschulz final String[] projection = null; 7075a60e47497f21f64e6d79420dc4c56c1907df22akschulz String selection = new String("msg_id=" + id); 7085a60e47497f21f64e6d79420dc4c56c1907df22akschulz String uriStr = String.format("content://mms/%d/addr", id); 7095a60e47497f21f64e6d79420dc4c56c1907df22akschulz Uri uriAddress = Uri.parse(uriStr); 7105a60e47497f21f64e6d79420dc4c56c1907df22akschulz Cursor c = mResolver.query(uriAddress, projection, selection, null, null); 7115a60e47497f21f64e6d79420dc4c56c1907df22akschulz 7125a60e47497f21f64e6d79420dc4c56c1907df22akschulz if (c.moveToFirst()) { 7135a60e47497f21f64e6d79420dc4c56c1907df22akschulz do { 7145a60e47497f21f64e6d79420dc4c56c1907df22akschulz String add = c.getString(c.getColumnIndex("address")); 7155a60e47497f21f64e6d79420dc4c56c1907df22akschulz Integer type = c.getInt(c.getColumnIndex("type")); 7165a60e47497f21f64e6d79420dc4c56c1907df22akschulz if (type == MMS_TO) { 7175a60e47497f21f64e6d79420dc4c56c1907df22akschulz if (D) Log.d(TAG, " recipient: " + add + " (type: " + type + ")"); 7185a60e47497f21f64e6d79420dc4c56c1907df22akschulz } else if (type == MMS_FROM) { 7195a60e47497f21f64e6d79420dc4c56c1907df22akschulz if (D) Log.d(TAG, " originator: " + add + " (type: " + type + ")"); 7205a60e47497f21f64e6d79420dc4c56c1907df22akschulz } else { 7215a60e47497f21f64e6d79420dc4c56c1907df22akschulz if (D) Log.d(TAG, " address other: " + add + " (type: " + type + ")"); 7225a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 7235a60e47497f21f64e6d79420dc4c56c1907df22akschulz printCursor(c); 7245a60e47497f21f64e6d79420dc4c56c1907df22akschulz 7255a60e47497f21f64e6d79420dc4c56c1907df22akschulz } while(c.moveToNext()); 7265a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 7275a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 7285a60e47497f21f64e6d79420dc4c56c1907df22akschulz 7295a60e47497f21f64e6d79420dc4c56c1907df22akschulz private void printMmsPartImage(long partid) { 7305a60e47497f21f64e6d79420dc4c56c1907df22akschulz String uriStr = String.format("content://mms/part/%d", partid); 7315a60e47497f21f64e6d79420dc4c56c1907df22akschulz Uri uriAddress = Uri.parse(uriStr); 7325a60e47497f21f64e6d79420dc4c56c1907df22akschulz int ch; 7335a60e47497f21f64e6d79420dc4c56c1907df22akschulz StringBuffer sb = new StringBuffer(""); 7345a60e47497f21f64e6d79420dc4c56c1907df22akschulz InputStream is = null; 7355a60e47497f21f64e6d79420dc4c56c1907df22akschulz 7365a60e47497f21f64e6d79420dc4c56c1907df22akschulz try { 7375a60e47497f21f64e6d79420dc4c56c1907df22akschulz is = mResolver.openInputStream(uriAddress); 7385a60e47497f21f64e6d79420dc4c56c1907df22akschulz 7395a60e47497f21f64e6d79420dc4c56c1907df22akschulz while ((ch = is.read()) != -1) { 7405a60e47497f21f64e6d79420dc4c56c1907df22akschulz sb.append((char)ch); 7415a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 7425a60e47497f21f64e6d79420dc4c56c1907df22akschulz if (D) Log.d(TAG, sb.toString()); 7435a60e47497f21f64e6d79420dc4c56c1907df22akschulz 7445a60e47497f21f64e6d79420dc4c56c1907df22akschulz } catch (IOException e) { 7455a60e47497f21f64e6d79420dc4c56c1907df22akschulz // do nothing for now 7465a60e47497f21f64e6d79420dc4c56c1907df22akschulz e.printStackTrace(); 7475a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 7485a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 7495a60e47497f21f64e6d79420dc4c56c1907df22akschulz 7505a60e47497f21f64e6d79420dc4c56c1907df22akschulz private void printMmsParts(long id) { 7515a60e47497f21f64e6d79420dc4c56c1907df22akschulz final String[] projection = null; 7525a60e47497f21f64e6d79420dc4c56c1907df22akschulz String selection = new String("mid=" + id); 7535a60e47497f21f64e6d79420dc4c56c1907df22akschulz String uriStr = String.format("content://mms/%d/part", id); 7545a60e47497f21f64e6d79420dc4c56c1907df22akschulz Uri uriAddress = Uri.parse(uriStr); 7555a60e47497f21f64e6d79420dc4c56c1907df22akschulz Cursor c = mResolver.query(uriAddress, projection, selection, null, null); 7565a60e47497f21f64e6d79420dc4c56c1907df22akschulz 7575a60e47497f21f64e6d79420dc4c56c1907df22akschulz if (c.moveToFirst()) { 7585a60e47497f21f64e6d79420dc4c56c1907df22akschulz int i = 0; 7595a60e47497f21f64e6d79420dc4c56c1907df22akschulz do { 7605a60e47497f21f64e6d79420dc4c56c1907df22akschulz if (D) Log.d(TAG, " part " + i++); 7615a60e47497f21f64e6d79420dc4c56c1907df22akschulz printCursor(c); 7625a60e47497f21f64e6d79420dc4c56c1907df22akschulz 7635a60e47497f21f64e6d79420dc4c56c1907df22akschulz /* if (ct.equals("image/jpeg")) { */ 7645a60e47497f21f64e6d79420dc4c56c1907df22akschulz /* printMmsPartImage(partid); */ 7655a60e47497f21f64e6d79420dc4c56c1907df22akschulz /* } */ 7665a60e47497f21f64e6d79420dc4c56c1907df22akschulz } while(c.moveToNext()); 7675a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 76870be005a18a35ec5fcb46152f0dfbe82156efa3aKim Schulz } 7695a60e47497f21f64e6d79420dc4c56c1907df22akschulz 7705a60e47497f21f64e6d79420dc4c56c1907df22akschulz public void dumpMmsTable() { 7715a60e47497f21f64e6d79420dc4c56c1907df22akschulz mContext = this.getContext(); 7725a60e47497f21f64e6d79420dc4c56c1907df22akschulz mResolver = mContext.getContentResolver(); 7735a60e47497f21f64e6d79420dc4c56c1907df22akschulz 7745a60e47497f21f64e6d79420dc4c56c1907df22akschulz if (D) Log.d(TAG, "**** Dump of mms table ****"); 7755a60e47497f21f64e6d79420dc4c56c1907df22akschulz Cursor c = mResolver.query(Mms.CONTENT_URI, 7765a60e47497f21f64e6d79420dc4c56c1907df22akschulz null, null, null, "_id DESC"); 7775a60e47497f21f64e6d79420dc4c56c1907df22akschulz if (c != null) { 7785a60e47497f21f64e6d79420dc4c56c1907df22akschulz if (D) Log.d(TAG, "c.getCount() = " + c.getCount()); 7795a60e47497f21f64e6d79420dc4c56c1907df22akschulz c.moveToPosition(-1); 7805a60e47497f21f64e6d79420dc4c56c1907df22akschulz while (c.moveToNext()) { 7815a60e47497f21f64e6d79420dc4c56c1907df22akschulz Log.d(TAG,"Message:"); 7825a60e47497f21f64e6d79420dc4c56c1907df22akschulz printCursor(c); 7835a60e47497f21f64e6d79420dc4c56c1907df22akschulz long id = c.getLong(c.getColumnIndex(BaseColumns._ID)); 7845a60e47497f21f64e6d79420dc4c56c1907df22akschulz Log.d(TAG,"Address:"); 7855a60e47497f21f64e6d79420dc4c56c1907df22akschulz printMmsAddr(id); 7865a60e47497f21f64e6d79420dc4c56c1907df22akschulz Log.d(TAG,"Parts:"); 7875a60e47497f21f64e6d79420dc4c56c1907df22akschulz printMmsParts(id); 7885a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 7895a60e47497f21f64e6d79420dc4c56c1907df22akschulz c.close(); 7905a60e47497f21f64e6d79420dc4c56c1907df22akschulz } else { 7915a60e47497f21f64e6d79420dc4c56c1907df22akschulz Log.d(TAG, "query failed"); 7925a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 79370be005a18a35ec5fcb46152f0dfbe82156efa3aKim Schulz } 7945a60e47497f21f64e6d79420dc4c56c1907df22akschulz 7955a60e47497f21f64e6d79420dc4c56c1907df22akschulz /** 7965a60e47497f21f64e6d79420dc4c56c1907df22akschulz * This dumps the thread database. 7975a60e47497f21f64e6d79420dc4c56c1907df22akschulz * Interesting how useful this is. 7985a60e47497f21f64e6d79420dc4c56c1907df22akschulz * - DATE is described to be the creation date of the thread. But it actually 7995a60e47497f21f64e6d79420dc4c56c1907df22akschulz * contains the time-date of the last activity of the thread. 8005a60e47497f21f64e6d79420dc4c56c1907df22akschulz * - RECIPIENTS is a list of the contacts related to the thread. The number can 8015a60e47497f21f64e6d79420dc4c56c1907df22akschulz * be found for both MMS and SMS in the "canonical-addresses" table. 8025a60e47497f21f64e6d79420dc4c56c1907df22akschulz * - The READ column tells if the thread have been read. (read = 1: no unread messages) 8035a60e47497f21f64e6d79420dc4c56c1907df22akschulz * - The snippet is a small piece of text from the last message, and could be used as thread 8045a60e47497f21f64e6d79420dc4c56c1907df22akschulz * name. Please however note that if we do this, the version-counter should change each 8055a60e47497f21f64e6d79420dc4c56c1907df22akschulz * time a message is added to the thread. But since it changes the read attribute and 8065a60e47497f21f64e6d79420dc4c56c1907df22akschulz * last activity, it changes anyway. 8075a60e47497f21f64e6d79420dc4c56c1907df22akschulz * - 8085a60e47497f21f64e6d79420dc4c56c1907df22akschulz */ 8095a60e47497f21f64e6d79420dc4c56c1907df22akschulz 8105a60e47497f21f64e6d79420dc4c56c1907df22akschulz 8115a60e47497f21f64e6d79420dc4c56c1907df22akschulz public void dumpThreadsTable() { 8125a60e47497f21f64e6d79420dc4c56c1907df22akschulz mContext = this.getContext(); 8135a60e47497f21f64e6d79420dc4c56c1907df22akschulz mResolver = mContext.getContentResolver(); 8145a60e47497f21f64e6d79420dc4c56c1907df22akschulz mContacts.clearCache(); 8155a60e47497f21f64e6d79420dc4c56c1907df22akschulz Uri uri = Threads.CONTENT_URI.buildUpon().appendQueryParameter("simple", "true").build(); 8165a60e47497f21f64e6d79420dc4c56c1907df22akschulz 8175a60e47497f21f64e6d79420dc4c56c1907df22akschulz if (D) Log.d(TAG, "**** Dump of Threads table ****\nUri: " + uri); 8185a60e47497f21f64e6d79420dc4c56c1907df22akschulz Cursor c = mResolver.query(uri, 8195a60e47497f21f64e6d79420dc4c56c1907df22akschulz null, null, null, "_id DESC"); 8205a60e47497f21f64e6d79420dc4c56c1907df22akschulz if (c != null) { 8215a60e47497f21f64e6d79420dc4c56c1907df22akschulz if (D) Log.d(TAG, "c.getCount() = " + c.getCount()); 8225a60e47497f21f64e6d79420dc4c56c1907df22akschulz c.moveToPosition(-1); 8235a60e47497f21f64e6d79420dc4c56c1907df22akschulz while (c.moveToNext()) { 8245a60e47497f21f64e6d79420dc4c56c1907df22akschulz Log.d(TAG,"Threads:"); 8255a60e47497f21f64e6d79420dc4c56c1907df22akschulz printCursor(c); 8265a60e47497f21f64e6d79420dc4c56c1907df22akschulz String ids = c.getString(c.getColumnIndex(Threads.RECIPIENT_IDS)); 8275a60e47497f21f64e6d79420dc4c56c1907df22akschulz Log.d(TAG,"Address:"); 8285a60e47497f21f64e6d79420dc4c56c1907df22akschulz printAddresses(ids); 8295a60e47497f21f64e6d79420dc4c56c1907df22akschulz/* Log.d(TAG,"Parts:"); 8305a60e47497f21f64e6d79420dc4c56c1907df22akschulz printMmsParts(id);*/ 8315a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 8325a60e47497f21f64e6d79420dc4c56c1907df22akschulz c.close(); 8335a60e47497f21f64e6d79420dc4c56c1907df22akschulz } else { 8345a60e47497f21f64e6d79420dc4c56c1907df22akschulz Log.d(TAG, "query failed"); 8355a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 8365a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 8375a60e47497f21f64e6d79420dc4c56c1907df22akschulz 8385a60e47497f21f64e6d79420dc4c56c1907df22akschulz /** 8395a60e47497f21f64e6d79420dc4c56c1907df22akschulz * This test shows the content of the canonicalAddresses table. 8405a60e47497f21f64e6d79420dc4c56c1907df22akschulz * Conclusion: 8415a60e47497f21f64e6d79420dc4c56c1907df22akschulz * The _id column matches the id's from the RECIPIENT_IDS column 8425a60e47497f21f64e6d79420dc4c56c1907df22akschulz * in the Threads table, hence are to be used to map from an id to 8435a60e47497f21f64e6d79420dc4c56c1907df22akschulz * a phone number, which then can be matched to a contact. 8445a60e47497f21f64e6d79420dc4c56c1907df22akschulz */ 8455a60e47497f21f64e6d79420dc4c56c1907df22akschulz public void dumpCanAddrTable() { 8465a60e47497f21f64e6d79420dc4c56c1907df22akschulz mContext = this.getContext(); 8475a60e47497f21f64e6d79420dc4c56c1907df22akschulz mResolver = mContext.getContentResolver(); 8485a60e47497f21f64e6d79420dc4c56c1907df22akschulz Uri uri = Uri.parse("content://mms-sms/canonical-addresses"); 8495a60e47497f21f64e6d79420dc4c56c1907df22akschulz uri = MmsSms.CONTENT_URI.buildUpon().appendPath("canonical-addresses").build(); 8505a60e47497f21f64e6d79420dc4c56c1907df22akschulz dumpUri(uri); 8515a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 8525a60e47497f21f64e6d79420dc4c56c1907df22akschulz 8535a60e47497f21f64e6d79420dc4c56c1907df22akschulz public void dumpUri(Uri uri) { 8545a60e47497f21f64e6d79420dc4c56c1907df22akschulz if (D) Log.d(TAG, "**** Dump of table ****\nUri: " + uri); 8555a60e47497f21f64e6d79420dc4c56c1907df22akschulz Cursor c = mResolver.query(uri, null, null, null, null); 8565a60e47497f21f64e6d79420dc4c56c1907df22akschulz if (c != null) { 8575a60e47497f21f64e6d79420dc4c56c1907df22akschulz if (D) Log.d(TAG, "c.getCount() = " + c.getCount()); 8585a60e47497f21f64e6d79420dc4c56c1907df22akschulz c.moveToPosition(-1); 8595a60e47497f21f64e6d79420dc4c56c1907df22akschulz while (c.moveToNext()) { 8605a60e47497f21f64e6d79420dc4c56c1907df22akschulz Log.d(TAG,"Entry: " + c.getPosition()); 8615a60e47497f21f64e6d79420dc4c56c1907df22akschulz printCursor(c); 8625a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 8635a60e47497f21f64e6d79420dc4c56c1907df22akschulz c.close(); 8645a60e47497f21f64e6d79420dc4c56c1907df22akschulz } else { 8655a60e47497f21f64e6d79420dc4c56c1907df22akschulz Log.d(TAG, "query failed"); 8665a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 8675a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 8685a60e47497f21f64e6d79420dc4c56c1907df22akschulz 8695a60e47497f21f64e6d79420dc4c56c1907df22akschulz private void printAddresses(String idsStr) { 8705a60e47497f21f64e6d79420dc4c56c1907df22akschulz String[] ids = idsStr.split(" "); 8715a60e47497f21f64e6d79420dc4c56c1907df22akschulz for (String id : ids) { 8725a60e47497f21f64e6d79420dc4c56c1907df22akschulz long longId; 8735a60e47497f21f64e6d79420dc4c56c1907df22akschulz try { 8745a60e47497f21f64e6d79420dc4c56c1907df22akschulz longId = Long.parseLong(id); 8755a60e47497f21f64e6d79420dc4c56c1907df22akschulz String addr = mContacts.getPhoneNumber(mResolver, longId); 8765a60e47497f21f64e6d79420dc4c56c1907df22akschulz MapContact contact = mContacts.getContactNameFromPhone(addr, mResolver); 8775a60e47497f21f64e6d79420dc4c56c1907df22akschulz Log.d(TAG, " id " + id + ": " + addr + " - " + contact.getName() 8785a60e47497f21f64e6d79420dc4c56c1907df22akschulz + " X-BT-UID: " + contact.getXBtUidString()); 8795a60e47497f21f64e6d79420dc4c56c1907df22akschulz } catch (NumberFormatException ex) { 8805a60e47497f21f64e6d79420dc4c56c1907df22akschulz // skip this id 8815a60e47497f21f64e6d79420dc4c56c1907df22akschulz continue; 8825a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 8835a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 8845a60e47497f21f64e6d79420dc4c56c1907df22akschulz } 8855a60e47497f21f64e6d79420dc4c56c1907df22akschulz 88670be005a18a35ec5fcb46152f0dfbe82156efa3aKim Schulz} 887