Делаю интервальный таймер для Android: что изменилось за две версии
Всех приветствую. Это моя вторая статья про небольшой Android-проект - интервальный таймер для тренировок. Первая статья получилась сумбурной, скомканной, неструктурированной и с кучей воды. Не взлетела.
В этот раз попробую без длинного захода про изобретение велосипеда и работу с ИИ. Сразу сделаю упор на результат - то, что уже получилось.








Скриншоты текущей версии 0.3.0
Кратко напомню, что приложение, которое я вайбкодю в качестве небольшой самостоятельной практики - интервальный таймер для табаты, HIIT, круговых тренировок, растяжки, разминки и любых пользовательских интервалов. Приложение бесплатное, без навязчивой всплывающей рекламы, баннеров и урезанных функций. Для тех, кому интересно потрогать приложение в живую - ссылка на рустор в конце статьи.
В прошлый раз я писал про первую публичную версию таймера. Тогда это была версия 0.1.1: простой таймер для тренировок, где уже можно было собрать тренировку из разных интервалов и добавить голосовые подсказки на начало каждого интервала.
С тех пор вышли еще две версии - 0.2.0 и 0.3.0. Как и было в планах, в версии 0.2.0 появилась поддержка нагрудных пульсометров. Также в приложении появился метроном, отдых между кругами, импорт и экспорт тренировок.
Что было в первой версии
В 0.1.1 приложение закрывало только базовый сценарий интервального таймера:
настройка подготовки, работы, отдыха и количества повторов;
тренировки из нескольких разных интервалов;
собственные названия интервалов, чтобы на экране было понятно, какое упражнение идет сейчас;
сохранение сложных тренировок для последующего быстрого запуска;
запись коротких голосовых подсказок прямо внутри приложения, которые можно назначать как сигнал начала интервала вместо стандартного звука.
Например, можно было собрать тренировку вроде:
отжимания - 40 секунд работы, 20 секунд отдыха;
приседания - 50 секунд работы, 30 секунд отдыха;
планка - 60 секунд работы, 30 секунд отдыха.
Что добавилось в 0.2.0
В предыдущей статье я писал, что следующим крупным шагом хочу сделать поддержку нагрудных пульсометров. Как и планировал, в версии 0.2.0 такая поддержка появилась.
Приложение работает с нагрудными BLE-датчиками, которые передают пульс через стандартный Bluetooth Heart Rate Service. Например, XOSS X2, Polar H10, Garmin HRM-Dual, Wahoo TICKR и похожие устройства.
Теперь во время тренировки можно наблюдать текущий уровень пульса. Также для отдыха можно задать восстановление до нужного значения BPM. Тогда приложение не просто отсчитает заданное время отдыха, а продлит отдых, пока пульс не опустится до выбранного уровня.
Пример:
работа - 45 секунд;
отдых - 20 секунд;
восстановление - до 120 BPM.
Если через 20 секунд пульс все еще выше 120, таймер продолжит отдых. Когда пульс опустится до нужного значения, начнется следующий рабочий интервал. Отдых по пульсу можно принудительно прервать и перейти к следующему интервалу.
Доработана настройка самой тренировки: кроме кнопок + и - с шагом 5 секунд, добавлен точный выбор значений через колесо прокрутки. Это гораздо удобнее, когда нужно выбрать длинный интервал - 50, 60, 90 секунд и более. Кнопки + и - при этом остались для быстрых правок.
Отдельно появились настройки звуков таймера: можно выбрать сигналы последних секунд, начала работы и начала отдыха. В первой версии звуки воспроизводились через канал будильника, поэтому во время тренировки было не всегда удобно быстро менять громкость. В 0.2.0 сигналы таймера перенесены на медиа-канал Android и их можно регулировать обычными кнопками громкости.
Была улучшена работа таймера в фоне и после блокировки экрана. Телефон можно заблокировать или свернуть приложение - в первой версии я упустил этот момент. Таймер в том числе будет показывать активную тренировку через уведомление.
Что добавилось в 0.3.0
Основное изменение версии 0.3.0 - метроном для рабочей фазы. В карточке интервала можно задать темп в BPM, выбрать звук метронома и включить визуальный импульс на экране таймера. Это может быть полезно для упражнений, где требуется соблюдать темп, например: приседания, жимы, тяги с небольшим весом, махи гирей, упражнения с собственным весом, круговые комплексы и т.д.
Также появилась возможность выбрать канала звука. Теперь можно оставить сигналы на медиа-канале или переключить их на канал будильника, если нужен более настойчивый вариант.
Время подготовки, работы и отдыха теперь выбирается в формате мин:сек, что гораздо удобнее, если длительность интервалов достигает нескольких минут.
Добавилась возможность импорта и экспорта сохраненных тренировок.
Повторы цикла переименованы в Круги для лучшего отражения смысла. Между кругами можно задать отдельный отдых, в том числе отдых до восстановления пульса.
Из мелких правок - карточки стали компактнее, дополнительные настройки переехали в блок Больше параметров.
Что приложение умеет сейчас
Если собрать все вместе, сейчас в приложении есть:
быстрый старт простой интервальной тренировки: подготовка, работа, отдых и круги;
возможность создать несколько разных интервалов в одной тренировке с возможностью переименования и отображения названия на экране в процессе работы;
голосовые подсказки, которые можно записать прямо в приложении и установить как сигнал начала интервала вместо стандартных звуков;
сохранение тренировок для последующего быстрого запуска, импорт и экспорт;
поддержка Bluetooth-пульсометров - наблюдение за пульсом во время тренировки, отдых до восстановления до заданного пульса;
метроном для рабочей фазы - возможность задавать нужный темп для работы;
работа таймера в фоне и после блокировки экрана.
Планы на будущее
История тренировок: автоматическое сохранение завершенных тренировок, календарь активности, список по датам и подробности занятия.
Развитие метронома: вместо одного варианта с BPM в планах добавить выбор - задать темп исходя из количества ударов в минуту или указать количество повторений за рабочий интервал, а приложение само рассчитает BPM.
Добавить возможность выбора звука ритма для каждого интервала: стандартный тик или одна из сохраненных голосовых записей. Это можно использовать не только как обычный метроном, но и как простую голосовую разметку: например, чередовать движение под свою запись.
Краткая ремарка про работу с ИИ
Проект я делаю при активной помощи Codex/ChatGPT. Но это далеко не про "сделай приложение за один промпт".
Обычно работа выглядит так: я формулирую идею или проблему, прошу анализ и план, правлю этот план, потом отправляю агента реализовывать конкретный кусок. После этого агент собирает APK, ставит его на телефон и я уже проверяю. Но бывают и варианты, когда агент сам тестирует приложение на телефоне.
ИИ существенно упрощает работу с рутиной. Он пишет/правит код, помогает с миграциями базы, помогает с текстами для справок и документации, ищет и разбирает ошибки, собирает APK, ставит приложение на телефон. В моем случае, даже нужные скриншоты для релиза, сам делает через ADB. Мне только приходится надевать пульсометр и поднимать пульс, чтобы на скриншотах были соответствующие значения)
Для повторяющихся действий я обычно завожу отдельные скрипты. Например: для сборки APK, установки на телефон, подготовки скриншотов и релизных файлов. Это существенно снижает риск мелких ошибок при этих действиях, в отличие от варианта, когда агент по команде каждый раз продумывает план и реализует запрос.
Буду рад советам
Буду рад советам, идеям и обратной связи по приложению: что удобно, что неудобно, чего не хватает, что кажется лишним и что стоило бы развивать дальше.
Особенно интересны реальные тренировочные сценарии: какие варианты тренировок уже можно делать с ним, а какие нельзя и что для этого не хватает?
Все советы и полезные идеи - обязательно изучу. Если они покажутся мне интересными для внедрения - запланирую их реализацию в следующих версиях.
Ссылка на приложение в RuStore: Интервальный таймер



