Урок 4

На этом уроке мы закончим разработку всех остальных экранов и закрепим пройденный материал.

Постановка задачи (задание урока)

Нужно описать все экраны, на которые можно перейти с экранов ABOUT и NEWS.

Их дизайн приведен на следующих рисунках:


Рис. 1 экран WRITE_US

Рис. 2 экран WRITE_US

Рис. 3 экран BACK_THANKS

Рис. 4 экран NEWS_DETAIL

Рис. 5 экран NEWS_DETAIL

На рисунках 1 и 2 изображены разные части одного и того же экрана (WRITE_US) в двух состояниях: не заполненном и заполненном. На рисунках 4 и 5 также изображен один экран (NEWS_DETAIL) верхняя и нижняя части.

Описание API

Экран NEWS_DETAIL URL depro/news/newsbyid, параметр newsId, ответ:
{
    "newsId":535,
    "title":"Сортировочная линия для мусора ориентировочно будет стоить три с половиной миллиона гривен",
    "text1":"Вчера, 25 октября, на встрече рабочей группы по решению проблемы отходов в Полтаве, .......",
    "text2":" Такая установка может переработать 50 000 тонн твердых бытовых отходов в год .....",
    "mainImagePath":"images/WP_20180709_16_35_24_Pro.jpg",
    "imagePaths":["images/WP_20180709_15_31_38_Pro.jpg","images/WP_20180709_15_31_51_Pro.jpg", .....]
}

Экран WRITE_US URL depro/send/feedbackRequest, метод POST отправка данных:
    {"name":"Петр","phone":"+38055555","comment":""}

    Ответ {"result":"oK"}

Функционал экранов знаком по предыдущим экранах.

Описание экранов

Добавим в класс StockDeclareScreens.java описание всех указанных в постановке экранов (приведены ниже), а затем поясним новые компоненты.

    fragment(NEWS_DETAIL, R.layout.fragment_news_detail).animate(AS.RL)
        .navigator(back(R.id.back))
        .component(TC.PANEL,
            model(API.NEWS_DETAIL, "newsId"),
            view(R.id.panel));

    fragment(WRITE_US, R.layout.fragment_write_us).animate(AS.RL)
        .navigator(back(R.id.back))
        .component(TC.PANEL_ENTER,
            model(ARGUMENTS),
            view(R.id.panel),
            navigator(handler(R.id.country, COUNTRY_CODE_PH, after(assignValue(R.id.codePlus))),
                handler(R.id.add_comment, COMMENT, PS.RECORD, "comment",
                    after(assignValue(R.id.comment), showComponent(R.id.panel_comment))),
                handler(R.id.edit, COMMENT, PS.RECORD, "comment", after(assignValue(R.id.comment))),
                handler(R.id.apply, VH.CLICK_SEND,
                    model(POST, API.SEND_FEEDBACK, "name,phone,comment"),
                    after(start(BACK_THANKS)))))
        .enabled(R.id.apply, R.id.name,  R.id.phone);

    fragment(BACK_THANKS, R.layout.fragment_back_thanks).animate(AS.RL)
        .navigator(setMenu(R.id.apply), keyBack(R.id.apply));

Работа всех экранов нам знакома. Новых компонентов нет

Если все было сделано правильно, то после запуска приложения будет работать весь функционал

На этом разработка тестового приложения закончена. Мы можем оценить эффективность библиотеки


Лучше пакета DePro может быть только искусственный интеллект