X-Git-Url: http://gitweb.fperrin.net/?p=Dictionary.git;a=blobdiff_plain;f=src%2Fcom%2Fhughes%2Fandroid%2Fdictionary%2FHtmlDisplayActivity.java;h=f6a37e93e5cbdd4ec1063a3153da1872bd84de33;hp=0a65290772756bb635372dd5a6cbf73ba0455bfe;hb=c76660b2772122109529d3616289980a7084eeeb;hpb=73e7eb689ac430af2ee2952cb0ec485f6ec2b1e0 diff --git a/src/com/hughes/android/dictionary/HtmlDisplayActivity.java b/src/com/hughes/android/dictionary/HtmlDisplayActivity.java index 0a65290..f6a37e9 100644 --- a/src/com/hughes/android/dictionary/HtmlDisplayActivity.java +++ b/src/com/hughes/android/dictionary/HtmlDisplayActivity.java @@ -1,99 +1,146 @@ -// Copyright 2011 Google Inc. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package com.hughes.android.dictionary; - -import android.app.Activity; -import android.content.Intent; -import android.os.Bundle; -import android.util.Log; -import android.view.View; -import android.view.View.OnClickListener; -import android.webkit.WebView; -import android.widget.Button; - -import com.hughes.util.StringUtil; - -public final class HtmlDisplayActivity extends Activity { - - static final String LOG = "QuickDic"; - - - static final String HTML_RES = "html_res"; - static final String HTML = "html"; - static final String TEXT_TO_HIGHLIGHT = "textToHighlight"; - static final String SHOW_OK_BUTTON = "showOKButton"; - - public static Intent getHelpLaunchIntent() { - final Intent intent = new Intent(); - intent.setClassName(HtmlDisplayActivity.class.getPackage().getName(), HtmlDisplayActivity.class.getName()); - intent.putExtra(HTML_RES, R.raw.help); - return intent; - } - - public static Intent getWhatsNewLaunchIntent() { - final Intent intent = new Intent(); - intent.setClassName(HtmlDisplayActivity.class.getPackage().getName(), HtmlDisplayActivity.class.getName()); - intent.putExtra(HTML_RES, R.raw.whats_new); - return intent; - } - - public static Intent getHtmlIntent(final String html, final String textToHighlight, final boolean showOkButton) { - final Intent intent = new Intent(); - intent.setClassName(HtmlDisplayActivity.class.getPackage().getName(), HtmlDisplayActivity.class.getName()); - intent.putExtra(HTML, html); - intent.putExtra(TEXT_TO_HIGHLIGHT, textToHighlight); - intent.putExtra(SHOW_OK_BUTTON, showOkButton); - return intent; - } - - /** Called when the activity is first created. */ - @Override - public void onCreate(final Bundle savedInstanceState) { - setTheme(((DictionaryApplication)getApplication()).getSelectedTheme().themeId); - - super.onCreate(savedInstanceState); - setContentView(R.layout.html_display_activity); - - final int htmlRes = getIntent().getIntExtra(HTML_RES, -1); - final String html; - if (htmlRes != -1) { - html = StringUtil.readToString(getResources().openRawResource(htmlRes)); - } else { - html = getIntent().getStringExtra(HTML); - } - final WebView webView = (WebView) findViewById(R.id.webView); - webView.loadData(html, "text/html", "utf-8"); - - final String textToHighlight = getIntent().getStringExtra(TEXT_TO_HIGHLIGHT); - if (textToHighlight != null && !"".equals(textToHighlight)) { - Log.d(LOG, "Highlighting text: " + textToHighlight); - // This isn't working: - webView.findAll(textToHighlight); - //webView.showFindDialog(textToHighlight, false); - } - - final Button okButton = (Button) findViewById(R.id.okButton); - okButton.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - finish(); - } - }); - if (!getIntent().getBooleanExtra(SHOW_OK_BUTTON, true)) { - okButton.setVisibility(Button.GONE); - } - } - -} +// Copyright 2011 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package com.hughes.android.dictionary; + +import android.content.Context; +import android.content.Intent; +import android.content.SharedPreferences; +import android.os.Bundle; +import android.support.v7.preference.PreferenceManager; +import android.support.v7.app.ActionBar; +import android.support.v7.app.AppCompatActivity; +import android.util.Base64; +import android.util.Log; +import android.view.MenuItem; +import android.view.View; +import android.widget.Button; + +import com.hughes.util.StringUtil; + +import java.io.IOException; +import java.io.InputStream; +import java.io.UnsupportedEncodingException; + +public final class HtmlDisplayActivity extends AppCompatActivity { + + private static final String LOG = "QuickDic"; + + private static final String HTML_RES = "html_res"; + private static final String HTML = "html"; + private static final String TEXT_TO_HIGHLIGHT = "textToHighlight"; + private static final String SHOW_OK_BUTTON = "showOKButton"; + + public static Intent getHelpLaunchIntent(Context c) { + final Intent intent = new Intent(c, HtmlDisplayActivity.class); + intent.putExtra(HTML_RES, R.raw.help); + return intent; + } + + public static Intent getWhatsNewLaunchIntent(Context c) { + final Intent intent = new Intent(c, HtmlDisplayActivity.class); + intent.putExtra(HTML_RES, R.raw.whats_new); + return intent; + } + + public static Intent getHtmlIntent(Context c, final String html, final String textToHighlight, + final boolean showOkButton) { + final Intent intent = new Intent(c, HtmlDisplayActivity.class); + intent.putExtra(HTML, html); + intent.putExtra(TEXT_TO_HIGHLIGHT, textToHighlight == null ? "" : textToHighlight); + intent.putExtra(SHOW_OK_BUTTON, showOkButton); + return intent; + } + + public void onOkClick(View dummy) { + finish(); + } + + /** Called when the activity is first created. */ + @Override + public void onCreate(final Bundle savedInstanceState) { + DictionaryApplication.INSTANCE.init(getApplicationContext()); + setTheme(DictionaryApplication.INSTANCE.getSelectedTheme().themeId); + + super.onCreate(savedInstanceState); + setContentView(R.layout.html_display_activity); + + ActionBar actionBar = getSupportActionBar(); + actionBar.setDisplayHomeAsUpEnabled(true); + + final int htmlRes = getIntent().getIntExtra(HTML_RES, -1); + String html; + if (htmlRes != -1) { + InputStream res = getResources().openRawResource(htmlRes); + html = StringUtil.readToString(res); + try { + res.close(); + } catch (IOException ignored) { + } + } else { + html = getIntent().getStringExtra(HTML); + } + final MyWebView webView = (MyWebView) findViewById(R.id.webView); + final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); + final String fontSize = prefs.getString(getString(R.string.fontSizeKey), "14"); + int fontSizeSp; + try { + fontSizeSp = Integer.parseInt(fontSize.trim()); + } catch (NumberFormatException e) { + fontSizeSp = 14; + } + webView.getSettings().setDefaultFontSize(fontSizeSp); + try { + // No way to get pure UTF-8 data into WebView + // Cannot use StandardCharsets due to older Android. + html = Base64.encodeToString(html.getBytes("UTF-8"), Base64.DEFAULT); + } catch (UnsupportedEncodingException e) { + throw new RuntimeException("Missing UTF-8 support?!", e); + } + // Use loadURL to allow specifying a charset + webView.loadUrl("data:text/html;charset=utf-8;base64," + html); + webView.activity = this; + + final String textToHighlight = getIntent().getStringExtra(TEXT_TO_HIGHLIGHT); + if (textToHighlight != null && !"".equals(textToHighlight)) { + Log.d(LOG, "NOT Highlighting text: " + textToHighlight); + // This isn't working: + // webView.findAll(textToHighlight); + // webView.showFindDialog(textToHighlight, false); + } + + final Button okButton = (Button) findViewById(R.id.okButton); + if (!getIntent().getBooleanExtra(SHOW_OK_BUTTON, true)) { + okButton.setVisibility(Button.GONE); + } + } + + @Override + public void onBackPressed() { + final MyWebView webView = (MyWebView)findViewById(R.id.webView); + if (webView.canGoBack()) webView.goBack(); + else super.onBackPressed(); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + // Explicitly handle the up button press so + // we return to the dictionary. + if (item.getItemId() == android.R.id.home) { + finish(); + return true; + } + return super.onOptionsItemSelected(item); + } +}