|
|
@@ -85,35 +85,10 @@
|
|
|
|
|
|
**Во-вторых**, создайте в репозитории ветку: `git checkout -b Module_1`
|
|
|
|
|
|
- **В-третьих**, при работе желательно в основной ветке (`Module_Х`) держать только **РАБОЧИЙ** код, чтобы было что оценивать не зависимо от того, на каком месте вы остановились. Для этого создайте ещё одну ветку, например **work** (`git checkout -b work`) и работайте в ней. После отладки какой-то фичи (например, сделали авторизацию) фиксируете изменения, переключаетесь на основную ветку (Module_1), сливаете ветки и заливаете основную ветку в репозиторий. Затем возвращаетесь в ветку **work**:
|
|
|
+ **В-третьих**, при работе желательно в основной ветке (`Module_Х`) держать только **РАБОЧИЙ** код, чтобы было что оценивать не зависимо от того, на каком месте вы остановились (отладили кусок кода - запушили на сервер).
|
|
|
|
|
|
- * фиксируем изменения в ветке work
|
|
|
|
|
|
- ```
|
|
|
- git add .
|
|
|
- git commit -m "сделал авторизацию"
|
|
|
- ```
|
|
|
-
|
|
|
- * переключаемся на ветку Module_1
|
|
|
-
|
|
|
- ```
|
|
|
- git checkout Module_1
|
|
|
- ```
|
|
|
-
|
|
|
- * сливаем изменения из ветки work (в текущую) и, при желании, пушим на удаленный сервер
|
|
|
-
|
|
|
- ```
|
|
|
- git merge work
|
|
|
- git push origin Module_1
|
|
|
- ```
|
|
|
-
|
|
|
- * возвращаемся в рабочую ветку
|
|
|
-
|
|
|
- ```
|
|
|
- git checkout work
|
|
|
- ```
|
|
|
-
|
|
|
- итоговая структура репозиториев должна получиться примерно такая:
|
|
|
+ Итоговая структура репозиториев должна получиться примерно такая:
|
|
|
|
|
|
* Module_1 (репозиторий)
|
|
|
- Module_1 (ветка)
|
|
|
@@ -124,16 +99,16 @@
|
|
|
|
|
|
>Необходимо корректно обрабатывать запросы к серверу. В случае получения ошибки от сервера или отсутствия соединения с сетью Интернет необходимо отобразить соответствующий текст ошибки с помощью диалогового окна.
|
|
|
|
|
|
-Тут вам придумывать ничего не надо - в классе **Http** уже есть пример, как перехватывать исключения
|
|
|
+Тут вам придумывать ничего не надо - в классе **Http** уже все реализовано.
|
|
|
|
|
|
>Необходимо строго следовать предложенному дизайну. Макеты приложения доступны по ссылке:
|
|
|
https://www.figma.com/file/tD64TlCMQEqlr8OTv6bW2o/KOD1.4-Variant3?node-id=0%3A1
|
|
|
>
|
|
|
->Описание протокола 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://swagger.kolei.ru?url=https://cinema.kolei.ru/swagger/cinema.yml
|
|
|
|
|
|
->Проект приложения должен быть структурирован по экранам, то есть исходные файлы конкретного экрана должны быть в соответствующей папке. Общие для нескольких экранов классы необходимо поместить в папку common.
|
|
|
+>Проект приложения должен быть структурирован по экранам, то есть исходные файлы конкретного экрана должны быть в соответствующей папке. Общие для нескольких экранов классы необходимо поместить в папку `common`.
|
|
|
|
|
|
-В андроиде нужно делать не папки, а пакеты. Например, создаёте пакет LaunchScreen и в него переносите MainActivity. Для остальных окон сначала делаете пакет, например SignUpScreen, затем в этом пакете создаёте SignUpActivity.
|
|
|
+В андроиде нужно делать не папки, а пакеты. Например, создаёте пакет `LaunchScreen` и в него переносите `MainActivity`. Для остальных окон сначала делаете пакет, например `SignUpScreen`, затем в этом пакете создаёте `SignUpActivity`.
|
|
|
|
|
|
Критерий | Баллы
|
|
|
---------|:----:
|
|
|
@@ -273,23 +248,21 @@ override fun onCreate(savedInstanceState: Bundle?) {
|
|
|
|
|
|
**Swagger** - это фреймворк для спецификации *RESTful API*. Его прелесть заключается в том, что он дает возможность не только интерактивно просматривать спецификацию, но и отправлять запросы.
|
|
|
|
|
|
-Открываем [ссылку](http://swagger.kolei.ru?url=http://cinema.kolei.ru/swagger/cinema.yml) на описание АПИ и смотрим что там есть:
|
|
|
+Открываем [ссылку](https://swagger.kolei.ru?url=https://cinema.kolei.ru/swagger/cinema.yml) на описание АПИ и смотрим что там есть:
|
|
|
|
|
|

|
|
|
|
|
|
-В начале идёт общая информация. Нам тут пока интереснен только так называемый базовый URL. Здесь он находится в блоке Servers (`http://cinema.areas.su`), но может быть написан и просто текстом (как базовые урлы для картинок и видео).
|
|
|
-
|
|
|
-**ВАЖНО!!!** *figma* и *swagger* на момент написания этой лекции работают, а вот сервер АПИ - нет, видимо его запускали только на время работы демо-экзамена. Я написал простенький симулятор этого сервера, он доступен по адресу `http://cinema.kolei.ru`.
|
|
|
+В начале идёт общая информация. Нам тут пока интереснен только так называемый базовый URL. Здесь он находится в блоке Servers (`https://cinema.kolei.ru`), но может быть написан и просто текстом (как базовые урлы для картинок и видео).
|
|
|
|
|
|
Дальше идут описания методов АПИ. Рассмотрим подробно метод Регистрация:
|
|
|
|
|
|

|
|
|
|
|
|
-1. В заголовке указано какой метод и "путь" используются для запроса. К пути надо добавить "базовый урл" и получим полный адрес запроса: `http://cinema.areas.su/auth/register`
|
|
|
+1. В заголовке указано какой метод и "путь" используются для запроса. К пути надо добавить "базовый урл" и получим полный адрес запроса: `https://cinema.kolei.ru/auth/register`
|
|
|
|
|
|
1. В параметрах (Parameters) указываются параметры GET-запросов, передаваемые в строке запроса. У нас тут пусто.
|
|
|
|
|
|
-1. Тело запроса (Request body). Тут указано что тело запроса обязательно должно присутсвовать (required) и формат `application/json`
|
|
|
+1. Тело запроса (Request body). Тут указано что тело запроса обязательно должно присутствовать (required) и формат `application/json`
|
|
|
|
|
|
В теле запроса должна быть JSON-строка. Пример её можно посмотреть на вкладке **Example value**, но нам интереснее вкладка **schema** - на ней описаны типы данных (string), описание поля (что это такое вообще) и, возможно, обязательность использования поля. Например, для поля **email** расписан шаблон, которому оно должно соответсвовать.
|
|
|
|
|
|
@@ -390,7 +363,7 @@ registrationButton.setOnItemClickListener { parent, view, position, id ->
|
|
|
|
|
|
Http.call(
|
|
|
Http.buildRequest(
|
|
|
- "http://s4a.kolei.ru/login",
|
|
|
+ "https://cinema.kolei.ru/auth/register",
|
|
|
json.toString()
|
|
|
),
|
|
|
registrationCallback
|
|
|
@@ -488,9 +461,7 @@ Email проверяется на удовлетворение шаблону и
|
|
|
|
|
|
### Скруглённые углы у постера
|
|
|
|
|
|
-Есть вариант с программным изменением картинки, но он не учитывает последующую возможную обрезку картинки (понадобится при выводе аватарки).
|
|
|
-
|
|
|
-Есть более простой и наглядный вариант: элемент **ImageView** заворачивается в контейнер **androidx.cardview.widget.CardView**, которому и задаётся радиус:
|
|
|
+Элемент **ImageView** заворачивается в контейнер **androidx.cardview.widget.CardView**, которому и задаётся радиус:
|
|
|
|
|
|
```xml
|
|
|
<androidx.cardview.widget.CardView
|
|
|
@@ -508,7 +479,7 @@ Email проверяется на удовлетворение шаблону и
|
|
|
|
|
|

|
|
|
|
|
|
-Для перехода между экранами внизу главного экрана есть панель навигации. Для её реализации есть отдельный механизм, который мы пока не рассматривали. Вы можете сюда поместить горизонтальный **LinearLayout**.
|
|
|
+Для перехода между экранами внизу главного экрана есть панель навигации. Для её реализации есть activity с "Bottom Navigation". Но можете сюда поместить горизонтальный **LinearLayout**.
|
|
|
|
|
|
### Экран "профиль пользователя"
|
|
|
|
|
|
@@ -553,7 +524,7 @@ Email проверяется на удовлетворение шаблону и
|
|
|
```kt
|
|
|
Http.call(
|
|
|
Http.buildRequest(
|
|
|
- "http://cinema.kolei.ru/user",
|
|
|
+ "https://cinema.kolei.ru/user",
|
|
|
headers = mapOf("Authorization" to "Bearer ${app.token}")
|
|
|
),
|
|
|
userCallback
|
|
|
@@ -1141,7 +1112,7 @@ override fun onActivityResult(
|
|
|
>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
|
|
|
+>https://swagger.kolei.ru?url=https://cinema.kolei.ru/swagger/cinema.yml
|
|
|
>
|
|
|
>Проект приложения должен быть структурирован по экранам, то есть исходные файлы конкретного экрана должны быть в соответствующей папке. Общие для нескольких экранов классы необходимо поместить в папку `common`.
|
|
|
>
|