Commit log

d375262 Passing through initializing -> inititalized -> dialling more stable

Click to expand commit body
Rather than starting right at dialling, which seemed to cause sometimes delays
in the in call screen appearing and also a different behaviour when a post dial
string was present, passing through all the states with some time in between
seems to result in a more stable and consistent UX with no change to functionality.

Stephen Paul Weber created

6bff870 Merge branch 'more-tags'

Click to expand commit body
* more-tags:
  Default dynamic tags to on
  Display phone number type/label as a tag where relevant
  Show dynamic tag "Android" when item is in Android contacts only

Stephen Paul Weber created

4465bf5 Merge branch 'dialler-integration-permissions'

Click to expand commit body
* dialler-integration-permissions:
  Ask user for microphone permission from dialler integration

Stephen Paul Weber created

f94c4a2 Add more OMEMO exceptions

Stephen Paul Weber created

5852eb7 Better defaults

Stephen Paul Weber created

5c2594d Default dynamic tags to on

Stephen Paul Weber created

dd7618a Display phone number type/label as a tag where relevant

Stephen Paul Weber created

4aa433c Show dynamic tag "Android" when item is in Android contacts only

Stephen Paul Weber created

be1fcfe store encrypted pgp files in private cache dir

Daniel Gultsch created

a3085fb do not restart wakelock if activity is finishing

Daniel Gultsch created

35c54f0 delete pre lolipop weOwnFile()

Daniel Gultsch created

48f8c1a use try with resources. remove unused methods

Daniel Gultsch created

3534c61 rename version suffix to playstore/free

Daniel Gultsch created

ad49393 bump appcompat, migrate to emoji2 and get rid of emoji flavor

Daniel Gultsch created

4129ca6 fix rare npe

Daniel Gultsch created

0b47053 store recordings and documents in their respective folders

Daniel Gultsch created

d2cc566 Use cheogram icon for notification bar

Stephen Paul Weber created

2019c05 Merge branch 'gateway-icon'

Click to expand commit body
* gateway-icon:
  Show gateway avatar on in call screen

Stephen Paul Weber created

8c08dee Ask user for microphone permission from dialler integration

Click to expand commit body
We can't ask them for it directly.  The library I am using here will first check
if the permission is already granted.  If so onPermissionGranted will fire and
we will start the call.  If not, the Connection will be created in a dialling
state and a notification will appear saying that the app needs additional
permissions.

Once the user taps the notification they will then be asked to allow microphone
access.  If they say yes, the call will proceed.  If they deny, the call will terminate.

Stephen Paul Weber created

ce9547d Show gateway avatar on in call screen

Stephen Paul Weber created

4b0ea5c Need to sync also when gateways change

Stephen Paul Weber created

8a046bb Merge branch 'pstn-gateway-can-call'

Click to expand commit body
* pstn-gateway-can-call:
  PSTN gateways contacts can do voice calls

Stephen Paul Weber created

f3fb32a Merge branch 'sync-tel-contacts'

Click to expand commit body
* sync-tel-contacts:
  Sync system contacts by phone number

Stephen Paul Weber created

8386fbe Merge branch 'dialer-integration-2'

Click to expand commit body
* dialer-integration-2:
  Mostly rewrite dialler integration
  Much prettier calling account

Stephen Paul Weber created

3f4d9b7 Sync system contacts by phone number

Click to expand commit body
Using the same logic as Quicksy, but not submitting to an API just assume that
tel@pstn-or-sms-gateway is a valid Jabber ID.

Does not add to roster or reveal presence or send anything to a server, just
affects local UI.

Stephen Paul Weber created

c03a8b7 write photos to DCIM/Camera

Daniel Gultsch created

282109d add openkeychain to queries

Daniel Gultsch created

a620cb1 PSTN gateways contacts can do voice calls

Click to expand commit body
If we are in a fallback situation (no presence) then always allow AUDIO if
domain matches a known PSTN gateway.

Stephen Paul Weber created

6168029 Mostly rewrite dialler integration

Click to expand commit body
Doing it properly this time. No Intent, no popping a second activity, just
instrument the call into the Android UI.

This turned out to be a bit easier than expected.  The ConnectionService does
indeed run inside our app process everywhere it matters, so we can reuse the
machinery from elsewhere to get a reference to XmppConnectionService.  Asking
JingleConnectionManager to send propose is enough to kick off all audio, etc.

Put in a guard that the JingleConnectionManager expects so that we won't try to
start a call if isBusy is true (that is, if another call is in progress), and
just return a failed connection BUSY in that case.

Added a flag to XmppConnectionService that we set when using the dialler
integration so it will temporarily ignore phone call state and not hang itself
up.

The app still shows a separate call notification, so you see two in-call
notifications.  You can also go into the app during the call and manually pull
up the call UI there.  If you do anything in either call UI it will work and
sync state, so that's not dangerous just perhaps odd.

Kept the connection address as a tel: for contact integration in the call
history, but use our normalized version now instead of whatever we got raw from
the system.

Add support for post-dial DTMF including 2-second pause with comma and
manual-length user-intervention pause with semicolon.  Dial with 100ms break
between tones.  Doing no break at all mostly works in practise, but not for two
identical tones in a row, this seems to be enough in my tests.

When using a post-dial string from contacts the UI shows more/different state
than it should and at least in my emulator plays a different ringback tone for
one ring before switching.  Very odd, as though it's partially ignoring our
Connection object's settings.

Audio routing has not been tested yet (for speakerphone, bluetooth, etc).

Stephen Paul Weber created

6fb465f don’t query packages before attaching something

Daniel Gultsch created

2cc49e5 bump targetSdk

Daniel Gultsch created

d6be6dd use full file name for all new files

Daniel Gultsch created

8abacd2 use new storage location for backup and recordings

Daniel Gultsch created

6061761 rename method that expand filename

Daniel Gultsch created

c0d30fd Much prettier calling account

Click to expand commit body
Register the service avatar, perpy background for call UI, and split the User's
JID into the headline with the service JID (eg "cheogram.com") only shown in
short description.

Stephen Paul Weber created

120406c Totally optional sentry

Stephen Paul Weber created

b3ccb21 Optional sentry support

Stephen Paul Weber created

6d44d44 Put more info in the exception for debugging the common crash

Stephen Paul Weber created

1a450b8 Say XMPP a lot less and Jabber a lot more

Click to expand commit body
To be more user friendly

Stephen Paul Weber created

af3e82b Merge branch 'contact-links'

Click to expand commit body
* contact-links:
  Show contact name in an xmpp: link

Stephen Paul Weber created

14000d5 Show contact name in an xmpp: link

Click to expand commit body
When rendering an xmpp: link, show not the raw URI, but the contact name
(if there is one) or JID (if there is not).

Stephen Paul Weber created

3a38c76 Get libwebrtc using gradle

Stephen Paul Weber created

ed2f7f8 Fix typo

Stephen Paul Weber created

7be174d Merge branch 'phoneaccount'

Click to expand commit body
* phoneaccount:
  any means none means false (ie there exist) unless upstream reports a reason
  Small fix to address cheogram adding "+1" when making calls from the default dialer. Now only adds "+1" or "+" when necessary.
  First version of dialer integration
  Revert "Intercept DIAL and CALL to tel: and rewrite to cheogram"

Stephen Paul Weber created

ffc1daa any means none means false (ie there exist) unless upstream reports a reason

Stephen Paul Weber created

2924ec0 Small fix to address cheogram adding "+1" when making calls from the default dialer. Now only adds "+1" or "+" when necessary.

root21 created

7296a11 First version of dialer integration

Click to expand commit body
When a contact comes online, we check if it is a gateway/pstn.  If so, we
register a new PhoneAccount with the OS for the account+gateway pair.

When the roster is being saved after any change, we check for any items that
have been removed and remove any associated PhoneAccount registration.

To activate a PhoneAccount, a user navigates to Phone App > Settings > Calls >
Calling Accounts.

When a call is placed from the Phone app using one of our PhoneAccount, the
ConnectionService is called by the OS.  Its job is to place the call and keep
the OS calling UI up to date via a returned Connection subclass.  Calling in
Conversations is currently rather tied to the UI, so rather than seperate it out
for this prototype, I launch the Intent to bring up the UI for the desired call.
This should do jabber:iq:gateway on the gateway and possibly other fallbacks,
but for this prototype it just strips any non-digit and prepend +1 if not
present, appending @gateway.tld for the associated gateway.

We don't actually tell the OS UI when the call is active, because if we do it
steals focus and puts the whole system in "in a call" mode, which causes
Conversations to deactivate its UI.  This is something to explore more if we
want to use the OS in-call UI completely.  We also haven't wired up the OS UI
for DTMF since it never shows if the call is never active.

We *do* tell the OS UI when the call is over, so it can clean up and close the
other window.  This means that after you hang up in Conversations, you are taken
back to the OS UI showing "call ended" for a few moments.  It also means that if
an outgoing call fails you will see the OS UI for a few moments before being
returned to Conversations to see the normal call failure screen.  This is
perhaps the biggest wart of the current prototype.

As an alternative, we could just pretend the call immediately failed and have
the OS UI close itself before the Conversations UI ever comes up.  This
basically causes a indeterminately-long "flash" of the OS UI, possibly long
enough to see it say "call ended" before we get the Conversations UI which then
works after that.  I thought that was more confusing that what I'm doing now,
but maybe others disagree.

Finally, outbound calls placed from the Phone app do show in the Phone app call
log.  Other calls started from Conversations or inbound calls could show there
with a full integration, but that's not part of this work.

Stephen Paul Weber created

6132024 Revert "Intercept DIAL and CALL to tel: and rewrite to cheogram"

Click to expand commit body
This reverts commit 227dd8d2bcbb86599b22483bc56972aab66d7890.

Stephen Paul Weber created

92aed12 Need this now

Stephen Paul Weber created

480902d Merge remote-tracking branch 'singpolyma/dtmf' into integration2

Click to expand commit body
* singpolyma/dtmf: (145 commits)
  Detect a video call in a consistent way
  Use a boolean for this state
  Switch onClicks to use DataBinding
  Polyfill to allow use on Android 21
  RtpSessionActivity: Fix NPE from using incorrect view id
  Changed dialpad icon to something more recognizable.
  Cleaned up DTMF code and click handling.
  WIP - dialpad and dtmf sending
  flush stanzas in batches
  code clean up in TagWriter
  Fix #4249.
  Clarify build instructions.
  allow verification of own omemo keys via uri
  bump dependencies
  version bump to 2.10.3-beta
  fix precondition for timeout handling
  bump agp version
  pulled translations from transifex
  add Samsung S4 to hardware aec blacklist
  add additional logging to image compression
  ...

Stephen Paul Weber created