briar issueshttps://code.briarproject.org/groups/briar/-/issues2021-02-16T23:17:23Zhttps://code.briarproject.org/briar/briar/-/issues/1925More config options for metered connection/mobile data2021-02-16T23:17:23ZJens KorteMore config options for metered connection/mobile dataAndroid distinguishes between metered and non-metered connections. It could be useful, if users can decide, when to connect to the tor-network. The mobile option is a similar option.
~~Does an option like "connect once per hour until al...Android distinguishes between metered and non-metered connections. It could be useful, if users can decide, when to connect to the tor-network. The mobile option is a similar option.
~~Does an option like "connect once per hour until all messages are received" or "disconnect after fetching all messages" make sense? An extreme way to configure this would be to offer an repeating event configuration like a calendar software, but I am unsure, if this would be a privacy related issue, because the connections could get predictable. On the other hand this could save bandwidth and battery, if people would agree upon connect every beginning of an hour for some minutes.~~ see #1588
Original issue: https://code.briarproject.org/briar/briar-manual/-/issues/7https://code.briarproject.org/briar/briar/-/issues/1926Crash after account creation on Samsung Ultra devices2022-02-28T13:48:05ZakwizgranCrash after account creation on Samsung Ultra devicesThree users reported via Google Play that the app crashes at startup on their Samsung devices (Galaxy Note20 Ultra 5G, Galaxy S21 Ultra 5G).
One of the users reported that the app crashes every time after tapping "create account". The u...Three users reported via Google Play that the app crashes at startup on their Samsung devices (Galaxy Note20 Ultra 5G, Galaxy S21 Ultra 5G).
One of the users reported that the app crashes every time after tapping "create account". The user sent a partial crash report by email, since the app didn't reach the point where the report could be sent via Tor.
Stacktrace:
```
Failed to allocate a 1040 byte allocation with 115624 free bytes and 112KB until OOM, target footprint 268435456, growth limit 268435456; failed due to fragmentation (largest possible contiguous allocation 97255424 bytes)
java.lang.OutOfMemoryError: Failed to allocate a 1040 byte allocation with 115624 free bytes and 112KB until OOM, target footprint 268435456, growth limit 268435456; failed due to fragmentation (largest possible contiguous allocation 97255424 bytes)
at org.spongycastle.util.Arrays.clone(Arrays.java:671)
at org.spongycastle.crypto.generators.SCrypt.SMix(SCrypt.java:126)
at org.spongycastle.crypto.generators.SCrypt.MFcrypt(SCrypt.java:87)
at org.spongycastle.crypto.generators.SCrypt.generate(SCrypt.java:66)
at org.briarproject.bramble.crypto.ScryptKdf.measureDuration(ScryptKdf.java:48)
at org.briarproject.bramble.crypto.ScryptKdf.chooseCostParameter(ScryptKdf.java:38)
at org.briarproject.bramble.crypto.CryptoComponentImpl.encryptWithPassword(CryptoComponentImpl.java:328)
at org.briarproject.bramble.account.AccountManagerImpl.encryptAndStoreDatabaseKey(AccountManagerImpl.java:182)
at org.briarproject.bramble.account.AccountManagerImpl.createAccount(AccountManagerImpl.java:173)
at org.briarproject.briar.android.account.SetupControllerImpl.lambda$createAccount$0(SetupControllerImpl.java:111)
at org.briarproject.briar.android.account.SetupControllerImpl.lambda$createAccount$0$SetupControllerImpl(Unknown Source:0)
at org.briarproject.briar.android.account.-$$Lambda$SetupControllerImpl$d4VGO9XJWxzmTk5cXfL8og-qX7I.run(Unknown Source:8)
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)
```
Memory info:
```
SystemMemoryFree: 4696301568
SystemMemoryThreshold: 226492416
SystemMemoryTotal: 11047866368
VirtualMachineMemoryAllocated: 268435456
VirtualMachineMemoryFree: 249255432
VirtualMachineMemoryMaximum: 268435456
```
The issue appears to be that scrypt is exhausting the available memory while trying to choose a cost parameter. The phone has 12 GB of memory and a 256 MB heap.
We might be able to avoid the issue by capping the scrypt cost parameter so that scrypt's expected memory usage isn't more than half of the max heap size.Android 1.2akwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/1927Make entire crash report/feedback exportable2021-02-08T17:30:19ZakwizgranMake entire crash report/feedback exportableThe crash report/feedback entries are selectable individually but not collectively. A tester asked for them to be selectable/exportable/shareable collectively for easier sending of reports via other means when Tor isn't available.The crash report/feedback entries are selectable individually but not collectively. A tester asked for them to be selectable/exportable/shareable collectively for easier sending of reports via other means when Tor isn't available.https://code.briarproject.org/briar/briar/-/issues/1929Scan QR codes from DigiSafeGuard encryption app2021-02-10T15:09:30ZRion OcerusScan QR codes from DigiSafeGuard encryption appThis app could be much more robust, if preparation was made to share, & have shared QR codes from DigiSafe Guard (DSG)from SecuryptoThis app could be much more robust, if preparation was made to share, & have shared QR codes from DigiSafe Guard (DSG)from Securyptohttps://code.briarproject.org/briar/briar/-/issues/1930Show actual auto-delete timer duration in UI2021-03-01T17:05:35ZTorsten GroteShow actual auto-delete timer duration in UISince we only support a fixed timer for disappearing messages, the UI currently shows a static text (one week) for the duration.
However, to make changing the timer possible in the future without client version upgraded, we should alrea...Since we only support a fixed timer for disappearing messages, the UI currently shows a static text (one week) for the duration.
However, to make changing the timer possible in the future without client version upgraded, we should already show the actual timer that is being used, so that old clients can show the actual duration used by future clients.Self-destructing messagesakwizgranakwizgran2021-01-31https://code.briarproject.org/briar/briar/-/issues/1931Add new contact FAB labels not visible in landscape orientation2021-02-11T13:25:47ZIvanaAdd new contact FAB labels not visible in landscape orientationWth your device in landscape orientation
Tap on + to add a contact
The icons for adding contacts at a distance or nearby are visible, but labels are not so user doesn't know what to tap.
The workaround is: use phone in portrait orienta...Wth your device in landscape orientation
Tap on + to add a contact
The icons for adding contacts at a distance or nearby are visible, but labels are not so user doesn't know what to tap.
The workaround is: use phone in portrait orientation, where labels are clearly visible
(Mattermost conversation 11/2/21: perhaps solution is to stack icons vertically?)
Low priority as the contact creation is successful in both landscape and portrait, plus workaround super easy - it's jsut a matter of labels showing/not showing...https://code.briarproject.org/briar/briar/-/issues/1932API 28 emulator stalled on "decrypting database..." screen2021-02-16T23:16:46ZSebastianAPI 28 emulator stalled on "decrypting database..." screenI tested the current master on a bunch of devices and emulators.
On API 28 I got the problem that briar does not get past the "decrypting database..." screen after entering the password. When switching back to a different app and then ba...I tested the current master on a bunch of devices and emulators.
On API 28 I got the problem that briar does not get past the "decrypting database..." screen after entering the password. When switching back to a different app and then back to briar, I'm properly logged in and can see the contact list.
Tried to reproduce on other devices, but it only appears on my API 28 emulator. Also tried emulators with levels 23, 24, 29 and 30 as well as real devices with levels 16 and 23. All work fine.
@akwizgran you do have API level 28 devices, maybe you could try and see if the problem can be reproduced there?https://code.briarproject.org/briar/briar/-/issues/1933Testing new release (test issue)2022-02-25T15:03:13ZSebastianTesting new release (test issue)Briar settings:
Settings > Connections >
- Connect to contact via bluetooth = off
- Connect to contacts on the same wi-fi network = off
- Connect to contacts via internet = on
Device settngs:
- Wi-fi = on
- Bluetooth = off
Scenarios...Briar settings:
Settings > Connections >
- Connect to contact via bluetooth = off
- Connect to contacts on the same wi-fi network = off
- Connect to contacts via internet = on
Device settngs:
- Wi-fi = on
- Bluetooth = off
Scenarios:
1. Both devices online at the same time
- [ ] Use two devices with above settings and exchange their connection codes(send via email, sms, other chat apps etc) using the share button
- [ ] Verify that connection is successfully created and the new contact's name appears on top of the list on Contacts screen. This should happen within seconds if both devices are online.
2. One device online and the other connects later on ( a few hours later)
- [ ] at the bottom of the Contacts screen, there is a message tothe user 'Pending contacts...' and the user can click on Show, which will display the name of the user whose connection is pending.
- [ ] It is possible to delete this pending contact by tapping on the bin icon - delet it
- [ ] recreate contact at a distance in the same way
- [ ] Contact should be created successfully when the contact comes online
3. Recreate the same contact with the same code when the contact is already created
- [ ] there should be a message saying: "is this the same person" and the user can choose Yes or No.
- [ ] If Yes is chosen, no new contact is created. If No, then a new contact is created.
4. Delete an already created contact on one device and re-create it with the same code that was used previously. Used the Copy and Paste buttons underneath each field.
- [ ] Contact should be created successfully
5. Perform copying of code whilst the device is in portrait and pasting whilst device is in landscape. Give the contact name in portrait, then tap Add contact in landscape.
- [ ] Contact should be created successfully
6. Copy and paste the codes (using the popup Paste button), give the new contact a name, and tap Add contact, then immediately - home button. Restart briar from recently used apps.
- [ ] Contact should be created successfully
7. Copy and paste the codes (using the popup Paste button) in landscape, give the new contact a name, and tap Add contact, then immediately - home button. Restart briar from recently used apps in portrait.
- [ ] Contact should be created successfully
8. copy and paste codes for a contact that is not online - so the contact creation remains in Connecting/Waiting for the contact to come online. Repeat for another contact. Then, whilst the first two are 'waiting for the contact to come online', create a third and a fourth contact in the same way.
- [ ] Contact should be created successfully
9. The 'waiting to come online' contacts should time out after certain time.IvanaIvanahttps://code.briarproject.org/briar/briar/-/issues/1934Upgrade obfs4proxy to fix meek's certificate pinning2021-02-17T17:15:34ZakwizgranUpgrade obfs4proxy to fix meek's certificate pinningobfs4proxy's meek-lite transport stopped working on 7 December due to a change in the TLS certificate chain of the Azure infrastructure. This will prevent Briar users in China from connecting to Tor, as well as any users in other countri...obfs4proxy's meek-lite transport stopped working on 7 December due to a change in the TLS certificate chain of the Azure infrastructure. This will prevent Briar users in China from connecting to Tor, as well as any users in other countries who are on IPv6-only networks and have bridges enabled.
https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/meek/-/issues/40001
https://gitweb.torproject.org/pluggable-transports/obfs4.git/log/
There hasn't been a new obfs4proxy release since the fix was merged, so we'll need to build from master. I suggest we use `0.0.12-dev-<commit ID>` as the version number, as this isn't a snapshot build in the Maven sense (the artifact won't change when changes are made upstream).Android 1.2akwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/1935ArrayIndexOutOfBoundsException in RecyclerView2021-11-04T11:03:23ZakwizgranArrayIndexOutOfBoundsException in RecyclerView* Android version: 10
* Briar version: 1.2.10 (54b852d)
Stacktrace:
```
java.lang.ArrayIndexOutOfBoundsException: length=5; index=7
at java.util.Arrays$ArrayList.get(Arrays.java:3766)
at androidx.recyclerview.selection.T...* Android version: 10
* Briar version: 1.2.10 (54b852d)
Stacktrace:
```
java.lang.ArrayIndexOutOfBoundsException: length=5; index=7
at java.util.Arrays$ArrayList.get(Arrays.java:3766)
at androidx.recyclerview.selection.ToolHandlerRegistry.get(ToolHandlerRegistry.java:69)
at androidx.recyclerview.selection.EventRouter.onInterceptTouchEvent(EventRouter.java:57)
at androidx.recyclerview.widget.RecyclerView.findInterceptingOnItemTouchListener(RecyclerView.java:3151)
at androidx.recyclerview.widget.RecyclerView.onInterceptTouchEvent(RecyclerView.java:3170)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2620)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3073)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2709)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3073)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2709)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3073)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2709)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3073)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2709)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3073)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2709)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3073)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2709)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3073)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2709)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3073)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2709)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3073)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2709)
at com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:613)
at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1933)
at android.app.Activity.dispatchTouchEvent(Activity.java:4147)
at androidx.appcompat.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:69)
at androidx.appcompat.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:69)
at com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:559)
at android.view.View.dispatchPointerEvent(View.java:13766)
at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:5824)
at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:5619)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5063)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5116)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5082)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:5239)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5090)
at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:5296)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5063)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5116)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5082)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5090)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5063)
at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:7954)
at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:7905)
at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:7859)
at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:8144)
at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:233)
at android.os.MessageQueue.nativePollOnce(Native Method)
at android.os.MessageQueue.next(MessageQueue.java:363)
at android.os.Looper.loop(Looper.java:173)
at android.app.ActivityThread.main(ActivityThread.java:8169)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1101)
```
Edited log:
```
02-12 21:12:09.963 I/BaseActivity: Starting ConversationActivity
02-12 21:12:09.965 I/BaseActivity: Resuming ConversationActivity
02-12 21:12:10.590 I/AndroidNetworkManager: Received broadcast android.intent.action.SCREEN_ON
```
Crash occurred at 21:12:18.697.
This looks like a RecyclerView bug. Opening a ticket in case we need to upgrade the relevant library.Android 1.4https://code.briarproject.org/briar/briar/-/issues/1936Contact was shown as offline when online2021-02-17T11:15:26ZakwizgranContact was shown as offline when online* Android version: 10
* Phone model: Huawei LYA-L29 (LYA-L29RU)
* Briar version: 1.2.13 (5fdc7e7)
* User feedback: "Very often displays incorrect information about the network status of another contact. The interlocutor is online for all...* Android version: 10
* Phone model: Huawei LYA-L29 (LYA-L29RU)
* Briar version: 1.2.13 (5fdc7e7)
* User feedback: "Very often displays incorrect information about the network status of another contact. The interlocutor is online for all network conditions, and displays as if he is not available."
Edited log:
```
02-12 20:59:14.597 I/DuplexOutgoingSession: Sending keepalive
02-12 20:59:44.598 I/DuplexOutgoingSession: Sending keepalive
02-12 20:59:53.360 I/AndroidNetworkManager: Received broadcast android.intent.action.SCREEN_ON
02-12 20:59:53.367 I/TorPlugin: Online: true, wifi: true, IPv6 only: false
02-12 20:59:53.367 I/TorPlugin: Country code: RU
02-12 20:59:53.367 I/TorPlugin: Charging: false
02-12 20:59:53.367 I/TorPlugin: Enabling network
02-12 20:59:53.367 I/TorPlugin: Using obfs4 bridges
02-12 20:59:53.367 I/TorPlugin: Disabling connection padding
02-12 21:00:02.666 I/PollerImpl: Polling plugin org.briarproject.bramble.bluetooth
02-12 21:00:02.672 I/ConnectionRegistryImpl: 0 contacts connected or better: org.briarproject.bramble.bluetooth
02-12 21:00:09.531 I/BaseActivity: Creating SplashScreenActivity
02-12 21:00:09.575 I/BaseActivity: Creating NavDrawerActivity
02-12 21:00:09.597 I/BaseActivity: Starting NavDrawerActivity
02-12 21:00:09.598 I/BaseActivity: Resuming NavDrawerActivity
02-12 21:00:10.158 I/BaseActivity: Destroying SplashScreenActivity
02-12 21:00:14.598 I/DuplexOutgoingSession: Sending keepalive
02-12 21:00:16.395 I/BaseActivity: Pausing NavDrawerActivity
02-12 21:00:16.818 I/BaseActivity: Stopping NavDrawerActivity
02-12 21:00:17.015 I/PollerImpl: Polling plugin org.briarproject.bramble.tor
02-12 21:00:17.019 I/ConnectionRegistryImpl: 1 contacts connected or better: org.briarproject.bramble.tor
02-12 21:00:17.020 I/TorPlugin: Connecting to v3 wwi[scrubbed]
02-12 21:00:17.793 I/TorPlugin: Connected to v3 wwi[scrubbed]
02-12 21:00:17.824 I/DuplexOutgoingSession: Generated ack: false
02-12 21:00:17.827 I/DuplexOutgoingSession: Generated batch: false
02-12 21:00:17.830 I/DuplexOutgoingSession: Generated offer: false
02-12 21:00:17.830 I/DuplexOutgoingSession: Generated request: false
02-12 21:00:18.981 I/ConnectionRegistryImpl: Outgoing connection registered: org.briarproject.bramble.tor
02-12 21:00:18.982 I/ConnectionRegistryImpl: Contact connected
02-12 21:00:18.982 I/ConnectionRegistryImpl: Setting connection priority: org.briarproject.bramble.tor
02-12 21:00:28.954 I/AndroidNetworkManager: Received broadcast android.intent.action.SCREEN_OFF
02-12 21:00:28.959 I/TorPlugin: Online: true, wifi: true, IPv6 only: false
02-12 21:00:28.959 I/TorPlugin: Country code: RU
02-12 21:00:28.959 I/TorPlugin: Charging: false
02-12 21:00:28.959 I/TorPlugin: Enabling network
02-12 21:00:28.959 I/TorPlugin: Using obfs4 bridges
02-12 21:00:28.959 I/TorPlugin: Disabling connection padding
02-12 21:00:33.955 I/TorPlugin: V3 descriptor uploaded
02-12 21:00:34.584 I/TorPlugin: V3 descriptor uploaded
02-12 21:00:34.720 I/TorPlugin: V3 descriptor uploaded
02-12 21:00:34.942 I/TorPlugin: V3 descriptor uploaded
02-12 21:00:35.030 I/TorPlugin: V3 descriptor uploaded
02-12 21:00:39.403 I/TorPlugin: V3 descriptor uploaded
02-12 21:00:44.598 I/DuplexOutgoingSession: Sending keepalive
02-12 21:00:47.823 I/DuplexOutgoingSession: Sending keepalive
02-12 21:00:50.914 I/AndroidNetworkManager: Received broadcast android.intent.action.SCREEN_ON
02-12 21:00:50.918 I/TorPlugin: Online: true, wifi: true, IPv6 only: false
02-12 21:00:50.918 I/TorPlugin: Country code: RU
02-12 21:00:50.918 I/TorPlugin: Charging: false
02-12 21:00:50.918 I/TorPlugin: Enabling network
02-12 21:00:50.918 I/TorPlugin: Using obfs4 bridges
02-12 21:00:50.918 I/TorPlugin: Disabling connection padding
02-12 21:00:57.771 I/BaseActivity: Starting NavDrawerActivity
02-12 21:00:57.772 I/BaseActivity: Resuming NavDrawerActivity
02-12 21:01:02.667 I/PollerImpl: Polling plugin org.briarproject.bramble.bluetooth
02-12 21:01:02.673 I/ConnectionRegistryImpl: 0 contacts connected or better: org.briarproject.bramble.bluetooth
02-12 21:01:05.717 I/TorPlugin: V3 descriptor uploaded
02-12 21:01:06.601 I/TorPlugin: V3 descriptor uploaded
02-12 21:01:06.988 I/BaseActivity: Pausing NavDrawerActivity
02-12 21:01:07.007 I/BaseActivity: Creating SettingsActivity
02-12 21:01:07.026 I/BaseActivity: Starting SettingsActivity
02-12 21:01:07.060 I/BaseActivity: Resuming SettingsActivity
02-12 21:01:07.539 I/BaseActivity: Stopping NavDrawerActivity
02-12 21:01:11.405 I/PollerImpl: Polling plugin org.briarproject.bramble.lan
02-12 21:01:11.418 I/ConnectionRegistryImpl: 0 contacts connected or better: org.briarproject.bramble.lan
02-12 21:01:11.539 I/BaseActivity: Pausing SettingsActivity
02-12 21:01:11.551 I/BaseActivity: Creating FeedbackActivity
```
Notes:
* A duplex connection to a contact is open at the start of the log
* Later log messages from the poller show that this is a Tor connection, rather than Bluetooth or LAN
* A second Tor connection is made at 21:00:17
* The Tor hidden service descriptor is being uploaded, which may indicate that the device recently came online, or may be the daily republishing of the descriptor
The reported issue could be a UI bug (failing to show/update the online state of one or both contacts), or it could be a network or power management issue at the contact's end, causing the contact's Tor connection to be lost.https://code.briarproject.org/briar/briar/-/issues/1937IndexOutOfBoundsException when selecting text2023-09-14T12:20:44ZakwizgranIndexOutOfBoundsException when selecting text* Android version: 7.1.1
* Phone model: OnePlus A5000 (OnePlus5)
* Briar version: 1.2.13 (5fdc7e7)
* User feedback: "I was trying to use this app offline to contact my friend."
Stacktrace:
```
java.lang.IndexOutOfBoundsException: setSpa...* Android version: 7.1.1
* Phone model: OnePlus A5000 (OnePlus5)
* Briar version: 1.2.13 (5fdc7e7)
* User feedback: "I was trying to use this app offline to contact my friend."
Stacktrace:
```
java.lang.IndexOutOfBoundsException: setSpan (-1 ... -1) starts before 0
at android.text.SpannableStringBuilder.checkRange(SpannableStringBuilder.java:1325)
at android.text.SpannableStringBuilder.setSpan(SpannableStringBuilder.java:683)
at android.text.SpannableStringBuilder.setSpan(SpannableStringBuilder.java:676)
at android.text.Selection.setSelection(Selection.java:76)
at android.text.method.ArrowKeyMovementMethod.onTouchEvent(ArrowKeyMovementMethod.java:291)
at android.widget.TextView.onTouchEvent(TextView.java:8546)
at android.view.View.dispatchTouchEvent(View.java:10180)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2632)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2321)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2632)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2321)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2632)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2321)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2632)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2321)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2632)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2321)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2632)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2321)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2632)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2321)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2632)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2321)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2632)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2321)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2632)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2321)
at com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:414)
at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1808)
at android.app.Activity.dispatchTouchEvent(Activity.java:3122)
at androidx.appcompat.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:69)
at androidx.appcompat.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:69)
at com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:376)
at android.view.View.dispatchPointerEvent(View.java:10400)
at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4445)
at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4313)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3860)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3913)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3879)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4006)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3887)
at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:4063)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3860)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3913)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3879)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3887)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3860)
at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:6254)
at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:6228)
at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:6189)
at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:6357)
at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185)
at android.os.MessageQueue.nativePollOnce(Native Method)
at android.os.MessageQueue.next(MessageQueue.java:323)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:6138)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:893)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:783)
```
No log due to #1917.
Looks like a platform bug - I'm opening this ticket in case there's a known workaround.Android 1.4https://code.briarproject.org/briar/briar/-/issues/1938UnknownServiceException: Cleartext communication not permitted2021-02-17T12:27:36ZakwizgranUnknownServiceException: Cleartext communication not permitted* Android version: 10
* Phone model: Fairphone FP3
* Briar version: 1.2.13 (5fdc7e7)
* User feedback: "Import RSS fail"
Log snippet:
```
02-14 16:15:58.259 W/RssFeedImportActivity: java.net.UnknownServiceException: CLEARTEXT communicati...* Android version: 10
* Phone model: Fairphone FP3
* Briar version: 1.2.13 (5fdc7e7)
* User feedback: "Import RSS fail"
Log snippet:
```
02-14 16:15:58.259 W/RssFeedImportActivity: java.net.UnknownServiceException: CLEARTEXT communication to [scrubbed] not permitted by network security policy
java.net.UnknownServiceException: CLEARTEXT communication to [scrubbed] not permitted by network security policy
at okhttp3.internal.connection.RealConnection.connect(RealConnection.java:148)
at okhttp3.internal.connection.StreamAllocation.findConnection(StreamAllocation.java:258)
at okhttp3.internal.connection.StreamAllocation.findHealthyConnection(StreamAllocation.java:135)
at okhttp3.internal.connection.StreamAllocation.newStream(StreamAllocation.java:114)
at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:42)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:93)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.java:93)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:127)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:257)
at okhttp3.RealCall.execute(RealCall.java:93)
at org.briarproject.briar.feed.FeedManagerImpl.getFeedInputStream(FeedManagerImpl.java:385)
at org.briarproject.briar.feed.FeedManagerImpl.fetchSyndFeed(FeedManagerImpl.java:332)
at org.briarproject.briar.feed.FeedManagerImpl.addFeed(FeedManagerImpl.java:171)
at org.briarproject.briar.android.blog.RssFeedImportActivity.lambda$importFeed$2(RssFeedImportActivity.java:137)
at org.briarproject.briar.android.blog.RssFeedImportActivity.lambda$importFeed$2$RssFeedImportActivity(Unknown Source:0)
at org.briarproject.briar.android.blog.-$$Lambda$RssFeedImportActivity$yMsHehcx_j-aBTiyhHwsHyxrpIs.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:919)
```
Note: the domain name wasn't scrubbed from the original log. We should fix that.https://code.briarproject.org/briar/briar/-/issues/1939Private group is greyed out after rotating screen2021-02-18T16:51:40ZakwizgranPrivate group is greyed out after rotating screen![device-2021-02-11-150926](/uploads/b17c093a0c55f126e950c695aee3ae00/device-2021-02-11-150926.png)
Should be fixed by !1371.![device-2021-02-11-150926](/uploads/b17c093a0c55f126e950c695aee3ae00/device-2021-02-11-150926.png)
Should be fixed by !1371.Android 1.2IvanaIvanahttps://code.briarproject.org/briar/briar/-/issues/1940Check if Localizer requires context.createConfigurationContext()2021-02-17T18:49:59ZSebastianCheck if Localizer requires context.createConfigurationContext()It's possible that we can remove this entirely:
https://code.briarproject.org/briar/briar/-/merge_requests/1367#note_46627
Should be tested on many API levels and with toggling themes while testing.It's possible that we can remove this entirely:
https://code.briarproject.org/briar/briar/-/merge_requests/1367#note_46627
Should be tested on many API levels and with toggling themes while testing.https://code.briarproject.org/briar/briar/-/issues/1941making the ### clickable and show a small dialog2021-07-23T11:18:13Zsystermaking the ### clickable and show a small dialogNext to an account name of someone that wrote a message there are 3 hashes shown. They can vary in color.
Make a clickable dialogue that will explain its meaning.Next to an account name of someone that wrote a message there are 3 hashes shown. They can vary in color.
Make a clickable dialogue that will explain its meaning.https://code.briarproject.org/briar/briar/-/issues/1942Profile picture isn't shown if settings screen is recreated after process was...2021-04-26T12:13:43ZakwizgranProfile picture isn't shown if settings screen is recreated after process was killedSteps to reproduce:
* Open the Briar settings screen
* Leave Briar running in the foreground and turn the screen off
* Use the ADB shell to kill the Briar process
* Turn the screen back on
* The Briar password prompt is shown
* Sign into...Steps to reproduce:
* Open the Briar settings screen
* Leave Briar running in the foreground and turn the screen off
* Use the ADB shell to kill the Briar process
* Turn the screen back on
* The Briar password prompt is shown
* Sign into Briar
* The settings screen is shown
* The profile picture isn't loaded
![device-2021-02-18-143535](/uploads/264e108ebbe0be0b9acb706e3080bfe1/device-2021-02-18-143535.png)
Tested on the Nexus 5X (Android 8.1.0).Adapt to changes in the Android platformakwizgranakwizgran2021-04-30https://code.briarproject.org/briar/briar/-/issues/1943Warn the user when the last shutdown wasn't clean2021-07-26T10:31:11ZakwizgranWarn the user when the last shutdown wasn't cleanShow some kind of warning (a notification, or something in the main UI when signing in) when the last shutdown wasn't clean (see #57).
We may also want to know whether the dirty shutdown happened before or after the last reboot.
Subtas...Show some kind of warning (a notification, or something in the main UI when signing in) when the last shutdown wasn't clean (see #57).
We may also want to know whether the dirty shutdown happened before or after the last reboot.
Subtask of #1824.https://code.briarproject.org/briar/briar/-/issues/1944Changing a contact name does not update the contact list immediately2021-04-26T12:09:06ZSebastianChanging a contact name does not update the contact list immediatelyTest instructions:
* Enter a conversation
* Open the menu
* Select 'change contact name'
* Enter a new alias and confirm
* Navigate back to the contact list
* Observe that the alias of the contact has already changed when arriving at the...Test instructions:
* Enter a conversation
* Open the menu
* Select 'change contact name'
* Enter a new alias and confirm
* Navigate back to the contact list
* Observe that the alias of the contact has already changed when arriving at the contact list
* Variant A: change the contact name to nothing (empty string into dialog)
* Variant B: after the contact alias was empty, change back to some non-empty aliasAdapt to changes in the Android platformIvanaIvana2021-04-30https://code.briarproject.org/briar/briar/-/issues/57Detect DB durability failures2021-04-12T13:18:14ZakwizgranDetect DB durability failuresIf the app or device crashes, the database may fail to store data durably:
http://www.h2database.com/html/advanced.html#durability_problems
This may cause a wide range of problems, including data sync bugs where a peer believes we've s...If the app or device crashes, the database may fail to store data durably:
http://www.h2database.com/html/advanced.html#durability_problems
This may cause a wide range of problems, including data sync bugs where a peer believes we've stored some data because we acked it, but we failed to store the data durably. The peer won't ever resend the acked data.
To detect durability problems, store a flag in the DB indicating whether the DB is dirty. At startup, if the DB is dirty then a crash has occurred. Otherwise mark the DB dirty before handling the first transaction. At shutdown, mark the DB clean after handling the last transaction.
If a crash is detected then we can attempt to recover from any problems it may have caused, for example by asking peers to forget about any acks we've sent.
This approach relies on the assumption that if transaction A is committed before transaction B is started, it's not possible for the database to durably store transaction B but not transaction A. Is that a safe assumption?Adapt to changes in the Android platformSebastianSebastian2021-04-30