- Added the version number to the about box in a robust way which will not get stale.
authordswitkin <dswitkin@59b500cc-1b3d-0410-9834-0bbf25fbcc57>
Fri, 6 Mar 2009 18:31:45 +0000 (18:31 +0000)
committerdswitkin <dswitkin@59b500cc-1b3d-0410-9834-0bbf25fbcc57>
Fri, 6 Mar 2009 18:31:45 +0000 (18:31 +0000)
- Moved the Book Search user agent into that class, which will continue to get stale, but never belonged in the XML, as it does not need translation.
- Added a try/catch block around firing off intents, and an error dialog, so that we don't crash on bad  intents like TEL: in the future (even though that particular one was fixed in core).

git-svn-id: http://zxing.googlecode.com/svn/trunk@875 59b500cc-1b3d-0410-9834-0bbf25fbcc57

android/res/values/strings.xml
android/src/com/google/zxing/client/android/CaptureActivity.java
android/src/com/google/zxing/client/android/SearchBookContentsActivity.java
android/src/com/google/zxing/client/android/result/ResultHandler.java

index 25b2f9e..ac193b5 100755 (executable)
@@ -65,6 +65,8 @@
   <string name="msg_encode_contents_failed">Could not encode a barcode from the data provided.
   </string>
   <string name="msg_encode_in_progress">Generating a barcode\u2026</string>
+  <string name="msg_intent_failed">Sorry, the requested application could not be launched.
+    The barcode contents may be invalid.</string>
   <string name="msg_sbc_book_not_searchable">Sorry, this book is not searchable.</string>
   <string name="msg_sbc_failed">Sorry, the search encountered a problem.</string>
   <string name="msg_sbc_no_page_returned">No page returned</string>
   <string name="sbc_name">Google Book Search</string>
   <string name="share_name">Share via barcode</string>
 
-  <string name="title_about">About Barcode Scanner</string>
+  <string name="title_about">Barcode Scanner v</string>
 
   <string name="zxing_url">http://code.google.com/p/zxing</string>
-  <string name="zxing_user_agent">ZXing-Android/1.1</string>
 </resources>
index d966644..34d8d2d 100755 (executable)
@@ -95,6 +95,7 @@ public final class CaptureActivity extends Activity implements SurfaceHolder.Cal
   private boolean mCopyToClipboard;
   private boolean mScanIntent;
   private String mDecodeMode;
+  private String versionName;
 
   private final OnCompletionListener mBeepListener = new BeepListener();
 
@@ -229,7 +230,7 @@ public final class CaptureActivity extends Activity implements SurfaceHolder.Cal
       }
       case ABOUT_ID:
         AlertDialog.Builder builder = new AlertDialog.Builder(this);
-        builder.setTitle(R.string.title_about);
+        builder.setTitle(getString(R.string.title_about) + versionName);
         builder.setMessage(getString(R.string.msg_about) + "\n\n" + getString(R.string.zxing_url));
         builder.setIcon(R.drawable.zxing_icon);
         builder.setPositiveButton(R.string.button_open_browser, mAboutListener);
@@ -399,6 +400,9 @@ public final class CaptureActivity extends Activity implements SurfaceHolder.Cal
     try {
       PackageInfo info = getPackageManager().getPackageInfo(PACKAGE_NAME, 0);
       int currentVersion = info.versionCode;
+      // Since we're paying to talk to the PackageManager anyway, it makes sense to cache the app
+      // version name here for display in the about box later.
+      this.versionName = info.versionName;
       SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
       int lastVersion = prefs.getInt(PreferencesActivity.KEY_HELP_VERSION_SHOWN, 0);
       if (currentVersion > lastVersion) {
index 8d68910..c42205a 100644 (file)
@@ -51,6 +51,7 @@ import java.util.List;
 public final class SearchBookContentsActivity extends Activity {
 
   private static final String TAG = "SearchBookContents";
+  private static final String USER_AGENT = "ZXing/1.2 (Android)";
 
   private NetworkThread mNetworkThread;
   private String mISBN;
@@ -58,7 +59,6 @@ public final class SearchBookContentsActivity extends Activity {
   private Button mQueryButton;
   private ListView mResultListView;
   private TextView mHeaderView;
-  private String mUserAgent;
 
   @Override
   public void onCreate(Bundle icicle) {
@@ -96,8 +96,6 @@ public final class SearchBookContentsActivity extends Activity {
     mHeaderView = (TextView) factory.inflate(R.layout.search_book_contents_header,
         mResultListView, false);
     mResultListView.addHeaderView(mHeaderView);
-
-    mUserAgent = getString(R.string.zxing_user_agent);
   }
 
   @Override
@@ -155,7 +153,7 @@ public final class SearchBookContentsActivity extends Activity {
     if (mNetworkThread == null) {
       String query = mQueryTextView.getText().toString();
       if (query != null && query.length() > 0) {
-        mNetworkThread = new NetworkThread(mISBN, query, mHandler, mUserAgent);
+        mNetworkThread = new NetworkThread(mISBN, query, mHandler);
         mNetworkThread.start();
         mHeaderView.setText(R.string.msg_sbc_searching_book);
         mResultListView.setAdapter(null);
@@ -229,13 +227,11 @@ public final class SearchBookContentsActivity extends Activity {
     private final String mISBN;
     private final String mQuery;
     private final Handler mHandler;
-    private final String mUserAgent;
 
-    NetworkThread(String isbn, String query, Handler handler, String userAgent) {
+    NetworkThread(String isbn, String query, Handler handler) {
       mISBN = isbn;
       mQuery = query;
       mHandler = handler;
-      mUserAgent = userAgent;
     }
 
     @Override
@@ -249,7 +245,7 @@ public final class SearchBookContentsActivity extends Activity {
             "&jscmd=SearchWithinVolume2&q=" + mQuery, null);
         HttpUriRequest get = new HttpGet(uri);
         get.setHeader("cookie", getCookie(uri.toString()));
-        client = AndroidHttpClient.newInstance(mUserAgent);
+        client = AndroidHttpClient.newInstance(USER_AGENT);
         HttpResponse response = client.execute(get);
         if (response.getStatusLine().getStatusCode() == 200) {
           HttpEntity entity = response.getEntity();
@@ -286,7 +282,7 @@ public final class SearchBookContentsActivity extends Activity {
       if (cookie == null || cookie.length() == 0) {
         Log.v(TAG, "Book Search cookie was missing or expired");
         HttpUriRequest head = new HttpHead(url);
-        AndroidHttpClient client = AndroidHttpClient.newInstance(mUserAgent);
+        AndroidHttpClient client = AndroidHttpClient.newInstance(USER_AGENT);
         try {
           HttpResponse response = client.execute(head);
           if (response.getStatusLine().getStatusCode() == 200) {
index e702839..0e2c8db 100644 (file)
@@ -17,6 +17,8 @@
 package com.google.zxing.client.android.result;
 
 import android.app.Activity;
+import android.app.AlertDialog;
+import android.content.ActivityNotFoundException;
 import android.content.Intent;
 import android.net.Uri;
 import android.provider.Contacts;
@@ -279,7 +281,15 @@ public abstract class ResultHandler {
 
   private void launchIntent(Intent intent) {
     if (intent != null) {
-      mActivity.startActivity(intent);
+      try {
+        mActivity.startActivity(intent);
+      } catch (ActivityNotFoundException e) {
+        AlertDialog.Builder builder = new AlertDialog.Builder(mActivity);
+        builder.setTitle(mActivity.getString(R.string.app_name));
+        builder.setMessage(mActivity.getString(R.string.msg_intent_failed));
+        builder.setPositiveButton(R.string.button_ok, null);
+        builder.show();
+      }
     }
   }