---
# System prepended metadata

title: Домашнее задание

---

# Домашнее задание

Цель данного задания укрепить знания, полученные в ходе первой лекции.

[Здесь](https://www.figma.com/file/fmFliNHiZjzEgB7grM92KL/HSE-Android-HW1?node-id=6%3A101) можно посмотреть макеты экранов, которые вам предстоит сверстать в ходе выполнения задания.

Само задание разделено на три этапа.

## Этап 0 - подготовительный

Прежде чем приступить к выполнению задания, вам необходимо подключить `ktlint` к вашему проекту.

Add [KtLint](https://github.com/pinterest/ktlint) to the project

### 1. Create ktlint.gradle

Create file

```bash
mkdir code_quality_tools
touch code_quality_tools/ktlint.gradle
```

ktlint.gradle

```groovy
repositories {
    jcenter()
}

configurations {
    ktlint
}

dependencies {
    ktlint 'com.pinterest:ktlint:0.41.0'
}

task ktlint(type: JavaExec, group: "verification") {
    description = "Check Kotlin code style."
    main = "com.pinterest.ktlint.Main"
    classpath = configurations.ktlint
    args = ["--disabled_rules=no-multi-spaces,package-name", "src/main/**/*.kt"]
}
check.dependsOn ktlint

task ktlintFormat(type: JavaExec, group: "verification") {
    description = "Format Kotlin code style."
    main = "com.pinterest.ktlint.Main"
    classpath = configurations.ktlint
    args = ["-F", "--disabled_rules=no-multi-spaces,package-name", "src/main/**/*.kt"]
}
```

### 2. Add config to module build.gradle

```groovy
apply from: '../code_quality_tools/ktlint.gradle'
```


### 3. Set up CI

GitHub actions

```bash
mkdir -p .github/workflows
touch .github/workflows/feature.yml
```

```yaml
name: Feature Branch CI

on:
  push:
    branches:
      - '*'

jobs:
  ci:
    name: Run ktlint
    runs-on: ubuntu-latest

    steps:
    - name: Clone Repo 
      uses: actions/checkout@v2

    - name: Set up JDK 1.8
      uses: actions/setup-java@v1
      with:
        java-version: 1.8

    - name: Run ktlint
      run: bash ./gradlew ktlint --stacktrace
```

Теперь вы можете локально запускать линтер в терминале с помощью команды `./gradlew ktlint`. Так же он будет отрабатывать на GitHub при push'ах в ваш репозиторий.

**Прежде чем сдавать домашнее задание, убедитесь, что код успешно проходит проверку.**

## Этап 1 - до вечера пятницы (23.07.21)

Необходимо создать экран с `RecyclerView`. Список должен поддерживать 4 типа View Type:

- Header с вашей ФИО + закругленное изображение. По нажатию на кнопку `GitHub` должен открываться ваш GitHub
- Элемент с информацией о вашем проекте
- Header с названием "Навыки"
- Элемент содержащий информацию: название навыка + опыт владения (значения: меньше года, год, два года, более двух лет и т.д.)

Поскольку про работу с сетью ещё не рассказывали, предполагается, что данные будут сгенерированы внутри приложения.

Внешний вид первого экрана:
<kbd>
![](https://i.imgur.com/c9cT9ED.png)
</kbd>

## Этап 2 - до вечера понедельника (26.07.21)

Необходимо создать экран с фильтрами по навыкам и кнопкой "Применить". Переход на данный экран осуществляется нажатием на ярлык фильтра в header'е с текстом "Навыки". 

Принцип работы фильтров: при выборе опции "Все", у нас автоматически меняются значения остальных фильтров в соответствии со значением опции "Все". 

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

После выбора необходимых фильтров и нажатия на кнопку "Применить" мы должны вернуться на первый экран, где к списку будут применены выбранные фильтры. Так же ярлык фильтра должен быть подсвечен зелёной точкой, если не выбрана опция "Все".

При смене ориентации экрана, должны сохраняться выбранные фильтры.

Внешний вид экрана с фильтрами:
<kbd>
![](https://i.imgur.com/DfynhV1.png)
</kbd>

Внешний вид первого экрана, когда применены фильтры:
<kbd>
![](https://i.imgur.com/cMKsAyx.png)
</kbd>