feat: Implement support for foldable devices with enhanced UI layout

- Added handling for foldable devices in MainActivity, including hinge detection and layout adjustments.
- Introduced new UI components for managing two-pane layouts on tablets and foldables.
- Updated CalendarScreen, HomeScreen, PlansScreen, and SearchScreen to utilize the new foldable layout logic.
- Created Fold.kt and Tabletop.kt to manage fold-related UI behavior and display.
- Enhanced animations for menu visibility on foldable devices.
- Updated Motion.kt to include new motion duration constants.
- Added dependency for androidx.window to support foldable features.
This commit is contained in:
2026-10-20 01:12:28 +03:00
parent 9b5062f0ed
commit 3055cbaf3c
13 changed files with 202986 additions and 194083 deletions

View File

@@ -150,6 +150,19 @@ DOMAIN=schedule.example.by docker compose --profile https up -d --build
В папке `android/` — нативный клиент на Kotlin и Jetpack Compose с компонентами Material 3 Expressive (`MaterialExpressiveTheme`, `ModalWideNavigationRail` и `WideNavigationRail`, соединённые `ToggleButton`, `LoadingIndicator`). Базовая тема синяя (тональная схема M3); с «Цветами обоев» — динамическая, а цвета предметов и зелёной недели гармонизируются с ней. Разделы открываются из бокового меню: на телефоне оно выезжает, на планшете в портрете и на телефоне в альбомной ориентации — узкая боковая панель, на планшете в альбомной ориентации меню открыто постоянно. На широком экране разделы делятся на две панели, как в School Planner: «Обзор» — карточки и недельная сетка, «Планы» и «Календарь» — список и выбранный день, «Поиск» — результаты и день преподавателя или аудитории; «Предметы» — сеткой карточек, «Расписание» открывается неделей; карточки лежат на подложке с оттенком, системные панели следуют теме приложения.
**Складные телефоны.** Приложение следит за сгибом экрана через Jetpack WindowManager (`FoldingFeature`, `ui/Fold.kt`).
- **Фолды** (Galaxy Z Fold, Pixel Fold) в разложенном виде — окно через сгиб с короткой стороной от 600dp — получают планшетный макет:
- «Обзор», «Планы», «Календарь» и «Поиск» — две панели, как две страницы, по обе стороны вертикального сгиба, и в плоском, и в полураскрытом виде;
- «Расписание» открывается неделей на карточке;
- меню остаётся узкой полосой, а раскрытое ложится поверх экрана с затемнением и не сжимает левую панель.
- **Флипы** (Galaxy Z Flip, Razr) — окно размером с телефон — сохраняют телефонный макет.
- **«Ноутбук»** — телефон приоткрыт на столе, сгиб горизонтальный. «Расписание» по дням становится настольной подставкой:
- над сгибом — день и одна пара крупно: время, обратный отсчёт или полоса прогресса идущей пары, аудитория и преподаватель; на широком экране рядом — «Дальше»;
- под сгибом — панель, лента дней и карточки пар дня: касание показывает пару наверху, повторное — открывает подробности;
- неделя показывает сетку над сгибом.
Проверено на эмуляторе Pixel 10 Pro Fold (`OPENED`, `HALF_OPENED` в портрете и в альбомной ориентации) и на AVD «6.7in Foldable» (флип: телефонный макет). Универсальный AVD флипа сообщает приложению сгиб всегда в состоянии `FLAT`, поэтому «ноутбук» на флипе проверен только на фолде.
- Первый запуск — короткий онбординг: приветствие с тремя возможностями приложения, затем шаги с волнистым индикатором прогресса: группа, подгруппа (только если группа делится на подгруппы) и напоминания. Разрешение на уведомления спрашивается на шаге напоминаний, его можно отложить; «Назад» (с предиктивным жестом) возвращает на предыдущий шаг. После онбординга открывается «Обзор» выбранной группы.
- Обзор: отчёт за неделю (сколько пар прошло), следующие занятия сегодня с обратным отсчётом и ближайший учебный день.
- Расписание группы по дням с листанием или недельной сеткой по часам; неделя и её цвет, номера пар, текущая пара, детали занятия с исходной записью Word. Если семестр не найден в таблице недель — строки Word по дням недели.