package quickutils.core.views; /** * Created by cesarferreira on 9/6/14. */ import android.content.Context; import android.util.AttributeSet; import android.webkit.WebView; import java.io.Closeable; import java.io.IOException; import java.io.InputStream; import java.util.Scanner; /** * A WebView that allows you to load a html file from your /res/raw directory */ public class RawWebView extends WebView { private static final String DEFAULT_ENCODING = "UTF-8"; private static final String TEXT_HTML = "text/html"; private static final String ANDROID_RAW_BASE_URL = "file:///android_res/raw"; private static final String FAIL_URL = null; private final StreamTils streamTils; public RawWebView(Context context, AttributeSet attrs) { super(context, attrs); streamTils = new StreamTils(); } public RawWebView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); streamTils = new StreamTils(); } public void loadRawData(String html) { loadDataWithBaseURL(ANDROID_RAW_BASE_URL, html, TEXT_HTML, DEFAULT_ENCODING, FAIL_URL); } /** * Using this method with Proguard may result it missing file behaviour. * Recommended {@link #loadRawResource(int)} instead. * * @param rawFileName a filename in your /raw/ directory i.e. "novoda.html" */ public void loadRawUrl(String rawFileName) { loadUrl(ANDROID_RAW_BASE_URL + "/" + rawFileName); } /** * @param rawResourceId the corresponding id of a filename in your /raw/ directory i.e. "R.raw.novoda" */ public void loadRawResource(int rawResourceId) { InputStream input = null; try { input = getResources().openRawResource(rawResourceId); String html = streamTils.loadFrom(input); loadRawData(html); } finally { streamTils.tryClose(input); } } private static class StreamTils { private static final String END_OF_STREAM = "\\A"; private String loadFrom(InputStream input) { Scanner scanner = new Scanner(input, DEFAULT_ENCODING).useDelimiter(END_OF_STREAM); return scanner.hasNext() ? scanner.next() : ""; } private void tryClose(Closeable input) { try { if (input != null) { input.close(); } } catch (IOException e) { e.printStackTrace(); } } } }