cryptofoundry

Связаться с cryptofoundry

Расскажите, что вы хотите создать или автоматизировать.

Электронная почта
[email protected]
ADAMANT Messenger
Открыть в ADAMANT
Dev Guidelines & Docs

Позиция прокрутки в чате и разделитель новых сообщений

Этот документ описывает, как должна вести себя позиция прокрутки в чатах ADAMANT, когда пользователь входит в чат или взаимодействует с ним.

Два состояния прокрутки

Позиция прокрутки хранится отдельно для каждого чата. Чат может находиться в состоянии, при котором позиция не сохранена, либо в состоянии, при котором позиция была сохранена, потому что пользователь вручную прокрутил чат и зафиксировал положение.

Отображение кнопки Прокрутить вниз

Кнопка Прокрутить вниз должна появляться, когда последнее одиночное сообщение скрыто примерно на три четверти экрана.

Discussion screenshot 1

При нажатии кнопки поведение зависит от наличия новых сообщений. Если новые сообщения есть — о чём свидетельствует счётчик рядом с кнопкой — вид прокручивается к разделителю Новые сообщения. Если новых сообщений нет или пользователь уже находится на уровне разделителя или ниже, вид прокручивается до самого конца.

При прокрутке к разделителю «Новые сообщения» он должен размещаться примерно с тремя строками сообщений над ним. В этом случае звук, вибрация и подсветка сообщений не должны срабатывать.

Разделитель никогда не должен появляться до самого первого сообщения в чате. Например, если пользователь получает десять сообщений от нового контакта, чат прокручивается к первому сообщению, но разделитель не отображается.

Сохранение позиции прокрутки

Позиция прокрутки должна сохраняться только тогда, когда пользователь находится не в самом низу чата. Положение в пределах нескольких пикселей от нижнего края считается «в самом низу» и не должно сохраняться. Как правило, если кнопка Прокрутить вниз видима, позиция должна быть сохранена.

Discussion screenshot 2

Discussion screenshot 3

Discussion screenshot 4

Если длина чата меньше высоты экрана — например, несколько коротких сообщений — он всегда считается находящимся в самом низу: кнопка скрыта, а позиция прокрутки не сохраняется.

Восстановление позиции прокрутки

Существует три события, которые необходимо обработать. Во-первых, пользователь находится внутри чата, когда приходит новое сообщение. Во-вторых, пользователь открывает чат с новыми сообщениями из списка чатов или с другого экрана, например через Перейти в чат из Списка транзакций → Детали транзакции. В-третьих, пользователь открывает чат из уведомления о новом сообщении — как внутри приложения, так и через push-уведомление.

Когда пользователь находится в чате и приходит новое сообщение, поведение зависит от того, сохранена ли позиция прокрутки. Если позиция не сохранена, чат всегда прокручивается до самого низа при каждом входящем или исходящем сообщении, и разделитель не отображается. Если позиция сохранена, входящее сообщение не вызывает прокрутку; вместо этого обновляется счётчик на кнопке, и появляется разделитель, который пользователь может увидеть, нажав кнопку или прокрутив вручную. Исходящее сообщение, однако, всегда прокручивает чат до самого низа, независимо от сохранённой позиции.

Когда пользователь входит в чат с новыми сообщениями из списка чатов или другого экрана, и позиция не сохранена, чат переходит к разделителю Новые сообщения. Если позиция сохранена, чат не прокручивается; обновляется только счётчик на кнопке и отображается разделитель, который пользователь увидит при нажатии кнопки Прокрутить вниз или при ручной прокрутке.

Когда пользователь входит в чат из уведомления о новом сообщении, чат переходит к разделителю Новые сообщения, независимо от того, сохранена ли позиция. Даже если было получено несколько сообщений, вид не должен прыгать к самому последнему.

Эти правила обеспечивают согласованное и предсказуемое поведение прокрутки, разделителей и восстановления позиции при всех способах входа в чат в ADAMANT.