Rolling Scopes School - Android 2021 - Stage 1 - Task 3 - Pomodoro
👋 Привет всем!
Практически каждый из нас сталкивался с "нехваткой времени" ⏰ - магическим образом происходит так, что мы начинаем по-настоящему работать тогда, когда уже невозможно игнорировать дедлайны.
It's fine 🐶🔥. Но хорошая новость в том, что есть множество техник, которые помогают реорганизовать время и способ ведения дел. Как итог мы успеваем гораздо больше. Pomodoro technique из этой серии.
В этом задании мы создадим простое приложение - Pomodoro Timer 🍅. Из тех-стека используем RecyclerView, Custom View, Service, Notification...
Результат должен получиться примерно такой:
Один экран. На экране список RecyclerView и форма для создания таймера. Элемент списка - созданный таймер:
Состав элемента списка слева-направо:
- мигающий индикатор (чуть анимации в наш проект) - видим только тогда, когда таймер включен.
- таймер обратного отсчёта типа hh:mm:ss
- Custom view. Представляет из себя своеобразный Progress bar - постепенно рисуется круг. View визуально отображает ход таймера. Скажем, для таймера на 10 минут, если таймер еще не запускался - View пустая. Если таймер отсчитал 5 минут - View наполовину нарисована. Когда прошло 10 минут - View нарисована полностью. Шаг - секунда или меньше. В своей реализации необязательно использовать круг, можно сделать линейный Progress bar или ещё какой-то. Главное требование - это должно быть Custom View и каким-либо образом визуализировать время таймера.
- кнопка
Start
/Stop
- запуск или остановка таймера.Start
- запускает данный таймер и при этом останавливает любой другой запущенный таймер. Т.е. одновременно может работать только один таймер в списке. "Запуск таймера" означает начало обратного отсчёта таймера, начало мигания индикатора и начало рисования Custom View. После старта таймера кнопка меняет текст наStop
. Нажатие наStop
отстанавливает таймер (время сохраняется), мигающий индикатор и рисование Custom View - кнопка
Delete
- удаляет данный таймер из списка.
Это обязательный состав элемента списка для данного задания. Но вы вольны добавить что-то ещё, например, добавить кнопку сброса времени таймера, использовать красивый дизайн и т.д., но всё в разумных рамках ☝️
Форма для создания таймера находится под списком и включает:
- поле, или какой-либо picker, для задания количества минут (+ на ваше усмотрение, то же для секунд).
- кнопка
Add Timer
- добавляет таймер в список. После добавления таймер не активируется.
Таймер, который завершил свою работу, должен как-то сигнализировать об этом пользователю. Давайте для простоты будем использовать хотя бы один из трех вариатов:
- звуковой сигнал
- изменение цвета элемента списка
- Toast
Если в данный момент есть запущенный таймер и приложение сворачивается или стартует другое приложение - т.е. Pomodoro Timer App уходит в background, то запускается Foreground Service, который выводит Notification c текущим значением таймера. Значение времени на нотификации продолжает отсчитываться.
Если вам показалось, что задание слишком сложное для вашего уровня - не переживайте! Будет три примера исходниками - создание RecyclerView с таймером, создание Custom View и создание Foreground Service c Notification. Останется объединить все это в одном проекте:
- Изучите требования к cross-check
- Форму для оценки задания по критериям ищите здесь ⚡️
Успехов! 🤞
👀