Muc Options even more awesome

This commit is contained in:
Daniel Gultsch 2014-03-04 02:51:01 +01:00
parent 69af009c88
commit 8e4be5256e
15 changed files with 335 additions and 216 deletions

View file

@ -48,7 +48,8 @@
<activity
android:name="eu.siacs.conversations.ui.MucOptionsActivity"
android:label="Conference Details"
android:parentActivityName="eu.siacs.conversations.ui.ConversationActivity" >
android:parentActivityName="eu.siacs.conversations.ui.ConversationActivity"
android:windowSoftInputMode="stateHidden">
</activity>
<activity
android:name="eu.siacs.conversations.ui.NewConversationActivity"

View file

@ -36,42 +36,43 @@ public final class R {
public static final int ic_action_cancel_launchersize=0x7f020007;
public static final int ic_action_cancel_launchersize_light=0x7f020008;
public static final int ic_action_delete=0x7f020009;
public static final int ic_action_group=0x7f02000a;
public static final int ic_action_person=0x7f02000b;
public static final int ic_action_refresh=0x7f02000c;
public static final int ic_action_secure=0x7f02000d;
public static final int ic_action_send=0x7f02000e;
public static final int ic_action_send_now=0x7f02000f;
public static final int ic_action_unsecure=0x7f020010;
public static final int ic_launcher=0x7f020011;
public static final int ic_profile=0x7f020012;
public static final int message_border=0x7f020013;
public static final int notification=0x7f020014;
public static final int red=0x7f020015;
public static final int redbackground=0x7f020016;
public static final int section_header=0x7f020017;
public static final int ic_action_edit=0x7f02000a;
public static final int ic_action_group=0x7f02000b;
public static final int ic_action_person=0x7f02000c;
public static final int ic_action_refresh=0x7f02000d;
public static final int ic_action_secure=0x7f02000e;
public static final int ic_action_send=0x7f02000f;
public static final int ic_action_send_now=0x7f020010;
public static final int ic_action_unsecure=0x7f020011;
public static final int ic_launcher=0x7f020012;
public static final int ic_profile=0x7f020013;
public static final int message_border=0x7f020014;
public static final int notification=0x7f020015;
public static final int red=0x7f020016;
public static final int redbackground=0x7f020017;
public static final int section_header=0x7f020018;
}
public static final class id {
public static final int account_confirm_password_desc=0x7f0a001c;
public static final int account_delete=0x7f0a0041;
public static final int account_disable=0x7f0a0042;
public static final int account_enable=0x7f0a0043;
public static final int account_delete=0x7f0a0042;
public static final int account_disable=0x7f0a0043;
public static final int account_enable=0x7f0a0044;
public static final int account_jid=0x7f0a0000;
public static final int account_list=0x7f0a002b;
public static final int account_password=0x7f0a0019;
public static final int account_password_confirm2=0x7f0a001d;
public static final int account_status=0x7f0a0002;
public static final int account_usetls=0x7f0a001a;
public static final int action_accounts=0x7f0a003b;
public static final int action_add=0x7f0a0036;
public static final int action_add_account=0x7f0a0040;
public static final int action_archive=0x7f0a003a;
public static final int action_contact_details=0x7f0a0038;
public static final int action_muc_details=0x7f0a0039;
public static final int action_refresh_contacts=0x7f0a0045;
public static final int action_security=0x7f0a0037;
public static final int action_settings=0x7f0a003c;
public static final int announce_pgp=0x7f0a0044;
public static final int action_accounts=0x7f0a003c;
public static final int action_add=0x7f0a0037;
public static final int action_add_account=0x7f0a0041;
public static final int action_archive=0x7f0a003b;
public static final int action_contact_details=0x7f0a0039;
public static final int action_muc_details=0x7f0a003a;
public static final int action_refresh_contacts=0x7f0a0046;
public static final int action_security=0x7f0a0038;
public static final int action_settings=0x7f0a003d;
public static final int announce_pgp=0x7f0a0045;
public static final int contactList=0x7f0a0006;
public static final int contact_display_name=0x7f0a0008;
public static final int contact_jid=0x7f0a0009;
@ -89,23 +90,24 @@ public final class R {
public static final int details_receive_presence=0x7f0a0014;
public static final int details_send_presence=0x7f0a0013;
public static final int edit_account_register_new=0x7f0a001b;
public static final int encryption_choice_none=0x7f0a003d;
public static final int encryption_choice_otr=0x7f0a003e;
public static final int encryption_choice_pgp=0x7f0a003f;
public static final int encryption_choice_none=0x7f0a003e;
public static final int encryption_choice_otr=0x7f0a003f;
public static final int encryption_choice_pgp=0x7f0a0040;
public static final int imageView1=0x7f0a0030;
public static final int info_box=0x7f0a0022;
public static final int list=0x7f0a0029;
public static final int message_body=0x7f0a002d;
public static final int message_photo=0x7f0a002c;
public static final int message_time=0x7f0a002e;
public static final int messages_view=0x7f0a0021;
public static final int muc_edit_nick=0x7f0a0031;
public static final int muc_error=0x7f0a0023;
public static final int muc_error_msg=0x7f0a0024;
public static final int muc_moderators=0x7f0a0031;
public static final int muc_moderators_header=0x7f0a0030;
public static final int muc_participants=0x7f0a0033;
public static final int muc_participants_header=0x7f0a0032;
public static final int muc_visitors=0x7f0a0035;
public static final int muc_visitors_header=0x7f0a0034;
public static final int muc_jabberid=0x7f0a0032;
public static final int muc_members=0x7f0a0036;
public static final int muc_more_details=0x7f0a0033;
public static final int muc_participants_header=0x7f0a0035;
public static final int muc_role=0x7f0a0034;
public static final int muc_your_nick=0x7f0a002f;
public static final int new_conversation_search=0x7f0a0004;
public static final int new_fingerprint=0x7f0a0025;
@ -160,11 +162,14 @@ public final class R {
public static final int conference_details=0x7f050010;
public static final int encrypted_message=0x7f05000f;
public static final int just_now=0x7f05000c;
public static final int moderator=0x7f050012;
public static final int nick_in_use=0x7f050011;
public static final int openpgp_install_openkeychain_via=0x7f050001;
public static final int openpgp_list_preference_none=0x7f050000;
public static final int participant=0x7f050013;
public static final int sending=0x7f05000d;
public static final int title_activity_new_conversation=0x7f05000b;
public static final int visitor=0x7f050014;
}
public static final class style {
/**

Binary file not shown.

After

Width:  |  Height:  |  Size: 884 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 587 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 587 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

View file

@ -3,7 +3,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#e5e5e5" >
android:background="#e5e5e5">
<RelativeLayout
android:background="#eee"
@ -11,7 +11,7 @@
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true" >
android:layout_alignParentLeft="true">
<EditText
android:id="@+id/textinput"

View file

@ -1,76 +1,114 @@
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="8dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Your nickname"
android:textColor="#33B5E5"
android:textSize="20sp" />
android:background="#e5e5e5">
<EditText
android:id="@+id/muc_your_nick"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textEmailAddress"
android:padding="8dp"
/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TextView
android:paddingTop="16dp"
android:id="@+id/muc_moderators_header"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Moderators"
android:textColor="#33B5E5"
android:textSize="20sp" />
<TextView
android:id="@+id/muc_moderators"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Romeo"
android:singleLine="true"
android:textSize="16sp"
android:paddingLeft="8dp"
android:paddingBottom="8dp"/>
<TextView
style="@style/sectionHeader"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="8dp"
android:paddingRight="8dp"
android:paddingTop="8dp"
android:text="Your nickname" />
<TextView
android:id="@+id/muc_participants_header"
android:paddingTop="8dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Participants"
android:textColor="#33B5E5"
android:textSize="20sp" />
<TextView
android:id="@+id/muc_participants"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Juilett"
android:singleLine="true"
android:textSize="16sp"
android:paddingLeft="8dp"
android:paddingBottom="8dp"/>
<TextView
android:id="@+id/muc_visitors_header"
android:paddingTop="8dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Visitors"
android:textColor="#33B5E5"
android:textSize="20sp" />
<TextView
android:id="@+id/muc_visitors"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Benvolio"
android:singleLine="true"
android:textSize="16sp"
android:paddingLeft="8dp"
android:paddingBottom="8dp"/>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#eee" >
<EditText
android:id="@+id/muc_your_nick"
android:layout_width="wrap_content"
android:layout_height="48dp"
android:layout_alignParentLeft="true"
android:layout_toLeftOf="@+id/imageView1"
android:background="#eee"
android:ems="10"
android:hint="Search or enter Jabber ID"
android:inputType="textEmailAddress"
android:paddingBottom="12dp"
android:paddingLeft="8dp"
android:paddingRight="8dp"
android:paddingTop="12dp" />
<ImageButton
android:id="@+id/muc_edit_nick"
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:layout_centerVertical="true"
android:background="?android:selectableItemBackground"
android:padding="8dp"
android:src="@drawable/ic_action_edit" />
</RelativeLayout>
<TextView
style="@style/sectionHeader"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="8dp"
android:text="Jabber ID" />
<TextView
android:id="@+id/muc_jabberid"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="8dp"
android:singleLine="true"
android:textColor="#5b5b5b"
android:textSize="18sp"/>
<LinearLayout
android:id="@+id/muc_more_details"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<TextView
style="@style/sectionHeader"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="8dp"
android:text="Your role" />
<TextView
android:id="@+id/muc_role"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="8dp"
android:singleLine="true"
android:textSize="18sp"
android:textColor="#5b5b5b"/>
<TextView
android:id="@+id/muc_participants_header"
style="@style/sectionHeader"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="8dp"
android:paddingRight="8dp"
android:paddingTop="8dp"
android:text="Other Members" />
<LinearLayout
android:id="@+id/muc_members"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"
android:orientation="vertical"
android:divider="?android:dividerHorizontal"
android:showDividers="middle"
>
</LinearLayout>
</LinearLayout>
</LinearLayout>
</ScrollView>

View file

@ -17,4 +17,7 @@
<string name="encrypted_message">Decrypting message. please wait&#8230;</string>
<string name="conference_details">Conference Details</string>
<string name="nick_in_use">Nickname is already in use</string>
<string name="moderator">Moderator</string>
<string name="participant">Participant</string>
<string name="visitor">Visitor</string>
</resources>

View file

@ -3,6 +3,7 @@ package eu.siacs.conversations.entities;
import java.util.ArrayList;
import java.util.List;
import eu.siacs.conversations.entities.MucOptions.User;
import eu.siacs.conversations.xml.Element;
import eu.siacs.conversations.xmpp.PresencePacket;
import android.annotation.SuppressLint;
@ -75,6 +76,7 @@ public class MucOptions {
private boolean isOnline = false;
private int error = 0;
private OnRenameListener renameListener = null;
private User self = new User();
public void deleteUser(String name) {
@ -107,12 +109,14 @@ public class MucOptions {
user.setAffiliation(item.getAttribute("affiliation"));
user.setRole(item.getAttribute("role"));
user.setName(name);
addUser(user);
Log.d("xmppService","nick: "+getNick());
Log.d("xmppService","name: "+name);
if (name.equals(getNick())) {
this.isOnline = true;
this.error = 0;
self = user;
} else {
addUser(user);
}
} else if (type.equals("unavailable")) {
Log.d("xmppService","name: "+name);
@ -179,4 +183,8 @@ public class MucOptions {
this.error = 0;
this.isOnline = false;
}
public User getSelf() {
return self;
}
}

View file

@ -307,9 +307,10 @@ public class ConversationActivity extends XmppActivity {
}
break;
case R.id.action_muc_details:
DialogMucDetails mucDetails = new DialogMucDetails();
mucDetails.setConversation(getSelectedConversation());
mucDetails.show(getFragmentManager(), "details");
Intent intent = new Intent(this,MucOptionsActivity.class);
intent.setAction(MucOptionsActivity.ACTION_VIEW_MUC);
intent.putExtra("uuid", getSelectedConversation().getUuid());
startActivity(intent);
break;
case R.id.action_security:
final Conversation selConv = getSelectedConversation();

View file

@ -24,6 +24,7 @@ import eu.siacs.conversations.utils.UIHelper;
import android.app.AlertDialog;
import android.app.Fragment;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentSender;
import android.content.SharedPreferences;
import android.content.IntentSender.SendIntentException;
@ -36,8 +37,10 @@ import android.os.Bundle;
import android.preference.PreferenceManager;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.EditText;
@ -96,6 +99,7 @@ public class ConversationFragment extends Fragment {
}
}
};
private LinearLayout pgpInfo;
private LinearLayout mucError;
private TextView mucErrorText;
@ -103,9 +107,10 @@ public class ConversationFragment extends Fragment {
@Override
public void onClick(View v) {
DialogMucDetails mucDetails = new DialogMucDetails();
mucDetails.setConversation(conversation);
mucDetails.show(getFragmentManager(), "details");
Intent intent = new Intent(getActivity(),MucOptionsActivity.class);
intent.setAction(MucOptionsActivity.ACTION_VIEW_MUC);
intent.putExtra("uuid", conversation.getUuid());
startActivity(intent);
}
};

View file

@ -1,100 +0,0 @@
package eu.siacs.conversations.ui;
import eu.siacs.conversations.R;
import eu.siacs.conversations.entities.Conversation;
import eu.siacs.conversations.entities.MucOptions;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.DialogFragment;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
public class DialogMucDetails extends DialogFragment {
private XmppActivity activity;
private Conversation conversation;
private EditText mYourNick;
private OnClickListener changeNickListener = new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
MucOptions options = conversation.getMucOptions();
String nick = mYourNick.getText().toString();
if (!options.getNick().equals(nick)) {
activity.xmppConnectionService.renameInMuc(conversation,nick,activity);
}
}
};
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
this.activity = (XmppActivity) getActivity();
AlertDialog.Builder builder = new AlertDialog.Builder(this.activity);
LayoutInflater inflater = getActivity().getLayoutInflater();
View view = inflater.inflate(R.layout.muc_options, null);
builder.setView(view);
builder.setTitle(getString(R.string.conference_details));
mYourNick = (EditText) view.findViewById(R.id.muc_your_nick);
TextView mTextModerators = (TextView) view.findViewById(R.id.muc_moderators);
TextView mTextParticipants = (TextView) view.findViewById(R.id.muc_participants);
TextView mTextVisiotors = (TextView) view.findViewById(R.id.muc_visitors);
TextView mTextModeratorsHead = (TextView) view.findViewById(R.id.muc_moderators_header);
TextView mTextParticipantsHead = (TextView) view.findViewById(R.id.muc_participants_header);
TextView mTextVisiotorsHead = (TextView) view.findViewById(R.id.muc_visitors_header);
StringBuilder mods = new StringBuilder();
StringBuilder participants = new StringBuilder();
StringBuilder visitors = new StringBuilder();
for(MucOptions.User user : conversation.getMucOptions().getUsers()) {
if (user.getRole() == MucOptions.User.ROLE_MODERATOR) {
if (mods.length()>=1) {
mods.append("\n, "+user.getName());
} else {
mods.append(user.getName());
}
} else if (user.getRole() == MucOptions.User.ROLE_PARTICIPANT) {
if (participants.length()>=1) {
participants.append("\n, "+user.getName());
} else {
participants.append(user.getName());
}
} else {
if (visitors.length()>=1) {
visitors.append("\n, "+user.getName());
} else {
visitors.append(user.getName());
}
}
}
if (mods.length()>0) {
mTextModerators.setText(mods.toString());
} else {
mTextModerators.setVisibility(View.GONE);
mTextModeratorsHead.setVisibility(View.GONE);
}
if (participants.length()>0) {
mTextParticipants.setText(participants.toString());
} else {
mTextParticipants.setVisibility(View.GONE);
mTextParticipantsHead.setVisibility(View.GONE);
}
if (visitors.length()>0) {
mTextVisiotors.setText(visitors.toString());
} else {
mTextVisiotors.setVisibility(View.GONE);
mTextVisiotorsHead.setVisibility(View.GONE);
}
mYourNick.setText(conversation.getMucOptions().getNick());
builder.setPositiveButton("Done", this.changeNickListener );
builder.setNegativeButton("Cancel", null);
return builder.create();
}
public void setConversation(Conversation conversation) {
this.conversation = conversation;
}
}

View file

@ -0,0 +1,158 @@
package eu.siacs.conversations.ui;
import java.util.ArrayList;
import java.util.List;
import eu.siacs.conversations.R;
import eu.siacs.conversations.entities.Conversation;
import eu.siacs.conversations.entities.MucOptions;
import eu.siacs.conversations.entities.MucOptions.User;
import eu.siacs.conversations.utils.UIHelper;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
public class MucOptionsActivity extends XmppActivity {
public static final String ACTION_VIEW_MUC = "view_muc";
private XmppActivity activity = this;
private Conversation conversation;
private EditText mYourNick;
private TextView mRoleAffiliaton;
private TextView mFullJid;
private LinearLayout membersView;
private TextView mTextParticipantsHead;
private LinearLayout mMoreDetails;
private String uuid = null;
private ArrayAdapter<User> contactsAdapter;
private OnClickListener changeNickListener = new OnClickListener() {
@Override
public void onClick(View arg0) {
Log.d("gultsch","on click change muc");
MucOptions options = conversation.getMucOptions();
String nick = mYourNick.getText().toString();
if (!options.getNick().equals(nick)) {
Log.d("gultsch","call to change muc");
xmppConnectionService.renameInMuc(conversation, nick, activity);
finish();
}
}
};
private List<User> users = new ArrayList<MucOptions.User>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getIntent().getAction().equals(ACTION_VIEW_MUC)) {
this.uuid = getIntent().getExtras().getString("uuid");
}
setContentView(R.layout.muc_options);
mYourNick = (EditText) findViewById(R.id.muc_your_nick);
mTextParticipantsHead = (TextView) findViewById(R.id.muc_participants_header);
mFullJid = (TextView) findViewById(R.id.muc_jabberid);
ImageButton imageButton = (ImageButton) findViewById(R.id.muc_edit_nick);
imageButton.setOnClickListener(this.changeNickListener);
membersView = (LinearLayout) findViewById(R.id.muc_members);
mMoreDetails = (LinearLayout) findViewById(R.id.muc_more_details);
mMoreDetails.setVisibility(View.GONE);
contactsAdapter = new ArrayAdapter<MucOptions.User>(this,
R.layout.contact, users) {
@Override
public View getView(int position, View view, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
User contact = getItem(position);
if (view == null) {
view = (View) inflater.inflate(R.layout.contact, null);
}
((TextView) view.findViewById(R.id.contact_display_name))
.setText(getItem(position).getName());
TextView role = (TextView) view.findViewById(R.id.contact_jid);
role.setText(getReadableRole(contact.getRole()));
ImageView imageView = (ImageView) view
.findViewById(R.id.contact_photo);
imageView.setImageBitmap(UIHelper.getUnknownContactPicture(
getItem(position).getName(), 90));
return view;
}
};
}
public void setConversation(Conversation conversation) {
this.conversation = conversation;
}
public String getReadableRole(int role) {
switch (role) {
case User.ROLE_MODERATOR:
return getString(R.string.moderator);
case User.ROLE_PARTICIPANT:
return getString(R.string.participant);
case User.ROLE_VISITOR:
return getString(R.string.visitor);
default:
return "";
}
}
@Override
void onBackendConnected() {
if (uuid != null) {
for (Conversation mConv : xmppConnectionService.getConversations()) {
if (mConv.getUuid().equals(uuid)) {
this.conversation = mConv;
}
}
if (this.conversation != null) {
mFullJid.setText(conversation.getContactJid().split("/")[0]);
mYourNick.setText(conversation.getMucOptions().getNick());
mRoleAffiliaton = (TextView) findViewById(R.id.muc_role);
if (conversation.getMucOptions().online()) {
mMoreDetails.setVisibility(View.VISIBLE);
User self = conversation.getMucOptions().getSelf();
switch (self.getAffiliation()) {
case User.AFFILIATION_ADMIN:
mRoleAffiliaton.setText(getReadableRole(self.getRole())
+ " (Admin)");
break;
case User.AFFILIATION_OWNER:
mRoleAffiliaton.setText(getReadableRole(self.getRole())
+ " (Owner)");
break;
default:
mRoleAffiliaton
.setText(getReadableRole(self.getRole()));
break;
}
}
this.users.clear();
this.users.addAll(conversation.getMucOptions().getUsers());
contactsAdapter.notifyDataSetChanged();
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
for(User contact : conversation.getMucOptions().getUsers()) {
View view = (View) inflater.inflate(R.layout.contact, null);
((TextView) view.findViewById(R.id.contact_display_name))
.setText(contact.getName());
TextView role = (TextView) view.findViewById(R.id.contact_jid);
role.setText(getReadableRole(contact.getRole()));
ImageView imageView = (ImageView) view
.findViewById(R.id.contact_photo);
imageView.setImageBitmap(UIHelper.getUnknownContactPicture(contact.getName(), 90));
membersView.addView(view);
}
}
}
}
}