Часто при реализации мобильного приложения для Android c использованием в нем различных сторонних библиотек требуется их упомянуть в своем проекте, чтоб не нарушать права 3-х лиц и не попасть в бан с вашим проектом в магазине приложений Google Play.

В приложение нам нужно поместить описание использованных библиотек и указать их лицензию.
Речь идет о библиотеках, которые находятся на GitHub.

Описание лицензий находится в дереве проекта в файле README.md. По данной ссылке, можно посмотреть на описание лицензии библиотеки Picasso (нужно пролистать в самый низ).

Итак, это требование реализуется с помощью DialogFragment, можно его реализовать и при помощи AlertDialog (именно Fragment использовать лучше, так как он сохраняет свое состояние при перевороте девайса). Поместить данную фичу рекомендуется либо в Navigation Drawer, либо в Overflow.

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

image

Реализация:

1.

Нужно создать папку assets в корне каталога app (правой кнопкой кликаем на app > new > folder > assets folder и нажимаем finish ничего не меняя), где поместить наш .html файл с описанием библиотек и лицензий, которые мы используем.

Правой кнопкой кликаем на assets > new > file > name.html

Я файл назвал: open_source_licenses.html

Содержимое файла open_source_licenses.html:

<html>
<head>
    <style>
        body {
        font-family: sans-serif;
        }
        pre {
        background-color: #eeeeee;
        padding: 1em;
        white-space: pre-wrap;
        }
    </style>
</head>
<body>

<h3>
    Apache License
    <br/>
    Version 2.0, January 2004
</h3>
<ul>
    <li>
        <b>Picasso</b>
        <br/>
        Copyright 2013 Square, Inc.
    </li>
</ul>
<pre>
    Licensed under the Apache License, Version 2.0 (the "License");
    you may not use this file except in compliance with the License.
    You may obtain a copy of the License at

        http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
</pre>

</body>
</html>



2.

Создаем в папке layout файл в который просто поместим только WebView и назовем его — dialog_license.xml:

<?xml version="1.0" encoding="utf-8"?>
<WebView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    />


3.

Создаем новый java класс и называем его, например — LicensesDialogFragment.java и помещаем в этот класс такой код:

public class LicensesDialogFragment extends DialogFragment {

    public static LicensesDialogFragment newInstance() {
        return new LicensesDialogFragment();
    }

    @NonNull
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        WebView view = (WebView) LayoutInflater.from(getActivity()).inflate(R.layout.dialog_license, null);
        view.loadUrl("file:///android_asset/open_source_licenses.html");
        return new AlertDialog.Builder(getActivity(), R.style.Theme_AppCompat_Light_Dialog_Alert)
                .setTitle(getString(R.string.action_licenses))
                .setView(view)
                .setPositiveButton(android.R.string.ok, null)
                .create();
    }


4.

В strings.xml помещаем строку, в которой укажем заголовок для нашего диалога:

<string name="action_licenses">Лицензии открытого ПО</string>


5.

В MainActivity.java или в вашем активити, где находится Navigation Drawer, пишем следующий метод:

private void displayLicensesDialogFragment() {
        LicensesDialogFragment dialog = LicensesDialogFragment.newInstance();
        dialog.show(getFragmentManager(), "LicensesDialog");
    }


6.

Теперь, вызываем этот метод где нам хочется. Я его поставил на onNavigationItemSelected:

displayLicensesDialogFragment();


Не забудьте создать соответствующий item в main.xml или activity_main_drawer.xml в зависимости, куда вы хотите поместить ваш метод.

Вот, что получилось у меня:

image

P.S. Да, сам html-код можно и нужно немного подмарафетить, чтобы он не расползался, но это дела уже лично каждого, я в этой статье хотел показать, как работать с лицензиями библиотек.
А вы в своих проектах добавляете описание использованных библиотек?

Проголосовало 108 человек. Воздержалось 27 человек.

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

Комментарии (1)


  1. Tagakov
    11.01.2016 17:43
    +3

    Пришло время для gradle плагина с кодогенерацией.