package com.vt.vthacks.model.impl; import java.io.IOException; import java.io.InputStream; import java.net.URL; import twitter4j.MediaEntity; import twitter4j.Status; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.support.v4.util.LruCache; import android.util.Log; import com.vt.vthacks.model.IPhotoStreamItem; public class TwitterPhotoStreamItem implements IPhotoStreamItem { private static final String TAG = "TwitterPhotoStreamItem"; private static LruCache<String, Bitmap> cache = new LruCache<String, Bitmap>((int)Runtime.getRuntime().maxMemory() / 1024 / 3) { @Override protected int sizeOf(String key, Bitmap value) { if (value == null) { return 0; } return value.getRowBytes() * value.getHeight() / 1024; } protected void entryRemoved(boolean evicted, String key, Bitmap oldValue, Bitmap newValue) { super.entryRemoved(evicted, key, oldValue, newValue); oldValue.recycle(); } }; private String username; private URL userImageURL; private String text; private URL imageURL; public TwitterPhotoStreamItem(Status status) { this.username = "@" + status.getUser().getScreenName(); try { userImageURL = new URL(status.getUser().getBiggerProfileImageURL()); } catch (IOException e) { } this.text = status.getText(); MediaEntity[] mediaEntities = status.getMediaEntities(); for (int i = 0; i < mediaEntities.length; i++) { try { imageURL = new URL(mediaEntities[i].getMediaURL()); break; } catch (IOException e) { } } } @Override public String getText() { return text; } @Override public Bitmap getImage() { if (imageURL == null) { return null; } Bitmap bitmap = null; synchronized (cache) { bitmap = cache.get(imageURL.toString()); if (bitmap == null) { bitmap = getBitmapFromURL(imageURL); if (bitmap != null) { cache.put(imageURL.toString(), bitmap); } } } return bitmap; } @Override public String getUser() { return username; } @Override public Bitmap getUserImage() { if (userImageURL == null) { return null; } Bitmap bitmap = null; synchronized (cache) { bitmap = cache.get(userImageURL.toString()); if (bitmap == null) { bitmap = getBitmapFromURL(userImageURL); if (bitmap != null) { cache.put(userImageURL.toString(), bitmap); } } } return bitmap; } @Override public String toString() { return text; } public static void clearCache() { cache.evictAll(); } private Bitmap getBitmapFromURL(URL url) { Bitmap bitmap = null; try { InputStream is = url.openStream(); bitmap = BitmapFactory.decodeStream(is); } catch (IOException e) { } catch (OutOfMemoryError e) { Log.d(TAG, "oom"); } return bitmap; } }