diff --git a/src/main/java/eu/siacs/conversations/ui/ConferenceDetailsActivity.java b/src/main/java/eu/siacs/conversations/ui/ConferenceDetailsActivity.java index 7965a1663..b5d90f077 100644 --- a/src/main/java/eu/siacs/conversations/ui/ConferenceDetailsActivity.java +++ b/src/main/java/eu/siacs/conversations/ui/ConferenceDetailsActivity.java @@ -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 renameCallback = new UiCallback() { @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 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 bitmapWorkerTaskReference; + + AsyncDrawable(Resources res, Bitmap bitmap, BitmapWorkerTask bitmapWorkerTask) { + super(res, bitmap); + bitmapWorkerTaskReference = new WeakReference<>(bitmapWorkerTask); + } + + BitmapWorkerTask getBitmapWorkerTask() { + return bitmapWorkerTaskReference.get(); + } + } class BitmapWorkerTask extends AsyncTask { private final WeakReference 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 bitmapWorkerTaskReference; - - public AsyncDrawable(Resources res, Bitmap bitmap, BitmapWorkerTask bitmapWorkerTask) { - super(res, bitmap); - bitmapWorkerTaskReference = new WeakReference<>(bitmapWorkerTask); - } - - public BitmapWorkerTask getBitmapWorkerTask() { - return bitmapWorkerTaskReference.get(); - } - } - } diff --git a/src/main/res/layout/activity_muc_details.xml b/src/main/res/layout/activity_muc_details.xml index d51ac5be8..60cb2907f 100644 --- a/src/main/res/layout/activity_muc_details.xml +++ b/src/main/res/layout/activity_muc_details.xml @@ -1,230 +1,234 @@ - + + + + android:layout_height="fill_parent" + android:background="?attr/color_background_secondary"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + 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"> - + android:padding="@dimen/card_padding_regular"> - - - -