@Override
  public void onIncomingMessage(final Message message) {
    if (message.getMessageType() == Message.Type.KNOCK
        || message.getMessageType() == Message.Type.MEMBER_JOIN
        || message.getMessageType() == Message.Type.MEMBER_LEAVE
        || message.getMessageType() == Message.Type.RENAME
        || message.getMessageType() == Message.Type.MISSED_CALL) {
      return;
    }

    IConversation currentConversation =
        getStoreFactory().getConversationStore().getCurrentConversation();
    if (getStoreFactory()
        .getInAppNotificationStore()
        .shouldShowChatheads(currentConversation, message)) {
      notificationDisplayPrioritizer.onNewIncomingMessage(message);
    }

    // Play sound for incoming connect request
    if (message.getMessageType() == Message.Type.CONNECT_REQUEST
        && message.getConversation().getType() == IConversation.Type.INCOMING_CONNECTION) {
      getStoreFactory().getMediaStore().playSound(R.raw.first_message);
    } else if (message.getMessageType() == Message.Type.TEXT
        || message.getMessageType() == Message.Type.ASSET
        || message.getMessageType() == Message.Type.RICH_MEDIA) {
      if (message.isFirstMessage()) {
        getStoreFactory().getMediaStore().playSound(R.raw.first_message);
      } else {
        getStoreFactory().getMediaStore().playSound(R.raw.new_message);
      }
    }
    getControllerFactory().getVibratorController().vibrate(R.array.new_message);
  }