aboutsummaryrefslogtreecommitdiffstats
path: root/src/eu/siacs/conversations/ui
diff options
context:
space:
mode:
authorDaniel Gultsch <daniel@gultsch.de>2014-03-03 05:01:02 +0100
committerDaniel Gultsch <daniel@gultsch.de>2014-03-03 05:01:02 +0100
commitc609eefefac5097c7c40a9f1b8741e9634da316f (patch)
tree53363dfbab46d84e81b8b95f49e586374dc358f0 /src/eu/siacs/conversations/ui
parent2ab6cb0ada6370e6ea83a73e0a6a39ea3ff90715 (diff)
api changes. muc options
Diffstat (limited to 'src/eu/siacs/conversations/ui')
-rw-r--r--src/eu/siacs/conversations/ui/ConversationActivity.java17
-rw-r--r--src/eu/siacs/conversations/ui/ConversationFragment.java41
-rw-r--r--src/eu/siacs/conversations/ui/DialogMucDetails.java100
-rw-r--r--src/eu/siacs/conversations/ui/XmppActivity.java15
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();
}