From 8e4be5256ea5b4e47225a84604720a15b45d3f39 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Tue, 4 Mar 2014 02:51:01 +0100 Subject: [PATCH] Muc Options even more awesome --- AndroidManifest.xml | 3 +- gen/eu/siacs/conversations/R.java | 77 ++++---- res/drawable-hdpi/ic_action_edit.png | Bin 0 -> 884 bytes res/drawable-ldpi/ic_action_edit.png | Bin 0 -> 587 bytes res/drawable-mdpi/ic_action_edit.png | Bin 0 -> 587 bytes res/drawable-xhdpi/ic_action_edit.png | Bin 0 -> 1179 bytes res/drawable-xxhdpi/ic_action_edit.png | Bin 0 -> 1670 bytes res/layout/fragment_conversation.xml | 4 +- res/layout/muc_options.xml | 178 +++++++++++------- res/values/strings.xml | 3 + .../conversations/entities/MucOptions.java | 10 +- .../ui/ConversationActivity.java | 7 +- .../ui/ConversationFragment.java | 11 +- .../conversations/ui/DialogMucDetails.java | 100 ---------- .../conversations/ui/MucOptionsActivity.java | 158 ++++++++++++++++ 15 files changed, 335 insertions(+), 216 deletions(-) create mode 100644 res/drawable-hdpi/ic_action_edit.png create mode 100644 res/drawable-ldpi/ic_action_edit.png create mode 100644 res/drawable-mdpi/ic_action_edit.png create mode 100644 res/drawable-xhdpi/ic_action_edit.png create mode 100644 res/drawable-xxhdpi/ic_action_edit.png delete mode 100644 src/eu/siacs/conversations/ui/DialogMucDetails.java create mode 100644 src/eu/siacs/conversations/ui/MucOptionsActivity.java diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 90e177c10..8a1a4028c 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -48,7 +48,8 @@ + android:parentActivityName="eu.siacs.conversations.ui.ConversationActivity" + android:windowSoftInputMode="stateHidden"> %qHdNgg7?rJr+8F6bBgDqJXES!0PfUkwTBqa zF{?w2eS)kfkhongmouvbIE$k9=h6VaDms^7#dw18QA{lSH4yM^OXw~GQw62Oz&VH= zQ{xwCi!B{{^ zFyE0F5J}F^dHbf`%g3y0Z2?3A1bg1af{kP z#xpOg>jEzyYce{~fXR&ZIaZ6=iV~C6`J5|qKkgls48ix9=bwsfII}az;G;IX4l~aU zHQu2oZYd>^*E@XYw^0HF-wx$*AyO6H6P$Rz!F!KzZJ^6WQYJo6asB7IcU264*G<43 z0oYdnn`(ev@eq1ntnS)Oxz~D`j_Z{wceUsqRcwm!7 zOC3(VHU)m41Y{@mjaex$S~%p_a@b zW+u2~K@5Rlh>7VL%q$lE1uV0(rw~J8Fo(dL*^(IqGZP~jW`cRZI-b0sc zlU7z=axKk1V6_WHT<&X@J+1rHssn%vNDFF1SIX=i2BO%CSb@jZf)H>4IDqb;7w8xY z2#r{;(jl=$U7Ui26$c2fGtf?<2_30Y;@G{jE@nLf{7oOn-4ZU%=W-u04wl@ONOk~x zY#OUz0j^rWSr3>6N6-`C)1>iSi*RXeF28`zSHUx-;*@Y{eSo7h9o-z@4v(T^#eogr zA!a|a;sD@fLq1;zkF&&8VNHe;=lc=5hYp!qt-)71fSc_cMU%(r8+za|^Am#Zd6S&t zuDRW$wYU{GYI32)X(K+h1H9ez~%p_a@b zW+u2~K@5Rlh>7VL%q$lE1uV0(rw~J8Fo(dL*^(IqGZP~jW`cRZI-b0sc zlU7z=axKk1V6_WHT<&X@J+1rHssn%vNDFF1SIX=i2BO%CSb@jZf)H>4IDqb;7w8xY z2#r{;(jl=$U7Ui26$c2fGtf?<2_30Y;@G{jE@nLf{7oOn-4ZU%=W-u04wl@ONOk~x zY#OUz0j^rWSr3>6N6-`C)1>iSi*RXeF28`zSHUx-;*@Y{eSo7h9o-z@4v(T^#eogr zA!a|a;sD@fLq1;zkF&&8VNHe;=lc=5hYp!qt-)71fSc_cMU%(r8+za|^Am#Zd6S&t zuDRW$wYU{GYI32)X(K+h1H9ezYzs0ki6E&g_H zZtn8-_O=&yV#N~KFN*h5UOEUDUOzTD0AbK%0@O86LSf%30+eJ|6Gv9>2nbJUN7uKR zkPIL5fn58^nj8?y^oZqIaaZDbP2885z7zLl|CDXBN%=s|_2inq6$HqGKF9-K$?gNe zO)D|IDs403U37DD?kRq2D4}f)0VJU(ej(saNWi?(46sX30LT*W$bLOW2?&9oPyN@F zf&F}+asQiD-J!IhxY<^^!8$Yi4hxy?ZYoS~F;(KT}ngAp=0dP(NYD(Ng)(vU&0NGw1_>Fj{(`2yxDf`oY_MG}DUS>^FPoq6>LM=YRvH0^tQ1Cqy+yI2_6fi zz+7&RIQemJBmo)0t0a6-#`ODP$qVpKR`4SyASZaWhiDP3&pAJbvd?W5!@&pEM9gy^ zVX%)kKa3ksSO8vYX2%!>j0ikzc@!_JVhQ+>S;Z3Y_bi5nZWFeE*IDE!gaDht=MDh@ zzhN`@+@nDmd38B%hdn5h6jp%G6#^(vqe@V!qGbd4%mgSixTwl*co?&|KI`^x8HcCO z3O-K`XcC~yx7`Y6XQ+x@8^C8GfNwaeDr+f2S19AVGKryM2hR;Ys{)o|(#hLC05?MxkgT)Hd-uS2qK;?H%;Ma}?Hl-o| zhDP%9ndH1Yixj3RU@fLC(-+#-5WvNVg$SAd3WmRq<(8xXwd)JM-13|;vLpgrj^?aM tYC|)WzDZwNmsVP7rIl8i-S$_20RXOO5G<352)Y0O002ovPDHLkV1kOuAU*&9 literal 0 HcmV?d00001 diff --git a/res/drawable-xxhdpi/ic_action_edit.png b/res/drawable-xxhdpi/ic_action_edit.png new file mode 100644 index 0000000000000000000000000000000000000000..f2b2078b0787cf6f5722033b5b794cb5fdcba000 GIT binary patch literal 1670 zcmV;126_33P)mMdBG5BtRs>(%|z-Jayzec#NEWNGgrec!$x`*v3e0)apv5C{YUfj}S-2z)|KC|Je8!NEQ~ zbg6atrAuzp^Yimi1SpsI=hRvW-6qsVB*at%uuJ}c$mTUeA4!Cz#DMkF&w+(l0E{Uf3`Ky|VB6!#)GRJ_ zq<#?KC}kdy1uwEr*lM1T|ClQSEVI`;37A5?A|Mt0;-vs^B}CXy z$n~ksiHMsBA>g0)Sd7$JEsKCT!+yq(@h0nBpza#^9CV*@gAjYv0)x-|Gn++w&O7Qx4t_@1e6QjMfCs05K8y)W3L3TKz^DC z7~$r^NtgQRZfC-eLtZ2BLja59CyEf`iu#5Cxi?-_G6fOajm zvH(5nX|Uf{ZD3ddb|jqnO1^ag*zF{pqw1Nii4Qc}s>g&?BEJj^=x6A291#y-1;e1& zS}d-8RVDHPtJ_lA?ePdpN0I>BEMW!c>y^19%k&`i4j5V z<)5+;O_#~HDgcr8ELc6%kSYQnj<_*|2>H-m*Jbjp#efXKHz{L!Y3xYWvl*w!w;6={ z1+Im7C;WpM9fM$}$+szhjf!X2xX;XW@~sHK!Piz%t)r!;iwHO56#2F+z-GO_Yiu7M zxlDdx0SW})B>bp7zu?)eljPg5fPM*|X<)dap{wK$m41kip6)y8N?pdGpDkE%=5S@#1DSXaOL9C_z;q5C{YUfj}S-2m}H_etZ*P04TpsYf3?Y QLjV8(07*qoM6N<$f`u#-@c;k- literal 0 HcmV?d00001 diff --git a/res/layout/fragment_conversation.xml b/res/layout/fragment_conversation.xml index dabce4571..db22f38d2 100644 --- a/res/layout/fragment_conversation.xml +++ b/res/layout/fragment_conversation.xml @@ -3,7 +3,7 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - android:background="#e5e5e5" > + android:background="#e5e5e5"> + android:layout_alignParentLeft="true"> + - + android:background="#e5e5e5"> - + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - + \ No newline at end of file diff --git a/res/values/strings.xml b/res/values/strings.xml index 557b2353b..a9e1fb994 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -17,4 +17,7 @@ Decrypting message. please wait… Conference Details Nickname is already in use + Moderator + Participant + Visitor 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 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 users = new ArrayList(); + + @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(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); + } + } + } + } +}