Release the basic QR-Code "contact scanning" feature independently

@r10s, who wanted to have this discussed here:

Two things to improve for releasing a basic version of the current QR-Code “contact scanning” feature from the current “lab code”:

  • Show the own QR-Code during QR scanning.
  • Keep the scanner running after a successful scan, to allow further scans (by the other side to let both sides add the OOB contact data, or scan further contacts in a group meetings).

Advantages:

  • solves usability issues with current code
  • have a basic, classic “two-way” contact setup functionality available (and released) independently from the nextleap developments “one-way scan + cross-channel hidden network messages and potential crypto lib weaknesses”, and from its security review process
  • provide a direct comparison (benchmark)
  • allows manual, round-robin 1-to-n “bulk scanning rounds” (events in meetings).

The underlying idea is just to display the own QR code within the scannig screen. For testing it may be possible to just place the QR in the title bar of the camera scanner view (if the title bar gets larger with a larger image). And to keep the scanner running after a successful scan.

 ----------
| <-       |
|    QR    |
|          |
|----------|
|          |
|   video  |
|          |
|          |
 ----------

One would then scan the devices in the same way as now, but should be able to do it in both ways intuitively, without having to decide in which direction, or who scans first, beforehand.

The experimental one-way, cross-channel contact setup method could be integrated by placing an optional button, when enabled:

After a successful QR scan, the screen could show an overlay message:

                      Scanned: <name and address>
               Let that contact scan your QR in return.
                        If that's impossible:
                    [Send a contact request message]

                           [Done scanning]

So in case it is not possible to scan in both ways (one after the other), for example when scanning a business card, it could be possible to press the button and send a contact request instead.

(Original issue: https://github.com/deltachat/deltachat-core/issues/247)

hi @testbird :slight_smile:

in general, i like the idea of showing scanner+qr code at the same time. also because the currently shown QR code is too large - users tend to go to close to the qr code and the camera cannot get a sharp image. this may be mitigated by just using a smaller QR code - which then gives room for a scanner in the same activity.

regarding “bulk scanning”: you’re speaking of a bunch of people that want to verify each other? there it may make sense to keep the dialog open, not sure.
for a “bulk scanning” for entering a joint group, i think this has no advantage as only one person has to put is smartphone on the table and all others can just scan.

Oh, I forgot to make it more clearly, at first, that the big advantage of course is the two-way scanning (manual back-and-forth in this case), which allows to avoid all problems with introducing hidden background messaging and relying on passing on secret tokens and on crypto code for verification, instead of just truly comparing fingerprints.

Talking about keeping the scanner running, I think there are more advantages, though:

  • 2-way (oob) scanning
  • eventual bulk scanning
  • very usual and same handling to close the QR-code showing and to close the scanning (consistent activity behavior): closing by using the back or home button (no surprises, regardles if scanning or not)

Imagine someone going around in a group and scanning a couple of devices, maybe from those few that just held a presentation. These scans won’t have to create chats. Just adding to the contact list could suffice.

Since scanning should be faster than putting a phone on a table to displaying the ID, to conduct a group contacts exchange event, it should also be faster for 2-way scanning to take turns in scanning the other’s devices held in a group circle, say instead of taking turns in putting the phones on the table and everybody reaching to scan the same device.

Another alternative when the scanner stays running is to just go around “handshaking” (scan-show, show-scan) without having to restart the scanner every time.