From: drizea Date: Fri, 15 Jun 2012 10:16:16 +0000 (+0300) Subject: Image download feature for search X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=efc7307e925eb3a56d15fd237dc65ea858ac789c;p=working%2FEvergreen.git Image download feature for search --- diff --git a/Open-ILS/src/Android/bin/EvergreenApp.apk b/Open-ILS/src/Android/bin/EvergreenApp.apk index 0baf162d90..5528ad387d 100644 Binary files a/Open-ILS/src/Android/bin/EvergreenApp.apk and b/Open-ILS/src/Android/bin/EvergreenApp.apk differ diff --git a/Open-ILS/src/Android/bin/classes.dex b/Open-ILS/src/Android/bin/classes.dex index c02178ae57..5edbfec51b 100644 Binary files a/Open-ILS/src/Android/bin/classes.dex and b/Open-ILS/src/Android/bin/classes.dex differ diff --git a/Open-ILS/src/Android/bin/classes/org/evergreen/android/globals/GlobalConfigs.class b/Open-ILS/src/Android/bin/classes/org/evergreen/android/globals/GlobalConfigs.class index 0597be3be7..4bf66f310e 100644 Binary files a/Open-ILS/src/Android/bin/classes/org/evergreen/android/globals/GlobalConfigs.class and b/Open-ILS/src/Android/bin/classes/org/evergreen/android/globals/GlobalConfigs.class differ diff --git a/Open-ILS/src/Android/bin/classes/org/evergreen/android/globals/Utils.class b/Open-ILS/src/Android/bin/classes/org/evergreen/android/globals/Utils.class index 5738c7ca24..ec69f6b605 100644 Binary files a/Open-ILS/src/Android/bin/classes/org/evergreen/android/globals/Utils.class and b/Open-ILS/src/Android/bin/classes/org/evergreen/android/globals/Utils.class differ diff --git a/Open-ILS/src/Android/bin/classes/org/evergreen/android/searchCatalog/RecordInfo.class b/Open-ILS/src/Android/bin/classes/org/evergreen/android/searchCatalog/RecordInfo.class index 60885a8357..9913f32ccc 100644 Binary files a/Open-ILS/src/Android/bin/classes/org/evergreen/android/searchCatalog/RecordInfo.class and b/Open-ILS/src/Android/bin/classes/org/evergreen/android/searchCatalog/RecordInfo.class differ diff --git a/Open-ILS/src/Android/bin/classes/org/evergreen/android/searchCatalog/SearchCatalog.class b/Open-ILS/src/Android/bin/classes/org/evergreen/android/searchCatalog/SearchCatalog.class index 24913f6017..fd5f960fa4 100644 Binary files a/Open-ILS/src/Android/bin/classes/org/evergreen/android/searchCatalog/SearchCatalog.class and b/Open-ILS/src/Android/bin/classes/org/evergreen/android/searchCatalog/SearchCatalog.class differ diff --git a/Open-ILS/src/Android/bin/classes/org/evergreen/android/searchCatalog/SearchCatalogListView$1.class b/Open-ILS/src/Android/bin/classes/org/evergreen/android/searchCatalog/SearchCatalogListView$1.class index cea9b214a2..c051e00341 100644 Binary files a/Open-ILS/src/Android/bin/classes/org/evergreen/android/searchCatalog/SearchCatalogListView$1.class and b/Open-ILS/src/Android/bin/classes/org/evergreen/android/searchCatalog/SearchCatalogListView$1.class differ diff --git a/Open-ILS/src/Android/bin/classes/org/evergreen/android/searchCatalog/SearchCatalogListView$2$1$1.class b/Open-ILS/src/Android/bin/classes/org/evergreen/android/searchCatalog/SearchCatalogListView$2$1$1.class index 4b8e8a8bff..0399bc9b01 100644 Binary files a/Open-ILS/src/Android/bin/classes/org/evergreen/android/searchCatalog/SearchCatalogListView$2$1$1.class and b/Open-ILS/src/Android/bin/classes/org/evergreen/android/searchCatalog/SearchCatalogListView$2$1$1.class differ diff --git a/Open-ILS/src/Android/bin/classes/org/evergreen/android/searchCatalog/SearchCatalogListView$2$1.class b/Open-ILS/src/Android/bin/classes/org/evergreen/android/searchCatalog/SearchCatalogListView$2$1.class index 4581424748..5854aee6a9 100644 Binary files a/Open-ILS/src/Android/bin/classes/org/evergreen/android/searchCatalog/SearchCatalogListView$2$1.class and b/Open-ILS/src/Android/bin/classes/org/evergreen/android/searchCatalog/SearchCatalogListView$2$1.class differ diff --git a/Open-ILS/src/Android/bin/classes/org/evergreen/android/searchCatalog/SearchCatalogListView$2.class b/Open-ILS/src/Android/bin/classes/org/evergreen/android/searchCatalog/SearchCatalogListView$2.class index 7cf20b1197..ae8ca9c718 100644 Binary files a/Open-ILS/src/Android/bin/classes/org/evergreen/android/searchCatalog/SearchCatalogListView$2.class and b/Open-ILS/src/Android/bin/classes/org/evergreen/android/searchCatalog/SearchCatalogListView$2.class differ diff --git a/Open-ILS/src/Android/bin/classes/org/evergreen/android/searchCatalog/SearchCatalogListView$3.class b/Open-ILS/src/Android/bin/classes/org/evergreen/android/searchCatalog/SearchCatalogListView$3.class index 6f72bdae1b..55e9e7598d 100644 Binary files a/Open-ILS/src/Android/bin/classes/org/evergreen/android/searchCatalog/SearchCatalogListView$3.class and b/Open-ILS/src/Android/bin/classes/org/evergreen/android/searchCatalog/SearchCatalogListView$3.class differ diff --git a/Open-ILS/src/Android/bin/classes/org/evergreen/android/searchCatalog/SearchCatalogListView$SearchArrayAdapter.class b/Open-ILS/src/Android/bin/classes/org/evergreen/android/searchCatalog/SearchCatalogListView$SearchArrayAdapter.class index 229e62329e..3e96ef92d3 100644 Binary files a/Open-ILS/src/Android/bin/classes/org/evergreen/android/searchCatalog/SearchCatalogListView$SearchArrayAdapter.class and b/Open-ILS/src/Android/bin/classes/org/evergreen/android/searchCatalog/SearchCatalogListView$SearchArrayAdapter.class differ diff --git a/Open-ILS/src/Android/bin/classes/org/evergreen/android/searchCatalog/SearchCatalogListView.class b/Open-ILS/src/Android/bin/classes/org/evergreen/android/searchCatalog/SearchCatalogListView.class index 2e7a653510..59f9176c1e 100644 Binary files a/Open-ILS/src/Android/bin/classes/org/evergreen/android/searchCatalog/SearchCatalogListView.class and b/Open-ILS/src/Android/bin/classes/org/evergreen/android/searchCatalog/SearchCatalogListView.class differ 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 50141d89aa..91a7362805 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 @@ -55,13 +55,15 @@ public class GlobalConfigs { collectionsRequest += locale + "/OrgTree.js"; init = true; + SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context); + GlobalConfigs.httpAddress = preferences.getString("library_url", ""); + loadIDLFile(); getOrganisations(); - SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context); - GlobalConfigs.httpAddress = preferences.getString("library_url", ""); AccountAccess.setAccountInfo(preferences.getString("username", ""), preferences.getString("password", "")); + //authenticate AccountAccess ac = new AccountAccess(GlobalConfigs.httpAddress); ac.authenticate(); diff --git a/Open-ILS/src/Android/src/org/evergreen/android/globals/Utils.java b/Open-ILS/src/Android/src/org/evergreen/android/globals/Utils.java index 0c0d058f2e..64c6ba4ec3 100644 --- a/Open-ILS/src/Android/src/org/evergreen/android/globals/Utils.java +++ b/Open-ILS/src/Android/src/org/evergreen/android/globals/Utils.java @@ -1,11 +1,14 @@ package org.evergreen.android.globals; +import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; -import java.net.InetAddress; +import java.net.MalformedURLException; import java.net.SocketTimeoutException; +import java.net.URL; +import java.net.URLConnection; import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; @@ -17,10 +20,12 @@ import org.apache.http.params.HttpConnectionParams; import org.apache.http.params.HttpParams; import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; import android.net.ConnectivityManager; import android.net.NetworkInfo; -import android.test.IsolatedContext; import android.util.Log; +import android.widget.ImageView; public class Utils { @@ -173,5 +178,41 @@ public class Utils { return result; } - + + public static void bookCoverImage(ImageView picture, String imageID, int size){ + + String urlS = (GlobalConfigs.httpAddress + "/opac/extras/ac/jacket/small/" + imageID); + + Bitmap bmp = null; //create a new Bitmap variable called bmp, and initialize it to null + + try { + + URL url = new URL(urlS); //create a URL object from the urlS string above + URLConnection conn = url.openConnection(); //save conn as a URLConnection + + conn.connect(); //connect to the URLConnection conn + InputStream is = conn.getInputStream(); //get the image from the URLConnection conn using InputStream is + BufferedInputStream bis = new BufferedInputStream(is); //create a BufferedInputStream called bis from is + bmp = BitmapFactory.decodeStream(bis); //use bis to convert the stream to a bitmap image, and save it to bmp + int bmpHeight = bmp.getHeight(); //stores the original height of the image + if(bmpHeight != 1){ + double scale = size/(double)bmpHeight; //sets the scaling number to match the desired size + double bmpWidthh = (double)bmp.getWidth() * scale; //scales and stores the original width into the desired one + int bmpWidth = (int)bmpWidthh; //gets the width of the picture and saves it + bmp = Bitmap.createScaledBitmap(bmp, bmpWidth, size, true); //creates and stores a new bmp with desired dimensions + } + + } catch (MalformedURLException e) { //catch errors + e.printStackTrace(); + } catch(IOException e){ + e.printStackTrace(); + } catch(IllegalStateException e){ + e.printStackTrace(); + } + picture.setImageBitmap(bmp); //send the Bitmap image bmp to pic, and call the method to set the image. + + + } + + } 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 new file mode 100644 index 0000000000..1b35d861e2 --- /dev/null +++ b/Open-ILS/src/Android/src/org/evergreen/android/searchCatalog/ImageDownloader.java @@ -0,0 +1,393 @@ +package org.evergreen.android.searchCatalog; + +import java.io.FilterInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.lang.ref.SoftReference; +import java.lang.ref.WeakReference; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.concurrent.ConcurrentHashMap; + +import org.apache.http.HttpEntity; +import org.apache.http.HttpResponse; +import org.apache.http.HttpStatus; +import org.apache.http.client.HttpClient; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.impl.client.DefaultHttpClient; + +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; +import android.graphics.drawable.Drawable; +import android.net.http.AndroidHttpClient; +import android.os.AsyncTask; +import android.os.Handler; +import android.util.Log; +import android.widget.ImageView; + +/** + * This helper class download images from the Internet and binds those with the provided ImageView. + * + *

It requires the INTERNET permission, which should be added to your application's manifest + * file.

+ * + * A local cache of downloaded images is maintained internally to improve performance. + */ +public class ImageDownloader { + private static final String LOG_TAG = "ImageDownloader"; + + public enum Mode { NO_ASYNC_TASK, NO_DOWNLOADED_DRAWABLE, CORRECT } + private Mode mode = Mode.CORRECT; + + private int MIN_IMG_HEIGHT = 75; + + /** + * Download the specified image from the Internet and binds it to the provided ImageView. The + * binding is immediate if the image is found in the cache and will be done asynchronously + * otherwise. A null bitmap will be associated to the ImageView if an error occurs. + * + * @param url The URL of the image to download. + * @param imageView The ImageView to bind the downloaded image to. + */ + public void download(String url, ImageView imageView) { + resetPurgeTimer(); + Bitmap bitmap = getBitmapFromCache(url); + + if (bitmap == null) { + forceDownload(url, imageView); + } else { + cancelPotentialDownload(url, imageView); + imageView.setImageBitmap(bitmap); + } + } + + /* + * Same as download but the image is always downloaded and the cache is not used. + * Kept private at the moment as its interest is not clear. + private void forceDownload(String url, ImageView view) { + forceDownload(url, view, null); + } + */ + + /** + * Same as download but the image is always downloaded and the cache is not used. + * Kept private at the moment as its interest is not clear. + */ + private void forceDownload(String url, ImageView imageView) { + // State sanity: url is guaranteed to never be null in DownloadedDrawable and cache keys. + if (url == null) { + imageView.setImageDrawable(null); + return; + } + + if (cancelPotentialDownload(url, imageView)) { + switch (mode) { + case NO_ASYNC_TASK: + Bitmap bitmap = downloadBitmap(url); + addBitmapToCache(url, bitmap); + imageView.setImageBitmap(bitmap); + break; + + case NO_DOWNLOADED_DRAWABLE: + imageView.setMinimumHeight(MIN_IMG_HEIGHT); + BitmapDownloaderTask task = new BitmapDownloaderTask(imageView); + task.execute(url); + break; + + case CORRECT: + task = new BitmapDownloaderTask(imageView); + DownloadedDrawable downloadedDrawable = new DownloadedDrawable(task); + imageView.setImageDrawable(downloadedDrawable); + imageView.setMinimumHeight(MIN_IMG_HEIGHT); + task.execute(url); + break; + } + } + } + + /** + * Returns true if the current download has been canceled or if there was no download in + * progress on this image view. + * Returns false if the download in progress deals with the same url. The download is not + * stopped in that case. + */ + private static boolean cancelPotentialDownload(String url, ImageView imageView) { + BitmapDownloaderTask bitmapDownloaderTask = getBitmapDownloaderTask(imageView); + + if (bitmapDownloaderTask != null) { + String bitmapUrl = bitmapDownloaderTask.url; + if ((bitmapUrl == null) || (!bitmapUrl.equals(url))) { + bitmapDownloaderTask.cancel(true); + } else { + // The same URL is already being downloaded. + return false; + } + } + return true; + } + + /** + * @param imageView Any imageView + * @return Retrieve the currently active download task (if any) associated with this imageView. + * null if there is no such task. + */ + private static BitmapDownloaderTask getBitmapDownloaderTask(ImageView imageView) { + if (imageView != null) { + Drawable drawable = imageView.getDrawable(); + if (drawable instanceof DownloadedDrawable) { + DownloadedDrawable downloadedDrawable = (DownloadedDrawable)drawable; + return downloadedDrawable.getBitmapDownloaderTask(); + } + } + return null; + } + + Bitmap downloadBitmap(String url) { + final int IO_BUFFER_SIZE = 4 * 1024; + + // 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); + + try { + HttpResponse response = client.execute(getRequest); + final int statusCode = response.getStatusLine().getStatusCode(); + if (statusCode != HttpStatus.SC_OK) { + Log.w("ImageDownloader", "Error " + statusCode + + " while retrieving bitmap from " + url); + return null; + } + + final HttpEntity entity = response.getEntity(); + if (entity != null) { + InputStream inputStream = null; + try { + inputStream = entity.getContent(); + // return BitmapFactory.decodeStream(inputStream); + // Bug on slow connections, fixed in future release. + return BitmapFactory.decodeStream(new FlushedInputStream(inputStream)); + } finally { + if (inputStream != null) { + inputStream.close(); + } + entity.consumeContent(); + } + } + } catch (IOException e) { + getRequest.abort(); + Log.w(LOG_TAG, "I/O error while retrieving bitmap from " + url, e); + } catch (IllegalStateException e) { + getRequest.abort(); + Log.w(LOG_TAG, "Incorrect URL: " + url); + } catch (Exception e) { + getRequest.abort(); + Log.w(LOG_TAG, "Error while retrieving bitmap from " + url, e); + } finally { + if ((client instanceof AndroidHttpClient)) { + ((AndroidHttpClient) client).close(); + } + } + return null; + } + + /* + * An InputStream that skips the exact number of bytes provided, unless it reaches EOF. + */ + static class FlushedInputStream extends FilterInputStream { + public FlushedInputStream(InputStream inputStream) { + super(inputStream); + } + + @Override + public long skip(long n) throws IOException { + long totalBytesSkipped = 0L; + while (totalBytesSkipped < n) { + long bytesSkipped = in.skip(n - totalBytesSkipped); + if (bytesSkipped == 0L) { + int b = read(); + if (b < 0) { + break; // we reached EOF + } else { + bytesSkipped = 1; // we read one byte + } + } + totalBytesSkipped += bytesSkipped; + } + return totalBytesSkipped; + } + } + + /** + * The actual AsyncTask that will asynchronously download the image. + */ + class BitmapDownloaderTask extends AsyncTask { + private String url; + private final WeakReference imageViewReference; + + public BitmapDownloaderTask(ImageView imageView) { + imageViewReference = new WeakReference(imageView); + } + + /** + * Actual download method. + */ + @Override + protected Bitmap doInBackground(String... params) { + url = params[0]; + return downloadBitmap(url); + } + + /** + * Once the image is downloaded, associates it to the imageView + */ + @Override + protected void onPostExecute(Bitmap bitmap) { + if (isCancelled()) { + bitmap = null; + } + + addBitmapToCache(url, bitmap); + + if (imageViewReference != null) { + ImageView imageView = imageViewReference.get(); + BitmapDownloaderTask bitmapDownloaderTask = getBitmapDownloaderTask(imageView); + // Change bitmap only if this process is still associated with it + // Or if we don't use any bitmap to task association (NO_DOWNLOADED_DRAWABLE mode) + if ((this == bitmapDownloaderTask) || (mode != Mode.CORRECT)) { + imageView.setImageBitmap(bitmap); + } + } + } + } + + + /** + * A fake Drawable that will be attached to the imageView while the download is in progress. + * + *

Contains a reference to the actual download task, so that a download task can be stopped + * if a new binding is required, and makes sure that only the last started download process can + * bind its result, independently of the download finish order.

+ */ + static class DownloadedDrawable extends ColorDrawable { + private final WeakReference bitmapDownloaderTaskReference; + + public DownloadedDrawable(BitmapDownloaderTask bitmapDownloaderTask) { + super(Color.BLACK); + bitmapDownloaderTaskReference = + new WeakReference(bitmapDownloaderTask); + } + + public BitmapDownloaderTask getBitmapDownloaderTask() { + return bitmapDownloaderTaskReference.get(); + } + } + + public void setMode(Mode mode) { + this.mode = mode; + clearCache(); + } + + + /* + * Cache-related fields and methods. + * + * We use a hard and a soft cache. A soft reference cache is too aggressively cleared by the + * Garbage Collector. + */ + + private static final int HARD_CACHE_CAPACITY = 10; + private static final int DELAY_BEFORE_PURGE = 10 * 1000; // in milliseconds + + // Hard cache, with a fixed maximum capacity and a life duration + private final HashMap sHardBitmapCache = + new LinkedHashMap(HARD_CACHE_CAPACITY / 2, 0.75f, true) { + @Override + protected boolean removeEldestEntry(LinkedHashMap.Entry eldest) { + if (size() > HARD_CACHE_CAPACITY) { + // Entries push-out of hard reference cache are transferred to soft reference cache + sSoftBitmapCache.put(eldest.getKey(), new SoftReference(eldest.getValue())); + return true; + } else + return false; + } + }; + + // Soft cache for bitmaps kicked out of hard cache + private final static ConcurrentHashMap> sSoftBitmapCache = + new ConcurrentHashMap>(HARD_CACHE_CAPACITY / 2); + + private final Handler purgeHandler = new Handler(); + + private final Runnable purger = new Runnable() { + public void run() { + clearCache(); + } + }; + + /** + * Adds this bitmap to the cache. + * @param bitmap The newly downloaded bitmap. + */ + private void addBitmapToCache(String url, Bitmap bitmap) { + if (bitmap != null) { + synchronized (sHardBitmapCache) { + sHardBitmapCache.put(url, bitmap); + } + } + } + + /** + * @param url The URL of the image that will be retrieved from the cache. + * @return The cached bitmap or null if it was not found. + */ + private Bitmap getBitmapFromCache(String url) { + // First try the hard reference cache + synchronized (sHardBitmapCache) { + final Bitmap bitmap = sHardBitmapCache.get(url); + if (bitmap != null) { + // Bitmap found in hard cache + // Move element to first position, so that it is removed last + sHardBitmapCache.remove(url); + sHardBitmapCache.put(url, bitmap); + return bitmap; + } + } + + // Then try the soft reference cache + SoftReference bitmapReference = sSoftBitmapCache.get(url); + if (bitmapReference != null) { + final Bitmap bitmap = bitmapReference.get(); + if (bitmap != null) { + // Bitmap found in soft cache + return bitmap; + } else { + // Soft reference has been Garbage Collected + sSoftBitmapCache.remove(url); + } + } + + return null; + } + + /** + * Clears the image cache used internally to improve performance. Note that for memory + * efficiency reasons, the cache will automatically be cleared after a certain inactivity delay. + */ + public void clearCache() { + sHardBitmapCache.clear(); + sSoftBitmapCache.clear(); + } + + /** + * Allow a new delay before the automatic cache clear is done. + */ + private void resetPurgeTimer() { + purgeHandler.removeCallbacks(purger); + purgeHandler.postDelayed(purger, DELAY_BEFORE_PURGE); + } +} + + diff --git a/Open-ILS/src/Android/src/org/evergreen/android/searchCatalog/RecordInfo.java b/Open-ILS/src/Android/src/org/evergreen/android/searchCatalog/RecordInfo.java index 1384646181..f18c1e62b5 100644 --- a/Open-ILS/src/Android/src/org/evergreen/android/searchCatalog/RecordInfo.java +++ b/Open-ILS/src/Android/src/org/evergreen/android/searchCatalog/RecordInfo.java @@ -5,6 +5,8 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; +import org.opensrf.util.OSRFObject; + public class RecordInfo implements Serializable{ @@ -37,15 +39,20 @@ public class RecordInfo implements Serializable{ public String series = null; - public RecordInfo(Map info){ + //tcn field + public String image = null; + + public RecordInfo(OSRFObject info){ try{ - this.title = (String)info.get("title"); - this.author = (String)info.get("author"); - this.pubdate = (String)info.get("pubdate"); - this.publisher = (String)info.get("publisher"); - this.doc_id = (Integer)info.get("doc_id"); + + this.title = info.getString("title"); + this.author = info.getString("author"); + this.pubdate = info.getString("pubdate"); + this.publisher = info.getString("publisher"); + this.doc_id = info.getInt("doc_id"); + this.image = info.getString("tcn"); } catch(Exception e){System.out.println("Exception basic info " + e.getMessage());}; diff --git a/Open-ILS/src/Android/src/org/evergreen/android/searchCatalog/SearchCatalog.java b/Open-ILS/src/Android/src/org/evergreen/android/searchCatalog/SearchCatalog.java index 892f95e40d..69244b9a00 100644 --- a/Open-ILS/src/Android/src/org/evergreen/android/searchCatalog/SearchCatalog.java +++ b/Open-ILS/src/Android/src/org/evergreen/android/searchCatalog/SearchCatalog.java @@ -14,6 +14,7 @@ import org.opensrf.net.http.GatewayRequest; import org.opensrf.net.http.HttpConnection; import org.opensrf.net.http.HttpRequest; import org.opensrf.net.http.HttpRequestHandler; +import org.opensrf.util.OSRFObject; import android.content.Context; import android.util.Log; @@ -94,8 +95,10 @@ public class SearchCatalog { if(this.selectedOrganization.level != null) complexParm.put("depth", this.selectedOrganization.level-1); } - /* + //TODO change here, multiple result per page complexParm.put("limit", 10); + + /* complexParm.put("offset",0); complexParm.put("visibility_limit", 3000); complexParm.put("default_class","keyword"); @@ -164,7 +167,7 @@ public class SearchCatalog { * @param id the id * @return the item short info */ - private Map getItemShortInfo(String id){ + private OSRFObject getItemShortInfo(String id){ Method method = new Method(METHOD_SLIM_RETRIVE); @@ -174,7 +177,7 @@ public class SearchCatalog { Object resp; while ( (resp = req.recv()) != null) { System.out.println("Sync Response: " + resp); - return (Map)resp; + return (OSRFObject)resp; } return null; 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 f115e8ad36..5412e66615 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 @@ -60,6 +60,8 @@ public class SearchCatalogListView extends Activity{ private static final int PLACE_HOLD = 0; private static final int DETAILS = 1; + + private final ImageDownloader imageDownloader = new ImageDownloader(); @Override public void onCreate(Bundle savedInstanceState) { @@ -112,13 +114,12 @@ public class SearchCatalogListView extends Activity{ choseOrganisation = (Spinner) findViewById(R.id.chose_organisation); searchButton = (ImageButton) findViewById(R.id.searchButton); - + searchButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { - // TODO Auto-generated method stub final String text = searchText.getText().toString(); @@ -134,22 +135,22 @@ public class SearchCatalogListView extends Activity{ @Override public void run() { - // TODO Auto-generated method stub searchResults = search.getSearchResults(text); runOnUiThread(new Runnable() { @Override public void run() { - // TODO Auto-generated method stub + recordList.clear(); if(searchResults.size()>0){ - //TODO + for(int j=0;j