aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/main/java/eu/siacs/conversations/entities/MucOptions.java103
-rw-r--r--src/main/java/eu/siacs/conversations/ui/ConferenceDetailsActivity.java93
-rw-r--r--src/main/res/menu/muc_details.xml7
-rw-r--r--src/main/res/values/strings.xml5
4 files changed, 130 insertions, 78 deletions
diff --git a/src/main/java/eu/siacs/conversations/entities/MucOptions.java b/src/main/java/eu/siacs/conversations/entities/MucOptions.java
index 97a63532f..ce2c5b04b 100644
--- a/src/main/java/eu/siacs/conversations/entities/MucOptions.java
+++ b/src/main/java/eu/siacs/conversations/entities/MucOptions.java
@@ -4,15 +4,55 @@ import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
+import eu.siacs.conversations.R;
import eu.siacs.conversations.crypto.PgpEngine;
import eu.siacs.conversations.xml.Element;
import eu.siacs.conversations.xmpp.jid.InvalidJidException;
import eu.siacs.conversations.xmpp.jid.Jid;
import eu.siacs.conversations.xmpp.stanzas.PresencePacket;
+
import android.annotation.SuppressLint;
@SuppressLint("DefaultLocale")
public class MucOptions {
+
+ public enum Affiliation {
+ OWNER(R.string.owner),
+ ADMIN(R.string.admin),
+ MEMBER(R.string.member),
+ OUTCAST(R.string.outcast),
+ NONE(R.string.no_affiliation);
+
+ private Affiliation(int resId) {
+ this.resId = resId;
+ }
+
+ private int resId;
+
+ public int getResId() {
+ return resId;
+ }
+ }
+
+ ;
+
+ public enum Role {
+ MODERATOR(R.string.moderator),
+ VISITOR(R.string.visitor),
+ PARTICIPANT(R.string.participant),
+ NONE(R.string.no_role);
+
+ private Role(int resId) {
+ this.resId = resId;
+ }
+
+ private int resId;
+
+ public int getResId() {
+ return resId;
+ }
+ }
+
public static final int ERROR_NO_ERROR = 0;
public static final int ERROR_NICK_IN_USE = 1;
public static final int ERROR_UNKNOWN = 2;
@@ -30,6 +70,7 @@ public class MucOptions {
private interface OnEventListener {
public void onSuccess();
+
public void onFailure();
}
@@ -42,18 +83,8 @@ public class MucOptions {
}
public class User {
- public static final int ROLE_MODERATOR = 3;
- public static final int ROLE_NONE = 0;
- public static final int ROLE_PARTICIPANT = 2;
- public static final int ROLE_VISITOR = 1;
- public static final int AFFILIATION_ADMIN = 4;
- public static final int AFFILIATION_OWNER = 3;
- public static final int AFFILIATION_MEMBER = 2;
- public static final int AFFILIATION_OUTCAST = 1;
- public static final int AFFILIATION_NONE = 0;
-
- private int role;
- private int affiliation;
+ private Role role;
+ private Affiliation affiliation;
private String name;
private Jid jid;
private long pgpKeyId = 0;
@@ -74,7 +105,7 @@ public class MucOptions {
return this.jid;
}
- public int getRole() {
+ public Role getRole() {
return this.role;
}
@@ -82,35 +113,41 @@ public class MucOptions {
role = role.toLowerCase();
switch (role) {
case "moderator":
- this.role = ROLE_MODERATOR;
+ this.role = Role.MODERATOR;
break;
case "participant":
- this.role = ROLE_PARTICIPANT;
+ this.role = Role.PARTICIPANT;
break;
case "visitor":
- this.role = ROLE_VISITOR;
+ this.role = Role.VISITOR;
break;
default:
- this.role = ROLE_NONE;
+ this.role = Role.NONE;
break;
}
}
- public int getAffiliation() {
+ public Affiliation getAffiliation() {
return this.affiliation;
}
public void setAffiliation(String affiliation) {
- if (affiliation.equalsIgnoreCase("admin")) {
- this.affiliation = AFFILIATION_ADMIN;
- } else if (affiliation.equalsIgnoreCase("owner")) {
- this.affiliation = AFFILIATION_OWNER;
- } else if (affiliation.equalsIgnoreCase("member")) {
- this.affiliation = AFFILIATION_MEMBER;
- } else if (affiliation.equalsIgnoreCase("outcast")) {
- this.affiliation = AFFILIATION_OUTCAST;
- } else {
- this.affiliation = AFFILIATION_NONE;
+ affiliation = affiliation.toLowerCase();
+ switch (affiliation) {
+ case "admin":
+ this.affiliation = Affiliation.ADMIN;
+ break;
+ case "owner":
+ this.affiliation = Affiliation.OWNER;
+ break;
+ case "member":
+ this.affiliation = Affiliation.MEMBER;
+ break;
+ case "outcast":
+ this.affiliation = Affiliation.OUTCAST;
+ break;
+ default:
+ this.affiliation = Affiliation.NONE;
}
}
@@ -168,7 +205,7 @@ public class MucOptions {
if (!from.isBareJid()) {
final String name = from.getResourcepart();
final String type = packet.getAttribute("type");
- final Element x = packet.findChild("x","http://jabber.org/protocol/muc#user");
+ final Element x = packet.findChild("x", "http://jabber.org/protocol/muc#user");
final List<String> codes = getStatusCodes(x);
if (type == null) {
User user = new User();
@@ -204,7 +241,7 @@ public class MucOptions {
msg = "";
}
user.setPgpKeyId(pgp.fetchKeyId(account, msg,
- signed.getContent()));
+ signed.getContent()));
}
}
}
@@ -261,10 +298,10 @@ public class MucOptions {
private List<String> getStatusCodes(Element x) {
List<String> codes = new ArrayList<String>();
if (x != null) {
- for(Element child : x.getChildren()) {
+ for (Element child : x.getChildren()) {
if (child.getName().equals("status")) {
String code = child.getAttribute("code");
- if (code!=null) {
+ if (code != null) {
codes.add(code);
}
}
@@ -389,7 +426,7 @@ public class MucOptions {
public Jid createJoinJid(String nick) {
try {
- return Jid.fromString(this.conversation.getJid().toBareJid().toString() + "/"+nick);
+ return Jid.fromString(this.conversation.getJid().toBareJid().toString() + "/" + nick);
} catch (final InvalidJidException e) {
return null;
}
diff --git a/src/main/java/eu/siacs/conversations/ui/ConferenceDetailsActivity.java b/src/main/java/eu/siacs/conversations/ui/ConferenceDetailsActivity.java
index eeb015f33..5a30d7617 100644
--- a/src/main/java/eu/siacs/conversations/ui/ConferenceDetailsActivity.java
+++ b/src/main/java/eu/siacs/conversations/ui/ConferenceDetailsActivity.java
@@ -31,6 +31,7 @@ import eu.siacs.conversations.entities.Account;
import eu.siacs.conversations.entities.Bookmark;
import eu.siacs.conversations.entities.Contact;
import eu.siacs.conversations.entities.Conversation;
+import eu.siacs.conversations.entities.MucOptions;
import eu.siacs.conversations.entities.MucOptions.User;
import eu.siacs.conversations.services.XmppConnectionService.OnMucRosterUpdate;
import eu.siacs.conversations.services.XmppConnectionService.OnConversationUpdate;
@@ -59,6 +60,8 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers
private List<User> users = new ArrayList<>();
private User mSelectedUser = null;
+ private boolean mAdvancedMode = false;
+
private UiCallback<Conversation> renameCallback = new UiCallback<Conversation>() {
@Override
public void success(Conversation object) {
@@ -66,7 +69,7 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers
@Override
public void run() {
Toast.makeText(ConferenceDetailsActivity.this,getString(R.string.your_nick_has_been_changed),Toast.LENGTH_SHORT).show();
- populateView();
+ updateView();
}
});
@@ -94,7 +97,7 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers
@Override
public void run() {
- populateView();
+ updateView();
}
});
}
@@ -105,7 +108,7 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers
@Override
public void run() {
- populateView();
+ updateView();
}
});
}
@@ -171,23 +174,16 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers
case R.id.action_delete_bookmark:
deleteBookmark();
break;
+ case R.id.action_advanced_mode:
+ this.mAdvancedMode = !menuItem.isChecked();
+ menuItem.setChecked(this.mAdvancedMode);
+ invalidateOptionsMenu();
+ updateView();
+ break;
}
return super.onOptionsItemSelected(menuItem);
}
- public String getReadableRole(int role) {
- switch (role) {
- case User.ROLE_MODERATOR:
- return getString(R.string.moderator);
- case User.ROLE_PARTICIPANT:
- return getString(R.string.participant);
- case User.ROLE_VISITOR:
- return getString(R.string.visitor);
- default:
- return "";
- }
- }
-
@Override
protected String getShareableUri() {
if (mConversation != null) {
@@ -201,6 +197,8 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers
public boolean onPrepareOptionsMenu(Menu menu) {
MenuItem menuItemSaveBookmark = menu.findItem(R.id.action_save_as_bookmark);
MenuItem menuItemDeleteBookmark = menu.findItem(R.id.action_delete_bookmark);
+ MenuItem menuItemAdvancedMode = menu.findItem(R.id.action_advanced_mode);
+ menuItemAdvancedMode.setChecked(mAdvancedMode);
Account account = mConversation.getAccount();
if (account.hasBookmarkFor(mConversation.getJid().toBareJid())) {
menuItemSaveBookmark.setVisible(false);
@@ -290,16 +288,15 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers
this.mConversation = xmppConnectionService
.findConversationByUuid(uuid);
if (this.mConversation != null) {
- populateView();
+ updateView();
}
}
}
- private void populateView() {
+ private void updateView() {
mAccountJid.setText(getString(R.string.using_account, mConversation
.getAccount().getJid().toBareJid()));
- mYourPhoto.setImageBitmap(avatarService().get(
- mConversation.getAccount(), getPixel(48)));
+ mYourPhoto.setImageBitmap(avatarService().get(mConversation.getAccount(), getPixel(48)));
setTitle(mConversation.getName());
mFullJid.setText(mConversation.getJid().toBareJid().toString());
mYourNick.setText(mConversation.getMucOptions().getActualNick());
@@ -307,18 +304,12 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers
if (mConversation.getMucOptions().online()) {
mMoreDetails.setVisibility(View.VISIBLE);
User self = mConversation.getMucOptions().getSelf();
- switch (self.getAffiliation()) {
- case User.AFFILIATION_ADMIN:
- mRoleAffiliaton.setText(getReadableRole(self.getRole()) + " ("
- + getString(R.string.admin) + ")");
- break;
- case User.AFFILIATION_OWNER:
- mRoleAffiliaton.setText(getReadableRole(self.getRole()) + " ("
- + getString(R.string.owner) + ")");
- break;
- default:
- mRoleAffiliaton.setText(getReadableRole(self.getRole()));
- break;
+ final String status = getStatus(self);
+ if (status != null) {
+ mRoleAffiliaton.setVisibility(View.VISIBLE);
+ mRoleAffiliaton.setText(status);
+ } else {
+ mRoleAffiliaton.setVisibility(View.GONE);
}
}
this.users.clear();
@@ -337,32 +328,31 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers
});
registerForContextMenu(view);
view.setTag(user);
- TextView name = (TextView) view
- .findViewById(R.id.contact_display_name);
- TextView key = (TextView) view.findViewById(R.id.key);
- TextView role = (TextView) view.findViewById(R.id.contact_jid);
- if (user.getPgpKeyId() != 0) {
- key.setVisibility(View.VISIBLE);
- key.setOnClickListener(new OnClickListener() {
+ TextView tvDisplayName = (TextView) view.findViewById(R.id.contact_display_name);
+ TextView tvKey = (TextView) view.findViewById(R.id.key);
+ TextView tvStatus = (TextView) view.findViewById(R.id.contact_jid);
+ if (mAdvancedMode && user.getPgpKeyId() != 0) {
+ tvKey.setVisibility(View.VISIBLE);
+ tvKey.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
viewPgpKey(user);
}
});
- key.setText(OpenPgpUtils.convertKeyIdToHex(user.getPgpKeyId()));
+ tvKey.setText(OpenPgpUtils.convertKeyIdToHex(user.getPgpKeyId()));
}
Bitmap bm;
Contact contact = user.getContact();
if (contact != null) {
bm = avatarService().get(contact, getPixel(48));
- name.setText(contact.getDisplayName());
- role.setText(user.getName() + " \u2022 "
- + getReadableRole(user.getRole()));
+ tvDisplayName.setText(contact.getDisplayName());
+ tvStatus.setText(user.getName() + " \u2022 " + getStatus(user));
} else {
bm = avatarService().get(user.getName(), getPixel(48));
- name.setText(user.getName());
- role.setText(getReadableRole(user.getRole()));
+ tvDisplayName.setText(user.getName());
+ tvStatus.setText(getStatus(user));
+
}
ImageView iv = (ImageView) view.findViewById(R.id.contact_photo);
iv.setImageBitmap(bm);
@@ -370,6 +360,19 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers
}
}
+ private String getStatus(User user) {
+ if (mAdvancedMode) {
+ StringBuilder builder = new StringBuilder();
+ builder.append(getString(user.getAffiliation().getResId()));
+ builder.append(" (");
+ builder.append(getString(user.getRole().getResId()));
+ builder.append(')');
+ return builder.toString();
+ } else {
+ return getString(user.getAffiliation().getResId());
+ }
+ }
+
@SuppressWarnings("deprecation")
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
private void setListItemBackgroundOnView(View view) {
diff --git a/src/main/res/menu/muc_details.xml b/src/main/res/menu/muc_details.xml
index 341d438af..7587e55c6 100644
--- a/src/main/res/menu/muc_details.xml
+++ b/src/main/res/menu/muc_details.xml
@@ -21,6 +21,13 @@
android:title="@string/delete_bookmark"
android:orderInCategory="80"
android:showAsAction="never" />
+ <item
+ android:id="@+id/action_advanced_mode"
+ android:title="@string/advanced_mode"
+ android:checkable="true"
+ android:checked="false"
+ android:orderInCategory="85"
+ android:showAsAction="never" />
<item
android:id="@+id/action_accounts"
android:orderInCategory="90"
diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml
index 45174cd80..bb3586109 100644
--- a/src/main/res/values/strings.xml
+++ b/src/main/res/values/strings.xml
@@ -406,4 +406,9 @@
<string name="enable_all_accounts">Enable all accounts</string>
<string name="disable_all_accounts">Disable all accounts</string>
<string name="perform_action_with">Perform action with</string>
+ <string name="no_affiliation">No affiliation</string>
+ <string name="no_role">No role</string>
+ <string name="outcast">Outcast</string>
+ <string name="member">Member</string>
+ <string name="advanced_mode">Advanced mode</string>
</resources>