briar issueshttps://code.briarproject.org/briar/briar/-/issues2021-06-23T14:08:44Zhttps://code.briarproject.org/briar/briar/-/issues/2070Unit test for transport key agreement validator2021-06-23T14:08:44ZakwizgranUnit test for transport key agreement validatorTransfer content securely via SD cards and USB memory sticksTorsten GroteTorsten Grote2021-07-31https://code.briarproject.org/briar/briar/-/issues/2037Create RemovableDriveViewModel2021-06-22T19:04:27ZDaniel LublinCreate RemovableDriveViewModelTransfer content securely via SD cards and USB memory sticksDaniel LublinDaniel Lublin2021-07-31https://code.briarproject.org/briar/briar/-/issues/2038Sync client to establish keys for newly added transports2021-06-17T13:36:49ZakwizgranSync client to establish keys for newly added transportsWrite a sync client that establishes transport keys with each contact for any transports that were added more recently than the contact was added.
Subtask of #1802Write a sync client that establishes transport keys with each contact for any transports that were added more recently than the contact was added.
Subtask of #1802Transfer content securely via SD cards and USB memory sticksakwizgranakwizgran2021-07-31https://code.briarproject.org/briar/briar/-/issues/2016Create RemovableDriveManager2021-06-17T13:35:40ZakwizgranCreate RemovableDriveManagerCreate a manager interface in bramble-api, with an impl in bramble-core, to manage access to the RemovableDrivePlugin (#2015). The manager will provide methods for doing the following:
* Retrieve the current reader/writer task, if any, ...Create a manager interface in bramble-api, with an impl in bramble-core, to manage access to the RemovableDrivePlugin (#2015). The manager will provide methods for doing the following:
* Retrieve the current reader/writer task, if any, for a given contact
* Register and start a reader/writer task for a contact (fails if an equivalent task is already registered)
* Unregister a task (for use by the task itself, when it finishes running)
We may later want to convert this to some kind of abstract TaskManager interface with TaskKeys and so on, and refactor other long-running tasks to use it, but let's not do that yet.
Subtask of #1802Transfer content securely via SD cards and USB memory sticksakwizgranakwizgran2021-07-31https://code.briarproject.org/briar/briar/-/issues/2017Create RemovableDriveReaderTask2021-06-17T13:35:19ZakwizgranCreate RemovableDriveReaderTaskCreate an interface in bramble-api, with an impl in bramble-core, for a task that reads data from a file for syncing with a given contact. It should be possible to attach and detach observers for observing the progress of the task (see #...Create an interface in bramble-api, with an impl in bramble-core, for a task that reads data from a file for syncing with a given contact. It should be possible to attach and detach observers for observing the progress of the task (see #2013 and #2014). The task should unregister itself with the RemovableDriveManager (see #2016) when it finishes running.
Subtask of #1802Transfer content securely via SD cards and USB memory sticksakwizgranakwizgran2021-07-31https://code.briarproject.org/briar/briar/-/issues/2018Create RemovableDriveWriterTask2021-06-17T13:35:02ZakwizgranCreate RemovableDriveWriterTaskCreate an interface in bramble-api, with an impl in bramble-core, for a task that writes data to a file for syncing with a given contact. It should be possible to attach and detach observers for observing the progress of the task (see #2...Create an interface in bramble-api, with an impl in bramble-core, for a task that writes data to a file for syncing with a given contact. It should be possible to attach and detach observers for observing the progress of the task (see #2013 and #2014). The task should unregister itself with the RemovableDriveManager (see #2016) when it finishes running.
Subtask of #1802Transfer content securely via SD cards and USB memory sticksakwizgranakwizgran2021-07-31https://code.briarproject.org/briar/briar/-/issues/2059NoSuchGroupException toast is shown when private group is removed2021-06-14T14:58:58ZakwizgranNoSuchGroupException toast is shown when private group is removed* Android version: 4.4.2
* Phone model: LGE LG-D150 (w35_global_com)
* Briar version: 1.3.4 (76b7e6f)
* User feedback: "NoSuchGroupException"
Log:
```
05-23 22:32:59.452 I/GroupListViewModel: Private group removed
05-23 22:32:59.453 I/T...* Android version: 4.4.2
* Phone model: LGE LG-D150 (w35_global_com)
* Briar version: 1.3.4 (76b7e6f)
* User feedback: "NoSuchGroupException"
Log:
```
05-23 22:32:59.452 I/GroupListViewModel: Private group removed
05-23 22:32:59.453 I/ThreadListViewModel: Group removed
05-23 22:32:59.456 I/BaseActivity: Pausing GroupActivity
05-23 22:32:59.467 I/BaseActivity: Starting NavDrawerActivity
05-23 22:32:59.467 I/BaseActivity: Resuming NavDrawerActivity
05-23 22:32:59.950 I/BaseActivity: Stopping GroupActivity
05-23 22:32:59.954 I/BaseActivity: Destroying GroupActivity
05-23 22:32:59.967 W/DbViewModel: org.briarproject.bramble.api.db.NoSuchGroupException
org.briarproject.bramble.api.db.NoSuchGroupException
at org.briarproject.bramble.db.DatabaseComponentImpl.mergeGroupMetadata(DatabaseComponentImpl.java:784)
at org.briarproject.bramble.client.ClientHelperImpl.mergeGroupMetadata(ClientHelperImpl.java:224)
at org.briarproject.bramble.client.ClientHelperImpl.lambda$mergeGroupMetadata$7(ClientHelperImpl.java:218)
at org.briarproject.bramble.client.ClientHelperImpl.lambda$mergeGroupMetadata$7$ClientHelperImpl(ClientHelperImpl.java)
at org.briarproject.bramble.client.-$$Lambda$ClientHelperImpl$7us-EF4vPLR_8c0LCNvGmtb6d4I.run(lambda)
at org.briarproject.bramble.db.DatabaseComponentImpl.transaction(DatabaseComponentImpl.java:200)
at org.briarproject.bramble.client.ClientHelperImpl.mergeGroupMetadata(ClientHelperImpl.java:218)
at org.briarproject.briar.client.MessageTrackerImpl.storeMessageId(MessageTrackerImpl.java:92)
at org.briarproject.briar.android.threaded.ThreadListViewModel.lambda$storeMessageId$1(ThreadListViewModel.java:222)
at org.briarproject.briar.android.threaded.ThreadListViewModel.lambda$storeMessageId$1$ThreadListViewModel(ThreadListViewModel.java)
at org.briarproject.briar.android.threaded.-$$Lambda$ThreadListViewModel$8pSkGFRn7z9NtDqesywkHNLVqgk.run(lambda)
at org.briarproject.briar.android.viewmodel.DbViewModel.lambda$runOnDbThread$0(DbViewModel.java:77)
at org.briarproject.briar.android.viewmodel.DbViewModel.lambda$runOnDbThread$0$DbViewModel(DbViewModel.java)
at org.briarproject.briar.android.viewmodel.-$$Lambda$DbViewModel$WFnJ2C0vmjF_vFVS_futFODEXKA.run(lambda)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
```
What seems to be happening is that ThreadListViewModel is asynchronously storing the list position, and it gets a NoSuchGroupException because the group has recently been removed. The exception is harmless and should probably be logged rather than shown in the UI.Android 1.3Torsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/1652IllegalArgumentException: pointerIndex out of range2021-06-14T10:46:13ZakwizgranIllegalArgumentException: pointerIndex out of range* Android version: 9
* Phone model: Android Pixel 3a (aosp_sargo)
* Briar version: 1.1.7 (d145a08)
* User feedback: "Zoomed in into a picture."
Stacktrace:
```
java.lang.IllegalArgumentException: pointerIndex out of range
at and...* Android version: 9
* Phone model: Android Pixel 3a (aosp_sargo)
* Briar version: 1.1.7 (d145a08)
* User feedback: "Zoomed in into a picture."
Stacktrace:
```
java.lang.IllegalArgumentException: pointerIndex out of range
at android.view.MotionEvent.nativeGetAxisValue(Native Method)
at android.view.MotionEvent.getX(MotionEvent.java:2205)
at android.support.v4.view.ViewPager.onInterceptTouchEvent(ViewPager.java:2072)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2573)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
at com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:440)
at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1830)
at android.app.Activity.dispatchTouchEvent(Activity.java:3401)
at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:69)
at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:69)
at com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:398)
at android.view.View.dispatchPointerEvent(View.java:12752)
at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:5113)
at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4916)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4433)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4486)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4452)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4592)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4460)
at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:4649)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4433)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4486)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4452)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4460)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4433)
at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:7099)
at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:7068)
at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:7029)
at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:7202)
at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:186)
at android.view.InputEventReceiver.nativeConsumeBatchedInputEvents(Native Method)
at android.view.InputEventReceiver.consumeBatchedInputEvents(InputEventReceiver.java:177)
at android.view.ViewRootImpl.doConsumeBatchedInput(ViewRootImpl.java:7173)
at android.view.ViewRootImpl$ConsumeBatchedInputRunnable.run(ViewRootImpl.java:7225)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:949)
at android.view.Choreographer.doCallbacks(Choreographer.java:761)
at android.view.Choreographer.doFrame(Choreographer.java:690)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:935)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6718)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:876)
```
Looks like a platform bug that would be hard for us to work around.https://code.briarproject.org/briar/briar/-/issues/2066Error: NoSuchGroupException2021-06-07T16:08:35ZNorbert 80Error: NoSuchGroupExceptionOn Briar 1.3.4 Android I ALWAYS get an "Error: NoSuchGroupException" when deleting groups.
(Additional info: I just created test groups with no other participants. I don't know at the moment if this error only happens in this particular...On Briar 1.3.4 Android I ALWAYS get an "Error: NoSuchGroupException" when deleting groups.
(Additional info: I just created test groups with no other participants. I don't know at the moment if this error only happens in this particular case.)
Another issue:https://code.briarproject.org/briar/briar/-/issues/1971Upgrade Tor to 0.3.5.142021-05-31T12:05:53ZakwizgranUpgrade Tor to 0.3.5.14https://gitweb.torproject.org/tor.git/tree/ChangeLog?h=tor-0.3.5.14https://gitweb.torproject.org/tor.git/tree/ChangeLog?h=tor-0.3.5.14Android 1.2akwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/2036Detect when someone connects to Wi-Fi hotspot and prompt user to show downloa...2021-05-26T13:01:27ZTorsten GroteDetect when someone connects to Wi-Fi hotspot and prompt user to show download infoWe might be able to continue to requesting the Wi-Fi group info and inspect it for connection information. When the first connection was made, we can stop requesting it and trigger an UI update like a Snackbar to make the hotspot providi...We might be able to continue to requesting the Wi-Fi group info and inspect it for connection information. When the first connection was made, we can stop requesting it and trigger an UI update like a Snackbar to make the hotspot providing user aware that they can now proceed to the next screen.Install via Bluetooth or Wi-FiTorsten GroteTorsten Grote2021-07-31https://code.briarproject.org/briar/briar/-/issues/2035Create AndroidRemovableDrivePlugin2021-05-11T11:23:14ZakwizgranCreate AndroidRemovableDrivePluginCreate an Android subclass of RemovableDrivePlugin that uses URIs and the ContentResolver to obtain input/output streams.
Subtask of #1802Create an Android subclass of RemovableDrivePlugin that uses URIs and the ContentResolver to obtain input/output streams.
Subtask of #1802Transfer content securely via SD cards and USB memory sticksakwizgranakwizgran2021-07-31https://code.briarproject.org/briar/briar/-/issues/2015Create RemovableDrivePlugin2021-05-10T13:07:16ZakwizgranCreate RemovableDrivePluginCreate a RemovableDrivePlugin that extends FilePlugin, along with a suitable PluginFactory. The plugin's writerFinished() method can be a no-op. The readerFinished() method should try to delete the file if the tag was recognised and the ...Create a RemovableDrivePlugin that extends FilePlugin, along with a suitable PluginFactory. The plugin's writerFinished() method can be a no-op. The readerFinished() method should try to delete the file if the tag was recognised and the read completed without an exception, failing gracefully if the file is on a read-only filesystem.
The ~~UI~~ read/write tasks (#2017 and #2018) will interact with the plugin via its createReader() and createWriter() methods, which are already provided by FilePlugin.
Subtask of #1802Transfer content securely via SD cards and USB memory sticksakwizgranakwizgran2021-07-31https://code.briarproject.org/briar/briar/-/issues/2013Add database method for getting amount of data to sync2021-05-10T12:00:48ZakwizgranAdd database method for getting amount of data to syncSubtask of #1802Subtask of #1802Transfer content securely via SD cards and USB memory sticksakwizgranakwizgran2021-07-31https://code.briarproject.org/briar/briar/-/issues/2014Update MessagesSentEvent to include amount of data sent2021-05-10T12:00:41ZakwizgranUpdate MessagesSentEvent to include amount of data sentSubtask of #1802Subtask of #1802Transfer content securely via SD cards and USB memory sticksakwizgranakwizgran2021-07-31https://code.briarproject.org/briar/briar/-/issues/1975Crash: after introductions are declined by both parties (disappearing message...2021-05-05T16:17:23ZIvanaCrash: after introductions are declined by both parties (disappearing messages setting is ON on all devices)Scenario was like this;
Three devices, Samsung Mini API19, Nokia 1.3 API 30 and Pixel 2 API29. Samsung has connections with both, but they are not connected to each other. Disappearing messages are on for both Samsung's contacts, as we...Scenario was like this;
Three devices, Samsung Mini API19, Nokia 1.3 API 30 and Pixel 2 API29. Samsung has connections with both, but they are not connected to each other. Disappearing messages are on for both Samsung's contacts, as well as on Nokia and Pixel for the conversations with Samsung.
Samsung mini selects Pixel and goes to select the Make Introductions. Then it selects the Nokia's contact and sends a message to both of them. They both decline the intro message.
Samsung goes back to Pixel's conversation, and tries to perform the intro again, in the same way.
After selecting Make introductions, the crash happens. No logfile as the phone that crashed was not connected to Android Studio at the time of crash. But here are the screenshots of Stacktrace on the phone itself.
Reproduced - crash happens after both parties decline invitation with Disappearing msgs = ON. One more detail in the scenario is that the sender's atomatically generated messages related to this intro disappear before either of the recipients sees their messages re: intro that sender sent them. After disappearance of the sender's auto-generated msgs, both contacts then look at their messages and decline the intro.
![device-2021-03-23-115918](/uploads/fcf869c8275fe99c4ef3db7e9131a9d7/device-2021-03-23-115918.png)![device-2021-03-23-115939](/uploads/c42a2522c05d09c95a5a20358687a5cc/device-2021-03-23-115939.png)[Logfile_Crash_230321.txt](/uploads/d47015c1f5b198907b63ca667557fa6f/Logfile_Crash_230321.txt)Self-destructing messagesIvanaIvana2021-01-31https://code.briarproject.org/briar/briar/-/issues/1834Automatically decline incoming introduction requests when they self-destruct2021-05-05T16:17:22ZakwizgranAutomatically decline incoming introduction requests when they self-destructWhen an incoming introduction request self-destructs without being answered, automatically decline the request. This may require a protocol update (coordinated with #1829) to flag the decline as an automatic response that shouldn't be sh...When an incoming introduction request self-destructs without being answered, automatically decline the request. This may require a protocol update (coordinated with #1829) to flag the decline as an automatic response that shouldn't be shown in the UI.
Subtask of #804
Test instructions:
* Use three devices, users A, B and C
* Enable self-destructing messages in the conversations A-B and A-C
* Let A introduce contacts B and C
* Expect invitation messages to arrive at B and C about the invitation
* Expect the invitation messages to have a auto-delete timers
* Let those timers expire. Expect that to trigger an automatic decline of the invitation, i.e. on all three devices it is visible that the introduction failed (due to the expired response)
* Expect all messages from that interaction to destroy after each message's timer expires
* Let A introduce B and C again. Expect this *not* to fail due to an introduction that is already going on (because none should be going on any longer)
* Let B and C accept the introduction
* Expect the introduction to work
* Confirm that B and C have each other in the contact list
* Expect all messages involved in the transaction to have auto-delete timers
* Let those timers expire and expect all those messages to disappearSelf-destructing messagesIvanaIvana2021-01-31https://code.briarproject.org/briar/briar/-/issues/1783Switching "language & region" to English does not switch the settings language2021-05-05T16:17:22ZRobert PollakSwitching "language & region" to English does not switch the settings languageI am using version 1.2.7 from F-Droid.
When I try to switch the interface language from my system standard (which is my native language) to "English (United States), and open the settings after restart, the page title has appropriately c...I am using version 1.2.7 from F-Droid.
When I try to switch the interface language from my system standard (which is my native language) to "English (United States), and open the settings after restart, the page title has appropriately changed to the English "settings", but all the entries are still in my native language.Android 1.2SebastianSebastianhttps://code.briarproject.org/briar/briar/-/issues/214User Avatars2021-05-05T16:17:22ZTorsten GroteUser AvatarsFollowing support for Identicons in #120, we want to give users the possibility to use their own avatar to be recognized by their peers.
We should bear in mind the potential for impersonation, especially in forums, where users will see ...Following support for Identicons in #120, we want to give users the possibility to use their own avatar to be recognized by their peers.
We should bear in mind the potential for impersonation, especially in forums, where users will see posts from known and unknown identities mixed together. Anyone can create a throwaway identity with the same nickname (and avatar, if we allow them) as another user, which is different from what people are used to in centralised systems.
One possibility would be to show avatars *only* for known/verified identities and use identicons for unknown identities and those users who did not specify an avatar.
Unverified contacts should be distinguished from verified contacts in some way. They could use different identicons or have a little badge on their image indicating the trust-level similar to the little green briar icons we use at the moment.Profile picturesIvanaIvana2021-01-31https://code.briarproject.org/briar/briar/-/issues/1825Unspecific 500 Server Error when adding already existing pending contact2021-05-05T16:15:44ZNicoUnspecific 500 Server Error when adding already existing pending contact@grote found https://code.briarproject.org/briar/python-briar-wrapper/-/issues/19 where he encountered problems when re-adding an already existing pending contact.
I tried to somehow handle those error in _briar_wrapper_, but the respon...@grote found https://code.briarproject.org/briar/python-briar-wrapper/-/issues/19 where he encountered problems when re-adding an already existing pending contact.
I tried to somehow handle those error in _briar_wrapper_, but the response by Briar Headless is always just `500: Internal server error`. I get this when adding a pending contact after
* it has already been added seconds before and the peer is offline
* it has already been added more than 4 days before (manually changed system time) and the peer was offline all the time
* the pending contact got already added days before and left the pending state
* the link is invalid (I think so, just changed some characters)
* and for sure there are more errors
The problem is that [in this line](https://code.briarproject.org/briar/briar/-/blob/01a146ba71743e3709bd6e56052558da95abfbed/briar-headless/src/main/java/org/briarproject/briar/headless/contact/ContactControllerImpl.kt#L96) `contactManager.addPendingContact` gets called without catching its exceptions. Looking [at its implementation](https://code.briarproject.org/briar/briar/-/blob/01a146ba71743e3709bd6e56052558da95abfbed/bramble-core/src/main/java/org/briarproject/bramble/contact/ContactManagerImpl.java#L136), there are at least `DbException, FormatException, GeneralSecurityException` that get thrown.NicoNico