MucDetailsActivity.java

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