README.md

Домашнее задание к занятию “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. Событие

Возьмите за основу проект с лекции и сверстайте карточку события

img.png

Требования:

  • Не должно быть предупреждений от 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 по показу тоста

  1. Создайте пакет utils
  2. Создайте отдельный файл ContextExtensions в utils
  3. Создайте функцию-расширение к Context вида

    /**
     * Создаёт и показывает Toast
     * @param res – ссылка на строковый ресурс, который показываем
     * @param short - если true, то Toast.LENGTH_SHORT, иначе Toast.LENGTH_LONG
    */
    fun Context.toast(@StringRes res: Int, short: Boolean = true) {
        TODO()
    }
    
    

    Реализуйте тело функции исходя из её описания

  4. Замените все показы тостов в MainActivity на вызов данной функции

Домашнее задание к занятию “16 Архитектура MVVM”

Цель задачи – освоить на практике архитектурный паттерн MVVM

Задача №1. MVVM events

Мигрируйте проект, который получился в результате выполнения работы 14 ConstraintLayout на MVVM по аналогии с примером из вебинара. Все классы с названием Post должны начинаться с Event соответственно

При этом обработчик кнопки участия в событии

participate.png

должен обращаться к 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 по аналогии с лайками.

participate.png

Домашнее задание к занятию “18 Навигация между Activity”

Цель задачи – закрепить навыки по навигации между Activiy

Задача №1. Edit Event

Доработойте ваш проект таким образом, чтобы была возможность как создавать новые события, так и редактировать их.

Вам потребуется:

  1. Добавить новый пункт меню в Popup и функцию в Listener адаптера.
  2. Добавить функцию обновления события по id в репозиторий и ViewModel
  3. Передать текст события в intent в MainAcitity
  4. Создать UI* для редактирования
  5. Обработать результат активити редактирования в 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 в списке

img_1.png

Далее в 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 для представления событий в виде текстового файла

Описание

Опишите проект

Конвейеры
0 успешных
0 с ошибкой