briar issueshttps://code.briarproject.org/groups/briar/-/issues2020-08-14T11:32:43Zhttps://code.briarproject.org/briar/briar/-/issues/1435[android] Migrate to HtmlCompat2020-08-14T11:32:43ZTorsten Grote[android] Migrate to HtmlCompat`UiUtils#getSpanned()` should use the new HtmlCompat.
https://commonsware.com/blog/2018/05/29/at-last-htmlcompat.html`UiUtils#getSpanned()` should use the new HtmlCompat.
https://commonsware.com/blog/2018/05/29/at-last-htmlcompat.htmlAndroid 1.2https://code.briarproject.org/briar/briar/-/issues/1437List of recently used emoji is reversed2018-12-19T12:27:05ZTorsten GroteList of recently used emoji is reversedSo I've been eating my own dog food and always had issues finding my emoji until I realized that the emoji I had used last is always at the *end* of the list instead of at the *beginning* where I would expected it.So I've been eating my own dog food and always had issues finding my emoji until I realized that the emoji I had used last is always at the *end* of the list instead of at the *beginning* where I would expected it.Android 1.1Torsten GroteTorsten Grotehttps://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/1442Use v3 hidden service for crash reports and feedback2021-11-17T13:38:12ZakwizgranUse v3 hidden service for crash reports and feedbackVersions of Briar that support v3 hidden services should use a v3 service for crash reports and feedback. The old service can be retired eventually when most users have upgraded.
Creating this here rather than in https://code.briarproje...Versions of Briar that support v3 hidden services should use a v3 service for crash reports and feedback. The old service can be retired eventually when most users have upgraded.
Creating this here rather than in https://code.briarproject.org/briar/admin because it requires some small code changes.https://code.briarproject.org/briar/briar/-/issues/1445Change app lock password2023-02-06T14:50:21ZakwizgranChange app lock passwordA user asked for the ability to change the app lock password.A user asked for the ability to change the app lock password.https://code.briarproject.org/briar/briar/-/issues/1446SecurityException when starting TestDataActivity with multiple Briar versions...2018-11-07T09:52:46ZakwizgranSecurityException when starting TestDataActivity with multiple Briar versions installed* Android version: 7.1.2
* Phone model: Motorola Moto G4 (lineage_athene)
* Briar version: 1.1.3 (93090f0, a debug build for testing the remote contact UX)
* Package name: org.briarproject.briar.android.debug.qr
Stack trace:
```
java.la...* Android version: 7.1.2
* Phone model: Motorola Moto G4 (lineage_athene)
* Briar version: 1.1.3 (93090f0, a debug build for testing the remote contact UX)
* Package name: org.briarproject.briar.android.debug.qr
Stack trace:
```
java.lang.SecurityException: Permission Denial: starting Intent { cmp=org.briarproject.briar.android.debug/org.briarproject.briar.android.test.TestDataActivity } from ProcessRecord{81ac00c 16789:org.briarproject.briar.android.debug.qr/u0a88} (pid=16789, uid=10088) not exported from uid 10087
at android.os.Parcel.readException(Parcel.java:1684)
at android.os.Parcel.readException(Parcel.java:1637)
at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:3101)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1520)
at android.app.Activity.startActivityForResult(Activity.java:4229)
at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:767)
at android.app.Activity.startActivityForResult(Activity.java:4187)
at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:754)
at android.app.Activity.startActivity(Activity.java:4526)
at android.app.Activity.startActivity(Activity.java:4494)
at android.content.ContextWrapper.startActivity(ContextWrapper.java:356)
at android.support.v7.preference.Preference.performClick(Preference.java:1180)
at android.support.v7.preference.Preference.performClick(Preference.java:1148)
at android.support.v7.preference.Preference$1.onClick(Preference.java:172)
at android.view.View.performClick(View.java:5637)
at android.view.View$PerformClick.run(View.java:22433)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6186)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779)
```
It looks like the intent is trying to open an activity that belongs to another version of Briar with a different package name (org.briarproject.briar.android.debug rather than org.briarproject.briar.android.debug.qr).
Although this was a debug build, I'm opening a ticket because it suggests something unexpected is happening in the way intents are handled - shouldn't they always be routed to the same app by default if a component is specified?Julian DehmJulian Dehmhttps://code.briarproject.org/briar/briar/-/issues/1449Why not migrate to v3 hidden Service address ?2018-11-07T15:09:55ZveraWhy not migrate to v3 hidden Service address ?Why does briar still generate only onion2 address even though the tor-android-binary can work with hidden service v3 now? https://code.briarproject.org/briar/briar/blob/master/bramble-core/src/main/java/org/briarproject/bramble/plugin/to...Why does briar still generate only onion2 address even though the tor-android-binary can work with hidden service v3 now? https://code.briarproject.org/briar/briar/blob/master/bramble-core/src/main/java/org/briarproject/bramble/plugin/tor/TorPlugin.java#L449
And I found the `NEW:BEST` in https://github.com/akwizgran/jtorctl/blob/master/net/freehaven/tor/control/TorControlConnection.java#L763 always generate RSA1024 key, and it should use `NEW:ED25519-V3` to generate ed25519 key.https://code.briarproject.org/briar/briar/-/issues/1450"All tests" run confguration doesn't run briar-android tests2018-11-27T10:00:04Zakwizgran"All tests" run confguration doesn't run briar-android testsThe "All tests" run configuration for Android Studio stops after running the briar-headless tests, so the briar-android tests aren't run.The "All tests" run configuration for Android Studio stops after running the briar-headless tests, so the briar-android tests aren't run.Android 1.1Torsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/1451"All in briar-headless" run configuration runs tests in other modules2018-11-07T17:47:51Zakwizgran"All in briar-headless" run configuration runs tests in other modulesThe "All in briar-headless" run configuration in Android Studio runs tests in other modules as well as briar-headless. It seems to be picking up JUnit 4 tests from all modules.The "All in briar-headless" run configuration in Android Studio runs tests in other modules as well as briar-headless. It seems to be picking up JUnit 4 tests from all modules.Android 1.1Torsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/1452Websocket Authentication2018-11-27T10:00:33ZTorsten GroteWebsocket AuthenticationDespite many (older) claims in the internet that you can establish websocket connections with basic auth, this doesn't seem to be true for javascript libraries running in a recent browser. I managed to do it in Python and assumed it will...Despite many (older) claims in the internet that you can establish websocket connections with basic auth, this doesn't seem to be true for javascript libraries running in a recent browser. I managed to do it in Python and assumed it will just work on browsers as well, but it seems that isn't the case. At least I haven't been able to make this work. The only thing we can send in the upgrade request from a browser is a list of protocols. In absence of a standardized authentication mechanism, there's people using this already to pass auth tokens. I confirmed that we can access this header on the server side and check if there's an auth token in it.
If we don't want that hacky (but easy) solution, I am afraid we need to get into the business of tracking each session's authentication state and require them to send a first message with the token before we start sending stuff to it. Maybe even terminate sessions that haven't authenticated after a timeout.Headless MVPTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar-manual/-/issues/2the link to the Briar application on Google Play in the user manual is broken2018-11-09T15:57:43ZRoman Beslikme@beroal.in.uathe link to the Briar application on Google Play in the user manual is brokenIn the chapter "Installation". The error message is "URL not found".In the chapter "Installation". The error message is "URL not found".https://code.briarproject.org/briar/briar/-/issues/1453the link to the Briar application on Google Play in the user manual is broken2018-11-27T09:59:45ZRoman Beslikme@beroal.in.uathe link to the Briar application on Google Play in the user manual is brokenIn the chapter "Installation". The error message is "URL not found".In the chapter "Installation". The error message is "URL not found".Android 1.1Roman Beslikme@beroal.in.uaRoman Beslikme@beroal.in.uahttps://code.briarproject.org/briar/briar/-/issues/1454ArrayIndexOutOfBoundsException in SettingsActivity2019-11-06T09:47:05ZakwizgranArrayIndexOutOfBoundsException in SettingsActivityI'm guessing this may be related to removing the system default option for the dark theme.
* Android version: 8.0.0
* Phone model: Samsung SM-G965F (star2ltexx)
* Briar version: 1.1.4
Stacktrace:
```
java.lang.ArrayIndexOutOfBoundsExce...I'm guessing this may be related to removing the system default option for the dark theme.
* Android version: 8.0.0
* Phone model: Samsung SM-G965F (star2ltexx)
* Briar version: 1.1.4
Stacktrace:
```
java.lang.ArrayIndexOutOfBoundsException: length=3; index=3
at android.support.v7.preference.ListPreference.getEntry(ListPreference.java:229)
at android.support.v7.preference.ListPreference.getSummary(ListPreference.java:174)
at android.support.v7.preference.Preference.onBindViewHolder(Preference.java:584)
at android.support.v7.preference.PreferenceGroupAdapter.onBindViewHolder(PreferenceGroupAdapter.java:381)
at android.support.v7.preference.PreferenceGroupAdapter.onBindViewHolder(PreferenceGroupAdapter.java:45)
at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:6781)
at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:6823)
at android.support.v7.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:5752)
at android.support.v7.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:6019)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5858)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5854)
at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2230)
at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1557)
at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1517)
at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:612)
at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3924)
at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3641)
at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:4194)
at android.view.View.layout(View.java:20822)
at android.view.ViewGroup.layout(ViewGroup.java:6401)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
at android.view.View.layout(View.java:20822)
at android.view.ViewGroup.layout(ViewGroup.java:6401)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1791)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1635)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1544)
at android.view.View.layout(View.java:20822)
at android.view.ViewGroup.layout(ViewGroup.java:6401)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
at android.view.View.layout(View.java:20822)
at android.view.ViewGroup.layout(ViewGroup.java:6401)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
at android.view.View.layout(View.java:20822)
at android.view.ViewGroup.layout(ViewGroup.java:6401)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
at android.view.View.layout(View.java:20822)
at android.view.ViewGroup.layout(ViewGroup.java:6401)
at android.support.v7.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:444)
at android.view.View.layout(View.java:20822)
at android.view.ViewGroup.layout(ViewGroup.java:6401)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
at android.view.View.layout(View.java:20822)
at android.view.ViewGroup.layout(ViewGroup.java:6401)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
at android.view.View.layout(View.java:20822)
at android.view.ViewGroup.layout(ViewGroup.java:6401)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
at android.view.View.layout(View.java:20822)
at android.view.ViewGroup.layout(ViewGroup.java:6401)
at android.support.v7.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:444)
at android.view.View.layout(View.java:20822)
at android.view.ViewGroup.layout(ViewGroup.java:6401)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
at android.view.View.layout(View.java:20822)
at android.view.ViewGroup.layout(ViewGroup.java:6401)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1791)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1635)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1544)
at android.view.View.layout(View.java:20822)
at android.view.ViewGroup.layout(ViewGroup.java:6401)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
at com.android.internal.policy.DecorView.onLayout(DecorView.java:944)
at android.view.View.layout(View.java:20822)
at android.view.ViewGroup.layout(ViewGroup.java:6401)
at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2948)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2635)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1779)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7810)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:911)
at android.view.Choreographer.doCallbacks(Choreographer.java:723)
at android.view.Choreographer.doFrame(Choreographer.java:658)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:897)
at android.os.Handler.handleCallback(Handler.java:789)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6938)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
```Android 1.2Torsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/1455NPE when getting stream context2018-11-27T10:00:48ZakwizgranNPE when getting stream context* Android version: 8.1.0
* Phone model: Xiaomi Redmi Note 4 (lineage_mido)
* Briar version: 1.1.4 (d02b30e)
Stacktrace:
```
java.lang.NullPointerException
at org.briarproject.bramble.db.DatabaseComponentImpl.transactionWithResul...* Android version: 8.1.0
* Phone model: Xiaomi Redmi Note 4 (lineage_mido)
* Briar version: 1.1.4 (d02b30e)
Stacktrace:
```
java.lang.NullPointerException
at org.briarproject.bramble.db.DatabaseComponentImpl.transactionWithResult(DatabaseComponentImpl.java:187)
at org.briarproject.bramble.transport.KeyManagerImpl.getStreamContext(KeyManagerImpl.java:152)
at org.briarproject.bramble.plugin.ConnectionManagerImpl$ManageIncomingDuplexConnection.run(ConnectionManagerImpl.java:248)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
at java.lang.Thread.run(Thread.java:764)
```Android 1.1akwizgranakwizgranhttps://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/1459IllegalArgumentException when activating keys2021-08-27T11:37:48ZakwizgranIllegalArgumentException when activating keys* Android version: 8.0
* Phone model: Huawei P8 Lite 2017 (HWPRA-H)
* Briar version: 1.1.1 and 1.1.3
Google Play has 12 occurrences of this crash across a three-day period: eight crashes on 1.1.3 and four on 1.1.1. The crashes on 1.1.3 ...* Android version: 8.0
* Phone model: Huawei P8 Lite 2017 (HWPRA-H)
* Briar version: 1.1.1 and 1.1.3
Google Play has 12 occurrences of this crash across a three-day period: eight crashes on 1.1.3 and four on 1.1.1. The crashes on 1.1.3 and 1.1.1 are interleaved in time, suggesting they come from two or more devices.
Stacktrace:
```
java.lang.IllegalArgumentException:
at org.briarproject.bramble.transport.TransportKeyManagerImpl.activateKeys (TransportKeyManagerImpl.java:206)
at org.briarproject.bramble.transport.KeyManagerImpl.activateKeys (KeyManagerImpl.java:123)
at org.briarproject.briar.introduction.IntroduceeProtocolEngine.onRemoteActivate (IntroduceeProtocolEngine.java:501)
at org.briarproject.briar.introduction.IntroduceeProtocolEngine.onActivateMessage (IntroduceeProtocolEngine.java:215)
at org.briarproject.briar.introduction.IntroduceeProtocolEngine.onActivateMessage (IntroduceeProtocolEngine.java:53)
at org.briarproject.briar.introduction.IntroductionManagerImpl.handleMessage (IntroductionManagerImpl.java:235)
at org.briarproject.briar.introduction.IntroductionManagerImpl.incomingMessage (IntroductionManagerImpl.java:193)
at org.briarproject.briar.client.BdfIncomingMessageHook.incomingMessage (BdfIncomingMessageHook.java:60)
at org.briarproject.bramble.sync.ValidationManagerImpl.deliverMessage (ValidationManagerImpl.java:334)
at org.briarproject.bramble.sync.ValidationManagerImpl.storeMessageContext (ValidationManagerImpl.java:295)
at org.briarproject.bramble.sync.ValidationManagerImpl.lambda$storeMessageContextAsync$3$ValidationManagerImpl (ValidationManagerImpl.java:259)
at org.briarproject.bramble.sync.ValidationManagerImpl$$Lambda$5.run (Unknown Source:10)
at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1162)
at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:636)
at java.lang.Thread.run (Thread.java:784)
```Android 1.3akwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/1460Introduction to existing contact shows wrong message2018-11-27T10:00:12ZakwizgranIntroduction to existing contact shows wrong messageWhen an existing contact is introduced, the text of the introduction request doesn't change as it should.When an existing contact is introduced, the text of the introduction request doesn't change as it should.Android 1.1akwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/1461Conversation UI uses java.util.Objects, which requires API 192018-11-15T11:12:12ZakwizgranConversation UI uses java.util.Objects, which requires API 19ConversationActivity and ConversationViewModel use Objects.requireNonNull(), which was added in Java 7 and requires API 19 on Android.
Strangely, although the tooltip in Android Studio shows the API 19 requirement, the IDE and compiler ...ConversationActivity and ConversationViewModel use Objects.requireNonNull(), which was added in Java 7 and requires API 19 on Android.
Strangely, although the tooltip in Android Studio shows the API 19 requirement, the IDE and compiler don't complain about the missing method. The method works as expected: if null is passed, it throws a NullPointerException. But the stacktrace starts at the caller, not at Objects.requireNonNull().
It seems the method's being inlined at some point, perhaps by ProGuard or desugar. Setting `-dontoptimize` in the ProGuard config, which should disable inlining, doesn't make a difference.
I think we should probably remove calls to this method, as we don't know where it's being inlined, and if it stopped being inlined in the future the app would fail to start on API < 19.Android 1.1Julian DehmJulian Dehmhttps://code.briarproject.org/briar/briar/-/issues/1462How to change username?2019-11-04T15:38:10ZThibault LemaireHow to change username?Hello, I'm playing around with Briar for now (I understand it's still not production ready yet). Great features so far!
So I'll play dumb on this one: __How can I change my username?__
I understand my identity is represented by a publi...Hello, I'm playing around with Briar for now (I understand it's still not production ready yet). Great features so far!
So I'll play dumb on this one: __How can I change my username?__
I understand my identity is represented by a public key, so I should be able to change my username without losing my contacts, right?
I haven't found any screen where I could do that.https://code.briarproject.org/briar/briar/-/issues/1463Delete blog posts2018-12-19T12:27:18ZThibault LemaireDelete blog postsI've posted some blogs that I'm not proud of, e.g.
> ALL HAIL OUR GOD THE FLYING SPAGHETTI MONSTER
and I'd like to delete them, so they don't get broadcast to every new contact I add.I've posted some blogs that I'm not proud of, e.g.
> ALL HAIL OUR GOD THE FLYING SPAGHETTI MONSTER
and I'd like to delete them, so they don't get broadcast to every new contact I add.