# Домашнее задание
Цель данного задания укрепить знания, полученные в ходе первой лекции.
[Здесь](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>

</kbd>
## Этап 2 - до вечера понедельника (26.07.21)
Необходимо создать экран с фильтрами по навыкам и кнопкой "Применить". Переход на данный экран осуществляется нажатием на ярлык фильтра в header'е с текстом "Навыки".
Принцип работы фильтров: при выборе опции "Все", у нас автоматически меняются значения остальных фильтров в соответствии со значением опции "Все".
Если мы убираем галочку из какой-то из опций, при условии что все остальные опции тоже выбраны, то галочка из опции "Все" слетает. Подобным образом, если мы выбираем все опции, то в опцию "Все" автоматически подставляется галочка.
После выбора необходимых фильтров и нажатия на кнопку "Применить" мы должны вернуться на первый экран, где к списку будут применены выбранные фильтры. Так же ярлык фильтра должен быть подсвечен зелёной точкой, если не выбрана опция "Все".
При смене ориентации экрана, должны сохраняться выбранные фильтры.
Внешний вид экрана с фильтрами:
<kbd>

</kbd>
Внешний вид первого экрана, когда применены фильтры:
<kbd>

</kbd>