savoirfairelinux issueshttps://git.jami.net/groups/savoirfairelinux/-/issues2024-03-22T14:33:51Zhttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/955Check nvi duplicates2024-03-22T14:33:51ZSébastien BlinCheck nvi duplicatesSébastien BlinAdrien BéraudSébastien Blinhttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/954DHT Proxy full pass2024-03-28T00:05:08ZSébastien BlinDHT Proxy full pass# TODO
Try to reproduce any issue/find any scenario# TODO
Try to reproduce any issue/find any scenarioSébastien BlinFrançois-Simon Fauteux-ChapleauSébastien Blinhttps://git.jami.net/savoirfairelinux/jami-client-ios/-/issues/352Create basic architecture for tests (UI)2024-03-28T00:05:08ZSébastien BlinCreate basic architecture for tests (UI)Add basic tests to test call page/account list/ conversation and settingsAdd basic tests to test call page/account list/ conversation and settingsKateryna KostiukAndreas TraczykKateryna Kostiukhttps://git.jami.net/savoirfairelinux/dhtnet/-/issues/22Discuss a strategy for pupnp2024-03-06T16:28:19ZSébastien BlinDiscuss a strategy for pupnp+ check poll if still crash?
+ Check if still working and if not why?
+ remove?
+ replace by a fork+ check poll if still crash?
+ Check if still working and if not why?
+ remove?
+ replace by a fork2024-02-29https://git.jami.net/savoirfairelinux/jami-daemon/-/issues/952improve configurationMtx contention2024-03-28T00:05:08ZSébastien Blinimprove configurationMtx contentionconfigurationMtx_ is locked for a loooot of things and probably a lot of un-necessary causing the daemon to take a lot of time and this should be improvedconfigurationMtx_ is locked for a loooot of things and probably a lot of un-necessary causing the daemon to take a lot of time and this should be improvedAdrien BéraudAdrien Béraudhttps://git.jami.net/savoirfairelinux/jami-client-android/-/issues/1617Could not open a video file2024-02-23T09:08:19ZFairKingCould not open a video file## Describe your environment
Please specify the following:
- Jami version: 20240215-01
- Device model: Moto macro
- Android version: Android10
- What build you are using: F-droid
## Steps to reproduce
- Can you reproduce th...## Describe your environment
Please specify the following:
- Jami version: 20240215-01
- Device model: Moto macro
- Android version: Android10
- What build you are using: F-droid
## Steps to reproduce
- Can you reproduce the bug: at will
- Steps:
1. Upload mp4 file to any contact chat using windows desktop Jami
2. Go to you Android and try to open that file
- Actual result: Cannot open file on Android
- Expected result: Should be able to play/open that video file
## Additional information
![image](/uploads/af50ae55a17483633b648461b7f0d292/image.png)
![image](/uploads/ad2fc8425de9d8f44c0c8d8fe86aa789/image.png)https://git.jami.net/savoirfairelinux/jami-client-ios/-/issues/351Follow daemon changes on presence2024-03-08T16:10:17ZSébastien BlinFollow daemon changes on presenceNow status can be 0/1/2 (0 = offline, 1 = present on the DHT, 2 = connected)
https://docs.jami.net/en_US/user/faq.html#what-do-the-green-orange-red-status-circles-next-to-avatars-meanNow status can be 0/1/2 (0 = offline, 1 = present on the DHT, 2 = connected)
https://docs.jami.net/en_US/user/faq.html#what-do-the-green-orange-red-status-circles-next-to-avatars-meanKateryna KostiukKateryna Kostiukhttps://git.jami.net/savoirfairelinux/jami-client-ios/-/issues/350Follow deamon changes for missed calls - add reason2024-02-22T20:51:36ZSébastien BlinFollow deamon changes for missed calls - add reasonNow, in the commit body for a missed call, there can be a "reason" with "busy","declined","no_device" if the peer is busy, declined the call or no device were found. Messages can be updatedNow, in the commit body for a missed call, there can be a "reason" with "busy","declined","no_device" if the peer is busy, declined the call or no device were found. Messages can be updatedhttps://git.jami.net/savoirfairelinux/jami-project/-/issues/1628Need discussion: Design for sending/sent2024-02-26T14:29:45ZSébastien BlinNeed discussion: Design for sending/sentCharlotte HoffmannCharlotte Hoffmannhttps://git.jami.net/savoirfairelinux/jami-client-android/-/issues/1615Call messages: Invalid color for outgoing2024-02-22T20:46:56ZSébastien BlinCall messages: Invalid color for outgoingDiscussed with Charlotte:
Because we can got red on red:
![Screenshot_20240220-130057](/uploads/d21b795596efd269fb25ca763916b91e/Screenshot_20240220-130057.png)
The color of outgoing calls MUST be the same as the reply color (design o...Discussed with Charlotte:
Because we can got red on red:
![Screenshot_20240220-130057](/uploads/d21b795596efd269fb25ca763916b91e/Screenshot_20240220-130057.png)
The color of outgoing calls MUST be the same as the reply color (design on adobe are updated)https://git.jami.net/savoirfairelinux/jami-client-android/-/issues/1614Crash when searching in some cases2024-02-27T12:44:01ZAdrien BéraudCrash when searching in some cases```
2024-02-21 17:19:42.727 25612-25612 System.err cx.ring W io.reactivex.rxjava3.exceptions.OnErrorNotImplementedException: The exception was not handled due to missing onError handler in the s...```
2024-02-21 17:19:42.727 25612-25612 System.err cx.ring W io.reactivex.rxjava3.exceptions.OnErrorNotImplementedException: The exception was not handled due to missing onError handler in the subscribe() method call. Further reading: https://github.com/ReactiveX/RxJava/wiki/Error-Handling | java.lang.NullPointerException
2024-02-21 17:19:42.727 25612-25612 System.err cx.ring W at io.reactivex.rxjava3.internal.functions.Functions$OnErrorMissingConsumer.accept(Functions.java:718)
2024-02-21 17:19:42.728 25612-25612 System.err cx.ring W at io.reactivex.rxjava3.internal.functions.Functions$OnErrorMissingConsumer.accept(Functions.java:715)
2024-02-21 17:19:42.728 25612-25612 System.err cx.ring W at io.reactivex.rxjava3.internal.observers.LambdaObserver.onError(LambdaObserver.java:77)
2024-02-21 17:19:42.728 25612-25612 System.err cx.ring W at io.reactivex.rxjava3.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.checkTerminated(ObservableObserveOn.java:282)
2024-02-21 17:19:42.728 25612-25612 System.err cx.ring W at io.reactivex.rxjava3.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.drainNormal(ObservableObserveOn.java:173)
2024-02-21 17:19:42.729 25612-25612 System.err cx.ring W at io.reactivex.rxjava3.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.run(ObservableObserveOn.java:256)
2024-02-21 17:19:42.729 25612-25612 System.err cx.ring W at io.reactivex.rxjava3.internal.schedulers.ExecutorScheduler$ExecutorWorker$BooleanRunnable.run(ExecutorScheduler.java:324)
2024-02-21 17:19:42.729 25612-25612 System.err cx.ring W at io.reactivex.rxjava3.internal.schedulers.ExecutorScheduler$ExecutorWorker.runEager(ExecutorScheduler.java:289)
2024-02-21 17:19:42.729 25612-25612 System.err cx.ring W at io.reactivex.rxjava3.internal.schedulers.ExecutorScheduler$ExecutorWorker.run(ExecutorScheduler.java:250)
2024-02-21 17:19:42.730 25612-25612 System.err cx.ring W at android.os.Handler.handleCallback(Handler.java:958)
2024-02-21 17:19:42.730 25612-25612 System.err cx.ring W at android.os.Handler.dispatchMessage(Handler.java:99)
2024-02-21 17:19:42.730 25612-25612 System.err cx.ring W at android.os.Looper.loopOnce(Looper.java:205)
2024-02-21 17:19:42.730 25612-25612 System.err cx.ring W at android.os.Looper.loop(Looper.java:294)
2024-02-21 17:19:42.731 25612-25612 System.err cx.ring W at android.app.ActivityThread.main(ActivityThread.java:8248)
2024-02-21 17:19:42.731 25612-25612 System.err cx.ring W at java.lang.reflect.Method.invoke(Native Method)
2024-02-21 17:19:42.731 25612-25612 System.err cx.ring W at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:552)
2024-02-21 17:19:42.731 25612-25612 System.err cx.ring W at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:971)
2024-02-21 17:19:42.731 25612-25612 System.err cx.ring W Caused by: java.lang.NullPointerException
2024-02-21 17:19:42.732 25612-25612 System.err cx.ring W at net.jami.services.ConversationFacade$getConversationSearchResults$1.apply(ConversationFacade.kt:382)
2024-02-21 17:19:42.732 25612-25612 System.err cx.ring W at net.jami.services.ConversationFacade$getConversationSearchResults$1.apply(ConversationFacade.kt:382)
2024-02-21 17:19:42.732 25612-25612 System.err cx.ring W at io.reactivex.rxjava3.internal.operators.single.SingleMap$MapSingleObserver.onSuccess(SingleMap.java:58)
2024-02-21 17:19:42.732 25612-25612 System.err cx.ring W at io.reactivex.rxjava3.internal.operators.single.SingleSubscribeOn$SubscribeOnObserver.onSuccess(SingleSubscribeOn.java:68)
2024-02-21 17:19:42.733 25612-25612 System.err cx.ring W at io.reactivex.rxjava3.internal.operators.single.SingleDoOnSubscribe$DoOnSubscribeSingleObserver.onSuccess(SingleDoOnSubscribe.java:77)
2024-02-21 17:19:42.733 25612-25612 System.err cx.ring W at io.reactivex.rxjava3.internal.operators.observable.ObservableElementAtSingle$ElementAtObserver.onNext(ObservableElementAtSingle.java:89)
2024-02-21 17:19:42.733 25612-25612 System.err cx.ring W at io.reactivex.rxjava3.internal.operators.observable.ObservableFilter$FilterObserver.onNext(ObservableFilter.java:52)
2024-02-21 17:19:42.734 25612-25612 System.err cx.ring W at io.reactivex.rxjava3.subjects.PublishSubject$PublishDisposable.onNext(PublishSubject.java:310)
2024-02-21 17:19:42.734 25612-25612 System.err cx.ring W at io.reactivex.rxjava3.subjects.PublishSubject.onNext(PublishSubject.java:226)
2024-02-21 17:19:42.734 25612-25612 System.err cx.ring W at net.jami.services.AccountService.userSearchEnded(AccountService.kt:1188)
2024-02-21 17:19:42.734 25612-25612 System.err cx.ring W at net.jami.services.DaemonService$DaemonConfigurationCallback.userSearchEnded(DaemonService.kt:175)
2024-02-21 17:19:42.735 25612-25612 System.err cx.ring W at net.jami.daemon.JamiServiceJNI.SwigDirector_ConfigurationCallback_userSearchEnded(JamiServiceJNI.java:833)
```Adrien BéraudAdrien Béraudhttps://git.jami.net/savoirfairelinux/jami-client-android/-/issues/1613Crash on account creation when not using management server2024-02-27T12:44:33ZAdrien BéraudCrash on account creation when not using management serverReport from Play Store:
```
Exception java.lang.RuntimeException: Unable to destroy activity {cx.ring/cx.ring.account.AccountWizardActivity}: ya.k: lateinit property biometricEnroll has not been initialized
at android.app.ActivityThre...Report from Play Store:
```
Exception java.lang.RuntimeException: Unable to destroy activity {cx.ring/cx.ring.account.AccountWizardActivity}: ya.k: lateinit property biometricEnroll has not been initialized
at android.app.ActivityThread.performDestroyActivity (ActivityThread.java:5654)
at android.app.ActivityThread.handleDestroyActivity (ActivityThread.java:5686)
at android.app.servertransaction.DestroyActivityItem.execute (DestroyActivityItem.java:47)
at android.app.servertransaction.ActivityTransactionItem.execute (ActivityTransactionItem.java:45)
at android.app.servertransaction.TransactionExecutor.executeLifecycleState (TransactionExecutor.java:180)
at android.app.servertransaction.TransactionExecutor.execute (TransactionExecutor.java:98)
at android.app.ActivityThread$H.handleMessage (ActivityThread.java:2468)
at android.os.Handler.dispatchMessage (Handler.java:106)
at androidx.test.espresso.base.Interrogator.loopAndInterrogate (Interrogator.java:10)
at androidx.test.espresso.base.UiControllerImpl.loopUntil (UiControllerImpl.java:7)
at androidx.test.espresso.base.UiControllerImpl.loopUntil (UiControllerImpl.java:1)
at androidx.test.espresso.base.UiControllerImpl.loopMainThreadForAtLeast (UiControllerImpl.java:7)
at androidx.test.espresso.action.Tap$1.sendTap (Tap.java:4)
at androidx.test.espresso.action.GeneralClickAction.perform (GeneralClickAction.java:4)
at androidx.test.espresso.ViewInteraction$SingleExecutionViewAction.perform (ViewInteraction.java:2)
at androidx.test.espresso.ViewInteraction.doPerform (ViewInteraction.java:23)
at androidx.test.espresso.ViewInteraction.-$$Nest$mdoPerform
at androidx.test.espresso.ViewInteraction$1.call (ViewInteraction.java:6)
at androidx.test.espresso.ViewInteraction$1.call (ViewInteraction.java:1)
at java.util.concurrent.FutureTask.run (FutureTask.java:264)
at android.os.Handler.handleCallback (Handler.java:958)
at android.os.Handler.dispatchMessage (Handler.java:99)
at android.os.Looper.loopOnce (Looper.java:205)
at android.os.Looper.loop (Looper.java:294)
at android.app.ActivityThread.main (ActivityThread.java:8248)
at java.lang.reflect.Method.invoke
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:552)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:971)
Caused by ya.k: lateinit property biometricEnroll has not been initialized
at cx.ring.account.AccountWizardActivity.onDestroy (AccountWizardActivity.kt:108)
at android.app.Activity.performDestroy (Activity.java:8902)
at android.app.Instrumentation.callActivityOnDestroy (Instrumentation.java:1491)
at androidx.test.runner.MonitoringInstrumentation.callActivityOnDestroy (MonitoringInstrumentation.java:1)
at android.app.ActivityThread.performDestroyActivity (ActivityThread.java:5641)
```Adrien BéraudAdrien Béraudhttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/951Typing indicator still active after member has been kicked out of swarm2024-03-05T13:50:07ZFrançois-Simon Fauteux-ChapleauTyping indicator still active after member has been kicked out of swarm**Scenario**
- Alice creates a swarm and invites Bob and Carol to join
- Bob and Carol accept the invitation and open the swarm
- Alice opens the "Details" panel, right-clicks on Bob's name and clicks on "Kick member"
- Bob starts typin...**Scenario**
- Alice creates a swarm and invites Bob and Carol to join
- Bob and Carol accept the invitation and open the swarm
- Alice opens the "Details" panel, right-clicks on Bob's name and clicks on "Kick member"
- Bob starts typing a message in the swarm he just got kicked out of
**Result**
Both Alice and Carol still see a typing indicator ("Bob is typing...").
Note: As expected, Bob no longer sees typing indicators for Alice/Carol after being kicked out. The bug only occurs in one direction (from Bob to the remaining members of the swarm).Sébastien BlinSébastien Blinhttps://git.jami.net/savoirfairelinux/jami-client-qt/-/issues/1575Chatview Fix bubbles2024-02-21T21:21:08ZSébastien BlinChatview Fix bubbles# Wrong edited/date placement
## Current
![Screenshot_from_2024-02-21_16-16-48](/uploads/02164a60f0d3d8475394eece103ec861/Screenshot_from_2024-02-21_16-16-48.png)
## Expected
![Screenshot_from_2024-02-21_16-17-19](/uploads/0d49e2bd4827...# Wrong edited/date placement
## Current
![Screenshot_from_2024-02-21_16-16-48](/uploads/02164a60f0d3d8475394eece103ec861/Screenshot_from_2024-02-21_16-16-48.png)
## Expected
![Screenshot_from_2024-02-21_16-17-19](/uploads/0d49e2bd48275c85bfd573d58dc66a24/Screenshot_from_2024-02-21_16-17-19.png)
# Wrong reply![Screenshot_from_2024-02-21_16-18-16](/uploads/37bc2b13d65be262fc95453ec2aa0190/Screenshot_from_2024-02-21_16-18-16.png)
# Wrong max size for files
![Screenshot_from_2024-02-21_16-20-03](/uploads/bee6ba7cfc7704e986bdb3c948e57e72/Screenshot_from_2024-02-21_16-20-03.png)https://git.jami.net/savoirfairelinux/jami-project/-/issues/1627[Feature request] VPN-like P2P network2024-02-23T16:43:32Zhizani[Feature request] VPN-like P2P networkJami has a great P2P text and video chatting, but I wonder if its possible to use OpenDHT not only for multimedia communication, but for a mesh network creation. For example, this feature can be useful:
1. when one or more users want to ...Jami has a great P2P text and video chatting, but I wonder if its possible to use OpenDHT not only for multimedia communication, but for a mesh network creation. For example, this feature can be useful:
1. when one or more users want to connect to a non-public(behind NAT) server directly by using OpenDHT without relying on a centralized VPN gateway.
2. when two or more non-public servers want to communicate(TCP/UDP) to each other directly (something like swarm in Jami)
Probably, it is out of `jami-project`'s scope, but if it is possible, I would like to see an implementation of this concept in the future (may be as a different project?)https://git.jami.net/savoirfairelinux/jami-client-ios/-/issues/349UI issues on iOS in the conversation2024-03-05T16:25:52ZLoic BoginoUI issues on iOS in the conversationDevice:
iPhone 14
Jami:
v3.63(20240207)
Scenario:
- When I just open a conversation with a new contact, a blank space appear before "has just joined the conversation"
- I open any conversation and my contact's username is glued to "Wri...Device:
iPhone 14
Jami:
v3.63(20240207)
Scenario:
- When I just open a conversation with a new contact, a blank space appear before "has just joined the conversation"
- I open any conversation and my contact's username is glued to "Write to" in the text bar
![IMG_4763](/uploads/b99d2c8c3c3c26b820f988d5cf294b36/IMG_4763.PNG)Kateryna KostiukKateryna Kostiukhttps://git.jami.net/savoirfairelinux/jami-client-ios/-/issues/348Synchronization issues between devices2024-02-22T18:38:43ZLoic BoginoSynchronization issues between devicesDevices:
Linux Ubuntu: Jami v.202402141737
Iphone 14: Jami v.3.63(20240207)
Scenario:
- I add a new contact on my desktop app with their Jami username
- They accept the invitation and call me
- It rings on my desktop but not my phone si...Devices:
Linux Ubuntu: Jami v.202402141737
Iphone 14: Jami v.3.63(20240207)
Scenario:
- I add a new contact on my desktop app with their Jami username
- They accept the invitation and call me
- It rings on my desktop but not my phone since it didn't sync.
- I open my phone to try to answer the call from there or to call them, but their contact doesn't appear in the contact list.
- I close and reopen Jami, but still their contact doesn't appear, nor the conversation.
- They send me a message, upon which I receive a Jami invitation on my phone device **under my own username** (My jami username is loicrbogino, I received an invitation from the same account I'm logged in on).
- I accept the invitation and then my contact finally appear in my chat/contact list.
- Then on my desktop it says "The private conversation has been created" whereas on my phone it says "The Swarm has been created"
Expected result:
- When I add a contact on my desktop, it should sync with Jami on my iPhone.
- When I receive a call it should ring on devices where Jami runs (in the case both my iPhone and my desktop)
![IMG_4762](/uploads/03f40e003e36e0d995629222a90811f0/IMG_4762.jpg)https://git.jami.net/savoirfairelinux/jami-client-qt/-/issues/1574Files don't save to my computer on Ubuntu2024-02-21T20:12:37ZLoic BoginoFiles don't save to my computer on UbuntuHow to report a bug
-------------------
## One bug = one bug report
If you have multiple issues, please file separate bug reports. It will be much easier to track bugs that way.
## Avoid duplicates
Search for similar problem - update...How to report a bug
-------------------
## One bug = one bug report
If you have multiple issues, please file separate bug reports. It will be much easier to track bugs that way.
## Avoid duplicates
Search for similar problem - update existing issue instead of creating new one.
Bug report form
---------------
## Describe your environment
Please specify the following:
- OS: Ubuntu Linux
- Jami version: 202402141737
- What build you are using: jami.net
## Steps to reproduce
Note: Better the scenario is, better we will be able to reproduce and debug.
- Can you reproduce the bug: [at will | occasionally | not at all]
- Steps:
1. Save an image I received in my chat conversation.
2. It says the image has been saved to the downloads file.
...
- Actual result: Once in the download file mentioned by Jami, there are no files to be found.
- Expected result: Having the image saved in the downloads file.
## Additional information
![Capture_d_écran_du_2024-02-20_11-33-26](/uploads/3edb5f4917aeab1f8f504e058aee1f1d/Capture_d_écran_du_2024-02-20_11-33-26.png)
![Capture_d_écran_du_2024-02-20_11-33-42](/uploads/c0fc731c2eb4ebfa53cadf38140db9e9/Capture_d_écran_du_2024-02-20_11-33-42.png)
![Capture_d_écran_du_2024-02-20_11-34-07](/uploads/202531cbeb334628cbfad5cec237e3f0/Capture_d_écran_du_2024-02-20_11-34-07.png)
![Capture_d_écran_du_2024-02-20_11-36-13](/uploads/52b80309df9d4f95d64af1af0cb48d13/Capture_d_écran_du_2024-02-20_11-36-13.png)
For retrieving logs, cf [this page](https://git.jami.net/savoirfairelinux/ring-project/wikis/tutorials/Bug-report-guide#logs).https://git.jami.net/savoirfairelinux/jami-client-qt/-/issues/1573Cannot revoke device with password2024-02-21T20:59:54ZSébastien BlinCannot revoke device with password# Scenario
+ Create an account with password
+ Link a new account
+ Try to revoke second device
# Current result
```
default [1708445694959][WRN]: file:qrc:/settingsview/components/RevokeDevicePasswordDialog.qml:39 qrc:/settingsview/c...# Scenario
+ Create an account with password
+ Link a new account
+ Try to revoke second device
# Current result
```
default [1708445694959][WRN]: file:qrc:/settingsview/components/RevokeDevicePasswordDialog.qml:39 qrc:/settingsview/components/RevokeDevicePasswordDialog.qml:39: ReferenceError: passwordEdit is not defined
```
# Expected
Revocation MUST workSébastien BlinSébastien Blinhttps://git.jami.net/savoirfairelinux/jami-client-qt/-/issues/1572Can't accept contact request after removing contact (on same device); Invitat...2024-02-19T18:52:02ZElysCan't accept contact request after removing contact (on same device); Invitation remains even if you select "Block"reproduced using the newest beta version of Jami (desktop and android)
maybe related: https://git.jami.net/savoirfairelinux/jami-daemon/-/issues/855
1:1-Swarm
---
First step:
Desktop: You've removed (NOT blocked) a contact before (s...reproduced using the newest beta version of Jami (desktop and android)
maybe related: https://git.jami.net/savoirfairelinux/jami-daemon/-/issues/855
1:1-Swarm
---
First step:
Desktop: You've removed (NOT blocked) a contact before (so the desktop user won't see contact B (the android user) in the contact anymore).
HOWEVER:
The Android user (=contact B) can still view see the desktop user (=contact A) in the contact list
---
The desktop user has always "Allow calls from unknown contacts" enabled
* Now make a call Android (contact B)-\> Desktop (contact A) and accept the call
* After the call you might have the same invitation twice (only reproduced once)
* but you won't get the username "username1" but an ID like "abcdef12345..."
Now you have mutliple possiblities:
1) The desktop user can't accept the contact request and nothing will happen if you click on "Accept"
2) If the desktop user "blocks" the contact request
a) you (desktop user) won't view any contact request anymore but you will have an invitation forever
b) if you unblock the Android user he will be in your contact list again with the username like "username 1"
3) I think if you decline the next calls you always get an ID like "abcdef12345..." if you accept the next call again
---
The desktop user can only accept the conversation request
* if he blocks the Android user using the conversation request and then unblocks the Android user
OR
* if the Android user (also) removes the desktop user from his contact list and the Android user sends a contact request that can be accepted by the desktop user now