briar issueshttps://code.briarproject.org/briar/briar/-/issues2022-07-26T15:34:47Zhttps://code.briarproject.org/briar/briar/-/issues/927The "Change password" option accepts the old password as new2022-07-26T15:34:47ZJulian DehmThe "Change password" option accepts the old password as newIt's possible to "change" the password to the one you currently use.
We should check if the new one differs from the old before activating the change password buttonIt's possible to "change" the password to the one you currently use.
We should check if the new one differs from the old before activating the change password buttonhttps://code.briarproject.org/briar/briar/-/issues/922Emoji in forum and group names2020-11-19T15:24:18ZakwizgranEmoji in forum and group namesA tester asked to be able to use emoji in forum and group names. (This is possible with an emoji keyboard, but not otherwise.)A tester asked to be able to use emoji in forum and group names. (This is possible with an emoji keyboard, but not otherwise.)https://code.briarproject.org/briar/briar/-/issues/848Cancelling a reblog darkens the blog2020-11-19T15:39:34ZErnir ErlingssonCancelling a reblog darkens the blog![blogs-weird-reblog-cancel-1](/uploads/ee561feb0ce02e1accf2fc2daf665cef/blogs-weird-reblog-cancel-1.mp4)
Note that it's important to type something into the input field before pressing the back button (for some reason)![blogs-weird-reblog-cancel-1](/uploads/ee561feb0ce02e1accf2fc2daf665cef/blogs-weird-reblog-cancel-1.mp4)
Note that it's important to type something into the input field before pressing the back button (for some reason)https://code.briarproject.org/briar/briar/-/issues/834Optionally sign out when battery is low or power saving mode is enabled2021-10-27T14:09:40ZakwizgranOptionally sign out when battery is low or power saving mode is enabledListen for power manager events (ACTION_BATTERY_LOW, ACTION_POWER_SAVE_MODE_CHANGED) and [manufacturer-specific events](http://stackoverflow.com/a/25103642) and optionally sign out if the battery is low or power saving mode is enabled an...Listen for power manager events (ACTION_BATTERY_LOW, ACTION_POWER_SAVE_MODE_CHANGED) and [manufacturer-specific events](http://stackoverflow.com/a/25103642) and optionally sign out if the battery is low or power saving mode is enabled and the user's not currently interacting with Briar.https://code.briarproject.org/briar/briar/-/issues/826Online status in group memberlist2020-11-21T12:40:34ZTorsten GroteOnline status in group memberlistThe group member list shows the online status of contacts. As of MR !448, it only shows the online status of contacts, we actually share with to be consistent with the sharing information in the group's action bar.
This can be confusing...The group member list shows the online status of contacts. As of MR !448, it only shows the online status of contacts, we actually share with to be consistent with the sharing information in the group's action bar.
This can be confusing since some group members have online status and others don't.https://code.briarproject.org/briar/briar/-/issues/819UX design for errors that don't interrupt the user's workflow2020-11-21T12:43:46ZTorsten GroteUX design for errors that don't interrupt the user's workflowThis ticket is for creating the UX design when errors occur that don't interrupt the user's workflow.
Imagine you share a forum with someone or invite two contacts to each other. These operations might fail, but since the invitation scr...This ticket is for creating the UX design when errors occur that don't interrupt the user's workflow.
Imagine you share a forum with someone or invite two contacts to each other. These operations might fail, but since the invitation screen closes anyway, it does not really interrupt your work-flow anymore. Another possible error might happen when a title of the blog or the number of online users is loaded to be shown in the action bar. There will just be the default title maybe "Blog" and the user might not even notice, but it is a bug we might want to know about. Another example is when we fail to store the fact that we already showed you the onboarding and then show it to you again.
So more general, the kinds of errors I imagine to fall in this category are:
* user actions that are not completed, but don't interrupt the workflow because it finishes at this point anyway
* loading of non-essential information
Subticket of #469.https://code.briarproject.org/briar/briar/-/issues/818UX design for errors that interrupt the user's workflow2020-11-21T12:44:25ZTorsten GroteUX design for errors that interrupt the user's workflowThis ticket is for creating the UX design for when errors occur that interrupt the user's workflow and don't have any corrective action.
For example, you open your private conversation with someone, but it just closes again (or shows an...This ticket is for creating the UX design for when errors occur that interrupt the user's workflow and don't have any corrective action.
For example, you open your private conversation with someone, but it just closes again (or shows an error message) because an error occurred while loading it. You open a private group, but when finding out whether it is dissolved an error occurs, so it stays in the disabled state by default. Or you are in a multi-step process and an error prevents you from reaching the next step like when creating a private group fails and you are not getting to the next step of inviting contacts to it.
Errors while loading blog posts, private message, forum posts, contacts, basically anything in lists falls into this category.
Subticket of #469.https://code.briarproject.org/briar/briar/-/issues/786Handle whitespace consistently2022-11-18T17:24:07ZakwizgranHandle whitespace consistentlyText with leading or trailing whitespace is treated inconsistently:
* Nicknames: whitespace isn't trimmed, whitespace-only names are allowed
* Private messages: whitespace is trimmed, whitespace-only messages are allowed but become empt...Text with leading or trailing whitespace is treated inconsistently:
* Nicknames: whitespace isn't trimmed, whitespace-only names are allowed
* Private messages: whitespace is trimmed, whitespace-only messages are allowed but become empty after trimming
* Forum names: whitespace isn't trimmed, whitespace-only names are allowed
* Forum invitations: whitespace isn't trimmed, whitespace-only messages are allowed
* Forum posts: whitespace is trimmed, whitespace-only posts aren't allowed
* Private group names: whitespace isn't trimmed, whitespace-only names are allowed
* Private group invitations: whitespace isn't trimmed, whitespace-only messages are allowed
* Private group posts: whitespace is trimmed, whitespace-only posts aren't allowed
* Blog posts: whitespace is trimmed, whitespace-only posts are allowed but become empty after trimming
* Blog comments: whitespace isn't trimmed, whitespace-only comments are allowed
Let's do the following everywhere:
When entering text:
1. Trim leading and trailing whitespace
2. If the trimmed text is empty and the input is optional (for example a blog comment), pass null to the backend
3. If the trimmed text is empty and the input isn't optional (for example a blog post), don't accept the input
4. If the trimmed text is too long, don't accept the input
5. If the trimmed text isn't empty or too long, pass it to the backend
When validating messages (including author names and group names):
1. Reject null if the text isn't optional
2. Reject the text if it's empty or too long
3. Reject the text if it has leading or trailing whitespacehttps://code.briarproject.org/briar/briar/-/issues/776Merge redundant null safety annotations2020-11-21T16:19:21ZakwizgranMerge redundant null safety annotationsAfter some experience with the new null safety annotations, it seems we only want to express two conditions:
* Methods, parameters and fields are not null by default
* Methods and parameters are not null by default
Merge @MethodsNotNull...After some experience with the new null safety annotations, it seems we only want to express two conditions:
* Methods, parameters and fields are not null by default
* Methods and parameters are not null by default
Merge @MethodsNotNullByDefault with @ParametersNotNullByDefault, and remove @FieldsNotNullByDefault.https://code.briarproject.org/briar/briar/-/issues/773Tidy up message inheritance hierarchy2020-11-21T16:21:14ZakwizgranTidy up message inheritance hierarchyBlogPost extends ForumPost extends ThreadedMessage extends PrivateMessage... really?BlogPost extends ForumPost extends ThreadedMessage extends PrivateMessage... really?https://code.briarproject.org/briar/briar/-/issues/745Refactor redundant code in AndroidNotificationManagerImpl2020-11-21T16:26:13ZakwizgranRefactor redundant code in AndroidNotificationManagerImplAndroidNotificationManagerImpl contains blocks of nearly identical code for doing things like counting new messages per-group or per-contact, and blocking or unblocking notifications per-client. These could be refactored to reduce redund...AndroidNotificationManagerImpl contains blocks of nearly identical code for doing things like counting new messages per-group or per-contact, and blocking or unblocking notifications per-client. These could be refactored to reduce redundancy.
(ConnectionRegistryImpl also contains similar code for counting connections per-contact. Maybe this could be factored out into a separate `Counter<T>` class.)https://code.briarproject.org/briar/briar/-/issues/744Use global constants for View's alpha values2020-11-21T16:27:13ZErnir ErlingssonUse global constants for View's alpha valuesIn several places in the app we're decreasing the opacity of views to represent things such as disabled states. Unfortunately, we're doing this through hard-coded float values at each location. We should rather use global constants and m...In several places in the app we're decreasing the opacity of views to represent things such as disabled states. Unfortunately, we're doing this through hard-coded float values at each location. We should rather use global constants and make sure that every occurrence uses them -- this will make it easier for us to modify it in the future to fit any design pattern.https://code.briarproject.org/briar/briar/-/issues/729Blog posts should be created on the crypto executor2020-11-21T16:34:09ZakwizgranBlog posts should be created on the crypto executorWriteBlogPostActivity creates blog posts on the DB executor. They should be created on the crypto executor and stored on the DB executor using chaining.
(BlogManagerImpl similarly creates comments on the DB executor, but that would be m...WriteBlogPostActivity creates blog posts on the DB executor. They should be created on the crypto executor and stored on the DB executor using chaining.
(BlogManagerImpl similarly creates comments on the DB executor, but that would be much harder to disentangle.)https://code.briarproject.org/briar/briar/-/issues/728Don't change list indices during validation2020-11-23T11:39:37ZakwizgranDon't change list indices during validationSome validation hooks pop the message type off the list representing the message body before validating the remaining items. This is due to poorly written specs that didn't include the message type in the list. The list should be left un...Some validation hooks pop the message type off the list representing the message body before validating the remaining items. This is due to poorly written specs that didn't include the message type in the list. The list should be left unmodified for easier comparison with the corrected spec.https://code.briarproject.org/briar/briar/-/issues/725Result handlers may not return results if the screen is rotated2020-11-21T16:36:20ZakwizgranResult handlers may not return results if the screen is rotatedThis issue came to mind while reviewing !354 - `SetupActivity#onClick()` uses the onResultUi() method of a UiResultHandler to start the next activity. If the screen's rotated before the handler returns, the original activity will be dest...This issue came to mind while reviewing !354 - `SetupActivity#onClick()` uses the onResultUi() method of a UiResultHandler to start the next activity. If the screen's rotated before the handler returns, the original activity will be destroyed, so the handler will never call onResultUi(). The outcome, as far as I can see, will be a progress wheel that spins forever.
Similar problems may exist elsewhere. Most of the time we use ResultHandlers to update the state of the current activity or fragment, and we reload everything if the activity or fragment's recreated, so it doesn't matter if results are lost during rotation. But there may be some places like this one where we depend on the result being returned.https://code.briarproject.org/briar/briar/-/issues/717Up navigation2020-11-21T16:38:01ZakwizgranUp navigationWe're currently treating the "up" action in the action bar as equivalent to the "back" action. Instead it should navigate to the current activity's parent.
https://developer.android.com/training/implementing-navigation/ancestral.htmlWe're currently treating the "up" action in the action bar as equivalent to the "back" action. Instead it should navigate to the current activity's parent.
https://developer.android.com/training/implementing-navigation/ancestral.htmlhttps://code.briarproject.org/briar/briar/-/issues/716Warn when entered text is too long2020-11-21T16:38:26ZakwizgranWarn when entered text is too longWe do this for forum posts, we should also do it for:
* Private messages
* Introduction messages
* Invitation messages
* Blog posts
* Blog commentsWe do this for forum posts, we should also do it for:
* Private messages
* Introduction messages
* Invitation messages
* Blog posts
* Blog commentshttps://code.briarproject.org/briar/briar/-/issues/626Add a sign out button to the ongoing notification2020-11-21T17:07:01ZErnir ErlingssonAdd a sign out button to the ongoing notificationOne test user took the drastic action of turning his mobile device off and on in order to completely close Briar. The user didn't realise that the logout button in-app would have that affect and remove the static notification.
Suggested...One test user took the drastic action of turning his mobile device off and on in order to completely close Briar. The user didn't realise that the logout button in-app would have that affect and remove the static notification.
Suggested solution: We add a logout button to the static notification, which causes Briar to close completely and removes the static notificationhttps://code.briarproject.org/briar/briar/-/issues/603Research stream isolation for hidden service connections2020-11-16T11:11:45ZakwizgranResearch stream isolation for hidden service connectionsTor supports stream isolation, meaning that streams used for separate purposes can be forced to use separate circuits, making it harder for observers to tell whether the streams belong to the same client. Clients can activate this featur...Tor supports stream isolation, meaning that streams used for separate purposes can be forced to use separate circuits, making it harder for observers to tell whether the streams belong to the same client. Clients can activate this feature by specifying a SOCKS username and password - streams with different SOCKS credentials will be isolated from each other.
Using stream isolation for our hidden service connections may help to prevent Tor relays from learning which hidden service addresses belong to contacts of the same user. That information could be used to help identify the user or her contacts. On a larger scale it might also be used to build an anonymised social graph of hidden service addresses, which could then be deanonymised by comparing it with other social graphs (https://33bits.org/).
However, it's not clear whether stream isolation would prevent this information leak, as Tor may re-use existing circuits for publishing and retrieving hidden service descriptors (see https://gitweb.torproject.org/torspec.git/plain/rend-spec.txt).
Find out:
* Whether stream isolation applies to publishing and retrieving HS descriptors
* Whether stream isolation has a bandwidth cost due to using more circuitshttps://code.briarproject.org/briar/briar/-/issues/547Throw AssertionError instead of RuntimeException2020-11-21T17:41:53ZakwizgranThrow AssertionError instead of RuntimeExceptionMany places in the code rethrow checked exceptions as runtime exceptions if the checked exception should never happen. Throw AssertionError instead, to make the behaviour more self-documenting.Many places in the code rethrow checked exceptions as runtime exceptions if the checked exception should never happen. Throw AssertionError instead, to make the behaviour more self-documenting.