bf.io.openshop.ux.dialogs.LicensesDialogFragment.java Source code

Java tutorial

Introduction

Here is the source code for bf.io.openshop.ux.dialogs.LicensesDialogFragment.java

Source

package bf.io.openshop.ux.dialogs;

import android.app.Dialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.DialogFragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.webkit.WebView;
import android.widget.ProgressBar;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

import bf.io.openshop.R;
import timber.log.Timber;

/**
 * Dialog shows open source libraries used in this project.
 */
public class LicensesDialogFragment extends DialogFragment {

    /**
     * Content view
     */
    private WebView licenseWebView;

    private ProgressBar progressBar;

    /**
     * Async loading of license data.
     */
    private AsyncTask<Void, Void, String> licenseAsyncTask;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setStyle(DialogFragment.STYLE_NO_TITLE, R.style.dialogNoTitle);
    }

    @Override
    public void onStart() {
        super.onStart();
        Dialog d = getDialog();
        if (d != null) {
            Window window = d.getWindow();
            if (window != null)
                window.setWindowAnimations(R.style.dialogFragmentAnimation);
            else
                Timber.e("Cannot set dialog animation");
        }
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        Timber.d("%s - OnCreateView", this.getClass().getSimpleName());
        View view = inflater.inflate(R.layout.fragment_license, container, false);

        licenseWebView = (WebView) view.findViewById(R.id.license_web_view);
        progressBar = (ProgressBar) view.findViewById(R.id.license_progress);
        return view;
    }

    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        loadLicenses();
    }

    /**
     * Load file with licenses. Using AsyncTask just in case of a big file.
     */
    private void loadLicenses() {
        licenseAsyncTask = new AsyncTask<Void, Void, String>() {

            @Override
            protected String doInBackground(Void... params) {
                InputStream rawResource = getActivity().getResources().openRawResource(R.raw.licenses);
                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(rawResource));

                String line;
                StringBuilder sb = new StringBuilder();

                try {
                    while ((line = bufferedReader.readLine()) != null) {
                        sb.append(line);
                        sb.append("\n");
                    }
                    bufferedReader.close();
                } catch (IOException e) {
                    Timber.e(e, "Load licenses failed.");
                }
                return sb.toString();
            }

            @Override
            protected void onPostExecute(String licensesBody) {
                super.onPostExecute(licensesBody);
                if (getActivity() == null || isCancelled()) {
                    return;
                }
                progressBar.setVisibility(View.INVISIBLE);
                licenseWebView.setVisibility(View.VISIBLE);
                licenseWebView.loadDataWithBaseURL(null, licensesBody, "text/html", "utf-8", null);
                licenseAsyncTask = null;
            }
        }.execute();
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        if (licenseAsyncTask != null) {
            licenseAsyncTask.cancel(true);
        }
    }
}