1 // Copyright 2011 Google Inc. All Rights Reserved.
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
7 // http://www.apache.org/licenses/LICENSE-2.0
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
15 package com.hughes.android.dictionary;
17 import android.content.Context;
18 import android.content.Intent;
19 import android.content.SharedPreferences;
20 import android.os.Bundle;
21 import android.preference.PreferenceManager;
22 import android.support.v7.app.ActionBar;
23 import android.support.v7.app.ActionBarActivity;
24 import android.util.Base64;
25 import android.util.Log;
26 import android.view.MenuItem;
27 import android.view.View;
28 import android.view.View.OnClickListener;
29 import android.widget.Button;
31 import com.hughes.util.StringUtil;
33 import java.io.IOException;
34 import java.io.InputStream;
35 import java.io.UnsupportedEncodingException;
37 public final class HtmlDisplayActivity extends ActionBarActivity {
39 static final String LOG = "QuickDic";
41 static final String HTML_RES = "html_res";
42 static final String HTML = "html";
43 static final String TEXT_TO_HIGHLIGHT = "textToHighlight";
44 static final String SHOW_OK_BUTTON = "showOKButton";
46 public static Intent getHelpLaunchIntent(Context c) {
47 final Intent intent = new Intent(c, HtmlDisplayActivity.class);
48 intent.putExtra(HTML_RES, R.raw.help);
52 public static Intent getWhatsNewLaunchIntent(Context c) {
53 final Intent intent = new Intent(c, HtmlDisplayActivity.class);
54 intent.putExtra(HTML_RES, R.raw.whats_new);
58 public static Intent getHtmlIntent(Context c, final String html, final String textToHighlight,
59 final boolean showOkButton) {
60 final Intent intent = new Intent(c, HtmlDisplayActivity.class);
61 intent.putExtra(HTML, html);
62 intent.putExtra(TEXT_TO_HIGHLIGHT, textToHighlight);
63 intent.putExtra(SHOW_OK_BUTTON, showOkButton);
67 public void onOkClick(View dummy) {
71 /** Called when the activity is first created. */
73 public void onCreate(final Bundle savedInstanceState) {
74 setTheme(((DictionaryApplication) getApplication()).getSelectedTheme().themeId);
76 super.onCreate(savedInstanceState);
77 setContentView(R.layout.html_display_activity);
79 ActionBar actionBar = getSupportActionBar();
80 actionBar.setDisplayHomeAsUpEnabled(true);
82 final int htmlRes = getIntent().getIntExtra(HTML_RES, -1);
85 InputStream res = getResources().openRawResource(htmlRes);
86 html = StringUtil.readToString(res);
89 } catch (IOException e) {
92 html = getIntent().getStringExtra(HTML);
94 final MyWebView webView = (MyWebView) findViewById(R.id.webView);
95 final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
96 final String fontSize = prefs.getString(getString(R.string.fontSizeKey), "14");
99 fontSizeSp = Integer.parseInt(fontSize.trim());
100 } catch (NumberFormatException e) {
103 webView.getSettings().setDefaultFontSize(fontSizeSp);
105 // No way to get pure UTF-8 data into WebView
106 html = Base64.encodeToString(html.getBytes("UTF-8"), Base64.DEFAULT);
107 } catch (UnsupportedEncodingException e) {
108 throw new RuntimeException("Missing UTF-8 support?!", e);
110 // Use loadURL to allow specifying a charset
111 webView.loadUrl("data:text/html;charset=utf-8;base64," + html);
112 webView.activity = this;
114 final String textToHighlight = getIntent().getStringExtra(TEXT_TO_HIGHLIGHT);
115 if (textToHighlight != null && !"".equals(textToHighlight)) {
116 Log.d(LOG, "NOT Highlighting text: " + textToHighlight);
117 // This isn't working:
118 // webView.findAll(textToHighlight);
119 // webView.showFindDialog(textToHighlight, false);
122 final Button okButton = (Button) findViewById(R.id.okButton);
123 if (!getIntent().getBooleanExtra(SHOW_OK_BUTTON, true)) {
124 okButton.setVisibility(Button.GONE);
129 public void onBackPressed() {
130 final MyWebView webView = (MyWebView)findViewById(R.id.webView);
131 if (webView.canGoBack()) webView.goBack();
132 else super.onBackPressed();
136 public boolean onOptionsItemSelected(MenuItem item) {
137 // Explicitly handle the up button press so
138 // we return to the dictionary.
139 if (item.getItemId() == android.R.id.home) {
143 return super.onOptionsItemSelected(item);