briar issueshttps://code.briarproject.org/briar/briar/-/issues2021-06-14T14:58:58Zhttps://code.briarproject.org/briar/briar/-/issues/2059NoSuchGroupException toast is shown when private group is removed2021-06-14T14:58:58ZakwizgranNoSuchGroupException toast is shown when private group is removed* Android version: 4.4.2
* Phone model: LGE LG-D150 (w35_global_com)
* Briar version: 1.3.4 (76b7e6f)
* User feedback: "NoSuchGroupException"
Log:
```
05-23 22:32:59.452 I/GroupListViewModel: Private group removed
05-23 22:32:59.453 I/T...* Android version: 4.4.2
* Phone model: LGE LG-D150 (w35_global_com)
* Briar version: 1.3.4 (76b7e6f)
* User feedback: "NoSuchGroupException"
Log:
```
05-23 22:32:59.452 I/GroupListViewModel: Private group removed
05-23 22:32:59.453 I/ThreadListViewModel: Group removed
05-23 22:32:59.456 I/BaseActivity: Pausing GroupActivity
05-23 22:32:59.467 I/BaseActivity: Starting NavDrawerActivity
05-23 22:32:59.467 I/BaseActivity: Resuming NavDrawerActivity
05-23 22:32:59.950 I/BaseActivity: Stopping GroupActivity
05-23 22:32:59.954 I/BaseActivity: Destroying GroupActivity
05-23 22:32:59.967 W/DbViewModel: org.briarproject.bramble.api.db.NoSuchGroupException
org.briarproject.bramble.api.db.NoSuchGroupException
at org.briarproject.bramble.db.DatabaseComponentImpl.mergeGroupMetadata(DatabaseComponentImpl.java:784)
at org.briarproject.bramble.client.ClientHelperImpl.mergeGroupMetadata(ClientHelperImpl.java:224)
at org.briarproject.bramble.client.ClientHelperImpl.lambda$mergeGroupMetadata$7(ClientHelperImpl.java:218)
at org.briarproject.bramble.client.ClientHelperImpl.lambda$mergeGroupMetadata$7$ClientHelperImpl(ClientHelperImpl.java)
at org.briarproject.bramble.client.-$$Lambda$ClientHelperImpl$7us-EF4vPLR_8c0LCNvGmtb6d4I.run(lambda)
at org.briarproject.bramble.db.DatabaseComponentImpl.transaction(DatabaseComponentImpl.java:200)
at org.briarproject.bramble.client.ClientHelperImpl.mergeGroupMetadata(ClientHelperImpl.java:218)
at org.briarproject.briar.client.MessageTrackerImpl.storeMessageId(MessageTrackerImpl.java:92)
at org.briarproject.briar.android.threaded.ThreadListViewModel.lambda$storeMessageId$1(ThreadListViewModel.java:222)
at org.briarproject.briar.android.threaded.ThreadListViewModel.lambda$storeMessageId$1$ThreadListViewModel(ThreadListViewModel.java)
at org.briarproject.briar.android.threaded.-$$Lambda$ThreadListViewModel$8pSkGFRn7z9NtDqesywkHNLVqgk.run(lambda)
at org.briarproject.briar.android.viewmodel.DbViewModel.lambda$runOnDbThread$0(DbViewModel.java:77)
at org.briarproject.briar.android.viewmodel.DbViewModel.lambda$runOnDbThread$0$DbViewModel(DbViewModel.java)
at org.briarproject.briar.android.viewmodel.-$$Lambda$DbViewModel$WFnJ2C0vmjF_vFVS_futFODEXKA.run(lambda)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
```
What seems to be happening is that ThreadListViewModel is asynchronously storing the list position, and it gets a NoSuchGroupException because the group has recently been removed. The exception is harmless and should probably be logged rather than shown in the UI.Android 1.3Torsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/2058Disabled settings are difficult to read2021-06-08T12:56:08ZakwizgranDisabled settings are difficult to read* Briar version: 1.3.4
* User feedback: "The greyed out options in the settings are a bit to difficult to read (for me).
A bit more contrast could still signal it's greyed out, but offer better readability."* Briar version: 1.3.4
* User feedback: "The greyed out options in the settings are a bit to difficult to read (for me).
A bit more contrast could still signal it's greyed out, but offer better readability."https://code.briarproject.org/briar/briar/-/issues/2057AssertionError when selecting image to send2023-09-14T12:55:21ZakwizgranAssertionError when selecting image to send* Android version: 9
* Phone model: Honor KIW-L24 (lineage_kiwi)
* Briar version: 1.3.3 (c647c52)
Log snippet:
```
05-26 19:25:27.225 I/BaseActivity: Pausing NavDrawerActivity
05-26 19:25:27.302 I/BaseActivity: Creating ConversationActi...* Android version: 9
* Phone model: Honor KIW-L24 (lineage_kiwi)
* Briar version: 1.3.3 (c647c52)
Log snippet:
```
05-26 19:25:27.225 I/BaseActivity: Pausing NavDrawerActivity
05-26 19:25:27.302 I/BaseActivity: Creating ConversationActivity
05-26 19:25:27.389 I/ConversationViewModel: PrivateMessageFormat loaded: TEXT_IMAGES_AUTO_DELETE
05-26 19:25:27.536 I/BaseActivity: Starting ConversationActivity
05-26 19:25:27.540 I/BaseActivity: Resuming ConversationActivity
05-26 19:25:27.737 I/ConversationActivity: Eagerly loading text for latest message
05-26 19:25:27.850 I/BaseActivity: Pausing ConversationActivity
05-26 19:25:27.992 I/BaseActivity: Creating ConversationActivity
05-26 19:25:28.024 I/ConversationViewModel: PrivateMessageFormat loaded: TEXT_IMAGES_AUTO_DELETE
05-26 19:25:28.157 I/BaseActivity: Starting ConversationActivity
05-26 19:25:28.163 I/BaseActivity: Resuming ConversationActivity
05-26 19:25:28.816 I/ConversationActivity: Eagerly loading text for latest message
05-26 19:25:28.819 I/BaseActivity: Stopping ConversationActivity
05-26 19:25:28.831 I/BaseActivity: Destroying ConversationActivity
05-26 19:25:30.983 I/BaseActivity: Pausing ConversationActivity
05-26 19:25:31.214 I/BaseActivity: Stopping NavDrawerActivity
05-26 19:25:31.698 I/BaseActivity: Stopping ConversationActivity
```
Stacktrace:
```
java.lang.AssertionError
at org.briarproject.briar.android.view.TextAttachmentController.onImageReceived(TextAttachmentController.java:166)
at org.briarproject.briar.android.conversation.ConversationActivity.onActivityResult(ConversationActivity.java:319)
at android.app.Activity.dispatchActivityResult(Activity.java:7462)
at android.app.ActivityThread.deliverResults(ActivityThread.java:4391)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:4440)
at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:49)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1816)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6718)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:491)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
```Android 1.4https://code.briarproject.org/briar/briar/-/issues/2056IllegalArgumentException: pointerIndex out of range2021-08-27T11:46:15ZakwizgranIllegalArgumentException: pointerIndex out of range* Android version: 11
* Phone model: Redmi Note 5
* Briar version: 1.3.4 (76b7e6f)
* User feedback: "Sent a picture, then click on it to show it."
Log snippet:
```
05-28 06:43:28.401 I/BaseActivity: Pausing ConversationActivity
05-28 06...* Android version: 11
* Phone model: Redmi Note 5
* Briar version: 1.3.4 (76b7e6f)
* User feedback: "Sent a picture, then click on it to show it."
Log snippet:
```
05-28 06:43:28.401 I/BaseActivity: Pausing ConversationActivity
05-28 06:43:28.416 I/BaseActivity: Creating ImageActivity
05-28 06:43:28.441 I/BaseActivity: Starting ImageActivity
05-28 06:43:28.444 I/BaseActivity: Resuming ImageActivity
05-28 06:43:28.894 I/BaseActivity: Stopping ConversationActivity
```
Stacktrace:
```
java.lang.IllegalArgumentException: pointerIndex out of range
at android.view.MotionEvent.nativeGetAxisValue(Native Method)
at android.view.MotionEvent.getX(MotionEvent.java:2401)
at androidx.viewpager.widget.ViewPager.onInterceptTouchEvent(ViewPager.java:2072)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2664)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3118)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2799)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3118)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2799)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3118)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2799)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3118)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2799)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3118)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2799)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3118)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2799)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3118)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2799)
at com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:488)
at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1873)
at android.app.Activity.dispatchTouchEvent(Activity.java:4125)
at androidx.appcompat.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:69)
at androidx.appcompat.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:69)
at com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:446)
at android.view.View.dispatchPointerEvent(View.java:14568)
at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:6022)
at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:5825)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5316)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5373)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5339)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:5491)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5347)
at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:5548)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5320)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5373)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5339)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5347)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5320)
at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:8086)
at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:8037)
at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:7998)
at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:8209)
at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:220)
at android.os.MessageQueue.nativePollOnce(Native Method)
at android.os.MessageQueue.next(MessageQueue.java:335)
at android.os.Looper.loop(Looper.java:183)
at android.app.ActivityThread.main(ActivityThread.java:7660)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
```
[Looks like](https://stackoverflow.com/a/13000343) this is a [very longstanding bug](https://issuetracker.google.com/issues/36931456) in the support library/AndroidX that was fixed recently. We may be able to fix the issue by upgrading the ViewPager library. Alternatively, various people on StackOverflow suggest workarounds that wrap the ViewPager to catch the exception.Android 1.3IvanaIvanahttps://code.briarproject.org/briar/briar/-/issues/2055Hide hotspot offline sharing feature behind feature flag2021-07-06T09:38:53ZTorsten GroteHide hotspot offline sharing feature behind feature flagInstall via Bluetooth or Wi-FiSebastianSebastian2021-07-31https://code.briarproject.org/briar/briar/-/issues/2054TTL - Add contact at a distance2023-02-23T12:21:59ZIvanaTTL - Add contact at a distance### Add contact at a distance
- [ ] [Connect at a distance](https://code.briarproject.org/briar/briar/-/wikis/connect-at-a-distance)
- [ ] [Add already added contact at a distance](https://code.briarproject.org/briar/briar/-/wikis/add-...### Add contact at a distance
- [ ] [Connect at a distance](https://code.briarproject.org/briar/briar/-/wikis/connect-at-a-distance)
- [ ] [Add already added contact at a distance](https://code.briarproject.org/briar/briar/-/wikis/add-already-added-contact-at-distance)
- [ ] [Add contact at a distance when one contact is offline](https://code.briarproject.org/briar/briar/-/wikis/add-contact-at-distance-one-contact-offline)
- [ ] [Delete and recreate the contact at a distance](https://code.briarproject.org/briar/briar/-/wikis/delete-and-recreate-contact-at-distance)
- [ ] [Rotate device whilst adding contact at a distance](https://code.briarproject.org/briar/briar/-/wikis/rotate-screen-whilst-adding-contact-at-distance)
- [ ] [Add contacts at a distance whilst some contacts are Pending](https://code.briarproject.org/briar/briar/-/wikis/add-contact-whilst-pending-contacts)
- [ ] [Add contact after Pending contact timeout](https://code.briarproject.org/briar/briar/-/wikis/add-contact-after-time-out)https://code.briarproject.org/briar/briar/-/issues/2053Briar API. Communicate trough Briar using another Android app.2021-05-26T13:11:35ZVladislavBriar API. Communicate trough Briar using another Android app.Is there a way to communicate trough Briar API (send messages, write blog post), for example using Tasker or Easer.
I for example, would like to send messages with my location to a Private Group, from an app like GPSLogger, which already...Is there a way to communicate trough Briar API (send messages, write blog post), for example using Tasker or Easer.
I for example, would like to send messages with my location to a Private Group, from an app like GPSLogger, which already can post location to email, Dropbox, ftp, openGTS, OSM, ownCloud.
For example we can add list of trusted apps in Briar settings, that can post messages without requiring password.
Or, would be easier/safer to implement Bramble into this kind of app and create new user for it?https://code.briarproject.org/briar/briar/-/issues/2049Fast scrolling in galery closes Briar2021-06-08T14:37:37ZbodemsFast scrolling in galery closes BriarI'm testing Briar 1.3.4 via the F-Droid repo on Android 11 (Google Pixel 3a with GrapheneOS). When I want to share an image or set the profile pic and scroll fast through the image galery (because I want to use a photo I took long ago), ...I'm testing Briar 1.3.4 via the F-Droid repo on Android 11 (Google Pixel 3a with GrapheneOS). When I want to share an image or set the profile pic and scroll fast through the image galery (because I want to use a photo I took long ago), sometimes Briar close itself. It doesn't crash, because I don't have to log in again and don't have to enter my screen lock password and I can just continue, but it is a little bit annoying.https://code.briarproject.org/briar/briar/-/issues/2048Use WebP for image compression2021-12-10T08:54:25ZakwizgranUse WebP for image compressionA user suggested that we use WebP rather than JPEG for compressing images. It's supported on API 14 and seems to give better results than JPEG at high compression levels.
Comparison between JPEG, WebP and AVIF:
https://jakearchibald....A user suggested that we use WebP rather than JPEG for compressing images. It's supported on API 14 and seems to give better results than JPEG at high compression levels.
Comparison between JPEG, WebP and AVIF:
https://jakearchibald.com/2020/avif-has-landed/https://code.briarproject.org/briar/briar/-/issues/2047Main Blog feed page - snack bar 'Scroll to' not working after import of a new...2022-11-17T14:31:44ZIvanaMain Blog feed page - snack bar 'Scroll to' not working after import of a new RSS feedSteps to reproduce:
1. Go to Settings > Blogs > Import RSS Feed
2. Type in the address of an rss feed (I used these ones: https://www.ed.gov/feed, http://feeds.nature.com/nature/rss/current, http://www.newyorker.com/feed/humor)
3. After...Steps to reproduce:
1. Go to Settings > Blogs > Import RSS Feed
2. Type in the address of an rss feed (I used these ones: https://www.ed.gov/feed, http://feeds.nature.com/nature/rss/current, http://www.newyorker.com/feed/humor)
3. After a successful import, tap the back button (upper left hand side corner of the Briar app screen) to return to the main blog feed page
4. At the bottom of the screen there is a brief message 'new blog post received' and the tappable words 'SCROLL TO' in blue
5. Tap the SCROLL TO
Expected results:
1. Briar should scroll to the new blogs that have been received via the imported RSS feed
Actual results
1. No scrolling happens. Reproduced on Nokia 3.1, HTCOneM9 and Pixel2. ![device-2021-05-19-121740](/uploads/b3d3e0685ece690fea28db744a9e4bd0/device-2021-05-19-121740.mp4)
However, if after the RSS feed import I tap the device's own back button (on device, not on the app screen) to return to the main blog page, then scrolling happens correctly (and it does when other blogs are received as well). ![device-2021-05-19-121543](/uploads/e43c58468525c059cf35081cfc2a3171/device-2021-05-19-121543.mp4)
Master, dated 17.5 githash: b0faab9https://code.briarproject.org/briar/briar/-/issues/2046After reblogging, return to the main blog feed page2021-05-18T10:24:19ZIvanaAfter reblogging, return to the main blog feed pageCurrently (githash b0faab9, master 17/05/2021 17:37) this is what happens:
- Open blog details page, and tap on reblog button.
- Type in the reblog comments and tap Reblog when finished.
This action returns the user to the blog detail...Currently (githash b0faab9, master 17/05/2021 17:37) this is what happens:
- Open blog details page, and tap on reblog button.
- Type in the reblog comments and tap Reblog when finished.
This action returns the user to the blog details page - where his new reblog entry is not shown, so the user may be left wondering 'where is the post that I just created'?
If the user then returns to the main blog feed page, their reblgo entry is correctly shown at the top of the page
It may be a neater solution to return to the main blog feed page immediately after the user enters their comments and taps the Reblog button to avoid the step where the user might be wondering what happened to the post they just submitted.
This happens only when reblogging from the blog details screen.
When reblogging from the main blog feed page, the user can see their new reblog post immediately upon return on that page.https://code.briarproject.org/briar/briar/-/issues/2045Make retransmissions in the sync protocol more flexible2021-07-06T09:41:41ZDaniel LublinMake retransmissions in the sync protocol more flexibleDifferent transports need different retransmission behaviour. Retransmission is currently coupled with key rotation period.
For the Removable Drive we might want cause retransmissions every time that the data for a contact is written to...Different transports need different retransmission behaviour. Retransmission is currently coupled with key rotation period.
For the Removable Drive we might want cause retransmissions every time that the data for a contact is written to storage.
- user might might not be sure that the file was correctly saved, and on the actual removable drive, and immediately repeat the process
- user might be accumulating data daily for several days before removable drive is eventually dispatched
- drive might soon break or get lost in transit, and user want to repeat the process, retransmitting all messages again (getting them all onto the removable drive again)Transfer content securely via SD cards and USB memory sticksakwizgranakwizgran2021-07-31https://code.briarproject.org/briar/briar/-/issues/2044Decide whether we want to tell people how to disable unknown sources again2021-07-06T09:38:57ZSebastianDecide whether we want to tell people how to disable unknown sources againAfter downloading briar from somebody else's local hotspot, the user has the browser configure to install APKs downloaded from there, which is potentially unsafe. Maybe we should tell them how to disable that at some point (e.g. the same...After downloading briar from somebody else's local hotspot, the user has the browser configure to install APKs downloaded from there, which is potentially unsafe. Maybe we should tell them how to disable that at some point (e.g. the same time we're telling them how to enable that)Install via Bluetooth or Wi-FiSebastianSebastian2021-07-31https://code.briarproject.org/briar/briar/-/issues/2043Scrolling not happening automatically for own blog posts2021-07-06T10:01:09ZIvanaScrolling not happening automatically for own blog postsDescription:
Scrolling doesn't happen automatically for own blog posts - in portrait orientation
Steps to reproduce:
1. Create enough blog or reblog posts to have more than one full screen of them on a device
2. Then create one more ...Description:
Scrolling doesn't happen automatically for own blog posts - in portrait orientation
Steps to reproduce:
1. Create enough blog or reblog posts to have more than one full screen of them on a device
2. Then create one more new blog post
Expected results:
1. On own device, wn blog post should appear on top of the page.
Actual result:
1. The new blog post does not appear on top of the screen before manually scrolling to it, or before tapping the blue 'Scroll' word on the message that briefly shows on the bottom of the screen
![device-2021-05-17-132727](/uploads/c005cc532d63069bc98a3ef874ce4be4/device-2021-05-17-132727.mp4)Adapt to changes in the Android platformIvanaIvana2021-04-30https://code.briarproject.org/briar/briar/-/issues/2042Investigate integrity mechanisms2021-08-26T10:53:13ZSebastianInvestigate integrity mechanismsInstall via Bluetooth or Wi-Fiakwizgranakwizgran2021-07-31https://code.briarproject.org/briar/briar/-/issues/2041Use vCard for URL transfer2021-05-17T11:46:06ZJens KorteUse vCard for URL transferI am not sure if it is of use: vCards can contain URLs. Maybe that URLs will be opened in a non-safe-Browser.I am not sure if it is of use: vCards can contain URLs. Maybe that URLs will be opened in a non-safe-Browser.https://code.briarproject.org/briar/briar/-/issues/2040Investigate the effect of errors when stopping hotspot2023-03-15T12:41:30ZTorsten GroteInvestigate the effect of errors when stopping hotspot`WifiP2pManager#removeGroup()` can call `ActionListener#onFailure()` with `BUSY` or other error codes. We should check the effect of those and if the system is reliably taking down hotspots or if we need to do some extra work here oursel...`WifiP2pManager#removeGroup()` can call `ActionListener#onFailure()` with `BUSY` or other error codes. We should check the effect of those and if the system is reliably taking down hotspots or if we need to do some extra work here ourselves.SebastianSebastianhttps://code.briarproject.org/briar/briar/-/issues/2039Implement HotspotErrorFragment2021-07-06T09:38:42ZTorsten GroteImplement HotspotErrorFragmentWhen the hotspot or the webserver can't start, we should show an error page and include an option to get to the feedback sender, so we can be notified about the issue.When the hotspot or the webserver can't start, we should show an error page and include an option to get to the feedback sender, so we can be notified about the issue.Install via Bluetooth or Wi-FiSebastianSebastian2021-07-31https://code.briarproject.org/briar/briar/-/issues/2038Sync client to establish keys for newly added transports2021-06-17T13:36:49ZakwizgranSync client to establish keys for newly added transportsWrite a sync client that establishes transport keys with each contact for any transports that were added more recently than the contact was added.
Subtask of #1802Write a sync client that establishes transport keys with each contact for any transports that were added more recently than the contact was added.
Subtask of #1802Transfer content securely via SD cards and USB memory sticksakwizgranakwizgran2021-07-31https://code.briarproject.org/briar/briar/-/issues/2037Create RemovableDriveViewModel2021-06-22T19:04:27ZDaniel LublinCreate RemovableDriveViewModelTransfer content securely via SD cards and USB memory sticksDaniel LublinDaniel Lublin2021-07-31