private static final String TAG = HelpActivity.class.getSimpleName();
- private static final String[] BUGGY_MODEL_SUBSTRINGS = {"Behold II", "Pulse", "Geeksphone"};
+ // Actually guessing at the Desire's MODEL for now:
+ private static final String[] BUGGY_MODEL_SUBSTRINGS = {
+ "Desire",
+ "Pulse", // Camera doesn't come on
+ "Geeksphone", // Doesn't support YUV?
+ "supersonic", // aka Evo
+ };
private static final Uri BUGGY_URI =
Uri.parse("http://code.google.com/p/zxing/wiki/FrequentlyAskedQuestions");
public static final String REQUESTED_PAGE_KEY = "requested_page_key";
public static final String DEFAULT_PAGE = "index.html";
public static final String WHATS_NEW_PAGE = "whatsnew.html";
+
private static final String BASE_URL = "file:///android_asset/html/";
+ private static final String WEBVIEW_STATE_PRESENT = "webview_state_present";
+ private static boolean initialized = false;
private WebView webView;
private Button backButton;
webView = (WebView)findViewById(R.id.help_contents);
webView.setWebViewClient(new HelpClient());
+ // Froyo has a bug with calling onCreate() twice in a row, which causes the What's New page
+ // that's auto-loaded on first run to appear blank. As a workaround we only call restoreState()
+ // if a valid URL was loaded at the time the previous activity was torn down.
Intent intent = getIntent();
- if (icicle != null) {
+ if (icicle != null && icicle.getBoolean(WEBVIEW_STATE_PRESENT, false)) {
webView.restoreState(icicle);
} else if (intent != null) {
String page = intent.getStringExtra(REQUESTED_PAGE_KEY);
webView.loadUrl(BASE_URL + DEFAULT_PAGE);
}
- backButton = (Button)findViewById(R.id.back_button);
+ backButton = (Button) findViewById(R.id.back_button);
backButton.setOnClickListener(backListener);
- Button doneButton = (Button)findViewById(R.id.done_button);
+ View doneButton = findViewById(R.id.done_button);
doneButton.setOnClickListener(doneListener);
- }
- @Override
- public void onResume() {
- super.onResume();
- checkBuggyDevice();
+ if (!initialized) {
+ initialized = true;
+ checkBuggyDevice();
+ }
}
private void checkBuggyDevice() {
builder.setMessage(R.string.msg_buggy);
builder.setPositiveButton(R.string.button_ok, groupsListener);
builder.setNegativeButton(R.string.button_cancel, null);
- builder.create().show();
+ builder.show();
break;
}
}
@Override
protected void onSaveInstanceState(Bundle state) {
- webView.saveState(state);
+ String url = webView.getUrl();
+ if (url != null && url.length() > 0) {
+ webView.saveState(state);
+ state.putBoolean(WEBVIEW_STATE_PRESENT, true);
+ }
}
@Override
setTitle(view.getTitle());
backButton.setEnabled(view.canGoBack());
}
- }
+ @Override
+ public boolean shouldOverrideUrlLoading(WebView view, String url) {
+ if (url.startsWith("file")) {
+ // Keep local assets in this WebView.
+ return false;
+ } else {
+ // Open external URLs in Browser.
+ startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
+ return true;
+ }
+ }
+ }
}