public static final int background2=0x7f050006;
public static final int background3=0x7f050007;
public static final int bg_gray=0x7f05000b;
+ public static final int blue=0x7f05000d;
public static final int emphasis=0x7f05000a;
public static final int foreground1=0x7f050003;
public static final int foreground2=0x7f050004;
public static final int address_book=0x7f020002;
public static final int book_bag=0x7f020003;
public static final int check_out=0x7f020004;
- public static final int find_96=0x7f020005;
- public static final int fines=0x7f020006;
- public static final int holds=0x7f020007;
- public static final int ic_launcher=0x7f020008;
- public static final int settings=0x7f020009;
+ public static final int expander_ic_maximized=0x7f020005;
+ public static final int find_96=0x7f020006;
+ public static final int fines=0x7f020007;
+ public static final int holds=0x7f020008;
+ public static final int ic_launcher=0x7f020009;
+ public static final int settings=0x7f02000a;
}
public static final class id {
public static final int account_btn_book_bags=0x7f090003;
public static final int account_btn_check_out=0x7f090000;
public static final int account_btn_fines=0x7f090002;
public static final int account_btn_holds=0x7f090001;
- public static final int chose_organisation=0x7f090018;
+ public static final int chose_organisation=0x7f09001a;
public static final int main_btn_account=0x7f090005;
public static final int main_btn_app_settings=0x7f090006;
public static final int main_btn_search=0x7f090004;
public static final int record_details_simple_subject=0x7f09000d;
public static final int record_details_simple_synopsis=0x7f09000f;
public static final int record_details_simple_title=0x7f09000a;
- public static final int searchButton=0x7f090016;
- public static final int searchText=0x7f090015;
- public static final int search_record_author=0x7f090013;
- public static final int search_record_img=0x7f090011;
- public static final int search_record_publishing=0x7f090014;
- public static final int search_record_title=0x7f090012;
- public static final int search_results_list=0x7f090017;
+ public static final int searchButton=0x7f090017;
+ public static final int searchText=0x7f090016;
+ public static final int search_more_items_button=0x7f090011;
+ public static final int search_record_author=0x7f090014;
+ public static final int search_record_img=0x7f090012;
+ public static final int search_record_publishing=0x7f090015;
+ public static final int search_record_title=0x7f090013;
+ public static final int search_result_number=0x7f090018;
+ public static final int search_results_list=0x7f090019;
}
public static final class layout {
public static final int dashbord_account=0x7f030000;
public static final int main=0x7f030002;
public static final int record_details_info=0x7f030003;
public static final int record_details_simple=0x7f030004;
- public static final int search_result_item=0x7f030005;
- public static final int search_result_list=0x7f030006;
+ public static final int search_result_footer_view=0x7f030005;
+ public static final int search_result_item=0x7f030006;
+ public static final int search_result_list=0x7f030007;
}
public static final class string {
public static final int app_name=0x7f070001;
public static final int hello=0x7f070000;
+ public static final int search_result_text=0x7f070009;
public static final int title_application_settings=0x7f070004;
public static final int title_book_bags=0x7f070008;
public static final int title_check_out=0x7f070005;
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:gravity="center"
+ android:background="@color/blue"
+ >
+
+ <ImageView
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:padding="20dip"
+ android:gravity="center"
+ android:src="@drawable/expander_ic_maximized"
+ android:id="@+id/search_more_items_button"
+ />
+
+</LinearLayout>
\ No newline at end of file
</LinearLayout>
+ <LinearLayout android:layout_width="fill_parent"
+ android:layout_height="wrap_content">
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/search_result_text"
+ />
+
+ <TextView
+ android:id="@+id/search_result_number"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textStyle="bold"
+ />
+
+ </LinearLayout>
<ListView
android:id="@+id/search_results_list"
android:layout_width="fill_parent"
<Spinner
android:id="@+id/chose_organisation"
- android:layout_width="wrap_content"
+ android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
/>
<color name="bg_gray">#cecbce</color>
<color name="white">#ffffff</color>
+ <color name="blue">#1e90ff</color>
</resources>
<string name="title_holds">Holds</string>
<string name="title_fines">Fines</string>
<string name="title_book_bags">Book bags</string>
-
+ <string name="search_result_text"> Search result :</string>
</resources>
\ No newline at end of file
public enum Mode { NO_ASYNC_TASK, NO_DOWNLOADED_DRAWABLE, CORRECT }
private Mode mode = Mode.CORRECT;
- private int MIN_IMG_HEIGHT = 100;
+ private int MIN_IMG_HEIGHT = 75;
/**
* Download the specified image from the Internet and binds it to the provided ImageView. The
// AndroidHttpClient is not allowed to be used from the main thread
final HttpClient client = (mode == Mode.NO_ASYNC_TASK) ? new DefaultHttpClient() :
AndroidHttpClient.newInstance("Android");
- final HttpGet getRequest = new HttpGet(url);
-
+
+ HttpGet getRequest = null;
+ try{
+ getRequest = new HttpGet(url);
+ }catch(Exception e){
+ if ((client instanceof AndroidHttpClient)) {
+ ((AndroidHttpClient) client).close();
+ }
+ return null;
+ }
+
try {
HttpResponse response = client.execute(getRequest);
final int statusCode = response.getStatusLine().getStatusCode();
}
addBitmapToCache(url, bitmap);
+
+
if (imageViewReference != null) {
ImageView imageView = imageViewReference.get();
BitmapDownloaderTask bitmapDownloaderTask = getBitmapDownloaderTask(imageView);
// Or if we don't use any bitmap to task association (NO_DOWNLOADED_DRAWABLE mode)
if ((this == bitmapDownloaderTask) || (mode != Mode.CORRECT)) {
imageView.setImageBitmap(bitmap);
+ }
+
+ if(bitmap == null){
+ if(imageView != null)
+ imageView.setImageResource(R.drawable.address_book);
}
- else
- imageView.setImageResource(R.drawable.address_book);
}
+
}
}
* Garbage Collector.
*/
- private static final int HARD_CACHE_CAPACITY = 10;
+ private static final int HARD_CACHE_CAPACITY = 20;
private static final int DELAY_BEFORE_PURGE = 10 * 1000; // in milliseconds
// Hard cache, with a fixed maximum capacity and a life duration
//tcn field
public String image = null;
+ public boolean dummy = false;
+
+ public RecordInfo(){
+ this.title = "Test title";
+ this.author = "Test author";
+ this.pubdate = "Publication date";
+
+ //marks the fact that this is a record made from no info
+ this.dummy = true;
+ }
public RecordInfo(OSRFObject info){
try{
-
-
+
this.title = info.getString("title");
this.author = info.getString("author");
this.pubdate = info.getString("pubdate");
private Organisation selectedOrganization = null;
private Context context;
+
+ public Integer offset;
+
+ public Integer visible;
+
+ public Integer searchLimit = 10;
+
/**
* Instantiates a new search catalog.
*
/**
* Gets the search results
- *
+ *
* @param searchWords the search words
* @return the search results
*/
- public ArrayList<RecordInfo> getSearchResults(String searchWords){
+ public ArrayList<RecordInfo> getSearchResults(String searchWords, Integer offset){
ArrayList<RecordInfo> resultsRecordInfo = new ArrayList<RecordInfo>();
complexParm.put("depth", this.selectedOrganization.level-1);
}
//TODO change here, multiple result per page
- complexParm.put("limit", 50);
+ complexParm.put("limit", searchLimit);
+
+ complexParm.put("offset",offset);
/*
complexParm.put("offset",0);
method.addParam(searchWords);
method.addParam(1);
+
// sync test
HttpRequest req = new GatewayRequest(conn, SERVICE, method).send();
Object resp;
ArrayList<String> ids = new ArrayList<String>();
+
while ( (resp = req.recv()) != null){
System.out.println("Sync Response: " + resp);
System.out.println(" ids : " + response.get("ids") + " " );
List<List<String>> result_ids = (List) response.get("ids");
+
+ visible =Integer.parseInt((String)response.get("count"));
for(int i=0;i<result_ids.size();i++){
ids.add(result_ids.get(i).get(0));
import org.evergreen.android.R;
import org.evergreen.android.globals.GlobalConfigs;
+import com.google.android.maps.ItemizedOverlay;
+
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
+import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ImageView;
private static final int DETAILS = 1;
+ private TextView searchResultsNumber;
+
private final ImageDownloader imageDownloader = new ImageDownloader();
@Override
// Create a customized ArrayAdapter
adapter = new SearchArrayAdapter(
getApplicationContext(), R.layout.search_result_item, recordList);
-
+
+ searchResultsNumber = (TextView) findViewById(R.id.search_result_number);
+
// Get reference to ListView holder
lv = (ListView) this.findViewById(R.id.search_results_list);
+
+ // Creating a button - Load More
+ Button btnLoadMore = new Button(this);
+ btnLoadMore.setText("Load More");
+
+ // Adding button to listview at footer
+ //lv.addFooterView(btnLoadMore);
+
+ View footerView = findViewById(R.layout.search_result_footer_view);
+ //call before set adapter
+ //lv.addFooterView(footerView);
+
//System.out.println("Here it is " + lv);
+
+ progressDialog = new ProgressDialog(context);
+
+ progressDialog.setMessage("Fetching data");
// Set the ListView adapter
lv.setAdapter(adapter);
-
-
+
registerForContextMenu(lv);
RecordInfo info = (RecordInfo)lv.getItemAtPosition(position);
- //start activity with book details
-
- Intent intent = new Intent(getBaseContext(),RecordDetails_Simple.class);
- //serialize object and pass it to next activity
- intent.putExtra("recordInfo", info);
- startActivity(intent);
+ if(info.dummy == true){
+ progressDialog = new ProgressDialog(context);
+
+ progressDialog.setMessage("Fetching data");
+ progressDialog.show();
+ final String text = searchText.getText().toString();
+
+ Thread searchThreadwithOffset = new Thread(new Runnable() {
+
+ @Override
+ public void run() {
+ searchResults = search.getSearchResults(text,recordList.size()-1);
+
+ runOnUiThread(new Runnable() {
+
+ @Override
+ public void run() {
+
+ //don't clear record list
+ //recordList.clear();
+ if(searchResults.size()>0){
+
+ //remove previous more button
+ recordList.remove(recordList.size()-1);
+
+ for(int j=0;j<searchResults.size();j++)
+ recordList.add(searchResults.get(j));
+
+ //add extra record to display more option button
+ if(search.visible > recordList.size()){
+ recordList.add(new RecordInfo());
+ searchResultsNumber.setText(adapter.getCount()-1 +" out of "+search.visible);
+ }
+ else
+ searchResultsNumber.setText(adapter.getCount() +" out of "+search.visible);
+ }
+ else{
+ searchResultsNumber.setText(adapter.getCount() +" out of "+search.visible);
+ }
+ adapter.notifyDataSetChanged();
+ progressDialog.dismiss();
+ }
+ });
+
+ }
+ });
+
+ searchThreadwithOffset.start();
+ }
+ else{
+ //start activity with book details
+
+ Intent intent = new Intent(getBaseContext(),RecordDetails_Simple.class);
+ //serialize object and pass it to next activity
+ intent.putExtra("recordInfo", info);
+
+ startActivity(intent);
+ }
}
});
@Override
public void run() {
- searchResults = search.getSearchResults(text);
+ searchResults = search.getSearchResults(text,0);
runOnUiThread(new Runnable() {
for(int j=0;j<searchResults.size();j++)
recordList.add(searchResults.get(j));
+
+ //add extra record to display more option button
+ if(search.visible > recordList.size()){
+ recordList.add(new RecordInfo());
+ searchResultsNumber.setText(recordList.size()-1 +" out of "+search.visible);
+ }
+ else
+ searchResultsNumber.setText(recordList.size() +" out of "+search.visible);
}
+ else
+ searchResultsNumber.setText(recordList.size() +" out of "+search.visible);
+
adapter.notifyDataSetChanged();
progressDialog.dismiss();
+
}
});
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
- if (row == null) {
- // ROW INFLATION
- Log.d(tag, "Starting XML Row Inflation ... ");
+
+ // Get item
+ RecordInfo record = getItem(position);
+
+ if(record.dummy == true)
+ {
+ Log.d(tag, "Starting XML view more infaltion ... ");
LayoutInflater inflater = (LayoutInflater) this.getContext()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
- row = inflater.inflate(R.layout.search_result_item, parent, false);
- Log.d(tag, "Successfully completed XML Row Inflation!");
- }
+ row = inflater.inflate(R.layout.search_result_footer_view, parent, false);
+ Log.d(tag, "Successfully completed XML view more Inflation!");
- // Get item
- RecordInfo record = getItem(position);
+
+ }
+ else{
+ //if it is the right type of view
+ if (row == null || row.findViewById(R.id.search_record_title) == null) {
+
+ Log.d(tag, "Starting XML Row Inflation ... ");
+ LayoutInflater inflater = (LayoutInflater) this.getContext()
+ .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+ row = inflater.inflate(R.layout.search_result_item, parent, false);
+ Log.d(tag, "Successfully completed XML Row Inflation!");
+
+ }
+
+
+
+ Log.d(TAG, "reord image value " + recordImage);
// Get reference to ImageView
recordImage = (ImageView) row.findViewById(R.id.search_record_img);
-
//TODO fix bugs + features
String imageHref= GlobalConfigs.httpAddress + "/opac/extras/ac/jacket/small/"+record.isbn;
//start async download of image
recordTitle.setText(record.title);
recordAuthor.setText(record.author);
recordPublisher.setText(record.pubdate + " " + record.publisher);
-
+ }
+
return row;
}
}