Домашнее задание к занятию “12 Android. Первый проект”
Цель задачи – научиться создавать Android проекты, ориентироваться в коде.
Задача №1. Hello Eltex
Создайте новый Android проект и поменяйте надпись Hello World! на Hello Eltex! Не обращайте внимание на предупреждения со стороны IDE. Мы исправим их в следующий раз
Данные для создания проекта:
- com.eltex.androidschool
- minSdk – 24
- 100% Kotlin
- Empty Views Activity (Не compose!)
Домашнее задание к занятию “13 Ресурсы”
Цель задачи – научиться работать с ресурсами
Задача №1. Иконка
Замените стандартную иконку на фирменную по инструкции File -> New -> Image Asset
- В качестве Foreground Layer выберите svg ресурс.
- Параметр resize установите в 55%
- В качестве Background выберите белый цвет
- После генерации иконок удалите неиспользуемые ресурсы. Refactor -> Remove Unused Resources.
Задача №2. Локализация
Добавьте в values-ru/strings.xml перевод ресурса app_name на русский язык.
Android School -> Android Школа
Домашнее задание к занятию “14 Constraint Layout”
Цель задачи – научиться верстать при помощи самого популярного Layout
Задача №1. Событие
Возьмите за основу проект с лекции и сверстайте карточку события
Требования:
- Не должно быть предупреждений от Android Studio
- Выносите константы в dimens, где это необходимо
- Тестовые данные должны быть указаны с префиксом tools
- Не забывайте про автоформат (ctrl + alt + L)
Домашнее задание к занятию “15 Обработка событий”
Цель задачи – научиться ставить слушателей на кнопки, показывать тосты и прокачивать Android SDK
Задача №1. Toaster
Возьмите за основу проект с лекции и добавьте новый функционал. По клику на кнопки share, menu должно быть показано всплывающее сообщение Not implemented (default) / Не реализовано (ru)
Вам потребуется создать строковый ресурс not_implemented и использовать конструкцию
Toast.makeText(this, R.string.not_implemented, Toast.LENGTH_SHORT).show()
Где this – Context (MainActivity)
Задача №2. Extensions
Как видите, функция по показу тоста не отличается особой красотой или удобством, потому что она длинная, можно забыть вызвать show(). Предлагаем это исправить.
Напишите extension к классу Context по показу тоста
- Создайте пакет utils
- Создайте отдельный файл ContextExtensions в utils
-
Создайте функцию-расширение к Context вида
/** * Создаёт и показывает Toast * @param res – ссылка на строковый ресурс, который показываем * @param short - если true, то Toast.LENGTH_SHORT, иначе Toast.LENGTH_LONG */ fun Context.toast(@StringRes res: Int, short: Boolean = true) { TODO() }
Реализуйте тело функции исходя из её описания
- Замените все показы тостов в MainActivity на вызов данной функции
Домашнее задание к занятию “16 Архитектура MVVM”
Цель задачи – освоить на практике архитектурный паттерн MVVM
Задача №1. MVVM events
Мигрируйте проект, который получился в результате выполнения работы 14 ConstraintLayout на MVVM по аналогии с примером из вебинара. Все классы с названием Post должны начинаться с Event соответственно
При этом обработчик кнопки участия в событии
должен обращаться к EventViewModel EventViewModel.kt
fun participate() {
repository.participate()
}
EventViewModel должна делегировать работу в EventRepository InMemoryEventRepository.kt
fun participate() {
// TODO обновить state и переключить participatedByMe
}
Функция лайка должна работать как в примере с постами. Нажатия на share и menu должны показывать тосты (15 listeners)
Домашнее задание к занятию “17 RecyclerView”
Цель задачи – научиться работать с RecyclerView на практике
Задача №1. RecyclerView
Мигрируйте проект, который получился в результате выполнения предыдущей работы 16 MVVM на RecyclerVIew по аналогии с примером из вебинара.
Реализуйте обновление элементов по клику на participate при помощи Payload по аналогии с лайками.
Домашнее задание к занятию “18 Навигация между Activity”
Цель задачи – закрепить навыки по навигации между Activiy
Задача №1. Edit Event
Доработойте ваш проект таким образом, чтобы была возможность как создавать новые события, так и редактировать их.
Вам потребуется:
- Добавить новый пункт меню в Popup и функцию в Listener адаптера.
- Добавить функцию обновления события по id в репозиторий и ViewModel
- Передать текст события в intent в MainAcitity
- Создать UI* для редактирования
- Обработать результат активити редактирования в MainActivity
*Для редактирования можно:
- сделать создание и редактирование в рамках одной и той же Activity
- создать отдельную Activity и переиспользовать вёрстку добавления
- создать отдельную Activity и отдельную вёрстку
Каждый способ обладает своими плюсами и минусами. Можете попробовать все и оценить. Здесь нет лучшего решения.
Подумайте как запомнить id события перед навигацией
Задача №2. Share advanced*
Реализуйте приём интентов по шерингу текстов в приложении.
Вам потребуется добавить intent-filter к MainActivity
<intent-filter>
<action android:name="android.intent.action.SEND" />
<data android:mimeType="text/plain" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
Проверьте, что при попытке поделиться текстом будет предложено наше приложение Android School в списке
Далее в onCreate вы можете получить текст из intent
if (intent.action == Intent.ACTION_SEND) { // Обязательно проверьте соответствует ли action ожидаемому
val text = intent.getString(Intent.EXTRA_TEXT)
intent.removeExtra(Intent.EXTRA_TEXT) // Удаляем, чтобы при повороте экрана снова не открывалась активити
// TODO передать text далее в NewEventActivity, если он есть
}
Домашнее задание к занятию “19 Файлы”
Цель задачи – поработать с файлами и преференсами.
Задача №1. Events Storage
Добавьте в ваш проект реализацию репозитория LocalEventsRepository. Старый InMemoryEventsRepository удалите.
При этом:
- поле nextId должно храниться в SharedPreferences
- события должны храниться в файле
Вам необходимо будет добавить в проект kotlinx.serialization для представления событий в виде текстового файла