More reckless refactoring and code style tweaks -- mostly adding braces around condit...
[zxing.git] / android / src / com / google / zxing / client / android / SearchBookContentsActivity.java
index f676878..1da0c1d 100644 (file)
@@ -37,6 +37,7 @@ import org.apache.http.HttpEntity;
 import org.apache.http.HttpResponse;
 import org.apache.http.client.methods.HttpGet;
 import org.apache.http.client.methods.HttpHead;
+import org.apache.http.client.methods.HttpUriRequest;
 import org.json.JSONArray;
 import org.json.JSONException;
 import org.json.JSONObject;
@@ -47,15 +48,10 @@ import java.net.URI;
 import java.util.ArrayList;
 import java.util.List;
 
-public class SearchBookContentsActivity extends Activity {
+public final class SearchBookContentsActivity extends Activity {
 
   private static final String TAG = "SearchBookContents";
 
-  // These return a JSON result which describes if and where the query was found. This API may
-  // break or disappear at any time in the future.
-  private static final String BOOK_SEARCH_URL = "//www.google.com/books?vid=isbn";
-  private static final String BOOK_SEARCH_COMMAND = "&jscmd=SearchWithinVolume2&q=";
-
   private NetworkThread mNetworkThread;
   private String mISBN;
   private EditText mQueryTextView;
@@ -116,7 +112,8 @@ public class SearchBookContentsActivity extends Activity {
     super.onConfigurationChanged(config);
   }
 
-  public Handler mHandler = new Handler() {
+  public final Handler mHandler = new Handler() {
+    @Override
     public void handleMessage(Message message) {
       switch (message.what) {
         case R.id.search_book_contents_succeeded:
@@ -138,13 +135,13 @@ public class SearchBookContentsActivity extends Activity {
     mQueryButton.setEnabled(true);
   }
 
-  private Button.OnClickListener mButtonListener = new Button.OnClickListener() {
+  private final Button.OnClickListener mButtonListener = new Button.OnClickListener() {
     public void onClick(View view) {
       launchSearch();
     }
   };
 
-  private View.OnKeyListener mKeyListener = new View.OnKeyListener() {
+  private final View.OnKeyListener mKeyListener = new View.OnKeyListener() {
     public boolean onKey(View view, int keyCode, KeyEvent event) {
       if (keyCode == KeyEvent.KEYCODE_ENTER) {
         launchSearch();
@@ -158,9 +155,9 @@ public class SearchBookContentsActivity extends Activity {
     if (mNetworkThread == null) {
       String query = mQueryTextView.getText().toString();
       if (query != null && query.length() > 0) {
-        mNetworkThread = new NetworkThread(mISBN, query, mHandler);
+        mNetworkThread = new NetworkThread(mISBN, query, mHandler, mUserAgent);
         mNetworkThread.start();
-        mHeaderView.setText(R.string.msg_searching_book);
+        mHeaderView.setText(R.string.msg_sbc_searching_book);
         mResultListView.setAdapter(null);
         mQueryTextView.setEnabled(false);
         mQueryButton.setEnabled(false);
@@ -183,6 +180,10 @@ public class SearchBookContentsActivity extends Activity {
         }
         mResultListView.setAdapter(new SearchBookContentsAdapter(this, items));
       } else {
+        String searchable = json.optString("searchable");
+        if (searchable != null && searchable.equals("false")) {
+          mHeaderView.setText(R.string.msg_sbc_book_not_searchable);
+        }
         mResultListView.setAdapter(null);
       }
     } catch (JSONException e) {
@@ -223,25 +224,31 @@ public class SearchBookContentsActivity extends Activity {
     }
   }
 
-  private class NetworkThread extends Thread {
+  private static final class NetworkThread extends Thread {
 
-    private String mISBN;
-    private String mQuery;
-    private Handler mHandler;
+    private final String mISBN;
+    private final String mQuery;
+    private final Handler mHandler;
+    private final String mUserAgent;
 
-    public NetworkThread(String isbn, String query, Handler handler) {
+    public NetworkThread(String isbn, String query, Handler handler, String userAgent) {
       mISBN = isbn;
       mQuery = query;
       mHandler = handler;
+      mUserAgent = userAgent;
     }
 
+    @Override
     public void run() {
-      String url = BOOK_SEARCH_URL + mISBN + BOOK_SEARCH_COMMAND + mQuery;
       AndroidHttpClient client = null;
       try {
-        URI uri = new URI("http", url, null);
-        HttpGet get = new HttpGet(uri);
-        get.setHeader("cookie", getCookie("http:" + url));
+        // These return a JSON result which describes if and where the query was found. This API may
+        // break or disappear at any time in the future. Since this is an API call rather than a
+        // website, we don't use LocaleManager to change the TLD.
+        URI uri = new URI("http", null, "www.google.com", -1, "/books", "vid=isbn" + mISBN +
+            "&jscmd=SearchWithinVolume2&q=" + mQuery, null);
+        HttpUriRequest get = new HttpGet(uri);
+        get.setHeader("cookie", getCookie(uri.toString()));
         client = AndroidHttpClient.newInstance(mUserAgent);
         HttpResponse response = client.execute(get);
         if (response.getStatusLine().getStatusCode() == 200) {
@@ -256,8 +263,7 @@ public class SearchBookContentsActivity extends Activity {
           message.obj = json;
           message.sendToTarget();
         } else {
-          Log.e(TAG, "HTTP returned " + response.getStatusLine().getStatusCode() +
-              " for http:" + url);
+          Log.e(TAG, "HTTP returned " + response.getStatusLine().getStatusCode() + " for " + uri);
           Message message = Message.obtain(mHandler, R.id.search_book_contents_failed);
           message.sendToTarget();
         }
@@ -279,7 +285,7 @@ public class SearchBookContentsActivity extends Activity {
       String cookie = CookieManager.getInstance().getCookie(url);
       if (cookie == null || cookie.length() == 0) {
         Log.v(TAG, "Book Search cookie was missing or expired");
-        HttpHead head = new HttpHead(url);
+        HttpUriRequest head = new HttpHead(url);
         AndroidHttpClient client = AndroidHttpClient.newInstance(mUserAgent);
         try {
           HttpResponse response = client.execute(head);