briar issueshttps://code.briarproject.org/briar/briar/-/issues2018-01-28T11:30:28Zhttps://code.briarproject.org/briar/briar/-/issues/391Handle responses to forum invitations by multiple contacts2018-01-28T11:30:28ZTorsten GroteHandle responses to forum invitations by multiple contactsMilestone CTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/388Possible Race-Condition when Two Contacts Share Same Forum with each other2018-01-28T11:30:28ZTorsten GrotePossible Race-Condition when Two Contacts Share Same Forum with each other> What happens if Alice and Bob invite each other to the forum, then some time later both their invitations are delivered? It seems to me that each of them will consult `canBeShared()` for the incoming invitation, see that they've sent a...> What happens if Alice and Bob invite each other to the forum, then some time later both their invitations are delivered? It seems to me that each of them will consult `canBeShared()` for the incoming invitation, see that they've sent an invitation, and delete the incoming invitation. Does that sound right to you? Does that mean neither of them will receive the other's invitation?
Yes, their invitations are most likely deleted without any indication to them.
![forum-sharing-same](/uploads/a267b5ec4a46f4a8f6dc8a83b233d6f9/forum-sharing-same.png)
> Regardless of the answer to this specific question, I think you're right to be concerned about treating symptoms rather than causes. Unfortunately I think the problem might be quite fundamental. We're trying to keep the state of the forum (are we subscribed, is it visible to the contact) consistent with the state of each session - but there can be multiple sessions relating to a given forum. Can we be sure that those sessions will always produce consistent answers to (a) whether we belong to the forum, and (b) whether the contact belongs to it?
> The message queue ensures that our messages are delivered to the contact in order and vice versa, but if we want to be sure that a given set of messages always produces the same state, we need a canonical ordering for all the messages: ours and the contact's. Within each session, we can use knowledge of the protocol to order certain messages (for example, a response must follow an invitation), but I'm not sure we can do that across multiple sessions in the general case.Milestone CTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/302Improve privacy of LAN plugin2018-01-28T11:30:28ZakwizgranImprove privacy of LAN pluginThe LAN plugin updates its transport properties with the latest IP address whenever a connectivity change is detected. This may allow the user's contacts to tell when she's at a frequently visited location, either by recognising an addre...The LAN plugin updates its transport properties with the latest IP address whenever a connectivity change is detected. This may allow the user's contacts to tell when she's at a frequently visited location, either by recognising an address she used when they were nearby, or by inferring a pattern (e.g. the IP address she usually advertises at night probably represents her home network).
Instead of advertising a single current address, we could advertise a list of recent addresses. This would make polling more expensive - addresses that aren't valid for the current network aren't polled, but we can expect a lot of networks to use the 192.168.0.0/16 range, resulting in multiple polling attempts per contact.
Related to #28, #44, #62.Milestone Chttps://code.briarproject.org/briar/briar/-/issues/314TorPlugin socket timeout2018-04-30T15:55:34ZErnir ErlingssonTorPlugin socket timeoutThere is a socket timeout in the Tor plugin, after 30 seconds of inactivity, that prevents user from communicating more than once over the mobile network. Connection between the devices is not re-established.
Reproduce:
1. Two devi...There is a socket timeout in the Tor plugin, after 30 seconds of inactivity, that prevents user from communicating more than once over the mobile network. Connection between the devices is not re-established.
Reproduce:
1. Two devices with connected contacts, A and B
2. Using only the mobile network, A chats with B and vice versa.
3. Close Briar and "lock" both devices by pressing the power button (don't turn off).
4. Unlock both devices after ~60 seconds (I think the timeout is set at 30 seconds) and try to chat with both A and B. Notice that no messages will be received by the other user and the "clock" symbol remains indefinitely in place.
You can re-establish connection by turning on WiFi on both devices or bluetooth and notice that then the messages are sent instantly.
Following is the error message that I got:
`
java.net.SocketTimeoutException
at java.net.PlainSocketImpl.read(PlainSocketImpl.java:488)
at java.net.PlainSocketImpl.access$000(PlainSocketImpl.java:37)
at java.net.PlainSocketImpl$PlainSocketInputStream.read(PlainSocketImpl.java:237)
at org.briarproject.crypto.StreamDecrypterImpl.readFrame(StreamDecrypterImpl.java:57)
at org.briarproject.transport.StreamReaderImpl.readFrame(StreamReaderImpl.java:61)
at org.briarproject.transport.StreamReaderImpl.read(StreamReaderImpl.java:49)
at org.briarproject.sync.PacketReaderImpl.readPacket(PacketReaderImpl.java:54)
at org.briarproject.sync.PacketReaderImpl.eof(PacketReaderImpl.java:78)
at org.briarproject.sync.IncomingSession.run(IncomingSession.java:56)
at org.briarproject.plugins.ConnectionManagerImpl$ManageIncomingDuplexConnection.run(ConnectionManagerImpl.java:267)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:818)
`Milestone Cakwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/592Scrub addresses before logging them2018-06-12T11:32:20ZakwizgranScrub addresses before logging themMAC, IP and onion addresses should be scrubbed before logging to ensure we don't leave any sensitive information in plaintext on the device or send it in crash reports or feedback.
We need to keep enough information for the addresses ...MAC, IP and onion addresses should be scrubbed before logging to ensure we don't leave any sensitive information in plaintext on the device or send it in crash reports or feedback.
We need to keep enough information for the addresses to be useful for debugging, without harming user privacy. Perhaps something like the following:
* MAC addresses (including Bluetooth): keep the first and last octets, replace the rest with XX
* Link-local and site-local IPv4 addresses: keep the full address
* Other IPv4 addresses: keep the first and last octets, replace the rest with XX
* IPv6 addresses: not intentionally used by Briar, replace the whole thing with XX
* Onion addresses: keep the first three characters, replace the rest with XXMilestone CTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/573Setup Onion Service for Crash Reports and Feedback2018-06-12T11:32:21ZTorsten GroteSetup Onion Service for Crash Reports and FeedbackLooks like the onion service we had running is down now:
```
08-02 20:04:51.596 W/DevReporterImpl: Could not connect to developers
Host unreachable
at ne...Looks like the onion service we had running is down now:
```
08-02 20:04:51.596 W/DevReporterImpl: Could not connect to developers
Host unreachable
at net.sourceforge.jsocks.socks.Socks5Message.read(Socks5Message.java:162)
at net.sourceforge.jsocks.socks.Socks5Message.<init>(Socks5Message.java:123)
at net.sourceforge.jsocks.socks.Socks5Message.<init>(Socks5Message.java:108)
at net.sourceforge.jsocks.socks.Socks5Proxy.formMessage(Socks5Proxy.java:253)
at net.sourceforge.jsocks.socks.Proxy.exchange(Proxy.java:458)
at net.sourceforge.jsocks.socks.Proxy.connect(Proxy.java:343)
at net.sourceforge.jsocks.socks.SocksSocket.<init>(SocksSocket.java:109)
at org.briarproject.reporting.DevReporterImpl.connectToDevelopers(DevReporterImpl.java:50)
at org.briarproject.reporting.DevReporterImpl.sendReports(DevReporterImpl.java:84)
at org.briarproject.plugins.tor.TorPlugin$1.run(TorPlugin.java:371)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
at java.lang.Thread.run(Thread.java:856)
```
I know that some of my testers already used the crash reporter. I had to tell them that I am not sure that these reports are already read by someone.Milestone Cakwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/516Joining a busy forum overloads the device, which kills the Briar service2018-06-12T11:32:23ZErnir ErlingssonJoining a busy forum overloads the device, which kills the Briar serviceA user joined a forum with ~50 entries, looked at the forum (which was empty at the time) and then put Briar into the background. After a while the notification "49 new forum entries" appeared, but shortly thereafter the screen went dark...A user joined a forum with ~50 entries, looked at the forum (which was empty at the time) and then put Briar into the background. After a while the notification "49 new forum entries" appeared, but shortly thereafter the screen went dark and the device became completely unresponsive for around 10 seconds. After that the user was able to activate the screen again but the Briar notification was gone and seemingly the service had either crashed or was killed by the OS.Milestone Chttps://code.briarproject.org/briar/briar/-/issues/492Remove crash report settings2018-06-12T11:32:24ZakwizgranRemove crash report settingsMost users should never see the crash reporter, so we don't need to allow them to configure it.Most users should never see the crash reporter, so we don't need to allow them to configure it.Milestone CTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/472Forum: No message for the inviter if an invitee accepts or declines2018-06-12T11:32:24ZMegaloxForum: No message for the inviter if an invitee accepts or declinesA tester complained that he didn't get any feedback if his contact accepted or declined the invitation to a forum.A tester complained that he didn't get any feedback if his contact accepted or declined the invitation to a forum.Milestone CTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/471SHOW AVAILABLE FORUMS in speech bubble doesn't work.2018-06-12T11:32:24ZMegaloxSHOW AVAILABLE FORUMS in speech bubble doesn't work.Similar to #470: A gets invitations to the same forum from B and C. First she gets the invitation from B and accepts. In the private message (A-C) appears the system message SHOW AVAILABLE FORUMS. This can't be tapped and stays there.Similar to #470: A gets invitations to the same forum from B and C. First she gets the invitation from B and accepts. In the private message (A-C) appears the system message SHOW AVAILABLE FORUMS. This can't be tapped and stays there.Milestone CTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/470Second invitation doesn't disappear from available forums2018-06-12T11:32:24ZMegaloxSecond invitation doesn't disappear from available forumsA (A is already a member of the forum) gets invitations from B and C for the same forum. She accepts first B, when she accepts C she gets a toast but the entry in "available forums" doesn't disappear.
A (A is already a member of the forum) gets invitations from B and C for the same forum. She accepts first B, when she accepts C she gets a toast but the entry in "available forums" doesn't disappear.
Milestone CTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/422Forum sub-tree duplicates2018-06-12T11:32:26ZErnir ErlingssonForum sub-tree duplicates>I've managed to generate a different bug now: subtrees can get duplicated. Specifically, if I close one subtree (at any level), the indicator for one of the subtrees below it at the same level (not always the immediate next subtree) wil...>I've managed to generate a different bug now: subtrees can get duplicated. Specifically, if I close one subtree (at any level), the indicator for one of the subtrees below it at the same level (not always the immediate next subtree) will also change to closed, and tapping it will "open" the subtree again, inserting it into the list a second time.Milestone Chttps://code.briarproject.org/briar/briar/-/issues/408Forum List Unread Posts Badges2018-06-12T11:32:27ZMegaloxForum List Unread Posts BadgesTo provide consistency between new messages, new blog posts and new forum posts the notification for forum posts has to be changed from text to a badge. The text/subtitle should now show the number of all posts.To provide consistency between new messages, new blog posts and new forum posts the notification for forum posts has to be changed from text to a badge. The text/subtitle should now show the number of all posts.Milestone CTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/399Contact List Unread Messages2018-06-12T11:32:27ZTorsten GroteContact List Unread MessagesCurrently the background of the contact changes when there are unread messages. Don't do this, but instead use little bubbles to indicate unread messages like so:
![screenshot_contacts](/uploads/934ee90a8f941cc1043540a23118026e/screen...Currently the background of the contact changes when there are unread messages. Don't do this, but instead use little bubbles to indicate unread messages like so:
![screenshot_contacts](/uploads/934ee90a8f941cc1043540a23118026e/screenshot_contacts.jpg)Milestone CTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/398Forum Sharing Status2018-06-12T11:32:27ZTorsten GroteForum Sharing Status![Forum Sharing Status](https://code.briarproject.org/akwizgran/briar/uploads/2aad92e52a41c235a44d38293c2b7f68/Metainformation_Overflow3.jpg)![Forum Sharing Status](https://code.briarproject.org/akwizgran/briar/uploads/2aad92e52a41c235a44d38293c2b7f68/Metainformation_Overflow3.jpg)Milestone CTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/396Convert ExpiredActivity to XML2018-06-12T11:32:27ZakwizgranConvert ExpiredActivity to XMLSubtask of #53.Subtask of #53.Milestone CTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/395Convert CreateIdentityActivity to XML2018-06-12T11:32:27ZakwizgranConvert CreateIdentityActivity to XMLSubtask of #53.Subtask of #53.Milestone CTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/394Add text input area to ForumActivity2018-06-12T11:32:27ZakwizgranAdd text input area to ForumActivityThe compose button should show the text input area. Touching the list of messages should hide the text input area.
WriteForumPostActivity and ReadForumPostActivity can be removed.
Subtask of #122.The compose button should show the text input area. Touching the list of messages should hide the text input area.
WriteForumPostActivity and ReadForumPostActivity can be removed.
Subtask of #122.Milestone Chttps://code.briarproject.org/briar/briar/-/issues/393Sort threaded messages2018-06-12T11:32:27ZakwizgranSort threaded messagesWrite code for sorting a forest of threaded messages:
* Roots in timestamp order
* Children below their parents
* Siblings in timestamp order
The input will be an unsorted collection of messages with parent pointers. The code mus...Write code for sorting a forest of threaded messages:
* Roots in timestamp order
* Children below their parents
* Siblings in timestamp order
The input will be an unsorted collection of messages with parent pointers. The code must not use more than O(n log n) time or space. Algorithms presumably exist already, find them!
Subtask of #122.Milestone Chttps://code.briarproject.org/briar/briar/-/issues/392Use new metadata queries for forum client2018-06-12T11:32:27ZTorsten GroteUse new metadata queries for forum clientUse new queries introduced in !187.Use new queries introduced in !187.Milestone CTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/386NullPointerException when rotating screen2018-06-12T11:32:27ZTorsten GroteNullPointerException when rotating screenJust rotate the screen in the contact or forum list. This was probably caused by the recent merge of !130
```
05-11 12:43:23.935 22116-22116/org.briarproject E/ACRA: ACRA caught a RuntimeException for org.briarproject
...Just rotate the screen in the contact or forum list. This was probably caused by the recent merge of !130
```
05-11 12:43:23.935 22116-22116/org.briarproject E/ACRA: ACRA caught a RuntimeException for org.briarproject
java.lang.RuntimeException: Unable to resume activity {org.briarproject/org.briarproject.android.NavDrawerActivity}: java.lang.NullPointerException
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2618)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2646)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2111)
at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3576)
at android.app.ActivityThread.access$700(ActivityThread.java:138)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1210)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4904)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at org.briarproject.android.contact.ContactListFragment.onResume(ContactListFragment.java:150)
at android.support.v4.app.Fragment.performResume(Fragment.java:2020)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1107)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1252)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1234)
at android.support.v4.app.FragmentManagerImpl.dispatchResume(FragmentManager.java:2056)
at android.support.v4.app.FragmentController.dispatchResume(FragmentController.java:196)
at android.support.v4.app.FragmentActivity.onResumeFragments(FragmentActivity.java:505)
at android.support.v4.app.FragmentActivity.onPostResume(FragmentActivity.java:494)
at android.support.v7.app.AppCompatActivity.onPostResume(AppCompatActivity.java:174)
at android.app.Activity.performResume(Activity.java:5332)
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2608)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2646)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2111)
at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3576)
at android.app.ActivityThread.access$700(ActivityThread.java:138)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1210)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
```Milestone Chttps://code.briarproject.org/briar/briar/-/issues/385Add BQP support to the LAN plugin2018-06-12T11:32:27ZakwizgranAdd BQP support to the LAN pluginThis will allow us to work around Bluetooth issues when both devices are connected to the same LAN.This will allow us to work around Bluetooth issues when both devices are connected to the same LAN.Milestone Chttps://code.briarproject.org/briar/briar/-/issues/382Deliver messages to incoming message hook after their dependencies2018-06-12T11:32:27ZakwizgranDeliver messages to incoming message hook after their dependenciesThe sync layer should keep track of each message's dependencies and deliver messages to the incoming message hook after their dependencies. If any dependency is invalid or in a different group, the message is invalid and should be delete...The sync layer should keep track of each message's dependencies and deliver messages to the incoming message hook after their dependencies. If any dependency is invalid or in a different group, the message is invalid and should be deleted.
Messages that are waiting for dependencies should not be visible to clients.
Subtask of #122.Milestone CTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/378Replace BDF data structures with classes in forum sharing client2018-06-12T11:32:28ZakwizgranReplace BDF data structures with classes in forum sharing clientThe forum sharing client uses BdfDictionary and BdfList for its internal data structures, rather than just for serialisation. This tends to push type checking from compile time to run time. Create classes to represent the protocol messag...The forum sharing client uses BdfDictionary and BdfList for its internal data structures, rather than just for serialisation. This tends to push type checking from compile time to run time. Create classes to represent the protocol messages and other internal state.Milestone CTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/375Extract ForumFactory from ForumManager2018-06-12T11:32:28ZakwizgranExtract ForumFactory from ForumManagerThe code for creating forums in ForumManager is used by ForumSharingManager and also needed by InviteeEngine. Extract it into its own class.The code for creating forums in ForumManager is used by ForumSharingManager and also needed by InviteeEngine. Extract it into its own class.Milestone CTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/374Add Forum Avatars to Available Forums List2018-06-12T11:32:28ZTorsten GroteAdd Forum Avatars to Available Forums ListAs soon as !172 and !178 have both been merged, the forum avatars should also be added to the Available Forums List.
As soon as !172 and !178 have both been merged, the forum avatars should also be added to the Available Forums List.
Milestone CTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/372Clean up Introduction Session States when removing contact2018-06-12T11:32:28ZTorsten GroteClean up Introduction Session States when removing contactCurrently, when a contact is removed, any existing sessions will be aborted, but no session state messages are deleted from the local group.
Currently, when a contact is removed, any existing sessions will be aborted, but no session state messages are deleted from the local group.
Milestone CTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/371Don't allow SessionId re-use in IntroductionClient2018-06-12T11:32:28ZTorsten GroteDon't allow SessionId re-use in IntroductionClientWhen an introducee received a message with type `TYPE_REQUEST` that re-uses an old `SessionId`, the introducee treats this as a new introduction.
Check for this to happen and if so, delete message without processing it.
Also add a test.When an introducee received a message with type `TYPE_REQUEST` that re-uses an old `SessionId`, the introducee treats this as a new introduction.
Check for this to happen and if so, delete message without processing it.
Also add a test.Milestone CTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/370Nav Drawer Activity doesn't remember selected Fragment2018-06-12T11:32:28ZTorsten GroteNav Drawer Activity doesn't remember selected Fragment1. Open Forums
2. Rotate your device
3. Observe how you suddenly see the contact list1. Open Forums
2. Rotate your device
3. Observe how you suddenly see the contact listMilestone CTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/355Keyboard closes when private message is sent2018-06-12T11:32:28ZakwizgranKeyboard closes when private message is sentA tester complained that he had to open the keyboard again for each new message.A tester complained that he had to open the keyboard again for each new message.Milestone Cakwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/340Progress wheels have transparent backgrounds2018-06-12T11:32:29ZakwizgranProgress wheels have transparent backgroundsViews containing progress wheels, which are supposed to have opaque backgrounds filling the screen, instead have transparent backgrounds. Possibly caused by recent changes to unify the background colour.
![device-2016-05-03-182935](/u...Views containing progress wheels, which are supposed to have opaque backgrounds filling the screen, instead have transparent backgrounds. Possibly caused by recent changes to unify the background colour.
![device-2016-05-03-182935](/uploads/17731df75bf5650e7e20813997d5c2c0/device-2016-05-03-182935.png)
![device-2016-05-03-182952](/uploads/1287fc090a9f8cc81e218ff6c6c3b315/device-2016-05-03-182952.png)
Milestone Cakwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/339Forum Sharing Integration Tests2018-06-12T11:32:29ZTorsten GroteForum Sharing Integration TestsMilestone CTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/337Avatar Placeholders for Forums2018-06-12T11:32:29ZTorsten GroteAvatar Placeholders for ForumsTo make forums visually more pleasing, they should have avatars that use the first letter of their name and a deterministically chosen color as a background. Here's a mockup:
![avatars](https://code.briarproject.org/akwizgran/briar/up...To make forums visually more pleasing, they should have avatars that use the first letter of their name and a deterministically chosen color as a background. Here's a mockup:
![avatars](https://code.briarproject.org/akwizgran/briar/uploads/7c7eb7eb7029c015bc2ed48a1115073c/forums_list_with_Circles.jpg)
Tthis works better with unsaturated colors. I would suggest saturation < 50%. For the identicons we pick random red, green and blue values in the bottom 3/4 of the range, which ensures the colours are somewhat desturated and dark enough to contrast with a light background.Milestone CTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/336Remove TestingActivity2018-06-12T11:32:29ZakwizgranRemove TestingActivityThis has been replaced by the new feedback reporter.This has been replaced by the new feedback reporter.Milestone Cakwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/335UX improvements for crash reports and feedback2018-06-12T11:32:29ZakwizgranUX improvements for crash reports and feedbackIssues to consider:
* Crash report activity appears before accepting the dialog
* Button text for dialog?
* Send icon instead of share icon?
* FAB floats in wrong position when keyboard is open on small screens
* Are crash report ...Issues to consider:
* Crash report activity appears before accepting the dialog
* Button text for dialog?
* Send icon instead of share icon?
* FAB floats in wrong position when keyboard is open on small screens
* Are crash report settings needed?
* Feedback activity uses transitions for separate task
Milestone Chttps://code.briarproject.org/briar/briar/-/issues/332Looper error in SplashScreenActivity on 5.0.1 with support library 23.2.12018-06-12T11:32:29Zstr4dLooper error in SplashScreenActivity on 5.0.1 with support library 23.2.1```
org.briarproject E/ACRA: ACRA caught a InflateException for org.briarproject
android.view.InflateException: Binary XML file line #2: Error inflating class PreferenceScreen
at android.support.v7.preference.PreferenceInflater.cr...```
org.briarproject E/ACRA: ACRA caught a InflateException for org.briarproject
android.view.InflateException: Binary XML file line #2: Error inflating class PreferenceScreen
at android.support.v7.preference.PreferenceInflater.createItem(PreferenceInflater.java:262)
at android.support.v7.preference.PreferenceInflater.onCreateItem(PreferenceInflater.java:281)
at android.support.v7.preference.PreferenceInflater.createItemFromTag(PreferenceInflater.java:290)
at android.support.v7.preference.PreferenceInflater.inflate(PreferenceInflater.java:161)
at android.support.v7.preference.PreferenceInflater.inflate(PreferenceInflater.java:117)
at android.support.v7.preference.PreferenceManager.inflateFromResource(PreferenceManager.java:115)
at android.support.v7.preference.PreferenceManager.setDefaultValues(PreferenceManager.java:328)
at android.support.v7.preference.PreferenceManager.setDefaultValues(PreferenceManager.java:287)
at org.briarproject.android.SplashScreenActivity$2.run(SplashScreenActivity.java:93)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Constructor.newInstance(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:288)
at android.support.v7.preference.PreferenceInflater.createItem(PreferenceInflater.java:256)
at android.support.v7.preference.PreferenceInflater.onCreateItem(PreferenceInflater.java:281)
at android.support.v7.preference.PreferenceInflater.createItemFromTag(PreferenceInflater.java:290)
at android.support.v7.preference.PreferenceInflater.inflate(PreferenceInflater.java:161)
at android.support.v7.preference.PreferenceInflater.inflate(PreferenceInflater.java:117)
at android.support.v7.preference.PreferenceManager.inflateFromResource(PreferenceManager.java:115)
at android.support.v7.preference.PreferenceManager.setDefaultValues(PreferenceManager.java:328)
at android.support.v7.preference.PreferenceManager.setDefaultValues(PreferenceManager.java:287)
at org.briarproject.android.SplashScreenActivity$2.run(SplashScreenActivity.java:93)
Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
at android.os.Handler.<init>(Handler.java:200)
at android.os.Handler.<init>(Handler.java:114)
at android.support.v7.preference.PreferenceGroup.<init>(PreferenceGroup.java:61)
at android.support.v7.preference.PreferenceGroup.<init>(PreferenceGroup.java:87)
at android.support.v7.preference.PreferenceScreen.<init>(PreferenceScreen.java:84)
at java.lang.reflect.Constructor.newInstance(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:288)
at android.support.v7.preference.PreferenceInflater.createItem(PreferenceInflater.java:256)
at android.support.v7.preference.PreferenceInflater.onCreateItem(PreferenceInflater.java:281)
at android.support.v7.preference.PreferenceInflater.createItemFromTag(PreferenceInflater.java:290)
at android.support.v7.preference.PreferenceInflater.inflate(PreferenceInflater.java:161)
at android.support.v7.preference.PreferenceInflater.inflate(PreferenceInflater.java:117)
at android.support.v7.preference.PreferenceManager.inflateFromResource(PreferenceManager.java:115)
at android.support.v7.preference.PreferenceManager.setDefaultValues(PreferenceManager.java:328)
at android.support.v7.preference.PreferenceManager.setDefaultValues(PreferenceManager.java:287)
at org.briarproject.android.SplashScreenActivity$2.run(SplashScreenActivity.java:93)
```
Reverting to 23.1.1 stops the error.Milestone Cakwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/331Viewfinder disappears after pausing and resuming activity2018-06-12T11:32:29ZakwizgranViewfinder disappears after pausing and resuming activitySteps to reproduce:
* Click the home button while the QR code camera view is showing
* Click the recents button and return to the camera view
The issue seems to be that the surface is created when the camera's opened, destroyed when...Steps to reproduce:
* Click the home button while the QR code camera view is showing
* Click the recents button and return to the camera view
The issue seems to be that the surface is created when the camera's opened, destroyed when the camera's released, and not recreated when the camera's reopened. Log:
```
04-27 16:09:16.690 22164-23700/org.briarproject I/KeyAgreementConnector: Starting BQP listeners
04-27 16:09:16.690 22164-23700/org.briarproject I/DroidtoothPlugin: Key agreement UUID 1fb1978a-ebfe-3dda-8677-445838dbdf43
04-27 16:09:16.690 22164-23700/org.briarproject I/InsecureBluetooth: Listening with new API
04-27 16:09:16.690 22164-23701/org.briarproject I/ShowQrCodeFragment: Opening camera
04-27 16:09:16.790 22164-22164/org.briarproject I/CameraView: Surface created
04-27 16:09:16.790 22164-22164/org.briarproject I/CameraView: Surface changed: 320x399
04-27 16:09:16.800 22164-22164/org.briarproject I/CameraView: Calculated framing rect: null
04-27 16:09:16.800 22164-22164/org.briarproject I/CameraView: Calculated framing rect: null
04-27 16:09:17.520 22164-22164/org.briarproject I/CameraView: Display orientation 90 degrees
04-27 16:09:17.540 22164-22164/org.briarproject I/CameraView: Scene modes: [auto, night, snow, sports]
04-27 16:09:17.540 22164-22164/org.briarproject I/CameraView: Focus modes: [infinity, fixed]
04-27 16:09:17.540 22164-22164/org.briarproject I/CameraView: Setting focus mode to fixed
04-27 16:09:17.540 22164-22164/org.briarproject I/CameraView: Finding framing dimension, side1 = 480, side2 = 160
04-27 16:09:17.540 22164-22164/org.briarproject I/CameraView: Returning minimum side length: 160
04-27 16:09:17.540 22164-22164/org.briarproject I/CameraView: Metering areas supported: 1
04-27 16:09:17.540 22164-22164/org.briarproject I/CameraView: Size 640x480, stretch 1.06934, pixels 307200, score 287280.0
04-27 16:09:17.550 22164-22164/org.briarproject I/CameraView: Size 640x368, stretch 1.3947914, pixels 235520, score 168856.8
04-27 16:09:17.550 22164-22164/org.briarproject I/CameraView: Size 512x288, stretch 1.4257866, pixels 147456, score 103420.805
04-27 16:09:17.550 22164-22164/org.briarproject I/CameraView: Size 384x288, stretch 1.06934, pixels 110592, score 103420.805
04-27 16:09:17.550 22164-22164/org.briarproject I/CameraView: Size 352x288, stretch 1.0201705, pixels 101376, score 99371.63
04-27 16:09:17.560 22164-22164/org.briarproject I/CameraView: Size 320x240, stretch 1.06934, pixels 76800, score 71820.0
04-27 16:09:17.560 22164-22164/org.briarproject I/CameraView: Size 176x144, stretch 1.0201705, pixels 25344, score 24842.908
04-27 16:09:17.560 22164-22164/org.briarproject I/CameraView: Best size 640x480
04-27 16:09:17.710 22164-22164/org.briarproject I/CameraView: Finding framing dimension, side1 = 320, side2 = 240
04-27 16:09:17.710 22164-22164/org.briarproject I/CameraView: Returning hard minimum: 240
04-27 16:09:17.710 22164-22164/org.briarproject I/CameraView: Calculated framing rect: Rect(40, 0 - 280, 240)
04-27 16:09:23.410 22164-22164/org.briarproject I/ShowQrCodeFragment: Releasing camera
04-27 16:09:23.950 22164-22164/org.briarproject I/CameraView: Surface destroyed
04-27 16:09:24.060 22164-23852/org.briarproject I/KeyAgreementConnector: Stopping BQP listeners
04-27 16:09:29.750 22164-23749/org.briarproject I/ShowQrCodeFragment: Opening camera
04-27 16:09:29.760 22164-23950/org.briarproject I/KeyAgreementConnector: Starting BQP listeners
04-27 16:09:29.760 22164-23950/org.briarproject I/DroidtoothPlugin: Key agreement UUID 00073827-b31d-3cd8-b5bf-596321f0501f
04-27 16:09:29.780 22164-23950/org.briarproject I/InsecureBluetooth: Listening with new API
04-27 16:09:30.750 22164-22164/org.briarproject I/CameraView: Display orientation 90 degrees
04-27 16:09:30.750 22164-22164/org.briarproject I/CameraView: Scene modes: [auto, night, snow, sports]
04-27 16:09:30.760 22164-22164/org.briarproject I/CameraView: Focus modes: [infinity, fixed]
04-27 16:09:30.760 22164-22164/org.briarproject I/CameraView: Setting focus mode to fixed
04-27 16:09:30.760 22164-22164/org.briarproject I/CameraView: Metering areas supported: 1
04-27 16:09:30.760 22164-22164/org.briarproject I/CameraView: Size 640x480, stretch 1.06934, pixels 307200, score 287280.0
04-27 16:09:30.760 22164-22164/org.briarproject I/CameraView: Size 640x368, stretch 1.3947914, pixels 235520, score 168856.8
04-27 16:09:30.760 22164-22164/org.briarproject I/CameraView: Size 512x288, stretch 1.4257866, pixels 147456, score 103420.805
04-27 16:09:30.760 22164-22164/org.briarproject I/CameraView: Size 384x288, stretch 1.06934, pixels 110592, score 103420.805
04-27 16:09:30.760 22164-22164/org.briarproject I/CameraView: Size 352x288, stretch 1.0201705, pixels 101376, score 99371.63
04-27 16:09:30.770 22164-22164/org.briarproject I/CameraView: Size 320x240, stretch 1.06934, pixels 76800, score 71820.0
04-27 16:09:30.770 22164-22164/org.briarproject I/CameraView: Size 176x144, stretch 1.0201705, pixels 25344, score 24842.908
04-27 16:09:30.770 22164-22164/org.briarproject I/CameraView: Best size 640x480
```Milestone Cakwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/328BriarReportPrimer makes calls that require a Looper on some devices2018-06-12T11:32:29ZakwizgranBriarReportPrimer makes calls that require a Looper on some devicesWhen handling an exception, BriarReportPrimer calls BluetoothAdapter.getDefaultAdapter(). On some devices, this method throws a RuntimeException if it's called from a thread without a Looper, i.e. a thread that hasn't called Looper.prepa...When handling an exception, BriarReportPrimer calls BluetoothAdapter.getDefaultAdapter(). On some devices, this method throws a RuntimeException if it's called from a thread without a Looper, i.e. a thread that hasn't called Looper.prepare().
It may be possible to avoid the RuntimeException by using AndroidExecutor to call BluetoothAdapter.getDefaultAdapter(), as DroidtoothPlugin does. However, AndroidExecutor uses the UI thread - if that thread threw the original exception and has therefore died, the Callable might never run and BriarReportPrimer would wait forever.
AndroidExecutor used to create its own captive thread with a Looper. We could revert to that design, but a similar problem would occur if the executor's captive thread had died (less likely but still possible). Since AndroidExecutor is used rarely, perhaps it should create a new thread for each call?
```
04-27 12:28:38.944 23487-23675/org.briarproject E/ACRA: ACRA caught a NoSuchMethodError for org.briarproject
java.lang.NoSuchMethodError: java.util.Collections.emptyEnumeration
at org.briarproject.lifecycle.LifecycleManagerImpl.startServices(LifecycleManagerImpl.java:80)
at org.briarproject.android.BriarService$1.run(BriarService.java:92)
04-27 12:28:39.054 23487-23675/org.briarproject E/ACRA: ACRA failed to capture the error - handing off to native error reporter
java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
at android.os.Handler.<init>(Handler.java:121)
at android.bluetooth.BluetoothAdapter$1.<init>(BluetoothAdapter.java:1128)
at android.bluetooth.BluetoothAdapter.<init>(BluetoothAdapter.java:1128)
at android.bluetooth.BluetoothAdapter.getDefaultAdapter(BluetoothAdapter.java:455)
at org.briarproject.android.util.BriarReportPrimer.primeReport(BriarReportPrimer.java:150)
at org.acra.builder.ReportExecutor.execute(ReportExecutor.java:125)
at org.acra.builder.ReportBuilder.build(ReportBuilder.java:148)
at org.acra.ErrorReporter.uncaughtException(ErrorReporter.java:260)
at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:854)
at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:851)
04-27 12:28:39.054 23487-23675/org.briarproject I/ACRA: ACRA is disabled for org.briarproject - forwarding uncaught Exception on to default ExceptionHandler
```Milestone Cakwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/325BriarRecyclerView allows `this` to escape constructor2018-06-12T11:32:30ZakwizgranBriarRecyclerView allows `this` to escape constructor`BriarRecyclerView#initViews()`, which is called from the constructor, passes `this` to `LayoutInflater#inflate()`.`BriarRecyclerView#initViews()`, which is called from the constructor, passes `this` to `LayoutInflater#inflate()`.Milestone Cakwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/322New ForumSharingManager based on ProtocolEngine2018-06-12T11:32:30ZTorsten GroteNew ForumSharingManager based on ProtocolEngineIn order to improve the UX for sharing forums, the `ForumSharingManager` needs to be rewritten.
Similar to the `IntroductionManager`, it should make use of the abstract Protocol engine and implement a protocol (#320) between two parties...In order to improve the UX for sharing forums, the `ForumSharingManager` needs to be rewritten.
Similar to the `IntroductionManager`, it should make use of the abstract Protocol engine and implement a protocol (#320) between two parties.
This is a subtask of Issue #121 which concerns the UX. The interface with the UI is discussed in #321.Milestone CTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/321ForumSharingManager interface with UI2018-06-12T11:32:30ZTorsten GroteForumSharingManager interface with UIThe ForumSharingManager will be rewritten and changes its paradigm from "sharing as state" to "sharing as action", so the UI interface will need to change along with it.
This is how it could look like:
```java
/** Returns the uniq...The ForumSharingManager will be rewritten and changes its paradigm from "sharing as state" to "sharing as action", so the UI interface will need to change along with it.
This is how it could look like:
```java
/** Returns the unique ID of the forum sharing client. */
ClientId getClientId();
/** Sends an invitation to share the given forum with the given contact and sends an optional message along with it. */
void sendForumInvitation(Forum f, ContactId contactId, @Nullable String message) throws DbException;
/** Responds to a pending forum invitation */
void respondToInvitation(SessionId sessionId, ContactId contactId, boolean accept) throws DbException;
/** Returns all forum sharing messages sent by the Contact identified by contactId. */
Collection<ForumInvitationMessage> getForumInvitationMessages(ContactId contactId) throws DbException;
/** Returns all forums to which the user could subscribe. */
Collection<Forum> getAvailableForums() throws DbException;
/** Returns all contacts who are sharing the given forum with the user. */
Collection<Contact> getSharedBy(Forum f) throws DbException;
/** Returns the IDs of all contacts with whom the given forum is shared. */
Collection<ContactId> getSharedWith(Forum f) throws DbException;
```
Note that I removed methods for adding and (un)subscribing to/from a forum. These are probably better placed into the `ForumManager`.
This is a subtask of Issue #121.Milestone CTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/320Design Protocol for Sharing Forums2018-06-12T11:32:30ZTorsten GroteDesign Protocol for Sharing ForumsThe protocol will look like a simpler version of the introduction protocol, with two parties per session, and messages for invite/accept/decline/abort. (if you share a forum with more than one contact we can just create one session per c...The protocol will look like a simpler version of the introduction protocol, with two parties per session, and messages for invite/accept/decline/abort. (if you share a forum with more than one contact we can just create one session per contact, there's no reason to tie them together.)
1: **INVITATION** - This is send by the sharer to one of her contacts. The content is a BDF list.
* (int) The type of the message, here 1
* (raw) SessionId chosen by the sharer
* (string) name of the forum
* (raw) salt to uniquely identify this forum
* (string) optional invitation message
2: **ACCEPT RESPONSE** - This should be sent by contacts that received a sharing invitation. The content is a BDF list with these elements:
* (int) The type of the message, here 2
* (raw) SessionId must match the SessionId of an unanswered invitation.
3: **DECLINE RESPONSE** - This should be sent by contacts that received a sharing invitation and do not want to add the forum. The content is a BDF list with these elements:
* (int) The type of the message, here 3
* (raw) SessionId must match the SessionId of an unanswered invitation.
4: **LEAVE** - This should be send by a contact that is unsubscribing from the forum. The content is a BDF list with two elements:
* (int) The type of the message, here 4
* (raw) SessionId must match the SessionId of a previous (un)answered invitation.
5: **ABORT** - This should be send by a contact that encountered an error, so that it can not complete the protocol. The content is a BDF list with two elements:
* (int) The type of the message, here 5
* (raw) SessionId must match the SessionId of an unanswered invitation.
A successful run of the protocol would look like this:
![forum-sharing](/uploads/8f53758e8ed55146f498181b2708a9b1/forum-sharing.png)
**Sharer**
![sharer-state-machine](/uploads/5ca0924c21eef0601e5cfdf4060577ad/sharer-state-machine.png)
[sharer-state-machine.odg](/uploads/24354e5ef7779d36ed7a815eccb8f35e/sharer-state-machine.odg)
**Invitee**
![invitee-state-machine](/uploads/b57dc42ebe5873530543ce7ab36af8f4/invitee-state-machine.png)
[invitee-state-machine.odg](/uploads/2099baeb7948980819022fda5f402aed/invitee-state-machine.odg)
Arrows that have no label stand for 'all other actions'.
It should be documented in the wiki as well: https://code.briarproject.org/akwizgran/briar/wikis/ForumSharingClient
This is a subtask of Issue #322.Milestone CTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/316Tor mobile data setting is broken2018-06-12T11:32:30ZakwizgranTor mobile data setting is brokenSomebody renamed it in the UI but not in the backend.Somebody renamed it in the UI but not in the backend.Milestone Cakwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/313Move create forum post and share forum buttons in action bar2018-06-12T11:32:30ZTorsten GroteMove create forum post and share forum buttons in action barThis is a subtask of #121.
According to the designs in #305, the 'create forum post' and 'share forum' buttons will go into the in action bar.
In the spirit of keeping MRs small and to avoid conflicts with #306, this could be done ...This is a subtask of #121.
According to the designs in #305, the 'create forum post' and 'share forum' buttons will go into the in action bar.
In the spirit of keeping MRs small and to avoid conflicts with #306, this could be done first and independently of future work.Milestone CTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/311Audit crash report and feedback fields for sensitive or identifying information2018-06-12T11:32:30ZakwizgranAudit crash report and feedback fields for sensitive or identifying informationSubtask of #123.Subtask of #123.Milestone CTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/307Background color2018-06-12T11:32:30ZMegaloxBackground colorWe have to decide onthe background color of the appWe have to decide onthe background color of the appMilestone Chttps://code.briarproject.org/briar/briar/-/issues/306Final mockups for threaded forum discussions2018-06-12T11:32:30ZakwizgranFinal mockups for threaded forum discussionsSubtask of #122.Subtask of #122.Milestone Chttps://code.briarproject.org/briar/briar/-/issues/305Final mockups for sharing forums2018-06-12T11:32:30ZakwizgranFinal mockups for sharing forumsSubtask of #121.Subtask of #121.Milestone Chttps://code.briarproject.org/briar/briar/-/issues/298QR code decoder throws ArrayIndexOutOfBoundsException2018-06-12T11:32:30ZakwizgranQR code decoder throws ArrayIndexOutOfBoundsExceptionI got this crash on the Galaxy Ace 2 while testing the 278-bqp-ui branch, but it doesn't look like it's specific to that branch:
```
04-15 16:35:16.004 6537-8301/org.briarproject W/CrashHandler: Uncaught exception
java.lang.RuntimeE...I got this crash on the Galaxy Ace 2 while testing the 278-bqp-ui branch, but it doesn't look like it's specific to that branch:
```
04-15 16:35:16.004 6537-8301/org.briarproject W/CrashHandler: Uncaught exception
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:299)
at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
at java.util.concurrent.FutureTask.run(FutureTask.java:137)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
at java.lang.Thread.run(Thread.java:856)
Caused by: java.lang.ArrayIndexOutOfBoundsException: length=460800; index=460800
at com.google.zxing.common.HybridBinarizer.calculateBlackPoints(HybridBinarizer.java:184)
at com.google.zxing.common.HybridBinarizer.getBlackMatrix(HybridBinarizer.java:79)
at com.google.zxing.BinaryBitmap.getBlackMatrix(BinaryBitmap.java:85)
at com.google.zxing.qrcode.QRCodeReader.decode(QRCodeReader.java:77)
at org.briarproject.android.util.QrCodeDecoder$DecoderTask.doInBackground(QrCodeDecoder.java:87)
at org.briarproject.android.util.QrCodeDecoder$DecoderTask.doInBackground(QrCodeDecoder.java:63)
at android.os.AsyncTask$2.call(AsyncTask.java:287)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
at java.util.concurrent.FutureTask.run(FutureTask.java:137)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
at java.lang.Thread.run(Thread.java:856)
```
Milestone Cakwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/297Contact list flickers when resuming2018-06-12T11:32:31ZakwizgranContact list flickers when resumingOn slower devices it's noticeable that the contact list redraws itself twice when returning from ConversationActivity.
This doesn't appear to be related to batched updates - it happens with a single contact, even if the call to `Sorte...On slower devices it's noticeable that the contact list redraws itself twice when returning from ConversationActivity.
This doesn't appear to be related to batched updates - it happens with a single contact, even if the call to `SortedList#clear()` is moved into the same batched update as the call to `SortedList#addAll()`.Milestone Cakwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/296Use consistent styling for dialogs2018-06-12T11:32:31ZakwizgranUse consistent styling for dialogsSome of the dialogs in the app use Material Design styling on all devices, others use MD styling on newer devices and older styling on older devices. Pick one approach and apply it consistently.Some of the dialogs in the app use Material Design styling on all devices, others use MD styling on newer devices and older styling on older devices. Pick one approach and apply it consistently.Milestone Cakwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/293Remove avatar code and layout from ConversationActivity and ConversationAdapter2018-06-12T11:32:31ZakwizgranRemove avatar code and layout from ConversationActivity and ConversationAdapterThis code is currently unused, remove it if we're definitely not going to use it.This code is currently unused, remove it if we're definitely not going to use it.Milestone CTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/292Reuse contact selector for introductions and sharing2018-06-12T11:32:31ZakwizgranReuse contact selector for introductions and sharingSeparate the contact chooser from the contact list and make it reusable for introductions and the various sharing features.Separate the contact chooser from the contact list and make it reusable for introductions and the various sharing features.Milestone CTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/287Don't allow local identities to be added as contacts2018-06-12T11:32:31ZakwizgranDon't allow local identities to be added as contactsMilestone Cakwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/286Some progress wheels are almost invisible on Gingerbread2018-06-12T11:32:31ZakwizgranSome progress wheels are almost invisible on GingerbreadOn the HTC Wildfire S (Android 2.3.3), some progress wheels are clearly visible but others are very pale and almost invisible. Probably a theming issue.
Visible:
* Contact list loading
Very pale:
* Signing in
* Signing out
* QR...On the HTC Wildfire S (Android 2.3.3), some progress wheels are clearly visible but others are very pale and almost invisible. Probably a theming issue.
Visible:
* Contact list loading
Very pale:
* Signing in
* Signing out
* QR code progress
* Identity exchange progressMilestone Cakwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/281Close transport connection if tag isn't recognised2018-06-12T11:32:31ZakwizgranClose transport connection if tag isn't recognisedRegression caused by my recent changes to ConnectionManagerImpl.Regression caused by my recent changes to ConnectionManagerImpl.Milestone Cakwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/280Break up ConstantsTest2018-06-12T11:32:31ZakwizgranBreak up ConstantsTestThis integration test used to check that data produced at runtime matched constants declared in the API, but most of the meaningful tests have been removed. Convert the remaining tests into unit tests.This integration test used to check that data produced at runtime matched constants declared in the API, but most of the meaningful tests have been removed. Convert the remaining tests into unit tests.Milestone Cakwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/277Unit tests for Forum list & posts2018-06-12T11:32:31ZErnir ErlingssonUnit tests for Forum list & postsNote that this does not include the forum sharing tests, that part is still up for grabs Note that this does not include the forum sharing tests, that part is still up for grabs Milestone Chttps://code.briarproject.org/briar/briar/-/issues/274Code encapsulation techniques2018-06-12T11:32:31ZErnir ErlingssonCode encapsulation techniquesThis issue is a prerequisite of #255
Right now we aren't really using any code design patterns, e.g. MVC, MVP, in the briar-android module. There is hardly any encapsulation between logic, threading or UI and there are a lot of redund...This issue is a prerequisite of #255
Right now we aren't really using any code design patterns, e.g. MVC, MVP, in the briar-android module. There is hardly any encapsulation between logic, threading or UI and there are a lot of redundancies. Improve this by decoupling the logic and UI code, using dependency injections and inheritance if needed.Milestone Chttps://code.briarproject.org/briar/briar/-/issues/273Services should throw exceptions for startup errors2018-06-12T11:32:31ZakwizgranServices should throw exceptions for startup errors`Service#start()` returns true if the service started successfully. Services are always expected to start unless there's a fatal problem, so the interface should use an exception rather than a return value to indicate an error.`Service#start()` returns true if the service started successfully. Services are always expected to start unless there's a fatal problem, so the interface should use an exception rather than a return value to indicate an error.Milestone Cakwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/271Port the splash screen and create forum activities to XML layout2018-06-12T11:32:32ZSantiago Torres-AriasPort the splash screen and create forum activities to XML layoutThis is a subtask of issue #53 This is a subtask of issue #53 Milestone CSantiago Torres-AriasSantiago Torres-Ariashttps://code.briarproject.org/briar/briar/-/issues/270Briar restarts after signing out2018-06-12T11:32:32ZakwizgranBriar restarts after signing outSince merging the Dagger branch, the splash screen and password screen reappear after I sign out.Since merging the Dagger branch, the splash screen and password screen reappear after I sign out.Milestone Cakwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/263Deleting account does not delete Tor directory2018-06-12T11:32:32ZakwizgranDeleting account does not delete Tor directoryWhen the user's account is deleted via the password screen, the Tor directory isn't deleted. This is a serious problem as the Tor directory contains the private key for the hidden service. If the user creates a new account, the same hidd...When the user's account is deleted via the password screen, the Tor directory isn't deleted. This is a serious problem as the Tor directory contains the private key for the hidden service. If the user creates a new account, the same hidden service address is used.Milestone Cakwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/262briar dos not try to reconnect by itself after connection loss2018-06-12T11:32:32Zxavierbriar dos not try to reconnect by itself after connection lossafter a loss of connection i have the feeling that briar is not trying so much to reconnect.
i have seen that several times.
briar shows all contacts offline
if i send a message to several contacts, it does not seems to try reinit c...after a loss of connection i have the feeling that briar is not trying so much to reconnect.
i have seen that several times.
briar shows all contacts offline
if i send a message to several contacts, it does not seems to try reinit connection
if i disconnect and reconnect mannually
then all contacts goes back online.
maybe sending messages to a offline client when most clients are offline shall make briar to reinit all connections.
this is more present on the 3g 4g networks.
on same wifi lan and bluetooth. i do no see that behaviorMilestone Cakwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/260torbot unable to start when briar is on2018-06-12T11:32:32Zxaviertorbot unable to start when briar is onwhen briar is active on the wan then i cannot start torbot on the same device.
maybe it is something related to #259 when briar is active on the wan then i cannot start torbot on the same device.
maybe it is something related to #259 Milestone Cakwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/258Replace Timer with ScheduledExecutorService2018-06-12T11:32:32ZakwizgranReplace Timer with ScheduledExecutorServiceThe Timer implementation used by PollerImpl and TransportKeyManager is based on java.util.Timer, which is sensitive to changes in the system clock:
http://stackoverflow.com/questions/18803695/how-is-the-timer-class-in-java-sensitive-t...The Timer implementation used by PollerImpl and TransportKeyManager is based on java.util.Timer, which is sensitive to changes in the system clock:
http://stackoverflow.com/questions/18803695/how-is-the-timer-class-in-java-sensitive-to-the-system-clock
Replace it with an implementation based on ScheduledExecutorService.Milestone Cakwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/255Client API improvements2018-06-12T11:32:32ZakwizgranClient API improvementsQuoting @grote:
> Last night I thought about the Client API as well and I tried to forget most of what I know about how things are implemented at the moment, so I can have a fresh view on how a developer writing a client without being f...Quoting @grote:
> Last night I thought about the Client API as well and I tried to forget most of what I know about how things are implemented at the moment, so I can have a fresh view on how a developer writing a client without being familiar with Briar's internals would see things.
> It is nice to being able to access the raw message, being able to put your own data structures in there. It is nice that you can encode and parse metadata. However, for many applications that might not be necessary and all the developer wants is a simple key value store. We have this already with the BdfDictionary which resembles JSON and which I like.
> So I was wondering, why we don't add a layer on top of what we have and allow the client developer to directly get a BdfDictionary (which I will call Payload) from the message. The same way, when composing the message, just let the developer provide the payload and the lower layers handle the rest.
> Here's some pseudo code to illustrate those thoughts:
```java
class MyClient extends BrambleClient {
@Override
public void receivedMessage(Message m) {
Payload payload = m.getPayload(); // this is currently called BdfDictionary
String myString = payload.getString("myString");
long myInt = payload.getIntegeger("myInt");
Object myObject = payload.getSerializable("mySerializableObject");
doSomething(myString, myInt);
}
public void sendMessage() {
Payload payload = new Payload();
payload.putString("myString", "foo");
payload.putInteger("myString", "foo");
payload.putSerializable("mySerializableObject", myObject);
Message m = messageFactory.createMessage(payload);
// if that's not possible, it can be db.addLocalMessage(group, ...)
Group group = getGroup(contact);
group.sendMessage(m);
}
public void doSomething(String s, int i) {
// payload queries for easy access to messages
List<Messages> msgs1 = db.getMessagesWithPayloadKey(group, "myString");
List<Messages> msgs2 = db.getMessagesWherePayload(group, "myString", String, s);
}
}
```
> Adding data to the payload is very similar to how intent extras or bundles work in the Android API, so many people are already familar with it.
> Also note that there's no mention of validatingMessage() because the client developer is only interesting in receiving a message, so there could be just another hook for that.
> If at all possible, I would like the client developer to write as little validation code as possible. Not having to check lengths and such things, but maybe only to see if the payload objects she expects are there.
> I think that payload queries (however they will look like) would also be a very nice addition and convenience methods for client developers, so they don't have to iterate through message lists themselves just to find the ones they are interested in.Milestone Cakwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/247Replace Guice/Roboguice with Dagger 22018-06-12T11:32:33ZErnir ErlingssonReplace Guice/Roboguice with Dagger 2After much deliberation we decided to replace Guice and Roboguice with Dagger 2 due to these benefits:
* Better performance
* No reflection
* Smaller library
* Compile errors instead of runtime errors.After much deliberation we decided to replace Guice and Roboguice with Dagger 2 due to these benefits:
* Better performance
* No reflection
* Smaller library
* Compile errors instead of runtime errors.Milestone Chttps://code.briarproject.org/briar/briar/-/issues/246Set up unit testing for Android code2018-06-12T11:32:33ZakwizgranSet up unit testing for Android codeWe currently have unit tests for (parts of) briar-core and briar-desktop, but not for briar-android. Some of the UI logic is quite complex and should be tested. Choose an appropriate test framework and set up automated unit tests.We currently have unit tests for (parts of) briar-core and briar-desktop, but not for briar-android. Some of the UI logic is quite complex and should be tested. Choose an appropriate test framework and set up automated unit tests.Milestone Chttps://code.briarproject.org/briar/briar/-/issues/222Metadata queries2018-08-02T11:01:32ZakwizgranMetadata queriesCreate a minimal query interface that allows clients to query messages and groups by their metadata.
This could be loosely modelled on [MongoDB's query interface](https://docs.mongodb.org/manual/core/read-operations-introduction/#quer...Create a minimal query interface that allows clients to query messages and groups by their metadata.
This could be loosely modelled on [MongoDB's query interface](https://docs.mongodb.org/manual/core/read-operations-introduction/#query-interface):
* Use the builder pattern to construct queries
* Optionally supply a criteria object: this is a Metadata object populated with keys and optionally values to match
* Optionally supply a projection object: this is a Metadata object populated with keys to retrieve
* Optionally count results instead of returning them
Milestone Cakwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/206Use Material Design and Standard Practises for SettingsActivity2018-06-12T11:32:34ZTorsten GroteUse Material Design and Standard Practises for SettingsActivityCurrently, the SettingsActivity is written by hand and difficult to extent. It does not use Material Design like the rest of the application (will).
It should be rewritten using [best practices](https://developer.android.com/guide/top...Currently, the SettingsActivity is written by hand and difficult to extent. It does not use Material Design like the rest of the application (will).
It should be rewritten using [best practices](https://developer.android.com/guide/topics/ui/settings.html).
If for some reason, the preferences should not be stored in the default Android location, a custom PreferenceManager needs to be implemented.Milestone Chttps://code.briarproject.org/briar/briar/-/issues/203Remove Tor binaries from repo2018-06-12T11:32:34ZakwizgranRemove Tor binaries from repoThe Tor binaries (and Tor's GeoIP database) need to be updated regularly - this makes the repo enormous. Remove the binaries from the repo and find a convenient way of downloading and verifying them during the build process - possibly gr...The Tor binaries (and Tor's GeoIP database) need to be updated regularly - this makes the repo enormous. Remove the binaries from the repo and find a convenient way of downloading and verifying them during the build process - possibly gradle-witness?
We may want to remove the binaries from the repo's history too, but that will need to be co-ordinated among all developers to avoid git breakage.Milestone Cakwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/154Test Requirement of Foreground and Permanent Notification Icon2018-06-12T11:32:36ZTorsten GroteTest Requirement of Foreground and Permanent Notification IconShowing a permanent notification icon is discouraged and many people's notification bar is incredibly cluttered with notification icons already. I'd like to raise the question whether we really need to show the icon to signal the user th...Showing a permanent notification icon is discouraged and many people's notification bar is incredibly cluttered with notification icons already. I'd like to raise the question whether we really need to show the icon to signal the user that she is signed into Briar at the moment.
The notification icon is shown for the app to run in the foreground and for preventing it from getting killed. However, we should experiment to see whether running in the foreground is definitely necessary. (It's more likely to be necessary on devices with less memory, so that's the place to test.)Milestone Cakwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/149Use control port to create Tor hidden service2018-06-12T11:32:37ZakwizgranUse control port to create Tor hidden serviceHidden services can now be created via the control port, with the controller storing the private key. This will enable us to store the private key in the encrypted database.Hidden services can now be created via the control port, with the controller storing the private key. This will enable us to store the private key in the encrypted database.Milestone Chttps://code.briarproject.org/briar/briar/-/issues/126User stories for partner organisation's Bramble app2018-06-12T11:32:38ZakwizgranUser stories for partner organisation's Bramble appAgile user stories describing how the app will be used. "As an X, I want Y so that Z".Agile user stories describing how the app will be used. "As an X, I want Y so that Z".Milestone Cakwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/125Use cases for partner organisation's Bramble app2018-06-12T11:32:38ZakwizgranUse cases for partner organisation's Bramble appHigh-level description of the tasks for which the app will be used.High-level description of the tasks for which the app will be used.Milestone Cakwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/124User feedback submitted via Tor2018-06-12T11:32:38ZakwizgranUser feedback submitted via TorIf a user wants to send feedback to the developers, the app should encrypt the feedback with the developers' public key and post it to a feedback channel.
Messages in the feedback channel should be synced with contacts, but no further...If a user wants to send feedback to the developers, the app should encrypt the feedback with the developers' public key and post it to a feedback channel.
Messages in the feedback channel should be synced with contacts, but no further. We'll need to add a special contact that's only reachable via Tor for delivering feedback to the developers. To prevent the special contact from being a single point where Briar users can be enumerated, it should only be contacted when there's feedback to deliver.
Users should be able to opt out of delivering feedback for their contacts.Milestone Chttps://code.briarproject.org/briar/briar/-/issues/123Encrypted crash reports submitted via Tor2018-06-12T11:32:38ZakwizgranEncrypted crash reports submitted via TorIf the user chooses to report a crash, the crash reporter should encrypt the crash report with the developers' public key and store it on the disk until the app is re-launched. The app should import the encrypted report, post it to a cra...If the user chooses to report a crash, the crash reporter should encrypt the crash report with the developers' public key and store it on the disk until the app is re-launched. The app should import the encrypted report, post it to a crash report channel and delete it from the disk.
Messages in the crash report channel should be synced with contacts, but no further. We'll need to add a special contact that's only reachable via Tor for delivering reports to the developers. To prevent the special contact from being a single point where Briar users can be enumerated, it should only be contacted when there are crash reports to deliver.
Users should be able to opt out of sending crash reports and opt out of delivering crash reports for their contacts.Milestone Chttps://code.briarproject.org/briar/briar/-/issues/122UI for threaded discussions2018-06-12T11:32:38ZakwizgranUI for threaded discussionsForum conversations are currently shown in a flat list, which testers have found confusing. Create a threaded view in which replies are nested below their parents. Reddit shows that this is possible on a phone screen. At some level of ne...Forum conversations are currently shown in a flat list, which testers have found confusing. Create a threaded view in which replies are nested below their parents. Reddit shows that this is possible on a phone screen. At some level of nesting, replies will need to be collapsed.Milestone Chttps://code.briarproject.org/briar/briar/-/issues/121Improve UX for sharing forums2018-06-12T11:32:38ZakwizgranImprove UX for sharing forumsThe process for sharing a forum should involve an explicit invitation message. It should be possible to accept, decline or ignore invitations, and the invitation status of each contact should be shown when viewing the details of a forum....The process for sharing a forum should involve an explicit invitation message. It should be possible to accept, decline or ignore invitations, and the invitation status of each contact should be shown when viewing the details of a forum.
We may also want to show information about the contacts and other identities that have posted to the forum.Milestone Chttps://code.briarproject.org/briar/briar/-/issues/120Identicons2018-06-12T11:32:38ZakwizgranIdenticonsGenerate a pseudo-random icon for each identity to help users distinguish between identities with similar names.
Unknown identities should use greyscale, known identities (contacts and self) should use colour.
The input to the icon...Generate a pseudo-random icon for each identity to help users distinguish between identities with similar names.
Unknown identities should use greyscale, known identities (contacts and self) should use colour.
The input to the icon generator should be salted with a locally stored salt so that attackers can't produce similar-looking icons without knowing the salt.
Forums could also have icons to help users distinguish between forums with similar names.Milestone Chttps://code.briarproject.org/briar/briar/-/issues/82Make the flow of conversation easier to follow2018-06-12T11:32:39ZakwizgranMake the flow of conversation easier to followUsers asked for the flow of conversation to be made easier to follow. Measures to improve this might include:
* Using different background colours for different identities, as in WhatsApp
* Aligning the user's posts to the right and ...Users asked for the flow of conversation to be made easier to follow. Measures to improve this might include:
* Using different background colours for different identities, as in WhatsApp
* Aligning the user's posts to the right and other users' posts to the left
* Identicons to make it easier to distinguish between identities at a glance
Milestone Chttps://code.briarproject.org/briar/briar/-/issues/80Show the context of forum posts2018-06-12T11:32:39ZakwizgranShow the context of forum postsUsers asked for the ability to see the context of a forum post -- this could mean dividing forums into threads, displaying replies indented below their parents, or providing a link from a reply to its parent, as in Discourse.Users asked for the ability to see the context of a forum post -- this could mean dividing forums into threads, displaying replies indented below their parents, or providing a link from a reply to its parent, as in Discourse.Milestone C