briar issueshttps://code.briarproject.org/groups/briar/-/issues2023-01-13T22:17:18Zhttps://code.briarproject.org/briar/briar-desktop/-/issues/459Migrate to using compose built-in `Badge` for unread counters2023-01-13T22:17:18ZMikolai GütschowMigrate to using compose built-in `Badge` for unread counterssee https://developer.android.com/reference/kotlin/androidx/compose/material/package-summary#Badge(androidx.compose.ui.Modifier,androidx.compose.ui.graphics.Color,androidx.compose.ui.graphics.Color,kotlin.Function1)see https://developer.android.com/reference/kotlin/androidx/compose/material/package-summary#Badge(androidx.compose.ui.Modifier,androidx.compose.ui.graphics.Color,androidx.compose.ui.graphics.Color,kotlin.Function1)https://code.briarproject.org/briar/briar-desktop/-/issues/458Research on and decide for across-screen navigation libraries/pattern2023-08-25T13:33:35ZMikolai GütschowResearch on and decide for across-screen navigation libraries/patternE.g. needed for #453. Quoting @grote from there:
> I only know that there's hundreds of competing navigation libraries for compose, not sure we want add our own implementation to the mix. Many of those probably only work on Android.E.g. needed for #453. Quoting @grote from there:
> I only know that there's hundreds of competing navigation libraries for compose, not sure we want add our own implementation to the mix. Many of those probably only work on Android.Desktop 0.7.0https://code.briarproject.org/briar/briar-desktop/-/issues/453Let user open forum from within request message (only) after accepting the in...2023-05-11T21:20:22ZMikolai GütschowLet user open forum from within request message (only) after accepting the invitationThis issue consists of two parts:
- Currently clicking on "Open" does not do anything (`ConversationRequestItem(onOpenRequestedShareable = {})` is the default)
- After declining an invitation, "Open" is also shown to the user which doesn...This issue consists of two parts:
- Currently clicking on "Open" does not do anything (`ConversationRequestItem(onOpenRequestedShareable = {})` is the default)
- After declining an invitation, "Open" is also shown to the user which doesn't make sense:
![image](/uploads/4c950cc496d574839b90d876ac1adf3a/image.png)https://code.briarproject.org/briar/briar-desktop/-/issues/452User needs to allow access because Windows Defender initially blocks connections2023-01-12T12:02:46ZSebastianUser needs to allow access because Windows Defender initially blocks connectionsThis is what it looks like when initially starting Briar Desktop on Windows 10:
![Firewall](/uploads/d9e56e866fb4fbd05fc45e512e9b99cc/Firewall.png)
This was initially brought up in [this thread](https://code.briarproject.org/briar/bria...This is what it looks like when initially starting Briar Desktop on Windows 10:
![Firewall](/uploads/d9e56e866fb4fbd05fc45e512e9b99cc/Firewall.png)
This was initially brought up in [this thread](https://code.briarproject.org/briar/briar-desktop/-/merge_requests/274#note_73767).
Suggestions include:
* @ialokim: Perhaps we should consider showing information to the user explaining that they should accept connections if they want Briar to work correctly. Or if we want to be even fancier, somehow check if the connections are blocked by the firewall and then show some kind of dialog to the user explaining how the block can be undone. Probably something for a new issue in any case.
* @akwizgran: BTW there's an API for adding firewall rules, which IIRC prevents the Windows Defender dialog from popping up.
https://learn.microsoft.com/en-gb/previous-versions/windows/desktop/ics/windows-firewall-advanced-security-start-pagehttps://code.briarproject.org/briar/briar-desktop/-/issues/450Add explainer information for release on how to install downloaded MSI from t...2023-08-25T13:33:35ZSebastianAdd explainer information for release on how to install downloaded MSI from the internetDesktop 0.7.0SebastianSebastianhttps://code.briarproject.org/briar/briar-desktop/-/issues/448Problem to add contact among Windows and one Android test device2023-01-11T10:17:00ZSebastianProblem to add contact among Windows and one Android test deviceI have a combination of devices that doesn't seem to be able to be added to one another successfully. First reported here: https://code.briarproject.org/briar/briar-desktop/-/merge_requests/8#note_73316
One device is the Nokia 2.4 with ...I have a combination of devices that doesn't seem to be able to be added to one another successfully. First reported here: https://code.briarproject.org/briar/briar-desktop/-/merge_requests/8#note_73316
One device is the Nokia 2.4 with some debug version of Briar Android installed. The other device is a Windows machine running Briar Desktop. The issue has been reproduced with a second Windows machine and the same Android device. I have not reset the account on the Android device since or installed a different version in order to still have access to the problematic combination of devices. In both cases, a different Android device could add the Windows machine and vice versa.https://code.briarproject.org/briar/briar-desktop/-/issues/446Add preference for setting an Avatar image2023-01-07T18:43:04ZSebastianAdd preference for setting an Avatar imagehttps://code.briarproject.org/briar/briar-spec/-/issues/17Include spec of briar:// links in BRP spec2023-01-06T16:52:10ZNicoInclude spec of briar:// links in BRP specContacts can be added in Briar by exchanging briar:// links. Underneath the Bramble Rendezvous Protocol (BRP) is used, however, nowhere it's specified how the briar:// links are constructed.
Asking @akwizgran, he pointed me to [`Pending...Contacts can be added in Briar by exchanging briar:// links. Underneath the Bramble Rendezvous Protocol (BRP) is used, however, nowhere it's specified how the briar:// links are constructed.
Asking @akwizgran, he pointed me to [`PendingContactFactoryImpl#parseHandshakeLink()`](https://code.briarproject.org/briar/briar/-/blob/beta-1.4.19/bramble-core/src/main/java/org/briarproject/bramble/contact/PendingContactFactoryImpl.java#L59), adding:
> it's a version byte (zero is the current version) followed by a 32-byte curve25519 public key, all base32-encoded to give 53 base32 charshttps://code.briarproject.org/briar/briar-mailbox/-/issues/181Splash screen on Android 12 does not look nice2023-08-28T16:00:10ZSebastianSplash screen on Android 12 does not look niceWith Android 12 there are now [Splash screens](https://developer.android.com/develop/ui/views/launch/splash-screen) when launching the app, showing our logo. In our case that logo is white on a gray background. I think we should probably...With Android 12 there are now [Splash screens](https://developer.android.com/develop/ui/views/launch/splash-screen) when launching the app, showing our logo. In our case that logo is white on a gray background. I think we should probably set the tint in the app icon directly instead of the fragment. We just need to check light mode and dark mode both look good.https://code.briarproject.org/briar/briar/-/issues/2406Error fragment after scanning QR code for adding contacts does not auto-rotat...2022-12-21T12:21:47ZSebastianError fragment after scanning QR code for adding contacts does not auto-rotate to landscape modeAfter trying to add a contact nearby and scanning a random QR code, an error fragment is displayed. Since we're disabling auto-rotation in the scanning fragment and set that on the activity, the following fragment has the same restrictio...After trying to add a contact nearby and scanning a random QR code, an error fragment is displayed. Since we're disabling auto-rotation in the scanning fragment and set that on the activity, the following fragment has the same restriction. We call there:
```
requireActivity().setRequestedOrientation(SCREEN_ORIENTATION_NOSENSOR);
```
and probably could just call this in the error fragment:
```
requireActivity().setRequestedOrientation(SCREEN_ORIENTATION_UNSPECIFIED);
```https://code.briarproject.org/briar/briar-desktop/-/issues/444Fine grained notification settings2022-12-20T13:04:13ZSebastianFine grained notification settingsCurrently it's only possible to change visual and sound notifications separately but not whether notifications are shown/played for private messages, forums etc. individually.Currently it's only possible to change visual and sound notifications separately but not whether notifications are shown/played for private messages, forums etc. individually.https://code.briarproject.org/briar/briar-desktop/-/issues/442Use bisection method for finding the best image compression2022-12-10T07:45:37ZJens KorteUse bisection method for finding the best image compressionAt https://code.briarproject.org/briar/briar-desktop/-/blob/main/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/attachment/media/ImageCompressorImpl.kt#L66 the best image size is found by
```
for (quality in 100 downTo 1 ...At https://code.briarproject.org/briar/briar-desktop/-/blob/main/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/attachment/media/ImageCompressorImpl.kt#L66 the best image size is found by
```
for (quality in 100 downTo 1 step 10) {
```
How about replacing the for loop with a loop using the [bisection method](https://en.wikipedia.org/wiki/Bisection_method).https://code.briarproject.org/briar/briar-desktop/-/issues/441Kotlin BackendException while compiling2022-12-20T12:20:00ZSebwinKotlin BackendException while compilingI recently get this error frequently while trying to build the app. Often after switching branches, happens both on Windows and Linux. Not sure what's the exact cause.
```
org.jetbrains.kotlin.backend.common.BackendException: Backend In...I recently get this error frequently while trying to build the app. Often after switching branches, happens both on Windows and Linux. Not sure what's the exact cause.
```
org.jetbrains.kotlin.backend.common.BackendException: Backend Internal error: Exception during IR lowering
File being compiled: ~/gitlab/briar/briar-desktop/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/conversation/ConversationViewModel.kt
The root cause java.lang.AssertionError was thrown at: org.jetbrains.kotlin.ir.util.IrUtilsKt.copyValueParametersToStatic(IrUtils.kt:887)
at org.jetbrains.kotlin.backend.common.CodegenUtil.reportBackendException(CodegenUtil.kt:239)
at org.jetbrains.kotlin.backend.common.CodegenUtil.reportBackendException$default(CodegenUtil.kt:235)
at org.jetbrains.kotlin.backend.common.phaser.PerformByIrFilePhase.invokeSequential(performByIrFile.kt:68)
at org.jetbrains.kotlin.backend.common.phaser.PerformByIrFilePhase.invoke(performByIrFile.kt:55)
at org.jetbrains.kotlin.backend.common.phaser.PerformByIrFilePhase.invoke(performByIrFile.kt:41)
at org.jetbrains.kotlin.backend.common.phaser.NamedCompilerPhase.invoke(CompilerPhase.kt:96)
at org.jetbrains.kotlin.backend.common.phaser.CompositePhase.invoke(PhaseBuilders.kt:29)
at org.jetbrains.kotlin.backend.common.phaser.NamedCompilerPhase.invoke(CompilerPhase.kt:96)
at org.jetbrains.kotlin.backend.common.phaser.CompilerPhaseKt.invokeToplevel(CompilerPhase.kt:43)
at org.jetbrains.kotlin.backend.jvm.JvmIrCodegenFactory.invokeLowerings(JvmIrCodegenFactory.kt:294)
at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.runLowerings(KotlinToJVMBytecodeCompiler.kt:339)
at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.compileModules$cli(KotlinToJVMBytecodeCompiler.kt:126)
at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.compileModules$cli$default(KotlinToJVMBytecodeCompiler.kt:58)
at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:158)
at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:53)
at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:99)
at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:47)
at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:101)
at org.jetbrains.kotlin.incremental.IncrementalJvmCompilerRunner.runCompiler(IncrementalJvmCompilerRunner.kt:475)
at org.jetbrains.kotlin.incremental.IncrementalJvmCompilerRunner.runCompiler(IncrementalJvmCompilerRunner.kt:125)
at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compileIncrementally(IncrementalCompilerRunner.kt:373)
at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compileIncrementally$default(IncrementalCompilerRunner.kt:318)
at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compileImpl(IncrementalCompilerRunner.kt:180)
at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compile(IncrementalCompilerRunner.kt:79)
at org.jetbrains.kotlin.daemon.CompileServiceImplBase.execIncrementalCompiler(CompileServiceImpl.kt:625)
at org.jetbrains.kotlin.daemon.CompileServiceImplBase.access$execIncrementalCompiler(CompileServiceImpl.kt:101)
at org.jetbrains.kotlin.daemon.CompileServiceImpl.compile(CompileServiceImpl.kt:1746)
at jdk.internal.reflect.GeneratedMethodAccessor110.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:360)
at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:200)
at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:197)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:712)
at java.rmi/sun.rmi.transport.Transport.serviceCall(Transport.java:196)
at java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:587)
at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:828)
at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:705)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:704)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
at java.base/java.lang.Thread.run(Thread.java:833)
```https://code.briarproject.org/briar/briar-desktop/-/issues/440Sometimes when starting the test with two connected accounts, the shared foru...2023-01-09T21:51:52ZSebastianSometimes when starting the test with two connected accounts, the shared forum is only available one of both accountsI haven't seen anything unusual in the logs, but will try to record one next time I see this happen.I haven't seen anything unusual in the logs, but will try to record one next time I see this happen.https://code.briarproject.org/briar/briar-desktop/-/issues/437Refactor deterministic test data2023-01-09T21:52:21ZMikolai GütschowRefactor deterministic test dataAs a follow-up to !267 where forums are not yet shared with contacts. We were discussing the following points:
- change the test data creator API to not use a given number of contacts/private chats, but rather allow to pick specific con...As a follow-up to !267 where forums are not yet shared with contacts. We were discussing the following points:
- change the test data creator API to not use a given number of contacts/private chats, but rather allow to pick specific contacts/private chats from the `main` function (effectively "lifting" the DSL up to that level)
- allow cross-references from defined forums to contacts those can be shared with
- support read and sent flags for private messages (and forum posts?) in the DSLMikolai GütschowMikolai Gütschowhttps://code.briarproject.org/briar/public-mesh-research/-/issues/20Investigate whether background location permission is needed for advertising/...2023-08-28T16:03:01ZakwizgranInvestigate whether background location permission is needed for advertising/discoveryFor all APIs that require location permissions (eg BLE, WFD), investigate the effect of starting advertising and discovery in the foreground, then moving the app to the background. Does advertising continue to work without the background...For all APIs that require location permissions (eg BLE, WFD), investigate the effect of starting advertising and discovery in the foreground, then moving the app to the background. Does advertising continue to work without the background location permission? Does discovery still work?
(This is important from a UX point of view because on Android 10, using the background location permission causes a scary "Foo got your location in the background" notification after about 24 hours, which may give the impression that the app is tracking the user.)Public mesh researchpaulpaulhttps://code.briarproject.org/briar/briar/-/issues/2404Animated GIF doesn't play2022-11-30T18:13:08ZTerence EdenAnimated GIF doesn't playI sent an animated .gif file via Bluetooth. It was received as a JPEG and, naturally, didn't play.
GIFs are fun! I'm not asking that the app integrates a GIF search engine. But it shouldn't transcode the media I send.
Briar 1.4.15 for ...I sent an animated .gif file via Bluetooth. It was received as a JPEG and, naturally, didn't play.
GIFs are fun! I'm not asking that the app integrates a GIF search engine. But it shouldn't transcode the media I send.
Briar 1.4.15 for Android.
(If this is the wrong forum for this report, please let me know.)https://code.briarproject.org/briar/briar/-/issues/2401Testers were concerned that Briar showed Mailbox as connected when Mailbox wa...2023-08-28T16:03:27ZakwizgranTesters were concerned that Briar showed Mailbox as connected when Mailbox was offline> Participants were complaining that even when the Mailbox device was offline, on the Briar app it looked like the connection is still working well. There were no indications that the connection is not working. They were expecting to get...> Participants were complaining that even when the Mailbox device was offline, on the Briar app it looked like the connection is still working well. There were no indications that the connection is not working. They were expecting to get a notification on their Briar app device whenever there were any problems with the Mailbox connection.
>
> This was quite concerning to them, they expressed that in everyday use they would never think to manually check the connection and they would always assume that the Mailbox is working unless they get a notification on their Briar device telling them about the problems.
>
> The “Last connection…” indicator wasn’t enough to show them the connection problems. They didn’t know how often Briar automatically check the connection. For example, Mailbox device was disconnected 3 minutes ago but the screen on the Briar app didn’t indicate any problem it just showed the time of the “Last connection: 5 minutes ago”.
Some thoughts about how to address this:
* If the last connection was not very recent (say, more than a minute ago), show a neutral status instead of a successful status, to prompt the user to use the "check connection" button to update the status
* Show some text along the lines of "Briar will automatically check the connection to your Mailbox every hour and notify you if your Mailbox is not reachable", and maybe show when the next check is dueMailbox: Usability testinghttps://code.briarproject.org/briar/briar/-/issues/2399Tester didn't know whether message had been uploaded to Mailbox2023-08-28T16:03:30ZakwizgranTester didn't know whether message had been uploaded to Mailbox> The tester was confused with the process of sending a message while the other contact is offline. He was expecting to get feedback from Briar to know if the message has been saved to Mailbox. He opened the notifications drawer on the B...> The tester was confused with the process of sending a message while the other contact is offline. He was expecting to get feedback from Briar to know if the message has been saved to Mailbox. He opened the notifications drawer on the Briar phone but didn’t find anything, then he checked the Mailbox app but didn’t find feedback there either. While he was waiting, he noticed an hourglass icon near the message and didn’t know what that meant. He thought it indicated a disappearing message. After I asked a follow-up question on how he understands if a message is delivered, he let me know that one checkmark indicates that the message is delivered and two checkmarks that the message is opened.
>
> After the other contact came back online, he noticed that the message was delivered as he saw the checkmarks, but he was wondering if the message was sent directly from the app or if it was transferred by Mailbox and he didn’t find any way to understand this.
Related to #1208.Mailbox: Usability testinghttps://code.briarproject.org/briar/briar/-/issues/2398Testers didn't understand why Mailbox was still linked after failed unlinking2023-08-28T16:03:33ZakwizgranTesters didn't understand why Mailbox was still linked after failed unlinking![unlink-1](/uploads/291b980ba78f2254b8ec690bb77f1850/unlink-1.png) ![unlink-2](/uploads/1279bbd2726de7a3d2adbc3076af895c/unlink-2.png)
> This step was confusing in most cases. Participants ignored the textboxes and when they unlinked t...![unlink-1](/uploads/291b980ba78f2254b8ec690bb77f1850/unlink-1.png) ![unlink-2](/uploads/1279bbd2726de7a3d2adbc3076af895c/unlink-2.png)
> This step was confusing in most cases. Participants ignored the textboxes and when they unlinked the device, the Mailbox still showed that it was linked. In those cases, they thought that this must be happening because of bugs in the test app.Mailbox: Usability testing