briar issueshttps://code.briarproject.org/briar/briar/-/issues2024-02-01T10:45:41Zhttps://code.briarproject.org/briar/briar/-/issues/2456Wich ports does the LanTcpPlugin use?2024-02-01T10:45:41ZJack oggWich ports does the LanTcpPlugin use?We are working on a Project to send Briar Messages through a LoRa Network and we used the `LanTcpPlugin` as a reference for our own LoRa Plugin How does Briar know wich port it should use to send a message via WiFi? We have two devices (...We are working on a Project to send Briar Messages through a LoRa Network and we used the `LanTcpPlugin` as a reference for our own LoRa Plugin How does Briar know wich port it should use to send a message via WiFi? We have two devices (Honor 6X). We figured out that one has `53099` as preferred port, the other has `55244` (in `org/briarproject/bramble/plugin/tcp/LanTcpPlugin.java`). But how do they agree on these ports?https://code.briarproject.org/briar/briar/-/issues/2448Briar prompts for Bluetooth permission when toggling Tor connectivity2023-09-28T16:06:06ZakwizgranBriar prompts for Bluetooth permission when toggling Tor connectivity* Android version: 12
* Phone model: Samsung Galaxy A21s
* Briar version: 1.5.7 debug (6ae601e39588b47f157799c2e5a813786b56c3d8)
Steps to reproduce:
* Start from a fresh install (no Bluetooth permissions granted)
* Tap globe icon in nav...* Android version: 12
* Phone model: Samsung Galaxy A21s
* Briar version: 1.5.7 debug (6ae601e39588b47f157799c2e5a813786b56c3d8)
Steps to reproduce:
* Start from a fresh install (no Bluetooth permissions granted)
* Tap globe icon in nav menu to open connections screen
* Turn Tor connections off
* Turn Tor connections on again
Also happens when toggling wifi connections.https://code.briarproject.org/briar/briar/-/issues/2444ActivityNotFoundException for CHOOSER intent when adding contact remotely2023-09-06T15:36:50ZakwizgranActivityNotFoundException for CHOOSER intent when adding contact remotely* Android version: 14
* Phone model: Google Pixel 6
* Briar version: 1.5.4 (7d76171)
Stacktrace:
```
android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.CHOOSER (has extras) }
...* Android version: 14
* Phone model: Google Pixel 6
* Briar version: 1.5.4 (7d76171)
Stacktrace:
```
android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.CHOOSER (has extras) }
at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:2239)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1878)
at android.app.Activity.startActivityForResult(Activity.java:5589)
at androidx.activity.ComponentActivity.startActivityForResult(ComponentActivity.java:712)
at android.app.Activity.startActivityForResult(Activity.java:5547)
at androidx.activity.ComponentActivity.startActivityForResult(ComponentActivity.java:693)
at android.app.Activity.startActivity(Activity.java:6045)
at android.app.Activity.startActivity(Activity.java:6012)
at androidx.core.app.ShareCompat$IntentBuilder.startChooser(ShareCompat.java:436)
at org.briarproject.briar.android.contact.add.remote.LinkExchangeFragment.lambda$onHandshakeLinkLoaded$2(LinkExchangeFragment.java:123)
at org.briarproject.briar.android.contact.add.remote.LinkExchangeFragment.$r8$lambda$rc2OESX5RIoUPUdisIlqrX1uomc(Unknown Source:0)
at org.briarproject.briar.android.contact.add.remote.LinkExchangeFragment$$ExternalSyntheticLambda3.onClick(Unknown Source:4)
at android.view.View.performClick(View.java:7659)
at android.view.View.performClickInternal(View.java:7636)
at android.view.View.-$$Nest$mperformClickInternal(Unknown Source:0)
at android.view.View$PerformClick.run(View.java:30155)
at android.os.Handler.handleCallback(Handler.java:958)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:205)
at android.os.Looper.loop(Looper.java:294)
at android.app.ActivityThread.main(ActivityThread.java:8176)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:552)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:971)
```
Puzzling, but easy to catch.Android 1.4https://code.briarproject.org/briar/briar/-/issues/2434IllegalArgumentException when pairing mailbox2023-05-31T16:58:06ZakwizgranIllegalArgumentException when pairing mailbox* Android version: 11
* Phone model: Xiaomi Redmi Not 6 Pro (lineage_twolip)
* Briar version: 1.5.3 (1f1a97f)
Stacktrace:
```
java.lang.IllegalArgumentException: Invalid URL host: \"[scrubbed].onion\"
at okhttp3.HttpUrl$Builder....* Android version: 11
* Phone model: Xiaomi Redmi Not 6 Pro (lineage_twolip)
* Briar version: 1.5.3 (1f1a97f)
Stacktrace:
```
java.lang.IllegalArgumentException: Invalid URL host: \"[scrubbed].onion\"
at okhttp3.HttpUrl$Builder.parse$okhttp(HttpUrl.kt:1338)
at okhttp3.HttpUrl$Companion.get(HttpUrl.kt:1634)
at okhttp3.Request$Builder.url(Request.kt:184)
at org.briarproject.bramble.mailbox.MailboxApiImpl.setup(MailboxApiImpl.java:85)
at org.briarproject.bramble.mailbox.MailboxPairingTaskImpl.pairMailbox(MailboxPairingTaskImpl.java:140)
at org.briarproject.bramble.mailbox.MailboxPairingTaskImpl.run(MailboxPairingTaskImpl.java:125)
at org.briarproject.bramble.mailbox.MailboxManagerImpl.lambda$startPairingTask$0(MailboxManagerImpl.java:97)
at org.briarproject.bramble.mailbox.MailboxManagerImpl.$r8$lambda$OqqL4NbxBrCG5gMD-GnzDqowbVk(Unknown Source:0)
at org.briarproject.bramble.mailbox.MailboxManagerImpl$$ExternalSyntheticLambda0.run(Unknown Source:4)
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:923)
```
I've scrubbed the hostname for privacy, but it was 56 valid-looking chars.
Last lines of log:
```
05-26 22:34:31.304 I/CameraView: Starting preview
05-26 22:34:33.480 I/MailboxViewModel: Got result from decoder
05-26 22:34:33.482 I/MailboxPairingTaskImpl: QR code is valid
05-26 22:34:33.482 I/MailboxViewModel: New pairing state: QrCodeReceived
05-26 22:34:33.484 I/CameraView: Stopping preview
```Mailbox: Releasehttps://code.briarproject.org/briar/briar/-/issues/2429SecurityException: Permission Denial for CLOSE_SYSTEM_DIALOGS2023-04-18T15:39:33ZakwizgranSecurityException: Permission Denial for CLOSE_SYSTEM_DIALOGS* Android version: 12
* Phone model: Google Pixel 3 XL (crosshatch)
* Briar version: 1.4.23 (070165f)
* User feedback: "I wrote a message, then Briar shut down. This also happens frequently to other apps."
Stacktrace:
```
java.lang.Secu...* Android version: 12
* Phone model: Google Pixel 3 XL (crosshatch)
* Briar version: 1.4.23 (070165f)
* User feedback: "I wrote a message, then Briar shut down. This also happens frequently to other apps."
Stacktrace:
```
java.lang.SecurityException: Permission Denial: android.intent.action.CLOSE_SYSTEM_DIALOGS broadcast from org.briarproject.briar.android (pid=24174, uid=10004) requires android.permission.BROADCAST_CLOSE_SYSTEM_DIALOGS.
at android.os.Parcel.createExceptionOrNull(Parcel.java:2425)
at android.os.Parcel.createException(Parcel.java:2409)
at android.os.Parcel.readException(Parcel.java:2392)
at android.os.Parcel.readException(Parcel.java:2334)
at android.app.IActivityManager$Stub$Proxy.closeSystemDialogs(IActivityManager.java:7614)
at com.android.internal.policy.PhoneWindow.sendCloseSystemWindows(PhoneWindow.java:3791)
at com.android.internal.policy.PhoneFallbackEventHandler.sendCloseSystemWindows(PhoneFallbackEventHandler.java:323)
at com.android.internal.policy.PhoneFallbackEventHandler.startCallActivity(PhoneFallbackEventHandler.java:275)
at com.android.internal.policy.PhoneFallbackEventHandler.onKeyUp(PhoneFallbackEventHandler.java:261)
at com.android.internal.policy.PhoneFallbackEventHandler.dispatchKeyEvent(PhoneFallbackEventHandler.java:76)
at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:6317)
at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:6141)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5623)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5680)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5646)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:5811)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5654)
at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:5868)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5627)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5680)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5646)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5654)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5627)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5680)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5646)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:5844)
at android.view.ViewRootImpl$ImeInputStage.onFinishedInputEvent(ViewRootImpl.java:6002)
at android.view.inputmethod.InputMethodManager$PendingEvent.run(InputMethodManager.java:3158)
at android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback(InputMethodManager.java:2722)
at android.view.inputmethod.InputMethodManager.finishedInputEvent(InputMethodManager.java:2713)
at android.view.inputmethod.InputMethodManager$ImeInputEventSender.onInputEventFinished(InputMethodManager.java:3135)
at android.view.InputEventSender.dispatchInputEventFinished(InputEventSender.java:154)
at android.os.MessageQueue.nativePollOnce(Native Method)
at android.os.MessageQueue.next(MessageQueue.java:335)
at android.os.Looper.loopOnce(Looper.java:161)
at android.os.Looper.loop(Looper.java:288)
at android.app.ActivityThread.main(ActivityThread.java:7842)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
Caused by: android.os.RemoteException: Remote stack trace:
at com.android.server.wm.ActivityTaskManagerService.checkCanCloseSystemDialogs(ActivityTaskManagerService.java:2955)
at com.android.server.wm.ActivityTaskManagerService.access$900(ActivityTaskManagerService.java:294)
at com.android.server.wm.ActivityTaskManagerService$LocalService.checkCanCloseSystemDialogs(ActivityTaskManagerService.java:5309)
at com.android.server.wm.ActivityTaskManagerService$LocalService.closeSystemDialogs(ActivityTaskManagerService.java:5783)
at com.android.server.am.ActivityManagerService.closeSystemDialogs(ActivityManagerService.java:3800)
```
Edited log:
```
04-02 10:16:30.039 I/BaseActivity: Starting ConversationActivity
04-02 10:16:30.041 I/BaseActivity: Resuming ConversationActivity
04-02 10:16:32.999 I/AutoDeleteManagerImpl: Sending message with auto-delete timer 604800000
04-02 10:16:33.045 I/DuplexOutgoingSession: Next send time decreased
04-02 10:16:33.052 I/DuplexOutgoingSession: Generated offer: true
04-02 10:16:33.052 I/DuplexOutgoingSession: Sent offer
04-02 10:16:33.061 I/DuplexOutgoingSession: Generated offer: false
04-02 10:16:33.495 I/DuplexOutgoingSession: Generated batch: true
04-02 10:16:33.495 I/ConversationActivity: Messages sent
04-02 10:16:33.495 I/DuplexOutgoingSession: Sent batch
04-02 10:16:33.504 I/DuplexOutgoingSession: Generated batch: false
04-02 10:16:34.069 I/ConversationActivity: Messages acked
04-02 10:16:42.127 I/DuplexOutgoingSession: Generated request: true
04-02 10:16:42.127 I/DuplexOutgoingSession: Sent request
04-02 10:16:42.128 I/DuplexOutgoingSession: Generated request: false
04-02 10:16:42.743 I/ValidationManagerImpl: Validating message for org.briarproject.briar.messaging
04-02 10:16:42.761 I/DuplexOutgoingSession: Generated ack: true
04-02 10:16:42.762 I/DuplexOutgoingSession: Sent ack
04-02 10:16:42.768 I/ValidationManagerImpl: Delivering message for org.briarproject.briar.messaging
04-02 10:16:42.770 I/AutoDeleteManagerImpl: Mirroring auto-delete timer 604800000
04-02 10:16:42.786 I/ConversationActivity: Message received, adding
04-02 10:16:42.791 I/DuplexOutgoingSession: Generated ack: false
04-02 10:17:12.763 I/DuplexOutgoingSession: Sending keepalive
04-02 10:17:33.484 I/DuplexOutgoingSession: Checking for retransmittable messages
04-02 10:17:33.514 I/DuplexOutgoingSession: Generated batch: false
04-02 10:17:33.520 I/DuplexOutgoingSession: Generated offer: false
```
As far as I can tell, the crash happens because `PhoneFallbackEventHandler` is being called to [handle a key event](https://cs.android.com/android/platform/superproject/+/master:frameworks/base/core/java/com/android/internal/policy/PhoneFallbackEventHandler.java;drc=95c1165bb895dd844e1793460710f7163dd330a3;l=250) for `KEYCODE_CALL`. The handler tries to start a call activity for the current app, which fails because Briar doesn't have permission to close system dialogs (which I guess is part of the process of launching the call activity).
So perhaps this is happening just because the user hits the call button on their device/keyboard, or perhaps it also requires some other circumstances, like an unusual device/keyboard config. Either way, it looks like a problem that's specific to this user and (based on their comment) not specific to Briar.https://code.briarproject.org/briar/briar/-/issues/2420SecurityException when requesting Bluetooth discoverability2024-03-19T11:28:53ZakwizgranSecurityException when requesting Bluetooth discoverability* Android version: 12
* Phone model: Nubia NX679J (NX679J-UN)
* Briar version: 1.4.22 (f02bbeb)
* User feedback: "Attempting to add contact."
Stacktrace:
```
java.lang.SecurityException: Permission Denial: starting Intent { act=android....* Android version: 12
* Phone model: Nubia NX679J (NX679J-UN)
* Briar version: 1.4.22 (f02bbeb)
* User feedback: "Attempting to add contact."
Stacktrace:
```
java.lang.SecurityException: Permission Denial: starting Intent { act=android.bluetooth.adapter.action.REQUEST_DISCOVERABLE cmp=com.android.settings/.bluetooth.RequestPermissionActivity (has extras) } from ProcessRecord{708319 15100:org.b
riarproject.briar.android/u0a226} (pid=15100, uid=10226) requires android.permission.BLUETOOTH
at android.os.Parcel.createExceptionOrNull(Parcel.java:2426)
at android.os.Parcel.createException(Parcel.java:2410)
at android.os.Parcel.readException(Parcel.java:2393)
at android.os.Parcel.readException(Parcel.java:2335)
at android.app.IActivityTaskManager$Stub$Proxy.startActivity(IActivityTaskManager.java:2559)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:2071)
at android.app.Activity.startActivityForResult(Activity.java:5574)
at androidx.activity.ComponentActivity.startActivityForResult(ComponentActivity.java:574)
at androidx.core.app.ActivityCompat.startActivityForResult(ActivityCompat.java:234)
at androidx.activity.ComponentActivity$2.onLaunch(ComponentActivity.java:208)
at androidx.activity.result.ActivityResultRegistry$2.launch(ActivityResultRegistry.java:166)
at androidx.activity.result.ActivityResultLauncher.launch(ActivityResultLauncher.java:47)
at org.briarproject.briar.android.contact.add.nearby.AddNearbyContactActivity.requestBluetoothDiscoverable(AddNearbyContactActivity.java:125)
at org.briarproject.briar.android.contact.add.nearby.AddNearbyContactActivity.lambda$onCreate$0(AddNearbyContactActivity.java:78)
at org.briarproject.briar.android.contact.add.nearby.AddNearbyContactActivity.$r8$lambda$AaDmrglLROf2UvjD046fjtdaWVs(Unknown Source:0)
at org.briarproject.briar.android.contact.add.nearby.AddNearbyContactActivity$$ExternalSyntheticLambda2.onEvent(Unknown Source:4)
at org.briarproject.briar.android.viewmodel.LiveEvent$LiveEventObserver.onChanged(LiveEvent.java:84)
at org.briarproject.briar.android.viewmodel.LiveEvent$LiveEventObserver.onChanged(LiveEvent.java:70)
at androidx.lifecycle.LiveData.considerNotify(LiveData.java:133)
at androidx.lifecycle.LiveData.dispatchingValue(LiveData.java:151)
at androidx.lifecycle.LiveData.setValue(LiveData.java:309)
at org.briarproject.briar.android.viewmodel.MutableLiveEvent.setEvent(MutableLiveEvent.java:29)
at org.briarproject.briar.android.contact.add.nearby.AddNearbyContactViewModel.showQrCodeFragmentIfAllowed(AddNearbyContactViewModel.java:410)
at org.briarproject.briar.android.contact.add.nearby.AddNearbyContactIntroFragment.lambda$new$0(AddNearbyContactIntroFragment.java:38)
at org.briarproject.briar.android.contact.add.nearby.AddNearbyContactIntroFragment.$r8$lambda$O-WIAJRYMQrkvddeOqSFkFHjtQ0(Unknown Source:0)
at org.briarproject.briar.android.contact.add.nearby.AddNearbyContactIntroFragment$$ExternalSyntheticLambda1.onActivityResult(Unknown Source:4)
at androidx.activity.result.ActivityResultRegistry.dispatchResult(ActivityResultRegistry.java:367)
at androidx.activity.ComponentActivity$2$1.run(ComponentActivity.java:159)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:242)
at android.os.Looper.loop(Looper.java:374)
at android.app.ActivityThread.main(ActivityThread.java:9333)
at java.lang.reflect.Method.invoke(Native Method)
```
Last line of log:
```
03-03 00:28:17.358 I/AddNearbyContactActivity: Asking for Bluetooth discoverability
```
Looks like another manufacturer that didn't completely remove the old Bluetooth permission checks when migrating to the new Android 12 permissions.Android 1.4akwizgranakwizgranhttps://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/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/-/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/-/issues/2414Links not clickable in Blogs2023-02-26T08:10:34Zre tiolusLinks not clickable in BlogsIn the latest 1.4.20 version, support for clickable links was implemented (!1757), but that doesn't seem to work on Blogs.In the latest 1.4.20 version, support for clickable links was implemented (!1757), but that doesn't seem to work on Blogs.https://code.briarproject.org/briar/briar/-/issues/2412Research UWB integration2023-03-15T12:30:45ZVladislavResearch UWB integrationResearch possibility of integration Ultra-Wideband technology.
Find out its strengths and the opportunities it can provide.
Possibilities of combining Bluetooth and UWB.Research possibility of integration Ultra-Wideband technology.
Find out its strengths and the opportunities it can provide.
Possibilities of combining Bluetooth and UWB.https://code.briarproject.org/briar/briar/-/issues/2410Crash when adding a contact at a distance due to missing BLUETOOTH_CONNECT pe...2023-05-29T11:41:22ZKatelyn DickeyCrash when adding a contact at a distance due to missing BLUETOOTH_CONNECT permissionThis error is avoided by having the "Nearby devices" permission.
The "Add contact nearby" flow asks for this permission, but at a distance does not, while apparently still needing the permission.
1. Have the "Nearby devices" permission ...This error is avoided by having the "Nearby devices" permission.
The "Add contact nearby" flow asks for this permission, but at a distance does not, while apparently still needing the permission.
1. Have the "Nearby devices" permission disallowed
2. Add a contact at a distance
3. Exchange keys
4. After contact is added, wait a few seconds and the app will crash
```
Need android.permission.BLUETOOTH_CONNECT permission for android.content.AttributionSource@163e09fc: getAddress
java.lang.SecurityException: Need android.permission.BLUETOOTH_CONNECT permission for android.content.AttributionSource@163e09fc: getAddress
at android.os.Parcel.createExceptionOrNull(Parcel.java:3011)
at android.os.Parcel.createException(Parcel.java:2995)
at android.os.Parcel.readException(Parcel.java:2978)
at android.os.Parcel.readException(Parcel.java:2920)
at android.bluetooth.IBluetoothManager$Stub$Proxy.getAddress(IBluetoothManager.java:534)
at android.bluetooth.BluetoothAdapter.getAddress(BluetoothAdapter.java:1534)
at org.briarproject.bramble.util.AndroidUtils.getBluetoothAddressAndMethod(AndroidUtils.java:70)
at org.briarproject.bramble.util.AndroidUtils.getBluetoothAddress(AndroidUtils.java:63)
at org.briarproject.bramble.plugin.bluetooth.AndroidBluetoothPlugin.getBluetoothAddress(AndroidBluetoothPlugin.java:146)
at org.briarproject.bramble.plugin.bluetooth.AbstractBluetoothPlugin.updateProperties(AbstractBluetoothPlugin.java:239)
at org.briarproject.bramble.plugin.bluetooth.AbstractBluetoothPlugin.$r8$lambda$ZdCFKGKAr5elvl5L48zy5sncMIA(Unknown Source:0)
at org.briarproject.bramble.plugin.bluetooth.AbstractBluetoothPlugin$$ExternalSyntheticLambda2.run(Unknown Source:2)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1137)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637)
at java.lang.Thread.run(Thread.java:1012)
Caused by: android.os.RemoteException: Remote stack trace:
at com.android.server.bluetooth.BluetoothManagerService.checkPermissionForDataDelivery(BluetoothManagerService.java:3239)
at com.android.server.bluetooth.BluetoothManagerService.checkConnectPermissionForDataDelivery(BluetoothManagerService.java:3257)
at com.android.server.bluetooth.BluetoothManagerService.getAddress(BluetoothManagerService.java:1908)
at android.bluetooth.IBluetoothManager$Stub.onTransact(IBluetoothManager.java:246)
at android.os.Binder.execTransactInternal(Binder.java:1280)
```https://code.briarproject.org/briar/briar/-/issues/2409SecurityException when binding Bluetooth socket2023-05-29T11:38:26ZakwizgranSecurityException when binding Bluetooth socketThis crash looks similar to #1698 but the stacktrace is different. The error message says the app lacks permission android.permission.BLUETOOTH, which was replaced by new permissions in Android 12. Is the error message out of date, or do...This crash looks similar to #1698 but the stacktrace is different. The error message says the app lacks permission android.permission.BLUETOOTH, which was replaced by new permissions in Android 12. Is the error message out of date, or does this device still use the old Bluetooth permissions?
* Android version: 12
* Phone model: Redmi M2101K6R (sweet_global)
* Briar version: 1.4.18 (4797151)
* User feedback: "The app stopped out of nowhere and I need it urgently."
Stacktrace:
```
java.lang.SecurityException: UID 10414 / PID 7993 lacks permission android.permission.BLUETOOTH
at android.os.Parcel.createExceptionOrNull(Parcel.java:2426)
at android.os.Parcel.createException(Parcel.java:2410)
at android.os.Parcel.readException(Parcel.java:2393)
at android.os.Parcel.readException(Parcel.java:2335)
at android.bluetooth.IBluetoothSocketManager$Stub$Proxy.createSocketChannel(IBluetoothSocketManager.java:265)
at android.bluetooth.BluetoothSocket.bindListen(BluetoothSocket.java:453)
at android.bluetooth.BluetoothAdapter.createNewRfcommSocketAndRecord(BluetoothAdapter.java:2883)
at android.bluetooth.BluetoothAdapter.listenUsingInsecureRfcommWithServiceRecord(BluetoothAdapter.java:2830)
at org.briarproject.bramble.plugin.bluetooth.AndroidBluetoothPlugin.openServerSocket(AndroidBluetoothPlugin.java:152)
at org.briarproject.bramble.plugin.bluetooth.AndroidBluetoothPlugin.openServerSocket(AndroidBluetoothPlugin.java:61)
at org.briarproject.bramble.plugin.bluetooth.AbstractBluetoothPlugin.lambda$bind$0(AbstractBluetoothPlugin.java:215)
at org.briarproject.bramble.plugin.bluetooth.AbstractBluetoothPlugin.$r8$lambda$Nv27P8uQlCv6FpD1a0uQUudeR9U(Unknown Source:0)
at org.briarproject.bramble.plugin.bluetooth.AbstractBluetoothPlugin$$ExternalSyntheticLambda0.run(Unknown Source:2)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1137)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637)
at java.lang.Thread.run(Thread.java:1012)
```
Edited log:
```
12-28 01:54:17.763 I/PluginManagerImpl: Starting simplex plugins
12-28 01:54:17.763 I/PluginManagerImpl: Starting duplex plugins
12-28 01:54:17.779 I/PluginManagerImpl: org.briarproject.bramble.bluetooth changed from state STARTING_STOPPING to INACTIVE
12-28 01:54:17.799 I/AbstractBluetoothPlugin: Local address null
12-28 01:54:17.802 I/PluginViewModel: TransportStateEvent: org.briarproject.bramble.bluetooth is INACTIVE
```
Looks like the plugin was enabled and the crash happened at startup.Android 1.4akwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/2408Split big BSP Records2023-01-31T21:44:51ZThomasSplit big BSP RecordsIn #407, the requested feature is to send files with sizes bigger than one BSP Record. The issue is cluttered with user feedback-quotes, therefore I thought I make a new issue to propose an implementation (I don't know if this is the bes...In #407, the requested feature is to send files with sizes bigger than one BSP Record. The issue is cluttered with user feedback-quotes, therefore I thought I make a new issue to propose an implementation (I don't know if this is the best way to handle that ...).
I realized that I basically need the same feature for https://code.briarproject.org/thomas/briar/-/issues/1 (with custom BSP-Record sizes). My thoughts are intended to allow for minimal overhead (saving every byte).
My idea is to introduce message-fragments/slices. I think it is not enough to add a new message-type to BSPv0, I think it will require BSPv1. (the slices will be required also for e.g. the REQUEST-Type)
I imagine to send message fragments like { message-hash, start of slice, slice length, byte-array }.
The message itself is prefixed with its total size (needs only to be transmitted with the first slice; since the message is only composed when all slices are there, it is no problem if the first slice is retransmitted).
The receiver can acknowledge fragments (by hash, start and length). When all fragments are available, the sender internally acknowledges the whole record and the receiver assembles the message. I could also imagine the sender caching which BTP-Frame contains which message-fragments so that the receiver can acknowledge BTP-Frames which might save some space. But it will add additional complexity ...
Having sizes&positions as varints ([an Implementation](https://github.com/bazelbuild/bazel/blob/master/src/main/java/com/google/devtools/build/lib/util/VarInt.java)) would be awesome.
Btw: Sorry for not replying to https://code.briarproject.org/thomas/briar/-/issues/1 yethttps://code.briarproject.org/briar/briar/-/issues/2407Crash when getting Bluetooth address2023-01-06T16:28:57ZakwizgranCrash when getting Bluetooth address* Android version: 12
* Phone model: Redmi M2004J19C (galahad_global)
* Briar version: 1.4.18 (4797151)
Edited log:
```
12-17 21:55:20.433 I/AbstractBluetoothPlugin: Bluetooth enabled
```
Stacktrace:
```
java.lang.SecurityException: Ne...* Android version: 12
* Phone model: Redmi M2004J19C (galahad_global)
* Briar version: 1.4.18 (4797151)
Edited log:
```
12-17 21:55:20.433 I/AbstractBluetoothPlugin: Bluetooth enabled
```
Stacktrace:
```
java.lang.SecurityException: Need android.permission.BLUETOOTH_CONNECT permission for android.content.AttributionSource@458c6c33: getAddress
at android.os.Parcel.createExceptionOrNull(Parcel.java:2426)
at android.os.Parcel.createException(Parcel.java:2410)
at android.os.Parcel.readException(Parcel.java:2393)
at android.os.Parcel.readException(Parcel.java:2335)
at android.bluetooth.IBluetoothManager$Stub$Proxy.getAddress(IBluetoothManager.java:789)
at android.bluetooth.BluetoothAdapter.getAddress(BluetoothAdapter.java:1290)
at org.briarproject.bramble.util.AndroidUtils.getBluetoothAddressAndMethod(AndroidUtils.java:70)
at org.briarproject.bramble.util.AndroidUtils.getBluetoothAddress(AndroidUtils.java:63)
at org.briarproject.bramble.plugin.bluetooth.AndroidBluetoothPlugin.getBluetoothAddress(AndroidBluetoothPlugin.java:146)
at org.briarproject.bramble.plugin.bluetooth.AbstractBluetoothPlugin.updateProperties(AbstractBluetoothPlugin.java:239)
at org.briarproject.bramble.plugin.bluetooth.AbstractBluetoothPlugin.$r8$lambda$ZdCFKGKAr5elvl5L48zy5sncMIA(Unknown Source:0)
at org.briarproject.bramble.plugin.bluetooth.AbstractBluetoothPlugin$$ExternalSyntheticLambda2.run(Unknown Source:2)
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:920)
Caused by: android.os.RemoteException: Remote stack trace:
at com.android.server.BluetoothManagerService.checkPermissionForDataDelivery(BluetoothManagerService.java:3327)
at com.android.server.BluetoothManagerService.checkConnectPermissionForDataDelivery(BluetoothManagerService.java:3345)
at com.android.server.BluetoothManagerService.getAddress(BluetoothManagerService.java:1951)
at android.bluetooth.IBluetoothManager$Stub.onTransact(IBluetoothManager.java:373)
at android.os.Binder.execTransactInternal(Binder.java:1190)
```Android 1.4akwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/2405SecurityException at startup when getting Bluetooth bonded devices2023-06-30T10:34:39ZakwizgranSecurityException at startup when getting Bluetooth bonded devicesThis crash has been reported by Google Play but not by our crash reporter, perhaps because it happens early in the app lifecycle.
* Android version: 13
* Briar version: 1.4.15
* Phone models: Google raven, panther and bluejay
Stacktrac...This crash has been reported by Google Play but not by our crash reporter, perhaps because it happens early in the app lifecycle.
* Android version: 13
* Briar version: 1.4.15
* Phone models: Google raven, panther and bluejay
Stacktrace:
```
Exception java.lang.RuntimeException:
at android.app.ActivityThread.handleBindApplication (ActivityThread.java:6790)
at android.app.ActivityThread.-$$Nest$mhandleBindApplication
at android.app.ActivityThread$H.handleMessage (ActivityThread.java:2134)
at android.os.Handler.dispatchMessage (Handler.java:106)
at android.os.Looper.loopOnce (Looper.java:201)
at android.os.Looper.loop (Looper.java:288)
at android.app.ActivityThread.main (ActivityThread.java:7898)
at java.lang.reflect.Method.invoke
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:936)
Caused by java.lang.SecurityException:
at com.android.bluetooth.Utils.checkPermissionForDataDelivery (Utils.java:482)
at com.android.bluetooth.Utils.checkConnectPermissionForDataDelivery (Utils.java:514)
at com.android.bluetooth.btservice.AdapterService$AdapterServiceBinder.getBondedDevices (AdapterService.java:2122)
at com.android.bluetooth.btservice.AdapterService$AdapterServiceBinder.getBondedDevices (AdapterService.java:2114)
at android.bluetooth.IBluetooth$Stub.onTransact (IBluetooth.java:642)
at android.os.Binder.execTransactInternal (Binder.java:1285)
at android.os.Binder.execTransact (Binder.java:1244)
```
AndroidSecureRandomProvider calls getBondedDevices() at startup to feed the entropy pool. We added a permission check for Android 12, but apparently it's not always effective.Android 1.4akwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/2403Not enough feedback while connecting to Mailbox2022-12-15T13:02:08ZakwizgranNot enough feedback while connecting to Mailbox> Sometimes the connection took a long time while setting up the Mailbox. In these cases, a few participants assumed that they were having problems with either the app or the internet connection. There is not enough feedback for the user...> Sometimes the connection took a long time while setting up the Mailbox. In these cases, a few participants assumed that they were having problems with either the app or the internet connection. There is not enough feedback for the user on this screen.Mailbox: Usability testingIvanaIvanahttps://code.briarproject.org/briar/briar/-/issues/2402Check that text in Briar's mailbox connection troubleshooter matches text in ...2023-04-24T13:05:32ZakwizgranCheck that text in Briar's mailbox connection troubleshooter matches text in Mailbox appMailbox: Releaseakwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/2400Testers didn't realise that text buttons were buttons2022-12-07T16:54:37ZakwizgranTesters didn't realise that text buttons were buttons![buttons-1](/uploads/72a3c9f24adea51777db39592588ef50/buttons-1.png)
> A few participants didn’t notice the “Check connection settings” button. In this case, the “Try again” button grabs the attention and it’s hard to tell that “Check ...![buttons-1](/uploads/72a3c9f24adea51777db39592588ef50/buttons-1.png)
> A few participants didn’t notice the “Check connection settings” button. In this case, the “Try again” button grabs the attention and it’s hard to tell that “Check connection settings” is a button, it looks like a text/link.
![buttons-2](/uploads/965fe0ae27bc7520d2f1b1dc9e32ca31/buttons-2.png)
> The same goes for the screenshot on the right, “Fix problem” and “Unlink” look like links. There is a mismatch in these patterns. Use buttons in every case the user is required to take action and use colors to distinguish their importance.
We're using the Material 2 "text button" style for these buttons. Maybe we should use the "outlined button" style instead.
https://m2.material.io/components/buttons/android#using-buttons
There's also some inconsistency in the colouring: we're using the link colour for the "fix problem" button (like the positive button in dialogs), but the app's primary colour for the "check connection settings" button.Mailbox: Usability testingakwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/2397Misleading error message when testers tried to pair mailbox via add contact s...2023-02-07T12:55:38ZakwizgranMisleading error message when testers tried to pair mailbox via add contact screen> The error message “The QR code you have scanned comes from a newer version of briar” was misleading. Participants believed they needed to upgrade to the latest version, so they asked for new links. After I clarified that they already h...> The error message “The QR code you have scanned comes from a newer version of briar” was misleading. Participants believed they needed to upgrade to the latest version, so they asked for new links. After I clarified that they already have the correct apk and encouraged them to explore other ways to link the devices.Mailbox: Usability testingIvanaIvana