Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15,455 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Element X+

Element X, только лучше.

база лицензия сборки

Экспериментальный форк element-hq/element-x-android: повседневный UX подтягиваем до уровня WhatsApp, Telegram и Signal, протокол и шифрование не трогаем.

Warning

Неофициальный форк. Не связан с Element Hq Ltd. и командой Element Call, не одобрен ими и с ними не координируется. Работает как есть, на свой страх и риск, без гарантий и SLA. Issue по здешним правкам в апстримном репозитории не открывайте.

Установка

APK лежат в релизах, отдельно под каждую ABI и universal. Ставится рядом с официальным клиентом: applicationId = io.element.android.x.plusng, имя приложения Element X+.

Note

Package id менялся с .plus на .plusng, поэтому обновиться поверх старого билда нельзя. Если стоял прежний Element X+, удалите его перед установкой.

Что меняется

Element X Element X+
Голосовой звонок сетка участников Element Call, лобби перед входом телефонный вид: аватар, таймер, четыре кнопки; звонок из шапки любой комнаты в один тап
Входящий тихое heads-up уведомление полный экран с рингтоном, ответ с локскрина, видео можно принять без камеры
Групповой голосовой инициатор слышит тишину, у получателей беззвучный баннер звонит как личный
Пачка фото по одной за заход до 30 за раз, с общей подписью и сжатием на каждый файл
Выделение одно сообщение за раз до 30 разом: копировать, переслать, удалить
Загрузка вложения ждём и не отменяем прогресс и крестик прямо на плитке
Навигация по истории только скролл тап по плавающей дате прыгает к началу дня, с дозагрузкой
Удалённые сообщения плашка на каждое схлопываются в один блок с авторами
Ссылки голый текст карточка предпросмотра через ваш homeserver, IP на сторонний сайт не утекает
Избранное в общей куче своя секция сверху
Сеть под DPI нужен внешний VPN встроенный обфусцированный транспорт до своего сервера

Тумблеры

Всё, что трогает существующий UI, выключаемо. С выключенными тумблерами приложение ведёт себя как официальный Element X.

Тумблер Где По умолчанию
Phone-style calls Labs вкл
Phone-style incoming calls Labs вкл
Answer calls without unlocking Labs выкл
Multi-select messages Labs выкл
Pin favourites at the top Labs вкл
Copy Matrix ID from settings Labs вкл
Сообщение на каждую картинку Labs вкл
Антицензурный прокси Дополнительные настройки выкл
Сворачивать удалённые сообщения Дополнительные настройки выкл
Автозагрузка медиа только по Wi-Fi Дополнительные настройки выкл
Предпросмотр ссылок Дополнительные настройки только незашифрованные
Свой ключ Geoapify Дополнительные настройки встроенный

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

Подробно: сообщения и медиа

Множественный выбор. Долгий тап включает выбор, дальше копирование, пересылка и удаление до 30 сообщений за раз. На медиа долгий тап открывает обычное меню, где есть пункт «Выбрать». Системные события и удалённые сообщения в выбор не попадают, выбор переживает поворот экрана (апстрим-issue #6737).

Отправка пачки. Выбрать несколько файлов можно всегда, это наша фича. От форка здесь и экран превью: лента миниатюр, добавление на лету с отсечкой дублей, сжатие настраивается на каждый элемент отдельно, подпись одна на весь блок, прогресс по фазам.

Как батч уедет, решают два тумблера:

Labs → Сообщение на каждую картинку Разработчик → Send gallery messages Результат
вкл (по умолчанию) не важно сообщение на файл
выкл выкл сообщение на файл
выкл вкл один коллаж

Сообщение на файл видит любой клиент, и каждую картинку можно удалить или переслать отдельно.

Коллаж это одно галерея-событие. Красивее у нас, но msgtype пока нестабильный (dm.filament.gallery, MSC4274 ещё не в спеке), и клиент без поддержки покажет текст вместо картинок. На element-web поддержки нет. И это одно сообщение, поэтому отдельную картинку из набора не удалить и не переслать.

Send gallery messages живёт не в Labs, а в режиме разработчика: Настройки, восемь тапов по строке с версией, Developer options, Feature flags.

Предпросмотр ссылок. Карточку отдаёт homeserver, картинки идут через него же. Матрикс-пермалинки и упоминания не превьюятся. В зашифрованных комнатах запрос не уходит, пока не выберете «всегда».

Подробно: звонки

Гудки синтезируются через Web Audio и обрываются точно в момент ответа, а не после регистрации участника в LiveKit. Пока идёт дозвон, вместо пустого места под аватаром показывается «Соединение…».

Аудио доведено до поведения обычной звонилки: VoIP-фокус запрашивается явно (иначе на Pixel и AOSP входящий из уведомления оставался беззвучным), фокус берётся как GAIN_TRANSIENT, поэтому музыка после звонка возобновляется сама, голос идёт в ушной динамик, а не в громкую связь, громкость поднимается до слышимого минимума если пользователь увёл её в ноль.

На телефонах без Google Services (Huawei, WebView на Chromium 114) добавлены полифил Promise.withResolvers и запасной CSS Grid, без них экран звонка оставался белым.

Полный разбор по пунктам: EXPERIMENTS.ru.md.

Подробно: антицензурный прокси

Поддержка self-hosted mxtr-proxy. Маскирует трафик матрикс-клиента под обычный TLS, помогает обходить DPI и блокировки типа ТСПУ, когда штатный путь до homeserver или Element Call SFU обрезан. Поднимается на своём VPS, подключается через share-string, локальный порт назначает система. При выключении сразу идёт прямой коннект.

100% гарантий нет: DPI-движки развиваются, любая маскировка не вечная, регуляторные риски остаются на стороне пользователя. Но это большой шаг в сторону свободного общения там, где прямой коннект больше не работает. Свободу нельзя ждать от вендоров, её берут руками.

Что пробовали и убрали
Что Почему
Свайп-выделение диапазона слишком легко срабатывало при обычной прокрутке
Встроенный плеер YouTube в ленте WebView на каждое сообщение дороже пользы, ссылка открывается в приложении
Сборка коллажа на стороне клиента не читается другими клиентами, заменена галерея-событием MSC4274
Свой тумблер массового пикера выбор нескольких файлов включён всегда, отдельный тумблер стал не нужен
Очистка кэша комнаты Rust SDK 26.06.x убрал clearEventCacheStorage, вызывать стало нечего
Ярлык звонка в списке чатов реализация на месте, но выключена и скрыта, пока не починим
Что починено против апстрима
  • Живая геопозиция не будит foreground-сервис после убийства процесса и не ест батарею, когда ей ни разу не пользовались.
  • Несколько видео из превью вложений отправляются, а не теряются после первого.
  • Начатое редактирование сообщения переживает прикрепление медиа.
  • Экран звонка закрывается когда падает render-процесс WebView, вместо пустой страницы и утянутого следом приложения.
  • Массовая пересылка сохраняет хронологический порядок.
  • Разделители дней не остаются сиротами после скрытия удалённых сообщений.
  • Возврат из шаринга одной кнопкой Назад приводит в вызвавшее приложение.

Сборка

./gradlew :app:assembleFdroidPlusRelease -PdisableR8 --no-daemon

-PdisableR8 нужен на хостах меньше примерно 16 ГБ ОЗУ, иначе R8 уходит в OOM. Патченый Element Call закоммичен как features/call/impl/libs/element-call-embedded-plus.aar, собирать его отдельно для рутинной сборки APK не нужно.

Флейворы: store (gplay / fdroid) × fork (vanilla / plus). Форковые фишки живут в plus, vanilla остаётся апстримовским.

APK собирает GitHub Actions по ручному запуску, а не на каждый push: ветка живёт быстро, релиз на коммит никому не нужен. Workflow держит три последних релиза и подчищает старые прогоны.

Зачем это всё

Element X силён протоколом и шифрованием, но по повседневным мелочам заметно уступает мессенджерам, с которыми его сравнивают. Команда апстрима двигается осторожно, ревью долгое, и многие приятные вещи остаются за бортом.

Форк это полигон: проверяем решения на живом юзкейсе, не дожидаясь официального трека, в надежде что мейнстрим со временем заберёт их к себе. Часть правок уже уехала в апстрим пул-реквестами.

Лицензия

AGPL-3.0-only / LicenseRef-Element-Commercial (dual licensing), как у апстрима. См. LICENSE и LICENSE-COMMERCIAL.

About

Unofficial experimental fork of element-hq/element-x-android with phone-style classic call UX (Element X+ branding, embedded Element Call WebView)

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages