package com.afollestad.materialdialogssample; import android.annotation.SuppressLint; import android.app.Dialog; import android.graphics.Color; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.v4.app.DialogFragment; import android.view.InflateException; import android.view.LayoutInflater; import android.view.View; import android.webkit.WebView; import com.afollestad.materialdialogs.MaterialDialog; import com.afollestad.materialdialogs.Theme; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; /** @author Aidan Follestad (afollestad) */ public class ChangelogDialog extends DialogFragment { public static ChangelogDialog create(boolean darkTheme, int accentColor) { ChangelogDialog dialog = new ChangelogDialog(); Bundle args = new Bundle(); args.putBoolean("dark_theme", darkTheme); args.putInt("accent_color", accentColor); dialog.setArguments(args); return dialog; } @SuppressLint("InflateParams") @NonNull @Override public Dialog onCreateDialog(Bundle savedInstanceState) { final View customView; try { customView = LayoutInflater.from(getActivity()).inflate(R.layout.dialog_webview, null); } catch (InflateException e) { throw new IllegalStateException("This device does not support Web Views."); } MaterialDialog dialog = new MaterialDialog.Builder(getActivity()) .theme(getArguments().getBoolean("dark_theme") ? Theme.DARK : Theme.LIGHT) .title(R.string.changelog) .customView(customView, false) .positiveText(android.R.string.ok) .build(); final WebView webView = (WebView) customView.findViewById(R.id.webview); try { // Load from changelog.html in the assets folder StringBuilder buf = new StringBuilder(); InputStream json = getActivity().getAssets().open("changelog.html"); BufferedReader in = new BufferedReader(new InputStreamReader(json, "UTF-8")); String str; while ((str = in.readLine()) != null) { buf.append(str); } in.close(); // Inject color values for WebView body background and links final int accentColor = getArguments().getInt("accent_color"); webView.loadData( buf.toString() .replace( "{style-placeholder}", getArguments().getBoolean("dark_theme") ? "body { background-color: #444444; color: #fff; }" : "body { background-color: #fff; color: #000; }") .replace("{link-color}", colorToHex(shiftColor(accentColor, true))) .replace("{link-color-active}", colorToHex(accentColor)), "text/html", "UTF-8"); } catch (Throwable e) { webView.loadData( "<h1>Unable to load</h1><p>" + e.getLocalizedMessage() + "</p>", "text/html", "UTF-8"); } return dialog; } private String colorToHex(int color) { return Integer.toHexString(color).substring(2); } private int shiftColor(int color, boolean up) { float[] hsv = new float[3]; Color.colorToHSV(color, hsv); hsv[2] *= (up ? 1.1f : 0.9f); // value component return Color.HSVToColor(hsv); } }