Приложения "Кликни" для 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
Заявки фрілансерів








