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