private void handleSentResult(MasterSecret masterSecret, long messageId, int result) { try { EncryptingSmsDatabase database = DatabaseFactory.getEncryptingSmsDatabase(context); SmsMessageRecord record = database.getMessage(masterSecret, messageId); switch (result) { case Activity.RESULT_OK: database.markAsSent(messageId); if (record != null && record.isEndSession()) { Log.w(TAG, "Ending session..."); SessionStore sessionStore = new TextSecureSessionStore(context, masterSecret); sessionStore.deleteAllSessions(record.getIndividualRecipient().getRecipientId()); SecurityEvent.broadcastSecurityUpdateEvent(context, record.getThreadId()); } break; case SmsManager.RESULT_ERROR_NO_SERVICE: case SmsManager.RESULT_ERROR_RADIO_OFF: Log.w(TAG, "Service connectivity problem, requeuing..."); ApplicationContext.getInstance(context) .getJobManager() .add(new SmsSendJob(context, messageId, record.getIndividualRecipient().getNumber())); break; default: database.markAsSentFailed(messageId); MessageNotifier.notifyMessageDeliveryFailed( context, record.getRecipients(), record.getThreadId()); } } catch (NoSuchMessageException e) { Log.w(TAG, e); } }
private void handleSentMessage(Intent intent) { long messageId = intent.getLongExtra("message_id", -1); int result = intent.getIntExtra("ResultCode", -31337); boolean upgraded = intent.getBooleanExtra("upgraded", false); boolean push = intent.getBooleanExtra("push", false); Log.w("SMSReceiverService", "Intent resultcode: " + result); Log.w("SMSReceiverService", "Running sent callback: " + messageId); if (result == Activity.RESULT_OK) { SmsDatabase database = DatabaseFactory.getSmsDatabase(context); Cursor cursor = database.getMessage(messageId); SmsDatabase.Reader reader = database.readerFor(cursor); database.markAsSent(messageId); if (upgraded) database.markAsSecure(messageId); if (push) database.markAsPush(messageId); SmsMessageRecord record = reader.getNext(); if (record != null && record.isEndSession()) { Log.w("SmsSender", "Ending session..."); Session.abortSessionFor(context, record.getIndividualRecipient()); KeyExchangeProcessor.broadcastSecurityUpdateEvent(context, record.getThreadId()); } unregisterForRadioChanges(); } else if (result == SmsManager.RESULT_ERROR_NO_SERVICE || result == SmsManager.RESULT_ERROR_RADIO_OFF) { DatabaseFactory.getSmsDatabase(context).markAsOutbox(messageId); toastHandler .obtainMessage( 0, context.getString(R.string.SmsReceiver_currently_unable_to_send_your_sms_message)) .sendToTarget(); registerForRadioChanges(); } else { long threadId = DatabaseFactory.getSmsDatabase(context).getThreadIdForMessage(messageId); Recipients recipients = DatabaseFactory.getThreadDatabase(context).getRecipientsForThreadId(threadId); DatabaseFactory.getSmsDatabase(context).markAsSentFailed(messageId); MessageNotifier.notifyMessageDeliveryFailed(context, recipients, threadId); unregisterForRadioChanges(); } }
@Override protected void onResume() { super.onResume(); dynamicTheme.onResume(this); dynamicLanguage.onResume(this); initializeSecurity(); initializeScreenshotSecurity(); initializeTitleBar(); initializeEnabledCheck(); initializeMmsEnabledCheck(); initializeIme(); initializeCharactersLeftViewEnabledCheck(); calculateCharactersRemaining(); MessageNotifier.setVisibleThread(threadId); markThreadAsRead(); }
@Override public void onRun() { Optional<IncomingTextMessage> message = assembleMessageFragments(pdus, subscriptionId); MasterSecret masterSecret = KeyCachingService.getMasterSecret(context); MasterSecretUnion masterSecretUnion; if (masterSecret == null) { masterSecretUnion = new MasterSecretUnion(MasterSecretUtil.getAsymmetricMasterSecret(context, null)); } else { masterSecretUnion = new MasterSecretUnion(masterSecret); } if (message.isPresent() && !isBlocked(message.get())) { Pair<Long, Long> messageAndThreadId = storeMessage(masterSecretUnion, message.get()); MessageNotifier.updateNotification(context, masterSecret, messageAndThreadId.second); } else if (message.isPresent()) { Log.w(TAG, "*** Received blocked SMS, ignoring..."); } }
@Override protected void onPause() { super.onPause(); MessageNotifier.setVisibleThread(-1L); if (isFinishing()) overridePendingTransition(R.anim.fade_scale_in, R.anim.slide_to_right); }