Reinsert avatar on chat activity. the support was removed in a bad merge.
authorDa Risk <darisk972@gmail.com>
Sun, 02 Jan 2011 21:38:38 +0100
changeset 850 01807f5df796
parent 849 5fed871bb54f
child 851 b5a404ef40f6
Reinsert avatar on chat activity. the support was removed in a bad merge.
src/com/beem/project/beem/ui/Chat.java
--- a/src/com/beem/project/beem/ui/Chat.java	Sun Jan 02 19:52:45 2011 +0100
+++ b/src/com/beem/project/beem/ui/Chat.java	Sun Jan 02 21:38:38 2011 +0100
@@ -60,6 +60,8 @@
 import android.content.IntentFilter;
 import android.content.ServiceConnection;
 import android.content.SharedPreferences;
+import android.graphics.drawable.Drawable;
+import android.graphics.drawable.LayerDrawable;
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
 import android.graphics.Color;
@@ -86,6 +88,8 @@
 import android.widget.ListView;
 import android.widget.TextView;
 
+import java.io.ByteArrayInputStream;
+
 import com.beem.project.beem.R;
 import com.beem.project.beem.service.Contact;
 import com.beem.project.beem.service.Message;
@@ -121,6 +125,7 @@
     private TextView mContactStatusMsgTextView;
     private TextView mContactChatState;
     private ImageView mContactStatusIcon;
+    private LayerDrawable mAvatarStatusDrawable;
     private ListView mMessagesListView;
     private EditText mInputField;
     private Button mSendButton;
@@ -164,6 +169,8 @@
 	    mContactStatusMsgTextView = (TextView) findViewById(R.id.chat_contact_status_msg);
 	    mContactChatState = (TextView) findViewById(R.id.chat_contact_chat_state);
 	    mContactStatusIcon = (ImageView) findViewById(R.id.chat_contact_status_icon);
+	    mAvatarStatusDrawable = (LayerDrawable) mContactStatusIcon.getDrawable();
+	    mAvatarStatusDrawable.setLayerInset(1, 36, 36, 0, 0);
 	} else {
 	    setContentView(R.layout.chat_compact);
 	}
@@ -573,15 +580,42 @@
 	}
     }
 
+
+
     /**
      * Update the contact status icon.
      */
     private void updateContactStatusIcon() {
-	if (!mCompact)
-	    mContactStatusIcon.setImageLevel(mContact.getStatus());
+	if (mCompact)
+	    return ;
+	Drawable avatar = getAvatarDrawable(mContact.getAvatarId());
+	mAvatarStatusDrawable.setDrawableByLayerId(R.id.avatar, avatar);
+	mContactStatusIcon.setImageLevel(mContact.getStatus());
     }
 
     /**
+     * Get a Drawable containing the avatar icon.
+     *
+     * @param avatarId the avatar id to retrieve or null to get default
+     * @return a Drawable
+     */
+    private Drawable getAvatarDrawable(String avatarId) {
+	Drawable avatarDrawable = null;
+	try {
+	    byte[] avatar = mXmppFacade.getAvatar(avatarId);
+	    if (avatar != null) {
+		ByteArrayInputStream in = new ByteArrayInputStream(avatar);
+		avatarDrawable = Drawable.createFromStream(in, avatarId);
+	    }
+	} catch (RemoteException e) {
+	    Log.e(TAG, "Error while setting the avatar", e);
+	}
+	if (avatarDrawable == null)
+	    avatarDrawable = getResources().getDrawable(R.drawable.beem_launcher_icon_silver);
+	return avatarDrawable;
+     }
+
+    /**
      * Prepare the status icons map.
      */
     private void prepareIconsStatus() {