Skip to content

Application for creating Pomodoro timers [Foreground Service, Notification, Custom View]

Notifications You must be signed in to change notification settings

yaromchikV/Pomodoro-Timer

 
 

Repository files navigation

RSShool2021-Android-task-Pomodoro

Rolling Scopes School - Android 2021 - Stage 1 - Task 3 - Pomodoro

👋 Привет всем!

Практически каждый из нас сталкивался с "нехваткой времени" ⏰ - магическим образом происходит так, что мы начинаем по-настоящему работать тогда, когда уже невозможно игнорировать дедлайны.

It's fine 🐶🔥. Но хорошая новость в том, что есть множество техник, которые помогают реорганизовать время и способ ведения дел. Как итог мы успеваем гораздо больше. Pomodoro technique из этой серии.

В этом задании мы создадим простое приложение - Pomodoro Timer 🍅. Из тех-стека используем RecyclerView, Custom View, Service, Notification...

Результат должен получиться примерно такой:

См. видео на youtube

Описание задания

Один экран. На экране список RecyclerView и форма для создания таймера. Элемент списка - созданный таймер:

Pomodoro screen

Состав элемента списка слева-направо:

  1. мигающий индикатор (чуть анимации в наш проект) - видим только тогда, когда таймер включен.
  2. таймер обратного отсчёта типа hh:mm:ss
  3. Custom view. Представляет из себя своеобразный Progress bar - постепенно рисуется круг. View визуально отображает ход таймера. Скажем, для таймера на 10 минут, если таймер еще не запускался - View пустая. Если таймер отсчитал 5 минут - View наполовину нарисована. Когда прошло 10 минут - View нарисована полностью. Шаг - секунда или меньше. В своей реализации необязательно использовать круг, можно сделать линейный Progress bar или ещё какой-то. Главное требование - это должно быть Custom View и каким-либо образом визуализировать время таймера.
  4. кнопка Start/Stop - запуск или остановка таймера. Start - запускает данный таймер и при этом останавливает любой другой запущенный таймер. Т.е. одновременно может работать только один таймер в списке. "Запуск таймера" означает начало обратного отсчёта таймера, начало мигания индикатора и начало рисования Custom View. После старта таймера кнопка меняет текст на Stop. Нажатие на Stop отстанавливает таймер (время сохраняется), мигающий индикатор и рисование Custom View
  5. кнопка Delete - удаляет данный таймер из списка.

Это обязательный состав элемента списка для данного задания. Но вы вольны добавить что-то ещё, например, добавить кнопку сброса времени таймера, использовать красивый дизайн и т.д., но всё в разумных рамках ☝️

Форма для создания таймера находится под списком и включает:

  1. поле, или какой-либо picker, для задания количества минут (+ на ваше усмотрение, то же для секунд).
  2. кнопка Add Timer - добавляет таймер в список. После добавления таймер не активируется.

Таймер, который завершил свою работу, должен как-то сигнализировать об этом пользователю. Давайте для простоты будем использовать хотя бы один из трех вариатов:

  1. звуковой сигнал
  2. изменение цвета элемента списка
  3. Toast

Если в данный момент есть запущенный таймер и приложение сворачивается или стартует другое приложение - т.е. Pomodoro Timer App уходит в background, то запускается Foreground Service, который выводит Notification c текущим значением таймера. Значение времени на нотификации продолжает отсчитываться.

Pomodoro screen

Если вам показалось, что задание слишком сложное для вашего уровня - не переживайте! Будет три примера исходниками - создание RecyclerView с таймером, создание Custom View и создание Foreground Service c Notification. Останется объединить все это в одном проекте:

Cross-checking

  • Изучите требования к cross-check
  • Форму для оценки задания по критериям ищите здесь ⚡️

Успехов! 🤞

Результат

👀

Pomodoro screen

About

Application for creating Pomodoro timers [Foreground Service, Notification, Custom View]

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Kotlin 100.0%