package com.applang.tagesberichte; import static com.applang.Util.*; import static com.applang.Util2.*; import static com.applang.VelocityUtil.*; import com.applang.VelocityUtil.CustomContext; import com.applang.provider.NotePad.NoteColumns; import com.applang.provider.NotePadProvider; import java.io.StringWriter; import java.util.Map; import org.apache.velocity.Template; import org.apache.velocity.VelocityContext; import org.apache.velocity.app.Velocity; import org.apache.velocity.context.Context; import android.annotation.SuppressLint; import android.app.Activity; import android.app.Dialog; import android.content.ContentResolver; import android.content.Intent; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; import android.util.Log; import android.webkit.WebView; public class GlossaryView extends Activity { private static final String TAG = GlossaryView.class.getSimpleName(); /** * This is a special intent action that means "view the glossary". */ public static final String GLOSSARY_VIEW_ACTION = "com.applang.tagesberichte.action.VIEW_GLOSSARY"; private WebView webView; int tableIndex; // @SuppressLint("SetJavaScriptEnabled") @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); webView = new WebView(this); // webView.getSettings().setJavaScriptEnabled(true); setContentView(webView); Intent intent = getIntent(); tableIndex = NotePadProvider.tableIndex(2, intent.getData()); showDialog(0); } void mergeTemplateAndLoad(Context vc, String templateName) { StringWriter sw = new StringWriter(); Template template = Velocity.getTemplate(templateName); template.merge(vc, sw); webView.loadData(sw.toString(), "text/html", "UTF-8"); } void evaluateTemplateAndLoad(Context vc, String template, String logTag) { String s = evaluate( vc, template, logTag ); webView.loadData(s, "text/html", "UTF-8"); } @Override protected Dialog onCreateDialog(int id) { return waitWhileWorking(this, "Evaluating ...", new Job<Activity>() { public void perform(Activity activity, Object[] params) throws Exception { com.applang.UserContext.setupVelocity(activity, true); ContentResolver contentResolver = activity.getContentResolver(); CustomContext noteContext = new CustomContext(NotePadProvider.bausteinMap(contentResolver, "")); Map<String, String> pmap = NotePadProvider.projectionMap(NotePadProvider.NOTES_WORDS); ValList words = new ValList(); for (String word : NotePadProvider.wordSet(contentResolver, 2, "")) { ValMap map = new ValMap(); ValList list = new ValList(); Uri uri = Uri.withAppendedPath(NoteColumns.CONTENT_URI, NotePadProvider.DATABASE_TABLES[2]); Cursor cursor = contentResolver.query(uri, new String[] {NoteColumns.NOTE}, pmap.get(NoteColumns.TITLE) + "=?", new String[]{word}, pmap.get("date")); try { if (cursor.moveToFirst()) do { String note = cursor.getString(0); note = evaluate(noteContext, note, "notes"); list.add(note); } while (cursor.moveToNext()); } catch (Exception e) { Log.e(TAG, "traversing cursor", e); } finally { cursor.close(); } map.put("title", word); map.put("notes", list); words.add(map); } final VelocityContext vc = new VelocityContext(); vc.put("words", words); runOnUiThread(new Runnable() { public void run() { mergeTemplateAndLoad(vc, "glossary"); } }); } }); } }