briar issueshttps://code.briarproject.org/groups/briar/-/issues2020-11-18T01:37:42Zhttps://code.briarproject.org/briar/briar/-/issues/1321Add backpressure to outgoing duplex sync sessions2020-11-18T01:37:42ZakwizgranAdd backpressure to outgoing duplex sync sessionsDuplexOutgoingSession reads records from the database as quickly as possible and queues them for transmission. If the DB is faster than the transport, this will result in all sendable records being queued. This uses an unbounded amount o...DuplexOutgoingSession reads records from the database as quickly as possible and queues them for transmission. If the DB is faster than the transport, this will result in all sendable records being queued. This uses an unbounded amount of memory and increases the risk of records being lost before they're transmitted, leading to unnecessary retransmissions.
Add a backpressure mechanism that limits the amount of queued data and delays DB reads when the queue is full.
This will be a bit more complex than #1319 because DuplexOutgoingSession can start DB queries in response to events.https://code.briarproject.org/briar/briar/-/issues/1320Add backpressure to incoming sync sessions2020-11-18T01:34:09ZakwizgranAdd backpressure to incoming sync sessionsIncomingSession reads records from the transport as quickly as possible and queues them to be added to the DB. If the transport is faster than the DB, this will result in an unbounded number of records being queued. This uses an unbounde...IncomingSession reads records from the transport as quickly as possible and queues them to be added to the DB. If the transport is faster than the DB, this will result in an unbounded number of records being queued. This uses an unbounded amount of memory, which is a DoS risk.
Add a backpressure mechanism that limits the amount of queued data and delays reading from the connection when the queue is full.https://code.briarproject.org/briar/briar/-/issues/1292Test Briar with power management apps2020-11-16T11:01:17ZakwizgranTest Briar with power management appsTest whether Briar is killed, loses connectivity, or is listed as power-intensive by power management apps such as the following:
https://play.google.com/store/apps/details?id=com.oasisfeng.greenify
https://play.google.com/store/apps/d...Test whether Briar is killed, loses connectivity, or is listed as power-intensive by power management apps such as the following:
https://play.google.com/store/apps/details?id=com.oasisfeng.greenify
https://play.google.com/store/apps/details?id=com.avast.android.batterysaver
https://play.google.com/store/apps/details?id=com.battery.power.batterysaverhttps://code.briarproject.org/briar/briar/-/issues/1278Use split APKs to make app available for Android Go2020-11-18T02:38:55ZakwizgranUse split APKs to make app available for Android GoApparently the Play Store doesn't offer APKs larger than 10 MB to Android Go devices. We should provide architecture-specific (ARM and x86) APKs to keep the size below 10 MB.
Idea stolen from Orbot. :-)
https://developer.android.com/st...Apparently the Play Store doesn't offer APKs larger than 10 MB to Android Go devices. We should provide architecture-specific (ARM and x86) APKs to keep the size below 10 MB.
Idea stolen from Orbot. :-)
https://developer.android.com/studio/build/configure-apk-splitshttps://code.briarproject.org/briar/briar/-/issues/1266Use OONI data to identify locations where Tor bridges should be used2020-11-18T21:47:03ZakwizgranUse OONI data to identify locations where Tor bridges should be usedThis should be done in a scriptable way so the list can be updated regularly.
Subtask of #647.This should be done in a scriptable way so the list can be updated regularly.
Subtask of #647.https://code.briarproject.org/briar/briar/-/issues/1259User testing for headless desktop/server app2021-01-21T13:24:56ZakwizgranUser testing for headless desktop/server appSubtask of #1254.Subtask of #1254.Headless MVPhttps://code.briarproject.org/briar/briar/-/issues/1240Update database and sync API to support large messages2022-06-15T12:02:16ZakwizgranUpdate database and sync API to support large messagesSubtask of #1237.Subtask of #1237.Multi-block messageshttps://code.briarproject.org/briar/briar/-/issues/1239Implement changes to sync protocol to support multi-block messages2022-06-15T12:02:16ZakwizgranImplement changes to sync protocol to support multi-block messagesSubtask of #1237.Subtask of #1237.Multi-block messageshttps://code.briarproject.org/briar/briar/-/issues/1238Design changes to sync protocol to support multi-block messages2022-06-15T12:02:16ZakwizgranDesign changes to sync protocol to support multi-block messagesSubtask of #1237.Subtask of #1237.Multi-block messageshttps://code.briarproject.org/briar/briar/-/issues/1235User testing for adding contacts remotely2022-11-18T17:24:07ZakwizgranUser testing for adding contacts remotely### Workflow Prototype Testing
Briar wants to add support for adding contacts remotely without them having to meet face to face. Before implementing this feature entirely, Briar wants to test an early design prototype to see if users wo...### Workflow Prototype Testing
Briar wants to add support for adding contacts remotely without them having to meet face to face. Before implementing this feature entirely, Briar wants to test an early design prototype to see if users would understand the workflow.
An APKs for testing (which can be installed along-side the official Briar) is available here:
* https://grobox.de/tmp/briar-add-contacts-remotely-user-test.apk
Test Setup: Two testers both install the same test APK on their Android phone. Without being in the same room, they try to add each other as contacts in Briar. The test finishes and succeeds when a new contact was added on both phones. Note that the contact that will be added is fake and purely for testing. While it will appear to be online, you will never be able to exchange messages until the feature is fully implemented.
Please finish the test **before** reading and answering the questions below!
---
### Questions (for after the test!)
1. Did you understand the difference between the two options for adding a contact and which one to choose?
1. When seeing the 'Add a Contact' screen, did you know what to do?
1. How did you exchange the links?
1. Were there any issues when exchanging the links?
1. After entering your contact's link, did you understand what happened?
1. When testing the full version, did you understand the QR code button? Did it confuse? Did you use it?
1. Were you confused about the delay before the contact was added?
1. Is there anything that would have helped you to understand the process better?
Subtask of #1230.Android 1.4Renata GegajRenata Gegajhttps://code.briarproject.org/briar/briar/-/issues/1205Check that registration methods aren't called after startup2020-11-18T22:30:29ZakwizgranCheck that registration methods aren't called after startupVarious registration methods are meant to be called at injection time, before `LifecycleManager#startServices()` is called. Add checks to ensure they aren't called later in the lifecycle (e.g. due to a singleton being created lazily).Various registration methods are meant to be called at injection time, before `LifecycleManager#startServices()` is called. Add checks to ensure they aren't called later in the lifecycle (e.g. due to a singleton being created lazily).https://code.briarproject.org/briar/briar/-/issues/1183Key manager blocks startup by holding DB lock2020-11-18T22:40:15ZakwizgranKey manager blocks startup by holding DB lock`KeyManagerImpl#startService()` uses a read-write transaction to load contacts, store transports, and start key rotation. When there are many contacts this transaction can hold the DB lock for several seconds, preventing the contact list...`KeyManagerImpl#startService()` uses a read-write transaction to load contacts, store transports, and start key rotation. When there are many contacts this transaction can hold the DB lock for several seconds, preventing the contact list from being loaded.
Move the transaction off the critical path, and if possible break it up into smaller transactions.https://code.briarproject.org/briar/briar/-/issues/1179Handshake protocol2020-11-18T22:39:28ZakwizgranHandshake protocolTo enable account backups (#110) and simplify the introduction protocol (#474) it would be useful to have a way of bootstrapping from static keys, suitable for storing in a backup or exchanging in an introduction, to forward secret trans...To enable account backups (#110) and simplify the introduction protocol (#474) it would be useful to have a way of bootstrapping from static keys, suitable for storing in a backup or exchanging in an introduction, to forward secret transport keys.https://code.briarproject.org/briar/briar/-/issues/1104Load messages on demand (paged/lazy)2022-05-16T19:53:45ZakwizgranLoad messages on demand (paged/lazy)If a group contains a lot of messages, it's expensive to load all the messages when the user views the group.
Some clients use metadata to avoid loading messages. Message bodies can then be loaded on demand as they become visible. But t...If a group contains a lot of messages, it's expensive to load all the messages when the user views the group.
Some clients use metadata to avoid loading messages. Message bodies can then be loaded on demand as they become visible. But this is still expensive if there are lots of messages and/or lots of metadata per message.
Ideally we'd use something like the MessageTracker to store summary information, then load the messages and/or metadata on demand.
One of the tasks here is to determine what summary information each client needs. For example, the forum client needs to know the number of unread posts above and below the viewport. It may also need to know the sort position of the first unread post above and below the viewport so it can jump to those posts.
Sort order will be relevant to any client that loads messages on demand. If we want to load messages a page at a time, the database needs to know how to sort the messages. But sort order is client-dependent. For example, the blog client may want to sort posts by date, whereas the forum client sorts them by depth-first traversal order of the reply tree.
We can capture both of these orders (and hopefully others) by adding a label to each message. From the database's point of view, the label is just an opaque string of bytes. The database sorts the labels in lexicographic order, and messages and metadata can be retrieved by their positions in the sort order. The client is reponsible for labelling messages to achieve the desired sort order.
For the blog client, the label can just be a big-endian representation of the timestamp. For the forum client, the label can be the concatenated timestamps of the post's ancestors and the post itself. These labels will sort in the same order as depth-first traversal of the tree, visiting siblings in timestamp order.
```
123
+-123/234
+-123/345
234
+-234/345
+-234/345/456
345
567
```
(This doesn't rely on the rule that a post has a higher timestamp than its parent.)
This approach wouldn't be efficient for dynamic sort orders. For example, if the forum client wanted to sort siblings by the number of upvotes, we could calculate the labels as with timestamps, but adding an upvote to a post would require relabelling the post and all its descendents.https://code.briarproject.org/briar/briar/-/issues/1101Research whether NotificationCleanupService needs to be migrated to JobIntent...2020-11-19T13:24:10ZakwizgranResearch whether NotificationCleanupService needs to be migrated to JobIntentServiceNotificationCleanupService extends IntentService, which may not work properly on Android 8 [according to the docs](https://developer.android.com/about/versions/oreo/background.html). Find out whether the changes apply to us. If so, upgra...NotificationCleanupService extends IntentService, which may not work properly on Android 8 [according to the docs](https://developer.android.com/about/versions/oreo/background.html). Find out whether the changes apply to us. If so, upgrade the support library to version 26 and migrate NotificationCleanupService to JobIntentService.https://code.briarproject.org/briar/briar/-/issues/1094Splash screen makes app feel slow to start up2020-11-19T13:22:14ZakwizgranSplash screen makes app feel slow to start upA user commented that the splash screen makes the app feel slow to start up.
We originally added the splash because the app *was* slow to start up when we were using Guice. Now that we're using Dagger, perhaps the splash isn't needed an...A user commented that the splash screen makes the app feel slow to start up.
We originally added the splash because the app *was* slow to start up when we were using Guice. Now that we're using Dagger, perhaps the splash isn't needed any more?https://code.briarproject.org/briar/briar/-/issues/952Use external IP address in LocationUtils if available2020-11-19T15:17:31ZakwizgranUse external IP address in LocationUtils if availableIf we can discover a routable IP address from a network interface then we can look it up in Tor's GeoIP library and use that as one of the sources to determine whether Tor's likely to be blocked in our current location.If we can discover a routable IP address from a network interface then we can look it up in Tor's GeoIP library and use that as one of the sources to determine whether Tor's likely to be blocked in our current location.https://code.briarproject.org/briar/briar/-/issues/950Detect when Tor is failing to connect to the network2022-06-06T13:23:38ZakwizgranDetect when Tor is failing to connect to the networkUnder some circumstances (see #845), Tor can't connect to the network but the app doesn't realise there's no internet connectivity.. Repeatedly trying and failing to connect to guard nodes could cause Tor to mark its preferred guards as ...Under some circumstances (see #845), Tor can't connect to the network but the app doesn't realise there's no internet connectivity.. Repeatedly trying and failing to connect to guard nodes could cause Tor to mark its preferred guards as unreachable and choose new guards sooner than necessary, which could harm anonymity. We should consider setting `DisableNetwork 1` after repeated guard connection failures, then waiting for a connectivity event before trying again.https://code.briarproject.org/briar/briar/-/issues/942Compare Briar's Notification behaviour with other chat applications2020-11-19T15:21:55ZErnir ErlingssonCompare Briar's Notification behaviour with other chat applications> @ernir it would be great if you could look into the notification behaviour of other apps in detail (if i had to pick one, i guess it would be whatsapp) and see how they're handling all the corner cases. for example, if a conversation i...> @ernir it would be great if you could look into the notification behaviour of other apps in detail (if i had to pick one, i guess it would be whatsapp) and see how they're handling all the corner cases. for example, if a conversation is open and a message arrives, does it show a notification/vibrate/make a sound/blink the led? same question if the screen is off, same question if the list of conversations is open instead of the conversation itself, etchttps://code.briarproject.org/briar/briar/-/issues/929Non-blocking SettingsManager2020-11-15T10:37:10ZakwizgranNon-blocking SettingsManagerThe SettingsManager interface is inconvenient to use because it needs to be called on the DB thread. Make the interface non-blocking by loading settings at startup and writing them back to the DB in the background when they're updated.The SettingsManager interface is inconvenient to use because it needs to be called on the DB thread. Make the interface non-blocking by loading settings at startup and writing them back to the DB in the background when they're updated.