я не подскажу, как сделано в вк, но я бы делал примерно так:
1. изначально новые сообщения являются непросмотренными/непрочитанными
2. сообщения делаем прочитанными в следующих случаях:
- при открытии диалога
- если был открыт диалог и начался ввод текста в поле для сообщений (ловим onKeyDown, например)
- если был открыт диалог и двигалась мышка в области диалога (ловим mousemove)
возможно, нужны и другие варианты, но это еще и зависит от самого приложения