<ul><li><p><b>Название приложения</b>: Кликни</p></li><li><p><b>Платформа</b>: Android (минимальная версия SDK: API 21 для совместимости со старыми устройствами)</p></li><li><p><b>Язык разработки</b>: Kotlin (рекомендуется для простоты и современности)</p></li><li><p><b>Цель приложения</b>: Минималистичное приложение для быстрого логирования повседневных событий (например, "проснулся", "поел", "принял таблетки") с использованием голосового ввода, автоматическим сохранением и просмотром лога. Приложение предназначено для пользователей, включая пожилых, поэтому акцент на простоте, без лишних интерфейсов и с автоматическими действиями (без нажатий клавиш где возможно).</p></li><li><p><b>Объём работ</b>: Простое приложение (около 300-500 строк кода), без внешних серверов, все данные локально в SQLite.</p></li><li><p><b>Бюджет и сроки</b>: Не указаны, но для фрилансера (Upwork/Kwork) — 1-2 дня разработки для базовой версии.</p></li><li><p><b>Дополнительные требования</b>:</p><ul><li><p>Интерфейс на русском языке (или с поддержкой локализации).</p></li><li><p>Без рекламы, премиум-фич или сложных настроек.</p></li><li><p>Тестирование на эмуляторе и реальном устройстве.</p></li><li><p>Опционально: Виджет на домашний экран для быстрого запуска.</p></li></ul></li></ul><h2>2. Функциональные требования</h2><h3>2.1. База данных и хранение</h3><ul><li><p>Использовать SQLite для хранения событий: каждая запись включает ID (автоинкремент), тип события (строка, e.g. "Проснулся"), timestamp (long, в миллисекундах от System.currentTimeMillis()).</p></li><li><p>Предопределённый список событий по умолчанию: (можно редактировать через голосовой ввод).</p></li><li><p>Автоматическое добавление новых событий в базу: Если голосовой ввод распознаёт новое слово (не совпадающее с существующими), добавить его в список событий и сохранить как новое событие.</p></li></ul><h3>2.2. Голосовой ввод и поиск событий</h3><ul><li><p>Основной способ ввода: Голосовой распознаватель (использовать Android SpeechRecognizer API для оффлайн-распознавания, без интернета).</p></li><li><p>Логика:</p><ul><li><p>При запуске приложения автоматически стартует голосовой ввод (без нажатий).</p></li><li><p>Пользователь произносит название события (e.g. "про" для "Проснулся").</p></li><li><p>Поиск по первым буквам: Приложение ищет в списке событий совпадения по префиксу (первые буквы произнесённого). Если несколько совпадений — выбрать первое или предложить выбор (но минимизировать взаимодействие).</p></li><li><p>Если точное совпадение — сразу логировать событие с текущим timestamp.</p></li><li><p>Если новое слово (не совпадает ни с одним) — добавить в базу как новый тип события и логировать.</p></li></ul></li><li><p>Интеграция: После распознавания показать подтверждение (текст на экране) и лог предыдущих 4-5 событий (см. ниже).</p></li></ul><h3>2.3. Автоматическое сохранение и закрытие</h3><ul><li><p>Всё без нажатий клавиш/экрана:</p><ul><li><p>После голосового ввода и показа лога: Запустить таймер на 5 секунд.</p></li><li><p>Если пользователь ничего не делает (не взаимодействует) — автоматически сохранить событие в базу и закрыть приложение (finish()).</p></li><li><p>Если пользователь хочет просмотреть предыдущие события — он может скроллить (но поскольку показываются только 4-5, и "которые не видно" подразумевает, что если не скроллит, то через 5 сек закрыть).</p></li></ul></li><li><p>Таймер: Использовать Handler или CountDownTimer для 5-секундной задержки перед auto-save и close.</p></li></ul><h3>2.4. Просмотр лога</h3><ul><li><p>При голосовом вводе (после распознавания) автоматически показывать последние 4-5 событий из лога на экране (в виде списка: тип события + время в формате "<a href="http://dd.MM">dd.MM</a>.yyyy HH:mm").</p></li><li><p>Полный лог: Отдельная кнопка или жест (e.g. свайп) для просмотра всего лога (RecyclerView, сортировка по timestamp DESC).</p></li><li><p>Расчёт времени: Для каждого типа события показывать "сколько прошло с последнего" (e.g. "Проснулся: 2 ч 15 мин назад") — интегрировать в основной экран или лог.</p></li></ul><h3>2.5. Дополнительные фичи</h3><ul><li><p>Расчёт времени с последнего события: Функция в DAO для любого типа (возвращает строку вроде "X ч Y мин назад" или "Никогда").</p></li><li><p>Экспорт лога: Опционально, кнопка для экспорта в CSV (через Intent для sharing).</p></li><li><p>Уведомления: Опционально, напоминания о событиях (e.g. через AlarmManager, но только если пользователь настроит).</p></li><li><p>Безопасность: Данные локальные, без облака.</p></li></ul><h2>3. Интерфейс пользователя (UI/UX)</h2><ul><li><p><b>Главный экран</b>:</p><ul><li><p>Авто-старт голосового ввода.</p></li><li><p>Текст: "Говорите событие..." (с индикатором распознавания).</p></li><li><p>После распознавания: Показать выбранное событие + список последних 4-5 событий (RecyclerView с лимитом).</p></li><li><p>Таймер: Невидимый, но через 5 сек — auto-close если нет взаимодействия.</p></li></ul></li><li><p><b>Дизайн</b>: Минималистичный, большие шрифты (для пожилых), светлая тема. Без меню, всё на одном экране.</p></li><li><p><b>Навигация</b>: Без кнопок где возможно; голос + авто-действия.</p></li><li><p><b>Ошибки</b>: Если распознавание не удалось — повторить автоматически или показать сообщение.</p></li></ul><h2>4. Технические требования</h2><ul><li><p><b>Зависимости</b>:</p><ul><li><p>AndroidX: RecyclerView, AppCompat.</p></li><li><p>Для голоса: android.speech.SpeechRecognizer (требует разрешения RECORD_AUDIO).</p></li><li><p>Для дат: java.time (API 26+) или ThreeTenABP для старых.</p></li></ul></li><li><p><b>Кодовая структура</b>:</p><ul><li><p>Database: EventDatabase (SQLiteOpenHelper).</p></li><li><p>DAO: EventDao с методами addEvent, getLastNEvents(5), getTimeSinceLast(type), searchByPrefix(prefix).</p></li><li><p>Activity: MainActivity с SpeechRecognizer, RecyclerView для лога, Handler для таймера.</p></li><li><p>Адаптер: Для RecyclerView.</p></li></ul></li><li><p><b>Разрешения</b>: RECORD_AUDIO (для голоса), запросить при запуске.</p></li><li><p><b>Тестирование</b>: Unit-тесты для DAO, UI-тесты для голоса и таймера.</p></li></ul><h2>5. Этапы разработки</h2><ol><li><p>Настройка проекта и база данных (1 час).</p></li><li><p>DAO и логика поиска/добавления (2 часа).</p></li><li><p>Голосовой ввод и UI (3 часа).</p></li><li><p>Таймер и авто-сохранение (1 час).</p></li><li><p>Тестирование и доработки (2 часа).</p></li></ol><h2>6. Критерии приёмки</h2><ul><li><p>Приложение запускается, голос работает оффлайн.</p></li><li><p>События логируются с временем (HH:mm).</p></li><li><p>Поиск по префиксу + добавление новых.</p></li><li><p>Авто-закрытие через 5 сек.</p></li><li><p>Лог показывает последние 4-5 с временем. прилагаются варианты экраны от grok</p></li></ul>