public static SmsMessage createSmsMessage(Contact contact, String content) throws FailedToCreateSmsMessageException { // TODO: Set message direction Calendar calendar; long dateNumber; DataManager dm; String messageId; String contactId; int messageCount; SmsMessage smsMessage; try { // Get sms message information from calendar and manager calendar = new GregorianCalendar(TimeZone.getDefault()); // dateNumber = calendar.getTime().getTime(); dateNumber = calendar.getTimeInMillis(); // Create sms message into storage dm = DataManager.getInstance(); // get key to encrypt messages byte[] salt = Cryptography.decodeFromStorage(dm.getAttributeString(dm.USER, dm.SALT)); byte[] iv = Cryptography.decodeFromStorage(dm.getAttributeString(dm.USER, dm.IV)); SecretKey key = KeyManager.getInstance().generateStorageKey(salt); // setup message id contactId = contact.getId(); messageCount = dm.getAttributeInt(contactId, dm.MESSAGE_COUNT); messageId = contactId + dm.MESSAGE_CLASS + String.format("%04d", messageCount); messageCount++; smsMessage = new SmsMessage(messageId, contact, dateNumber, content); String encryptedContent = smsMessage.encryptToStore(key, iv); // set attributes dm.setAttribute(contactId, dm.MESSAGE_COUNT, messageCount); dm.addAttribute(contactId, dm.MESSAGE_TABLE, messageId); dm.setAttribute(messageId, dm.MESSAGE_DATE_NUMBER, dateNumber); dm.setAttribute(messageId, dm.ENCRYPTED_CONTENT, encryptedContent); return smsMessage; } catch (FailedToLoadDataBaseException | KeyStoreIsLockedException | FailedToGenerateKeyException | FailedToStoreException | FailedToEncryptSmsMessageException | FailedToGetAttributeException | FailedToAddAttributeException exception) { throw new FailedToCreateSmsMessageException(exception); } }