Rust export_image(filename,base64,action) + read_file_base64(path) (registered). Kotlin exportimg: branch — base64-decode, then SAF-save the PNG (CreateDocument image/png) or share it via FileProvider + ACTION_SEND chooser. Settings gets a 'Фон для картинки' row: pick a photo (pickLocalFile image/*), read it as base64, downscale to <=1080 and store as a data URL in localStorage for the 'С фото' variant. Rust compiles in tauri dev; native paths need an APK rebuild to test.
3.6 KiB
3.6 KiB
Сессия 2026-09-14 — шэр-картинка трека («Похвастаться»)
Контекст
Пользователь хочет делиться картинкой поездки: форма трека + крупные статы (как на скрине),
прозрачная или на фото-подложке. План docs/plans/2026-09-14-share-image.md. Согласовано:
кнопка даёт «Поделиться» и «Сохранить»; в диалоге переключатель прозрачный/фото; статы —
дистанция, время, средняя скорость + набор/ккал/дата.
Разведка: save_file (SAF, текст) — не годится для бинаря PNG; нужен нативный бинарный сейв +
ACTION_SEND (FileProvider уже в манифесте, file_paths с cache-path есть) + чтение фото в
base64 (Rust). Canvas в WebView доступен.
Сделано — Стадия 1 (рендер + модалка + кнопка), чистый JS
buildShareImage(session, stats, points, opts)(main.js): холст 1080×1920; фон прозрачный или фото (cover-fit + тёмный градиент); форма трека (проекция точек, линия цвета трека со свечением); статы крупно Distance/Time/Speed + мелко ↑набор/ккал/дата; белый текст с тенью.showShareModal— предпросмотр<img>+ переключатель Прозрачный/С фото + кнопки Поделиться/Сохранить/Закрыть.exportShareImage(dataUrl, filename, action)зовётinvoke("export_image")(нативной команды пока нет — на десктопе тост-ошибка, это ок).- Кнопка
#sd-share«Похвастаться» в детали трека. CSS.share-modal(шахматка под прозрачность).
Сделано — Стадия 2 (нативный вывод + подложка)
- Rust
export_image(filename, base64, action)(пишет base64 + командуexportimg:в мост) иread_file_base64(path)(для чтения выбранного фото); зарегистрированы. - Kotlin: ветка
exportimg:— Base64-декод;save→saveImageLauncher(CreateDocument image/png, байты),share→ запись вcacheDir/shared, FileProvider URI,ACTION_SENDimage/png через чузер. - Настройки: строка «Фон для картинки» (Выбрать/Сброс):
pickLocalFile("image/*")→read_file_base64→ даунскейл ≤1080 →localStorage.baldav_share_bg(jpeg 0.85).
Проверка
- Стадия 1 рендер — ПРОВЕРЕНО на десктопе (Xvfb): модалка рисует форму трека + Distance/Time/ Speed + ↑набор/ккал/дата, прозрачный PNG (шахматка), переключатель/кнопки. Скрин.
- lib.rs пересобрался в
tauri devбез ошибок (команды компилируются/регистрируются). - Нативный save/share/чтение фото и Kotlin — ТОЛЬКО на теле после
./build.sh android -d -i.
Дальше
- Пересборка APK и тест на теле: «Поделиться» (чузер), «Сохранить» (SAF), выбор подложки → вариант «С фото». По явной просьбе.