1package eu.siacs.conversations.ui;
2
3import java.util.ArrayList;
4import java.util.List;
5
6import org.openintents.openpgp.util.OpenPgpUtils;
7
8import eu.siacs.conversations.R;
9import eu.siacs.conversations.entities.Conversation;
10import eu.siacs.conversations.entities.MucOptions;
11import eu.siacs.conversations.entities.MucOptions.User;
12import eu.siacs.conversations.utils.UIHelper;
13import android.content.Context;
14import android.content.Intent;
15import android.content.SharedPreferences;
16import android.os.Bundle;
17import android.preference.PreferenceManager;
18import android.util.Log;
19import android.view.LayoutInflater;
20import android.view.Menu;
21import android.view.MenuItem;
22import android.view.View;
23import android.view.View.OnClickListener;
24import android.view.ViewGroup;
25import android.widget.ArrayAdapter;
26import android.widget.Button;
27import android.widget.EditText;
28import android.widget.ImageButton;
29import android.widget.ImageView;
30import android.widget.LinearLayout;
31import android.widget.TextView;
32
33public class MucDetailsActivity extends XmppActivity {
34 public static final String ACTION_VIEW_MUC = "view_muc";
35 private Conversation conversation;
36 private EditText mYourNick;
37 private EditText mSubject;
38 private TextView mRoleAffiliaton;
39 private TextView mFullJid;
40 private LinearLayout membersView;
41 private LinearLayout mMoreDetails;
42 private Button mInviteButton;
43 private String uuid = null;
44 private OnClickListener changeNickListener = new OnClickListener() {
45
46 @Override
47 public void onClick(View arg0) {
48 MucOptions options = conversation.getMucOptions();
49 String nick = mYourNick.getText().toString();
50 if (!options.getNick().equals(nick)) {
51 xmppConnectionService.renameInMuc(conversation, nick);
52 finish();
53 }
54 }
55 };
56
57 private OnClickListener changeSubjectListener = new OnClickListener() {
58
59 @Override
60 public void onClick(View arg0) {
61 String subject = mSubject.getText().toString();
62 MucOptions options = conversation.getMucOptions();
63 if (!subject.equals(options.getSubject())) {
64 xmppConnectionService.sendConversationSubject(conversation,subject);
65 finish();
66 }
67 }
68 };
69
70 private OnClickListener inviteListener = new OnClickListener() {
71
72 @Override
73 public void onClick(View v) {
74 Intent intent = new Intent(getApplicationContext(),
75 ContactsActivity.class);
76 intent.setAction("invite");
77 intent.putExtra("uuid",conversation.getUuid());
78 startActivity(intent);
79 }
80 };
81
82 private List<User> users = new ArrayList<MucOptions.User>();
83
84 @Override
85 protected void onCreate(Bundle savedInstanceState) {
86 super.onCreate(savedInstanceState);
87 setContentView(R.layout.activity_muc_details);
88 mYourNick = (EditText) findViewById(R.id.muc_your_nick);
89 mFullJid = (TextView) findViewById(R.id.muc_jabberid);
90 ImageButton editNickButton = (ImageButton) findViewById(R.id.muc_edit_nick);
91 editNickButton.setOnClickListener(this.changeNickListener);
92 ImageButton editSubjectButton = (ImageButton) findViewById(R.id.muc_edit_subject);
93 editSubjectButton.setOnClickListener(this.changeSubjectListener);
94 membersView = (LinearLayout) findViewById(R.id.muc_members);
95 mMoreDetails = (LinearLayout) findViewById(R.id.muc_more_details);
96 mMoreDetails.setVisibility(View.GONE);
97 mSubject = (EditText) findViewById(R.id.muc_subject);
98 mInviteButton = (Button) findViewById(R.id.invite);
99 mInviteButton.setOnClickListener(inviteListener);
100 getActionBar().setHomeButtonEnabled(true);
101 getActionBar().setDisplayHomeAsUpEnabled(true);
102
103 }
104
105 @Override
106 public boolean onOptionsItemSelected(MenuItem menuItem) {
107 switch (menuItem.getItemId()) {
108 case android.R.id.home:
109 finish();
110 }
111 return super.onOptionsItemSelected(menuItem);
112 }
113
114 public String getReadableRole(int role) {
115 switch (role) {
116 case User.ROLE_MODERATOR:
117 return getString(R.string.moderator);
118 case User.ROLE_PARTICIPANT:
119 return getString(R.string.participant);
120 case User.ROLE_VISITOR:
121 return getString(R.string.visitor);
122 default:
123 return "";
124 }
125 }
126
127 @Override
128 public boolean onCreateOptionsMenu(Menu menu) {
129 getMenuInflater().inflate(R.menu.muc_details, menu);
130 return true;
131 }
132
133 @Override
134 void onBackendConnected() {
135 SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
136 boolean useSubject = preferences.getBoolean("use_subject_in_muc", true);
137 if (getIntent().getAction().equals(ACTION_VIEW_MUC)) {
138 this.uuid = getIntent().getExtras().getString("uuid");
139 }
140 if (uuid != null) {
141 for (Conversation mConv : xmppConnectionService.getConversations()) {
142 if (mConv.getUuid().equals(uuid)) {
143 this.conversation = mConv;
144 }
145 }
146 if (this.conversation != null) {
147 mSubject.setText(conversation.getMucOptions().getSubject());
148 setTitle(conversation.getName(useSubject));
149 mFullJid.setText(conversation.getContactJid().split("/")[0]);
150 mYourNick.setText(conversation.getMucOptions().getNick());
151 mRoleAffiliaton = (TextView) findViewById(R.id.muc_role);
152 if (conversation.getMucOptions().online()) {
153 mMoreDetails.setVisibility(View.VISIBLE);
154 User self = conversation.getMucOptions().getSelf();
155 switch (self.getAffiliation()) {
156 case User.AFFILIATION_ADMIN:
157 mRoleAffiliaton.setText(getReadableRole(self.getRole())
158 + " (" + getString(R.string.admin) + ")");
159 break;
160 case User.AFFILIATION_OWNER:
161 mRoleAffiliaton.setText(getReadableRole(self.getRole())
162 + " (" + getString(R.string.owner) + ")");
163 break;
164 default:
165 mRoleAffiliaton
166 .setText(getReadableRole(self.getRole()));
167 break;
168 }
169 }
170 this.users.clear();
171 this.users.addAll(conversation.getMucOptions().getUsers());
172 //contactsAdapter.notifyDataSetChanged();
173 LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
174 membersView.removeAllViews();
175 for(User contact : conversation.getMucOptions().getUsers()) {
176 View view = (View) inflater.inflate(R.layout.contact, null);
177
178 ((TextView) view.findViewById(R.id.contact_display_name))
179 .setText(contact.getName());
180 TextView role = (TextView) view.findViewById(R.id.contact_jid);
181 if (contact.getPgpKeyId()==0) {
182 role.setText(getReadableRole(contact.getRole()));
183 } else {
184 role.setText(getReadableRole(contact.getRole())+" \u00B7 "+OpenPgpUtils.convertKeyIdToHex(contact.getPgpKeyId()));
185 }
186 ImageView imageView = (ImageView) view
187 .findViewById(R.id.contact_photo);
188 imageView.setImageBitmap(UIHelper.getContactPicture(contact.getName(), 48,this.getApplicationContext(), false));
189 membersView.addView(view);
190 }
191 }
192 } else {
193 Log.d("xmppService","uuid in muc details was null");
194 }
195 }
196}