Введение
Общее описание
Структура приложения
Уроки
Описание библиотеки
Приложения

Приложения

Параметры приложения

Ниже перечислены все парметры приложения со значениями по умолчанию. В комментариях дается описание параметра, если не совсем пончтно его назначение из названия. Значения нужных параметров можно изменить в классе MyParams.

    public int youtubeApiKey = 0;   // id строкового ресурса с youtube Api Key

    public String baseUrl;  // Базовый Url
    public int defaultMethod = ParamModel.GET;  
        // Если в модели не будет указан явно метод, то будет использоваться метод заданный в этом параметре
    public int NETWORK_TIMEOUT_LIMIT = 30000; // milliseconds
    public int RETRY_COUNT = 0; // Сколько будет дополнительных обращений к серверу в случае неудачи
    public ParamModel.TypeParam typeParameterTransfer = ParamModel.TypeParam.NAME;
        // тип передачи параметров в запросе: NAME - пары название - значение после знака "?"
        // SLASH - значения разделенные знаком "/"
    public int LOG_LEVEL = 3;  // 0 - not, 1 - ERROR, 2 - ERROR + URL, 3 - ERROR + URL + jsonResponse
    public static String NAME_LOG_NET = "SMPL_NET";
    public static String NAME_LOG_APP = "SMPL_APP";
    public static String NAME_LOG_DB = "SMPL_DB";
    public int paginationPerPage = 20;  // количество записей на странице (в блоке) при пагинации
    public String paginationNameParamPerPage = "PerPage";   // название ключа заголовка в котором передается paginationPerPage
    public String paginationNameParamNumberPage = "NumberPage"; // название ключа заголовка в котором передается номер страницы
    
    public int errorDialogViewId = 0,
            errorDialogLayoutId = 0,
            errorDialogPositiveId = 0,  // id элемента разметки, который соответствует кнопке Positive
            errorDialogNegativeId = 0;  // id элемента разметки, который соответствует кнопке Negative
    public int progressLayoutId = R.layout.smpl_dialog_progress; // По умолчанию системный прогресс
    
    public String nameTokenInHeader = "";
    public String nameTokenPush = "";
    public String nameTokenPushInHeader = "";

    public String nameLanguageInHeader = "",
            nameLanguageInParam = "",
            initialLanguage = "";

    public String nameVersionInHeader = "",
            valueVersionInHeader = "";

    public int idStringERRORINMESSAGE = 0;
    public int idStringDefaultErrorTitle = 0;
    public int idStringNOCONNECTION_TITLE = 0;
    public int idStringNOCONNECTIONERROR = 0;
    public int idStringTIMEOUT = 0;
    public int idStringSERVERERROR = 0;
    public int idStringJSONSYNTAXERROR = 0;
    public int idStringNO_AUTH = 0;

Методы модели и особенности их применения

Перечень параметров запроса - это строка в которой перечислены через запятую все необходимые параметры. Каждый параметр может быть строкой. В этом случае библиотека ищет возможность присвоить ему значенеие. Кроме того, параметр может иметть вид: name(value), или name=ХХХХ. В первом случае на экране ищется компонент типа list (recyclerView) с id = name и параметру с именем name присваиватся значение типа LIST_RECORD. Каждая запись этого списка формируется из соответствующе записи данных компонента, но отбираются только поля имеющие названия совпадающие с перечнем заданным в value. В value перечень полей разделяется символом ";". Во втором случае ХХХХ может принимать следующие значения: SYSTEM_TIME (параметру name присваивается системное время в милисекундах) или SYSTEM_TIME_SEC (параметру присваивается системное время в секундах), иначе параметру присваивается значение ХХХХ.

Обработчики навигатора

Действия, которые нужно выполнить в приложении описываются обработчиком. В общем случае обработчик задается следующим образом:

    handler(int viewId, ViewHandler.TYPE type[, остальные параметры]),

здесь viewId - id элемента представления к которому прикреплен обработчик, type - тип действий. Остальные параметры зависят от типа.

В некоторых случаях элемент представления отсутствует, например при клике на itemView в компоненте типа list. В этом случае viewId = 0. Для многих часто используемых обработчиков вместо обезличенного названия handler применяется контекстно понятное название, например start(…). В этом случае тип обработчика не указывается. Как правило, для таких обработчиков используется два типа вызова: один с параметром viewId, второй без него.

Многие обработчики в своих действиях используют данные компонента. Как правило, это поля записи, которую сможет собрать библиотека. В тексте она обозначается как RC. Сущность такой записи определяется типом компонента. Так для компонентов, данные которых представляются в виде списка записей, RC является запись в заданной позиции (это компоненты типа RECYCLER, PAGER_V, SPINNER и т.д.). Для компонентов типа PANEL, PANEL_ENTER и т.д. в качестве RC выступает запись, которая передается компоненту. В случае отсутствия такой записи RC формируется из значений элементов UI этого компонента. Для экрана в целом в качестве RC берется ARGUMENTS. А при его отсутствии RC формируется из значений элементов UI лайоута этого экрана.

Обработчики могут использоваться только в конструкциях типа Navigator. В библиотеке имеется несколько таких конструкций. Это:

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

Описания обработчиков объединяются в группы.

1. Обработчики переходов между экранами

Экраны (как типа activity так и типа fragment) вызываются обработчиком:

start([viewId, ] screen),

здесь необязательный параметр viewId - id элемента при клике на который будет вызван экран screen.

Если вызываемому экрану нужно передать данные, то используется обработчик:

start([viewId,] screen, typeParam),

здесь typeParam – задает тип параметра передаваемого в вызываемый экран.

Если typeParam = RECORD, то будет передана запись RC. Если нужно передавать не все поля записи RC, то нужно использовать обработчик:

start([viewId,] screen, RECORD, param),

здесь param задает перечень названия полей (через запятую) значения которых будут переданы в вызываемый экран. Переданная запись доступна компонентам вызываемого экрана через модель с параметром ARGUMENTS:

model(ARGUMENTS)

Если после закрытия вызванного экрана нужно выполнить некоторые действия, то используется обработчик:

start([viewId, ] screen, [RECORD,] after(…)),

здесь after – навигатор. В этом навигаторе нужно использовать обработчиками без viewId, или с viewId = 0.

Если перед вызовом нового экрана нужно проверить валидность некоторых полей, то используется обработчик:

start(viewId, screen, changeEnabled, mustValid),

здесь mustValid – перечень элементов UI, которые нужно проверять на валидность; changeEnabled – булева переменная, если она равна true, то в случае невалидности хотябы одного элемента из списка mustValid, у элемента viewId свойство enabled будет false. Если changeEnabled = false, то при клике на viewId не валидные элементы будут отмечены. Данный обработчик будет работать в компоненте типа PANEL_ENTER.

Для закрытия (выхода из) экрана используется обработчик:

back(viewId) – действия аналогичные аппаратной кнопке back.

Обработчик

keyBack(viewId)

указывает, что при нажатии аппаратной кнопки back будут выполнены действия, предусмотренные для viewId. Т.е. в этом случае нажатие на аппаратную кнопку back будет равноценно как если бы мы кликнули на элемент с id = viewId.

Если нужно перед выходом с приложения нужно запросить у пользователя подтверждение на выход используется обработчик:

finishDialog(titleId, messageId)

Здесь titleId и messageId – id строк с текстом для полей в диалоге title и message соответственно. Применяется только для активити перед выходом из приложения показывается диалог с текстом messageId (просьба подтвердить выход).

Если нужно выйти и сообщить вызывающему экрану, что все нормально, то используется обработчик:

backOk([viewId])

В этом случае в вызывающем экране будет выполнен навигатор after, если он задан.

Если нужно вернуть в вызывающий экран данные, то используется обработчик:

backOk(viewId, true) – возвращается запись, которую сможет сформировать библиотека,

или

backOk(viewId, param),

здесь param – строка с перечнем полей, которые буду включены в результирующую запись.

Данные, которые буду возвращены экраном в вызывающем экране в навигаторе after можно присвоить любому элементу viewId обработчиком assignValue(viewId). Обработчик assignValue можно использовать и в навигаторе after обработчика send.

При использовании меню фрагменты могут вызывать другие фрагменты. При необходимости с последнего фрагмента вернуться на исходный (начальный) экран для текущего пункта меню применяется обработчик:

setMenu(viewId)

Пример использования приведен в уроке 2.

2. Обмен данными между экранами

В предыдущем параграфе мы рассмотрели прямую передачу данных при вызове экранов. Сейчас рассмотрим и другие способы.

2.1. Глобальные переменные представляют собой именованные данные типа запись и типа список записей, которые доступны на всех экранах и могут создаваться, корректироваться и удаляться. Имеются следующие обработчики:

addVar([viewId,] nameVar [, param])

В глобальную переменную с именем nameVar заносятся значения полей из RC, названия которых перечисленные в param. ПРи отсутствии param в глобальную переменную заносятся все поля из RC. Если такой переменной нет, то она создается.

delVar([viewId,] nameVar [, param])

Из глобальной переменной с именем nameVar удаляются поля, названия которых перечисленные в param.

cleanVar([viewId,] nameVar)

Из глобальной переменной с именем nameVar удаляются все поля

cleanCopyVar([viewId,] nameVar)

Делается копия глобальной переменной с именем nameVar после чего из нее удаляются все поля.

restoreVar([viewId,] nameVar)

Восстанавливается значение глобальной переменной из копии.

setVar(viewId, nameVar)

Элементу UI с id=viewId присваивается значение (связывание данных) глобальной переменной с именем nameVar.

writeVar([viewId,] nameVar)

Применяется в опции after обработчика типа GET_DATA. Данные полученные по модели будут записаны в переменную nameVar.

Примеры работы с глобальными переменными приведены в уроках 3 и 11.

2.2. Параметры

Значения параметров во многих случаях устанавливается автоматически. Например, при клике на любой UI элемент айтема в списке с обработчиком типа start, или при выполнении обработчика типа CLICK_SEND.

Кроме этого можно задать значения параметров. Для этого имеется обработчик:

saveViewInParams([viewId,] String param)

При клике на viewId параметрам перечисленным в param будут присвоены значения из RC.

Если нужно присвоить некоторые значения параметров перед выполнением приложения, то используется метод класса DeclareParam:

addParam(name, value)

Здесь name – название параметра, value – значение параметра. Этот метод можно использовать только при подключении библиотеки в классе MyApp. Пример использования addParam приведен в уроке 11.

Значения параметров можно присвоить элементам UI. Для этого в методе setValue экрана нужно задать:

setParam(viewId [, nameParam])

Здесь viewId элемент UI разметки, которому присваивается значения параметра имя которого указано в nameParam. Усли nameParam отсутствует то будет использовано имя id элемента UI.

Также присвоить значение параметра в after обработчика start(). Для этого используется обработчик:

setValueParam(viewId)

При его выполнении элемента UI с id = viewId будет присвоено значение параметра с именем id.

3. Профиль и токен

Многие приложения для обеспечения безопасности используют токен. Библиотека позволяет работать с ним. Предполагается, что значение токена приходит в ответе сервера при успешной авторизации. По обработчику:

setToken([token])

это значение запоминается. Здесь token – имя переменной в ответе сервера в которой находится значение токена. Если token отсутствует, то предполагается, что его значение находится в переменной с именем "token". После выполнения обработчика setToke при отправке данных на сервер в заголовке запроса будет передаваться значение токена. Одновременно будет изменено значение свойства enabled в элемента UI (пунктах меню) которые зависят от него.

При авторизации также могут прийти и данные профиля пользователя. Они сохраняются обработчиком:

setProfile([profile])

При отсутствии profile предполагается, что данные профиля находятся в переменной с именем "profile".

Доступ к данным профиля осуществляется по модели с методом PROFILE:

model(PROFILE)

После выполнения обработчика setProfile все активные компоненты, у которых модель с методом PROFILE будут изменены данные.

По обработчику:

exit(viewId)

удаляются значение токена и профиля. Одновременно будут изменены все элементы UI и компоненты, которые от них зависят.

4. Управление видимостью элементов

Видимостью UI элементов управляют следующие обработчики.

hide(int viewId, int showViewId)

Скрывается элемент представления showViewId.

show(int viewId[, int showViewId[, boolean onActivity]])

Показывается элемент представления showViewId. Параметр onActivity применяется для фрагментов и указывет, что showViewId находится в активити.

showHide(int viewId, int showViewId, int textShowId, int textHideId)

Если showViewId видно, то он показывается, иначе скрывается. textShowId задает какой текст будет показываться в viewId когда showViewId видно, а textHideId когда скрыт.

Открытие и закрытие боковой панели, если она есть, осуществляется обработчиками:

handler(viewId, OPEN_DRAWER) и handler(viewId, CLOSE_DRAWER)

5. Анимация

В библиотеке можно использовать анимацию преобразований. Она задается следующим образом:

animationProperty(animateId, value_1, [value_1,] duration),

Здесь animationProperty может принимать следующие значения:

alpha - изменение прозрачности, 
scale - изменение масштаба, 
rotate - поворот вокруг центра, 
translation – перемещение;

animateId – id UI элемента у которого анимируется свойство; value_1 – конечное значение свойства; value_2 – если у анимации имеется два измерения, например, высота и ширина, то в value_2 будет находиться конечное значение второго измерения; в duration задается время анимации в миллисекундах.

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

set(animationProperty(),animationProperty(), …)

Для вызова анимации используется обработчик:

handler(viewId, animationProperty())

Примеры анимации перемещения приведены в уроке 10.

В библиотеке также можно использовать динамическую анимацию. Ее можно использовать в startNavigator. Она задается следующим образом?

springAnime(animateId, velocity, repeatTime)

Здесь springAnime может принимать следующие значения:

    springScale – изменение масштаба;
    springY – перемещение вверх – вниз;
    springX – перемещение влево – вправо;
    springXY – перемещение одновременно вверх – вниз и влево – вправо;
    springRotate – поворот;

animateId - id UI элемента у которого анимируется свойство; velocity – сила пружины (жесткость); repeatTime сколько раз повторять анимацию.

6. Обработчики для отдельных компонентов

В DePro имеется возможность выполнять действия с некоторыми компонентами.

Обработчик

handler(viewId, PAGER_PLUS)

используется только в навигаторе компонента типа PAGER_V. При клике на viewId осуществляется переход на следующую страницу.

Обработчик

handler(viewId, ADD_RECORD, componentId)

применяется если нужно в конец списка данных компонента с componentId добавить запись. Запись это RC компонента (экрана) в навигаторе которого выполняется этот обработчик. Компонент к данным которого можно добавить запись может быть тот, у которого данные имеют тип TYPE_LIST_RECORD. После добавления записи компонент обновляет свое представление.

Обработчик

handler(viewId, DEL_RECORD))

применяется в навигаторах компонентов, у которых данные имеют тип TYPE_LIST_RECORD. Удаляется запись на которой был клик. После удаления записи компонент обновляет свое представление.

Обработчики

switchOn(viewId, value)
и
switchOnStatus(viewId, value)

Для UI элемента с id равным viewId и с интерфейсом ISwitch (например, ComponSwitch) будет установлено состояние заданное в value (true ил false). Если этому элементу в описании экрана соответствует компонент SwitchComponent и применен обработчик switchOn, то будут выполнены соответствующие навигаторы этого компонента.

7. Установка значений элементам UI

SET_LOCALE, SET_GLOBAL, PARAM, SIZE, LOCALE, SYSTEM_TIME, GROUPP_PARAM, GLOBAL_VAR

8. События

BROADCAST, RECEIVER

9. Обращение к сервисам андроида

CALL_UP, DIAL_UP, YOUTUBE

10. Пуши

Описаны в разделе "Пуш уведомления"

Сообщения об ошибках

Практически все сообщения об ошибках содержат в конце название экрана. В списке сообщений, приводимом ниже, текст с названием экрана не указан.

0001 Library is not initialized.
0002 No description of the activity
0003 No screen with name
0004 Нет view для ErrorDialog в
0005 Для SearchComponent не найден RecyclerView в
0006 View для поиска должно быть IComponent или EditText в
0007 Вызывается не определенный фрагмент 
        При создании фрагмента нет mComponent и getLayoutId() = 0, т.е. это ни фрагмент системы, ни кастомный. 
        Скорее всего для PAGER_F указан список фрагментов и хотя бы один из них не описан.
0008 не описан фрагмент .. Если не описан фрагмент, на который есть ссылка в PAGER_F 
0009 Не найден {название элемента разметки} в {название экрана} (No item)
0010 Component {название компонента (его id)} not found in {название экрана}
0011 Нет типа пуша. Пришло сообщение у которого нет типа (параметр с именем push_type) или тип = “”.
0012 ToolBarModify не может быть в активити
0013 ToolBar отсутствует в родительской активити. Во фрагменте есть компонент ToolBarModify, 
            а в родительском активити нет соответствующего  компонента ToolBar.
0014 Нет контейнера фрагментов в
0015 0015 Не описаны действия для Menu в
0016 Не установлен маркер для карты в

1001 No data for parameter
1002 Invalid Token  Заносится не правильный токен. Будет занесено “”.
1003 Не определен способ передачи пуш токена на сервер в    // нужно установить значение 
            параметру nameTokenPushInHeader или nameTokenPush
1004 Индекс типа записи больше количества лайоутов в 

2001 updateRecord failed (Не выполнен SQL запрос)
2002 wrong where (set) parameter

Методы класса MoreWork и интерфейса ICustom

Классы которые имеют интерфейс ICustom или являются наследниками класса MoreWork используется для обработки нестандартных действий на экране. У них одинаковый перечень методов. Перечень методов с пояснениями приведен ниже:

        // Вызывается обработчиком типа CLICK_CUSTOM если нужно выполнить пользовательские действия
    void customClick(int viewId, int position, Record record);
        // Вызывается после связывания данных в адаптере компонента типа list
    void afterBindViewHolder(int viewId, int position, Record record, RecyclerView.ViewHolder holder);
        // Вызывается после получения данных с сервера, но перед началом обработки библиотекой
    void beforeProcessingResponse(Field response, BaseComponent baseComponent);
        // Вызывается обработчиком CLICK_VIEW
    void clickView(View viewClick, View parentView,
                   BaseComponent baseComponent, Record rec, int position);
        // Вызывается методом changeDataBase класса BaseComponent перед вызовом метода changeData компонента
    void changeValue(int viewId, Field field, BaseComponent baseComponent);
        // Вызывается методом changeDataBase класса BaseComponent после вызовом метода changeData компонента
    void afterChangeData(BaseComponent baseComponent);
        // Вызывается обработчиком CLICK_SEND для дополнения записи, которая будет передаваться на сервер необзодимыми полями
    void setPostParam(int viewId, Record rec);


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