diff options
author | Daniel Gultsch <daniel@gultsch.de> | 2014-03-03 05:01:02 +0100 |
---|---|---|
committer | Daniel Gultsch <daniel@gultsch.de> | 2014-03-03 05:01:02 +0100 |
commit | c609eefefac5097c7c40a9f1b8741e9634da316f (patch) | |
tree | 53363dfbab46d84e81b8b95f49e586374dc358f0 /src/eu/siacs/conversations/ui | |
parent | 2ab6cb0ada6370e6ea83a73e0a6a39ea3ff90715 (diff) |
api changes. muc options
Diffstat (limited to 'src/eu/siacs/conversations/ui')
-rw-r--r-- | src/eu/siacs/conversations/ui/ConversationActivity.java | 17 | ||||
-rw-r--r-- | src/eu/siacs/conversations/ui/ConversationFragment.java | 41 | ||||
-rw-r--r-- | src/eu/siacs/conversations/ui/DialogMucDetails.java | 100 | ||||
-rw-r--r-- | src/eu/siacs/conversations/ui/XmppActivity.java | 15 |
4 files changed, 155 insertions, 18 deletions
diff --git a/src/eu/siacs/conversations/ui/ConversationActivity.java b/src/eu/siacs/conversations/ui/ConversationActivity.java index 7660b8fd..f826040b 100644 --- a/src/eu/siacs/conversations/ui/ConversationActivity.java +++ b/src/eu/siacs/conversations/ui/ConversationActivity.java @@ -208,17 +208,7 @@ public class ConversationActivity extends XmppActivity { getActionBar().setDisplayHomeAsUpEnabled(false); getActionBar().setTitle(R.string.app_name); invalidateOptionsMenu(); - - InputMethodManager inputManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); - - View focus = getCurrentFocus(); - - if (focus != null) { - - inputManager.hideSoftInputFromWindow( - focus.getWindowToken(), - InputMethodManager.HIDE_NOT_ALWAYS); - } + hideKeyboard(); } @Override @@ -316,6 +306,11 @@ public class ConversationActivity extends XmppActivity { builder.create().show(); } break; + case R.id.action_muc_details: + DialogMucDetails mucDetails = new DialogMucDetails(); + mucDetails.setConversation(getSelectedConversation()); + mucDetails.show(getFragmentManager(), "details"); + break; case R.id.action_security: final Conversation selConv = getSelectedConversation(); View menuItemView = findViewById(R.id.action_security); diff --git a/src/eu/siacs/conversations/ui/ConversationFragment.java b/src/eu/siacs/conversations/ui/ConversationFragment.java index ff06fafc..a19cb18c 100644 --- a/src/eu/siacs/conversations/ui/ConversationFragment.java +++ b/src/eu/siacs/conversations/ui/ConversationFragment.java @@ -13,9 +13,11 @@ import net.java.otr4j.session.SessionStatus; import eu.siacs.conversations.R; import eu.siacs.conversations.crypto.PgpEngine.OpenPgpException; import eu.siacs.conversations.crypto.PgpEngine.UserInputRequiredException; +import eu.siacs.conversations.entities.Account; import eu.siacs.conversations.entities.Contact; import eu.siacs.conversations.entities.Conversation; import eu.siacs.conversations.entities.Message; +import eu.siacs.conversations.entities.MucOptions; import eu.siacs.conversations.services.XmppConnectionService; import eu.siacs.conversations.utils.PhoneHelper; import eu.siacs.conversations.utils.UIHelper; @@ -95,6 +97,17 @@ public class ConversationFragment extends Fragment { } }; private LinearLayout pgpInfo; + private LinearLayout mucError; + private TextView mucErrorText; + private OnClickListener clickToMuc = new OnClickListener() { + + @Override + public void onClick(View v) { + DialogMucDetails mucDetails = new DialogMucDetails(); + mucDetails.setConversation(conversation); + mucDetails.show(getFragmentManager(), "details"); + } + }; public void hidePgpPassphraseBox() { pgpInfo.setVisibility(View.GONE); @@ -138,6 +151,9 @@ public class ConversationFragment extends Fragment { pgpInfo = (LinearLayout) view.findViewById(R.id.pgp_keyentry); pgpInfo.setOnClickListener(clickToDecryptListener); + mucError = (LinearLayout) view.findViewById(R.id.muc_error); + mucError.setOnClickListener(clickToMuc ); + mucErrorText = (TextView) view.findViewById(R.id.muc_error_msg); messagesView = (ListView) view.findViewById(R.id.messages_view); @@ -348,15 +364,26 @@ public class ConversationFragment extends Fragment { this.messageList.clear(); this.messageList.addAll(this.conversation.getMessages()); this.messageListAdapter.notifyDataSetChanged(); - if (messageList.size() >= 1) { - int latestEncryption = this.conversation.getLatestMessage() - .getEncryption(); - if (latestEncryption== Message.ENCRYPTION_DECRYPTED) { - conversation.nextMessageEncryption = Message.ENCRYPTION_PGP; + if (conversation.getMode() == Conversation.MODE_SINGLE) { + if (messageList.size() >= 1) { + int latestEncryption = this.conversation.getLatestMessage() + .getEncryption(); + if (latestEncryption== Message.ENCRYPTION_DECRYPTED) { + conversation.nextMessageEncryption = Message.ENCRYPTION_PGP; + } else { + conversation.nextMessageEncryption = latestEncryption; + } + makeFingerprintWarning(latestEncryption); + } + } else { + if (conversation.getMucOptions().getError() != 0) { + mucError.setVisibility(View.VISIBLE); + if (conversation.getMucOptions().getError() == MucOptions.ERROR_NICK_IN_USE) { + mucErrorText.setText(getString(R.string.nick_in_use)); + } } else { - conversation.nextMessageEncryption = latestEncryption; + mucError.setVisibility(View.GONE); } - makeFingerprintWarning(latestEncryption); } getActivity().invalidateOptionsMenu(); updateChatMsgHint(); diff --git a/src/eu/siacs/conversations/ui/DialogMucDetails.java b/src/eu/siacs/conversations/ui/DialogMucDetails.java new file mode 100644 index 00000000..a752e88f --- /dev/null +++ b/src/eu/siacs/conversations/ui/DialogMucDetails.java @@ -0,0 +1,100 @@ +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/XmppActivity.java b/src/eu/siacs/conversations/ui/XmppActivity.java index 5114e640..569563c1 100644 --- a/src/eu/siacs/conversations/ui/XmppActivity.java +++ b/src/eu/siacs/conversations/ui/XmppActivity.java @@ -8,6 +8,8 @@ import android.content.Context; import android.content.Intent; import android.content.ServiceConnection; import android.os.IBinder; +import android.view.View; +import android.view.inputmethod.InputMethodManager; public abstract class XmppActivity extends Activity { public XmppConnectionService xmppConnectionService; @@ -48,5 +50,18 @@ public abstract class XmppActivity extends Activity { } } + protected void hideKeyboard() { + InputMethodManager inputManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + + View focus = getCurrentFocus(); + + if (focus != null) { + + inputManager.hideSoftInputFromWindow( + focus.getWindowToken(), + InputMethodManager.HIDE_NOT_ALWAYS); + } + } + abstract void onBackendConnected(); } |