briar issueshttps://code.briarproject.org/groups/briar/-/issues2023-05-06T10:38:40Zhttps://code.briarproject.org/briar/briar-desktop/-/issues/501Private groups: Handle incoming messages2023-05-06T10:38:40ZMikolai GütschowPrivate groups: Handle incoming messagesin `eventOccured`
part of #12in `eventOccured`
part of #12Desktop 0.5.0https://code.briarproject.org/briar/briar/-/issues/2419Adding Slovak to language menu2023-03-15T12:28:47ZJozef GaalAdding Slovak to language menuI have completed the translation for the Slovak language.
Can you please add Slovak to the language menu for Android app?I have completed the translation for the Slovak language.
Can you please add Slovak to the language menu for Android app?https://code.briarproject.org/briar/briar/-/issues/2418"Signing out" progress screen is no longer shown when relaunching quickly aft...2023-08-08T01:50:09Zakwizgran"Signing out" progress screen is no longer shown when relaunching quickly after signing outWhen the app was relaunched quickly after signing out, we used to show a progress screen with a "signing out" message to make it clear that the user's previous action was still being processed. But now when I relaunch the app after signi...When the app was relaunched quickly after signing out, we used to show a progress screen with a "signing out" message to make it clear that the user's previous action was still being processed. But now when I relaunch the app after signing out, the UI immediately closes again without letting me see the progress screen. This can happen several times before shutdown completes, so it's not just a race between relaunching the app and shutdown completing.
Tested on Android 13 (CalyxOS 4.6.1).https://code.briarproject.org/briar/briar-mailbox/-/issues/191Dependency verification is brittle2023-03-13T14:20:53ZSebastianDependency verification is brittleFollow-up on #23
There's an upstream Gradle issue (https://github.com/gradle/gradle/issues/19228) that prevents us from just deleting the dependency verification metadata and recreating it using our script `update-dependency-verificatio...Follow-up on #23
There's an upstream Gradle issue (https://github.com/gradle/gradle/issues/19228) that prevents us from just deleting the dependency verification metadata and recreating it using our script `update-dependency-verification.sh`.
A possible workaround is to set `GRADLE_USER_HOME` to a temporary directory while executing the commands in the script.SebastianSebastianhttps://code.briarproject.org/briar/briar-desktop/-/issues/500Build of project including briar fails on JDK 172023-02-27T10:52:13ZSebastianBuild of project including briar fails on JDK 17When running not just `./gradlew briar-desktop:test` but `./gradlew test` with JDK 17, then Gradle also runs the briar tests, which currently fails with `PollerImplTest` (and also a few others):
```
Unable to make protected java.securit...When running not just `./gradlew briar-desktop:test` but `./gradlew test` with JDK 17, then Gradle also runs the briar tests, which currently fails with `PollerImplTest` (and also a few others):
```
Unable to make protected java.security.SecureRandom(java.security.SecureRandomSpi,java.security.Provider) accessible: module java.base does not "opens java.security" to unnamed module @498d318c
java.lang.reflect.InaccessibleObjectException: Unable to make protected java.security.SecureRandom(java.security.SecureRandomSpi,java.security.Provider) accessible: module java.base does not "opens java.security" to unnamed module @498d318c
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:354)
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297)
at java.base/java.lang.reflect.Constructor.checkCanSetAccessible(Constructor.java:188)
at java.base/java.lang.reflect.Constructor.setAccessible(Constructor.java:181)
at org.jmock.imposters.ByteBuddyClassImposteriser.setConstructorsAccessible(ByteBuddyClassImposteriser.java:86)
at org.jmock.imposters.ByteBuddyClassImposteriser.imposterise(ByteBuddyClassImposteriser.java:65)
at org.jmock.Mockery.mock(Mockery.java:167)
at org.jmock.Mockery.mock(Mockery.java:143)
at org.briarproject.bramble.plugin.PollerImplTest.<init>(PollerImplTest.java:71)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)
at org.junit.runners.BlockJUnit4ClassRunner.createTest(BlockJUnit4ClassRunner.java:250)
at org.junit.runners.BlockJUnit4ClassRunner.createTest(BlockJUnit4ClassRunner.java:260)
at org.junit.runners.BlockJUnit4ClassRunner$2.runReflectiveCall(BlockJUnit4ClassRunner.java:309)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.BlockJUnit4ClassRunner.methodBlock(BlockJUnit4ClassRunner.java:306)
at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)
at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.runTestClass(JUnitTestClassExecutor.java:110)
at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:58)
at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:38)
at org.gradle.api.internal.tasks.testing.junit.AbstractJUnitTestClassProcessor.processTestClass(AbstractJUnitTestClassProcessor.java:62)
at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)
at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94)
at jdk.proxy1/jdk.proxy1.$Proxy2.processTestClass(Unknown Source)
at org.gradle.api.internal.tasks.testing.worker.TestWorker$2.run(TestWorker.java:176)
at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:129)
at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:100)
at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:60)
at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56)
at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:133)
at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71)
at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69)
at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74)
```
I had a hunch that this was the reason we had the various `--add-opens` flags in `gradle.properties` which I removed in 3451ae6554970dd6dece962a4 because I did not see any reason to keep them. Adding them back however does not seem to solve this. Adding `--add-opens=java.base/java.security=ALL-UNNAMED` which seems to be what the error suggests could help, also does not.https://code.briarproject.org/briar/briar-desktop/-/issues/499Private groups: Reveal contact logic2023-06-26T13:31:12ZMikolai GütschowPrivate groups: Reveal contact logicWe decided to down-prioritize this functionality for the initial private group release, but we probably still have to think about what needs to be handled in case a contact on an Android phone reveals a group with a Desktop account.
par...We decided to down-prioritize this functionality for the initial private group release, but we probably still have to think about what needs to be handled in case a contact on an Android phone reveals a group with a Desktop account.
part of #12https://code.briarproject.org/briar/briar-desktop/-/issues/498Private groups: special handling for join messages2023-04-15T18:26:14ZMikolai GütschowPrivate groups: special handling for join messages- show italicized text describing join action instead of empty message
- don't allow selecting/replying to join message
part of #12- show italicized text describing join action instead of empty message
- don't allow selecting/replying to join message
part of #12Desktop 0.5.0https://code.briarproject.org/briar/briar-desktop/-/issues/497Private groups: Leave group vs. Dissolve group logic2023-05-09T13:36:15ZMikolai GütschowPrivate groups: Leave group vs. Dissolve group logicCreator "leaving" the group means dissolving the group
Part of #12Creator "leaving" the group means dissolving the group
Part of #12Desktop 0.5.0https://code.briarproject.org/briar/briar-desktop/-/issues/496Private groups: Invite members logic2023-05-12T21:09:46ZMikolai GütschowPrivate groups: Invite members logiconly possible for group creator
part of #12only possible for group creator
part of #12Desktop 0.5.0Mikolai GütschowMikolai Gütschowhttps://code.briarproject.org/briar/briar-desktop/-/issues/495Private groups: Member list2023-04-15T18:17:53ZMikolai GütschowPrivate groups: Member listPart of #12Part of #12Desktop 0.5.0https://code.briarproject.org/briar/briar-desktop/-/issues/494Private groups: Show creator in group list2023-05-12T12:49:17ZMikolai GütschowPrivate groups: Show creator in group listOn Android, the group list shows information about the creator of the group.
Part of #12On Android, the group list shows information about the creator of the group.
Part of #12Desktop 0.5.0Mikolai GütschowMikolai Gütschowhttps://code.briarproject.org/briar/briar/-/issues/2417Add ability to mark private message / groups / forums as read2023-11-06T19:49:17Zre tiolusAdd ability to mark private message / groups / forums as readEx: When joining a forum with over 1000 posts, it is horrible to have to manually scroll to the last post. It would be necessary to add an option to mark conversations as read.Ex: When joining a forum with over 1000 posts, it is horrible to have to manually scroll to the last post. It would be necessary to add an option to mark conversations as read.https://code.briarproject.org/briar/briar-desktop/-/issues/493UI scale slider does not update underlying setting when changing using keyboard2023-02-25T10:28:31ZSebastianUI scale slider does not update underlying setting when changing using keyboardI can navigate to the UI scale slider using tab and change the slider position, however it does not cause an update to our settings.
It looks like the slider reports onValueChange events but no onValueChangeFinished event.
I think this...I can navigate to the UI scale slider using tab and change the slider position, however it does not cause an update to our settings.
It looks like the slider reports onValueChange events but no onValueChangeFinished event.
I think this should be solved on the Compose side and filed an issue there: https://github.com/JetBrains/compose-jb/issues/2798https://code.briarproject.org/briar/briar/-/issues/2416F-Droid shows a warning about Briar2023-02-23T14:10:00ZMarek KütheF-Droid shows a warning about BriarHello,
F-Droid tells me that Briar contains a security vulnerability and that I should uninstall Briar. Is this a false positive? If no, is it possible to remove this security hole?
![warn1](/uploads/3d76dde9c8050a84858e3193b4eb42fa/wa...Hello,
F-Droid tells me that Briar contains a security vulnerability and that I should uninstall Briar. Is this a false positive? If no, is it possible to remove this security hole?
![warn1](/uploads/3d76dde9c8050a84858e3193b4eb42fa/warn1.png)
![warn2](/uploads/5bf79a4aaef41049a0cc30e2cd168a67/warn2.png)https://code.briarproject.org/briar/briar-desktop/-/issues/492Private messages scroll to top when switching conversations2023-03-12T20:14:24ZSebastianPrivate messages scroll to top when switching conversationsA user gave this feedback for version 0.4.0 on Windows.A user gave this feedback for version 0.4.0 on Windows.https://code.briarproject.org/briar/briar-desktop/-/issues/491Settings screen should be scrollable2023-02-22T11:30:59ZSebastianSettings screen should be scrollableI noticed while testing !226 with a maximum UI scale factor and without the minimum size of the window being reset, that the settings screen gets cramped towards the lower end. Making it scrollable is probably a good idea anyway.I noticed while testing !226 with a maximum UI scale factor and without the minimum size of the window being reset, that the settings screen gets cramped towards the lower end. Making it scrollable is probably a good idea anyway.https://code.briarproject.org/briar/briar-mailbox/-/issues/190Pairing issue: Jackson 2.14.x can't serialize on Android < 8 (SDK 26)2023-08-28T16:00:11ZTorsten GrotePairing issue: Jackson 2.14.x can't serialize on Android < 8 (SDK 26)ktor-serialization-jackson 2.2.3 depends on jackson-databind 2.14.1. but jackson 2.14 has dropped support for android < 26
upstream ticket: https://youtrack.jetbrains.com/issue/KTOR-5579/Jackson-serialization-is-broken-on-older-Android-...ktor-serialization-jackson 2.2.3 depends on jackson-databind 2.14.1. but jackson 2.14 has dropped support for android < 26
upstream ticket: https://youtrack.jetbrains.com/issue/KTOR-5579/Jackson-serialization-is-broken-on-older-Android-devices
downgrading ktor to 2.1.3 would give us a temporary workaround, if needed
https://github.com/ktorio/ktor/blob/2.1.3/gradle/libs.versions.toml
forcing a jackson version without downgrading ktor may also work.
other serialization options: https://ktor.io/docs/serialization.html#register_jsonMailbox: Releasehttps://code.briarproject.org/briar/briar/-/issues/2415NPE in TimeoutInputStream2023-02-21T13:44:15ZakwizgranNPE in TimeoutInputStream* Android version: 10
* Briar version: 1.4.20 (6b20b03)
* Phone model: SPRD ums512_1h10_Natv
Stacktrace:
```
java.lang.NullPointerException: Attempt to invoke virtual method 'int java.io.InputStream.read(byte[], int, int)' on a null obj...* Android version: 10
* Briar version: 1.4.20 (6b20b03)
* Phone model: SPRD ums512_1h10_Natv
Stacktrace:
```
java.lang.NullPointerException: Attempt to invoke virtual method 'int java.io.InputStream.read(byte[], int, int)' on a null object reference
at org.briarproject.bramble.io.TimeoutInputStream.read(TimeoutInputStream.java:52)
at org.briarproject.bramble.util.IoUtils.read(IoUtils.java:95)
at org.briarproject.bramble.connection.Connection.readTag(Connection.java:59)
at org.briarproject.bramble.connection.Connection.recogniseTag(Connection.java:49)
at org.briarproject.bramble.connection.IncomingDuplexSyncConnection.run(IncomingDuplexSyncConnection.java:44)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:919)
```
Edited log:
```
02-16 17:40:19.815 I/BaseActivity: Pausing ConversationActivity
02-16 17:40:19.842 I/BaseActivity: Creating ConnectViaBluetoothActivity
02-16 17:40:19.870 I/BaseActivity: Starting ConnectViaBluetoothActivity
02-16 17:40:19.872 I/BaseActivity: Resuming ConnectViaBluetoothActivity
02-16 17:40:20.349 I/BaseActivity: Stopping ConversationActivity
02-16 17:40:22.536 I/BaseActivity: Pausing ConnectViaBluetoothActivity
02-16 17:40:22.679 I/BaseActivity: Resuming ConnectViaBluetoothActivity
02-16 17:40:22.690 I/BaseActivity: Pausing ConnectViaBluetoothActivity
02-16 17:40:22.781 I/AndroidBluetoothPlugin: Scan mode: Discoverable
02-16 17:40:22.822 I/BluetoothConnectionLimiterImpl: Limiting started
02-16 17:40:22.833 I/BaseActivity: Resuming ConnectViaBluetoothActivity
02-16 17:40:22.873 I/AndroidBluetoothPlugin: Discovery started
02-16 17:40:25.153 I/BaseActivity: Pausing ConnectViaBluetoothActivity
02-16 17:40:25.310 I/BaseActivity: Resuming ConnectViaBluetoothActivity
02-16 17:40:31.235 I/PollerImpl: Polling plugin org.briarproject.bramble.bluetooth
02-16 17:40:31.239 I/ConnectionRegistryImpl: 0 contacts connected or better: org.briarproject.bramble.bluetooth
02-16 17:40:31.239 I/BluetoothConnectionLimiterImpl: Can't open contact connection while limiting
02-16 17:40:32.850 I/AndroidBluetoothPlugin: Cancelling discovery
02-16 17:40:32.853 I/AndroidBluetoothPlugin: Could not connect to any devices
02-16 17:40:37.857 W/ConnectViaBluetoothViewModel: Failed to connect
02-16 17:40:37.858 I/BluetoothConnectionLimiterImpl: Limiting ended
02-16 17:40:37.894 I/BaseActivity: Pausing ConnectViaBluetoothActivity
02-16 17:40:37.935 I/BaseActivity: Starting ConversationActivity
02-16 17:40:37.938 I/BaseActivity: Resuming ConversationActivity
02-16 17:40:38.418 I/BaseActivity: Stopping ConnectViaBluetoothActivity
02-16 17:40:38.422 I/BaseActivity: Destroying ConnectViaBluetoothActivity
02-16 17:40:43.489 I/BaseActivity: Pausing ConversationActivity
02-16 17:40:43.516 I/BaseActivity: Creating ConnectViaBluetoothActivity
02-16 17:40:43.536 I/BaseActivity: Starting ConnectViaBluetoothActivity
02-16 17:40:43.538 I/BaseActivity: Resuming ConnectViaBluetoothActivity
02-16 17:40:44.003 I/BaseActivity: Stopping ConversationActivity
02-16 17:40:44.794 I/BaseActivity: Pausing ConnectViaBluetoothActivity
02-16 17:40:44.824 I/AndroidBluetoothPlugin: Scan mode: Discoverable
02-16 17:40:44.828 I/BluetoothConnectionLimiterImpl: Limiting started
02-16 17:40:44.836 I/BaseActivity: Resuming ConnectViaBluetoothActivity
02-16 17:40:44.879 I/AndroidBluetoothPlugin: Discovery started
02-16 17:40:47.692 I/AndroidBluetoothPlugin: Discovered AC:[scrubbed]:72
02-16 17:40:50.144 I/AndroidBluetoothPlugin: Discovered 30:[scrubbed]:50
02-16 17:40:51.531 I/AndroidBluetoothPlugin: Discovered AC:[scrubbed]:72
02-16 17:40:52.154 I/AndroidBluetoothPlugin: Discovered AC:[scrubbed]:72
02-16 17:40:52.890 I/AndroidBluetoothPlugin: Discovered CC:[scrubbed]:85
02-16 17:40:53.437 I/AndroidBluetoothPlugin: Discovered CC:[scrubbed]:85
02-16 17:40:54.092 I/AndroidBluetoothPlugin: Discovered AC:[scrubbed]:72
02-16 17:40:54.844 I/AndroidBluetoothPlugin: Cancelling discovery
02-16 17:40:54.848 I/AndroidBluetoothPlugin: Connecting to 30:[scrubbed]:50
02-16 17:40:54.850 I/BluetoothConnectionLimiterImpl: Connection opened, 1 open
02-16 17:40:54.850 I/ConnectViaBluetoothViewModel: Could connect, handling connection
02-16 17:40:54.850 I/BluetoothConnectionLimiterImpl: Limiting ended
02-16 17:40:54.867 I/DuplexOutgoingSession: Generated ack: false
02-16 17:40:54.878 I/DuplexOutgoingSession: Generated batch: false
02-16 17:40:54.880 I/DuplexOutgoingSession: Generated offer: false
02-16 17:40:54.881 I/DuplexOutgoingSession: Generated request: false
02-16 17:40:54.882 I/BaseActivity: Pausing ConnectViaBluetoothActivity
02-16 17:40:54.925 I/BaseActivity: Starting ConversationActivity
02-16 17:40:54.929 I/BaseActivity: Resuming ConversationActivity
02-16 17:40:55.410 I/BaseActivity: Stopping ConnectViaBluetoothActivity
02-16 17:40:55.413 I/BaseActivity: Destroying ConnectViaBluetoothActivity
02-16 17:41:01.986 I/AbstractBluetoothPlugin: Connection received
02-16 17:41:01.986 I/BluetoothConnectionLimiterImpl: Connection opened, 2 open
```
As far as I can tell, this device is the head unit in a car.
The log shows an outgoing Bluetooth connection being made, then an incoming connection being received. Perhaps the Bluetooth stack doesn't support multiple connections (or doesn't support incoming and outgoing connections with the same device). In any case, BluetoothSocket#getInputStream() returns null for the second connection. We should check this (and also for the output stream) and throw an IOException rather than crashing.Android 1.4akwizgranakwizgranhttps://code.briarproject.org/briar/briar-desktop/-/issues/490Increase maximum size for images on hidpi devices2023-02-18T14:12:30ZSebastianIncrease maximum size for images on hidpi deviceshttps://code.briarproject.org/briar/briar-desktop/-/issues/489Improve UI previews on high density devices2023-02-18T11:40:23ZSebastianImprove UI previews on high density devicesThe following discussion from !226 should be addressed:
- [ ] @sebkur started a [discussion](https://code.briarproject.org/briar/briar-desktop/-/merge_requests/226#note_68296): (+3 comments)
> I'm also using the setting here to sc...The following discussion from !226 should be addressed:
- [ ] @sebkur started a [discussion](https://code.briarproject.org/briar/briar-desktop/-/merge_requests/226#note_68296): (+3 comments)
> I'm also using the setting here to scale up the preview screens, otherwise they're also very tiny on the testing device.