Структура приложения
В приложении должны быть следующие классы (файлы):
- MainActivity - задает стартовый экран (в манифесте ссылка на него);
- MyDeclareScreens - описываются все экраны (фрагменты и активити);
- MyAppParams - задаются параметры приложения;
- MyApp - инициируются MyDeclareScreens и MyAppParams (наследуется от класса Application).
Естественно, названия этих классов могут быть произвольными. Ниже приведены примеры этих классов.
Стартовая активность
Активности в библиотеке только описываются для них никаких файлов не нужно и в манифесте они не описываются. Исключением является стартовая активность, т.е. активность которая запускается первой в приложении. Она оформляется отдельным файлом и описывается в манифесте.
Типовый текст класса:
public class MainActivity extends BaseActivity { @Override public String getNameScreen() { return NAME_SCREEN; } }
Здесь NAME_SCREEN - строковая переменная (константа) - имя активити в описании MyDeclareScreens.
В манифесте активность описывается стандартным образом.
Описание экранов
Описание экранов выполняется в классе наследуемом от DeclareScreens в переопределяемом методе public void declare(). При этом строки с названиями экранов можно задать здесь же.
Пример:
public class MyDeclareScreens extends DeclareScreens{ public final static String MAIN = "main", HOME = "home", SERVICE = "service", NEWS = "news", .......; public void declare() { activity(MAIN, R.layout.activity_main) .fragmentsContainer(R.id.content_frame) .navigator(handler(R.id.apply, VH.SET_LOCALE, "id_language")) .menuBottom(R.id.nav, HOME, REPAIRS_MAIN, ABOUT, NEWS) .component(TC.RECYCLER, // меню вибора языка model(new GetData()), view(R.id.recycler, new int[] {R.layout.item_lang, R.layout.item_lang_sel}).selected()); fragment(HOME, R.layout.fragment_home) .setValue(item(R.id.lang_txt, TS.LOCALE)) .navigator(show(R.id.sel_lang, R.id.lang, true)) .component(TC.RECYCLER, model(API.CATEGORIES, 1).sort("order"), view(R.id.recycler, R.layout.item_home), navigator(handler(0, CATEGORY, PS.RECORD))); ....... } }
Параметры настройки приложения
В классе AppParams устанавливаются значения параметров приложения по умолчанию:
public String baseUrl; public int defaultMethod = ParamModel.GET; public String nameTokenInHeader = ""; public String nameLanguageInHeader = ""; public String nameLanguageInParam = ""; public String initialLanguage = ""; public int youtubeApiKey = 0; public int paginationPerPage = 20; public String paginationNameParamPerPage = ""; public String paginationNameParamNumberPage = ""; public int NETWORK_TIMEOUT_LIMIT = 30000; // milliseconds public int RETRY_COUNT = 0; public int LOG_LEVEL = 3; // 0 - not, 1 - ERROR, 2 - URL, 3 - URL + jsonResponse public static String NAME_LOG_NET = "SMPL_NET"; public static String NAME_LOG_APP = "SMPL_APP"; public Class<T> classProgress; public Class<T> classErrorDialog; public int errorDialogViewId = 0; public int progressViewId = 0; //public boolean nameLanguageInURL = false; 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;
Назначения параметров в целом понятно из их названия. Значения можно изменить в классе наследнике от AppParams в переопределенном методе setParams().
Пример:
public class MyAppParams extends AppParams { @Override public void setParams() { baseUrl = "http://examples.delta.branderstudio.com/"; nameTokenInHeader = "X-Auth-Token"; nameLanguageInHeader = "Accept-Language"; paginationPerPage = 30; paginationNameParamPerPage = "itemsPerPage"; paginationNameParamNumberPage = "page"; classProgress = ProgressDialog.class; classErrorDialog = ErrorDialog.class; } }
Класс Application приложения
Класс наследник от Application служит для инициализации библиотеки и передачи ей классов с описанием экранов и значениями параметров приложения.
Пример:
public class MyApp extends Application { private static MyApp instance; private Context context; public static MyApp getInstance() { if (instance == null) { instance = new MyApp(); } return instance; } @Override public void onCreate() { super.onCreate(); instance = this; context = getApplicationContext(); DeclareParam.build(context) .setAppParams(new MyAppParams()) .setDeclareScreens(new MyDeclareScreens()); } }
Статический метод DeclareParam.build(context) инициирует библиотеку. Метод setAppParams() устанавливает параметры приложения в библиотеке. Метод setDeclareScreens() подключает к библиотеки описание экранов.
В классе DeclareParam доступны и другие методы:
addParam(String name, String value)
Задает начальное значение value параметра с именем name.
setDB(BaseDB baseDB)
Подключает к библиотеке описание базы данных (детальное описание будет приведено далее).
Метод ComponTools getComponTools() возвращает ссылку на класс типа ComponTools через который разработчик может получить доступ к многим внутренним методам и переменным библиотеки. Какие методы и переменные доступны будет описано ниже.
Манифест
В манифесте нужно задать MyApp и описать стартовую активити. В нем также нужно не забыть описать кастомные активности (если они будут).
Если необходимо указываются элементы meta-data, provider, uses-permission и пр. При описании компонентов при необходимости будет указано, что нужно описать в манифесте для работы компонента.