From 5105c34ec61243e2d539dbd339351c213dac1f85 Mon Sep 17 00:00:00 2001 From: Stephen Paul Weber Date: Wed, 27 Nov 2024 17:28:05 -0500 Subject: [PATCH] Show warning bar if any account is not set to MAM always --- src/cheogram/res/values/strings.xml | 1 + .../siacs/conversations/entities/Account.java | 10 +++++ .../services/XmppConnectionService.java | 7 ++- .../ui/ConversationsOverviewFragment.java | 16 +++++++ .../fragment_conversations_overview.xml | 45 +++++++++++++++++++ 5 files changed, 77 insertions(+), 2 deletions(-) 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"> + + + + + + + + + +