Commit Graph

43 Commits

Author SHA1 Message Date
nk
5fd97d27fd fix(stations): обложки Record только для Record-станций + своя плитка остальным
- сети, отличные от Radio Record (DFM, HitFM и др.), больше не получают
  обложки Radio Record (обогащение Record API гейтится по source=record)
- станции без обложки рисуют свою фирменную плитку: цвет по названию + инициалы
  (вместо общего значка/чужой обложки)
2026-06-03 11:36:24 +03:00
nk
32e5108d98 fix(stations): подтягивать обложки/потоки Record по названию станции
Локальные станции (assets/stations.json, id 1,2,3...) обогащались данными
Record только по id, но id Record-каталога другие (15016...) и prefix в
ассетах нет — поэтому совпадений почти не было и обложки не грузились.
Добавлен фолбэк-матч по названию станции (стабильный общий ключ).
2026-06-03 11:22:57 +03:00
nk
a50a108f63 fix(ui): иконочный таб-бар, заголовок станций, ровные кнопки плеера, рабочая ссылка на текст
- таб-бар только иконки (6 разделов не помещались с подписями)
- «Откройте радио» -> «Выберите радиостанцию»
- кнопки плеера (лайк/prev/next/запись) единого размера 24/48, ряд SpaceBetween
  (кнопка записи больше не обрезается и не выбивается размером)
- текст песни: Musixmatch резал соединение -> веб-поиск трека (открывается)
2026-06-03 11:15:29 +03:00
nk
fc9b23f62c fix(player): now-playing с нашего бэкенда вместо сырого Record-эндпоинта
Record /stations/now использует id now-слотов, не совпадающие с id каталога,
поэтому клиент не находил трек по station.id (трек/обложка не показывались).
Теперь берём GET /now-playing с нашего бэка (корректный маппинг recordSync,
ключ = id станции) -> плеер показывает название трека и обложку.
2026-06-03 10:59:59 +03:00
nk
eca0c49ad4 fix(ui): тёмный сплэш с фирменной иконкой вместо белого экрана
- Theme.Radiola -> тёмная (windowBackground #0C1410), прозрачные системные бары
- Theme.Radiola.Splash (core-splashscreen): фон #0C1410 + иконка приложения
- installSplashScreen() в MainActivity; тема сплэша на launcher-активити
2026-06-03 00:27:29 +03:00
nk
e190444577 feat: фирменная иконка приложения + внутренний плеер записей
- адаптивная иконка лаунчера: градиентный фон (C2F25B->6FA53C) + монограмма R
  (foreground + monochrome для тем Android 13), манифест -> @mipmap
- воспроизведение своих записей ВНУТРИ приложения вместо внешнего плеера:
  RecordingPlaybackController (отдельный ExoPlayer, останавливает радио),
  RecordingPlayerSheet с перемоткой (Slider), play/pause, +/-15с, таймеры
2026-06-03 00:13:12 +03:00
nk
d0e5f4e8c5 feat(charts): раздел «Чарты» (клиент) + детальная страница трека с графиком
- вкладка «Чарты» в навигации; экран: периоды (День/Неделя/Месяц/Всё),
  ранжированный список треков (ранг, обложка, проигрывания, тренд)
- детальная карточка трека: метрики, график популярности (Canvas), лайк,
  кнопки музыкальных сервисов, кнопка «Текст песни» (ссылка на лицензированный
  Musixmatch — полный текст не встраиваем, авторское право)
- ChartsRepository/LyricsRepository + эндпоинты charts/* в RadiolaApi (DTO)
- превью-данные пока бэкенд не отдаёт charts (помечено TODO)
2026-06-02 23:24:42 +03:00
nk
a4af72a6e6 polish(ui): плавные обложки, бегущая строка длинных названий, тактильный отклик
- Coil crossfade для всех обложек (Images.crossfadeModel) — без «моргания» при загрузке
- basicMarquee для длинных названий трека (плеер и мини-плеер) вместо обрезки
- haptic feedback на play/pause и добавление в избранное (плеер, мини-плеер, карточка)
2026-06-02 22:55:18 +03:00
nk
310d6c3177 fix(player): отображение трека и обложки — объединение REST и socket now-playing
REST-поллинг (refreshNowPlaying -> api.getNowPlaying, 200 OK) писал данные в
_nowPlaying, который нигде не читался; getNowPlaying() брал только сокет (пустой).
Теперь getNowPlaying/getAllNowPlaying объединяют оба источника (socket ?: REST),
поэтому название трека, обложка и deep-link сервисов работают.
2026-06-02 22:55:18 +03:00
nk
cefd0be009 fix(ui): отступы под системную навигацию + подписи сервисов + краш навбара
- навбар и мини-плеер: navigationBarsPadding — не налезают на системные кнопки
- плеер: navigationBarsPadding снизу, ряд сервисов не уходит под системную панель
- подписи сервисов без обрезки слов (Яндекс / ВК Музыка / YT Music и т.д.)
- фикс NPE при холодном старте: навбар обращается к NavDestinations напрямую,
  не к companion-списку (порядок инициализации Kotlin)
2026-06-02 22:55:17 +03:00
nk
af13272852 fix(ui): единый скролл на экране станций + всегда видимый навбар
- StationsScreen: закреплённые заголовок/поиск/жанры, одна прокручиваемая
  сетка станций; поиск и фильтры больше не исчезают при пустом результате
  (+ кнопка «Сбросить фильтры»)
- таб-бар показывается без обязательного входа (скрыт только на экране входа)
- старт сразу со «Станций» — авторизация необязательна, вход из Настроек
2026-06-02 22:55:17 +03:00
nk
220d1d6fa1 feat(ui): мягкие переходы между экранами (fade + лёгкий slide) 2026-06-02 22:55:17 +03:00
nk
f604ad42e8 feat(ui): рестайл всех экранов + плеер + официальные mono-логотипы сервисов
- экраны (Станции/Избранное/История/Записи/Настройки/Вход): двухцветные
  заголовки, токены темы, EmptyState, анимации появления и перестановки
- AuthScreen: брендовый локап (AppMark + RadiolaWordmark)
- PlayerBottomSheet: живой эфир — LiveEqualizer вместо перемотки,
  Crossfade трека и play/pause, pressScale, анимация избранного/записи
- кнопки музыкальных сервисов: монохромные официальные логотипы
  (vector drawable из Simple Icons CC0 + Yandex), маппинг serviceLogoRes
- DeeplinkBottomSheet: сетка сервисов с логотипами
2026-06-02 22:55:17 +03:00
nk
d652dc399a feat(ui): рестайл общих компонентов под дизайн-систему
- StationCard: обложка/иконка-заглушка, анимированное сердечко, pressScale
- MiniPlayer: elevated-бар, метка «СЕЙЧАС ИГРАЕТ», Crossfade play/pause
- SearchBar: surface-поле, акцентный курсор, скругление 14
- FilterChips: акцентный активный чип с анимацией цвета
- EmptyState: иконка-плашка + текст
- TrackListItem: thumb-заглушка, pressScale
2026-06-02 22:55:17 +03:00
nk
ae406554de feat(ui): дизайн-система radiOLA — палитра, тема, типографика, бренд, motion, pill таб-бар
- цветовые токены тёмно-зелёной темы + RadiolaColors (CompositionLocal)
- darkColorScheme + всегда тёмная тема, фирменные shapes
- типографика с весами/размерами под макет
- Brand: AppMark (градиентный R), RadiolaWordmark, MonoMark
- Motion: спеки движения, pressScale, живой эквалайзер
- pill-таб-бар с анимированной активной вкладкой
2026-06-02 22:55:17 +03:00
nk
2f686bcc57 chore: add .gitignore and remove build artifacts from index 2026-06-02 22:50:00 +03:00
nk
bcb999ace9 feat: WebSocket now-playing via Socket.IO from backend 2026-06-02 19:52:15 +03:00
nk
a83672b455 feat: auth screen with auto-redirect, sync favorites/history with backend 2026-06-02 19:12:07 +03:00
nk
d4adb1e7be fix: add launcher icons and update manifest references 2026-06-01 13:35:28 +03:00
nk
59f62a22b2 test: add unit tests for use cases and ViewModel, add Compose UI test 2026-06-01 13:23:11 +03:00
nk
af8fb333d9 feat(widget): add 4x1 AppWidgetProvider with play/pause and track info 2026-06-01 13:21:37 +03:00
nk
9ce9758361 feat(player): wire StationsScreen and FavoritesScreen to actual playback 2026-06-01 13:19:23 +03:00
nk
ada422053f feat(deeplink): add DeeplinkNavigator, DeeplinkBottomSheet and integrate into History and Player 2026-06-01 13:15:31 +03:00
nk
aa287f7588 feat(ui): integrate MiniPlayer into Scaffold with real player state 2026-06-01 13:12:51 +03:00
nk
9e3ce0f1e4 feat(ui): wire all screens into NavHost with BottomSheet player 2026-06-01 13:07:11 +03:00
nk
15e15c6664 feat(ui): add SettingsScreen and SettingsViewModel 2026-06-01 13:06:08 +03:00
nk
d3cec3bba2 feat(ui): add HistoryScreen and HistoryViewModel 2026-06-01 13:04:35 +03:00
nk
b2af81c070 feat(ui): add FavoritesScreen and FavoritesViewModel 2026-06-01 13:03:24 +03:00
nk
ee91837910 feat(ui): add PlayerBottomSheet and PlayerViewModel 2026-06-01 13:02:16 +03:00
nk
1c902b5607 feat(ui): add StationsScreen and StationsViewModel 2026-06-01 13:00:12 +03:00
nk
116ab95abd feat(ui): add shared components (StationCard, TrackListItem, SearchBar, FilterChips, MiniPlayer, EmptyState) 2026-06-01 12:58:25 +03:00
nk
28309c201e chore: add Lucide icons dependency and replace Material Icons in navigation 2026-06-01 12:54:36 +03:00
nk
c46a865742 feat(ui): add bottom navigation with 4 tabs 2026-06-01 12:23:27 +03:00
nk
cf79af5273 feat(service): add ExoPlayer controller and MediaSessionService 2026-06-01 12:21:22 +03:00
nk
9d68459df6 feat(di): add Hilt AppModule with Retrofit, Room and repository bindings 2026-06-01 12:19:33 +03:00
nk
e255b0458d feat(data): add repository implementations 2026-06-01 12:18:10 +03:00
nk
110fe0795e feat(data): add Room entities, DAOs and AppDatabase 2026-06-01 12:12:55 +03:00
nk
62674fcc3f feat(data): add Retrofit API, DTOs and mappers 2026-06-01 12:11:15 +03:00
nk
828cdf9a50 feat(domain): add core use cases 2026-06-01 12:08:49 +03:00
nk
aad1361043 feat(domain): add repository interfaces 2026-06-01 12:07:29 +03:00
nk
d345cd40b8 feat(domain): add Station, Track, PlayerState, DeeplinkService models 2026-06-01 12:05:13 +03:00
nk
7b1aa0c073 feat: add Application, MainActivity and Material3 theme 2026-06-01 12:02:35 +03:00
nk
8f26bf16d3 chore: add app module build config and manifest 2026-06-01 11:57:59 +03:00