Fixed bug in Advanced Search reported by Geoff Sams
authorkenstir <kenstir@gmail.com>
Fri, 4 Dec 2015 23:08:52 +0000 (18:08 -0500)
committerkenstir <kenstir@gmail.com>
Fri, 4 Dec 2015 23:08:52 +0000 (18:08 -0500)
* query string returned was missing space separator
* code was unnecessarily verbose
* names of variables and views were strange

Open-ILS/src/Android/core/res/layout-land/search_result_list.xml
Open-ILS/src/Android/core/res/layout/advanced_search.xml
Open-ILS/src/Android/core/res/layout/search_result_list.xml
Open-ILS/src/Android/core/res/values/resources.xml
Open-ILS/src/Android/core/src/org/evergreen_ils/searchCatalog/AdvancedSearchActivity.java
Open-ILS/src/Android/core/src/org/evergreen_ils/searchCatalog/CopyInformation.java
Open-ILS/src/Android/core/src/org/evergreen_ils/searchCatalog/SearchCatalog.java
Open-ILS/src/Android/core/src/org/evergreen_ils/searchCatalog/SearchCatalogListView.java

index 777b528..a65add4 100644 (file)
                 android:layout_weight="1"/>
 
         <Spinner
-                android:id="@+id/search_class_spinner"
+                android:id="@+id/search_qtype_spinner"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:layout_gravity="right"
-                android:entries="@array/advanced_search_index"/>
+                android:entries="@array/search_qtype"/>
         <Spinner
                 android:id="@+id/search_format_spinner"
                 android:layout_width="120dp"
                 android:layout_height="wrap_content"
                 android:layout_gravity="right"/>
         <Spinner
-                android:id="@+id/chose_organisation"
+                android:id="@+id/search_org_spinner"
                 android:layout_width="fill_parent"
                 android:layout_height="wrap_content"
                 android:layout_gravity="center_horizontal"
@@ -42,7 +42,7 @@
                 android:spinnerMode="dialog"/>
 
         <ImageButton
-                android:id="@+id/searchButton"
+                android:id="@+id/search_button"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:src="@drawable/abc_ic_search"
index e526618..962c151 100644 (file)
         android:padding="5dip" >
 
         <Spinner
-            android:id="@+id/advanced_spinner_index"
+            android:id="@+id/advanced_search_qtype_spinner"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:entries="@array/advanced_search_index" />
+            android:entries="@array/search_qtype" />
 
         <Spinner
-            android:id="@+id/advanced_spinner_option"
+            android:id="@+id/advanced_search_contains_spinner"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:entries="@array/advanced_search_options"/>
+            android:entries="@array/advanced_search_contains"/>
     </LinearLayout>
 
     <LinearLayout
@@ -75,9 +75,6 @@
         android:gravity="center_horizontal"
         android:orientation="horizontal"
         android:padding="5dip" >
-        <!--
-                android:background="@drawable/bottom_rounded_menu_background"
-        -->
 
         <Button
             android:id="@+id/advanced_search_cancel"
index a4ad387..6135348 100644 (file)
                     android:hint="@string/search_hint"
                     android:singleLine="true"/>
             <Spinner
-                    android:id="@+id/search_class_spinner"
+                    android:id="@+id/search_qtype_spinner"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
                     android:layout_gravity="right"
-                    android:entries="@array/advanced_search_index"/>
+                    android:entries="@array/search_qtype"/>
             <Spinner
                     android:id="@+id/search_format_spinner"
                     android:layout_width="120dp"
@@ -47,7 +47,7 @@
                 >
 
             <Spinner
-                    android:id="@+id/chose_organisation"
+                    android:id="@+id/search_org_spinner"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
                     android:layout_gravity="left"
@@ -56,7 +56,7 @@
                     android:spinnerMode="dialog"/>
 
             <ImageButton
-                    android:id="@+id/searchButton"
+                    android:id="@+id/search_button"
                     android:layout_width="120dp"
                     android:layout_height="wrap_content"
                     android:layout_margin="0dp"
index 3abbe9d..ffa289f 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
-    <string-array name="advanced_search_index">
+    <string-array name="search_qtype">
                <item>Keyword</item>
                <item>Title</item>
                <item>Author</item>
@@ -8,7 +8,7 @@
                <item>Series</item>
     </string-array>
     
-    <string-array name="advanced_search_options">
+    <string-array name="advanced_search_contains">
                <item>Contains</item>
                <item>Does not contain</item>
                <item>Matches exactly</item>
index 3d0f5e4..513aa63 100644 (file)
  */
 package org.evergreen_ils.searchCatalog;
 
+import java.util.ArrayList;
 import java.util.StringTokenizer;
 
-import android.support.v7.app.ActionBar;
 import android.support.v7.app.ActionBarActivity;
+import android.text.TextUtils;
 import android.view.MenuItem;
 import org.evergreen_ils.R;
-import org.evergreen_ils.accountAccess.AccountAccess;
 import org.evergreen_ils.utils.ui.ActionBarUtils;
 import org.evergreen_ils.views.splashscreen.SplashActivity;
 
-import android.app.Activity;
-import android.content.Context;
 import android.content.Intent;
 import android.os.Bundle;
 import android.view.View;
@@ -46,9 +44,8 @@ public class AdvancedSearchActivity extends ActionBarActivity {
 
     private final String TAG = AdvancedSearchActivity.class.getName();
 
-    private Context context;
-
-    private StringBuilder advancedSearchFormattedText;
+    private ArrayList<String> searchTerms;
+    private String advancedSearchFormattedText;
 
     public static final int RESULT_ADVANCED_SEARCH = 10;
 
@@ -63,76 +60,52 @@ public class AdvancedSearchActivity extends ActionBarActivity {
         setContentView(R.layout.advanced_search);
         ActionBarUtils.initActionBarForActivity(this);
 
-        advancedSearchFormattedText = new StringBuilder();
-
-        context = this;
+        searchTerms = new ArrayList<String>();
+        advancedSearchFormattedText = new String();
 
         final LinearLayout layout = (LinearLayout) findViewById(R.id.advanced_search_filters);
-
         Button addFilter = (Button) findViewById(R.id.advanced_search_add_filter_button);
-
-        final Spinner search_index = (Spinner) findViewById(R.id.advanced_spinner_index);
-        final Spinner search_option = (Spinner) findViewById(R.id.advanced_spinner_option);
+        final Spinner search_qtype_spinner = (Spinner) findViewById(R.id.advanced_search_qtype_spinner);
+        final Spinner search_contains_spinner = (Spinner) findViewById(R.id.advanced_search_contains_spinner);
         final EditText search_filter_text = (EditText) findViewById(R.id.advanced_search_text);
 
         addFilter.setOnClickListener(new OnClickListener() {
             @Override
             public void onClick(View v) {
 
-                int searchOptionVal = search_option.getSelectedItemPosition();
-
-                String searchText = search_index.getSelectedItem().toString()
-                        .toLowerCase()
-                        + ": ";
+                int contains_pos = search_contains_spinner.getSelectedItemPosition();
+                String query = "";
+                String qtype = search_qtype_spinner.getSelectedItem().toString().toLowerCase();
+                String filter = search_filter_text.getText().toString();
 
-                advancedSearchFormattedText.append(search_index
-                        .getSelectedItem().toString().toLowerCase()
-                        + ": ");
-
-                switch (searchOptionVal) {
-
-                case 0: {
+                switch (contains_pos) {
+                case 0:
                     // contains
-                    advancedSearchFormattedText.append(search_filter_text
-                            .getText().toString());
-                    searchText = searchText
-                            + search_filter_text.getText().toString();
-                }
+                    query = qtype + ": " + filter;
                     break;
-                case 1: {
+                case 1:
                     // excludes
-                    StringTokenizer str = new StringTokenizer(
-                            search_filter_text.getText().toString());
+                    query = qtype + ":";
+                    StringTokenizer str = new StringTokenizer(filter);
                     while (str.hasMoreTokens()) {
                         String token = str.nextToken(" ");
-                        advancedSearchFormattedText.append(" -" + token);
-                        searchText = searchText + " -" + token;
+                        query = query + " -" + token;
                     }
-
-                }
                     break;
-                case 2: {
+                case 2:
                     // matches exactly
-                    advancedSearchFormattedText.append(" \""
-                            + search_filter_text.getText().toString() + "\"");
-                    searchText = searchText + " \""
-                            + search_filter_text.getText().toString() + "\"";
-                }
+                    query = qtype + " \"" + filter + "\"";
                     break;
-
                 }
-
-                TextView text = new TextView(context);
-                text.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,
-                        LayoutParams.WRAP_CONTENT));
-                text.setText(searchText);
+                searchTerms.add(query);
+                TextView text = new TextView(AdvancedSearchActivity.this);
+                text.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
+                text.setText(query);
                 layout.addView(text);
-
             }
         });
 
         Button cancel = (Button) findViewById(R.id.advanced_search_cancel);
-
         cancel.setOnClickListener(new OnClickListener() {
             @Override
             public void onClick(View v) {
@@ -141,14 +114,11 @@ public class AdvancedSearchActivity extends ActionBarActivity {
         });
 
         Button search = (Button) findViewById(R.id.advanced_search_button);
-
         search.setOnClickListener(new OnClickListener() {
-
             @Override
             public void onClick(View v) {
                 Intent returnIntent = new Intent();
-                returnIntent.putExtra("advancedSearchText",
-                        advancedSearchFormattedText.toString());
+                returnIntent.putExtra("advancedSearchText", TextUtils.join(" ", searchTerms));
                 setResult(RESULT_ADVANCED_SEARCH, returnIntent);
                 finish();
             }
index 323832a..9b7ad3a 100644 (file)
@@ -48,9 +48,9 @@ public class CopyInformation implements Serializable {
 
     // global, it is initialized when orgTree and fm_ild is downloaded
 
-    public static LinkedHashMap<String, String> availableOrgStatuses;
+    public static LinkedHashMap<String, String> availableOrgStatuses = new LinkedHashMap<String, String>();
 
-    public LinkedHashMap<String, String> statusInformation = null;
+    public LinkedHashMap<String, String> statusInformation = new LinkedHashMap<String, String>();
 
     public CopyInformation(List<Object> list) {
 
index ef39423..a05296f 100644 (file)
@@ -232,6 +232,7 @@ public class SearchCatalog {
         List<OSRFObject> ccs_list = (List<OSRFObject>) Utils.doRequestSimple(conn(), SERVICE,
                 METHOD_COPY_STATUS_ALL, new Object[] {});
 
+        // todo wtf, why is SearchCatalog loading up a member var of CopyInformation???
         CopyInformation.availableOrgStatuses = new LinkedHashMap<String, String>();
 
         if (ccs_list != null) {
index 06c2ded..00ee692 100644 (file)
@@ -56,7 +56,6 @@ import android.widget.ArrayAdapter;
 import android.widget.Button;
 import android.widget.EditText;
 import android.widget.ImageButton;
-import android.widget.ImageView;
 import android.widget.ListView;
 import android.widget.Spinner;
 import android.widget.TextView;
@@ -151,7 +150,7 @@ public class SearchCatalogListView extends ActionBarActivity {
                 R.layout.search_result_item, recordList);
 
         //searchOptionsMenu = findViewById(R.id.search_preference_options);
-        searchClassSpinner = (Spinner) findViewById(R.id.search_class_spinner);
+        searchClassSpinner = (Spinner) findViewById(R.id.search_qtype_spinner);
         searchFormatSpinner = (Spinner) findViewById(R.id.search_format_spinner);
         searchResultsNumber = (TextView) findViewById(R.id.search_result_number);
         initSearchFormatSpinner();
@@ -412,7 +411,7 @@ public class SearchCatalogListView extends ActionBarActivity {
         });
 
 
-        searchButton = (ImageButton) findViewById(R.id.searchButton);
+        searchButton = (ImageButton) findViewById(R.id.search_button);
         searchButton.setOnClickListener(new OnClickListener() {
 
             @Override
@@ -438,7 +437,7 @@ public class SearchCatalogListView extends ActionBarActivity {
         }
         //ArrayAdapter<String> adapter = CompatSpinnerAdapter.CreateCompatSpinnerAdapter(this, list);
         ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.org_item_layout, list);
-        choseOrganisation = (Spinner) findViewById(R.id.chose_organisation);
+        choseOrganisation = (Spinner) findViewById(R.id.search_org_spinner);
         choseOrganisation.setAdapter(adapter);
         choseOrganisation.setSelection(selectedOrgPos);
         choseOrganisation.setOnItemSelectedListener(new OnItemSelectedListener() {