From e302339b63c32aed4d6c04d8ff346442be955a3a Mon Sep 17 00:00:00 2001 From: drizea Date: Mon, 13 Aug 2012 18:43:34 +0300 Subject: [PATCH] hold list view with image resource + bug fixes --- Open-ILS/src/Android/res/layout/hold_details.xml | 1 + Open-ILS/src/Android/res/layout/holds_list.xml | 10 +++++-- .../src/Android/res/layout/holds_list_item.xml | 35 +++++++++++++++++----- Open-ILS/src/Android/res/layout/place_hold.xml | 1 + Open-ILS/src/Android/res/values/strings.xml | 2 ++ .../android/accountAccess/AccountAccess.java | 19 +++++++++--- .../android/accountAccess/holds/HoldDetails.java | 16 ++++------ .../android/accountAccess/holds/HoldRecord.java | 3 +- .../android/accountAccess/holds/HoldsListView.java | 33 ++++++++++++++++++-- .../evergreen/android/globals/GlobalConfigs.java | 2 ++ .../android/searchCatalog/ImageDownloader.java | 4 +++ .../searchCatalog/SearchCatalogListView.java | 4 +++ 12 files changed, 102 insertions(+), 28 deletions(-) diff --git a/Open-ILS/src/Android/res/layout/hold_details.xml b/Open-ILS/src/Android/res/layout/hold_details.xml index 4608f040e0..1de04266f4 100644 --- a/Open-ILS/src/Android/res/layout/hold_details.xml +++ b/Open-ILS/src/Android/res/layout/hold_details.xml @@ -42,6 +42,7 @@ android:fillViewport="true" android:layout_above="@id/action_bar" android:layout_below="@id/header_actionbar" + android:padding="5dp" > + android:layout_height="wrap_content" + android:orientation="horizontal" + android:padding="5dp" + > @@ -26,7 +30,7 @@ \ No newline at end of file diff --git a/Open-ILS/src/Android/res/layout/holds_list_item.xml b/Open-ILS/src/Android/res/layout/holds_list_item.xml index 70af455f24..04ef51756a 100644 --- a/Open-ILS/src/Android/res/layout/holds_list_item.xml +++ b/Open-ILS/src/Android/res/layout/holds_list_item.xml @@ -1,9 +1,29 @@ - + android:layout_height="match_parent" + android:orientation="horizontal" + android:paddingLeft="5dp" + > - + + + + @@ -22,8 +41,10 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/hold_status" - android:layout_below="@+id/hold_author" android:textColor="@color/blue" /> + + + - \ No newline at end of file + \ No newline at end of file diff --git a/Open-ILS/src/Android/res/layout/place_hold.xml b/Open-ILS/src/Android/res/layout/place_hold.xml index fd99ac8dc9..8190be697d 100644 --- a/Open-ILS/src/Android/res/layout/place_hold.xml +++ b/Open-ILS/src/Android/res/layout/place_hold.xml @@ -37,6 +37,7 @@ android:fillViewport="true" android:layout_above="@id/action_bar" android:layout_below="@id/header_actionbar" + android:padding="5dip" > Hold expire time Date when the hold is frozen + Hold items: + Total items out: / Overdue items: diff --git a/Open-ILS/src/Android/src/org/evergreen/android/accountAccess/AccountAccess.java b/Open-ILS/src/Android/src/org/evergreen/android/accountAccess/AccountAccess.java index d24e465209..439df8b935 100644 --- a/Open-ILS/src/Android/src/org/evergreen/android/accountAccess/AccountAccess.java +++ b/Open-ILS/src/Android/src/org/evergreen/android/accountAccess/AccountAccess.java @@ -685,7 +685,7 @@ public class AccountAccess { Object response; - Object holdInfo = null; + OSRFObject holdInfo = null; if(holdType.equals("T") || holdType.equals("M")){ if(holdType.equals("M")) @@ -693,13 +693,15 @@ public class AccountAccess { if(holdType.equals("T")) method = METHOD_FETCH_RMODS; System.out.println(); - holdInfo = Utils.doRequest(conn,SERVICE_SEARCH, method, cm, new Object[]{holdArhObject.get("target")}); + holdInfo = (OSRFObject)Utils.doRequest(conn,SERVICE_SEARCH, method, cm, new Object[]{holdArhObject.get("target")}); //System.out.println("Hold here " + holdInfo); hold.title = ((OSRFObject)holdInfo).getString("title"); hold.author = ((OSRFObject)holdInfo).getString("author"); hold.recordInfo = new RecordInfo((OSRFObject)holdInfo); - + try{ + hold.types_of_resource= ((List)holdInfo.get("types_of_resource")).get(0).toString(); + }catch(Exception e){System.err.println("Can't get types of resurce type" + e.getMessage());}; } else{ //multiple objects per hold ???? @@ -709,7 +711,7 @@ public class AccountAccess { return holdInfo; } - private Object holdFetchObjects(OSRFObject hold, HoldRecord holdObj) throws NoNetworkAccessException, NoAccessToServer{ + private OSRFObject holdFetchObjects(OSRFObject hold, HoldRecord holdObj) throws NoNetworkAccessException, NoAccessToServer{ String type = (String)hold.get("hold_type"); @@ -741,6 +743,9 @@ public class AccountAccess { holdObj.title = holdInfo.getString("title"); holdObj.author = holdInfo.getString("author"); holdObj.recordInfo = new RecordInfo((OSRFObject)holdInfo); + try{ + holdObj.types_of_resource= ((List)holdInfo.get("types_of_resource")).get(0).toString(); + }catch(Exception e){System.err.println("Can't get types of resurce type" + e.getMessage());}; } @@ -767,6 +772,9 @@ public class AccountAccess { holdObj.title = holdInfo.getString("title"); holdObj.author = holdInfo.getString("author"); holdObj.recordInfo = new RecordInfo((OSRFObject)holdInfo); + try{ + holdObj.types_of_resource= ((List)holdInfo.get("types_of_resource")).get(0).toString(); + }catch(Exception e){System.err.println("Can't get types of resurce type" + e.getMessage());}; } else if(type.equals("I")){ @@ -805,6 +813,9 @@ public class AccountAccess { holdObj.title = holdInfo.getString("title"); holdObj.author = holdInfo.getString("author"); holdObj.recordInfo = new RecordInfo((OSRFObject)holdInfo); + try{ + holdObj.types_of_resource= ((List)holdInfo.get("types_of_resource")).get(0).toString(); + }catch(Exception e){System.err.println("Can't get types of resurce type" + e.getMessage());}; } return null; diff --git a/Open-ILS/src/Android/src/org/evergreen/android/accountAccess/holds/HoldDetails.java b/Open-ILS/src/Android/src/org/evergreen/android/accountAccess/holds/HoldDetails.java index f04348223b..766de1de7b 100644 --- a/Open-ILS/src/Android/src/org/evergreen/android/accountAccess/holds/HoldDetails.java +++ b/Open-ILS/src/Android/src/org/evergreen/android/accountAccess/holds/HoldDetails.java @@ -43,11 +43,11 @@ import android.widget.Toast; public class HoldDetails extends Activity { - public static final int RESULT_CODE_DELETE_HOLD = 0; + public static final int RESULT_CODE_DELETE_HOLD = 5; - public static final int RESULT_CODE_UPDATE_HOLD = 1; - - public static final int RESULT_CODE_CANCEL = 2; + public static final int RESULT_CODE_UPDATE_HOLD = 6; + + public static final int RESULT_CODE_CANCEL = 7; private TextView recipient; @@ -241,11 +241,7 @@ public class HoldDetails extends Activity { System.out.println("Exception in reAuth"); } } - - - - - + runOnUiThread(new Runnable() { @Override public void run() { @@ -277,8 +273,6 @@ public class HoldDetails extends Activity { if (thaw_date != null) thaw_date_s = GlobalConfigs.getStringDate(thaw_date); - - try { accountAccess.updateHold(record.ahr, selectedOrgPos, email_notification.isChecked(), phone_notification diff --git a/Open-ILS/src/Android/src/org/evergreen/android/accountAccess/holds/HoldRecord.java b/Open-ILS/src/Android/src/org/evergreen/android/accountAccess/holds/HoldRecord.java index ebd4350680..c6ac35feb4 100644 --- a/Open-ILS/src/Android/src/org/evergreen/android/accountAccess/holds/HoldRecord.java +++ b/Open-ILS/src/Android/src/org/evergreen/android/accountAccess/holds/HoldRecord.java @@ -2,6 +2,7 @@ package org.evergreen.android.accountAccess.holds; import java.io.Serializable; import java.util.Date; +import java.util.List; import org.evergreen.android.globals.GlobalConfigs; import org.evergreen.android.searchCatalog.RecordInfo; @@ -35,6 +36,7 @@ public class HoldRecord implements Serializable{ public String author = null; + public String types_of_resource; /* Hold status * holdStatus == 4 => AVAILABLE @@ -106,7 +108,6 @@ public class HoldRecord implements Serializable{ this.suspended = true; pickup_lib = ahr.getInt("pickup_lib"); - } //based on status integer field retreive hold status in text public String getHoldStatus(){ diff --git a/Open-ILS/src/Android/src/org/evergreen/android/accountAccess/holds/HoldsListView.java b/Open-ILS/src/Android/src/org/evergreen/android/accountAccess/holds/HoldsListView.java index 999c652772..47f13d9de7 100644 --- a/Open-ILS/src/Android/src/org/evergreen/android/accountAccess/holds/HoldsListView.java +++ b/Open-ILS/src/Android/src/org/evergreen/android/accountAccess/holds/HoldsListView.java @@ -1,14 +1,17 @@ package org.evergreen.android.accountAccess.holds; +import java.net.URLEncoder; import java.util.ArrayList; import java.util.List; import org.evergreen.android.R; import org.evergreen.android.accountAccess.AccountAccess; import org.evergreen.android.accountAccess.SessionNotFoundException; +import org.evergreen.android.globals.GlobalConfigs; import org.evergreen.android.globals.NoAccessToServer; import org.evergreen.android.globals.NoNetworkAccessException; import org.evergreen.android.globals.Utils; +import org.evergreen.android.searchCatalog.ImageDownloader; import org.evergreen.android.searchCatalog.SearchCatalogListView; import org.evergreen.android.views.AccountScreenDashboard; @@ -27,6 +30,7 @@ import android.widget.AdapterView.OnItemClickListener; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.ImageButton; +import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; @@ -52,8 +56,12 @@ public class HoldsListView extends Activity{ private Button myAccountButton; private TextView headerTitle; + + private TextView holdsNoText; private ProgressDialog progressDialog; + + private ImageDownloader imageDownloader; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -83,6 +91,10 @@ public class HoldsListView extends Activity{ }); //end header portion actions + holdsNoText = (TextView)findViewById(R.id.holds_number); + + imageDownloader = new ImageDownloader(40, 40, false); + lv = (ListView)findViewById(R.id.holds_item_list); context = this; accountAccess = AccountAccess.getAccountAccess(); @@ -119,6 +131,7 @@ public class HoldsListView extends Activity{ for(int i=0;i records = new ArrayList(); @@ -230,6 +249,9 @@ public class HoldsListView extends Activity{ } + + hold_icon = (ImageView) row.findViewById(R.id.hold_resource_icon); + // Get reference to TextView - title holdTitle = (TextView) row.findViewById(R.id.hold_title); @@ -240,8 +262,15 @@ public class HoldsListView extends Activity{ status = (TextView) row.findViewById(R.id.hold_status); //set text - - System.out.println("Row" + record.title + " " + record.author + " " + record.getHoldStatus()); + String imageResourceHref = GlobalConfigs.httpAddress + GlobalConfigs.hold_icon_address +record.types_of_resource +".jpg"; + + if(imageResourceHref.contains(" ")){ + imageResourceHref = imageResourceHref.replace(" ", "%20"); + } + + imageDownloader.download(imageResourceHref, hold_icon); + + System.out.println("Image " + imageResourceHref + " Row " + record.title + " " + record.author + " " + record.getHoldStatus() ); //set raw information holdTitle.setText(record.title); holdAuthor.setText(record.author); diff --git a/Open-ILS/src/Android/src/org/evergreen/android/globals/GlobalConfigs.java b/Open-ILS/src/Android/src/org/evergreen/android/globals/GlobalConfigs.java index a90064e04e..d48e84adc1 100644 --- a/Open-ILS/src/Android/src/org/evergreen/android/globals/GlobalConfigs.java +++ b/Open-ILS/src/Android/src/org/evergreen/android/globals/GlobalConfigs.java @@ -35,6 +35,8 @@ public class GlobalConfigs { public static boolean loadedOrgTree = false; + public static String hold_icon_address = "/opac/images/tor/"; + //two days notification before checkout expires, this can be modified from preferences public static int NOTIFICATION_BEFORE_CHECKOUT_EXPIRATION = 2; diff --git a/Open-ILS/src/Android/src/org/evergreen/android/searchCatalog/ImageDownloader.java b/Open-ILS/src/Android/src/org/evergreen/android/searchCatalog/ImageDownloader.java index b8711ca4d6..f5e90ea64b 100644 --- a/Open-ILS/src/Android/src/org/evergreen/android/searchCatalog/ImageDownloader.java +++ b/Open-ILS/src/Android/src/org/evergreen/android/searchCatalog/ImageDownloader.java @@ -44,6 +44,8 @@ public class ImageDownloader { private int MIN_IMG_HEIGHT = 75; + private int MIN_IMG_WIDTH = 30; + private int bitmap_width; private int bitmap_height; private boolean scale; @@ -61,6 +63,7 @@ public class ImageDownloader { this.bitmap_height = h; this.bitmap_width = w; this.scale = scale; + MIN_IMG_HEIGHT = h; } /** * Download the specified image from the Internet and binds it to the provided ImageView. The @@ -120,6 +123,7 @@ public class ImageDownloader { DownloadedDrawable downloadedDrawable = new DownloadedDrawable(task); imageView.setImageDrawable(downloadedDrawable); imageView.setMinimumHeight(MIN_IMG_HEIGHT); + imageView.setMinimumWidth(MIN_IMG_WIDTH); task.execute(url); break; } diff --git a/Open-ILS/src/Android/src/org/evergreen/android/searchCatalog/SearchCatalogListView.java b/Open-ILS/src/Android/src/org/evergreen/android/searchCatalog/SearchCatalogListView.java index 2af7e4dcad..7f98883fcf 100644 --- a/Open-ILS/src/Android/src/org/evergreen/android/searchCatalog/SearchCatalogListView.java +++ b/Open-ILS/src/Android/src/org/evergreen/android/searchCatalog/SearchCatalogListView.java @@ -37,6 +37,7 @@ import android.view.View.OnClickListener; import android.view.View.OnKeyListener; import android.view.ViewGroup; import android.view.inputmethod.EditorInfo; +import android.view.inputmethod.InputMethodManager; import android.widget.AbsListView; import android.widget.AbsListView.OnScrollListener; import android.widget.AdapterView; @@ -227,6 +228,9 @@ public class SearchCatalogListView extends Activity { @Override public void run() { + InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); + imm.hideSoftInputFromWindow(searchText.getWindowToken(), 0); + searchOptionsMenu.setVisibility(View.GONE); searchResultsNumber.setVisibility(View.VISIBLE); -- 2.11.0