From a1f224d8005d9ee9e5573157e2411f604136739b Mon Sep 17 00:00:00 2001 From: Paul Schaub Date: Mon, 26 Apr 2021 15:23:15 +0200 Subject: [PATCH] Presentation hotfixes --- .../ui/account/detail/AccountDetailsFragment.java | 9 +++++++++ .../account/detail/AndroidAccountDetailsViewModel.java | 9 +++++++++ app/src/main/res/menu/menu_account_details.xml | 4 ++++ .../account/detail/AccountDetailsViewModel.java | 10 ++++++++++ libs/Smack | 2 +- 5 files changed, 33 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/org/mercury_im/messenger/android/ui/account/detail/AccountDetailsFragment.java b/app/src/main/java/org/mercury_im/messenger/android/ui/account/detail/AccountDetailsFragment.java index 651cc13..1b557ea 100644 --- a/app/src/main/java/org/mercury_im/messenger/android/ui/account/detail/AccountDetailsFragment.java +++ b/app/src/main/java/org/mercury_im/messenger/android/ui/account/detail/AccountDetailsFragment.java @@ -137,9 +137,14 @@ public class AccountDetailsFragment extends Fragment { .replace(R.id.fragment, IkeySetupFragment.newInstance(accountId)) .commit(); return true; + case R.id.action_publish_ikey_element: sendIkeyElement(); return true; + + case R.id.action_send_presence: + sendPresence(); + return true; } return super.onOptionsItemSelected(item); } @@ -152,6 +157,10 @@ public class AccountDetailsFragment extends Fragment { viewModel.sendIkeyElement(accountId); } + private void sendPresence() { + viewModel.sendPresence(accountId); + } + private void observeViewModel() { viewModel.getIkeyFingerprint().observe(getViewLifecycleOwner(), this::displayIkeyFingerprintAndDecisionButton); viewModel.getLocalFingerprint().observe(getViewLifecycleOwner(), this::displayLocalOxFingerprint); diff --git a/app/src/main/java/org/mercury_im/messenger/android/ui/account/detail/AndroidAccountDetailsViewModel.java b/app/src/main/java/org/mercury_im/messenger/android/ui/account/detail/AndroidAccountDetailsViewModel.java index 41b4762..59e96b9 100644 --- a/app/src/main/java/org/mercury_im/messenger/android/ui/account/detail/AndroidAccountDetailsViewModel.java +++ b/app/src/main/java/org/mercury_im/messenger/android/ui/account/detail/AndroidAccountDetailsViewModel.java @@ -157,6 +157,15 @@ public class AndroidAccountDetailsViewModel extends AndroidViewModel implements return accountAuthenticated; } + public void sendPresence(UUID accountId) { + addDisposable( + getCommonViewModel().sendPresence(accountId) + .subscribeOn(schedulers.getNewThread()) + .observeOn(schedulers.getUiScheduler()) + .subscribe(() -> LOGGER.log(Level.INFO, "Presence update sent for account " + accountId), + e -> LOGGER.log(Level.SEVERE, "Error sending presence update for account " + accountId, e))); + } + public static class AndroidAccountDetailsViewModelFactory implements ViewModelProvider.Factory { private final Application application; diff --git a/app/src/main/res/menu/menu_account_details.xml b/app/src/main/res/menu/menu_account_details.xml index a00876b..0dd6a61 100644 --- a/app/src/main/res/menu/menu_account_details.xml +++ b/app/src/main/res/menu/menu_account_details.xml @@ -31,4 +31,8 @@ android:id="@+id/action_publish_ikey_element" android:title="Publish Ikey Element" /> + + \ No newline at end of file diff --git a/domain/src/main/java/org/mercury_im/messenger/core/viewmodel/account/detail/AccountDetailsViewModel.java b/domain/src/main/java/org/mercury_im/messenger/core/viewmodel/account/detail/AccountDetailsViewModel.java index 12425d8..29b8856 100644 --- a/domain/src/main/java/org/mercury_im/messenger/core/viewmodel/account/detail/AccountDetailsViewModel.java +++ b/domain/src/main/java/org/mercury_im/messenger/core/viewmodel/account/detail/AccountDetailsViewModel.java @@ -2,6 +2,8 @@ package org.mercury_im.messenger.core.viewmodel.account.detail; import org.bouncycastle.openpgp.PGPSecretKeyRing; import org.jivesoftware.smack.XMPPConnection; +import org.jivesoftware.smack.packet.Presence; +import org.jivesoftware.smack.packet.PresenceBuilder; import org.jivesoftware.smackx.ikey.IkeyManager; import org.jivesoftware.smackx.ikey.element.IkeyElement; import org.jivesoftware.smackx.ikey.element.SubordinateElement; @@ -254,4 +256,12 @@ public class AccountDetailsViewModel implements MercuryViewModel { .map(ConnectionState::getConnectivity) .map(connectivity -> connectivity == ConnectivityState.authenticated); } + + public Completable sendPresence(UUID accountId) { + return Completable.fromAction(() -> { + XMPPConnection connection = connectionManager.getConnection(accountId).getConnection(); + connection.sendStanza(PresenceBuilder.buildPresence().ofType(Presence.Type.available).build()); + }); + + } } diff --git a/libs/Smack b/libs/Smack index d35354b..4849c6c 160000 --- a/libs/Smack +++ b/libs/Smack @@ -1 +1 @@ -Subproject commit d35354b1b05d80a6ab45fed9548304707eaab460 +Subproject commit 4849c6c544962b198ca761b8c697fd3f96292994