✨ "Планируйте уверенно. Бронируйте без ошибок."
Kotlin Jetpack Compose Material3 MVVM License: MIT
«Зал Свободен» — это Android-приложение нового поколения для умного управления расписанием конференц-залов.
Оно полностью избавляет от проблем с пересекающимися бронированиями, дублированием встреч и ручным вводом расписания.
💡 Основано на Kotlin + Jetpack Compose, с реактивным интерфейсом и надёжным хранением состояния.
Создано с нуля по принципам чистой архитектуры (MVVM).
- 🔍 Мгновенная проверка доступности: система автоматически отслеживает пересечения интервалов.
- 🚫 Предотвращение конфликтов: пользователю выводится уведомление, если время занято.
- 💾 Персистентность: данные сохраняются между запусками через
SavedStateHandle+Gson.
- 📅 Группировка по датам: события отображаются с удобными заголовками — Сегодня, Завтра, Понедельник, 14 Октября.
- 🕓 Материальные пикеры: выбор даты и времени через стандартные диалоги Material 3.
- 💬 Мгновенное обновление: добавленные события появляются сразу, без перезапуска экрана.
- 🎨 Material 3 Design — минимализм, контраст и акценты.
- 🧩 Jetpack Compose — декларативный и читаемый код интерфейса.
- 🧭 MVVM Архитектура — чистое разделение логики, состояния и отображения.
| 🧩 Компонент | 🚀 Технология | 🧭 Назначение |
|---|---|---|
| ☕ Язык разработки | Kotlin | Основной язык проекта |
| 🧱 UI Фреймворк | Jetpack Compose | Декларативное создание интерфейсов |
| 🎨 Дизайн-система | Material 3 | Современный UI/UX |
| 🧠 Архитектура | MVVM | Разделение слоёв: View ↔ ViewModel ↔ Model |
| 💾 Состояние | SavedStateHandle | Хранение состояния между пересозданиями |
| 🧮 Сериализация | Gson | Сохранение/восстановление объектов событий |
| ⏰ Дата и время | java.time | Работа с временными интервалами |
com.example.conferencescheduler/
│
├── model/
│ └── Event.kt # Модель события
│
├── viewmodel/
│ └── ScheduleViewModel.kt # Бизнес-логика, проверка пересечений, сохранение состояния
│
├── ui/
│ ├── ScheduleScreen.kt # Главный экран расписания
│ └── components/
│ └── AddEventDialog.kt # Диалог добавления события (дата, время, название)
│
└── util/
🧭 MVVM в действии:
- Model — хранит структуру данных (
Event) - ViewModel — управляет логикой, проверками и сохранением (
ScheduleViewModel) - View (Compose) — показывает интерфейс и обновляется реактивно (
ScheduleScreen,AddEventDialog)
Добавление нового события 🕓
При нажатии ➕ открывается диалог, где пользователь вводит название и выбирает дату/время.
После подтверждения:
- Происходит проверка на пересечения.
- Если слот свободен — событие добавляется и сохраняется.
- Если занят — показывается уведомление «Зал занят в интервале 14:00–15:00».
fun isAvailable(start: LocalDateTime, end: LocalDateTime): Boolean { return events.none { event -> start.isBefore(event.endTime) && end.isAfter(event.startTime) } }
🔒 Простая и надёжная проверка на пересечения временных интервалов.
-
📥 Клонировать репозиторий:
git clone https://github.com/NotACat1/ConferenceScheduler.git
-
🧭 Открыть в Android Studio.
-
⚙️ Синхронизировать Gradle и убедиться, что зависимости загружены.
-
▶️ Запустить на эмуляторе или устройстве. -
🎉 Готово! Добавляйте и управляйте бронированиями без конфликтов.
"Зал Свободен — когда технологии работают на ваше время." ⏳