diff options
author | Daniel Gultsch <daniel@gultsch.de> | 2014-03-04 02:51:01 +0100 |
---|---|---|
committer | Daniel Gultsch <daniel@gultsch.de> | 2014-03-04 02:51:01 +0100 |
commit | 8e4be5256ea5b4e47225a84604720a15b45d3f39 (patch) | |
tree | 36005a1a78536e5bfa1fb5ebc3b4d43feddf0d60 /src/eu/siacs | |
parent | 69af009c88c4ffa0ea3275c4b875a13e0ecdcddc (diff) |
Muc Options even more awesome
Diffstat (limited to 'src/eu/siacs')
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 b3b53e1da..add56fb66 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 f826040bc..4815957e3 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 434a35563..ff3724601 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 a752e88fa..000000000 --- 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 000000000..f59963453 --- /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); + } + } + } + } +} |