briar issueshttps://code.briarproject.org/briar/briar/-/issues2023-09-06T15:36:50Zhttps://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/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/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/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/2385Sponsor 6 User feedback2023-08-28T16:07:07ZIvanaSponsor 6 User feedbackThis ticket gathers different strands of user feedback received during Q3 and Q4 2022 from users.
Users were asked to test the Briar app at an event, therefore there was little in the way of user preparation, onboarding etc.
## Feedba...This ticket gathers different strands of user feedback received during Q3 and Q4 2022 from users.
Users were asked to test the Briar app at an event, therefore there was little in the way of user preparation, onboarding etc.
## Feedback from users on how to improve Briar
### Issues Relating to User Experience and Functionality
| Problem | Solution proposed by person giving feedback | Notes from team | Relevant tickets | Next steps |
| ------ | ------ | ------ | ------ | ------ |
| Anecdotally, users have said that Briar doesn't work during internet shutdowns. We heard this at the conference last week. | <p> What we need to explain is that it does work, but it has limitations. We need to lower expectations of what this can do. It is not as good as WhatsApp, and it can take up to 10 minutes to install and connect with friends who have it as well as add yourself to a forum. </p><p> Briar should adjust expectations of what it is capable of doing and make its limitations clear, so users don't become frustrated that it doesn't operate like WhatsApp. </p> | <p> This feedback touches on an issue we've been discussing recently: whether our product strategy of imitating the features and UX of a typical messaging app is effective for meeting the needs of people affected by internet shutdowns. That's an issue we should continue to discuss as a team, but it's too big to tackle in the remaining sponsor 6 hours. Still, within the existing product strategy there are things we could do to address this feedback. </p><p> We could change the language we use to describe the app (on our website, Google Play and elsewhere), to make it clear that when operating offline, the app can only be used to communicate with people nearby. </p><p> Within the app, we could create a stronger UX distinction between online and offline operation. </p><p> We could add onboarding to explain how offline communication works when the app is used offline for the first time, perhaps using information about the available transports and contacts to decide when onboarding is needed. </p><p> We could be more proactive about using onboarding and UX cues to explain the differences between Briar and typical messaging apps, both online and offline. </p> | #1472 | Design UX for contextual help: #2390. |
| Techies at the event found it hard to download and install the app and became frustrated. Once the app is downloaded and users are trying to connect to one another, they don't understand how to scan each other's QR codes. Our tests often saw pairs of users only scanning one of the QR codes, rather than both on each user’s phone - the current documentation of a still image doesn't exactly show how to do that - and users can get frustrated during this period. | Here are some ways to improve this: Briar needs to include clear images, GIFs and/or a video to make clear how to correctly scan the QR codes early in the installation process to avoid user frustration. | <p> Many other apps use QR codes, but none of them require both parties to scan each other's codes, creating a strong expectation that Briar will work in the same way. </p><p> We've already made a small step towards addressing this by adding hints to the UI. </p><p> We could improve the onboarding for adding a nearby contact, perhaps with a vector animation of both devices scanning each other's QR codes. </p><p> In the longer term we could replace the QR code workflow with a new workflow in which the users choose who will go first, so that we can show each user the next step they need to take. </p> | #348, #1909, #1235 | Design UX for contextual help: #2390. |
| While tutorials and documentation on Briar exist in several languages, these are difficult to find. | <p> We need a centralized place to download Briar's existing documentation and tutorials in multiple languages quickly and easily to help people install the app with ease. </p><p> Some suggestions to improve this include: Making these resources available on the Google Play Store and/or the Briar website, and/or when people download the app they are instructed to do a walkthrough of the app in various languages. Instructions or a walk-through in multiple languages would be helpful. </p> | <p> We should make the manual, quick start guide and FAQ easier to find on the website - this depends on restructuring the nav. </p><p> Linking to the docs from Google Play is an easy win. </p><p> We could also write tutorials for specific tasks (eg creating an account, adding a contact). These might replace the current quick start guide and would allow more topics to be covered. </p><p> Bundling the manual and/or tutorials with the app, and/or writing help text specifically for the app, might also help. </p><p> Open problem: generating in-app documentation and web documentation from the same source, in a format that's compatible with Transifex. </p> | website#21, #1312 | <p> Restructure website navigation: website#21. </p><p> Link to docs from Google Play: #2387. </p><p> Design UX for contextual help: #2390. </p> |
| People join Briar, but they don't know what to do or how to find and join a forum. | The documentation should spell this process out clearly, along with GIFs -- not just still images that don't properly explain what is needed. | <p> We should add onboarding for the blog, forum and private group features. This could consist of a "tour" after the user creates their account, and/or onboarding for specific features when the user first opens them. </p><p> We should offer contextual help throughout the app, either by linking to the appropriate part of the bundled documentation or by writing help text specifically for the app. </p><p> Open problem: how to indicate that help is available in a given context without interrupting the user's workflow? </p> | #1472 | Design UX for contextual help: #2390. |
### Issues Relating to Transparency
| Problem | Solution proposed by person giving feedback | Notes from team | Relevant tickets | Next steps |
| ------ | ------ | ------ | ------ | ------ |
| <p> Information on how and what user data is collected and used by Briar needs to be more clear and more transparent to users in plain language. While the privacy information is on GitHub this is not accessible to an ordinary user and to those who may not be familiar with a privacy policy, especially if it is written in very technical language. </p><p> Some of the questions event participants wished to be answered before they downloaded the app included: Is it encrypted? What will they do with my data? Why do I need a password? Why isn't it on iOS? Will it become available on iOS? Who has developed the app? </p> | They should have a help/FAQ section based on this information. | <p> The privacy policy is linked from Google Play - we should also link to it from GitHub. </p><p> The privacy policy is written in non-technical language, but it's only available in English. Making the website available in multiple languages would help with this. </p><p> The FAQ should also be made available in multiple languages and linked from Google Play and GitHub. This argues in favour of putting the FAQ on the website (where it can be translated) rather than the wiki. Including the FAQ in the app might also help. </p><p> We could add onboarding to the account setup process (or expand the existing contextual help and make it more obvious) to answer the questions about encryption, data storage and why the password is needed. </p> | website#28, website#29, #1312 | <p> Link to docs and privacy policy from GitHub: #2388. </p><p> Make website translatable: website!87. </p><p> Add FAQ to website: website#29 (depends on website#21). </p><p> Design UX for contextual help: #2390. </p> |
### Some Suggestions for Improvements to Increase Functionality/User Uptake
#### Read/Delivery Receipts
| Problem | Solution proposed by person giving feedback | Notes from team | Relevant tickets | Next steps |
| ------ | ------ | ------ | ------ | ------ |
| During an emergency situation information on the delivery/receipt/reading of messages can be vital. | Briar developers should make it optional to add read receipts to private messages and forums. The app should provide clear ways to show if a message has not been delivered or read, similar to some other apps. | <p> Opt-in read receipts could be implemented for private messages. </p><p> We should look at how other apps handle the UI distinction between a contact who hasn't enabled read receipts and a contact who has enabled them but hasn't read the message. </p><p> Some apps don't let you request read receipts unless you also send receipts to your contacts (although this couldn't be enforced in a P2P app). </p><p> For forums, it's not clear how read receipts would work, as the membership of the forum isn't known. </p><p> Read receipts for private groups might be feasible. We should look at how other apps handle read receipts for group chats. </p><p> Some people may think that two checkmarks mean a message has been read. We could show onboarding for this and add it to the FAQ. </p> | #1220, #1208 | <p> Research how other apps handle read receipts: #2389. </p> |
#### Understanding the Internet vs Bluetooth Function
| Problem | Solution proposed by person giving feedback | Notes from team | Relevant tickets | Next steps |
| ------ | ------ | ------ | ------ | ------ |
| At the moment, people don't seem to understand what the internet and Bluetooth functions are, what they mean, why it is better than WhatsApp, when it is appropriate to use either function, and what the limitations are when these functions are used. | A notification/banner showing if the app is relying on the internet or Bluetooth should be shown to make the use of the two functions clear and help people understand the two different modes it can operate. | See notes above re: making it clear that the app works differently from WhatsApp. | See above. | See above. |
#### Confusion about the Forum Function
| Problem | Solution proposed by person giving feedback | Notes from team | Relevant tickets | Next steps |
| ------ | ------ | ------ | ------ | ------ |
| Event participants were confused about what the term ‘forum’ meant and which function it was meant to provide, which can indicate that other users, especially non-English-speaking users may not be able to understand what this function provides. | Briar should consider changing the name Forum to Groups which is more clear and in line with other apps to avoid confusion and misunderstandings by users, especially those in non-English-speaking countries. | <p> We should try to find out whether this is a translation issue or whether the term is also unclear to English-speaking users. </p><p> We could do some user research into what users expect the terms "forum", "private group" and "blog" to mean. </p><p> We discussed renaming "forum" and "private group" to "public group" and "private group", or "open group" and "closed group", but this might cause further confusion between the two features. We won't find any single term that conveys the right concept to everyone, so explanations need to be included in the app and easily accessible. See notes above re: onboarding for features and contextual help. </p> | #800, #1472 | Design UX for contextual help: #2390. |
#### Warnings and Notifications on Internet Disruptions and Shutdowns
| Problem | Solution proposed by person giving feedback | Notes from team | Relevant tickets | Next steps |
| ------ | ------ | ------ | ------ | ------ |
| It needs to be clear that people DO need internet access to download and install the app, so installation needs to happen before any shutdowns/disruptions. | <p> To help users be prepared and remember to use Briar, notifications could be sent to users' phones while they are connected to the internet to tell friends about the application and to help them download it. The notification can be sent periodically to remind users about the app. </p><p> Briar could also connect to civil society/research groups who monitor internet connectivity around the world, so that it can provide notifications and warnings if there is a risk of imminent internet disruption or shutdown so that users can prepare/share information to friends/family to start using Briar. </p> | <p> Apparently we need to do a better job of advertising the offline app sharing function! We could add onboarding for this feature when the app is first used offline. We could also think about whether there's a more prominent place in the app where this feature could live. </p><p> Showing too many notifications might irritate users and cause them to turn off notifications. </p><p> Notifications for specific countries at risk of internet disruptions would be possible, but the Briar team would prefer not to operate any centralised infrastructure. We might be able to partner with an organisation like Access Now to publish information, perhaps as an RSS feed that Briar peers could fetch via Tor and automatically re-share. </p><p> We could direct the user to the offline app sharing feature when we detect that the app is offline. </p><p> Many apps have the ability to generate a generic message like "Let's keep in touch via Briar, download it here", which can be sent via another app. This would be an easy win. </p> | | Share a link to the Briar download page: #2391. |
## Feedback received via Briar blog from project partners
| Problem | Solution proposed by person giving feedback | Notes from team | Relevant tickets | Next steps |
| ------ | ------ | ------ | ------ | ------ |
| It's not obvious that the Reblog button can be used to reply to a post. The reblog icon is intuitive *if you're accustomed to Tumblr*, but that's ancient to most savvy youths, a primary target audience for Briar. | It would be better to have separate Reply and Reblog buttons, like Twitter. | This is an easy win. | | Use separate buttons for reblogging and commenting: #2392. |
| A link shared within a blog is neither clickable not intuitively copy-able. | | <p> The underlying issue is that blog posts are written in plain text but rendered as HTML, because RSS posts can contain HTML. Messages elsewhere in the app (private messages, forums, private groups and even blog comments) are written and rendered as plain text. </p><p> We could convert blog posts to HTML when they're written, including converting URLs into links. </p><p> Alternatively, we could continue to render RSS posts as HTML, but render non-RSS posts as plain text. We could then make links clickable when rendering all plain text content (blog posts, blog comments, private messages, forums and private groups). </p><p> We should investigate the options for preprocessing text to HTML. </p> | #689, #421, #786, #1038, #90 | Convert blog posts and comments to HTML when composing: #2393. |
| As I play with the app, I'm continually seeking a "homebase" with the feed but featuring notifications of messages and new posts, and instead I end up hitting the Back button and accidentally exiting the app. | A centralised homepage with just my notifications would be optimal. | <p> We could show badges for new content in the nav menu, and maybe even on the hamburger button. This might require some refactoring to limit the amount of DB work needed. </p><p> Paul has some drawings of different navigation options, including bottom navigation, which would make the badges visible from everywhere. </p><p> Another option would be to create a new homepage that shows new content from all parts of the app. This would be a much bigger change, requiring design work to differentiate the various types of content and backend work to make the new content available efficiently. </p> | #42 | Show new content in navigation drawer: #42. (This may need to be broken down into subtasks.) |
| Why can't I filter the Blogs page to see posts from specific contacts? | | This could be added, either as a blog list screen accessible via the overflow menu, similar to the forum and private group lists, or as a dropdown at the top of the feed.| #624, #864, #865, #996 | |
| Post that is continually reblogged when I add comments to it creates annoying redundancy for my contact. | | This is a tricky one because comment threads can fork. Let's look at how Tumblr and Twitter handle this. | #2154 | Research how Tumblr and Twitter handle comments/reblogs for previously seen posts: #2394. |
| When I go to contacts individually, I'd like to see their blogs. | | This could easily be added to the conversation screen's overflow menu. Alternatively, it could be added to the long-requested contact info screen. The contact info screen could also serve as an entry point for documentation. | #26 | |
| Adding nearby contact wait screen makes one unable to do other things in the app. | Can it happen in the background? | <p> By the time we know that the contact has scanned our QR code, the process is nearly finished. So with the current protocol, not much time would be saved by moving the process to the background at that point. </p><p> If we redesign the workflow and protocol for adding nearby contacts then we should keep this request in mind, but that redesign is probably too big a piece of work to tackle in the remaining sponsor 6 hours. </p> | #348 | Too big for sponsor 6. |
| Ability to make others admins of private groups. | | This has been requested before. Having multiple admins would be very complex. Transferring ownership to a new admin might be feasible, but it would be too big a piece of work for the remaining sponsor 6 hours. | #920 | Too big for sponsor 6. |
| Bigger buttons. | | More information needed. | | Ask for more info. |
| Too many similar terms. | | More information needed. | | Ask for more info. |
| Notifications are clunky. | | More information needed. | | Ask for more info. |
| Restructure actions so you just write a post and then decide who sees it (eg private, a contact, a group, or all). | | <p> If the request is only intended to apply to blogs then it should be feasible. It would require UX and backend changes, including a small protocol change to let recipients know whether they're allowed to re-share the post. </p><p> If the request is intended to apply across the app, ie to make it possible to write some content and then decide whether it should be a private message, a blog post, etc, then that would be more complex (for example, private messages support attachments but other types of content don't). Email clients and some messengers support this, and it's useful to be able to create an ad hoc group for a conversation. We should keep this use case in mind when working on public mesh protocols. </p> | #1013 | |akwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/2330NPE when getting IPv6 address for network interface2023-09-06T15:37:00ZakwizgranNPE when getting IPv6 address for network interface* Android version: 11
* Phone model: OnePlus HD1903 (OnePlus7T)
* Briar version: 1.4.6 (d5e17c8)
Stacktrace:
```
java.lang.NullPointerException: Attempt to read from field 'java.util.List java.net.NetworkInterface.childs' on a null obje...* Android version: 11
* Phone model: OnePlus HD1903 (OnePlus7T)
* Briar version: 1.4.6 (d5e17c8)
Stacktrace:
```
java.lang.NullPointerException: Attempt to read from field 'java.util.List java.net.NetworkInterface.childs' on a null object reference
at java.net.NetworkInterface.getAll(NetworkInterface.java:498)
at java.net.NetworkInterface.getByInetAddress(NetworkInterface.java:365)
at org.briarproject.bramble.plugin.tcp.AndroidLanTcpPlugin.getIpv6AddressForInterface(AndroidLanTcpPlugin.java:199)
at org.briarproject.bramble.plugin.tcp.AndroidLanTcpPlugin.getWifiAddress(AndroidLanTcpPlugin.java:125)
at org.briarproject.bramble.plugin.tcp.AndroidLanTcpPlugin.getUsableLocalInetAddresses(AndroidLanTcpPlugin.java:110)
at org.briarproject.bramble.plugin.tcp.LanTcpPlugin.getLocalSocketAddresses(LanTcpPlugin.java:140)
at org.briarproject.bramble.plugin.tcp.TcpPlugin.bind(TcpPlugin.java:159)
at org.briarproject.bramble.plugin.tcp.TcpPlugin.lambda$bind$0(TcpPlugin.java:152)
at org.briarproject.bramble.plugin.tcp.TcpPlugin.$r8$lambda$IG7OujafuxmUKGD9Z35IgV8DTwo(Unknown Source:0)
at org.briarproject.bramble.plugin.tcp.TcpPlugin$$ExternalSyntheticLambda0.run(Unknown Source:2)
at org.briarproject.bramble.PoliteExecutor.lambda$execute$0(PoliteExecutor.java:57)
at org.briarproject.bramble.PoliteExecutor.$r8$lambda$wSvuPL6t_HUoaaqCVexrhJX_RSg(Unknown Source:0)
at org.briarproject.bramble.PoliteExecutor$$ExternalSyntheticLambda0.run(Unknown Source:6)
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)
```Android 1.4https://code.briarproject.org/briar/briar/-/issues/2308Emoji button doesn't work on Android 42023-03-22T12:47:53ZakwizgranEmoji button doesn't work on Android 4* Android version: 4.1.2
* Phone model: Samsung GT-I8260 (arubaslimssxx)
* Briar version: 1.4.5 (4df523a)
* User feedback: "I would like to inform you about the emoji icon which does nothing. It does not show the emoji selection box and ...* Android version: 4.1.2
* Phone model: Samsung GT-I8260 (arubaslimssxx)
* Briar version: 1.4.5 (4df523a)
* User feedback: "I would like to inform you about the emoji icon which does nothing. It does not show the emoji selection box and therefore it is not possible to send any emoji."
I can reproduce this on my API 16 test device (Samsung Galaxy Ace 2).https://code.briarproject.org/briar/briar/-/issues/2280NPE in RemovableDriveTaskImpl2022-04-20T14:54:14ZakwizgranNPE in RemovableDriveTaskImpl* Android version: 9
* Phone model: Huawei POT-LX1
* Briar version: 1.4.5 (4df523a)
* User feedback: "Doesn't work without internet."
Log:
```
03-01 07:20:01.142 I/BriarApplicationImpl: Created
03-01 07:20:01.187 I/BaseActivity: Creatin...* Android version: 9
* Phone model: Huawei POT-LX1
* Briar version: 1.4.5 (4df523a)
* User feedback: "Doesn't work without internet."
Log:
```
03-01 07:20:01.142 I/BriarApplicationImpl: Created
03-01 07:20:01.187 I/BaseActivity: Creating RemovableDriveActivity
03-01 07:20:01.244 I/BaseActivity: Starting RemovableDriveActivity
03-01 07:20:01.322 I/BaseActivity: Resuming RemovableDriveActivity
03-01 07:20:01.322 I/BriarActivity: Not signed in, launching StartupActivity
03-01 07:20:01.340 I/BaseActivity: Pausing RemovableDriveActivity
```
Stacktrace:
```
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Class java.lang.Object.getClass()' on a null object reference
at org.briarproject.bramble.api.nullsafety.NullSafety.requireNonNull(NullSafety.java:12)
at org.briarproject.bramble.plugin.file.RemovableDriveTaskImpl.getPlugin(RemovableDriveTaskImpl.java:78)
at org.briarproject.bramble.plugin.file.RemovableDriveReaderTask.run(RemovableDriveReaderTask.java:38)
at java.util.concurrent.ThreadPoolExecutor.processTask(ThreadPoolExecutor.java:1187)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1152)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:784)
```
Looks like the crash happened when relaunching the app from the recent apps list after it was killed with RemovableDriveActivity open.Android 1.4akwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/2277ActivityNotFoundException for GET_CONTENT intent2022-05-16T13:59:16ZakwizgranActivityNotFoundException for GET_CONTENT intentLooks similar to #2214 and #2097.
* Android version: 11
* Phone model: Samsung SM-A125F (a12nnxx)
* Briar version: 1.4.1 (6517f3f)
Stacktrace:
```
android.content.ActivityNotFoundException: No Activity found to handle Intent { act=andr...Looks similar to #2214 and #2097.
* Android version: 11
* Phone model: Samsung SM-A125F (a12nnxx)
* Briar version: 1.4.1 (6517f3f)
Stacktrace:
```
android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.GET_CONTENT cat=[android.intent.category.OPENABLE] typ=image/* (has extras) }
at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:2080)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1727)
at android.app.Activity.startActivityForResult(Activity.java:5377)
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.fragment.app.Fragment$9.launch(Fragment.java:3510)
at androidx.activity.result.ActivityResultLauncher.launch(ActivityResultLauncher.java:47)
at org.briarproject.briar.android.settings.SettingsFragment.lambda$onCreatePreferences$0(SettingsFragment.java:66)
at org.briarproject.briar.android.settings.SettingsFragment.lambda$onCreatePreferences$0$SettingsFragment(Unknown Source:0)
at org.briarproject.briar.android.settings.-$$Lambda$SettingsFragment$aLVt4dIN9PUOagzsIXcpqTymkBo.onPreferenceClick(Unknown Source:2)
at androidx.preference.Preference.performClick(Preference.java:1184)
at androidx.preference.Preference.performClick(Preference.java:1166)
at androidx.preference.Preference$1.onClick(Preference.java:181)
at android.view.View.performClick(View.java:8160)
at android.view.View.performClickInternal(View.java:8137)
at android.view.View.access$3700(View.java:888)
at android.view.View$PerformClick.run(View.java:30236)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:246)
at android.app.ActivityThread.main(ActivityThread.java:8528)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)
```Android 1.4akwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/2273SecurityException when reading from removable drive2022-04-20T14:53:56ZakwizgranSecurityException when reading from removable drive* Android version: 10
* Phone model: Redmi M2006C3LG (dandelion_global)
* Briar version: 1.4.4 (36670a8)
Stacktrace:
```
java.lang.SecurityException: org.briarproject.briar.android has no access to content://media/external/audio/media/4...* Android version: 10
* Phone model: Redmi M2006C3LG (dandelion_global)
* Briar version: 1.4.4 (36670a8)
Stacktrace:
```
java.lang.SecurityException: org.briarproject.briar.android has no access to content://media/external/audio/media/436
at android.os.Parcel.createException(Parcel.java:2074)
at android.os.Parcel.readException(Parcel.java:2042)
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:188)
at android.database.DatabaseUtils.readExceptionWithFileNotFoundExceptionFromParcel(DatabaseUtils.java:151)
at android.content.ContentProviderProxy.openTypedAssetFile(ContentProviderNative.java:705)
at android.content.ContentResolver.openTypedAssetFileDescriptor(ContentResolver.java:1700)
at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:1516)
at android.content.ContentResolver.openInputStream(ContentResolver.java:1200)
at org.briarproject.bramble.plugin.file.AndroidRemovableDrivePlugin.openInputStream(AndroidRemovableDrivePlugin.java:35)
at org.briarproject.bramble.plugin.file.AbstractRemovableDrivePlugin.createReader(AbstractRemovableDrivePlugin.java:110)
at org.briarproject.bramble.plugin.file.RemovableDriveReaderTask.run(RemovableDriveReaderTask.java:38)
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)
```Android 1.4akwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/2272NPE at application startup2022-06-13T14:48:19ZakwizgranNPE at application startupThis bug was recorded by Google Play. The crash happens at injection time, possibly before our own crash reporter is initialised.
* Android version: 11
* Phone models: Motorola Moto G Power, Redmi Note 8 Pro, OnePlus Nord N10 5G, Xiaomi...This bug was recorded by Google Play. The crash happens at injection time, possibly before our own crash reporter is initialised.
* Android version: 11
* Phone models: Motorola Moto G Power, Redmi Note 8 Pro, OnePlus Nord N10 5G, Xiaomi Mi A3, OnePlus 7
* Briar versions: 1.4.3, 1.4.4 (Google Play)
Stacktrace:
```
java.lang.RuntimeException:
at android.app.ActivityThread.handleBindApplication (ActivityThread.java:7029)
at android.app.ActivityThread.access$1700 (ActivityThread.java:274)
at android.app.ActivityThread$H.handleMessage (ActivityThread.java:2098)
at android.os.Handler.dispatchMessage (Handler.java:106)
at android.os.Looper.loop (Looper.java:233)
at android.app.ActivityThread.main (ActivityThread.java:8063)
at java.lang.reflect.Method.invoke (Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:631)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:978)
Caused by: java.lang.NullPointerException:
at java.net.NetworkInterface.getAll (NetworkInterface.java:498)
at java.net.NetworkInterface.getNetworkInterfaces (NetworkInterface.java:398)
at org.briarproject.bramble.system.AbstractSecureRandomProvider.writeToEntropyPool (AbstractSecureRandomProvider.java:28)
at org.briarproject.bramble.system.AndroidSecureRandomProvider.writeToEntropyPool (AndroidSecureRandomProvider.java:41)
at org.briarproject.bramble.system.UnixSecureRandomProvider.writeSeed (UnixSecureRandomProvider.java:49)
at org.briarproject.bramble.system.AndroidSecureRandomProvider.writeSeed (AndroidSecureRandomProvider.java:64)
at org.briarproject.bramble.system.UnixSecureRandomProvider.getProvider (UnixSecureRandomProvider.java:41)
at org.briarproject.bramble.crypto.CryptoComponentImpl.<init> (CryptoComponentImpl.java:83)
at org.briarproject.bramble.crypto.CryptoModule.provideCryptoComponent (CryptoModule.java:32)
at org.briarproject.bramble.crypto.CryptoModule_ProvideCryptoComponentFactory.provideCryptoComponent (CryptoModule_ProvideCryptoComponentFactory.java:42)
at org.briarproject.bramble.crypto.CryptoModule_ProvideCryptoComponentFactory.get (CryptoModule_ProvideCryptoComponentFactory.java:31)
at org.briarproject.bramble.crypto.CryptoModule_ProvideCryptoComponentFactory.get (CryptoModule_ProvideCryptoComponentFactory.java:10)
at dagger.internal.DoubleCheck.get (DoubleCheck.java:47)
at org.briarproject.bramble.sync.MessageFactoryImpl_Factory.get (MessageFactoryImpl_Factory.java:21)
at org.briarproject.bramble.sync.MessageFactoryImpl_Factory.get (MessageFactoryImpl_Factory.java:8)
at org.briarproject.bramble.sync.SyncModule_ProvideMessageFactoryFactory.get (SyncModule_ProvideMessageFactoryFactory.java:26)
at org.briarproject.bramble.sync.SyncModule_ProvideMessageFactoryFactory.get (SyncModule_ProvideMessageFactoryFactory.java:9)
at org.briarproject.bramble.db.DatabaseModule_ProvideDatabaseFactory.get (DatabaseModule_ProvideDatabaseFactory.java:36)
at org.briarproject.bramble.db.DatabaseModule_ProvideDatabaseFactory.get (DatabaseModule_ProvideDatabaseFactory.java:12)
at dagger.internal.DoubleCheck.get (DoubleCheck.java:47)
at org.briarproject.bramble.db.DatabaseModule_ProvideDatabaseComponentFactory.get (DatabaseModule_ProvideDatabaseComponentFactory.java:40)
at org.briarproject.bramble.db.DatabaseModule_ProvideDatabaseComponentFactory.get (DatabaseModule_ProvideDatabaseComponentFactory.java:13)
at dagger.internal.DoubleCheck.get (DoubleCheck.java:47)
at org.briarproject.bramble.lifecycle.LifecycleManagerImpl_Factory.get (LifecycleManagerImpl_Factory.java:30)
at org.briarproject.bramble.lifecycle.LifecycleManagerImpl_Factory.get (LifecycleManagerImpl_Factory.java:10)
at org.briarproject.bramble.lifecycle.LifecycleModule_ProvideLifecycleManagerFactory.get (LifecycleModule_ProvideLifecycleManagerFactory.java:26)
at org.briarproject.bramble.lifecycle.LifecycleModule_ProvideLifecycleManagerFactory.get (LifecycleModule_ProvideLifecycleManagerFactory.java:9)
at dagger.internal.DoubleCheck.get (DoubleCheck.java:47)
at org.briarproject.bramble.cleanup.CleanupModule_ProvideCleanupManagerFactory.get (CleanupModule_ProvideCleanupManagerFactory.java:35)
at org.briarproject.bramble.cleanup.CleanupModule_ProvideCleanupManagerFactory.get (CleanupModule_ProvideCleanupManagerFactory.java:11)
at dagger.internal.DoubleCheck.get (DoubleCheck.java:47)
at org.briarproject.briar.android.DaggerAndroidComponent.injectEagerSingletons (DaggerAndroidComponent.java:2556)
at org.briarproject.briar.android.DaggerAndroidComponent.inject (DaggerAndroidComponent.java:2066)
at org.briarproject.bramble.BrambleCoreEagerSingletons$Helper.injectEagerSingletons (BrambleCoreEagerSingletons.java:48)
at org.briarproject.briar.android.BriarApplicationImpl.createApplicationComponent (BriarApplicationImpl.java:97)
at org.briarproject.briar.android.BriarApplicationImpl.onCreate (BriarApplicationImpl.java:64)
at android.app.Instrumentation.callApplicationOnCreate (Instrumentation.java:1208)
at android.app.ActivityThread.handleBindApplication (ActivityThread.java:7024)
```
This looks like a framework bug that we could work around by catching the exception.Android 1.4akwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/2270Crash during power management setup on Huawei device2022-04-13T10:20:05ZakwizgranCrash during power management setup on Huawei deviceA user reported that Briar crashes during power management setup on a Huawei device. It's not clear whether the crash happened when requesting doze exemption or when opening the battery settings screen (or perhaps even the protected apps...A user reported that Briar crashes during power management setup on a Huawei device. It's not clear whether the crash happened when requesting doze exemption or when opening the battery settings screen (or perhaps even the protected apps list, if it was an old phone).
https://quietplace.xyz/notes/8xa865dc3rAndroid 1.4akwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/2214ActivityNotFoundException for CREATE_DOCUMENT intent2022-04-20T14:54:05ZakwizgranActivityNotFoundException for CREATE_DOCUMENT intentThis looks similar to #2097, but with CREATE_DOCUMENT instead of OPEN_DOCUMENT.
* Android version: 7.1.1
* Phone model: Meitu MP1709
* Briar version: 1.3.8 (8076775)
Last lines of log:
```
10-03 16:14:39.625 I/BaseActivity: Pausing Con...This looks similar to #2097, but with CREATE_DOCUMENT instead of OPEN_DOCUMENT.
* Android version: 7.1.1
* Phone model: Meitu MP1709
* Briar version: 1.3.8 (8076775)
Last lines of log:
```
10-03 16:14:39.625 I/BaseActivity: Pausing ConversationActivity
10-03 16:14:39.641 I/BaseActivity: Creating ImageActivity
10-03 16:14:39.681 I/BaseActivity: Starting ImageActivity
10-03 16:14:39.685 I/BaseActivity: Resuming ImageActivity
10-03 16:14:40.191 I/BaseActivity: Stopping ConversationActivity
```
Stacktrace:
```
No Activity found to handle Intent { act=android.intent.action.CREATE_DOCUMENT typ=*/* (has extras) }
android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.CREATE_DOCUMENT typ=*/* (has extras) }
at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1809)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1523)
at android.app.Activity.startActivityForResult(Activity.java:4227)
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.conversation.ImageActivity.lambda$showSaveImageDialog$2(ImageActivity.java:266)
at org.briarproject.briar.android.conversation.ImageActivity.lambda$showSaveImageDialog$2$ImageActivity(ImageActivity.java)
at org.briarproject.briar.android.conversation.-$$Lambda$ImageActivity$ko_mlYveGbWbVoqWLtXvgqGatns.onClick(lambda)
at androidx.appcompat.app.AlertController$ButtonHandler.handleMessage(AlertController.java:167)
at android.os.Handler.dispatchMessage(Handler.java:110)
at android.os.Looper.loop(Looper.java:203)
at android.app.ActivityThread.main(ActivityThread.java:6314)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1097)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:951)
```
We have two reports of this but they look like they come from the same device, so I won't add it to the current milestone yet.Android 1.4akwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/2209Unable to delete my own blogs2021-10-26T10:35:55ZJerry WhiteUnable to delete my own blogsI'm unable to delete any blogs i create. The option appears from the menu but is greyed out and unavailable.
I can successfully delete RSS feeds and other people's blogs but not my own. This means if i make a mistake, it's permanent and ...I'm unable to delete any blogs i create. The option appears from the menu but is greyed out and unavailable.
I can successfully delete RSS feeds and other people's blogs but not my own. This means if i make a mistake, it's permanent and the only option is to create a new Briar account.https://code.briarproject.org/briar/briar/-/issues/2204Private group improvements - icon to invite contacts2021-10-13T13:57:15ZIvanaPrivate group improvements - icon to invite contactsOne of the outcomes of the Sponsor 6 user survey ran in the summer of 2021 is the following user request "To add an audience, I habitually went to the dot. As a result, it was a little strange for me to use the 'subscribe' icon to 'invit...One of the outcomes of the Sponsor 6 user survey ran in the summer of 2021 is the following user request "To add an audience, I habitually went to the dot. As a result, it was a little strange for me to use the 'subscribe' icon to 'invite'. The corresponding icon is known as 'subscribe'."https://code.briarproject.org/briar/briar/-/issues/2203Private group improvements - editing the audience2021-10-13T13:55:53ZIvanaPrivate group improvements - editing the audienceOne of the outcomes of the Sponsor6 user survey ran in the summer of 2021 is the following user request "It is difficult to edit your audience as soon as it is formed."One of the outcomes of the Sponsor6 user survey ran in the summer of 2021 is the following user request "It is difficult to edit your audience as soon as it is formed."