cl.monsoon.s1next.view.fragment.HelpFragment.java Source code

Java tutorial

Introduction

Here is the source code for cl.monsoon.s1next.view.fragment.HelpFragment.java

Source

package cl.monsoon.s1next.view.fragment;

import android.content.ActivityNotFoundException;
import android.content.Intent;
import android.databinding.DataBindingUtil;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebView;
import android.webkit.WebViewClient;

import cl.monsoon.s1next.R;
import cl.monsoon.s1next.databinding.FragmentHelpBinding;
import cl.monsoon.s1next.view.activity.OpenSourceLicensesActivity;
import cl.monsoon.s1next.view.dialog.VersionInfoDialogFragment;
import cl.monsoon.s1next.view.internal.CoordinatorLayoutAnchorDelegate;
import cl.monsoon.s1next.viewmodel.WebPageViewModel;

/**
 * A Fragment represents a help page.
 * <p>
 * Also some related controls are provided in overflow menu:
 * 1.Link our app to Android marketplaces or Google Play website.
 * 2.See open sources licenses information.
 * 3.See version number.
 */
public final class HelpFragment extends Fragment {

    public static final String TAG = HelpFragment.class.getName();

    private static final String HELP_PAGE_URL = "http://monsoon.cl/S1-Next/HELP.html";

    /**
     * https://developer.android.com/distribute/tools/promote/linking.html#OpeningDetails
     */
    private static final String ANDROID_APP_MARKET_LINK = "market://details?id=%s";
    private static final String ANDROID_WEB_SITE_MARKET_LINK = "http://play.google.com/store/apps/details?id=%s";

    private FragmentHelpBinding mFragmentHelpBinding;
    private WebView mWebView;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        mFragmentHelpBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_help, container, false);
        mWebView = mFragmentHelpBinding.webView;
        return mFragmentHelpBinding.getRoot();
    }

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

        WebPageViewModel viewModel = new WebPageViewModel();
        mFragmentHelpBinding.setWebPageViewModel(viewModel);
        mWebView.setWebViewClient(new WebViewClient() {

            @Override
            public void onPageFinished(WebView view, String url) {
                viewModel.setFinishedLoading(true);
            }
        });

        // restore the state of WebView when configuration changes
        // see http://www.devahead.com/blog/2012/01/preserving-the-state-of-an-android-webview-on-screen-orientation-change/
        if (savedInstanceState == null) {
            mWebView.loadUrl(HELP_PAGE_URL);
        } else {
            mWebView.restoreState(savedInstanceState);
            // if we haven't finished loading before
            if (mWebView.getUrl() == null) {
                mWebView.loadUrl(HELP_PAGE_URL);
            }
        }
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        setHasOptionsMenu(true);
    }

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        inflater.inflate(R.menu.activity_help, menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case R.id.menu_view_in_google_play_store:
            Intent intent = new Intent(Intent.ACTION_VIEW);
            String packageName = getContext().getPackageName();
            intent.setData(Uri.parse(String.format(ANDROID_APP_MARKET_LINK, packageName)));
            try {
                // link our app in Android marketplaces
                startActivity(intent);
            } catch (ActivityNotFoundException exception) {
                intent.setData(Uri.parse(String.format(ANDROID_WEB_SITE_MARKET_LINK, packageName)));
                try {
                    // link our app in Google Play website if user hasn't installed any Android marketplaces
                    startActivity(intent);
                } catch (ActivityNotFoundException e) {
                    // show Snackbar if user hasn't installed any Android marketplaces or browsers
                    ((CoordinatorLayoutAnchorDelegate) getActivity())
                            .showShortSnackbar(R.string.message_chooser_no_applications);
                }
            }

            return true;
        case R.id.menu_open_source_licenses:
            OpenSourceLicensesActivity.startOpenSourceLicensesActivity(getContext());

            return true;
        case R.id.menu_version_info:
            new VersionInfoDialogFragment().show(getFragmentManager(), VersionInfoDialogFragment.TAG);

            return true;
        default:
            return super.onOptionsItemSelected(item);
        }
    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);

        mWebView.saveState(outState);
    }

    public WebView getWebView() {
        return mWebView;
    }
}