MucDetailsActivity.java

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