Евгений Колесников 3 år sedan
förälder
incheckning
e8fa26c320
5 ändrade filer med 116 tillägg och 15 borttagningar
  1. 116 15
      articles/f6_demo_1.md
  2. BIN
      img/f6_027.png
  3. BIN
      img/f6_028.png
  4. BIN
      img/f6_029.png
  5. BIN
      img/mad_22.png

+ 116 - 15
articles/f6_demo_1.md

@@ -42,12 +42,12 @@
     - [Экран создания коллекций](#экран-создания-коллекций)
     - [Экран создания коллекций](#экран-создания-коллекций)
 
 
 1. **Модуль 2**  - разработка приложения для часов (может быть и для телевизора). Коротенькое задание (30 минут). Нужно просто создать приложение из двух окон + работа с интернетом.
 1. **Модуль 2**  - разработка приложения для часов (может быть и для телевизора). Коротенькое задание (30 минут). Нужно просто создать приложение из двух окон + работа с интернетом.
-    - [Создание проекта для часов](#создание-проекта-для-часов)
+    - [Создание проекта для часов](#модуль-2-умные-часы-разработка-приложения-для-управления-коллекцией-фильмов)
 
 
 1. **Модуль 3**  - презентация.
 1. **Модуль 3**  - презентация.
 
 
->**Модуль 1**: Смартфоны (разработка мобильного приложения для управления коллекцией фильмов)
->
+## **Модуль 1**: Смартфоны (разработка мобильного приложения для управления коллекцией фильмов)
+
 >Необходимо разработать мобильное приложение для смартфона, удовлетворяющее следующим требованиям:
 >Необходимо разработать мобильное приложение для смартфона, удовлетворяющее следующим требованиям:
 >
 >
 >Приложение должно поддерживать следующие версии ОС:
 >Приложение должно поддерживать следующие версии ОС:
@@ -122,7 +122,7 @@
 >Необходимо строго следовать предложенному дизайну. Макеты приложения доступны по ссылке:
 >Необходимо строго следовать предложенному дизайну. Макеты приложения доступны по ссылке:
 https://www.figma.com/file/tD64TlCMQEqlr8OTv6bW2o/KOD1.4-Variant3?node-id=0%3A1 
 https://www.figma.com/file/tD64TlCMQEqlr8OTv6bW2o/KOD1.4-Variant3?node-id=0%3A1 
 >
 >
->~~Во время работы не будет доступа в Интернет,~~ кроме документации и API. Описание протокола API доступно по ссылке: ~~https://app.swaggerhub.com/apis-docs/WorldSkills-MAD/WorldCinema/1.0.0~~ (так как АПИ на момент написания этих лекций не доступно, то я нарисовал своё АПИ и Swagger для него лежит [тут](http://swagger.kolei.ru?url=http://cinema.kolei.ru/swagger/cinema.yml))
+>Описание протокола API доступно по ссылке: ~~https://app.swaggerhub.com/apis-docs/WorldSkills-MAD/WorldCinema/1.0.0~~ (так как АПИ на момент написания этих лекций не доступно, то я нарисовал своё АПИ и Swagger для него лежит [тут](http://swagger.kolei.ru?url=http://cinema.kolei.ru/swagger/cinema.yml))
 
 
 >Проект приложения должен быть структурирован по экранам, то есть исходные файлы конкретного экрана должны быть в соответствующей папке. Общие для нескольких экранов классы необходимо поместить в папку common.
 >Проект приложения должен быть структурирован по экранам, то есть исходные файлы конкретного экрана должны быть в соответствующей папке. Общие для нескольких экранов классы необходимо поместить в папку common.
 
 
@@ -132,7 +132,7 @@ https://www.figma.com/file/tD64TlCMQEqlr8OTv6bW2o/KOD1.4-Variant3?node-id=0%3A1
 ---------|:----:
 ---------|:----:
 Проект приложения для смартфона имеет корректную структуру (все файлы распределены по папкам, соответствующим экранам приложения) | 0.5
 Проект приложения для смартфона имеет корректную структуру (все файлы распределены по папкам, соответствующим экранам приложения) | 0.5
 
 
-## Создание проекта
+### Создание проекта
 
 
 >Необходимо реализовать следующий функционал:
 >Необходимо реализовать следующий функционал:
 >
 >
@@ -173,7 +173,7 @@ https://www.figma.com/file/tD64TlCMQEqlr8OTv6bW2o/KOD1.4-Variant3?node-id=0%3A1
 AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
 AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
 ```
 ```
 
 
-## Экран Launch Screen
+### Экран Launch Screen
 
 
 >2. Реализуйте экран Launch Screen согласно макету. Текст должен быть отдельным элементом. Логотип приложения должен быть расположен по центру экрана.
 >2. Реализуйте экран Launch Screen согласно макету. Текст должен быть отдельным элементом. Логотип приложения должен быть расположен по центру экрана.
 
 
@@ -196,7 +196,7 @@ AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
 
 
 Нигде в задании не сказано, как переходить на окно авторизации - добавьте таймер на несколько секунд, чтобы экперты успели рассмотреть вёрстку, и [переходите на следующее окно](../shpora/startActivity.md#таймер-обратного-отсчёта-и-переход-на-другое-activity)
 Нигде в задании не сказано, как переходить на окно авторизации - добавьте таймер на несколько секунд, чтобы экперты успели рассмотреть вёрстку, и [переходите на следующее окно](../shpora/startActivity.md#таймер-обратного-отсчёта-и-переход-на-другое-activity)
 
 
-## Экран регистрации
+### Экран регистрации
 
 
 ![](../img/f6_008.png)
 ![](../img/f6_008.png)
 
 
@@ -411,7 +411,7 @@ registrationButton.setOnItemClickListener { parent, view, position, id ->
     * переход в основное окно (список фильмов)
     * переход в основное окно (список фильмов)
     * обработка исключений при проверке результата авторизации
     * обработка исключений при проверке результата авторизации
 
 
-## Экран авторизации
+### Экран авторизации
 
 
 ![](../img/f6_009.png)
 ![](../img/f6_009.png)
 
 
@@ -435,7 +435,7 @@ Email проверяется на удовлетворение шаблону и
 
 
 Не забудьте сохранить полученный токен в [классе приложения](../shpora/%D1%85%D1%80%D0%B0%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5%20%D0%B3%D0%BB%D0%BE%D0%B1%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85%20%D0%BF%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D1%8B%D1%85%20%D0%B2%20%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%B5%20%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F.md) (и в предыдущем окне тоже)
 Не забудьте сохранить полученный токен в [классе приложения](../shpora/%D1%85%D1%80%D0%B0%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5%20%D0%B3%D0%BB%D0%BE%D0%B1%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85%20%D0%BF%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D1%8B%D1%85%20%D0%B2%20%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%B5%20%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F.md) (и в предыдущем окне тоже)
 
 
-## Главный экран
+### Главный экран
 
 
 ![](../img/f6_010.png)
 ![](../img/f6_010.png)
 
 
@@ -503,7 +503,7 @@ Email проверяется на удовлетворение шаблону и
 
 
 Для перехода между экранами внизу главного экрана есть панель навигации. Для её реализации есть отдельный механизм, который мы пока не рассматривали. Вы можете сюда поместить горизонтальный **LinearLayout**.
 Для перехода между экранами внизу главного экрана есть панель навигации. Для её реализации есть отдельный механизм, который мы пока не рассматривали. Вы можете сюда поместить горизонтальный **LinearLayout**.
 
 
-## Экран "профиль пользователя"
+### Экран "профиль пользователя"
 
 
 ![](../img/f6_016.png)
 ![](../img/f6_016.png)
 
 
@@ -705,7 +705,7 @@ private fun sendFile(fileUri: Uri) {
 
 
 Тут всё просто: в горизонтальный **LinearLayout** помещаете три элемента, как в вёрстке, задаёте этому **LinearLayout**-у тег `id` и событие *setOnClickListener* "вешаете" на **LinearLayout**. (Событие *setOnClickListener* объявлено в базовом классе **View**, от которого наследуются все визуальные элементы)
 Тут всё просто: в горизонтальный **LinearLayout** помещаете три элемента, как в вёрстке, задаёте этому **LinearLayout**-у тег `id` и событие *setOnClickListener* "вешаете" на **LinearLayout**. (Событие *setOnClickListener* объявлено в базовом классе **View**, от которого наследуются все визуальные элементы)
 
 
-## Экран списка чатов (Chat List Screen)
+### Экран списка чатов (Chat List Screen)
 
 
 ![](../img/f6_021.png)
 ![](../img/f6_021.png)
 
 
@@ -825,7 +825,7 @@ if (item[position].avatar != null) {
 
 
 Activity используйте эту же самую
 Activity используйте эту же самую
 
 
-## Экран выбранного чата (Chat Screen)
+### Экран выбранного чата (Chat Screen)
 
 
 ![](../img/f6_022.png)
 ![](../img/f6_022.png)
 
 
@@ -905,7 +905,7 @@ param.setMargins(10,10,10,10)
 messageTextView.layoutParams = param
 messageTextView.layoutParams = param
 ```
 ```
 
 
-## Экран коллекций
+### Экран коллекций
 
 
 ![](../img/f6_024.png)
 ![](../img/f6_024.png)
 
 
@@ -1030,7 +1030,7 @@ fun deleteItem(position: Int){
 }
 }
 ```
 ```
 
 
-## Экран создания коллекций
+### Экран создания коллекций
 
 
 ![](../img/f6_023.png)
 ![](../img/f6_023.png)
 ![](../img/f6_026.png)
 ![](../img/f6_026.png)
@@ -1121,4 +1121,105 @@ override fun onActivityResult(
 }
 }
 ```
 ```
 
 
-## Создание проекта для часов
+## **Модуль 2 Умные часы** (разработка приложения для управления коллекцией фильмов)
+
+>Необходимо разработать мобильное приложение для умных часов.
+В работе необходимо использовать систему контроля версий Git. 
+Для входа используйте учетную запись вида wsX, где X – это номер участника. Необходимо загрузить результаты выполнения модуля в отдельную ветку с именем “Module-X”, где Х – это номер модуля. Для каждого проекта необходим отдельный репозиторий.
+>
+>Необходимо корректно обрабатывать запросы к серверу. В случае получения ошибки от сервера или отсутствия соединения с сетью Интернет необходимо отобразить соответствующий текст ошибки с помощью диалогового окна.
+>
+>Необходимо строго следовать предложенному дизайну. Макеты приложения доступны по ссылке:
+>
+>https://www.figma.com/file/tD64TlCMQEqlr8OTv6bW2o/KOD1.4-Variant3?node-id=0%3A1 
+>
+>Описание протокола API доступно по ссылке:
+>http://swagger.kolei.ru?url=http://cinema.kolei.ru/swagger/cinema.yml 
+>
+>Проект приложения должен быть структурирован по экранам, то есть исходные файлы конкретного экрана должны быть в соответствующей папке. Общие для нескольких экранов классы необходимо поместить в папку `common`.
+>
+>Разрешено использовать наработки **Модуля 1**.
+>
+>Необходимо реализовать следующий функционал:
+
+### Создание проекта
+
+Настройте иконку приложения согласно макету. Следует учесть разницу в отображении иконок на различных версиях операционной системы.
+
+Критерий | Баллы
+---------|:----:
+Создан репозиторий для проекта | 0.25
+Создана ветка для приложения для часов | 0.35
+Проект корректно сохранен в ветку для приложения для часов | 0.45
+Создан проект приложения для часов | 0.1
+Проект приложения для часов успешно собирается | 0.1
+Проект приложения для часов имеет корректную структуру (минус 0,1 за каждый файл, содержащийся в корне
+проекта) | 0.5
+Иконка приложения соответствует Конкурсному Заданию | 0.2
+**Итого** | 1.95
+
+### Реализуйте экран SignIn Screen согласно макету
+
+![](../img/mad_22.png)
+
+* При нажатии на кнопку "Войти" необходимо проверять поля для ввода на пустоту, а также email на корректность (требования к email описаны в документации к API). При некорректном заполнении необходимо отобразить ошибку с помощью диалогового окна. При корректном заполнении формы необходимо отправить на сервер соответствующий запрос.
+* При успешной авторизации необходимо осуществлять переход на экран `Main Screen`. При получении ошибки от сервера необходимо отобразить ее с помощью диалогового окна.
+
+Критерий | Баллы
+---------|:----:
+Реализован запрос авторизации. Запрос фиксируется сервером | 0.7
+Экран соответствует макету (оценивается верстка). Корректно реализованы 4 элемента: логотип, два поля для ввода, кнопка (минус 0,1 за каждый отсутствующий или некорректный элемент) | 0.4
+Поля для ввода валидируются на пустоту (минус 0,1 за каждое поле без валидации) | 0.2
+При получении ошибки от сервера она отображается с помощью диалогового окна | 0.5
+Email проверяется на удовлетворение шаблону из Задания | 0.3
+При успешной авторизации открывается экран Main Screen | 0.1
+**Итого** | 2.2
+
+### Реализуйте экран Main Screen согласно макету
+
+![](../img/f6_027.png)
+
+При нажатии на иконку должен осуществляться переход на соответствующий экран. Если экран не описан в Задании - нужно отобразить экран с надписью “В разработке”. При нажатии на кнопку Cancel (для Android - при свайпе вправо) нужно возвращаться на `SignIn Screen`.
+
+Критерий | Баллы
+---------|:----:
+Экран соответствует макету (оценивается верстка). Корректно реализованы 6 элементов: три кнопки, три надписи (минус 0,1 за каждый отсутствующий или некорректный элемент) | 0.6
+При нажатии на иконку осуществляется переход на соответствующий экран (минус 0,1 за каждый отсутствующий переход) | 0.3
+При нажатии на кнопку Cancel (на Android - при свайпе вправо) осуществляется возврат на SignIn Screen | 0.1
+**Итого** | 1
+
+### Реализуйте экран Chat List Screen согласно макету
+
+![](../img/f6_028.png)
+
+* Данные необходимо запрашивать с сервера. 
+* При нажатии на кнопку Cancel (для Android - при свайпе вправо) нужно возвращаться на `Main Screen`.
+
+Критерий | Баллы
+---------|:----:
+Реализован запрос списка чатов пользователя. Запрос фиксируется сервером | 0.5
+Ячейка таблицы соответствует макету | 0.1
+**Итого** | 0.6
+
+### Реализуйте экран Movies Screen согласно макету
+
+![](../img/f6_029.png)
+
+* На данном экране необходимо отобразить фильмы из подборки «new» в виде списка с вертикальной прокруткой. Данные необходимо получать с сервера.
+
+Критерий | Баллы
+---------|:----:
+Реализован запрос подборки фильмов. Запрос фиксируется сервером | 0.5
+Ячейка фильма соответствует макету. Присутствуют
+3 элемента: изображение, название, кнопка (минус 0,1 за каждый отсутствующий или некорректный элемент) | 0.3
+Список фильмов прокручивается по вертикали | 0.2
+**Итого** | 1
+
+## Защита проекта
+
+Критерий | Баллы
+---------|:----:
+Создана презентация | 0.1
+Презентация содержит описание приложения для смартфона | 0.3
+Презентация содержит описание приложения для часов | 0.3
+**Итого** | 0.7

BIN
img/f6_027.png


BIN
img/f6_028.png


BIN
img/f6_029.png


BIN
img/mad_22.png