briar issueshttps://code.briarproject.org/groups/briar/-/issues2017-12-18T07:40:38Zhttps://code.briarproject.org/briar/briar/-/issues/734Notifications for private group messages2017-12-18T07:40:38ZakwizgranNotifications for private group messagesNotifications should be shown for private group messages as they are for blog and forum posts.Notifications should be shown for private group messages as they are for blog and forum posts.Milestone ETorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/684Inject EmojiProvider2018-09-03T12:14:34ZakwizgranInject EmojiProviderInject a singleton EmojiProvider so we can get rid of the static instance. (It needs to be a singleton because it loads the emoji bitmaps and keeps references to them.)Inject a singleton EmojiProvider so we can get rid of the static instance. (It needs to be a singleton because it loads the emoji bitmaps and keeps references to them.)Android 1.1akwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/733Incoming messages aren't added to private group conversation2017-12-18T07:40:38ZakwizgranIncoming messages aren't added to private group conversationWhen a new private message arrives, it isn't shown in the conversation until the activity is recreated.When a new private message arrives, it isn't shown in the conversation until the activity is recreated.Milestone ETorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/668Invitation messages can be displayed in the wrong order2018-01-11T16:18:53ZakwizgranInvitation messages can be displayed in the wrong orderWhen devices have slightly inaccurate clocks, an invitation response can have an earlier timestamp than the corresponding request. This causes the messages to be displayed in the wrong order in both parties' conversations, so the invitat...When devices have slightly inaccurate clocks, an invitation response can have an earlier timestamp than the corresponding request. This causes the messages to be displayed in the wrong order in both parties' conversations, so the invitation seems to have been accepted before it was sent.
![device-2016-09-21-155626](/uploads/4f1fe82a8c962c4b103339b5cc802124/device-2016-09-21-155626.png)
One possible solution is for the sender to set the timestamp of the response to max(timestamp of request + 1, current time) when creating the response.
Another possible solution is for the recipient to set the metadata timestamp of the response to max(timestamp of request + 1, timestamp of response) in the delivery hook. This could backfire if the message timestamp is used in some places and the metadata timestamp is used in others.akwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/732Implement UX design for revealing contacts to a private group2017-12-18T07:40:38ZTorsten GroteImplement UX design for revealing contacts to a private groupSubticket of #654 and #127.
![654_reveal_neu_v01](/uploads/e88db85207db1a8b807e08f34722a303/654_reveal_neu_v01.jpg)Subticket of #654 and #127.
![654_reveal_neu_v01](/uploads/e88db85207db1a8b807e08f34722a303/654_reveal_neu_v01.jpg)Milestone ETorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/647Use Tor bridges2018-10-09T14:09:20ZakwizgranUse Tor bridgesWe should ship the default set of bridges used by Tor Browser, and automatically use them if we can't connect directly to the Tor network (or if we're in a location where we don't expect to be able to connect directly).We should ship the default set of bridges used by Tor Browser, and automatically use them if we can't connect directly to the Tor network (or if we're in a location where we don't expect to be able to connect directly).Android 1.2Torsten GroteTorsten Grote2018-10-01https://code.briarproject.org/briar/briar/-/issues/731Open BDF Lists and Dictionary throw IllegalStateException2017-12-18T07:40:38ZTorsten GroteOpen BDF Lists and Dictionary throw IllegalStateExceptionThese tests should not fail:
```java
@Test(expected = FormatException.class)
public void testOpenList() throws Exception {
// A list that is not closed
String list = "60";
setContents(list);
r.readList();
}
@Test(expected = ...These tests should not fail:
```java
@Test(expected = FormatException.class)
public void testOpenList() throws Exception {
// A list that is not closed
String list = "60";
setContents(list);
r.readList();
}
@Test(expected = FormatException.class)
public void testOpenDictionary() throws Exception {
// A dictionary that is not closed
String dicts = "70" + "41" + "03" + "666F6F";
setContents(dicts);
r.readDictionary();
}
```Milestone Fakwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/727Refactor integration tests2017-12-18T07:40:38ZakwizgranRefactor integration testsSome of the code for delivering messages could be factored out of integration tests into a common superclass or utility class. Some tests create more component instances than they need.Some of the code for delivering messages could be factored out of integration tests into a common superclass or utility class. Some tests create more component instances than they need.Milestone FTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/726Layout for private group join message isn't i18n-friendly2017-12-18T07:40:38ZakwizgranLayout for private group join message isn't i18n-friendlyThe layout for private group join messages combines an AuthorView with a TextView to form a sentence. This won't work for languages where the subject doesn't come at the start of the sentence.
Review the layout so that the AuthorView is...The layout for private group join messages combines an AuthorView with a TextView to form a sentence. This won't work for languages where the subject doesn't come at the start of the sentence.
Review the layout so that the AuthorView is separate from the sentence.Milestone Ehttps://code.briarproject.org/briar/briar/-/issues/631Inject fragments earlier in their lifecycle2018-12-19T11:24:56ZakwizgranInject fragments earlier in their lifecycleFragments are injected in `Fragment#onActivityCreated()`, which is called after `Fragment#onCreate()` and `Fragment#onCreateView()`, meaning injected fields can't be used in those methods. It would sometimes be useful to have access to i...Fragments are injected in `Fragment#onActivityCreated()`, which is called after `Fragment#onCreate()` and `Fragment#onCreateView()`, meaning injected fields can't be used in those methods. It would sometimes be useful to have access to injected fields earlier in the fragment's lifecycle.
Injection happens at this point because BaseActivity creates its ActivityComponent in `Activity#onCreate()`. Would it be possible for BaseFragment to create a FragmentComponent in `Fragment#onCreate()` (or even `Fragment#onAttach()`) to avoid this dependency on the activity to perform injection?Android 1.1Torsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/724Unit tests for ClientHelperImpl2017-12-18T07:40:38ZakwizgranUnit tests for ClientHelperImplMilestone FTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/723Unit tests for ContactManagerImpl2017-12-18T07:40:38ZakwizgranUnit tests for ContactManagerImplMilestone FTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/722Implement UX design for inviting new members to a group2017-12-18T07:40:39ZTorsten GroteImplement UX design for inviting new members to a groupSubticket of #127. Design discussion in #653
![](https://code.briarproject.org/akwizgran/briar/uploads/47e136beab2fa3d22dbac8d2943fe101/653_add_member.jpg)Subticket of #127. Design discussion in #653
![](https://code.briarproject.org/akwizgran/briar/uploads/47e136beab2fa3d22dbac8d2943fe101/653_add_member.jpg)Milestone ETorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/720IllegalStateException: CameraView.surfaceCreatedUi2017-12-18T07:40:39ZTorsten GroteIllegalStateException: CameraView.surfaceCreatedUiWhen trying to a contact, I managed to cause a crash:
```
10-26 14:24:24.354 I/KeyAgreementTransport: Closing connection
10-26 14:24:24.534 W/KeyAgreementTaskImpl: org.briarproject.keyagreement.AbortException: java.net.SocketTimeoutExcep...When trying to a contact, I managed to cause a crash:
```
10-26 14:24:24.354 I/KeyAgreementTransport: Closing connection
10-26 14:24:24.534 W/KeyAgreementTaskImpl: org.briarproject.keyagreement.AbortException: java.net.SocketTimeoutException
org.briarproject.keyagreement.AbortException: java.net.SocketTimeoutException
at org.briarproject.keyagreement.KeyAgreementTransport.readHeader(KeyAgreementTransport.java:117)
at org.briarproject.keyagreement.KeyAgreementTransport.readRecord(KeyAgreementTransport.java:97)
at org.briarproject.keyagreement.KeyAgreementTransport.receiveKey(KeyAgreementTransport.java:54)
at org.briarproject.keyagreement.KeyAgreementProtocol.receiveKey(KeyAgreementProtocol.java:115)
at org.briarproject.keyagreement.KeyAgreementProtocol.perform(KeyAgreementProtocol.java:90)
at org.briarproject.keyagreement.KeyAgreementTaskImpl.run(KeyAgreementTaskImpl.java:102)
Caused by: java.net.SocketTimeoutException
at java.net.PlainSocketImpl.read(PlainSocketImpl.java:492)
at java.net.PlainSocketImpl.access$000(PlainSocketImpl.java:46)
at java.net.PlainSocketImpl$PlainSocketInputStream.read(PlainSocketImpl.java:241)
at org.briarproject.keyagreement.KeyAgreementTransport.readData(KeyAgreementTransport.java:125)
at org.briarproject.keyagreement.KeyAgreementTransport.readHeader(KeyAgreementTransport.java:115)
at org.briarproject.keyagreement.KeyAgreementTransport.readRecord(KeyAgreementTransport.java:97)
at org.briarproject.keyagreement.KeyAgreementTransport.receiveKey(KeyAgreementTransport.java:54)
at org.briarproject.keyagreement.KeyAgreementProtocol.receiveKey(KeyAgreementProtocol.java:115)
at org.briarproject.keyagreement.KeyAgreementProtocol.perform(KeyAgreementProtocol.java:90)
at org.briarproject.keyagreement.KeyAgreementTaskImpl.run(KeyAgreementTaskImpl.java:102)
10-26 14:24:24.564 E/CameraService: setPreviewCallbackFlag(7) (pid 29436)
10-26 14:24:24.644 I/DroidtoothPlugin: Connecting to key agreement UUID 5876756b-c0fe-3967-bc15-972d828bd7e4
10-26 14:24:24.644 I/DroidtoothPlugin: Connecting to 58:[scrubbed]:C4
10-26 14:24:24.644 I/DroidtoothPlugin: Failed to connect to 58:[scrubbed]:C4
10-26 14:24:24.705 I/KeyAgreementConnector: Stopping BQP listeners
10-26 14:24:24.705 I/KeyAgreementConnector: Starting BQP listeners
10-26 14:24:24.705 I/DroidtoothPlugin: Key agreement UUID 19b28b8f-5b4b-357e-9e84-e2b1a25723d6
10-26 14:24:24.735 I/CameraView: Surface created
10-26 14:24:24.735 W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0x414b7438)
10-26 14:24:24.735 E/ACRA: ACRA caught a IllegalStateException for org.briarproject
java.lang.IllegalStateException
at org.briarproject.android.view.CameraView.surfaceCreatedUi(CameraView.java:298)
at org.briarproject.android.view.CameraView.access$000(CameraView.java:36)
at org.briarproject.android.view.CameraView$1.run(CameraView.java:290)
at android.os.Handler.handleCallback(Handler.java:615)
at android.os.Handler.dispatchMessage(Handler.java:92)
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)
```Milestone Fakwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/719Reproduce issues with LAYER_TYPE_NONE2017-12-18T07:40:39ZakwizgranReproduce issues with LAYER_TYPE_NONEReproduce the performance and rendering issues that were seen on the Galaxy Ace 2 when using long EmojiTextViews with LAYER_TYPE_NONE.Reproduce the performance and rendering issues that were seen on the Galaxy Ace 2 when using long EmojiTextViews with LAYER_TYPE_NONE.Milestone Fakwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/718Creating a group without having contacts can cause crash2017-12-18T07:40:39ZTorsten GroteCreating a group without having contacts can cause crashCurrently, it is possible to create a private group without having contacts, but the group creation code assumes that you have at least one contact. If you try to create a group without having contacts, you land in a strange UI state and...Currently, it is possible to create a private group without having contacts, but the group creation code assumes that you have at least one contact. If you try to create a group without having contacts, you land in a strange UI state and when you press the back button, briar crashes.
I see two simple solutions for this:
1. Only allow creating groups when the user has at least one contact (requires a different empty state message)
2. Allow for creating groups without having contacts.Milestone ETorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/715Long posts aren't rendered2017-12-18T07:40:39ZakwizgranLong posts aren't renderedOn the Galaxy Nexus, long blog posts from an RSS feed aren't rendered. The following warning is logged:
```
10-20 15:37:47.647 18342-18342/org.briarproject W/View: View too large to fit into drawing cache, needs 4553568 bytes, only 368...On the Galaxy Nexus, long blog posts from an RSS feed aren't rendered. The following warning is logged:
```
10-20 15:37:47.647 18342-18342/org.briarproject W/View: View too large to fit into drawing cache, needs 4553568 bytes, only 3686400 available
```
Shorter posts from the same feed render without problems. Looks like this might be caused by software rendering. At least we have a device that prints useful warnings about this. :-)Milestone ETorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/714Potential crashes when calling getActivity() asynchronously2017-12-18T07:40:39ZakwizgranPotential crashes when calling getActivity() asynchronouslyFragments sometimes call getActivity() asynchronously. !341 should ensure that we never call getActivity() in situations where the activity has been destroyed, but it's still possible that we're calling it in situations where the fragmen...Fragments sometimes call getActivity() asynchronously. !341 should ensure that we never call getActivity() in situations where the activity has been destroyed, but it's still possible that we're calling it in situations where the fragment has been detached from the (still existing) activity, and getActivity() therefore returns null.Milestone Fhttps://code.briarproject.org/briar/briar/-/issues/712Throw FormatException if BdfList index is out of bounds2017-12-18T07:40:39ZakwizgranThrow FormatException if BdfList index is out of boundsCurrently an ArrayIndexOutOfBoundsException will be thrown, which could be a source of crashes when parsing untrusted data.Currently an ArrayIndexOutOfBoundsException will be thrown, which could be a source of crashes when parsing untrusted data.Milestone Eakwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/710ConversationActivity uses uninitialised field as format string argument2017-12-18T07:40:39ZakwizgranConversationActivity uses uninitialised field as format string argumentConversationActivity's contactName field is used as a format string argument in event handlers that may be called before the field has been initialised. This could cause an NPE in the string formatting code.ConversationActivity's contactName field is used as a format string argument in event handlers that may be called before the field has been initialised. This could cause an NPE in the string formatting code.Milestone FTorsten GroteTorsten Grote