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








