aboutsummaryrefslogtreecommitdiffstats
path: root/src/eu/siacs/conversations
diff options
context:
space:
mode:
authorDaniel Gultsch <daniel@gultsch.de>2014-03-04 02:51:01 +0100
committerDaniel Gultsch <daniel@gultsch.de>2014-03-04 02:51:01 +0100
commit8e4be5256ea5b4e47225a84604720a15b45d3f39 (patch)
tree36005a1a78536e5bfa1fb5ebc3b4d43feddf0d60 /src/eu/siacs/conversations
parent69af009c88c4ffa0ea3275c4b875a13e0ecdcddc (diff)
Muc Options even more awesome
Diffstat (limited to 'src/eu/siacs/conversations')
-rw-r--r--src/eu/siacs/conversations/entities/MucOptions.java10
-rw-r--r--src/eu/siacs/conversations/ui/ConversationActivity.java7
-rw-r--r--src/eu/siacs/conversations/ui/ConversationFragment.java11
-rw-r--r--src/eu/siacs/conversations/ui/DialogMucDetails.java100
-rw-r--r--src/eu/siacs/conversations/ui/MucOptionsActivity.java158
5 files changed, 179 insertions, 107 deletions
diff --git a/src/eu/siacs/conversations/entities/MucOptions.java b/src/eu/siacs/conversations/entities/MucOptions.java
index b3b53e1d..add56fb6 100644
--- a/src/eu/siacs/conversations/entities/MucOptions.java
+++ b/src/eu/siacs/conversations/entities/MucOptions.java
@@ -3,6 +3,7 @@ package eu.siacs.conversations.entities;
import java.util.ArrayList;
import java.util.List;
+import eu.siacs.conversations.entities.MucOptions.User;
import eu.siacs.conversations.xml.Element;
import eu.siacs.conversations.xmpp.PresencePacket;
import android.annotation.SuppressLint;
@@ -75,6 +76,7 @@ public class MucOptions {
private boolean isOnline = false;
private int error = 0;
private OnRenameListener renameListener = null;
+ private User self = new User();
public void deleteUser(String name) {
@@ -107,12 +109,14 @@ public class MucOptions {
user.setAffiliation(item.getAttribute("affiliation"));
user.setRole(item.getAttribute("role"));
user.setName(name);
- addUser(user);
Log.d("xmppService","nick: "+getNick());
Log.d("xmppService","name: "+name);
if (name.equals(getNick())) {
this.isOnline = true;
this.error = 0;
+ self = user;
+ } else {
+ addUser(user);
}
} else if (type.equals("unavailable")) {
Log.d("xmppService","name: "+name);
@@ -179,4 +183,8 @@ public class MucOptions {
this.error = 0;
this.isOnline = false;
}
+
+ public User getSelf() {
+ return self;
+ }
} \ No newline at end of file
diff --git a/src/eu/siacs/conversations/ui/ConversationActivity.java b/src/eu/siacs/conversations/ui/ConversationActivity.java
index f826040b..4815957e 100644
--- a/src/eu/siacs/conversations/ui/ConversationActivity.java
+++ b/src/eu/siacs/conversations/ui/ConversationActivity.java
@@ -307,9 +307,10 @@ public class ConversationActivity extends XmppActivity {
}
break;
case R.id.action_muc_details:
- DialogMucDetails mucDetails = new DialogMucDetails();
- mucDetails.setConversation(getSelectedConversation());
- mucDetails.show(getFragmentManager(), "details");
+ Intent intent = new Intent(this,MucOptionsActivity.class);
+ intent.setAction(MucOptionsActivity.ACTION_VIEW_MUC);
+ intent.putExtra("uuid", getSelectedConversation().getUuid());
+ startActivity(intent);
break;
case R.id.action_security:
final Conversation selConv = getSelectedConversation();
diff --git a/src/eu/siacs/conversations/ui/ConversationFragment.java b/src/eu/siacs/conversations/ui/ConversationFragment.java
index 434a3556..ff372460 100644
--- a/src/eu/siacs/conversations/ui/ConversationFragment.java
+++ b/src/eu/siacs/conversations/ui/ConversationFragment.java
@@ -24,6 +24,7 @@ import eu.siacs.conversations.utils.UIHelper;
import android.app.AlertDialog;
import android.app.Fragment;
import android.content.DialogInterface;
+import android.content.Intent;
import android.content.IntentSender;
import android.content.SharedPreferences;
import android.content.IntentSender.SendIntentException;
@@ -36,8 +37,10 @@ import android.os.Bundle;
import android.preference.PreferenceManager;
import android.util.Log;
import android.view.LayoutInflater;
+import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
+import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.EditText;
@@ -96,6 +99,7 @@ public class ConversationFragment extends Fragment {
}
}
};
+
private LinearLayout pgpInfo;
private LinearLayout mucError;
private TextView mucErrorText;
@@ -103,9 +107,10 @@ public class ConversationFragment extends Fragment {
@Override
public void onClick(View v) {
- DialogMucDetails mucDetails = new DialogMucDetails();
- mucDetails.setConversation(conversation);
- mucDetails.show(getFragmentManager(), "details");
+ Intent intent = new Intent(getActivity(),MucOptionsActivity.class);
+ intent.setAction(MucOptionsActivity.ACTION_VIEW_MUC);
+ intent.putExtra("uuid", conversation.getUuid());
+ startActivity(intent);
}
};
diff --git a/src/eu/siacs/conversations/ui/DialogMucDetails.java b/src/eu/siacs/conversations/ui/DialogMucDetails.java
deleted file mode 100644
index a752e88f..00000000
--- a/src/eu/siacs/conversations/ui/DialogMucDetails.java
+++ /dev/null
@@ -1,100 +0,0 @@
-package eu.siacs.conversations.ui;
-
-
-import eu.siacs.conversations.R;
-import eu.siacs.conversations.entities.Conversation;
-import eu.siacs.conversations.entities.MucOptions;
-import android.app.AlertDialog;
-import android.app.Dialog;
-import android.app.DialogFragment;
-import android.content.DialogInterface;
-import android.content.DialogInterface.OnClickListener;
-import android.os.Bundle;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.widget.EditText;
-import android.widget.TextView;
-
-public class DialogMucDetails extends DialogFragment {
- private XmppActivity activity;
- private Conversation conversation;
- private EditText mYourNick;
- private OnClickListener changeNickListener = new OnClickListener() {
-
- @Override
- public void onClick(DialogInterface dialog, int which) {
- MucOptions options = conversation.getMucOptions();
- String nick = mYourNick.getText().toString();
- if (!options.getNick().equals(nick)) {
- activity.xmppConnectionService.renameInMuc(conversation,nick,activity);
- }
- }
- };
-
- @Override
- public Dialog onCreateDialog(Bundle savedInstanceState) {
- this.activity = (XmppActivity) getActivity();
- AlertDialog.Builder builder = new AlertDialog.Builder(this.activity);
- LayoutInflater inflater = getActivity().getLayoutInflater();
- View view = inflater.inflate(R.layout.muc_options, null);
- builder.setView(view);
- builder.setTitle(getString(R.string.conference_details));
- mYourNick = (EditText) view.findViewById(R.id.muc_your_nick);
- TextView mTextModerators = (TextView) view.findViewById(R.id.muc_moderators);
- TextView mTextParticipants = (TextView) view.findViewById(R.id.muc_participants);
- TextView mTextVisiotors = (TextView) view.findViewById(R.id.muc_visitors);
- TextView mTextModeratorsHead = (TextView) view.findViewById(R.id.muc_moderators_header);
- TextView mTextParticipantsHead = (TextView) view.findViewById(R.id.muc_participants_header);
- TextView mTextVisiotorsHead = (TextView) view.findViewById(R.id.muc_visitors_header);
- StringBuilder mods = new StringBuilder();
- StringBuilder participants = new StringBuilder();
- StringBuilder visitors = new StringBuilder();
- for(MucOptions.User user : conversation.getMucOptions().getUsers()) {
- if (user.getRole() == MucOptions.User.ROLE_MODERATOR) {
- if (mods.length()>=1) {
- mods.append("\n, "+user.getName());
- } else {
- mods.append(user.getName());
- }
- } else if (user.getRole() == MucOptions.User.ROLE_PARTICIPANT) {
- if (participants.length()>=1) {
- participants.append("\n, "+user.getName());
- } else {
- participants.append(user.getName());
- }
- } else {
- if (visitors.length()>=1) {
- visitors.append("\n, "+user.getName());
- } else {
- visitors.append(user.getName());
- }
- }
- }
- if (mods.length()>0) {
- mTextModerators.setText(mods.toString());
- } else {
- mTextModerators.setVisibility(View.GONE);
- mTextModeratorsHead.setVisibility(View.GONE);
- }
- if (participants.length()>0) {
- mTextParticipants.setText(participants.toString());
- } else {
- mTextParticipants.setVisibility(View.GONE);
- mTextParticipantsHead.setVisibility(View.GONE);
- }
- if (visitors.length()>0) {
- mTextVisiotors.setText(visitors.toString());
- } else {
- mTextVisiotors.setVisibility(View.GONE);
- mTextVisiotorsHead.setVisibility(View.GONE);
- }
- mYourNick.setText(conversation.getMucOptions().getNick());
- builder.setPositiveButton("Done", this.changeNickListener );
- builder.setNegativeButton("Cancel", null);
- return builder.create();
- }
-
- public void setConversation(Conversation conversation) {
- this.conversation = conversation;
- }
-}
diff --git a/src/eu/siacs/conversations/ui/MucOptionsActivity.java b/src/eu/siacs/conversations/ui/MucOptionsActivity.java
new file mode 100644
index 00000000..f5996345
--- /dev/null
+++ b/src/eu/siacs/conversations/ui/MucOptionsActivity.java
@@ -0,0 +1,158 @@
+package eu.siacs.conversations.ui;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import eu.siacs.conversations.R;
+import eu.siacs.conversations.entities.Conversation;
+import eu.siacs.conversations.entities.MucOptions;
+import eu.siacs.conversations.entities.MucOptions.User;
+import eu.siacs.conversations.utils.UIHelper;
+import android.content.Context;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.view.ViewGroup;
+import android.widget.ArrayAdapter;
+import android.widget.EditText;
+import android.widget.ImageButton;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.ListView;
+import android.widget.TextView;
+
+public class MucOptionsActivity extends XmppActivity {
+ public static final String ACTION_VIEW_MUC = "view_muc";
+ private XmppActivity activity = this;
+ private Conversation conversation;
+ private EditText mYourNick;
+ private TextView mRoleAffiliaton;
+ private TextView mFullJid;
+ private LinearLayout membersView;
+ private TextView mTextParticipantsHead;
+ private LinearLayout mMoreDetails;
+ private String uuid = null;
+ private ArrayAdapter<User> contactsAdapter;
+ private OnClickListener changeNickListener = new OnClickListener() {
+
+ @Override
+ public void onClick(View arg0) {
+ Log.d("gultsch","on click change muc");
+ MucOptions options = conversation.getMucOptions();
+ String nick = mYourNick.getText().toString();
+ if (!options.getNick().equals(nick)) {
+ Log.d("gultsch","call to change muc");
+ xmppConnectionService.renameInMuc(conversation, nick, activity);
+ finish();
+ }
+ }
+ };
+ private List<User> users = new ArrayList<MucOptions.User>();
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ if (getIntent().getAction().equals(ACTION_VIEW_MUC)) {
+ this.uuid = getIntent().getExtras().getString("uuid");
+ }
+ setContentView(R.layout.muc_options);
+ mYourNick = (EditText) findViewById(R.id.muc_your_nick);
+ mTextParticipantsHead = (TextView) findViewById(R.id.muc_participants_header);
+ mFullJid = (TextView) findViewById(R.id.muc_jabberid);
+ ImageButton imageButton = (ImageButton) findViewById(R.id.muc_edit_nick);
+ imageButton.setOnClickListener(this.changeNickListener);
+ membersView = (LinearLayout) findViewById(R.id.muc_members);
+ mMoreDetails = (LinearLayout) findViewById(R.id.muc_more_details);
+ mMoreDetails.setVisibility(View.GONE);
+ contactsAdapter = new ArrayAdapter<MucOptions.User>(this,
+ R.layout.contact, users) {
+ @Override
+ public View getView(int position, View view, ViewGroup parent) {
+ LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+ User contact = getItem(position);
+ if (view == null) {
+ view = (View) inflater.inflate(R.layout.contact, null);
+ }
+
+ ((TextView) view.findViewById(R.id.contact_display_name))
+ .setText(getItem(position).getName());
+ TextView role = (TextView) view.findViewById(R.id.contact_jid);
+ role.setText(getReadableRole(contact.getRole()));
+ ImageView imageView = (ImageView) view
+ .findViewById(R.id.contact_photo);
+ imageView.setImageBitmap(UIHelper.getUnknownContactPicture(
+ getItem(position).getName(), 90));
+ return view;
+ }
+ };
+ }
+
+ public void setConversation(Conversation conversation) {
+ this.conversation = conversation;
+ }
+
+ 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
+ void onBackendConnected() {
+ if (uuid != null) {
+ for (Conversation mConv : xmppConnectionService.getConversations()) {
+ if (mConv.getUuid().equals(uuid)) {
+ this.conversation = mConv;
+ }
+ }
+ if (this.conversation != null) {
+ mFullJid.setText(conversation.getContactJid().split("/")[0]);
+ mYourNick.setText(conversation.getMucOptions().getNick());
+ mRoleAffiliaton = (TextView) findViewById(R.id.muc_role);
+ if (conversation.getMucOptions().online()) {
+ mMoreDetails.setVisibility(View.VISIBLE);
+ User self = conversation.getMucOptions().getSelf();
+ switch (self.getAffiliation()) {
+ case User.AFFILIATION_ADMIN:
+ mRoleAffiliaton.setText(getReadableRole(self.getRole())
+ + " (Admin)");
+ break;
+ case User.AFFILIATION_OWNER:
+ mRoleAffiliaton.setText(getReadableRole(self.getRole())
+ + " (Owner)");
+ break;
+ default:
+ mRoleAffiliaton
+ .setText(getReadableRole(self.getRole()));
+ break;
+ }
+ }
+ this.users.clear();
+ this.users.addAll(conversation.getMucOptions().getUsers());
+ contactsAdapter.notifyDataSetChanged();
+ LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+ for(User contact : conversation.getMucOptions().getUsers()) {
+ View view = (View) inflater.inflate(R.layout.contact, null);
+
+ ((TextView) view.findViewById(R.id.contact_display_name))
+ .setText(contact.getName());
+ TextView role = (TextView) view.findViewById(R.id.contact_jid);
+ role.setText(getReadableRole(contact.getRole()));
+ ImageView imageView = (ImageView) view
+ .findViewById(R.id.contact_photo);
+ imageView.setImageBitmap(UIHelper.getUnknownContactPicture(contact.getName(), 90));
+ membersView.addView(view);
+ }
+ }
+ }
+ }
+}