migrated conference details to binding
This commit is contained in:
		
							parent
							
								
									25a49a28ce
								
							
						
					
					
						commit
						0c58e7cc30
					
				| @ -4,7 +4,6 @@ import android.databinding.DataBindingUtil; | ||||
| import android.support.v7.app.AlertDialog; | ||||
| import android.app.PendingIntent; | ||||
| import android.content.Context; | ||||
| import android.content.DialogInterface; | ||||
| import android.content.IntentSender.SendIntentException; | ||||
| import android.content.res.Resources; | ||||
| import android.graphics.Bitmap; | ||||
| @ -12,20 +11,13 @@ import android.graphics.drawable.BitmapDrawable; | ||||
| import android.graphics.drawable.Drawable; | ||||
| import android.os.AsyncTask; | ||||
| import android.os.Bundle; | ||||
| import android.support.v7.widget.CardView; | ||||
| import android.view.ContextMenu; | ||||
| import android.view.LayoutInflater; | ||||
| import android.view.Menu; | ||||
| import android.view.MenuItem; | ||||
| import android.view.View; | ||||
| import android.view.View.OnClickListener; | ||||
| import android.widget.Button; | ||||
| import android.widget.ImageButton; | ||||
| import android.widget.ImageView; | ||||
| import android.widget.LinearLayout; | ||||
| import android.widget.RelativeLayout; | ||||
| import android.widget.TableLayout; | ||||
| import android.widget.TextView; | ||||
| import android.widget.Toast; | ||||
| 
 | ||||
| import org.openintents.openpgp.util.OpenPgpUtils; | ||||
| @ -39,6 +31,7 @@ import java.util.concurrent.atomic.AtomicInteger; | ||||
| import eu.siacs.conversations.Config; | ||||
| import eu.siacs.conversations.R; | ||||
| import eu.siacs.conversations.crypto.PgpEngine; | ||||
| import eu.siacs.conversations.databinding.ActivityMucDetailsBinding; | ||||
| import eu.siacs.conversations.databinding.ContactBinding; | ||||
| import eu.siacs.conversations.entities.Account; | ||||
| import eu.siacs.conversations.entities.Bookmark; | ||||
| @ -65,20 +58,7 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers | ||||
| 			inviteToConversation(mConversation); | ||||
| 		} | ||||
| 	}; | ||||
| 	private TextView mYourNick; | ||||
| 	private ImageView mYourPhoto; | ||||
| 	private TextView mFullJid; | ||||
| 	private TextView mAccountJid; | ||||
| 	private LinearLayout membersView; | ||||
| 	private CardView mMoreDetails; | ||||
| 	private RelativeLayout mMucSettings; | ||||
| 	private TextView mConferenceType; | ||||
| 	private TableLayout mConferenceInfoTable; | ||||
| 	private TextView mConferenceInfoMam; | ||||
| 	private TextView mNotifyStatusText; | ||||
| 	private ImageButton mChangeConferenceSettingsButton; | ||||
| 	private ImageButton mNotifyStatusButton; | ||||
| 	private Button mInviteButton; | ||||
| 	private ActivityMucDetailsBinding binding; | ||||
| 	private String uuid = null; | ||||
| 	private User mSelectedUser = null; | ||||
| 
 | ||||
| @ -87,24 +67,16 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers | ||||
| 	private UiCallback<Conversation> renameCallback = new UiCallback<Conversation>() { | ||||
| 		@Override | ||||
| 		public void success(Conversation object) { | ||||
| 			runOnUiThread(new Runnable() { | ||||
| 				@Override | ||||
| 				public void run() { | ||||
| 					Toast.makeText(ConferenceDetailsActivity.this,getString(R.string.your_nick_has_been_changed),Toast.LENGTH_SHORT).show(); | ||||
| 					updateView(); | ||||
| 				} | ||||
| 			runOnUiThread(() -> { | ||||
| 				Toast.makeText(ConferenceDetailsActivity.this, getString(R.string.your_nick_has_been_changed), Toast.LENGTH_SHORT).show(); | ||||
| 				updateView(); | ||||
| 			}); | ||||
| 
 | ||||
| 		} | ||||
| 
 | ||||
| 		@Override | ||||
| 		public void error(final int errorCode, Conversation object) { | ||||
| 			runOnUiThread(new Runnable() { | ||||
| 				@Override | ||||
| 				public void run() { | ||||
| 					Toast.makeText(ConferenceDetailsActivity.this,getString(errorCode),Toast.LENGTH_SHORT).show(); | ||||
| 				} | ||||
| 			}); | ||||
| 			runOnUiThread(() -> Toast.makeText(ConferenceDetailsActivity.this, getString(errorCode), Toast.LENGTH_SHORT).show()); | ||||
| 		} | ||||
| 
 | ||||
| 		@Override | ||||
| @ -124,30 +96,22 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers | ||||
| 					getString(R.string.notify_never) | ||||
| 			}; | ||||
| 			final AtomicInteger choice; | ||||
| 			if (mConversation.getLongAttribute(Conversation.ATTRIBUTE_MUTED_TILL,0) == Long.MAX_VALUE) { | ||||
| 			if (mConversation.getLongAttribute(Conversation.ATTRIBUTE_MUTED_TILL, 0) == Long.MAX_VALUE) { | ||||
| 				choice = new AtomicInteger(2); | ||||
| 			} else { | ||||
| 				choice = new AtomicInteger(mConversation.alwaysNotify() ? 0 : 1); | ||||
| 			} | ||||
| 			builder.setSingleChoiceItems(choices, choice.get(), new DialogInterface.OnClickListener() { | ||||
| 				@Override | ||||
| 				public void onClick(DialogInterface dialog, int which) { | ||||
| 					choice.set(which); | ||||
| 				} | ||||
| 			}); | ||||
| 			builder.setSingleChoiceItems(choices, choice.get(), (dialog, which) -> choice.set(which)); | ||||
| 			builder.setNegativeButton(R.string.cancel, null); | ||||
| 			builder.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { | ||||
| 				@Override | ||||
| 				public void onClick(DialogInterface dialog, int which) { | ||||
| 					if (choice.get() == 2) { | ||||
| 						mConversation.setMutedTill(Long.MAX_VALUE); | ||||
| 					} else { | ||||
| 						mConversation.setMutedTill(0); | ||||
| 						mConversation.setAttribute(Conversation.ATTRIBUTE_ALWAYS_NOTIFY,String.valueOf(choice.get() == 0)); | ||||
| 					} | ||||
| 					xmppConnectionService.updateConversation(mConversation); | ||||
| 					updateView(); | ||||
| 			builder.setPositiveButton(R.string.ok, (dialog, which) -> { | ||||
| 				if (choice.get() == 2) { | ||||
| 					mConversation.setMutedTill(Long.MAX_VALUE); | ||||
| 				} else { | ||||
| 					mConversation.setMutedTill(0); | ||||
| 					mConversation.setAttribute(Conversation.ATTRIBUTE_ALWAYS_NOTIFY, String.valueOf(choice.get() == 0)); | ||||
| 				} | ||||
| 				xmppConnectionService.updateConversation(mConversation); | ||||
| 				updateView(); | ||||
| 			}); | ||||
| 			builder.create().show(); | ||||
| 		} | ||||
| @ -182,34 +146,26 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers | ||||
| 						mucOptions.nonanonymous() | ||||
| 				}; | ||||
| 			} | ||||
| 			builder.setMultiChoiceItems(options,values,new DialogInterface.OnMultiChoiceClickListener() { | ||||
| 				@Override | ||||
| 				public void onClick(DialogInterface dialog, int which, boolean isChecked) { | ||||
| 					values[which] = isChecked; | ||||
| 				} | ||||
| 			}); | ||||
| 			builder.setMultiChoiceItems(options, values, (dialog, which, isChecked) -> values[which] = isChecked); | ||||
| 			builder.setNegativeButton(R.string.cancel, null); | ||||
| 			builder.setPositiveButton(R.string.confirm,new DialogInterface.OnClickListener() { | ||||
| 				@Override | ||||
| 				public void onClick(DialogInterface dialog, int which) { | ||||
| 					if (!mucOptions.membersOnly() && values[0]) { | ||||
| 						xmppConnectionService.changeAffiliationsInConference(mConversation, | ||||
| 								MucOptions.Affiliation.NONE, | ||||
| 								MucOptions.Affiliation.MEMBER); | ||||
| 					} | ||||
| 					Bundle options = new Bundle(); | ||||
| 					options.putString("muc#roomconfig_membersonly", values[0] ? "1" : "0"); | ||||
| 					if (values.length == 2) { | ||||
| 						options.putString("muc#roomconfig_whois", values[1] ? "anyone" : "moderators"); | ||||
| 					} else if (values.length == 3) { | ||||
| 						options.putString("muc#roomconfig_moderatedroom", values[1] ? "1" : "0"); | ||||
| 						options.putString("muc#roomconfig_whois", values[2] ? "anyone" : "moderators"); | ||||
| 					} | ||||
| 					options.putString("muc#roomconfig_persistentroom", "1"); | ||||
| 					xmppConnectionService.pushConferenceConfiguration(mConversation, | ||||
| 							options, | ||||
| 							ConferenceDetailsActivity.this); | ||||
| 			builder.setPositiveButton(R.string.confirm, (dialog, which) -> { | ||||
| 				if (!mucOptions.membersOnly() && values[0]) { | ||||
| 					xmppConnectionService.changeAffiliationsInConference(mConversation, | ||||
| 							MucOptions.Affiliation.NONE, | ||||
| 							MucOptions.Affiliation.MEMBER); | ||||
| 				} | ||||
| 				Bundle options1 = new Bundle(); | ||||
| 				options1.putString("muc#roomconfig_membersonly", values[0] ? "1" : "0"); | ||||
| 				if (values.length == 2) { | ||||
| 					options1.putString("muc#roomconfig_whois", values[1] ? "anyone" : "moderators"); | ||||
| 				} else if (values.length == 3) { | ||||
| 					options1.putString("muc#roomconfig_moderatedroom", values[1] ? "1" : "0"); | ||||
| 					options1.putString("muc#roomconfig_whois", values[2] ? "anyone" : "moderators"); | ||||
| 				} | ||||
| 				options1.putString("muc#roomconfig_persistentroom", "1"); | ||||
| 				xmppConnectionService.pushConferenceConfiguration(mConversation, | ||||
| 						options1, | ||||
| 						ConferenceDetailsActivity.this); | ||||
| 			}); | ||||
| 			builder.create().show(); | ||||
| 		} | ||||
| @ -218,11 +174,36 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers | ||||
| 
 | ||||
| 		@Override | ||||
| 		public String onValueEdited(String value) { | ||||
| 			xmppConnectionService.pushSubjectToConference(mConversation,value); | ||||
| 			xmppConnectionService.pushSubjectToConference(mConversation, value); | ||||
| 			return null; | ||||
| 		} | ||||
| 	}; | ||||
| 
 | ||||
| 	public static boolean cancelPotentialWork(User user, ImageView imageView) { | ||||
| 		final BitmapWorkerTask bitmapWorkerTask = getBitmapWorkerTask(imageView); | ||||
| 
 | ||||
| 		if (bitmapWorkerTask != null) { | ||||
| 			final User old = bitmapWorkerTask.o; | ||||
| 			if (old == null || user != old) { | ||||
| 				bitmapWorkerTask.cancel(true); | ||||
| 			} else { | ||||
| 				return false; | ||||
| 			} | ||||
| 		} | ||||
| 		return true; | ||||
| 	} | ||||
| 
 | ||||
| 	private static BitmapWorkerTask getBitmapWorkerTask(ImageView imageView) { | ||||
| 		if (imageView != null) { | ||||
| 			final Drawable drawable = imageView.getDrawable(); | ||||
| 			if (drawable instanceof AsyncDrawable) { | ||||
| 				final AsyncDrawable asyncDrawable = (AsyncDrawable) drawable; | ||||
| 				return asyncDrawable.getBitmapWorkerTask(); | ||||
| 			} | ||||
| 		} | ||||
| 		return null; | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void onConversationUpdate() { | ||||
| 		refreshUi(); | ||||
| @ -241,41 +222,26 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers | ||||
| 	@Override | ||||
| 	protected void onCreate(Bundle savedInstanceState) { | ||||
| 		super.onCreate(savedInstanceState); | ||||
| 		setContentView(R.layout.activity_muc_details); | ||||
| 		mYourNick = findViewById(R.id.muc_your_nick); | ||||
| 		mYourPhoto = findViewById(R.id.your_photo); | ||||
| 		ImageButton mEditNickButton = findViewById(R.id.edit_nick_button); | ||||
| 		mFullJid = findViewById(R.id.muc_jabberid); | ||||
| 		membersView = findViewById(R.id.muc_members); | ||||
| 		mAccountJid = findViewById(R.id.details_account); | ||||
| 		mMucSettings = findViewById(R.id.muc_settings); | ||||
| 		mMoreDetails = findViewById(R.id.muc_more_details); | ||||
| 		mMoreDetails.setVisibility(View.GONE); | ||||
| 		mChangeConferenceSettingsButton = findViewById(R.id.change_conference_button); | ||||
| 		mChangeConferenceSettingsButton.setOnClickListener(this.mChangeConferenceSettings); | ||||
| 		mInviteButton = findViewById(R.id.invite); | ||||
| 		mInviteButton.setOnClickListener(inviteListener); | ||||
| 		mConferenceType = findViewById(R.id.muc_conference_type); | ||||
| 		this.binding = DataBindingUtil.setContentView(this, R.layout.activity_muc_details); | ||||
| 		this.binding.mucMoreDetails.setVisibility(View.GONE); | ||||
| 		this.binding.changeConferenceButton.setOnClickListener(this.mChangeConferenceSettings); | ||||
| 		this.binding.invite.setOnClickListener(inviteListener); | ||||
| 		if (getSupportActionBar() != null) { | ||||
| 			getSupportActionBar().setHomeButtonEnabled(true); | ||||
| 			getSupportActionBar().setDisplayHomeAsUpEnabled(true); | ||||
| 		} | ||||
| 		mEditNickButton.setOnClickListener(v -> quickEdit(mConversation.getMucOptions().getActualNick(), | ||||
| 		this.binding.editNickButton.setOnClickListener(v -> quickEdit(mConversation.getMucOptions().getActualNick(), | ||||
| 				0, | ||||
| 				value -> { | ||||
| 					if (xmppConnectionService.renameInMuc(mConversation,value,renameCallback)) { | ||||
| 					if (xmppConnectionService.renameInMuc(mConversation, value, renameCallback)) { | ||||
| 						return null; | ||||
| 					} else { | ||||
| 						return getString(R.string.invalid_username); | ||||
| 					} | ||||
| 				})); | ||||
| 		this.mAdvancedMode = getPreferences().getBoolean("advanced_muc_mode", false); | ||||
| 		this.mConferenceInfoTable = (TableLayout) findViewById(R.id.muc_info_more); | ||||
| 		this.mConferenceInfoTable.setVisibility(this.mAdvancedMode ? View.VISIBLE : View.GONE); | ||||
| 		this.mConferenceInfoMam = (TextView) findViewById(R.id.muc_info_mam); | ||||
| 		this.mNotifyStatusButton = (ImageButton) findViewById(R.id.notification_status_button); | ||||
| 		this.mNotifyStatusButton.setOnClickListener(this.mNotifyStatusClickListener); | ||||
| 		this.mNotifyStatusText = (TextView) findViewById(R.id.notification_status_text); | ||||
| 		this.binding.mucInfoMore.setVisibility(this.mAdvancedMode ? View.VISIBLE : View.GONE); | ||||
| 		this.binding.notificationStatusButton.setOnClickListener(this.mNotifyStatusClickListener); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| @ -317,7 +283,7 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers | ||||
| 				menuItem.setChecked(this.mAdvancedMode); | ||||
| 				getPreferences().edit().putBoolean("advanced_muc_mode", mAdvancedMode).apply(); | ||||
| 				final boolean online = mConversation != null && mConversation.getMucOptions().online(); | ||||
| 				mConferenceInfoTable.setVisibility(this.mAdvancedMode && online ? View.VISIBLE : View.GONE); | ||||
| 				this.binding.mucInfoMore.setVisibility(this.mAdvancedMode && online ? View.VISIBLE : View.GONE); | ||||
| 				invalidateOptionsMenu(); | ||||
| 				updateView(); | ||||
| 				break; | ||||
| @ -329,9 +295,9 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers | ||||
| 	protected String getShareableUri(boolean http) { | ||||
| 		if (mConversation != null) { | ||||
| 			if (http) { | ||||
| 				return "https://conversations.im/j/"+ mConversation.getJid().asBareJid().toEscapedString(); | ||||
| 				return "https://conversations.im/j/" + mConversation.getJid().asBareJid().toEscapedString(); | ||||
| 			} else { | ||||
| 				return "xmpp:"+mConversation.getJid().asBareJid()+"?join"; | ||||
| 				return "xmpp:" + mConversation.getJid().asBareJid() + "?join"; | ||||
| 			} | ||||
| 		} else { | ||||
| 			return null; | ||||
| @ -369,7 +335,7 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers | ||||
| 	public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { | ||||
| 		Object tag = v.getTag(); | ||||
| 		if (tag instanceof User) { | ||||
| 			getMenuInflater().inflate(R.menu.muc_details_context,menu); | ||||
| 			getMenuInflater().inflate(R.menu.muc_details_context, menu); | ||||
| 			final User user = (User) tag; | ||||
| 			final User self = mConversation.getMucOptions().getSelf(); | ||||
| 			this.mSelectedUser = user; | ||||
| @ -377,7 +343,7 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers | ||||
| 			final Contact contact = user.getContact(); | ||||
| 			if (contact != null && contact.showInRoster()) { | ||||
| 				name = contact.getDisplayName(); | ||||
| 			} else if (user.getRealJid() != null){ | ||||
| 			} else if (user.getRealJid() != null) { | ||||
| 				name = user.getRealJid().asBareJid().toString(); | ||||
| 			} else { | ||||
| 				name = user.getName(); | ||||
| @ -441,29 +407,29 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers | ||||
| 				startConversation(mSelectedUser); | ||||
| 				return true; | ||||
| 			case R.id.give_admin_privileges: | ||||
| 				xmppConnectionService.changeAffiliationInConference(mConversation, jid, MucOptions.Affiliation.ADMIN,this); | ||||
| 				xmppConnectionService.changeAffiliationInConference(mConversation, jid, MucOptions.Affiliation.ADMIN, this); | ||||
| 				return true; | ||||
| 			case R.id.give_membership: | ||||
| 				xmppConnectionService.changeAffiliationInConference(mConversation, jid, MucOptions.Affiliation.MEMBER,this); | ||||
| 				xmppConnectionService.changeAffiliationInConference(mConversation, jid, MucOptions.Affiliation.MEMBER, this); | ||||
| 				return true; | ||||
| 			case R.id.remove_membership: | ||||
| 				xmppConnectionService.changeAffiliationInConference(mConversation, jid, MucOptions.Affiliation.NONE,this); | ||||
| 				xmppConnectionService.changeAffiliationInConference(mConversation, jid, MucOptions.Affiliation.NONE, this); | ||||
| 				return true; | ||||
| 			case R.id.remove_admin_privileges: | ||||
| 				xmppConnectionService.changeAffiliationInConference(mConversation, jid, MucOptions.Affiliation.MEMBER,this); | ||||
| 				xmppConnectionService.changeAffiliationInConference(mConversation, jid, MucOptions.Affiliation.MEMBER, this); | ||||
| 				return true; | ||||
| 			case R.id.remove_from_room: | ||||
| 				removeFromRoom(mSelectedUser); | ||||
| 				return true; | ||||
| 			case R.id.ban_from_conference: | ||||
| 				xmppConnectionService.changeAffiliationInConference(mConversation,jid, MucOptions.Affiliation.OUTCAST,this); | ||||
| 				xmppConnectionService.changeAffiliationInConference(mConversation, jid, MucOptions.Affiliation.OUTCAST, this); | ||||
| 				if (mSelectedUser.getRole() != MucOptions.Role.NONE) { | ||||
| 					xmppConnectionService.changeRoleInConference(mConversation, mSelectedUser.getName(), MucOptions.Role.NONE, this); | ||||
| 				} | ||||
| 				return true; | ||||
| 			case R.id.send_private_message: | ||||
| 				if (mConversation.getMucOptions().allowPm()) { | ||||
| 					privateMsgInMuc(mConversation,mSelectedUser.getName()); | ||||
| 					privateMsgInMuc(mConversation, mSelectedUser.getName()); | ||||
| 				} else { | ||||
| 					Toast.makeText(this, R.string.private_messages_are_disabled, Toast.LENGTH_SHORT).show(); | ||||
| 				} | ||||
| @ -478,22 +444,19 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers | ||||
| 
 | ||||
| 	private void removeFromRoom(final User user) { | ||||
| 		if (mConversation.getMucOptions().membersOnly()) { | ||||
| 			xmppConnectionService.changeAffiliationInConference(mConversation,user.getRealJid(), MucOptions.Affiliation.NONE,this); | ||||
| 			xmppConnectionService.changeAffiliationInConference(mConversation, user.getRealJid(), MucOptions.Affiliation.NONE, this); | ||||
| 			if (user.getRole() != MucOptions.Role.NONE) { | ||||
| 				xmppConnectionService.changeRoleInConference(mConversation, mSelectedUser.getName(), MucOptions.Role.NONE, ConferenceDetailsActivity.this); | ||||
| 			} | ||||
| 		} else { | ||||
| 			AlertDialog.Builder builder = new AlertDialog.Builder(this); | ||||
| 			builder.setTitle(R.string.ban_from_conference); | ||||
| 			builder.setMessage(getString(R.string.removing_from_public_conference,user.getName())); | ||||
| 			builder.setNegativeButton(R.string.cancel,null); | ||||
| 			builder.setPositiveButton(R.string.ban_now,new DialogInterface.OnClickListener() { | ||||
| 				@Override | ||||
| 				public void onClick(DialogInterface dialog, int which) { | ||||
| 					xmppConnectionService.changeAffiliationInConference(mConversation,user.getRealJid(), MucOptions.Affiliation.OUTCAST,ConferenceDetailsActivity.this); | ||||
| 					if (user.getRole() != MucOptions.Role.NONE) { | ||||
| 						xmppConnectionService.changeRoleInConference(mConversation, mSelectedUser.getName(), MucOptions.Role.NONE, ConferenceDetailsActivity.this); | ||||
| 					} | ||||
| 			builder.setMessage(getString(R.string.removing_from_public_conference, user.getName())); | ||||
| 			builder.setNegativeButton(R.string.cancel, null); | ||||
| 			builder.setPositiveButton(R.string.ban_now, (dialog, which) -> { | ||||
| 				xmppConnectionService.changeAffiliationInConference(mConversation, user.getRealJid(), MucOptions.Affiliation.OUTCAST, ConferenceDetailsActivity.this); | ||||
| 				if (user.getRole() != MucOptions.Role.NONE) { | ||||
| 					xmppConnectionService.changeRoleInConference(mConversation, mSelectedUser.getName(), MucOptions.Role.NONE, ConferenceDetailsActivity.this); | ||||
| 				} | ||||
| 			}); | ||||
| 			builder.create().show(); | ||||
| @ -502,7 +465,7 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers | ||||
| 
 | ||||
| 	protected void startConversation(User user) { | ||||
| 		if (user.getRealJid() != null) { | ||||
| 			Conversation conversation = xmppConnectionService.findOrCreateConversation(this.mConversation.getAccount(),user.getRealJid().asBareJid(),false,true); | ||||
| 			Conversation conversation = xmppConnectionService.findOrCreateConversation(this.mConversation.getAccount(), user.getRealJid().asBareJid(), false, true); | ||||
| 			switchToConversation(conversation); | ||||
| 		} | ||||
| 	} | ||||
| @ -548,73 +511,72 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers | ||||
| 		} else { | ||||
| 			account = mConversation.getAccount().getJid().asBareJid().toString(); | ||||
| 		} | ||||
| 		mAccountJid.setText(getString(R.string.using_account, account)); | ||||
| 		mYourPhoto.setImageBitmap(avatarService().get(mConversation.getAccount(), getPixel(48))); | ||||
| 		this.binding.detailsAccount.setText(getString(R.string.using_account, account)); | ||||
| 		this.binding.yourPhoto.setImageBitmap(avatarService().get(mConversation.getAccount(), getPixel(48))); | ||||
| 		setTitle(mConversation.getName()); | ||||
| 		mFullJid.setText(mConversation.getJid().asBareJid().toString()); | ||||
| 		mYourNick.setText(mucOptions.getActualNick()); | ||||
| 		TextView mRoleAffiliaton = (TextView) findViewById(R.id.muc_role); | ||||
| 		this.binding.mucJabberid.setText(mConversation.getJid().asBareJid().toString()); | ||||
| 		this.binding.mucYourNick.setText(mucOptions.getActualNick()); | ||||
| 		if (mucOptions.online()) { | ||||
| 			mMoreDetails.setVisibility(View.VISIBLE); | ||||
| 			mMucSettings.setVisibility(View.VISIBLE); | ||||
| 			mConferenceInfoTable.setVisibility(this.mAdvancedMode ? View.VISIBLE : View.GONE); | ||||
| 			this.binding.mucMoreDetails.setVisibility(View.VISIBLE); | ||||
| 			this.binding.mucSettings.setVisibility(View.VISIBLE); | ||||
| 			this.binding.mucInfoMore.setVisibility(this.mAdvancedMode ? View.VISIBLE : View.GONE); | ||||
| 			final String status = getStatus(self); | ||||
| 			if (status != null) { | ||||
| 				mRoleAffiliaton.setVisibility(View.VISIBLE); | ||||
| 				mRoleAffiliaton.setText(status); | ||||
| 				this.binding.mucRole.setVisibility(View.VISIBLE); | ||||
| 				this.binding.mucRole.setText(status); | ||||
| 			} else { | ||||
| 				mRoleAffiliaton.setVisibility(View.GONE); | ||||
| 				this.binding.mucRole.setVisibility(View.GONE); | ||||
| 			} | ||||
| 			if (mucOptions.membersOnly()) { | ||||
| 				mConferenceType.setText(R.string.private_conference); | ||||
| 				this.binding.mucConferenceType.setText(R.string.private_conference); | ||||
| 			} else { | ||||
| 				mConferenceType.setText(R.string.public_conference); | ||||
| 				this.binding.mucConferenceType.setText(R.string.public_conference); | ||||
| 			} | ||||
| 			if (mucOptions.mamSupport()) { | ||||
| 				mConferenceInfoMam.setText(R.string.server_info_available); | ||||
| 				this.binding.mucInfoMam.setText(R.string.server_info_available); | ||||
| 			} else { | ||||
| 				mConferenceInfoMam.setText(R.string.server_info_unavailable); | ||||
| 				this.binding.mucInfoMam.setText(R.string.server_info_unavailable); | ||||
| 			} | ||||
| 			if (self.getAffiliation().ranks(MucOptions.Affiliation.OWNER)) { | ||||
| 				mChangeConferenceSettingsButton.setVisibility(View.VISIBLE); | ||||
| 				this.binding.changeConferenceButton.setVisibility(View.VISIBLE); | ||||
| 			} else { | ||||
| 				mChangeConferenceSettingsButton.setVisibility(View.GONE); | ||||
| 				this.binding.changeConferenceButton.setVisibility(View.GONE); | ||||
| 			} | ||||
| 		} else { | ||||
| 			mMoreDetails.setVisibility(View.GONE); | ||||
| 			mMucSettings.setVisibility(View.GONE); | ||||
| 			mConferenceInfoTable.setVisibility(View.GONE); | ||||
| 			this.binding.mucMoreDetails.setVisibility(View.GONE); | ||||
| 			this.binding.mucInfoMore.setVisibility(View.GONE); | ||||
| 			this.binding.mucSettings.setVisibility(View.GONE); | ||||
| 		} | ||||
| 
 | ||||
| 		int ic_notifications = 		  getThemeResource(R.attr.icon_notifications, R.drawable.ic_notifications_black_24dp); | ||||
| 		int ic_notifications_off = 	  getThemeResource(R.attr.icon_notifications_off, R.drawable.ic_notifications_off_black_24dp); | ||||
| 		int ic_notifications = getThemeResource(R.attr.icon_notifications, R.drawable.ic_notifications_black_24dp); | ||||
| 		int ic_notifications_off = getThemeResource(R.attr.icon_notifications_off, R.drawable.ic_notifications_off_black_24dp); | ||||
| 		int ic_notifications_paused = getThemeResource(R.attr.icon_notifications_paused, R.drawable.ic_notifications_paused_black_24dp); | ||||
| 		int ic_notifications_none =	  getThemeResource(R.attr.icon_notifications_none, R.drawable.ic_notifications_none_black_24dp); | ||||
| 		int ic_notifications_none = getThemeResource(R.attr.icon_notifications_none, R.drawable.ic_notifications_none_black_24dp); | ||||
| 
 | ||||
| 		long mutedTill = mConversation.getLongAttribute(Conversation.ATTRIBUTE_MUTED_TILL,0); | ||||
| 		long mutedTill = mConversation.getLongAttribute(Conversation.ATTRIBUTE_MUTED_TILL, 0); | ||||
| 		if (mutedTill == Long.MAX_VALUE) { | ||||
| 			mNotifyStatusText.setText(R.string.notify_never); | ||||
| 			mNotifyStatusButton.setImageResource(ic_notifications_off); | ||||
| 			this.binding.notificationStatusText.setText(R.string.notify_never); | ||||
| 			this.binding.notificationStatusButton.setImageResource(ic_notifications_off); | ||||
| 		} else if (System.currentTimeMillis() < mutedTill) { | ||||
| 			mNotifyStatusText.setText(R.string.notify_paused); | ||||
| 			mNotifyStatusButton.setImageResource(ic_notifications_paused); | ||||
| 			this.binding.notificationStatusText.setText(R.string.notify_paused); | ||||
| 			this.binding.notificationStatusButton.setImageResource(ic_notifications_paused); | ||||
| 		} else if (mConversation.alwaysNotify()) { | ||||
| 			mNotifyStatusButton.setImageResource(ic_notifications); | ||||
| 			mNotifyStatusText.setText(R.string.notify_on_all_messages); | ||||
| 			this.binding.notificationStatusText.setText(R.string.notify_on_all_messages); | ||||
| 			this.binding.notificationStatusButton.setImageResource(ic_notifications); | ||||
| 		} else { | ||||
| 			mNotifyStatusButton.setImageResource(ic_notifications_none); | ||||
| 			mNotifyStatusText.setText(R.string.notify_only_when_highlighted); | ||||
| 			this.binding.notificationStatusText.setText(R.string.notify_only_when_highlighted); | ||||
| 			this.binding.notificationStatusButton.setImageResource(ic_notifications_none); | ||||
| 		} | ||||
| 
 | ||||
| 		final LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); | ||||
| 		membersView.removeAllViews(); | ||||
| 		this.binding.mucMembers.removeAllViews(); | ||||
| 		if (inflater == null) { | ||||
| 			return; | ||||
| 		} | ||||
| 		final ArrayList<User> users = mucOptions.getUsers(); | ||||
| 		Collections.sort(users); | ||||
| 		for (final User user : users) { | ||||
| 			ContactBinding binding = DataBindingUtil.inflate(inflater,R.layout.contact,membersView,false); | ||||
| 			ContactBinding binding = DataBindingUtil.inflate(inflater, R.layout.contact, this.binding.mucMembers, false); | ||||
| 			this.setListItemBackgroundOnView(binding.getRoot()); | ||||
| 			binding.getRoot().setOnClickListener(view1 -> highlightInMuc(mConversation, user.getName())); | ||||
| 			registerForContextMenu(binding.getRoot()); | ||||
| @ -628,24 +590,24 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers | ||||
| 			String name = user.getName(); | ||||
| 			if (contact != null) { | ||||
| 				binding.contactDisplayName.setText(contact.getDisplayName()); | ||||
| 				binding.contactJid.setText((name != null ? name+ " \u2022 " : "") + getStatus(user)); | ||||
| 				binding.contactJid.setText((name != null ? name + " \u2022 " : "") + getStatus(user)); | ||||
| 			} else { | ||||
| 				binding.contactDisplayName.setText(name == null ? "" : name); | ||||
| 				binding.contactJid.setText(getStatus(user)); | ||||
| 
 | ||||
| 			} | ||||
| 			loadAvatar(user,binding.contactPhoto); | ||||
| 			loadAvatar(user, binding.contactPhoto); | ||||
| 			if (user.getRole() == MucOptions.Role.NONE) { | ||||
| 				binding.contactJid.setAlpha(INACTIVE_ALPHA); | ||||
| 				binding.key.setAlpha(INACTIVE_ALPHA); | ||||
| 				binding.contactDisplayName.setAlpha(INACTIVE_ALPHA); | ||||
| 				binding.contactPhoto.setAlpha(INACTIVE_ALPHA); | ||||
| 			} | ||||
| 			membersView.addView(binding.getRoot()); | ||||
| 			this.binding.mucMembers.addView(binding.getRoot()); | ||||
| 			if (mConversation.getMucOptions().canInvite()) { | ||||
| 				mInviteButton.setVisibility(View.VISIBLE); | ||||
| 				this.binding.invite.setVisibility(View.VISIBLE); | ||||
| 			} else { | ||||
| 				mInviteButton.setVisibility(View.GONE); | ||||
| 				this.binding.invite.setVisibility(View.GONE); | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| @ -680,7 +642,7 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void onAffiliationChangeFailed(Jid jid, int resId) { | ||||
| 		displayToast(getString(resId,jid.asBareJid().toString())); | ||||
| 		displayToast(getString(resId, jid.asBareJid().toString())); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| @ -690,7 +652,7 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void onRoleChangeFailed(String nick, int resId) { | ||||
| 		displayToast(getString(resId,nick)); | ||||
| 		displayToast(getString(resId, nick)); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| @ -704,9 +666,43 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers | ||||
| 	} | ||||
| 
 | ||||
| 	private void displayToast(final String msg) { | ||||
| 		runOnUiThread(() -> Toast.makeText(ConferenceDetailsActivity.this,msg,Toast.LENGTH_SHORT).show()); | ||||
| 		runOnUiThread(() -> Toast.makeText(ConferenceDetailsActivity.this, msg, Toast.LENGTH_SHORT).show()); | ||||
| 	} | ||||
| 
 | ||||
| 	public void loadAvatar(User user, ImageView imageView) { | ||||
| 		if (cancelPotentialWork(user, imageView)) { | ||||
| 			final Bitmap bm = avatarService().get(user, getPixel(48), true); | ||||
| 			if (bm != null) { | ||||
| 				cancelPotentialWork(user, imageView); | ||||
| 				imageView.setImageBitmap(bm); | ||||
| 				imageView.setBackgroundColor(0x00000000); | ||||
| 			} else { | ||||
| 				String seed = user.getRealJid() != null ? user.getRealJid().asBareJid().toString() : null; | ||||
| 				imageView.setBackgroundColor(UIHelper.getColorForName(seed == null ? user.getName() : seed)); | ||||
| 				imageView.setImageDrawable(null); | ||||
| 				final BitmapWorkerTask task = new BitmapWorkerTask(imageView); | ||||
| 				final AsyncDrawable asyncDrawable = new AsyncDrawable(getResources(), null, task); | ||||
| 				imageView.setImageDrawable(asyncDrawable); | ||||
| 				try { | ||||
| 					task.execute(user); | ||||
| 				} catch (final RejectedExecutionException ignored) { | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	static class AsyncDrawable extends BitmapDrawable { | ||||
| 		private final WeakReference<BitmapWorkerTask> bitmapWorkerTaskReference; | ||||
| 
 | ||||
| 		AsyncDrawable(Resources res, Bitmap bitmap, BitmapWorkerTask bitmapWorkerTask) { | ||||
| 			super(res, bitmap); | ||||
| 			bitmapWorkerTaskReference = new WeakReference<>(bitmapWorkerTask); | ||||
| 		} | ||||
| 
 | ||||
| 		BitmapWorkerTask getBitmapWorkerTask() { | ||||
| 			return bitmapWorkerTaskReference.get(); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	class BitmapWorkerTask extends AsyncTask<User, Void, Bitmap> { | ||||
| 		private final WeakReference<ImageView> imageViewReference; | ||||
| @ -737,64 +733,4 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	public void loadAvatar(User user, ImageView imageView) { | ||||
| 		if (cancelPotentialWork(user, imageView)) { | ||||
| 			final Bitmap bm = avatarService().get(user,getPixel(48),true); | ||||
| 			if (bm != null) { | ||||
| 				cancelPotentialWork(user, imageView); | ||||
| 				imageView.setImageBitmap(bm); | ||||
| 				imageView.setBackgroundColor(0x00000000); | ||||
| 			} else { | ||||
| 				String seed = user.getRealJid() != null ? user.getRealJid().asBareJid().toString() : null; | ||||
| 				imageView.setBackgroundColor(UIHelper.getColorForName(seed == null ? user.getName() : seed)); | ||||
| 				imageView.setImageDrawable(null); | ||||
| 				final BitmapWorkerTask task = new BitmapWorkerTask(imageView); | ||||
| 				final AsyncDrawable asyncDrawable = new AsyncDrawable(getResources(), null, task); | ||||
| 				imageView.setImageDrawable(asyncDrawable); | ||||
| 				try { | ||||
| 					task.execute(user); | ||||
| 				} catch (final RejectedExecutionException ignored) { | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	public static boolean cancelPotentialWork(User user, ImageView imageView) { | ||||
| 		final BitmapWorkerTask bitmapWorkerTask = getBitmapWorkerTask(imageView); | ||||
| 
 | ||||
| 		if (bitmapWorkerTask != null) { | ||||
| 			final User old = bitmapWorkerTask.o; | ||||
| 			if (old == null || user != old) { | ||||
| 				bitmapWorkerTask.cancel(true); | ||||
| 			} else { | ||||
| 				return false; | ||||
| 			} | ||||
| 		} | ||||
| 		return true; | ||||
| 	} | ||||
| 
 | ||||
| 	private static BitmapWorkerTask getBitmapWorkerTask(ImageView imageView) { | ||||
| 		if (imageView != null) { | ||||
| 			final Drawable drawable = imageView.getDrawable(); | ||||
| 			if (drawable instanceof AsyncDrawable) { | ||||
| 				final AsyncDrawable asyncDrawable = (AsyncDrawable) drawable; | ||||
| 				return asyncDrawable.getBitmapWorkerTask(); | ||||
| 			} | ||||
| 		} | ||||
| 		return null; | ||||
| 	} | ||||
| 
 | ||||
| 	static class AsyncDrawable extends BitmapDrawable { | ||||
| 		private final WeakReference<BitmapWorkerTask> bitmapWorkerTaskReference; | ||||
| 
 | ||||
| 		public AsyncDrawable(Resources res, Bitmap bitmap, BitmapWorkerTask bitmapWorkerTask) { | ||||
| 			super(res, bitmap); | ||||
| 			bitmapWorkerTaskReference = new WeakReference<>(bitmapWorkerTask); | ||||
| 		} | ||||
| 
 | ||||
| 		public BitmapWorkerTask getBitmapWorkerTask() { | ||||
| 			return bitmapWorkerTaskReference.get(); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
|  | ||||
| @ -1,230 +1,234 @@ | ||||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" | ||||
|             xmlns:app="http://schemas.android.com/apk/res-auto" | ||||
|             android:layout_width="fill_parent" | ||||
|             android:layout_height="fill_parent" | ||||
|             android:background="?attr/color_background_secondary"> | ||||
| <layout xmlns:android="http://schemas.android.com/apk/res/android" | ||||
|         xmlns:app="http://schemas.android.com/apk/res-auto"> | ||||
| 
 | ||||
|     <ScrollView | ||||
| 
 | ||||
|     <LinearLayout | ||||
|         android:id="@+id/muc_main_layout" | ||||
|         android:layout_width="fill_parent" | ||||
|         android:layout_height="wrap_content" | ||||
|         android:orientation="vertical"> | ||||
|         android:layout_height="fill_parent" | ||||
|         android:background="?attr/color_background_secondary"> | ||||
| 
 | ||||
|         <android.support.v7.widget.CardView | ||||
|             android:layout_width="match_parent" | ||||
|             android:layout_height="wrap_content" | ||||
|             android:layout_marginBottom="@dimen/activity_vertical_margin" | ||||
|             android:layout_marginLeft="@dimen/activity_horizontal_margin" | ||||
|             android:layout_marginRight="@dimen/activity_horizontal_margin" | ||||
|             android:layout_marginTop="@dimen/activity_vertical_margin"> | ||||
| 
 | ||||
|             <LinearLayout | ||||
|                 android:layout_width="match_parent" | ||||
|                 android:layout_height="wrap_content" | ||||
|                 android:orientation="vertical" | ||||
|                 android:padding="@dimen/card_padding_regular"> | ||||
| 
 | ||||
|                 <TextView | ||||
|                     android:id="@+id/muc_jabberid" | ||||
|                     android:layout_width="wrap_content" | ||||
|                     android:layout_height="wrap_content" | ||||
|                     android:layout_marginBottom="16dp" | ||||
|                     android:text="@string/account_settings_example_jabber_id" | ||||
|                     android:textAppearance="@style/TextAppearance.AppCompat.Title"/> | ||||
| 
 | ||||
|                 <RelativeLayout | ||||
|                     android:layout_width="fill_parent" | ||||
|                     android:layout_height="wrap_content" | ||||
|                     android:layout_marginBottom="32dp"> | ||||
| 
 | ||||
|                     <com.makeramen.roundedimageview.RoundedImageView | ||||
|                         android:id="@+id/your_photo" | ||||
|                         android:layout_width="48dp" | ||||
|                         android:layout_height="48dp" | ||||
|                         android:layout_alignParentLeft="true" | ||||
|                         app:riv_corner_radius="2dp"/> | ||||
| 
 | ||||
|                     <LinearLayout | ||||
|                         android:layout_width="fill_parent" | ||||
|                         android:layout_height="wrap_content" | ||||
|                         android:layout_centerVertical="true" | ||||
|                         android:layout_toRightOf="@+id/your_photo" | ||||
|                         android:orientation="vertical" | ||||
|                         android:paddingLeft="@dimen/avatar_item_distance"> | ||||
| 
 | ||||
|                         <TextView | ||||
|                             android:id="@+id/muc_your_nick" | ||||
|                             android:layout_width="wrap_content" | ||||
|                             android:layout_height="wrap_content" | ||||
|                             android:singleLine="true" | ||||
|                             android:textAppearance="@style/TextAppearance.AppCompat.Subhead"/> | ||||
| 
 | ||||
|                         <TextView | ||||
|                             android:id="@+id/muc_role" | ||||
|                             android:layout_width="wrap_content" | ||||
|                             android:layout_height="wrap_content" | ||||
|                             android:singleLine="true" | ||||
|                             android:textAppearance="@style/TextAppearance.Conversations.Body1.Secondary"/> | ||||
|                     </LinearLayout> | ||||
| 
 | ||||
|                     <ImageButton | ||||
|                         android:id="@+id/edit_nick_button" | ||||
|                         android:layout_width="wrap_content" | ||||
|                         android:layout_height="wrap_content" | ||||
|                         android:layout_alignParentRight="true" | ||||
|                         android:layout_centerVertical="true" | ||||
|                         android:alpha="?attr/icon_alpha" | ||||
|                         android:background="?attr/selectableItemBackgroundBorderless" | ||||
|                         android:padding="@dimen/image_button_padding" | ||||
|                         android:src="?attr/icon_edit_body"/> | ||||
|                 </RelativeLayout> | ||||
| 
 | ||||
|                 <RelativeLayout | ||||
|                     android:id="@+id/muc_settings" | ||||
|                     android:layout_width="fill_parent" | ||||
|                     android:layout_height="wrap_content"> | ||||
| 
 | ||||
|                     <TextView | ||||
|                         android:id="@+id/muc_conference_type" | ||||
|                         android:layout_width="wrap_content" | ||||
|                         android:layout_height="wrap_content" | ||||
|                         android:layout_alignParentLeft="true" | ||||
|                         android:layout_centerVertical="true" | ||||
|                         android:layout_toLeftOf="@+id/change_conference_button" | ||||
|                         android:text="@string/private_conference" | ||||
|                         android:textAppearance="@style/TextAppearance.AppCompat.Body1" | ||||
|                         /> | ||||
| 
 | ||||
|                     <ImageButton | ||||
|                         android:id="@+id/change_conference_button" | ||||
|                         style="?android:attr/buttonStyleSmall" | ||||
|                         android:layout_width="wrap_content" | ||||
|                         android:layout_height="wrap_content" | ||||
|                         android:layout_alignParentRight="true" | ||||
|                         android:layout_centerVertical="true" | ||||
|                         android:layout_gravity="center_horizontal" | ||||
|                         android:alpha="?attr/icon_alpha" | ||||
|                         android:background="?attr/selectableItemBackgroundBorderless" | ||||
|                         android:padding="@dimen/image_button_padding" | ||||
|                         android:src="?attr/icon_settings"/> | ||||
|                 </RelativeLayout> | ||||
| 
 | ||||
|                 <RelativeLayout | ||||
|                     android:layout_width="fill_parent" | ||||
|                     android:layout_height="wrap_content"> | ||||
| 
 | ||||
|                     <TextView | ||||
|                         android:id="@+id/notification_status_text" | ||||
|                         android:layout_width="wrap_content" | ||||
|                         android:layout_height="wrap_content" | ||||
|                         android:layout_alignParentLeft="true" | ||||
|                         android:layout_centerVertical="true" | ||||
|                         android:layout_toLeftOf="@+id/notification_status_button" | ||||
|                         android:text="@string/notify_on_all_messages" | ||||
|                         android:textAppearance="@style/TextAppearance.AppCompat.Body1" | ||||
|                         /> | ||||
| 
 | ||||
|                     <ImageButton | ||||
|                         android:id="@+id/notification_status_button" | ||||
|                         style="?android:attr/buttonStyleSmall" | ||||
|                         android:layout_width="wrap_content" | ||||
|                         android:layout_height="wrap_content" | ||||
|                         android:layout_alignParentRight="true" | ||||
|                         android:layout_centerVertical="true" | ||||
|                         android:layout_gravity="center_horizontal" | ||||
|                         android:alpha="?attr/icon_alpha" | ||||
|                         android:background="?attr/selectableItemBackgroundBorderless" | ||||
|                         android:padding="@dimen/image_button_padding" | ||||
|                         android:src="?attr/icon_notifications"/> | ||||
|                 </RelativeLayout> | ||||
| 
 | ||||
|                 <TableLayout | ||||
|                     android:id="@+id/muc_info_more" | ||||
|                     android:layout_width="match_parent" | ||||
|                     android:layout_height="wrap_content" | ||||
|                     android:shrinkColumns="0" | ||||
|                     android:stretchColumns="1" | ||||
|                     android:visibility="gone"> | ||||
| 
 | ||||
|                     <TableRow | ||||
|                         android:layout_width="fill_parent" | ||||
|                         android:layout_height="match_parent"> | ||||
| 
 | ||||
|                         <TextView | ||||
|                             android:layout_width="wrap_content" | ||||
|                             android:layout_height="wrap_content" | ||||
|                             android:ellipsize="end" | ||||
|                             android:singleLine="true" | ||||
|                             android:text="@string/server_info_mam" | ||||
|                             android:textAppearance="@style/TextAppearance.AppCompat.Body1"/> | ||||
| 
 | ||||
|                         <TextView | ||||
|                             android:id="@+id/muc_info_mam" | ||||
|                             android:layout_width="wrap_content" | ||||
|                             android:layout_height="wrap_content" | ||||
|                             android:layout_gravity="right" | ||||
|                             android:paddingLeft="4dp" | ||||
|                             android:textAppearance="@style/TextAppearance.AppCompat.Body1"/> | ||||
|                     </TableRow> | ||||
| 
 | ||||
|                 </TableLayout> | ||||
| 
 | ||||
|                 <TextView | ||||
|                     android:id="@+id/details_account" | ||||
|                     android:layout_width="wrap_content" | ||||
|                     android:layout_height="wrap_content" | ||||
|                     android:layout_gravity="right" | ||||
|                     android:layout_marginTop="32dp" | ||||
|                     android:text="@string/using_account" | ||||
|                     android:textAppearance="@style/TextAppearance.AppCompat.Caption"/> | ||||
|             </LinearLayout> | ||||
|         </android.support.v7.widget.CardView> | ||||
| 
 | ||||
|         <android.support.v7.widget.CardView | ||||
|             android:id="@+id/muc_more_details" | ||||
|         <LinearLayout | ||||
|             android:id="@+id/muc_main_layout" | ||||
|             android:layout_width="fill_parent" | ||||
|             android:layout_height="wrap_content" | ||||
|             android:layout_marginBottom="@dimen/activity_vertical_margin" | ||||
|             android:layout_marginLeft="@dimen/activity_horizontal_margin" | ||||
|             android:layout_marginRight="@dimen/activity_horizontal_margin" | ||||
|             android:layout_marginTop="@dimen/activity_vertical_margin"> | ||||
|             android:orientation="vertical"> | ||||
| 
 | ||||
|             <LinearLayout | ||||
|             <android.support.v7.widget.CardView | ||||
|                 android:layout_width="match_parent" | ||||
|                 android:layout_height="wrap_content" | ||||
|                 android:orientation="vertical"> | ||||
|                 android:layout_marginBottom="@dimen/activity_vertical_margin" | ||||
|                 android:layout_marginLeft="@dimen/activity_horizontal_margin" | ||||
|                 android:layout_marginRight="@dimen/activity_horizontal_margin" | ||||
|                 android:layout_marginTop="@dimen/activity_vertical_margin"> | ||||
| 
 | ||||
|                 <LinearLayout | ||||
|                     android:id="@+id/muc_members" | ||||
|                     android:layout_width="match_parent" | ||||
|                     android:layout_height="wrap_content" | ||||
|                     android:orientation="vertical" | ||||
|                     android:padding="@dimen/card_padding_list"> | ||||
|                 </LinearLayout> | ||||
|                     android:padding="@dimen/card_padding_regular"> | ||||
| 
 | ||||
|                 <LinearLayout | ||||
|                     android:layout_width="wrap_content" | ||||
|                     android:layout_height="match_parent" | ||||
|                     android:layout_marginTop="8dp" | ||||
|                     android:orientation="horizontal" | ||||
|                     android:layout_gravity="center_horizontal"> | ||||
| 
 | ||||
| 
 | ||||
|                     <Button | ||||
|                         android:id="@+id/invite" | ||||
|                         style="?android:attr/borderlessButtonStyle" | ||||
|                     <TextView | ||||
|                         android:id="@+id/muc_jabberid" | ||||
|                         android:layout_width="wrap_content" | ||||
|                         android:layout_height="wrap_content" | ||||
|                         android:minWidth="0dp" | ||||
|                         android:paddingLeft="16dp" | ||||
|                         android:paddingRight="16dp" | ||||
|                         android:text="@string/invite_contact" | ||||
|                         android:textColor="?attr/colorAccent"/> | ||||
|                         android:layout_marginBottom="16dp" | ||||
|                         android:text="@string/account_settings_example_jabber_id" | ||||
|                         android:textAppearance="@style/TextAppearance.AppCompat.Title"/> | ||||
| 
 | ||||
|                     <RelativeLayout | ||||
|                         android:layout_width="fill_parent" | ||||
|                         android:layout_height="wrap_content" | ||||
|                         android:layout_marginBottom="32dp"> | ||||
| 
 | ||||
|                         <com.makeramen.roundedimageview.RoundedImageView | ||||
|                             android:id="@+id/your_photo" | ||||
|                             android:layout_width="48dp" | ||||
|                             android:layout_height="48dp" | ||||
|                             android:layout_alignParentLeft="true" | ||||
|                             app:riv_corner_radius="2dp"/> | ||||
| 
 | ||||
|                         <LinearLayout | ||||
|                             android:layout_width="fill_parent" | ||||
|                             android:layout_height="wrap_content" | ||||
|                             android:layout_centerVertical="true" | ||||
|                             android:layout_toRightOf="@+id/your_photo" | ||||
|                             android:orientation="vertical" | ||||
|                             android:paddingLeft="@dimen/avatar_item_distance"> | ||||
| 
 | ||||
|                             <TextView | ||||
|                                 android:id="@+id/muc_your_nick" | ||||
|                                 android:layout_width="wrap_content" | ||||
|                                 android:layout_height="wrap_content" | ||||
|                                 android:singleLine="true" | ||||
|                                 android:textAppearance="@style/TextAppearance.AppCompat.Subhead"/> | ||||
| 
 | ||||
|                             <TextView | ||||
|                                 android:id="@+id/muc_role" | ||||
|                                 android:layout_width="wrap_content" | ||||
|                                 android:layout_height="wrap_content" | ||||
|                                 android:singleLine="true" | ||||
|                                 android:textAppearance="@style/TextAppearance.Conversations.Body1.Secondary"/> | ||||
|                         </LinearLayout> | ||||
| 
 | ||||
|                         <ImageButton | ||||
|                             android:id="@+id/edit_nick_button" | ||||
|                             android:layout_width="wrap_content" | ||||
|                             android:layout_height="wrap_content" | ||||
|                             android:layout_alignParentRight="true" | ||||
|                             android:layout_centerVertical="true" | ||||
|                             android:alpha="?attr/icon_alpha" | ||||
|                             android:background="?attr/selectableItemBackgroundBorderless" | ||||
|                             android:padding="@dimen/image_button_padding" | ||||
|                             android:src="?attr/icon_edit_body"/> | ||||
|                     </RelativeLayout> | ||||
| 
 | ||||
|                     <RelativeLayout | ||||
|                         android:id="@+id/muc_settings" | ||||
|                         android:layout_width="fill_parent" | ||||
|                         android:layout_height="wrap_content"> | ||||
| 
 | ||||
|                         <TextView | ||||
|                             android:id="@+id/muc_conference_type" | ||||
|                             android:layout_width="wrap_content" | ||||
|                             android:layout_height="wrap_content" | ||||
|                             android:layout_alignParentLeft="true" | ||||
|                             android:layout_centerVertical="true" | ||||
|                             android:layout_toLeftOf="@+id/change_conference_button" | ||||
|                             android:text="@string/private_conference" | ||||
|                             android:textAppearance="@style/TextAppearance.AppCompat.Body1" | ||||
|                             /> | ||||
| 
 | ||||
|                         <ImageButton | ||||
|                             android:id="@+id/change_conference_button" | ||||
|                             style="?android:attr/buttonStyleSmall" | ||||
|                             android:layout_width="wrap_content" | ||||
|                             android:layout_height="wrap_content" | ||||
|                             android:layout_alignParentRight="true" | ||||
|                             android:layout_centerVertical="true" | ||||
|                             android:layout_gravity="center_horizontal" | ||||
|                             android:alpha="?attr/icon_alpha" | ||||
|                             android:background="?attr/selectableItemBackgroundBorderless" | ||||
|                             android:padding="@dimen/image_button_padding" | ||||
|                             android:src="?attr/icon_settings"/> | ||||
|                     </RelativeLayout> | ||||
| 
 | ||||
|                     <RelativeLayout | ||||
|                         android:layout_width="fill_parent" | ||||
|                         android:layout_height="wrap_content"> | ||||
| 
 | ||||
|                         <TextView | ||||
|                             android:id="@+id/notification_status_text" | ||||
|                             android:layout_width="wrap_content" | ||||
|                             android:layout_height="wrap_content" | ||||
|                             android:layout_alignParentLeft="true" | ||||
|                             android:layout_centerVertical="true" | ||||
|                             android:layout_toLeftOf="@+id/notification_status_button" | ||||
|                             android:text="@string/notify_on_all_messages" | ||||
|                             android:textAppearance="@style/TextAppearance.AppCompat.Body1" | ||||
|                             /> | ||||
| 
 | ||||
|                         <ImageButton | ||||
|                             android:id="@+id/notification_status_button" | ||||
|                             style="?android:attr/buttonStyleSmall" | ||||
|                             android:layout_width="wrap_content" | ||||
|                             android:layout_height="wrap_content" | ||||
|                             android:layout_alignParentRight="true" | ||||
|                             android:layout_centerVertical="true" | ||||
|                             android:layout_gravity="center_horizontal" | ||||
|                             android:alpha="?attr/icon_alpha" | ||||
|                             android:background="?attr/selectableItemBackgroundBorderless" | ||||
|                             android:padding="@dimen/image_button_padding" | ||||
|                             android:src="?attr/icon_notifications"/> | ||||
|                     </RelativeLayout> | ||||
| 
 | ||||
|                     <TableLayout | ||||
|                         android:id="@+id/muc_info_more" | ||||
|                         android:layout_width="match_parent" | ||||
|                         android:layout_height="wrap_content" | ||||
|                         android:shrinkColumns="0" | ||||
|                         android:stretchColumns="1" | ||||
|                         android:visibility="gone"> | ||||
| 
 | ||||
|                         <TableRow | ||||
|                             android:layout_width="fill_parent" | ||||
|                             android:layout_height="match_parent"> | ||||
| 
 | ||||
|                             <TextView | ||||
|                                 android:layout_width="wrap_content" | ||||
|                                 android:layout_height="wrap_content" | ||||
|                                 android:ellipsize="end" | ||||
|                                 android:singleLine="true" | ||||
|                                 android:text="@string/server_info_mam" | ||||
|                                 android:textAppearance="@style/TextAppearance.AppCompat.Body1"/> | ||||
| 
 | ||||
|                             <TextView | ||||
|                                 android:id="@+id/muc_info_mam" | ||||
|                                 android:layout_width="wrap_content" | ||||
|                                 android:layout_height="wrap_content" | ||||
|                                 android:layout_gravity="right" | ||||
|                                 android:paddingLeft="4dp" | ||||
|                                 android:textAppearance="@style/TextAppearance.AppCompat.Body1"/> | ||||
|                         </TableRow> | ||||
| 
 | ||||
|                     </TableLayout> | ||||
| 
 | ||||
|                     <TextView | ||||
|                         android:id="@+id/details_account" | ||||
|                         android:layout_width="wrap_content" | ||||
|                         android:layout_height="wrap_content" | ||||
|                         android:layout_gravity="right" | ||||
|                         android:layout_marginTop="32dp" | ||||
|                         android:text="@string/using_account" | ||||
|                         android:textAppearance="@style/TextAppearance.AppCompat.Caption"/> | ||||
|                 </LinearLayout> | ||||
|             </LinearLayout> | ||||
|         </android.support.v7.widget.CardView> | ||||
|             </android.support.v7.widget.CardView> | ||||
| 
 | ||||
|     </LinearLayout> | ||||
| </ScrollView> | ||||
|             <android.support.v7.widget.CardView | ||||
|                 android:id="@+id/muc_more_details" | ||||
|                 android:layout_width="fill_parent" | ||||
|                 android:layout_height="wrap_content" | ||||
|                 android:layout_marginBottom="@dimen/activity_vertical_margin" | ||||
|                 android:layout_marginLeft="@dimen/activity_horizontal_margin" | ||||
|                 android:layout_marginRight="@dimen/activity_horizontal_margin" | ||||
|                 android:layout_marginTop="@dimen/activity_vertical_margin"> | ||||
| 
 | ||||
|                 <LinearLayout | ||||
|                     android:layout_width="match_parent" | ||||
|                     android:layout_height="wrap_content" | ||||
|                     android:orientation="vertical"> | ||||
| 
 | ||||
|                     <LinearLayout | ||||
|                         android:id="@+id/muc_members" | ||||
|                         android:layout_width="match_parent" | ||||
|                         android:layout_height="wrap_content" | ||||
|                         android:orientation="vertical" | ||||
|                         android:padding="@dimen/card_padding_list"> | ||||
|                     </LinearLayout> | ||||
| 
 | ||||
|                     <LinearLayout | ||||
|                         android:layout_width="wrap_content" | ||||
|                         android:layout_height="match_parent" | ||||
|                         android:layout_gravity="center_horizontal" | ||||
|                         android:layout_marginTop="8dp" | ||||
|                         android:orientation="horizontal"> | ||||
| 
 | ||||
| 
 | ||||
|                         <Button | ||||
|                             android:id="@+id/invite" | ||||
|                             style="?android:attr/borderlessButtonStyle" | ||||
|                             android:layout_width="wrap_content" | ||||
|                             android:layout_height="wrap_content" | ||||
|                             android:minWidth="0dp" | ||||
|                             android:paddingLeft="16dp" | ||||
|                             android:paddingRight="16dp" | ||||
|                             android:text="@string/invite_contact" | ||||
|                             android:textColor="?attr/colorAccent"/> | ||||
| 
 | ||||
|                     </LinearLayout> | ||||
|                 </LinearLayout> | ||||
|             </android.support.v7.widget.CardView> | ||||
| 
 | ||||
|         </LinearLayout> | ||||
|     </ScrollView> | ||||
| </layout> | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Daniel Gultsch
						Daniel Gultsch