parent
f19b1fb823
commit
6b9219c5f4
|
@ -239,5 +239,7 @@
|
||||||
<string name="disable_notifications_for_this_conversation">Disable notifications for this conversation</string>
|
<string name="disable_notifications_for_this_conversation">Disable notifications for this conversation</string>
|
||||||
<string name="notifications_disabled">Notifications are disabled</string>
|
<string name="notifications_disabled">Notifications are disabled</string>
|
||||||
<string name="enable">Enable</string>
|
<string name="enable">Enable</string>
|
||||||
|
<string name="conference_requires_password">Conference requires password</string>
|
||||||
|
<string name="enter_password">Enter password</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
|
@ -14,6 +14,7 @@ public class MucOptions {
|
||||||
public static final int ERROR_NO_ERROR = 0;
|
public static final int ERROR_NO_ERROR = 0;
|
||||||
public static final int ERROR_NICK_IN_USE = 1;
|
public static final int ERROR_NICK_IN_USE = 1;
|
||||||
public static final int ERROR_ROOM_NOT_FOUND = 2;
|
public static final int ERROR_ROOM_NOT_FOUND = 2;
|
||||||
|
public static final int ERROR_PASSWORD_REQUIRED = 3;
|
||||||
|
|
||||||
public interface OnRenameListener {
|
public interface OnRenameListener {
|
||||||
public void onRename(boolean success);
|
public void onRename(boolean success);
|
||||||
|
@ -106,6 +107,7 @@ public class MucOptions {
|
||||||
private User self = new User();
|
private User self = new User();
|
||||||
private String subject = null;
|
private String subject = null;
|
||||||
private String joinnick;
|
private String joinnick;
|
||||||
|
private String password = null;
|
||||||
|
|
||||||
public MucOptions(Account account) {
|
public MucOptions(Account account) {
|
||||||
this.account = account;
|
this.account = account;
|
||||||
|
@ -186,6 +188,8 @@ public class MucOptions {
|
||||||
} else {
|
} else {
|
||||||
this.error = ERROR_NICK_IN_USE;
|
this.error = ERROR_NICK_IN_USE;
|
||||||
}
|
}
|
||||||
|
} else if (error.hasChild("not-authorized")) {
|
||||||
|
this.error = ERROR_PASSWORD_REQUIRED;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -308,4 +312,12 @@ public class MucOptions {
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getPassword() {
|
||||||
|
return this.password;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPassword(String password) {
|
||||||
|
this.password = password;
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -1059,6 +1059,10 @@ public class XmppConnectionService extends Service {
|
||||||
packet.setAttribute("to", conversation.getMucOptions().getJoinJid());
|
packet.setAttribute("to", conversation.getMucOptions().getJoinJid());
|
||||||
Element x = new Element("x");
|
Element x = new Element("x");
|
||||||
x.setAttribute("xmlns", "http://jabber.org/protocol/muc");
|
x.setAttribute("xmlns", "http://jabber.org/protocol/muc");
|
||||||
|
if (conversation.getMucOptions().getPassword() != null) {
|
||||||
|
Element password = x.addChild("password");
|
||||||
|
password.setContent(conversation.getMucOptions().getPassword());
|
||||||
|
}
|
||||||
String sig = account.getPgpSignature();
|
String sig = account.getPgpSignature();
|
||||||
if (sig != null) {
|
if (sig != null) {
|
||||||
packet.addChild("status").setContent("online");
|
packet.addChild("status").setContent("online");
|
||||||
|
@ -1091,6 +1095,13 @@ public class XmppConnectionService extends Service {
|
||||||
this.renameListener = listener;
|
this.renameListener = listener;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void providePasswordForMuc(Conversation conversation, String password) {
|
||||||
|
if (conversation.getMode() == Conversation.MODE_MULTI) {
|
||||||
|
conversation.getMucOptions().setPassword(password);
|
||||||
|
joinMuc(conversation);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void renameInMuc(final Conversation conversation, final String nick) {
|
public void renameInMuc(final Conversation conversation, final String nick) {
|
||||||
final MucOptions options = conversation.getMucOptions();
|
final MucOptions options = conversation.getMucOptions();
|
||||||
options.setJoinNick(nick);
|
options.setJoinNick(nick);
|
||||||
|
|
|
@ -15,6 +15,7 @@ import eu.siacs.conversations.entities.MucOptions;
|
||||||
import eu.siacs.conversations.services.XmppConnectionService;
|
import eu.siacs.conversations.services.XmppConnectionService;
|
||||||
import eu.siacs.conversations.ui.EditMessage.OnEnterPressed;
|
import eu.siacs.conversations.ui.EditMessage.OnEnterPressed;
|
||||||
import eu.siacs.conversations.ui.XmppActivity.OnPresenceSelected;
|
import eu.siacs.conversations.ui.XmppActivity.OnPresenceSelected;
|
||||||
|
import eu.siacs.conversations.ui.XmppActivity.OnValueEdited;
|
||||||
import eu.siacs.conversations.ui.adapter.MessageAdapter;
|
import eu.siacs.conversations.ui.adapter.MessageAdapter;
|
||||||
import eu.siacs.conversations.ui.adapter.MessageAdapter.OnContactPictureClicked;
|
import eu.siacs.conversations.ui.adapter.MessageAdapter.OnContactPictureClicked;
|
||||||
import eu.siacs.conversations.ui.adapter.MessageAdapter.OnContactPictureLongClicked;
|
import eu.siacs.conversations.ui.adapter.MessageAdapter.OnContactPictureLongClicked;
|
||||||
|
@ -128,6 +129,25 @@ public class ConversationFragment extends Fragment {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
private OnClickListener enterPassword = new OnClickListener() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
MucOptions muc = conversation.getMucOptions();
|
||||||
|
String password = muc.getPassword();
|
||||||
|
if (password==null) {
|
||||||
|
password = "";
|
||||||
|
}
|
||||||
|
activity.quickEdit(password, new OnValueEdited() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onValueEdited(String value) {
|
||||||
|
activity.xmppConnectionService.providePasswordForMuc(conversation,value);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
private OnScrollListener mOnScrollListener = new OnScrollListener() {
|
private OnScrollListener mOnScrollListener = new OnScrollListener() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -287,10 +307,12 @@ public class ConversationFragment extends Fragment {
|
||||||
if (oldString.isEmpty() || mEditMessage.getSelectionStart() == 0) {
|
if (oldString.isEmpty() || mEditMessage.getSelectionStart() == 0) {
|
||||||
mEditMessage.getText().insert(0, nick + ": ");
|
mEditMessage.getText().insert(0, nick + ": ");
|
||||||
} else {
|
} else {
|
||||||
if (mEditMessage.getText().charAt(mEditMessage.getSelectionStart()-1)!=' ') {
|
if (mEditMessage.getText().charAt(
|
||||||
nick = " "+nick;
|
mEditMessage.getSelectionStart() - 1) != ' ') {
|
||||||
|
nick = " " + nick;
|
||||||
}
|
}
|
||||||
mEditMessage.getText().insert(mEditMessage.getSelectionStart(), nick + " ");
|
mEditMessage.getText().insert(mEditMessage.getSelectionStart(),
|
||||||
|
nick + " ");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -337,8 +359,7 @@ public class ConversationFragment extends Fragment {
|
||||||
activity.getSlidingPaneLayout().closePane();
|
activity.getSlidingPaneLayout().closePane();
|
||||||
activity.getActionBar().setDisplayHomeAsUpEnabled(true);
|
activity.getActionBar().setDisplayHomeAsUpEnabled(true);
|
||||||
activity.getActionBar().setHomeButtonEnabled(true);
|
activity.getActionBar().setHomeButtonEnabled(true);
|
||||||
activity.getActionBar().setTitle(
|
activity.getActionBar().setTitle(conversation.getName());
|
||||||
conversation.getName());
|
|
||||||
activity.invalidateOptionsMenu();
|
activity.invalidateOptionsMenu();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -385,14 +406,15 @@ public class ConversationFragment extends Fragment {
|
||||||
if (this.conversation != null) {
|
if (this.conversation != null) {
|
||||||
final Contact contact = this.conversation.getContact();
|
final Contact contact = this.conversation.getContact();
|
||||||
if (this.conversation.isMuted()) {
|
if (this.conversation.isMuted()) {
|
||||||
showSnackbar(R.string.notifications_disabled, R.string.enable, new OnClickListener() {
|
showSnackbar(R.string.notifications_disabled, R.string.enable,
|
||||||
|
new OnClickListener() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
conversation.setMutedTill(0);
|
conversation.setMutedTill(0);
|
||||||
updateMessages();
|
updateMessages();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else if (!contact.showInRoster()
|
} else if (!contact.showInRoster()
|
||||||
&& contact
|
&& contact
|
||||||
.getOption(Contact.Options.PENDING_SUBSCRIPTION_REQUEST)) {
|
.getOption(Contact.Options.PENDING_SUBSCRIPTION_REQUEST)) {
|
||||||
|
@ -435,12 +457,20 @@ public class ConversationFragment extends Fragment {
|
||||||
} else {
|
} else {
|
||||||
if (!conversation.getMucOptions().online()
|
if (!conversation.getMucOptions().online()
|
||||||
&& conversation.getAccount().getStatus() == Account.STATUS_ONLINE) {
|
&& conversation.getAccount().getStatus() == Account.STATUS_ONLINE) {
|
||||||
if (conversation.getMucOptions().getError() == MucOptions.ERROR_NICK_IN_USE) {
|
int error = conversation.getMucOptions().getError();
|
||||||
|
switch (error) {
|
||||||
|
case MucOptions.ERROR_NICK_IN_USE:
|
||||||
showSnackbar(R.string.nick_in_use, R.string.edit,
|
showSnackbar(R.string.nick_in_use, R.string.edit,
|
||||||
clickToMuc);
|
clickToMuc);
|
||||||
} else if (conversation.getMucOptions().getError() == MucOptions.ERROR_ROOM_NOT_FOUND) {
|
break;
|
||||||
|
case MucOptions.ERROR_ROOM_NOT_FOUND:
|
||||||
showSnackbar(R.string.conference_not_found,
|
showSnackbar(R.string.conference_not_found,
|
||||||
R.string.leave, leaveMuc);
|
R.string.leave, leaveMuc);
|
||||||
|
case MucOptions.ERROR_PASSWORD_REQUIRED:
|
||||||
|
showSnackbar(R.string.conference_requires_password,
|
||||||
|
R.string.enter_password, enterPassword);
|
||||||
|
default:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -448,7 +478,6 @@ public class ConversationFragment extends Fragment {
|
||||||
updateChatMsgHint();
|
updateChatMsgHint();
|
||||||
if (!activity.shouldPaneBeOpen()) {
|
if (!activity.shouldPaneBeOpen()) {
|
||||||
activity.xmppConnectionService.markRead(conversation);
|
activity.xmppConnectionService.markRead(conversation);
|
||||||
// TODO update notifications
|
|
||||||
UIHelper.updateNotification(getActivity(),
|
UIHelper.updateNotification(getActivity(),
|
||||||
activity.getConversationList(), null, false);
|
activity.getConversationList(), null, false);
|
||||||
activity.updateConversationList();
|
activity.updateConversationList();
|
||||||
|
@ -493,7 +522,8 @@ public class ConversationFragment extends Fragment {
|
||||||
Set<String> knownFingerprints = conversation.getContact()
|
Set<String> knownFingerprints = conversation.getContact()
|
||||||
.getOtrFingerprints();
|
.getOtrFingerprints();
|
||||||
if ((latestEncryption == Message.ENCRYPTION_OTR)
|
if ((latestEncryption == Message.ENCRYPTION_OTR)
|
||||||
&& (conversation.hasValidOtrSession() && (!conversation.isMuted())
|
&& (conversation.hasValidOtrSession()
|
||||||
|
&& (!conversation.isMuted())
|
||||||
&& (conversation.getOtrSession().getSessionStatus() == SessionStatus.ENCRYPTED) && (!knownFingerprints
|
&& (conversation.getOtrSession().getSessionStatus() == SessionStatus.ENCRYPTED) && (!knownFingerprints
|
||||||
.contains(conversation.getOtrFingerprint())))) {
|
.contains(conversation.getOtrFingerprint())))) {
|
||||||
showSnackbar(R.string.unknown_otr_fingerprint, R.string.verify,
|
showSnackbar(R.string.unknown_otr_fingerprint, R.string.verify,
|
||||||
|
|
Loading…
Reference in a new issue