tags for muc
This commit is contained in:
parent
9aac6d99e7
commit
c62cc344b5
|
@ -25,6 +25,7 @@ public class Bookmark extends Element implements ListItem {
|
||||||
private final Account account;
|
private final Account account;
|
||||||
private WeakReference<Conversation> conversation;
|
private WeakReference<Conversation> conversation;
|
||||||
private Jid jid;
|
private Jid jid;
|
||||||
|
protected Element extensions = new Element("extensions", Namespace.BOOKMARKS2);
|
||||||
|
|
||||||
public Bookmark(final Account account, final Jid jid) {
|
public Bookmark(final Account account, final Jid jid) {
|
||||||
super("conference");
|
super("conference");
|
||||||
|
@ -101,9 +102,48 @@ public class Bookmark extends Element implements ListItem {
|
||||||
bookmark.setBookmarkName(conference.getAttribute("name"));
|
bookmark.setBookmarkName(conference.getAttribute("name"));
|
||||||
bookmark.setAutojoin(conference.getAttributeAsBoolean("autojoin"));
|
bookmark.setAutojoin(conference.getAttributeAsBoolean("autojoin"));
|
||||||
bookmark.setNick(conference.findChildContent("nick"));
|
bookmark.setNick(conference.findChildContent("nick"));
|
||||||
|
bookmark.setPassword(conference.findChildContent("password"));
|
||||||
|
final Element extensions = conference.findChild("extensions", Namespace.BOOKMARKS2);
|
||||||
|
if (extensions != null) {
|
||||||
|
for (final Element ext : extensions.getChildren()) {
|
||||||
|
if (ext.getName().equals("group") && ext.getNamespace().equals("jabber:iq:roster")) {
|
||||||
|
bookmark.addGroup(ext.getContent());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
bookmark.extensions = extensions;
|
||||||
|
}
|
||||||
return bookmark;
|
return bookmark;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Element getExtensions() {
|
||||||
|
return extensions;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addGroup(final String group) {
|
||||||
|
addChild("group", "jabber:iq:roster").setContent(group);
|
||||||
|
extensions.addChild("group", "jabber:iq:roster").setContent(group);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setGroups(List<String> groups) {
|
||||||
|
final List<Element> children = new ArrayList<>(getChildren());
|
||||||
|
for (final Element el : children) {
|
||||||
|
if (el.getName().equals("group")) {
|
||||||
|
removeChild(el);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
final List<Element> extChildren = new ArrayList<>(extensions.getChildren());
|
||||||
|
for (final Element el : extChildren) {
|
||||||
|
if (el.getName().equals("group")) {
|
||||||
|
extensions.removeChild(el);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (final String group : groups) {
|
||||||
|
addGroup(group);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void setAutojoin(boolean autojoin) {
|
public void setAutojoin(boolean autojoin) {
|
||||||
if (autojoin) {
|
if (autojoin) {
|
||||||
this.setAttribute("autojoin", "true");
|
this.setAttribute("autojoin", "true");
|
||||||
|
@ -150,15 +190,24 @@ public class Bookmark extends Element implements ListItem {
|
||||||
return jid == null || nick == null || nick.trim().isEmpty() ? jid : jid.withResource(nick);
|
return jid == null || nick == null || nick.trim().isEmpty() ? jid : jid.withResource(nick);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
public List<Tag> getGroupTags() {
|
||||||
public List<Tag> getTags(Context context) {
|
|
||||||
ArrayList<Tag> tags = new ArrayList<>();
|
ArrayList<Tag> tags = new ArrayList<>();
|
||||||
|
|
||||||
for (Element element : getChildren()) {
|
for (Element element : getChildren()) {
|
||||||
if (element.getName().equals("group") && element.getContent() != null) {
|
if (element.getName().equals("group") && element.getContent() != null) {
|
||||||
String group = element.getContent();
|
String group = element.getContent();
|
||||||
tags.add(new Tag(group, UIHelper.getColorForName(group,true)));
|
tags.add(new Tag(group, UIHelper.getColorForName(group, true)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return tags;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<Tag> getTags(Context context) {
|
||||||
|
ArrayList<Tag> tags = new ArrayList<>();
|
||||||
|
tags.add(new Tag("Channel", UIHelper.getColorForName("Channel",true)));
|
||||||
|
tags.addAll(getGroupTags());
|
||||||
return tags;
|
return tags;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -203,15 +252,11 @@ public class Bookmark extends Element implements ListItem {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
} else if (parts.length > 0) {
|
} else {
|
||||||
final Jid jid = getJid();
|
final Jid jid = getJid();
|
||||||
return (jid != null && jid.toString().contains(parts[0])) ||
|
return (jid != null && jid.toString().contains(parts[0])) ||
|
||||||
getDisplayName().toLowerCase(Locale.US).contains(parts[0]) ||
|
getDisplayName().toLowerCase(Locale.US).contains(parts[0]) ||
|
||||||
matchInTag(context, parts[0]);
|
matchInTag(context, parts[0]);
|
||||||
} else {
|
|
||||||
final Jid jid = getJid();
|
|
||||||
return (jid != null && jid.toString().contains(needle)) ||
|
|
||||||
getDisplayName().toLowerCase(Locale.US).contains(needle);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -247,6 +247,7 @@ public class IqGenerator extends AbstractGenerator {
|
||||||
public Element publishBookmarkItem(final Bookmark bookmark) {
|
public Element publishBookmarkItem(final Bookmark bookmark) {
|
||||||
final String name = bookmark.getBookmarkName();
|
final String name = bookmark.getBookmarkName();
|
||||||
final String nick = bookmark.getNick();
|
final String nick = bookmark.getNick();
|
||||||
|
final String password = bookmark.getPassword();
|
||||||
final boolean autojoin = bookmark.autojoin();
|
final boolean autojoin = bookmark.autojoin();
|
||||||
final Element conference = new Element("conference", Namespace.BOOKMARKS2);
|
final Element conference = new Element("conference", Namespace.BOOKMARKS2);
|
||||||
if (name != null) {
|
if (name != null) {
|
||||||
|
@ -255,7 +256,11 @@ public class IqGenerator extends AbstractGenerator {
|
||||||
if (nick != null) {
|
if (nick != null) {
|
||||||
conference.addChild("nick").setContent(nick);
|
conference.addChild("nick").setContent(nick);
|
||||||
}
|
}
|
||||||
|
if (password != null) {
|
||||||
|
conference.addChild("password").setContent(password);
|
||||||
|
}
|
||||||
conference.setAttribute("autojoin",String.valueOf(autojoin));
|
conference.setAttribute("autojoin",String.valueOf(autojoin));
|
||||||
|
conference.addChild(bookmark.getExtensions());
|
||||||
return conference;
|
return conference;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -9,25 +9,34 @@ import android.text.Editable;
|
||||||
import android.text.SpannableStringBuilder;
|
import android.text.SpannableStringBuilder;
|
||||||
import android.text.TextWatcher;
|
import android.text.TextWatcher;
|
||||||
import android.text.method.LinkMovementMethod;
|
import android.text.method.LinkMovementMethod;
|
||||||
|
import android.view.LayoutInflater;
|
||||||
import android.view.Menu;
|
import android.view.Menu;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.View.OnClickListener;
|
import android.view.View.OnClickListener;
|
||||||
|
import android.widget.ArrayAdapter;
|
||||||
|
import android.widget.TextView;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
import androidx.appcompat.app.AlertDialog;
|
import androidx.appcompat.app.AlertDialog;
|
||||||
import androidx.databinding.DataBindingUtil;
|
import androidx.databinding.DataBindingUtil;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
import java.util.Comparator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import eu.siacs.conversations.Config;
|
import eu.siacs.conversations.Config;
|
||||||
import eu.siacs.conversations.R;
|
import eu.siacs.conversations.R;
|
||||||
import eu.siacs.conversations.databinding.ActivityMucDetailsBinding;
|
import eu.siacs.conversations.databinding.ActivityMucDetailsBinding;
|
||||||
import eu.siacs.conversations.entities.Account;
|
import eu.siacs.conversations.entities.Account;
|
||||||
import eu.siacs.conversations.entities.Bookmark;
|
import eu.siacs.conversations.entities.Bookmark;
|
||||||
|
import eu.siacs.conversations.entities.Contact;
|
||||||
import eu.siacs.conversations.entities.Conversation;
|
import eu.siacs.conversations.entities.Conversation;
|
||||||
|
import eu.siacs.conversations.entities.ListItem;
|
||||||
import eu.siacs.conversations.entities.MucOptions;
|
import eu.siacs.conversations.entities.MucOptions;
|
||||||
import eu.siacs.conversations.entities.MucOptions.User;
|
import eu.siacs.conversations.entities.MucOptions.User;
|
||||||
import eu.siacs.conversations.services.XmppConnectionService;
|
import eu.siacs.conversations.services.XmppConnectionService;
|
||||||
|
@ -200,6 +209,7 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers
|
||||||
this.binding.mucEditTitle.addTextChangedListener(this);
|
this.binding.mucEditTitle.addTextChangedListener(this);
|
||||||
this.binding.mucEditSubject.addTextChangedListener(this);
|
this.binding.mucEditSubject.addTextChangedListener(this);
|
||||||
this.binding.mucEditSubject.addTextChangedListener(new StylingHelper.MessageEditorStyler(this.binding.mucEditSubject));
|
this.binding.mucEditSubject.addTextChangedListener(new StylingHelper.MessageEditorStyler(this.binding.mucEditSubject));
|
||||||
|
this.binding.editTags.addTextChangedListener(this);
|
||||||
this.mMediaAdapter = new MediaAdapter(this, R.dimen.media_size);
|
this.mMediaAdapter = new MediaAdapter(this, R.dimen.media_size);
|
||||||
this.mUserPreviewAdapter = new UserPreviewAdapter();
|
this.mUserPreviewAdapter = new UserPreviewAdapter();
|
||||||
this.binding.media.setAdapter(mMediaAdapter);
|
this.binding.media.setAdapter(mMediaAdapter);
|
||||||
|
@ -301,12 +311,52 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers
|
||||||
if (!owner) {
|
if (!owner) {
|
||||||
this.binding.mucEditSubject.requestFocus();
|
this.binding.mucEditSubject.requestFocus();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final Bookmark bookmark = mConversation.getBookmark();
|
||||||
|
if (bookmark != null && mConversation.getAccount().getXmppConnection().getFeatures().bookmarks2()) {
|
||||||
|
for (final ListItem.Tag group : bookmark.getGroupTags()) {
|
||||||
|
binding.editTags.addObjectSync(group);
|
||||||
|
}
|
||||||
|
ArrayList<ListItem.Tag> tags = new ArrayList<>();
|
||||||
|
for (final Account account : xmppConnectionService.getAccounts()) {
|
||||||
|
for (Contact contact : account.getRoster().getContacts()) {
|
||||||
|
tags.addAll(contact.getTags(this));
|
||||||
|
}
|
||||||
|
for (Bookmark bmark : account.getBookmarks()) {
|
||||||
|
tags.addAll(bmark.getTags(this));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Comparator<Map.Entry<ListItem.Tag,Integer>> sortTagsBy = Map.Entry.comparingByValue(Comparator.reverseOrder());
|
||||||
|
sortTagsBy = sortTagsBy.thenComparing(entry -> entry.getKey().getName());
|
||||||
|
|
||||||
|
ArrayAdapter<ListItem.Tag> adapter = new ArrayAdapter<>(
|
||||||
|
this,
|
||||||
|
android.R.layout.simple_list_item_1,
|
||||||
|
tags.stream()
|
||||||
|
.collect(Collectors.toMap((x) -> x, (t) -> 1, (c1, c2) -> c1 + c2))
|
||||||
|
.entrySet().stream()
|
||||||
|
.sorted(sortTagsBy)
|
||||||
|
.map(e -> e.getKey()).collect(Collectors.toList())
|
||||||
|
);
|
||||||
|
binding.editTags.setAdapter(adapter);
|
||||||
|
this.binding.editTags.setVisibility(View.VISIBLE);
|
||||||
|
} else {
|
||||||
|
this.binding.editTags.setVisibility(View.GONE);
|
||||||
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
String subject = this.binding.mucEditSubject.isEnabled() ? this.binding.mucEditSubject.getEditableText().toString().trim() : null;
|
String subject = this.binding.mucEditSubject.isEnabled() ? this.binding.mucEditSubject.getEditableText().toString().trim() : null;
|
||||||
String name = this.binding.mucEditTitle.isEnabled() ? this.binding.mucEditTitle.getEditableText().toString().trim() : null;
|
String name = this.binding.mucEditTitle.isEnabled() ? this.binding.mucEditTitle.getEditableText().toString().trim() : null;
|
||||||
onMucInfoUpdated(subject, name);
|
onMucInfoUpdated(subject, name);
|
||||||
|
final Bookmark bookmark = mConversation.getBookmark();
|
||||||
|
if (bookmark != null && mConversation.getAccount().getXmppConnection().getFeatures().bookmarks2()) {
|
||||||
|
bookmark.setGroups(binding.editTags.getObjects().stream().map(tag -> tag.getName()).collect(Collectors.toList()));
|
||||||
|
xmppConnectionService.createBookmark(bookmark.getAccount(), bookmark);
|
||||||
|
}
|
||||||
|
|
||||||
SoftKeyboardUtils.hideSoftKeyboard(this);
|
SoftKeyboardUtils.hideSoftKeyboard(this);
|
||||||
hideEditor();
|
hideEditor();
|
||||||
|
updateView();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -458,7 +508,8 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers
|
||||||
account = mConversation.getAccount().getJid().asBareJid().toEscapedString();
|
account = mConversation.getAccount().getJid().asBareJid().toEscapedString();
|
||||||
}
|
}
|
||||||
setTitle(mucOptions.isPrivateAndNonAnonymous() ? R.string.action_muc_details : R.string.channel_details);
|
setTitle(mucOptions.isPrivateAndNonAnonymous() ? R.string.action_muc_details : R.string.channel_details);
|
||||||
this.binding.editMucNameButton.setVisibility((self.getAffiliation().ranks(MucOptions.Affiliation.OWNER) || mucOptions.canChangeSubject()) ? View.VISIBLE : View.GONE);
|
final Bookmark bookmark = mConversation.getBookmark();
|
||||||
|
this.binding.editMucNameButton.setVisibility((self.getAffiliation().ranks(MucOptions.Affiliation.OWNER) || mucOptions.canChangeSubject() || (bookmark != null && mConversation.getAccount().getXmppConnection().getFeatures().bookmarks2())) ? View.VISIBLE : View.GONE);
|
||||||
this.binding.detailsAccount.setText(getString(R.string.using_account, account));
|
this.binding.detailsAccount.setText(getString(R.string.using_account, account));
|
||||||
if (mConversation.isPrivateAndNonAnonymous()) {
|
if (mConversation.isPrivateAndNonAnonymous()) {
|
||||||
this.binding.jid.setText(getString(R.string.hosted_on, mConversation.getJid().getDomain()));
|
this.binding.jid.setText(getString(R.string.hosted_on, mConversation.getJid().getDomain()));
|
||||||
|
@ -571,6 +622,25 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers
|
||||||
this.binding.noUsersHints.setVisibility(View.GONE);
|
this.binding.noUsersHints.setVisibility(View.GONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (bookmark == null) {
|
||||||
|
binding.tags.setVisibility(View.GONE);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
List<ListItem.Tag> tagList = bookmark.getTags(this);
|
||||||
|
if (tagList.size() == 0) {
|
||||||
|
binding.tags.setVisibility(View.GONE);
|
||||||
|
} else {
|
||||||
|
final LayoutInflater inflater = getLayoutInflater();
|
||||||
|
binding.tags.setVisibility(View.VISIBLE);
|
||||||
|
binding.tags.removeAllViewsInLayout();
|
||||||
|
for (final ListItem.Tag tag : tagList) {
|
||||||
|
final TextView tv = (TextView) inflater.inflate(R.layout.list_item_tag, binding.tags, false);
|
||||||
|
tv.setText(tag.getName());
|
||||||
|
tv.setBackgroundColor(tag.getColor());
|
||||||
|
binding.tags.addView(tv);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getStatus(Context context, User user, final boolean advanced) {
|
public static String getStatus(Context context, User user, final boolean advanced) {
|
||||||
|
@ -645,7 +715,8 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers
|
||||||
if (this.binding.mucEditor.getVisibility() == View.VISIBLE) {
|
if (this.binding.mucEditor.getVisibility() == View.VISIBLE) {
|
||||||
boolean subjectChanged = changed(binding.mucEditSubject.getEditableText().toString(), mucOptions.getSubject());
|
boolean subjectChanged = changed(binding.mucEditSubject.getEditableText().toString(), mucOptions.getSubject());
|
||||||
boolean nameChanged = changed(binding.mucEditTitle.getEditableText().toString(), mucOptions.getName());
|
boolean nameChanged = changed(binding.mucEditTitle.getEditableText().toString(), mucOptions.getName());
|
||||||
if (subjectChanged || nameChanged) {
|
final Bookmark bookmark = mConversation.getBookmark();
|
||||||
|
if (subjectChanged || nameChanged || (bookmark != null && mConversation.getAccount().getXmppConnection().getFeatures().bookmarks2())) {
|
||||||
this.binding.editMucNameButton.setImageResource(getThemeResource(R.attr.icon_save, R.drawable.ic_save_black_24dp));
|
this.binding.editMucNameButton.setImageResource(getThemeResource(R.attr.icon_save, R.drawable.ic_save_black_24dp));
|
||||||
} else {
|
} else {
|
||||||
this.binding.editMucNameButton.setImageResource(getThemeResource(R.attr.icon_cancel, R.drawable.ic_cancel_black_24dp));
|
this.binding.editMucNameButton.setImageResource(getThemeResource(R.attr.icon_cancel, R.drawable.ic_cancel_black_24dp));
|
||||||
|
|
|
@ -206,7 +206,7 @@ public class StartConversationActivity extends XmppActivity implements XmppConne
|
||||||
int pos = binding.startConversationViewPager.getCurrentItem();
|
int pos = binding.startConversationViewPager.getCurrentItem();
|
||||||
if (pos == 0) {
|
if (pos == 0) {
|
||||||
if (contacts.size() == 1) {
|
if (contacts.size() == 1) {
|
||||||
openConversationForContact((Contact) contacts.get(0));
|
openConversation((Contact) contacts.get(0));
|
||||||
return true;
|
return true;
|
||||||
} else if (contacts.size() == 0 && conferences.size() == 1) {
|
} else if (contacts.size() == 0 && conferences.size() == 1) {
|
||||||
openConversationsForBookmark((Bookmark) conferences.get(0));
|
openConversationsForBookmark((Bookmark) conferences.get(0));
|
||||||
|
@ -217,7 +217,7 @@ public class StartConversationActivity extends XmppActivity implements XmppConne
|
||||||
openConversationsForBookmark((Bookmark) conferences.get(0));
|
openConversationsForBookmark((Bookmark) conferences.get(0));
|
||||||
return true;
|
return true;
|
||||||
} else if (conferences.size() == 0 && contacts.size() == 1) {
|
} else if (conferences.size() == 0 && contacts.size() == 1) {
|
||||||
openConversationForContact((Contact) contacts.get(0));
|
openConversation((Contact) contacts.get(0));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -418,8 +418,15 @@ public class StartConversationActivity extends XmppActivity implements XmppConne
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void openConversationForContact(int position) {
|
protected void openConversationForContact(int position) {
|
||||||
Contact contact = (Contact) contacts.get(position);
|
openConversation(contacts.get(position));
|
||||||
openConversationForContact(contact);
|
}
|
||||||
|
|
||||||
|
protected void openConversation(ListItem item) {
|
||||||
|
if (item instanceof Contact) {
|
||||||
|
openConversationForContact((Contact) item);
|
||||||
|
} else {
|
||||||
|
openConversationsForBookmark((Bookmark) item);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void openConversationForContact(Contact contact) {
|
protected void openConversationForContact(Contact contact) {
|
||||||
|
|
|
@ -50,6 +50,12 @@ public class Element {
|
||||||
return child;
|
return child;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void removeChild(Element element) {
|
||||||
|
if (name == null) return;
|
||||||
|
this.children.remove(element);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public Element setContent(String content) {
|
public Element setContent(String content) {
|
||||||
this.content = content;
|
this.content = content;
|
||||||
this.children.clear();
|
this.children.clear();
|
||||||
|
|
|
@ -59,7 +59,7 @@ public final class Namespace {
|
||||||
public static final String PUSH = "urn:xmpp:push:0";
|
public static final String PUSH = "urn:xmpp:push:0";
|
||||||
public static final String COMMANDS = "http://jabber.org/protocol/commands";
|
public static final String COMMANDS = "http://jabber.org/protocol/commands";
|
||||||
public static final String MUC_USER = "http://jabber.org/protocol/muc#user";
|
public static final String MUC_USER = "http://jabber.org/protocol/muc#user";
|
||||||
public static final String BOOKMARKS2 = "urn:xmpp:bookmarks:0";
|
public static final String BOOKMARKS2 = "urn:xmpp:bookmarks:1";
|
||||||
public static final String BOOKMARKS2_COMPAT = BOOKMARKS2 + "#compat";
|
public static final String BOOKMARKS2_COMPAT = BOOKMARKS2 + "#compat";
|
||||||
public static final String INVITE = "urn:xmpp:invite";
|
public static final String INVITE = "urn:xmpp:invite";
|
||||||
public static final String PARS = "urn:xmpp:pars:0";
|
public static final String PARS = "urn:xmpp:pars:0";
|
||||||
|
|
|
@ -2795,8 +2795,7 @@ public class XmppConnection implements Runnable {
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean bookmarks2() {
|
public boolean bookmarks2() {
|
||||||
return Config
|
return Config.USE_BOOKMARKS2 || hasDiscoFeature(account.getJid().asBareJid(), Namespace.BOOKMARKS2_COMPAT);
|
||||||
.USE_BOOKMARKS2 /* || hasDiscoFeature(account.getJid().asBareJid(), Namespace.BOOKMARKS2_COMPAT)*/;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean externalServiceDiscovery() {
|
public boolean externalServiceDiscovery() {
|
||||||
|
|
|
@ -30,7 +30,7 @@ public class PublishOptions {
|
||||||
options.putString("pubsub#persist_items", "true");
|
options.putString("pubsub#persist_items", "true");
|
||||||
options.putString("pubsub#access_model", "whitelist");
|
options.putString("pubsub#access_model", "whitelist");
|
||||||
options.putString("pubsub#send_last_published_item", "never");
|
options.putString("pubsub#send_last_published_item", "never");
|
||||||
options.putString("pubsub#max_items", "128"); //YOLO!
|
options.putString("pubsub#max_items", "max"); //YOLO!
|
||||||
|
|
||||||
options.putString("pubsub#notify_delete", "true");
|
options.putString("pubsub#notify_delete", "true");
|
||||||
options.putString("pubsub#notify_retract", "true"); //one could also set notify=true on the retract
|
options.putString("pubsub#notify_retract", "true"); //one could also set notify=true on the retract
|
||||||
|
|
|
@ -86,6 +86,16 @@
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:autoLink="web"
|
android:autoLink="web"
|
||||||
android:textAppearance="@style/TextAppearance.Conversations.Subhead"/>
|
android:textAppearance="@style/TextAppearance.Conversations.Subhead"/>
|
||||||
|
|
||||||
|
<com.wefika.flowlayout.FlowLayout
|
||||||
|
android:id="@+id/tags"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginBottom="4dp"
|
||||||
|
android:layout_marginLeft="-2dp"
|
||||||
|
android:layout_marginTop="4dp"
|
||||||
|
android:orientation="horizontal" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
|
||||||
|
@ -128,6 +138,13 @@
|
||||||
android:textAppearance="@style/Widget.Conversations.EditText"/>
|
android:textAppearance="@style/Widget.Conversations.EditText"/>
|
||||||
</com.google.android.material.textfield.TextInputLayout>
|
</com.google.android.material.textfield.TextInputLayout>
|
||||||
|
|
||||||
|
<eu.siacs.conversations.ui.widget.TagEditorView
|
||||||
|
android:id="@+id/edit_tags"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:hint="Tags"
|
||||||
|
android:layout_marginBottom="4dp" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<ImageButton
|
<ImageButton
|
||||||
|
|
Loading…
Reference in a new issue