В этом репозитории находится задание по теме Coroutines. Каждое из заданий выполняется в отдельном фрагменте главного экрана.
В этом задании вам нужно сделать таймер при помощи coroutines
.
В коде TimerFragment.kt есть функции startTimer
и stopTimer
для
запуска и останова таймера.
Напишите код корутины, которая будет увеличивать счетчик раз в несколько миллисекунд (по вашему выбору) и обновлять значение переменной time
.
Используйте scope, привязанный ко view фрагмента.
В этом задании вам нужно сделать форму логина при помощи coroutines
.
Состояние LoginFragment.kt определяется в LoginViewModel.kt
при помощи свойства state
и может принимать одно из следующих значений LoginViewState:
LoginViewState.Login
- форма входа. Опционально содержит ошибку входаLoginViewState.LoggingIn
- процесс входаLoginViewState.Content
- контент после входаLoginViewState.LoggingOut
- процесс выхода
Реализуйте функции login
и logout
в коде LoginViewModel.kt.
Требования:
- Используйте экземпляр LoginApi для запуска операций входа и выхода.
- Обратите внимание, что если запустить сетевую операцию на основном потоке, то приложение выдаст ошибку.
- Используйте scope, привязанный к viewModel.
- При входе и выходе показывайте индикатор загрузки, переключая состояние на
LoggingIn
иLoggingOut
соответственно. - При успешном входе переключайте состояние на
Content
. - При ошибке входа переключайте состояние на
Login
и передавайте ошибку в состоянии.
В этом задании вам нужно сделать эмулятор speed-test при помощи coroutines
.
Мы будем тренироваться запускать несколько корутин одновременно и усреднять их время выполнения.
В коде NetworkViewModel.kt определена функция emulateBlockingNetworkRequest
,
которая эмулирует сетевой запрос. Функция возвращает время выполнения запроса в миллисекундах или ошибку.
Вам нужно реализовать метод модели startTest
, который запускает несколько запросов одновременно и усредняет время выполнения.
- Используйте scope, привязанный к viewModel.
- Запускайте несколько параллельных корутин.
- Отфильтруйте удачные результаты.
- Усредните время выполнения запросов.
- Результат поместите в переменную
_result
. - На время выполнения операции, показывайте индикатор загрузки, устанавливая значение
_running
вtrue
.