package com.nolanlawson.apptracker; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.os.Handler; import android.view.View; import android.view.View.OnClickListener; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.Button; import android.widget.ImageView; import android.widget.ProgressBar; import com.nolanlawson.apptracker.helper.FreemiumHelper; import com.nolanlawson.apptracker.util.UtilLogger; public class HtmlFileActivity extends Activity implements OnClickListener { public static final String ACTION_ABOUT = "com.nolanlawson.apptracker.action.ABOUT"; public static final String ACTION_USER_GUIDE = "com.nolanlawson.apptracker.action.USER_GUIDE"; private static UtilLogger log = new UtilLogger(HtmlFileActivity.class); private Button okButton; private WebView aboutWebView; private ProgressBar progressBar; private ImageView iconImageView; private Handler handler = new Handler(); private boolean aboutActivity = false; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Intent intent = getIntent(); if (ACTION_ABOUT.equals(intent.getAction())) { aboutActivity = true; setTitle(R.string.about_app_tracker); } else { setTitle(R.string.user_guide); } setContentView(R.layout.html_file_view); iconImageView = (ImageView) findViewById(R.id.holmes_icon_image); okButton = (Button) findViewById(R.id.okButton); okButton.setOnClickListener(this); aboutWebView = (WebView) findViewById(R.id.aboutTextWebView); aboutWebView.setVisibility(View.GONE); iconImageView.setVisibility(View.GONE); progressBar = (ProgressBar) findViewById(R.id.aboutProgressBar); aboutWebView.setBackgroundColor(0); aboutWebView.setWebViewClient(new AboutWebClient()); initializeWebView(); } public void initializeWebView() { StringBuilder htmlData = new StringBuilder(); if (aboutActivity) { if (FreemiumHelper.isAppTrackerPremiumInstalled(getApplicationContext())) { htmlData.append(loadTextFile(R.raw.about_body_1_premium)); } else { htmlData.append(loadTextFile(R.raw.about_body_1_free)); } htmlData.append(loadTextFile(R.raw.about_body_2)); } else { // user guide htmlData = new StringBuilder(loadTextFile(R.raw.user_guide)); } aboutWebView.loadData(htmlData.toString(), "text/html", "utf-8"); } private String loadTextFile(int resourceId) { InputStream is = getResources().openRawResource(resourceId); BufferedReader buff = new BufferedReader(new InputStreamReader(is)); StringBuilder sb = new StringBuilder(); try { while (buff.ready()) { sb.append(buff.readLine()).append("\n"); } } catch (IOException e) { log.e(e, "This error should not happen"); } return sb.toString(); } private void loadExternalUrl(String url) { Intent intent = new Intent(); intent.setAction("android.intent.action.VIEW"); intent.setData(Uri.parse(url)); startActivity(intent); } @Override public void onClick(View v) { finish(); } private class AboutWebClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, final String url) { // XXX hack to make the webview go to an external url if the hyperlink is // in my own HTML file - otherwise it says "Page not available" because I'm not calling // loadDataWithBaseURL. But if I call loadDataWithBaseUrl using a fake URL, then // the links within the page itself don't work!! Arggggh!!! if (url.startsWith("http") || url.startsWith("mailto") || url.startsWith("market")) { handler.post(new Runnable() { @Override public void run() { loadExternalUrl(url); } }); return true; } return false; } @Override public void onPageFinished(WebView view, String url) { // dismiss the loading bar when the page has finished loading handler.post(new Runnable(){ @Override public void run() { progressBar.setVisibility(View.GONE); aboutWebView.setVisibility(View.VISIBLE); iconImageView.setVisibility(aboutActivity ? View.VISIBLE : View.GONE); }}); super.onPageFinished(view, url); } } }