diff --git a/src/cheogram/res/values/strings.xml b/src/cheogram/res/values/strings.xml
index 4c065754b0aded0f569794937a1cb0cbb6334bcf..3e337221a7ad0f6b40055c001f0ee579e2ff7367 100644
--- a/src/cheogram/res/values/strings.xml
+++ b/src/cheogram/res/values/strings.xml
@@ -23,6 +23,7 @@
Finish
Close
Go
+ Fix
OLED Black
Custom
Invite to Chat
diff --git a/src/main/java/eu/siacs/conversations/entities/Account.java b/src/main/java/eu/siacs/conversations/entities/Account.java
index fe38ae4515f67980dfb3b71a167847c61532e1d0..6c7f3ea985ab778687af43896aa1ec61e487130f 100644
--- a/src/main/java/eu/siacs/conversations/entities/Account.java
+++ b/src/main/java/eu/siacs/conversations/entities/Account.java
@@ -39,6 +39,7 @@ import eu.siacs.conversations.services.AvatarService;
import eu.siacs.conversations.services.XmppConnectionService;
import eu.siacs.conversations.utils.UIHelper;
import eu.siacs.conversations.utils.XmppUri;
+import eu.siacs.conversations.xml.Element;
import eu.siacs.conversations.xmpp.Jid;
import eu.siacs.conversations.xmpp.XmppConnection;
import eu.siacs.conversations.xmpp.jingle.RtpCapability;
@@ -114,6 +115,7 @@ public class Account extends AbstractEntity implements AvatarService.Avatarable
private String fastToken;
private Integer color = null;
private final HashMultimap gateways = HashMultimap.create();
+ private Element mamPrefs = null;
public Account(final Jid jid, final String password) {
this(
@@ -213,6 +215,14 @@ public class Account extends AbstractEntity implements AvatarService.Avatarable
cursor.getString(cursor.getColumnIndexOrThrow(FAST_TOKEN)));
}
+ public void setMamPrefs(Element prefs) {
+ mamPrefs = prefs;
+ }
+
+ public Element mamPrefs() {
+ return mamPrefs;
+ }
+
public boolean httpUploadAvailable(long size) {
return xmppConnection != null && xmppConnection.getFeatures().httpUpload(size);
}
diff --git a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java
index 2bf69d550ea21cd106390b9c404e33346c615f4e..f5d76496492f670be2ee7feebbbfa9f4209c0646 100644
--- a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java
+++ b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java
@@ -431,6 +431,7 @@ public class XmppConnectionService extends Service {
for (Conversation conversation : pendingJoins) {
joinMuc(conversation);
}
+ fetchMamPreferences(account, null);
scheduleWakeUpCall(Config.PING_MAX_INTERVAL, account.getUuid().hashCode());
} else if (account.getStatus() == Account.State.OFFLINE || account.getStatus() == Account.State.DISABLED || account.getStatus() == Account.State.LOGGED_OUT) {
resetSendingToWaiting(account);
@@ -5830,9 +5831,10 @@ public class XmppConnectionService extends Service {
sendIqPacket(account, request, (packet) -> {
final Element prefs = packet.findChild("prefs", version.namespace);
if (packet.getType() == Iq.Type.RESULT && prefs != null) {
- callback.onPreferencesFetched(prefs);
+ account.setMamPrefs(prefs);
+ if (callback != null) callback.onPreferencesFetched(prefs);
} else {
- callback.onPreferencesFetchFailed();
+ if (callback != null) callback.onPreferencesFetchFailed();
}
});
}
@@ -5931,6 +5933,7 @@ public class XmppConnectionService extends Service {
public void pushMamPreferences(Account account, Element prefs) {
final Iq set = new Iq(Iq.Type.SET);
set.addChild(prefs);
+ account.setMamPrefs(prefs);
sendIqPacket(account, set, null);
}
diff --git a/src/main/java/eu/siacs/conversations/ui/ConversationsOverviewFragment.java b/src/main/java/eu/siacs/conversations/ui/ConversationsOverviewFragment.java
index 41e25bd5eb37f453db83c57307e2edc1e5631f70..821f9655b816eeabd82ceafe3609404ac0259f35 100644
--- a/src/main/java/eu/siacs/conversations/ui/ConversationsOverviewFragment.java
+++ b/src/main/java/eu/siacs/conversations/ui/ConversationsOverviewFragment.java
@@ -511,6 +511,22 @@ public class ConversationsOverviewFragment extends XmppFragment {
binding.fab.setVisibility(View.VISIBLE);
}
setupSwipe();
+
+ binding.snackbar.setVisibility(View.GONE);
+ if (activity.xmppConnectionService == null) return;
+ for (final var account : activity.xmppConnectionService.getAccounts()) {
+ if (account.mamPrefs() != null && !"always".equals(account.mamPrefs().getAttribute("default"))) {
+ binding.snackbar.setVisibility(View.VISIBLE);
+ binding.snackbarMessage.setText("Your account " + account.getJid().asBareJid().toEscapedString() + " does not have archiving fully enabled. This may result in missed messages if you use multiple devices or apps.");
+ binding.snackbarAction.setOnClickListener((v) -> {
+ final var prefs = account.mamPrefs();
+ prefs.setAttribute("default", "always");
+ activity.xmppConnectionService.pushMamPreferences(account, prefs);
+ refresh();
+ });
+ break;
+ }
+ }
}
private void setScrollPosition(ScrollState scrollPosition) {
diff --git a/src/main/res/layout/fragment_conversations_overview.xml b/src/main/res/layout/fragment_conversations_overview.xml
index bb83c6b6f38366646abd932a3f5f52cd45277a14..497d09ce94d887c4678be32f28dea0c87203eca0 100644
--- a/src/main/res/layout/fragment_conversations_overview.xml
+++ b/src/main/res/layout/fragment_conversations_overview.xml
@@ -5,6 +5,49 @@
android:layout_width="match_parent"
android:layout_height="match_parent">
+
+
+
+
+
+
+
+
+
+