briar issueshttps://code.briarproject.org/groups/briar/-/issues2020-11-16T10:36:01Zhttps://code.briarproject.org/briar/briar/-/issues/1785NPE when no Bluetooth Adapter available2020-11-16T10:36:01ZTorsten GroteNPE when no Bluetooth Adapter available```ruby
'java.lang.String android.bluetooth.BluetoothAdapter.getAddress()' on a null object reference
at org.briarproject.bramble.util.AndroidUtils.getBluetoothAddressAndMethod(AndroidUtils.java:55)
at org.briarpr...```ruby
'java.lang.String android.bluetooth.BluetoothAdapter.getAddress()' on a null object reference
at org.briarproject.bramble.util.AndroidUtils.getBluetoothAddressAndMethod(AndroidUtils.java:55)
at org.briarproject.bramble.util.AndroidUtils.getBluetoothAddress(AndroidUtils.java:48)
at org.briarproject.bramble.plugin.bluetooth.AndroidBluetoothPlugin.getBluetoothAddress(AndroidBluetoothPlugin.java:138)
at org.briarproject.bramble.plugin.bluetooth.BluetoothPlugin.updateProperties(BluetoothPlugin.java:216)
````Android 1.2akwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/1507API 29: TorPlugin does not start2020-11-16T10:35:52ZTorsten GroteAPI 29: TorPlugin does not startOn Android Q, calling `exec()` on writable application files is [a W^X violation](https://issuetracker.google.com/issues/128554619#comment4) and represents an unsafe application practice, because apps with vulnerabilities can be exploite...On Android Q, calling `exec()` on writable application files is [a W^X violation](https://issuetracker.google.com/issues/128554619#comment4) and represents an unsafe application practice, because apps with vulnerabilities can be exploited to download code and execute it. We currently extract the Tor and obfsproxy binaries into our writeable app data dir, so we are affected by this policy change.
It should still be possible to package the binaries into the application's native libs directory and enable `android:extractNativeLibs=true` (is enabled by default), and then call `exec()` on the read-only `/data/app` artifacts. A similar approach is done with the `wrap.sh` functionality, documented at https://developer.android.com/ndk/guides/wrap-script#packaging_wrapsh .
> Additionally, please be aware that executables executed via exec() are not managed according to the Android process lifecycle, and generally speaking, exec() is discouraged from Android applications. While not Android documentation, https://stackoverflow.com/questions/16179062/using-exec-with-ndk covers this in some detail. Relying on exec() **may be problematic in future Android versions**.
Fixing this, might make #1278 a lot easier.Android 1.2akwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/1185Move native binary extraction to the Installer2020-11-16T10:35:40ZJulian DehmMove native binary extraction to the InstallerManually extracting the tor binary to the writable data directory could be dangerous. We should investigate the option to bundle the binary in a way that it gets extracted by the installer to a read-only directory as described here: http...Manually extracting the tor binary to the writable data directory could be dangerous. We should investigate the option to bundle the binary in a way that it gets extracted by the installer to a read-only directory as described here: https://twitter.com/CopperheadOS/status/917924329857474560
This might be done by disguising the binary as library file and moving it to jniLibs/<ABI>/tor.so
This would also allow us to use `targetSandboxVersion="2"`for improved security.Android 1.2akwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/1780Add method to mark message as read to REST API2020-11-16T10:35:24ZNicoAdd method to mark message as read to REST APIWhen exposing unread messages counters in https://code.briarproject.org/briar/briar/-/merge_requests/1283, I noticed that they were never set to 0. I propose the following HTTP method:
##### Marking messages as read
`POST /v1/messages/...When exposing unread messages counters in https://code.briarproject.org/briar/briar/-/merge_requests/1283, I noticed that they were never set to 0. I propose the following HTTP method:
##### Marking messages as read
`POST /v1/messages/read/{contactId}`
The `messageId` of the message to be marked as read
needs to be provided in the request body as follows:
```json
{
"messageId": "+AIMMgOCPFF8HDEhiEHYjbfKrg7v0G94inKxjvjYzA8="
}
```NicoNicohttps://code.briarproject.org/briar/briar/-/issues/1782Add method to delete all private messages to REST API2020-11-16T10:35:16ZNicoAdd method to delete all private messages to REST APINeeded for https://code.briarproject.org/briar/briar-gtk/-/issues/11.Needed for https://code.briarproject.org/briar/briar-gtk/-/issues/11.NicoNicohttps://code.briarproject.org/briar/briar/-/issues/1781Add method to change contact alias to REST API2020-11-16T10:35:09ZNicoAdd method to change contact alias to REST APINeeded for https://code.briarproject.org/briar/briar-gtk/-/issues/14 and https://code.briarproject.org/briar/python-briar-wrapper/-/issues/6.Needed for https://code.briarproject.org/briar/briar-gtk/-/issues/14 and https://code.briarproject.org/briar/python-briar-wrapper/-/issues/6.NicoNicohttps://code.briarproject.org/briar/briar/-/issues/1456Adaptive icons2020-11-16T10:33:14ZakwizgranAdaptive iconsA user asked us to add support for [adaptive icons](https://www.androidcentral.com/adaptive-icons).A user asked us to add support for [adaptive icons](https://www.androidcentral.com/adaptive-icons).Android 1.2akwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/1614Android studio - No dependency for integrity assertion2020-11-16T10:32:41ZjomocuAndroid studio - No dependency for integrity assertionI have finally managed to load the project correctly.
When I open android studio, everything appears right.
**Screenshot:** https://i.imgur.com/0ffGl14.png
But when trying to run the program on the virtual machine it shows me this erro...I have finally managed to load the project correctly.
When I open android studio, everything appears right.
**Screenshot:** https://i.imgur.com/0ffGl14.png
But when trying to run the program on the virtual machine it shows me this error ...
*No dependency for integrity assertion 'com.android.support.test.uiautomator:uiautomator-v18:2.1.3:uiautomator-v18-2.1.3.aar:15e6b3c7104859630bf844e31805aa7cb2eb4b385e6119ab34132c8258eee2c4'*
**Screenshot:** https://i.imgur.com/qMLVVqR.png
I am running the virtual machine "Nexus One API 23", I use android 6 without the api of google play.
Any idea how to solve this?
Thankshttps://code.briarproject.org/briar/briar/-/issues/1438Implement UX for sending image attachments2020-11-16T10:11:30ZTorsten GroteImplement UX for sending image attachmentsWhen the message field is empty, there's an image icon to attach an image:
![Image_Attachment_Preselection](/uploads/cfaa2500f2d39f3b4e9c540d8ce46b88/Image_Attachment_Preselection.png)
Clicking it opens the system file selector:
![Ima...When the message field is empty, there's an image icon to attach an image:
![Image_Attachment_Preselection](/uploads/cfaa2500f2d39f3b4e9c540d8ce46b88/Image_Attachment_Preselection.png)
Clicking it opens the system file selector:
![Image_Attachment_Selection__System_](/uploads/97ad63158569fd22d7dc35b28453e6e4/Image_Attachment_Selection__System_.png)
If chosen image is shown as a preview, with an option to cancel the operation and to add an image caption:
![Confirmation](/uploads/621ca864593e0670f654ebdc832fbf48/Confirmation.png)
A seascape image shows a black/grey or color picked from the image on the sides:
![Confirmation_Tall_Image](/uploads/9ca88cffecbed1ee167835ba5efdd167/Confirmation_Tall_Image.png)
Subtask of #1237.Android 1.3Torsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/1513Bluetooth dialog needs to be dismissed multiple times after rotating screen2020-11-15T19:12:00ZakwizgranBluetooth dialog needs to be dismissed multiple times after rotating screenSteps to reproduce:
* Start to add a nearby contact
* When the Bluetooth permission dialog is visible, rotate the screen
* Dismiss the dialog
* Expected: The dialog only needs to be dismissed once
* Actual: The dialog needs to be dismiss...Steps to reproduce:
* Start to add a nearby contact
* When the Bluetooth permission dialog is visible, rotate the screen
* Dismiss the dialog
* Expected: The dialog only needs to be dismissed once
* Actual: The dialog needs to be dismissed once, plus once for every time the screen was rotated
Test devices:
* Sony Xperia Tipo (Android 4.0.4)
* Motorola Moto E3 (Android 6.0)https://code.briarproject.org/briar/briar/-/issues/1795Show when messages were sent and received2020-11-15T18:43:45ZakwizgranShow when messages were sent and receivedA Google Play user asked for messages to show two timestamps: the time sent (on one side of the message bubble) and the time received/acked (on the other side).A Google Play user asked for messages to show two timestamps: the time sent (on one side of the message bubble) and the time received/acked (on the other side).https://code.briarproject.org/briar/briar/-/issues/1648AssertionError when creating key agreement error fragment2020-11-15T17:25:51ZakwizgranAssertionError when creating key agreement error fragment* Android version: 7.0
* Phone model: Xiaomi Redmi Note 4
* Briar version: 1.1.6 (4d26628)
* Locale: az_AZ
* User set locale: false
Stacktrace:
```
java.lang.AssertionError
at org.briarproject.briar.android.util.UiUtils.onSingle...* Android version: 7.0
* Phone model: Xiaomi Redmi Note 4
* Briar version: 1.1.6 (4d26628)
* Locale: az_AZ
* User set locale: false
Stacktrace:
```
java.lang.AssertionError
at org.briarproject.briar.android.util.UiUtils.onSingleLinkClick(UiUtils.java:200)
at org.briarproject.briar.android.keyagreement.ContactExchangeErrorFragment.onCreateView(ContactExchangeErrorFragment.java:70)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:2439)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1460)
at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1784)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1852)
at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:802)
at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2625)
at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2411)
at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2366)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2273)
at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:733)
at android.os.Handler.handleCallback(Handler.java:754)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:165)
at android.app.ActivityThread.main(ActivityThread.java:6375)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:912)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:802)
```
The assertion is that the text contains a single link. I'm guessing that the translation for az_AZ may be missing the link. Perhaps we should return silently in that case instead of throwing an error?Android 1.2Torsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/1717Window content is visible before UnlockActivity is shown on Android 11 dev pr...2020-11-15T16:05:04ZakwizgranWindow content is visible before UnlockActivity is shown on Android 11 dev previewAndroid version: 11 developer preview 2
User feedback:
> Opening NavDrawerActivity leaks visual content (contact list, time of the messages etc) for ≤1s before UnlockActivity is shown. Same result when the app is locked, and tapping a n...Android version: 11 developer preview 2
User feedback:
> Opening NavDrawerActivity leaks visual content (contact list, time of the messages etc) for ≤1s before UnlockActivity is shown. Same result when the app is locked, and tapping a notification to unlock the app. Interesting that this behaviour does not exist on AOSP R version at the moment, but on Google Pixel factory R versions.https://code.briarproject.org/briar/briar/-/issues/1772Delete blogs and comments does not work2020-11-15T14:20:25ZN6P4CFB1BSRSLDelete blogs and comments does not work**Version**
Briar 1.2.9
**Android version**
Android 10
**Description**
It is not possible to delete self created blogs and their comments individually or completely.
**Steps to reproduce**
1. Open Briar app and type the password
2...**Version**
Briar 1.2.9
**Android version**
Android 10
**Description**
It is not possible to delete self created blogs and their comments individually or completely.
**Steps to reproduce**
1. Open Briar app and type the password
2. Blogs -> Write Blog Post -> PUBLISH -> Add a comment -> REBLOG -> tap avatar icon -> More options -> Remove Blog
3. This does not work the function "Remove Blog" is grayed out.
Note: If do not want to delete blogs, but want to delete self created comments, not possible. A multiple select delete function for comments is missing.https://code.briarproject.org/briar/briar/-/issues/1841NavDrawerActivityTest fails with InitializationError on API 162020-11-11T16:56:24ZakwizgranNavDrawerActivityTest fails with InitializationError on API 16NavDrawerActivityTest fails on the API 16 emulator because it can't find javax.inject.Inject.
```
java.lang.RuntimeException: Delegate runner 'androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner' for AndroidJUnit4 could not be...NavDrawerActivityTest fails on the API 16 emulator because it can't find javax.inject.Inject.
```
java.lang.RuntimeException: Delegate runner 'androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner' for AndroidJUnit4 could not be loaded.
at androidx.test.ext.junit.runners.AndroidJUnit4.throwInitializationError(AndroidJUnit4.java:92)
at androidx.test.ext.junit.runners.AndroidJUnit4.loadRunner(AndroidJUnit4.java:82)
at androidx.test.ext.junit.runners.AndroidJUnit4.loadRunner(AndroidJUnit4.java:51)
at androidx.test.ext.junit.runners.AndroidJUnit4.<init>(AndroidJUnit4.java:46)
at java.lang.reflect.Constructor.constructNative(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:104)
at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:86)
at androidx.test.internal.runner.junit4.AndroidAnnotatedBuilder.runnerForClass(AndroidAnnotatedBuilder.java:63)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:26)
at androidx.test.internal.runner.AndroidRunnerBuilder.runnerForClass(AndroidRunnerBuilder.java:153)
at androidx.test.internal.runner.TestLoader$ScanningRunnerBuilder.runnerForClass(TestLoader.java:143)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
at androidx.test.internal.runner.TestLoader.doCreateRunner(TestLoader.java:73)
at androidx.test.internal.runner.TestLoader.getRunnersFor(TestLoader.java:104)
at androidx.test.internal.runner.TestRequestBuilder.build(TestRequestBuilder.java:793)
at androidx.test.runner.AndroidJUnitRunner.buildRequest(AndroidJUnitRunner.java:547)
at androidx.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:390)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1584)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Constructor.constructNative(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
at androidx.test.ext.junit.runners.AndroidJUnit4.loadRunner(AndroidJUnit4.java:72)
... 18 more
Caused by: java.lang.NoClassDefFoundError: javax/inject/Inject
at java.lang.reflect.Field.getDeclaredAnnotations(Native Method)
at java.lang.reflect.Field.getDeclaredAnnotations(Field.java:204)
at java.lang.reflect.AccessibleObject.getAnnotations(AccessibleObject.java:138)
at org.junit.runners.model.FrameworkField.getAnnotations(FrameworkField.java:31)
at org.junit.runners.model.TestClass.addToAnnotationLists(TestClass.java:84)
at org.junit.runners.model.TestClass.scanAnnotatedMembers(TestClass.java:71)
at org.junit.runners.model.TestClass.<init>(TestClass.java:57)
at org.junit.runners.ParentRunner.createTestClass(ParentRunner.java:88)
at org.junit.runners.ParentRunner.<init>(ParentRunner.java:83)
at org.junit.runners.BlockJUnit4ClassRunner.<init>(BlockJUnit4ClassRunner.java:65)
at androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner.<init>(AndroidJUnit4ClassRunner.java:43)
at androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner.<init>(AndroidJUnit4ClassRunner.java:48)
... 21 more
Caused by: java.lang.ClassNotFoundException: javax.inject.Inject
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61)
at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
... 33 more
```Android 1.2akwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/68Allow private messages to be deleted2020-11-06T11:48:08ZakwizgranAllow private messages to be deletedFeedback from a user: "We should be able to delete our half of private messages. When the second party deletes their half of the conversation it should be completely deleted."
Private messages include invitations and responses in sharin...Feedback from a user: "We should be able to delete our half of private messages. When the second party deletes their half of the conversation it should be completely deleted."
Private messages include invitations and responses in sharing and introduction protocols. Forum, blog and private group clients all depend on the invitation message being available when the accept message is received, so they can get the group descriptor from the invitation message in order to add the group.
We can easily migrate that information into the session. For this we need a way for clients to run migrations. The first phase of the message deletion work would be to add some kind of client migration mechanism.
Android 1.2https://code.briarproject.org/briar/briar-gtk/-/issues/31Implement notifications2020-11-02T13:43:27ZNicoImplement notificationsMeta issue:
* https://code.briarproject.org/briar/briar-gtk/issues/28
* https://code.briarproject.org/briar/briar-gtk/issues/29
* https://code.briarproject.org/briar/briar-gtk/issues/57Meta issue:
* https://code.briarproject.org/briar/briar-gtk/issues/28
* https://code.briarproject.org/briar/briar-gtk/issues/29
* https://code.briarproject.org/briar/briar-gtk/issues/57GTK 0.1.0-beta2https://code.briarproject.org/briar/briar/-/issues/1739Create Debian Source Package for Briar Headless2020-10-31T12:52:40ZNicoCreate Debian Source Package for Briar HeadlessTo get Briar GTK into Debian (or to at least provide a .deb installation method), we need to create a Debian package for Briar Headless that builds everything from source. !1252 brought at least a binary package.
Related issues:
* https...To get Briar GTK into Debian (or to at least provide a .deb installation method), we need to create a Debian package for Briar Headless that builds everything from source. !1252 brought at least a binary package.
Related issues:
* https://code.briarproject.org/briar/briar-gtk/-/issues/39
* https://code.briarproject.org/briar/python-briar-wrapper/-/issues/14https://code.briarproject.org/briar/briar/-/issues/1677Headless: alias missing from contacts response when same as author's name2020-10-31T12:52:40ZNicoHeadless: alias missing from contacts response when same as author's nameIn [headless' readme](https://code.briarproject.org/briar/briar/blob/6a31274b76781d540e3a2875160dd352a48a8335/briar-headless/README.md#listing-all-contacts) an example of a response is shown that contains the key `alias`. When `alias` is...In [headless' readme](https://code.briarproject.org/briar/briar/blob/6a31274b76781d540e3a2875160dd352a48a8335/briar-headless/README.md#listing-all-contacts) an example of a response is shown that contains the key `alias`. When `alias` is the same as `author->name`, Briar headless leaves out the `alias` key and only answers with `author->name`.
### Steps to reproduce
Add a contact remotely and give it an alias equal to the contact's self chosen nickname.
### Excepted behavior
Both @fphemeral and I thought that the response would always contain an alias. At least when the user gives the contact an alias.
### Actual behavior
If `alias` matches `author->name`, `alias` is dropped from the response.
### Proposed solution
Either explicitly state in the documentation that the `alias` key is not guaranteed to get delivered all the time, or change the output to always contain an `alias` key.
### Related resources
* [the commit where I added a check for this](https://code.briarproject.org/nicoalt/briar-gtk/commit/4d1acc7c4c278ece5cb4e920a38d9910d70b5b95) in Briar GTK
* [my proposed merge request](https://code.briarproject.org/fphemeral/briar_repl/merge_requests/1) at _briar_repl_NicoNicohttps://code.briarproject.org/briar/briar/-/issues/1577Some questions about Headless API2020-10-31T12:52:40ZNicoSome questions about Headless API@grote asked me to read carefully over the [Briar Headless API documentation](https://code.briarproject.org/briar/briar/blob/release-1.1.7/briar-headless/README.md) in order to find things that needs more explanation. And I do have some ...@grote asked me to read carefully over the [Briar Headless API documentation](https://code.briarproject.org/briar/briar/blob/release-1.1.7/briar-headless/README.md) in order to find things that needs more explanation. And I do have some questions that I'll copy-paste from our chat into separate discussion boxes below. With these questions, I hope to make clear in how far the documentation needs to be improved in order to make it easier for third-party developers to implement the API.Headless MVPNicoNico