public void onServiceConnected(ComponentName className, IBinder service) {
          KeyCachingService keyCachingService =
              ((KeyCachingService.KeyCachingBinder) service).getService();
          MasterSecret masterSecret = keyCachingService.getMasterSecret();

          initializeWithMasterSecret(masterSecret);

          if (masterSecret == null && !havePromptedForPassphrase) promptForPassphrase();

          Intent cachingIntent = new Intent(ConversationListActivity.this, KeyCachingService.class);
          startService(cachingIntent);

          try {
            ConversationListActivity.this.unbindService(this);
          } catch (IllegalArgumentException iae) {
            Log.w("SecureSMS", iae);
          }
        }
  @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...");
    }
  }