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; } }