Структура приложения

В приложении должны быть следующие классы (файлы):

- 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 и пр. При описании компонентов при необходимости будет указано, что нужно описать в манифесте для работы компонента.

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