briar issueshttps://code.briarproject.org/briar/briar/-/issues2024-03-28T13:34:33Zhttps://code.briarproject.org/briar/briar/-/issues/2446IllegalStateException in HotspotActivity2024-03-28T13:34:33ZakwizgranIllegalStateException in HotspotActivity* Android version: 13
* Phone model: OnePlus CPH2415 (CPH2415EEA)
* Briar version: 1.5.6 (b68d24d)
Stacktrace:
```
java.lang.IllegalStateException: LifecycleOwner org.briarproject.briar.android.hotspot.HotspotActivity@52aa2cb is attempt...* Android version: 13
* Phone model: OnePlus CPH2415 (CPH2415EEA)
* Briar version: 1.5.6 (b68d24d)
Stacktrace:
```
java.lang.IllegalStateException: LifecycleOwner org.briarproject.briar.android.hotspot.HotspotActivity@52aa2cb is attempting to register while current state is RESUMED. LifecycleOwners must call register before they are STARTED.
at androidx.activity.result.ActivityResultRegistry.register(ActivityResultRegistry.java:123)
at androidx.activity.ComponentActivity.registerForActivityResult(ComponentActivity.java:817)
at androidx.activity.ComponentActivity.registerForActivityResult(ComponentActivity.java:826)
at org.briarproject.briar.android.hotspot.AbstractConditionManager.init(AbstractConditionManager.java:50)
at org.briarproject.briar.android.hotspot.HotspotIntroFragment.onCreateView(HotspotIntroFragment.java:79)
at androidx.fragment.app.Fragment.performCreateView(Fragment.java:3104)
at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:524)
at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:261)
at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1890)
at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1817)
at androidx.fragment.app.FragmentManager.popBackStackImmediate(FragmentManager.java:871)
at androidx.fragment.app.FragmentManager.popBackStackImmediate(FragmentManager.java:778)
at androidx.fragment.app.FragmentManager.handleOnBackPressed(FragmentManager.java:699)
at androidx.fragment.app.FragmentManager$1.handleOnBackPressed(FragmentManager.java:429)
at androidx.activity.OnBackPressedDispatcher.onBackPressed(OnBackPressedDispatcher.java:192)
at androidx.activity.ComponentActivity.onBackPressed(ComponentActivity.java:657)
at android.app.Activity.onKeyUp(Activity.java:3926)
at android.view.KeyEvent.dispatch(KeyEvent.java:2933)
at android.app.Activity.dispatchKeyEvent(Activity.java:4304)
at androidx.core.app.ComponentActivity.superDispatchKeyEvent(ComponentActivity.java:124)
at androidx.core.view.KeyEventDispatcher.dispatchKeyEvent(KeyEventDispatcher.java:86)
at androidx.core.app.ComponentActivity.dispatchKeyEvent(ComponentActivity.java:142)
at androidx.appcompat.app.AppCompatActivity.dispatchKeyEvent(AppCompatActivity.java:601)
at androidx.appcompat.view.WindowCallbackWrapper.dispatchKeyEvent(WindowCallbackWrapper.java:60)
at androidx.appcompat.app.AppCompatDelegateImpl$AppCompatWindowCallback.dispatchKeyEvent(AppCompatDelegateImpl.java:3106)
at com.android.internal.policy.DecorView.dispatchKeyEvent(DecorView.java:442)
at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:6870)
at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:6731)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:6186)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:6248)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:6209)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:6379)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:6217)
at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:6436)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:6190)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:6248)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:6209)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:6217)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:6190)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:6248)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:6209)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:6412)
at android.view.ViewRootImpl$ImeInputStage.onFinishedInputEvent(ViewRootImpl.java:6592)
at android.view.inputmethod.InputMethodManager$PendingEvent.run(InputMethodManager.java:3778)
at android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback(InputMethodManager.java:3291)
at android.view.inputmethod.InputMethodManager.finishedInputEvent(InputMethodManager.java:3282)
at android.view.inputmethod.InputMethodManager$ImeInputEventSender.onInputEventFinished(InputMethodManager.java:3755)
at android.view.InputEventSender.dispatchInputEventFinished(InputEventSender.java:154)
at android.os.MessageQueue.nativePollOnce(Native Method)
at android.os.MessageQueue.next(MessageQueue.java:349)
at android.os.Looper.loopOnce(Looper.java:186)
at android.os.Looper.loop(Looper.java:351)
at android.app.ActivityThread.main(ActivityThread.java:8427)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:584)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1013)
```
Looks like the crash happens when the back button is pressed, popping a fragment off the back stack and causing HotspotIntroFragment to be recreated.Android 1.4https://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/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/1816Research multi-hop communication via social mesh2023-09-15T16:49:27ZakwizgranResearch multi-hop communication via social meshIdentify one or more possible solutions for propagating end-to-end encrypted data over the "social mesh" of connections between Briar users, by allowing devices to relay data they don't subscribe to.
Identify and evaluate any risks of p...Identify one or more possible solutions for propagating end-to-end encrypted data over the "social mesh" of connections between Briar users, by allowing devices to relay data they don't subscribe to.
Identify and evaluate any risks of passive information leaks or active attacks. Evaluate performance (e.g. fraction of messages delivered, delivery latency, bandwidth and battery use) taking the current single-hop sync as a baseline. Recommend whether any of the solutions should be incorporated into Briar.2022-12-31https://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/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/2387Add links to manual, quick start guide and FAQ from Google Play2023-08-28T16:11:48ZakwizgranAdd links to manual, quick start guide and FAQ from Google PlaySponsor 6 usability improvementshttps://code.briarproject.org/briar/briar/-/issues/2388Add links to manual, quick start guide, FAQ and privacy policy from GitHub2023-08-28T16:11:24ZakwizgranAdd links to manual, quick start guide, FAQ and privacy policy from GitHubSponsor 6 usability improvementshttps://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/1647IllegalStateException when choosing attachments to send2023-08-24T14:33:28ZakwizgranIllegalStateException when choosing attachments to send* Android version: 7.1.1
* Phone model: BQ Aquarius X5 Plus
* Briar version: 1.1.9 (debug build, d7c9bf8)
* User feedback: "Crashed when selecting two pictures to send."
Stacktrace:
```
java.lang.RuntimeException: Failure delivering res...* Android version: 7.1.1
* Phone model: BQ Aquarius X5 Plus
* Briar version: 1.1.9 (debug build, d7c9bf8)
* User feedback: "Crashed when selecting two pictures to send."
Stacktrace:
```
java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=13, result=-1, data=Intent { flg=0x43 clip={image/jpeg image/png image/gif U:content://com.android.providers.media.documents/document/image%3A87856 ...} }} to activity {org.briarproject.briar.android.debug/org.briarproject.briar.android.conversation.ConversationActivity}: java.lang.IllegalStateException
at android.app.ActivityThread.deliverResults(ActivityThread.java:4089)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:4132)
at android.app.ActivityThread.-wrap20(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1533)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
Caused by: java.lang.IllegalStateException
at org.briarproject.briar.android.attachment.AttachmentCreatorImpl.storeAttachments(AttachmentCreatorImpl.java:78)
at org.briarproject.briar.android.conversation.ConversationViewModel.storeAttachments(ConversationViewModel.java:206)
at org.briarproject.briar.android.view.TextAttachmentController.onNewUris(TextAttachmentController.java:185)
at org.briarproject.briar.android.view.TextAttachmentController.onImageReceived(TextAttachmentController.java:166)
at org.briarproject.briar.android.conversation.ConversationActivity.onActivityResult(ConversationActivity.java:304)
at android.app.Activity.dispatchActivityResult(Activity.java:6973)
at android.app.ActivityThread.deliverResults(ActivityThread.java:4085)
... 9 more
java.lang.IllegalStateException
at org.briarproject.briar.android.attachment.AttachmentCreatorImpl.storeAttachments(AttachmentCreatorImpl.java:78)
at org.briarproject.briar.android.conversation.ConversationViewModel.storeAttachments(ConversationViewModel.java:206)
at org.briarproject.briar.android.view.TextAttachmentController.onNewUris(TextAttachmentController.java:185)
at org.briarproject.briar.android.view.TextAttachmentController.onImageReceived(TextAttachmentController.java:166)
at org.briarproject.briar.android.conversation.ConversationActivity.onActivityResult(ConversationActivity.java:304)
at android.app.Activity.dispatchActivityResult(Activity.java:6973)
at android.app.ActivityThread.deliverResults(ActivityThread.java:4085)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:4132)
at android.app.ActivityThread.-wrap20(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1533)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
```Android 1.3Torsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/2266Check for API/behaviour changes in Android 13 that could affect Briar2023-07-03T11:21:13ZTorsten GroteCheck for API/behaviour changes in Android 13 that could affect Briar* https://developer.android.com/about/versions/13/behavior-changes-13
* https://blog.esper.io/android-13-deep-dive/
* https://commonsware.com/blog/2022/02/12/random-musings-android-13-dp1.html
* https://commonsware.com/blog/2022/03/19/ra...* https://developer.android.com/about/versions/13/behavior-changes-13
* https://blog.esper.io/android-13-deep-dive/
* https://commonsware.com/blog/2022/02/12/random-musings-android-13-dp1.html
* https://commonsware.com/blog/2022/03/19/random-musings-android-13-dp2.html
Changes that may affect us:
* [Low power standby](https://developer.android.com/reference/android/os/PowerManager.html#isLowPowerStandbyEnabled()) is a new power saving mode (apparently distinct from doze, light doze and power save mode) in which apps with foreground services lose network access and their wake locks are ignored. It's not clear whether doze exemption affects this mode. We should look for ADB commands that can be used to test this mode
* [Light idle mode](https://developer.android.com/reference/android/os/PowerManager#isDeviceLightIdleMode()) has also been added to the PowerManager API, although this may just be exposing the "light doze" mode that was [added in Android 7](https://developer.android.com/about/versions/nougat/android-7.0-changes#doze)
* [Apps are placed in the "restricted" app standby bucket](https://developer.android.com/about/versions/13/changes/battery#restricted-bucket) if they "drain a significant amount of device battery during a 24-hour period". This is likely to apply to Briar and Briar Mailbox. Apps are also placed in the "restricted" bucket if the user doesn't interact with them for 8 days. This is very likely to apply to Briar Mailbox and may also apply to Briar. Running a foreground service isn't enough to meet definition of "interaction" being used here. The [docs for app standby buckets](https://developer.android.com/topic/performance/appstandby#buckets) say "Apps that are on the Doze exemption list are exempted from the App Standby Bucket-based restrictions." We should test whether this remains true for the new restrictions. We should also add code to [log which bucket we're in](https://developer.android.com/reference/android/app/usage/UsageStatsManager#getAppStandbyBucket()) periodically
* [Apps need to ask permission to show notifications](https://developer.android.com/about/versions/13/changes/notification-permission) - if the app doesn't target API 33 then the permission prompt will be shown automatically when the notification channels are created, which in Briar's case happens after signing in
* The new [foreground services task manager](https://developer.android.com/about/versions/13/changes/fgs-manager) enables the user to stop foreground services. Stopping an app in this way is [roughly equivalent](https://developer.android.com/about/versions/13/changes/fgs-manager#compare-swipe-up-force-stop) to force-stopping the app, but just different enough to make sure we'll have to test both workflows. Related to #2010
* [New rules for intent filters](https://developer.android.com/about/versions/13/behavior-changes-13#security) could affect our use of intents to open other apps (such as manufacturer-specific power management apps). These rules apply if the app receiving the intent targets API 33 or higher, so it could take a while for any effects to be noticeable
Article: https://medium.com/androiddevelopers/making-sense-of-intent-filters-in-android-13-8f6656903dde
* We should check whether the [`RECEIVER_NOT_EXPORTED`](https://developer.android.com/reference/android/content/Context.html#RECEIVER_NOT_EXPORTED) flag is relevant to us (all our BroadcastReceivers are used for receiving system broadcasts)
* [`NEARBY_WIFI_DEVICES`](https://developer.android.com/reference/android/Manifest.permission#NEARBY_WIFI_DEVICES) permission - this replaces `ACCESS_FINE_LOCATION` for some wifi APIs. We should use the new permission and find out whether location services still need to be enabled for these APIs to work
* If the user places an app in the "restricted" state for background battery usage (which AFAICT is [unrelated](https://developer.android.com/topic/performance/power/power-details) to the "restricted" app standby bucket) then the app [can't run foreground services, schedule alarms or run jobs](https://developer.android.com/about/versions/13/changes/battery#restricted-background-battery-usage). If the app targets API 33 then it can't receive `ACTION_BOOT_COMPLETED` broadcasts either, which we use for the sign-in reminder
* [System notification for long-running foreground services](https://developer.android.com/about/versions/13/changes/battery#system-notification-long-running-fgs) ("APP is running in the background for a long time. Tap to review") - as CommonsWare says, the obvious response from developers is to add `FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK` or `FOREGROUND_SERVICE_TYPE_LOCATION`, and the obvious response from Google is to restrict those flags in the next update
* [System notification for excessive background battery usage](https://developer.android.com/about/versions/13/changes/battery#system-notification-battery-usage) - the docs say this notification will be shown after our foreground service finishes, ie after the user signs out, which may cause confusion
* I'm sure [TARE](https://blog.esper.io/android-13-deep-dive/#tare) will produce great value for users and won't just be the equivalent of adding a dice roll to every attempt to queue a job or schedule an alarm. We should keep it in mind when debugging alarm issues
* [Apps can release unused permissions](https://developer.android.com/about/versions/13/features#developer-downgradable-permissions) - this looks useful for privacy-conscious users but some care will be needed to integrate this into our app lifecycle, as the system kills the app asynchronously at some point after the API is called
* There's a [new AndroidX API for implementing in-app language pickers](https://developer.android.com/about/versions/13/features/app-languages#api-impl), which is great. The user can also pick a per-app language [through the system settings app](https://developer.android.com/about/versions/13/features/app-languages#app-language-settings), in which case "The list of available languages might not reflect the languages that your app supports". This will need testing
* There's a new API for [opting out of screenshots in the recent apps list](https://developer.android.com/reference/android/app/Activity.html#setRecentsScreenshotEnabled(boolean)) without preventing the user from taking screenshots. This may be useful if it doesn't open some other horrendous information leak
* [SystemClock#currentNetworkTimeClock()](https://developer.android.com/reference/android/os/SystemClock.html#currentNetworkTimeClock()) may be useful for diagnosing whether clock sync issues are due to misconfiguration or [NTP tampering](https://gitlab.torproject.org/tpo/core/tor/-/issues/26359)
* Apps with the `ACCESS_FINE_LOCATION` permission are [exempt from most of the power management changes in Android 13](https://developer.android.com/about/versions/13/changes/battery#exemptions), as are media players that are actively playing media. Perhaps Google thinks media players and navigation apps (or exercise trackers?) should be allowed to run in the background, which would be consistent with the apparent intent of previous loopholesTorsten GroteTorsten Grotehttps://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/2221Retire support for Android 42023-06-19T14:03:17ZakwizgranRetire support for Android 4We'll eventually need to drop support for Android 4 in order to be able to upgrade OkHttp (#2156). I don't think we should just raise our minSdkVersion and leave Android 4 users running an out-of-date version of Briar indefinitely. Inste...We'll eventually need to drop support for Android 4 in order to be able to upgrade OkHttp (#2156). I don't think we should just raise our minSdkVersion and leave Android 4 users running an out-of-date version of Briar indefinitely. Instead, we should set an expiry date and warn users that the app will stop working at that date, like we do with debug builds.
We should define a retirement period that ends at the expiry date, and release the following changes before the start of the retirement period, allowing enough time for most users to upgrade before the period starts:
* At the start of the retirement period, show a warning on Android 4 that Briar will stop working at the expiry date
* Refuse to start the app on Android 4 beyond the expiry date
The changes can be based on the existing code for expiring debug builds.
When the retirement period ends we can raise our min API level to 21 and upgrade OkHttp (and perhaps the emoji library, which also requires API 21 for the latest version, unless we've already resolved #2212 by switching to AppCompat for emoji).
If we release the changes above by the end of 2021, allow six months for users to upgrade before the retirement period starts, and allow another six months for the retirement period, then we can drop support for Android 4 at the end of 2022. (We can do everything faster than that if necessary, but I don't see any urgency.)
*Update:*
With !1577 and !1578 merged to master, the warning will show up on Android 4 on 2022-07-31. Briar will refuse to start on Android 4 on 2023-01-31.MailboxTorsten GroteTorsten Grote2023-01-31https://code.briarproject.org/briar/briar/-/issues/2156Upgrade OkHttp to 3.14.x2023-06-19T14:02:33ZakwizgranUpgrade OkHttp to 3.14.xhttps://square.github.io/okhttp/changelog_3x/#version-3130
OkHttp 3.12.x will receive critical bug fixes until the end of 2021. Newer versions drop support for Android 4, so when we upgrade we'll either need to drop support for Android ...https://square.github.io/okhttp/changelog_3x/#version-3130
OkHttp 3.12.x will receive critical bug fixes until the end of 2021. Newer versions drop support for Android 4, so when we upgrade we'll either need to drop support for Android 4 or restrict features that use HTTP (RSS feeds, mailbox) to Android 5+.
According to Google Play, 0.5% of devices running Briar use Android 4.
Depends on #2221.MailboxTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/1011Offline message delivery (mailbox)2023-06-19T14:01:29ZakwizgranOffline message delivery (mailbox)Two testers asked for the ability for messages to be delivered while the recipient is offline. "Some of my global contacts are rarely online with me."Two testers asked for the ability for messages to be delivered while the recipient is offline. "Some of my global contacts are rarely online with me."Mailbox2022-10-31https://code.briarproject.org/briar/briar/-/issues/346Some cameras can't focus on QR codes2023-06-08T12:13:45ZakwizgranSome cameras can't focus on QR codesSome testers found that their cameras couldn't focus on QR codes. This has also been an issue on some test devices:
* Sony Xperia Tipo
* Huawei Ascend Y520
* Huawei Ascend Y330
All of these devices have fixed-focus cameras. The s...Some testers found that their cameras couldn't focus on QR codes. This has also been an issue on some test devices:
* Sony Xperia Tipo
* Huawei Ascend Y520
* Huawei Ascend Y330
All of these devices have fixed-focus cameras. The size and resolution of the screen being scanned, and the resolution of the camera's preview image, may also be relevant. Scanning a small, low-resolution screen using a low-resolution, fixed-focus camera seems to be the hardest case (e.g. scanning the HTC Wildfire S using the Sony Xperia Tipo).
@ernir reported that the testers' devices were able to scan QR codes when using the zxing app - we should investigate what it's doing differently.Android Beta 2https://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/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.4akwizgranakwizgran