/**
*
*/
package edu.berkeley.cs.amplab.carat.android.ui;
import java.io.IOException;
import java.util.Locale;
import edu.berkeley.cs.amplab.carat.android.R;
import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.webkit.WebView;
/**
* A WebView that, when asked to load a document, will look for it in
* directories named after the currently set language's two-letter ISO code
* within assets. Otherwise, behaves exactly like a regular WebView.
*
* @author Eemil Lagerspetz
*
*/
public class LocalizedWebView extends WebView {
private static final String TAG = "LocalizedWebView";
/**
* @see android.webkit.WebView(android.content.Context)
*/
public LocalizedWebView(Context context) {
super(context);
}
/**
* @see android.webkit.WebView(android.content.Context,
* android.util.AttributeSet)
*/
public LocalizedWebView(Context context, AttributeSet attrs) {
super(context, attrs);
}
/**
* @see android.webkit.WebView(android.content.Context,
* android.util.AttributeSet, int)
*/
public LocalizedWebView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
/*
* (non-Javadoc)
*
* @see android.webkit.WebView#loadUrl(java.lang.String)
*/
@Override
public void loadUrl(String url) {
Context c = this.getContext();
// Fixes the white flash when showing the page for the first time.
String black = c.getString(R.string.blackBackground);
if (black != null && black.equals("true"))
setBackgroundColor(0);
Log.d(TAG, "Opening url=" + url);
if (!url.startsWith("file:///android_asset/")) {
super.loadUrl(url);
return;
}
// 01234567890123456789012
String fname = url.substring(22);
Locale l = Locale.getDefault();
if (l == null) {
super.loadUrl(url);
return;
}
String lang = l.getLanguage();
Log.d(TAG, "Lang=" + lang);
if (lang == null || lang.length() <= 0) {
super.loadUrl(url);
return;
}
String localizedPath = lang + "/" + fname;
String localizedUrl = "file:///android_asset/" + localizedPath;
Log.d(TAG, "localizedUrl=" + localizedUrl);
try {
String[] langFiles = c.getAssets().list(lang);
for (String file : langFiles) {
if (file.equals(fname)) {
super.loadUrl(localizedUrl);
return;
}
}
} catch (IOException e) {
e.printStackTrace();
}
// If all else fails:
super.loadUrl(url);
return;
}
}