aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java/de/pixart/messenger/ui/ConferenceDetailsActivity.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/de/pixart/messenger/ui/ConferenceDetailsActivity.java')
-rw-r--r--src/main/java/de/pixart/messenger/ui/ConferenceDetailsActivity.java232
1 files changed, 38 insertions, 194 deletions
diff --git a/src/main/java/de/pixart/messenger/ui/ConferenceDetailsActivity.java b/src/main/java/de/pixart/messenger/ui/ConferenceDetailsActivity.java
index 3508fef7c..92192de69 100644
--- a/src/main/java/de/pixart/messenger/ui/ConferenceDetailsActivity.java
+++ b/src/main/java/de/pixart/messenger/ui/ConferenceDetailsActivity.java
@@ -54,6 +54,7 @@ import de.pixart.messenger.services.XmppConnectionService;
import de.pixart.messenger.services.XmppConnectionService.OnConversationUpdate;
import de.pixart.messenger.services.XmppConnectionService.OnMucRosterUpdate;
import de.pixart.messenger.ui.adapter.MediaAdapter;
+import de.pixart.messenger.ui.adapter.UserPreviewAdapter;
import de.pixart.messenger.ui.interfaces.OnMediaLoaded;
import de.pixart.messenger.ui.util.Attachment;
import de.pixart.messenger.ui.util.AvatarWorkerTask;
@@ -78,15 +79,7 @@ import static de.pixart.messenger.utils.StringUtils.changed;
public class ConferenceDetailsActivity extends XmppActivity implements OnConversationUpdate, OnMucRosterUpdate, XmppConnectionService.OnAffiliationChanged, XmppConnectionService.OnRoleChanged, XmppConnectionService.OnConfigurationPushed, TextWatcher, OnMediaLoaded {
public static final String ACTION_VIEW_MUC = "view_muc";
- private static final float INACTIVE_ALPHA = 0.4684f; //compromise between dark and light theme
private Conversation mConversation;
- private OnClickListener inviteListener = new OnClickListener() {
-
- @Override
- public void onClick(View v) {
- inviteToConversation(mConversation);
- }
- };
private OnClickListener destroyListener = new OnClickListener() {
@Override
public void onClick(View v) {
@@ -109,8 +102,8 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers
};
private ActivityMucDetailsBinding binding;
private MediaAdapter mMediaAdapter;
+ private UserPreviewAdapter mUserPreviewAdapter;
private String uuid = null;
- private User mSelectedUser = null;
private boolean mAdvancedMode = false;
@@ -247,31 +240,6 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers
}
};
- 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();
@@ -292,14 +260,10 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers
super.onCreate(savedInstanceState);
this.binding = DataBindingUtil.setContentView(this, R.layout.activity_muc_details);
this.binding.changeConferenceButton.setOnClickListener(this.mChangeConferenceSettings);
- this.binding.invite.setOnClickListener(inviteListener);
- this.binding.invite.setVisibility(View.GONE);
- this.binding.invite.setOnClickListener(inviteListener);
this.binding.destroy.setVisibility(View.GONE);
this.binding.destroy.setOnClickListener(destroyListener);
this.binding.leaveMuc.setVisibility(View.GONE);
this.binding.addContactButton.setVisibility(View.GONE);
- this.binding.mucMoreDetails.setVisibility(View.GONE);
setSupportActionBar((Toolbar) binding.toolbar);
configureActionBar(getSupportActionBar());
this.binding.editNickButton.setOnClickListener(v -> quickEdit(mConversation.getMucOptions().getActualNick(),
@@ -342,9 +306,18 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers
}
}
});
- mMediaAdapter = new MediaAdapter(this, R.dimen.media_size);
+ this.mMediaAdapter = new MediaAdapter(this, R.dimen.media_size);
+ this.mUserPreviewAdapter = new UserPreviewAdapter();
this.binding.media.setAdapter(mMediaAdapter);
+ this.binding.users.setAdapter(mUserPreviewAdapter);
GridManager.setupLayoutManager(this, this.binding.media, R.dimen.media_size);
+ GridManager.setupLayoutManager(this, this.binding.users, R.dimen.media_size);
+ this.binding.invite.setOnClickListener(v -> inviteToConversation(mConversation));
+ this.binding.showUsers.setOnClickListener(v -> {
+ Intent intent = new Intent(this, MucUsersActivity.class);
+ intent.putExtra("uuid", mConversation.getUuid());
+ startActivity(intent);
+ });
}
@Override
@@ -470,36 +443,6 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers
}
@Override
- 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);
- final User user = (User) tag;
- this.mSelectedUser = user;
- String name;
- final Contact contact = user.getContact();
- if (contact != null && contact.showInContactList()) {
- name = contact.getDisplayName();
- } else if (user.getRealJid() != null) {
- name = user.getRealJid().asBareJid().toString();
- } else {
- name = user.getName();
- }
- menu.setHeaderTitle(name);
- MucDetailsContextMenuHelper.configureMucDetailsContextMenu(this, menu, mConversation, user);
- }
- super.onCreateContextMenu(menu, v, menuInfo);
- }
-
- @Override
- public boolean onContextItemSelected(MenuItem item) {
- if (!MucDetailsContextMenuHelper.onContextItemSelected(item, mSelectedUser, mConversation, this)) {
- return super.onContextItemSelected(item);
- }
- return true;
- }
-
- @Override
public void onMediaLoaded(List<Attachment> attachments) {
runOnUiThread(() -> {
int limit = GridManager.getCurrentColumnCount(binding.media);
@@ -578,8 +521,8 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers
} else {
this.binding.detailsAccount.setVisibility(View.GONE);
}
- AvatarWorkerTask.loadAvatar(mConversation, binding.detailsMucAvatar, getPixel(Config.AVATAR_SIZE));
- AvatarWorkerTask.loadAvatar(mConversation, binding.yourPhoto, R.dimen.avatar_on_details_screen_size);
+ AvatarWorkerTask.loadAvatar(mConversation, binding.detailsMucAvatar, R.dimen.avatar_big);
+ AvatarWorkerTask.loadAvatar(mConversation.getAccount(), binding.yourPhoto, R.dimen.avatar_on_details_screen_size);
String roomName = mucOptions.getName();
String subject = mucOptions.getSubject();
@@ -609,7 +552,7 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers
}
this.binding.mucYourNick.setText(EmojiWrapper.transform(mucOptions.getActualNick()));
if (mucOptions.online()) {
- this.binding.mucMoreDetails.setVisibility(View.VISIBLE);
+ this.binding.usersWrapper.setVisibility(View.VISIBLE);
this.binding.mucSettings.setVisibility(View.VISIBLE);
this.binding.mucInfoMore.setVisibility(this.mAdvancedMode ? View.VISIBLE : View.GONE);
this.binding.jid.setVisibility(this.mAdvancedMode ? View.VISIBLE : View.GONE);
@@ -686,7 +629,7 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers
});
}
} else {
- this.binding.mucMoreDetails.setVisibility(View.GONE);
+ this.binding.usersWrapper.setVisibility(View.GONE);
this.binding.mucInfoMore.setVisibility(View.GONE);
this.binding.mucSettings.setVisibility(View.GONE);
}
@@ -710,71 +653,36 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers
this.binding.notificationStatusButton.setImageResource(ic_notifications_none);
}
- final LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
- 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, this.binding.mucMembers, false);
- this.setListItemBackgroundOnView(binding.getRoot());
- binding.getRoot().setOnClickListener(view1 -> highlightInMuc(mConversation, user.getName()));
- registerForContextMenu(binding.getRoot());
- binding.getRoot().setTag(user);
- if (mAdvancedMode && user.getPgpKeyId() != 0) {
- binding.key.setVisibility(View.VISIBLE);
- binding.key.setOnClickListener(v -> viewPgpKey(user));
- binding.key.setText(OpenPgpUtils.convertKeyIdToHex(user.getPgpKeyId()));
- }
- Contact contact = user.getContact();
- String name = user.getName();
- if (contact != null) {
- binding.contactDisplayName.setText(EmojiWrapper.transform(contact.getDisplayName()));
- binding.contactJid.setText((name != null ? EmojiWrapper.transform(name) + " \u2022 " : "") + getStatus(user));
+ List<User> users = mucOptions.getUsers();
+ Collections.sort(users, (a, b) -> {
+ if (b.getAffiliation().outranks(a.getAffiliation())) {
+ return 1;
+ } else if (a.getAffiliation().outranks(b.getAffiliation())) {
+ return -1;
} else {
- binding.contactDisplayName.setText(name == null ? "" : EmojiWrapper.transform(name));
- binding.contactJid.setText(getStatus(user));
-
- }
- 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);
+ if (a.getAvatar() != null && b.getAvatar() == null) {
+ return -1;
+ } else if (a.getAvatar() == null && b.getAvatar() != null) {
+ return 1;
+ } else {
+ return a.getComparableName().compareToIgnoreCase(b.getComparableName());
+ }
}
- this.binding.mucMembers.addView(binding.getRoot());
- }
- if (mConversation.getMucOptions().canInvite()) {
- this.binding.invite.setVisibility(View.VISIBLE);
- } else {
- this.binding.invite.setVisibility(View.GONE);
- }
+ });
+ this.mUserPreviewAdapter.setUserList(MucOptions.sub(users, GridManager.getCurrentColumnCount(binding.users)));
+ this.binding.invite.setVisibility(mucOptions.canInvite() ? View.VISIBLE : View.GONE);
}
- private String getStatus(User user) {
- if (mAdvancedMode) {
- return getString(user.getAffiliation().getResId()) +
- " (" + getString(user.getRole().getResId()) + ')';
+ public static String getStatus(Context context, User user, final boolean advanced) {
+ if (advanced) {
+ return String.format("%s (%s)", context.getString(user.getAffiliation().getResId()), context.getString(user.getRole().getResId()));
} else {
- return getString(user.getAffiliation().getResId());
+ return context.getString(user.getAffiliation().getResId());
}
}
- private void viewPgpKey(User user) {
- PgpEngine pgp = xmppConnectionService.getPgpEngine();
- if (pgp != null) {
- PendingIntent intent = pgp.getIntentForKey(user.getPgpKeyId());
- if (intent != null) {
- try {
- startIntentSenderForResult(intent.getIntentSender(), 0, null, 0, 0, 0);
- } catch (SendIntentException ignored) {
-
- }
- }
- }
+ private String getStatus(User user) {
+ return getStatus(this, user, mAdvancedMode);
}
@Override
@@ -816,28 +724,6 @@ 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) {
- }
- }
- }
- }
-
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
@@ -864,46 +750,4 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers
}
}
}
-
- 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;
- private User o = null;
-
- private BitmapWorkerTask(ImageView imageView) {
- imageViewReference = new WeakReference<>(imageView);
- }
-
- @Override
- protected Bitmap doInBackground(User... params) {
- this.o = params[0];
- if (imageViewReference.get() == null) {
- return null;
- }
- return avatarService().get(this.o, getPixel(48), isCancelled());
- }
-
- @Override
- protected void onPostExecute(Bitmap bitmap) {
- if (bitmap != null && !isCancelled()) {
- final ImageView imageView = imageViewReference.get();
- if (imageView != null) {
- imageView.setImageBitmap(bitmap);
- imageView.setBackgroundColor(0x00000000);
- }
- }
- }
- }
}