Commit Graph

2853 Commits

Author SHA1 Message Date
akwizgran
bb82bd70e2 Don't crash if camera is reopened or surface is recreated. 2016-11-09 12:43:33 +00:00
akwizgran
138a6e11a7 Merge branch '346-smaller-qr-codes' into 'master'
Encode transport properties more compactly in QR codes

The [original BQP spec](https://code.briarproject.org/akwizgran/briar/wikis/BQP) described a compact encoding for transport properties, with the goal of making the QR code as small as possible. At some point during the implementation, I asked @str4d to use TransportIds and TransportProperties instead, as described in the [current spec](https://code.briarproject.org/akwizgran/briar-spec/blob/master/protocols/BQP.md). That was a mistake.

Using the original format reduces the payload from 60 to 34 bytes (43% smaller) for Bluetooth only, and from 96 to 49 bytes (49% smaller) for Bluetooth and LAN. This makes it easier to scan codes from low-resolution screens using fixed-focus and/or low-resolution cameras. Using this branch I can exchange codes between the Sony Xperia Tipo (320x480 screen, fixed focus, 640x480 preview size) and the Huawei Ascend Y300 (480x800 screen, infinity focus, 1280x720 preview size).

This also removes an obstacle to implementing #558, as TransportIds are no longer included in QR codes.

Closes #346.

See merge request !394
2016-11-08 17:32:26 +00:00
akwizgran
178d72114b Merge branch '709-private-group-invitation-protocol' into 'master'
Private group invitation protocol

This branch implements the private group invitation protocol. The implementation is something of an experiment with a new way of writing client protocols.

We start with a role enum that lists the roles in the protocol, and a state enum for each role, which lists the states in the role's state machine. Then there's a session class, parameterised by the state class and therefore by the role, which represents the session information held by that role. Then there's an engine interface, parameterised by the session class and therefore by the role, which encapsulates the protocol logic for the role. Most of this stuff can be created pretty mechanically from the state machine diagrams.

The engine interface has a method for each type of message and each local action. I started out with one method for all messages and another for all local actions, but that turned out to be a bad design - the information about what kind of message was being handled was lost when the message was passed to the engine, and had to be recovered using an instanceof ladder.

Each engine method takes a message or an action and a session, and returns an updated session. A transaction is passed in so the engine can send messages, attach events, and do any other work it needs to do (such as changing the visibility of groups, in the case of this protocol). This removes the need to run tasks outside the engine, so the protocol logic is better encapsulated inside the engine.

Parsing and encoding of messages and sessions is separated from protocol logic. MessageParser, MessageEncoder and the validator are the only classes that know how messages and their metadata are formatted, and likewise SessionParser and SessionEncoder are the only classes that know how sessions are formatted. The metadata keys are declared in a package-private interface.

It's common knowledge that I never make mistakes, so to keep things interesting I've hidden 114 deliberate mistakes in this code. See how many you can spot!

Needs tests before #709 is closed.

See merge request !382
2016-11-08 17:22:00 +00:00
Torsten Grote
c1f1eb7dfa Merge branch '709-preliminaries' into 'master'
Preliminaries for private group invitation protocol

As promised, here's the preliminary stuff for #709 as a separate MR.

See merge request !395
2016-11-08 17:02:45 +00:00
akwizgran
d2a3804cfe Added null safety annotations to plugin interfaces. 2016-11-08 16:59:56 +00:00
akwizgran
fb095c1f4d Broadcast events for private group invitations. 2016-11-08 16:08:51 +00:00
akwizgran
f89d8cbe38 Updated peer state machine for automatic join response. 2016-11-08 16:08:50 +00:00
akwizgran
d2434123a9 Private group invitation protocol. 2016-11-08 16:08:50 +00:00
akwizgran
edbf5ff5b4 Preliminaries for private group invitation protocol. 2016-11-08 15:45:04 +00:00
akwizgran
32f0b53d15 Increase test timeouts to avoid spurious failures. 2016-11-08 15:17:08 +00:00
akwizgran
55ecdd9a13 Merge branch '557-use-namespaced-strings-for-client-ids' into 'master'
Use namespaced strings for client IDs

Closes #557

See merge request !393
2016-11-08 13:25:41 +00:00
akwizgran
e47e3242a6 Merge branch '196-mark-messages-read' into 'master'
Mark private messages read properly

Depends on !386.

This branch uses the same approach as forums to mark messages read, i.e. each message is marked read when it becomes visible, rather than marking all messages read in a batch when the activity finishes. This fixes two problems: messages not being marked read when isFinishing() is false, for example when leaving the activity via the home button, and a race condition between updating and loading the group count when leaving the activity, resulting in a stale unread message count in the contact list.

Closes #196.

See merge request !388
2016-11-08 13:25:00 +00:00
Torsten Grote
4387bfc5bd Merge branch '733-incoming-messages-aren-t-added-to-private-group-conversation' into 'master'
Broadcast GroupMessageAddedEvent for the UI to update when received

Closes #733

See merge request !390
2016-11-08 13:24:20 +00:00
Torsten Grote
d11ee5e43b Broadcast GroupMessageAddedEvent for the UI to update when received 2016-11-08 11:23:52 -02:00
akwizgran
ce53589c33 Merge branch '736-private-group-list-is-not-updated-when-group-is-dissolved' into 'master'
Create GroupDissolvedEvent and react to it

This MR also makes the private group list react to incoming group invitations (once they are implemented).

![device-2016-11-07-155240](/uploads/84ed51cf72bf2c7c597a0fd68b5d868c/device-2016-11-07-155240.png)
![device-2016-11-07-155302](/uploads/446c98d70d674d0bcd79bfb7682dfed5/device-2016-11-07-155302.png)

Closes #736, #737

See merge request !392
2016-11-08 13:20:28 +00:00
Torsten Grote
e96b3a8c68 Use namespaced strings for client IDs 2016-11-08 11:17:52 -02:00
Torsten Grote
62040d45b8 Create GroupDissolvedEvent and react to it
Also react to incoming group invitations
2016-11-08 10:28:54 -02:00
akwizgran
1809943f1d Merge branch '734-notifications-for-private-group-messages' into 'master'
Show Notifications for Group Messages

Closes #734

See merge request !391
2016-11-08 12:06:15 +00:00
akwizgran
d204757395 Merge branch '735-back-button-in-invite-members-screen-returns-to-group-list' into 'master'
Return to group after not inviting new members

This MR also closes the keyboard when returning from the message fragment.

Closes #735

See merge request !389
2016-11-08 11:55:36 +00:00
akwizgran
c640ee8e51 Merge branch '714-asynchronous-context-leaks' into 'master'
Fixed asynchronous Activity leaks in Fragments

If a Fragment has been detached its `getActivity()` method will return null, providing numerous crash possibilities within the app.

My approach to fixing this is to make Fragments use their own `runOnUiThreadUnlessDestroyed` method, which also checks if the Fragment has been detached before running the Runnable

Closes #714

See merge request !387
2016-11-08 11:49:45 +00:00
akwizgran
04d4ecad05 Encode transport properties more compactly in QR codes. 2016-11-08 11:28:44 +00:00
Ernir Erlingsson
c36bb3e60e created runOnUiThreadUnlessDestroyed fragment wrapper 2016-11-07 17:11:57 +01:00
akwizgran
7327029fca Log the QR code payload length. 2016-11-07 16:04:07 +00:00
Torsten Grote
81d341374d Show Notifications for Group Messages 2016-11-07 13:52:59 -02:00
Torsten Grote
7b884d2425 Return to group after not inviting new members
Also close keyboard when returning from message fragment
2016-11-07 10:44:22 -02:00
Torsten Grote
fbcf334941 Merge branch 'use-contact-id-as-conversation-id' into 'master'
Use contact ID rather than messaging group ID to identify conversation

We originally used the private messaging group ID to identify the private conversation, but now that the conversation includes messages from multiple clients it's more appropriate to use the contact ID.

This refactoring isn't urgent - I've had the branch lying around for a while, but I'm putting it up for review because #734 will touch some of the same code.

See merge request !386
2016-11-07 11:24:11 +00:00
akwizgran
238100bcac Mark messages read properly in private conversation. 2016-11-07 10:43:24 +00:00
akwizgran
7c3805260d Merge branch '643-allow-messages-to-be-deleted-in-the-delivery-hook' into 'master'
Allow messages to be deleted in delivery hook

Closes #643

See merge request !385
2016-11-04 16:14:44 +00:00
akwizgran
51bcf7b1b8 Don't use messaging group ID as proxy for contact ID. 2016-11-04 15:50:44 +00:00
Torsten Grote
719a53dc94 Address review comments 2016-11-04 12:58:12 -02:00
Torsten Grote
3f9a254a0b Allow messages to be deleted in delivery hook 2016-11-04 12:52:33 -02:00
akwizgran
e810a1265a Merge branch '205-unit-tests-for-keymanagerimpl-and-transportkeymanager' into 'master'
Add unit tests for KeyManagerImpl

This also creates a `TransportKeyManager` interface and a factory for that to be able to test things separately.

Closes #205

See merge request !380
2016-11-04 14:29:21 +00:00
Torsten Grote
c36f5c795b Address review comments for TransportKeyManagerImplTest 2016-11-04 11:04:44 -02:00
Torsten Grote
f52186ac8c Add unit tests for KeyManagerImpl and create TransportKeyManager
interface and a factory for that.
2016-11-04 10:54:56 -02:00
akwizgran
e0f4be931d Merge branch '708-private-group-fixup' into 'master'
Let only the creator invite new members to private groups

A little bug I noticed when reviewing the implementation of the invitation protocol.

See merge request !383
2016-11-04 09:33:50 +00:00
akwizgran
7536c00a34 Merge branch '708-private-group-remove-new-member-announcement' into 'master'
Remove new member announcement and add signature to join message



See merge request !384
2016-11-04 09:32:40 +00:00
akwizgran
847b6e4179 Added comments to integration test. 2016-11-04 09:32:21 +00:00
Torsten Grote
58793068c3 Address review comments 2016-11-03 17:26:37 -02:00
Torsten Grote
7125248677 Remove new member announcement and add signature to invitation 2016-11-03 17:24:31 -02:00
Torsten Grote
4bad7076e7 Merge branch '674-ending-a-transaction-can-throw-an-exception-in-a-finally-block' into 'master'
Replace transaction.setComplete() by database.commitTransaction()

Closes #674

See merge request !374
2016-11-03 19:23:16 +00:00
akwizgran
2bb16bb75f Merge branch '348-testers-did-not-understand-qr-code-workflow' into 'master'
Improve QR code workflow slightly

* Improve wording so contacts know they need meet up to scan
  and scan each other's codes
* Use consistent progress bar styles

Closes #348

See merge request !381
2016-11-03 15:56:19 +00:00
Torsten Grote
b5a427f876 Let only the creator invite new members to private groups 2016-11-02 17:40:33 -02:00
Torsten Grote
b34b4623ed Replace transaction.setComplete() by database.commitTransaction() 2016-11-02 13:04:31 -02:00
Torsten Grote
f3b9214702 Improve QR code workflow slightly
* Improve wording so contacts know they need meet up to scan
  and scan each other's codes
* Use consistent progress bar styles
2016-11-02 12:43:41 -02:00
akwizgran
36f087c512 Merge branch '724-unit-tests-for-clienthelperimpl' into 'master'
Add Unit Tests for ClientHelper

Closes #724

See merge request !379
2016-11-02 11:04:07 +00:00
akwizgran
0c30f16d7e Merge branch '731-bdf-reader-open-lists-and-dictionaries' into 'master'
Don't throw IllegalStateException if BDF input is incomplete

Closes #731

See merge request !378
2016-11-01 17:40:13 +00:00
akwizgran
4d8a84a48d Don't throw IllegalStateException if BDF input is incomplete. 2016-11-01 17:38:23 +00:00
akwizgran
2650f3114e Merge branch '518-limit-the-depth-of-nested-bdf-structures' into 'master'
Limit the depth of nested BDF structures

Closes #518

See merge request !375
2016-11-01 17:30:50 +00:00
Torsten Grote
dfdde9799f Add Unit Tests for ClientHelper 2016-11-01 15:28:28 -02:00
akwizgran
114a2dc8f2 Merge branch '427-local-author-caching' into 'master'
Cache the local author and load before the db latch is released

Closes #427, #588 

See merge request !354
2016-11-01 17:21:14 +00:00