introduce setting to ignore invites from strangers
This commit is contained in:
parent
d0945c35ee
commit
3892015310
|
@ -44,6 +44,8 @@ public class AppSettings {
|
||||||
public static final String COLORFUL_CHAT_BUBBLES = "use_green_background";
|
public static final String COLORFUL_CHAT_BUBBLES = "use_green_background";
|
||||||
public static final String LARGE_FONT = "large_font";
|
public static final String LARGE_FONT = "large_font";
|
||||||
|
|
||||||
|
private static final String ACCEPT_INVITES_FROM_STRANGERS = "accept_invites_from_strangers";
|
||||||
|
|
||||||
private final Context context;
|
private final Context context;
|
||||||
|
|
||||||
public AppSettings(final Context context) {
|
public AppSettings(final Context context) {
|
||||||
|
@ -107,6 +109,11 @@ public class AppSettings {
|
||||||
return getBooleanPreference(USE_TOR, R.bool.use_tor);
|
return getBooleanPreference(USE_TOR, R.bool.use_tor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isAcceptInvitesFromStrangers() {
|
||||||
|
return getBooleanPreference(
|
||||||
|
ACCEPT_INVITES_FROM_STRANGERS, R.bool.accept_invites_from_strangers);
|
||||||
|
}
|
||||||
|
|
||||||
private boolean getBooleanPreference(@NonNull final String name, @BoolRes int res) {
|
private boolean getBooleanPreference(@NonNull final String name, @BoolRes int res) {
|
||||||
final SharedPreferences sharedPreferences =
|
final SharedPreferences sharedPreferences =
|
||||||
PreferenceManager.getDefaultSharedPreferences(context);
|
PreferenceManager.getDefaultSharedPreferences(context);
|
||||||
|
|
|
@ -14,6 +14,7 @@ import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
|
import eu.siacs.conversations.AppSettings;
|
||||||
import eu.siacs.conversations.Config;
|
import eu.siacs.conversations.Config;
|
||||||
import eu.siacs.conversations.R;
|
import eu.siacs.conversations.R;
|
||||||
import eu.siacs.conversations.crypto.axolotl.AxolotlService;
|
import eu.siacs.conversations.crypto.axolotl.AxolotlService;
|
||||||
|
@ -459,7 +460,7 @@ public class MessageParser extends AbstractParser implements OnMessagePacketRece
|
||||||
if (selfAddressed) {
|
if (selfAddressed) {
|
||||||
counterpart = from;
|
counterpart = from;
|
||||||
} else {
|
} else {
|
||||||
counterpart = to != null ? to : account.getJid();
|
counterpart = to;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
status = Message.STATUS_RECEIVED;
|
status = Message.STATUS_RECEIVED;
|
||||||
|
@ -1136,22 +1137,48 @@ public class MessageParser extends AbstractParser implements OnMessagePacketRece
|
||||||
if (this.jid == null) {
|
if (this.jid == null) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
final Contact contact = this.inviter != null ? account.getRoster().getContact(this.inviter) : null;
|
final Contact contact =
|
||||||
|
this.inviter != null ? account.getRoster().getContact(this.inviter) : null;
|
||||||
if (contact != null && contact.isBlocked()) {
|
if (contact != null && contact.isBlocked()) {
|
||||||
Log.d(Config.LOGTAG,account.getJid().asBareJid()+": ignore invite from "+contact.getJid()+" because contact is blocked");
|
Log.d(
|
||||||
|
Config.LOGTAG,
|
||||||
|
account.getJid().asBareJid()
|
||||||
|
+ ": ignore invite from "
|
||||||
|
+ contact.getJid()
|
||||||
|
+ " because contact is blocked");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
final Conversation conversation = mXmppConnectionService.findOrCreateConversation(account, jid, true, false);
|
final AppSettings appSettings = new AppSettings(mXmppConnectionService);
|
||||||
|
if ((contact != null && contact.showInContactList())
|
||||||
|
|| appSettings.isAcceptInvitesFromStrangers()) {
|
||||||
|
final Conversation conversation =
|
||||||
|
mXmppConnectionService.findOrCreateConversation(account, jid, true, false);
|
||||||
if (conversation.getMucOptions().online()) {
|
if (conversation.getMucOptions().online()) {
|
||||||
Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": received invite to " + jid + " but muc is considered to be online");
|
Log.d(
|
||||||
|
Config.LOGTAG,
|
||||||
|
account.getJid().asBareJid()
|
||||||
|
+ ": received invite to "
|
||||||
|
+ jid
|
||||||
|
+ " but muc is considered to be online");
|
||||||
mXmppConnectionService.mucSelfPingAndRejoin(conversation);
|
mXmppConnectionService.mucSelfPingAndRejoin(conversation);
|
||||||
} else {
|
} else {
|
||||||
conversation.getMucOptions().setPassword(password);
|
conversation.getMucOptions().setPassword(password);
|
||||||
mXmppConnectionService.databaseBackend.updateConversation(conversation);
|
mXmppConnectionService.databaseBackend.updateConversation(conversation);
|
||||||
mXmppConnectionService.joinMuc(conversation, contact != null && contact.showInContactList());
|
mXmppConnectionService.joinMuc(
|
||||||
|
conversation, contact != null && contact.showInContactList());
|
||||||
mXmppConnectionService.updateConversationUi();
|
mXmppConnectionService.updateConversationUi();
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
} else {
|
||||||
|
Log.d(
|
||||||
|
Config.LOGTAG,
|
||||||
|
account.getJid().asBareJid()
|
||||||
|
+ ": ignoring invite from "
|
||||||
|
+ this.inviter
|
||||||
|
+ " because we are not accepting invites from strangers. direct="
|
||||||
|
+ direct);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -976,14 +976,15 @@ public abstract class XmppActivity extends ActionBarActivity {
|
||||||
return invite;
|
return invite;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean execute(XmppActivity activity) {
|
public boolean execute(final XmppActivity activity) {
|
||||||
XmppConnectionService service = activity.xmppConnectionService;
|
final XmppConnectionService service = activity.xmppConnectionService;
|
||||||
Conversation conversation = service.findConversationByUuid(this.uuid);
|
final Conversation conversation = service.findConversationByUuid(this.uuid);
|
||||||
if (conversation == null) {
|
if (conversation == null) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (conversation.getMode() == Conversation.MODE_MULTI) {
|
if (conversation.getMode() == Conversation.MODE_MULTI) {
|
||||||
for (Jid jid : jids) {
|
for (final Jid jid : jids) {
|
||||||
|
// TODO use direct invites for public conferences
|
||||||
service.invite(conversation, jid);
|
service.invite(conversation, jid);
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -183,6 +183,7 @@ public final class MucDetailsContextMenuHelper {
|
||||||
activity.privateMsgInMuc(conversation, user.getName());
|
activity.privateMsgInMuc(conversation, user.getName());
|
||||||
return true;
|
return true;
|
||||||
case R.id.invite:
|
case R.id.invite:
|
||||||
|
// TODO use direct invites for public conferences
|
||||||
if (user.getAffiliation().ranks(MucOptions.Affiliation.MEMBER)) {
|
if (user.getAffiliation().ranks(MucOptions.Affiliation.MEMBER)) {
|
||||||
activity.xmppConnectionService.directInvite(conversation, jid.asBareJid());
|
activity.xmppConnectionService.directInvite(conversation, jid.asBareJid());
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -25,6 +25,7 @@
|
||||||
<integer name="automatic_message_deletion">0</integer>
|
<integer name="automatic_message_deletion">0</integer>
|
||||||
<bool name="trust_system_ca_store">true</bool>
|
<bool name="trust_system_ca_store">true</bool>
|
||||||
<bool name="allow_message_correction">true</bool>
|
<bool name="allow_message_correction">true</bool>
|
||||||
|
<bool name="accept_invites_from_strangers">true</bool>
|
||||||
<bool name="use_tor">false</bool>
|
<bool name="use_tor">false</bool>
|
||||||
<bool name="show_connection_options">false</bool>
|
<bool name="show_connection_options">false</bool>
|
||||||
<bool name="display_enter_key">false</bool>
|
<bool name="display_enter_key">false</bool>
|
||||||
|
|
|
@ -1057,5 +1057,7 @@
|
||||||
<string name="pref_up_long_summary">When acting as a UnifiedPush Distributor the persistent, reliable and battery-friendly XMPP connection will be utilized to wake up other UnifiedPush compatible app such as Tusky, Ltt.rs, FluffyChat and more.</string>
|
<string name="pref_up_long_summary">When acting as a UnifiedPush Distributor the persistent, reliable and battery-friendly XMPP connection will be utilized to wake up other UnifiedPush compatible app such as Tusky, Ltt.rs, FluffyChat and more.</string>
|
||||||
<string name="pref_large_font">Large font</string>
|
<string name="pref_large_font">Large font</string>
|
||||||
<string name="pref_large_font_summary">Increase font size in message bubbles</string>
|
<string name="pref_large_font_summary">Increase font size in message bubbles</string>
|
||||||
|
<string name="pref_accept_invites_from_strangers">Invites from strangers</string>
|
||||||
|
<string name="pref_accept_invites_from_strangers_summary">Accept invites to group chats from strangers</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -15,8 +15,8 @@
|
||||||
android:title="@string/pref_chat_states" />
|
android:title="@string/pref_chat_states" />
|
||||||
<SwitchPreferenceCompat
|
<SwitchPreferenceCompat
|
||||||
android:defaultValue="@bool/last_activity"
|
android:defaultValue="@bool/last_activity"
|
||||||
android:key="last_activity"
|
|
||||||
android:icon="@drawable/ic_visibility_24dp"
|
android:icon="@drawable/ic_visibility_24dp"
|
||||||
|
android:key="last_activity"
|
||||||
android:summary="@string/pref_broadcast_last_activity_summary"
|
android:summary="@string/pref_broadcast_last_activity_summary"
|
||||||
android:title="@string/pref_broadcast_last_activity" />
|
android:title="@string/pref_broadcast_last_activity" />
|
||||||
|
|
||||||
|
@ -28,7 +28,12 @@
|
||||||
android:key="allow_message_correction"
|
android:key="allow_message_correction"
|
||||||
android:summary="@string/pref_allow_message_correction_summary"
|
android:summary="@string/pref_allow_message_correction_summary"
|
||||||
android:title="@string/pref_allow_message_correction" />
|
android:title="@string/pref_allow_message_correction" />
|
||||||
|
<SwitchPreferenceCompat
|
||||||
|
android:defaultValue="@bool/accept_invites_from_strangers"
|
||||||
|
android:icon="@drawable/ic_domino_mask_24dp"
|
||||||
|
android:key="accept_invites_from_strangers"
|
||||||
|
android:summary="@string/pref_accept_invites_from_strangers_summary"
|
||||||
|
android:title="@string/pref_accept_invites_from_strangers" />
|
||||||
</PreferenceCategory>
|
</PreferenceCategory>
|
||||||
<PreferenceCategory android:title="@string/pref_presence_settings">
|
<PreferenceCategory android:title="@string/pref_presence_settings">
|
||||||
<SwitchPreferenceCompat
|
<SwitchPreferenceCompat
|
||||||
|
|
Loading…
Reference in a new issue