more speed optimizations

This commit is contained in:
Daniel Gultsch 2014-02-19 08:21:33 +01:00
parent 746f959155
commit 94ab61d5c0

View file

@ -157,18 +157,14 @@ public class ConversationFragment extends Fragment {
int type = getItemViewType(position); int type = getItemViewType(position);
ViewHolder viewHolder; ViewHolder viewHolder;
if (view == null) { if (view == null) {
viewHolder = new ViewHolder();
switch (type) { switch (type) {
case SENT: case SENT:
viewHolder = new ViewHolder();
view = (View) inflater.inflate(R.layout.message_sent, view = (View) inflater.inflate(R.layout.message_sent,
null); null);
viewHolder.imageView = (ImageView) view viewHolder.imageView = (ImageView) view
.findViewById(R.id.message_photo); .findViewById(R.id.message_photo);
viewHolder.messageBody = (TextView) view viewHolder.imageView.setImageBitmap(selfBitmap);
.findViewById(R.id.message_body);
viewHolder.time = (TextView) view
.findViewById(R.id.message_time);
view.setTag(viewHolder);
break; break;
case RECIEVED: case RECIEVED:
viewHolder = new ViewHolder(); viewHolder = new ViewHolder();
@ -176,36 +172,43 @@ public class ConversationFragment extends Fragment {
R.layout.message_recieved, null); R.layout.message_recieved, null);
viewHolder.imageView = (ImageView) view viewHolder.imageView = (ImageView) view
.findViewById(R.id.message_photo); .findViewById(R.id.message_photo);
viewHolder.messageBody = (TextView) view if (item.getConversation().getMode() == Conversation.MODE_SINGLE) {
.findViewById(R.id.message_body); Uri uri = item.getConversation().getProfilePhotoUri();
viewHolder.time = (TextView) view if (uri != null) {
.findViewById(R.id.message_time); viewHolder.imageView
view.setTag(viewHolder); .setImageBitmap(mBitmapCache.get(item
.getConversation().getName(), uri));
} else {
viewHolder.imageView
.setImageBitmap(mBitmapCache.get(item
.getConversation().getName(), null));
}
}
break; break;
default: default:
viewHolder = null; viewHolder = null;
break; break;
} }
viewHolder.messageBody = (TextView) view
.findViewById(R.id.message_body);
viewHolder.time = (TextView) view
.findViewById(R.id.message_time);
view.setTag(viewHolder);
} else { } else {
viewHolder = (ViewHolder) view.getTag(); viewHolder = (ViewHolder) view.getTag();
} }
if (type == RECIEVED) { if (type == RECIEVED) {
if (item.getConversation().getMode() == Conversation.MODE_SINGLE) { if (item.getConversation().getMode() == Conversation.MODE_MULTI) {
Uri uri = item.getConversation().getProfilePhotoUri();
if (uri != null) {
viewHolder.imageView.setImageBitmap(mBitmapCache.get(item.getConversation().getName(), uri));
} else {
viewHolder.imageView.setImageBitmap(mBitmapCache.get(item.getConversation().getName(),null));
}
} else if (item.getConversation().getMode() == Conversation.MODE_MULTI) {
if (item.getCounterpart() != null) { if (item.getCounterpart() != null) {
viewHolder.imageView.setImageBitmap(mBitmapCache.get(item.getCounterpart(),null)); viewHolder.imageView.setImageBitmap(mBitmapCache
.get(item.getCounterpart(), null));
} else { } else {
viewHolder.imageView.setImageBitmap(mBitmapCache.get(item.getConversation().getName(),null)); viewHolder.imageView
.setImageBitmap(mBitmapCache.get(item
.getConversation().getName(), null));
} }
} }
} else {
viewHolder.imageView.setImageBitmap(selfBitmap);
} }
String body = item.getBody(); String body = item.getBody();
if (body != null) { if (body != null) {
@ -406,15 +409,16 @@ public class ConversationFragment extends Fragment {
protected ImageView imageView; protected ImageView imageView;
} }
private class BitmapCache { private class BitmapCache {
private HashMap<String, Bitmap> bitmaps = new HashMap<String, Bitmap>(); private HashMap<String, Bitmap> bitmaps = new HashMap<String, Bitmap>();
public Bitmap get(String name, Uri uri) { public Bitmap get(String name, Uri uri) {
if (bitmaps.containsKey(name)) { if (bitmaps.containsKey(name)) {
return bitmaps.get(name); return bitmaps.get(name);
} else { } else {
Bitmap bm; Bitmap bm;
if (uri!=null) { if (uri != null) {
try { try {
bm = BitmapFactory.decodeStream(getActivity() bm = BitmapFactory.decodeStream(getActivity()
.getContentResolver().openInputStream(uri)); .getContentResolver().openInputStream(uri));