public void run() { PduPersister persister = PduPersister.getPduPersister(mContext); try { // Load M-read-rec.ind from outbox ReadRecInd readRecInd = (ReadRecInd) persister.load(mReadReportURI); // insert the 'from' address per spec String lineNumber = Utils.getMyPhoneNumber(mContext); readRecInd.setFrom(new EncodedStringValue(lineNumber)); // Pack M-read-rec.ind and send it byte[] postingData = new PduComposer(mContext, readRecInd).make(); sendPdu(postingData); Uri uri = persister.move(mReadReportURI, Uri.parse("content://mms/sent")); mTransactionState.setState(TransactionState.SUCCESS); mTransactionState.setContentUri(uri); } catch (IOException e) { if (LOCAL_LOGV) Log.v(TAG, "Failed to send M-Read-Rec.Ind.", e); } catch (MmsException e) { if (LOCAL_LOGV) Log.v(TAG, "Failed to load message from Outbox.", e); } catch (RuntimeException e) { Log.e(TAG, "Unexpected RuntimeException.", e); } finally { if (mTransactionState.getState() != TransactionState.SUCCESS) { mTransactionState.setState(TransactionState.FAILED); mTransactionState.setContentUri(mReadReportURI); } notifyObservers(); } }
public PduLoaderManager(final Context context) { super(context); mSlideshowCache = new SimpleCache<Uri, SlideshowModel>(8, 16, 0.75f, false); mPduCache = PduCache.getInstance(); mPduPersister = PduPersister.getPduPersister(context); mContext = context; }
@SuppressLint("NewApi") public MessageItem( Context context, String type, final Cursor cursor, final MessageColumns.ColumnsMap columnsMap, Pattern highlight, boolean canBlock) throws MmsException { mContext = context; mMsgId = cursor.getLong(columnsMap.mColumnMsgId); mHighlight = highlight; mType = type; mColumnsMap = columnsMap; SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(mContext); if ("sms".equals(type)) { mReadReport = false; // No read reports in sms long status = cursor.getLong(columnsMap.mColumnSmsStatus); if (status == Sms.STATUS_NONE) { // No delivery report requested mDeliveryStatus = DeliveryStatus.NONE; } else if (status >= Sms.STATUS_FAILED) { // Failure mDeliveryStatus = DeliveryStatus.FAILED; } else if (status >= Sms.STATUS_PENDING) { // Pending mDeliveryStatus = DeliveryStatus.PENDING; } else { // Success mDeliveryStatus = DeliveryStatus.RECEIVED; } mMessageUri = ContentUris.withAppendedId(Sms.CONTENT_URI, mMsgId); // Set contact and message body mBoxId = cursor.getInt(columnsMap.mColumnSmsType); mAddress = cursor.getString(columnsMap.mColumnSmsAddress); if (SmsHelper.isOutgoingFolder(mBoxId)) { String meString = context.getString(R.string.messagelist_sender_self); mContact = meString; } else { // For incoming messages, the ADDRESS field contains the sender. mContact = Contact.get(mAddress, canBlock).getName(); } mBody = cursor.getString(columnsMap.mColumnSmsBody); mBody = FormatterFactory.format(mBody); // Unless the message is currently in the progress of being sent, it gets a time stamp. if (!isOutgoingMessage()) { // Set "received" or "sent" time stamp boolean sent = prefs.getBoolean(QKPreference.SENT_TIMESTAMPS.getKey(), false) && !isMe(); mDate = cursor.getLong(sent ? columnsMap.mColumnSmsDateSent : columnsMap.mColumnSmsDate); mTimestamp = DateFormatter.getMessageTimestamp(context, mDate); } mLocked = cursor.getInt(columnsMap.mColumnSmsLocked) != 0; mErrorCode = cursor.getInt(columnsMap.mColumnSmsErrorCode); } else if ("mms".equals(type)) { mMessageUri = ContentUris.withAppendedId(Mms.CONTENT_URI, mMsgId); mBoxId = cursor.getInt(columnsMap.mColumnMmsMessageBox); // If we can block, get the address immediately from the "addr" table. if (canBlock) { mAddress = AddressUtils.getFrom(mContext, mMessageUri); } mMessageType = cursor.getInt(columnsMap.mColumnMmsMessageType); mErrorType = cursor.getInt(columnsMap.mColumnMmsErrorType); String subject = cursor.getString(columnsMap.mColumnMmsSubject); if (!TextUtils.isEmpty(subject)) { EncodedStringValue v = new EncodedStringValue( cursor.getInt(columnsMap.mColumnMmsSubjectCharset), PduPersister.getBytes(subject)); mSubject = SmsHelper.cleanseMmsSubject(context, v.getString()); } mLocked = cursor.getInt(columnsMap.mColumnMmsLocked) != 0; mSlideshow = null; mDeliveryStatusString = cursor.getString(columnsMap.mColumnMmsDeliveryReport); mReadReportString = cursor.getString(columnsMap.mColumnMmsReadReport); mBody = null; mMessageSize = 0; mTextContentType = null; // Initialize the time stamp to "" instead of null mTimestamp = ""; mMmsStatus = cursor.getInt(columnsMap.mColumnMmsStatus); mAttachmentType = cursor.getInt(columnsMap.mColumnMmsTextOnly) != 0 ? SmsHelper.TEXT : ATTACHMENT_TYPE_NOT_LOADED; // Start an async load of the pdu. If the pdu is already loaded, the callback // will get called immediately boolean loadSlideshow = mMessageType != PduHeaders.MESSAGE_TYPE_NOTIFICATION_IND; mItemLoadedFuture = QKSMSApp.getApplication() .getPduLoaderManager() .getPdu(mMessageUri, loadSlideshow, new PduLoadedMessageItemCallback()); } else { throw new MmsException("Unknown type of the message: " + type); } }