Java tutorial
package org.devcon.android.util; import android.app.AlertDialog; import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.os.Bundle; import android.support.v4.app.DialogFragment; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; import android.text.Html; import android.text.SpannableString; import android.text.SpannableStringBuilder; import android.text.method.LinkMovementMethod; import android.text.style.ClickableSpan; import android.view.LayoutInflater; import android.view.View; import android.webkit.WebView; import android.widget.TextView; import org.devcon.android.R; import static org.devcon.android.util.LogUtil.makeLogTag; public class MenuUtil { private static final String TAG = makeLogTag(MenuUtil.class); public static void showAbout(FragmentActivity fa) { FragmentManager fm = fa.getSupportFragmentManager(); FragmentTransaction ft = fm.beginTransaction(); Fragment prev = fm.findFragmentByTag("dialog_about"); if (prev != null) { ft.remove(prev); } ft.addToBackStack(null); new AboutDialog().show(ft, "dialog_about"); } public static class AboutDialog extends DialogFragment { @Override public Dialog onCreateDialog(Bundle savedInstanceState) { PackageManager pm = getActivity().getPackageManager(); String packageName = getActivity().getPackageName(); String versionName = null; try { assert pm != null; PackageInfo info = pm.getPackageInfo(packageName, 0); versionName = info.versionName; } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } SpannableStringBuilder stb = new SpannableStringBuilder(); LogUtil.LOGD(TAG, "version name " + versionName); stb.append(Html.fromHtml(getString(R.string.about_body, versionName))); SpannableString opensourcelicenses = new SpannableString(getString(R.string.licenses)); opensourcelicenses.setSpan(new ClickableSpan() { @Override public void onClick(View widget) { MenuUtil.showOpenSourceLicenses(getActivity()); } }, 0, opensourcelicenses.length(), 0); stb.append("\n\n"); stb.append(opensourcelicenses); LayoutInflater inflater = (LayoutInflater) getActivity() .getSystemService(Context.LAYOUT_INFLATER_SERVICE); TextView tv = (TextView) inflater.inflate(R.layout.about_dialog, null); assert tv != null; tv.setText(stb); tv.setMovementMethod(new LinkMovementMethod()); return new AlertDialog.Builder(getActivity()).setTitle(R.string.about).setView(tv) .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { dialog.dismiss(); } }).create(); } } public static void showOpenSourceLicenses(FragmentActivity activity) { FragmentManager fm = activity.getSupportFragmentManager(); FragmentTransaction ft = fm.beginTransaction(); Fragment prev = fm.findFragmentByTag("dialog_licenses"); if (prev != null) { ft.remove(prev); } ft.addToBackStack(null); new showLicenses().show(ft, "dialog_licenses"); } public static class showLicenses extends DialogFragment { public showLicenses() { } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { WebView webView = new WebView(getActivity()); webView.loadUrl("file:///android_asset/licenses.html"); return new AlertDialog.Builder(getActivity()).setTitle(R.string.licenses).setView(webView) .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { dialog.dismiss(); } }).create(); } } }