133 Commits

Author SHA1 Message Date
Jean-Michel Trivi
2ba92c71b5 do not merge bug 3370834 Cherrypick from master
Cherripick from master CL 79833, 79417, 78864, 80332, 87500

Add new audio mode and recording source for audio communications
 other than telelphony.

The audio mode MODE_IN_CALL signals the system the device a phone
 call is currently underway. There was no way for audio video
 chat or VoIP applications to signal a call is underway, but not
 using the telephony resources. This change introduces a new mode
 to address this. Changes in other parts of the system (java
 and native) are required to take this new mode into account.
The generic AudioPolicyManager is updated to not use its phone
 state variable directly, but to use two new convenience methods,
 isInCall() and isStateInCall(int) instead.

Add a recording source used to designate a recording stream for
voice communications such as VoIP.

Update the platform-independent audio policy manager to pass the
 nature of the audio recording source to the audio policy client
 interface through the AudioPolicyClientInterface::setParameters()
 method.

SIP calls should set the audio mode to MODE_IN_COMMUNICATION,
 Audio mode MODE_IN_CALL is reserved for telephony.

SIP: Enable built-in echo canceler if available.
1. Always initialize AudioRecord with VOICE_COMMUNICATION.
2. If echo canceler is available, disable our echo suppressor.

Note that this CL is intentionally not correcting the
 getAudioSourceMax() return value in MediaRecorder.java as the
 new source is hidden here.

Change-Id: Ie68cd03c50553101aa2ad838fe9459b2cf151bc8
2011-01-26 11:20:01 -08:00
Hung-ying Tyan
14b6d0620b Merge changes Ib70e0cf2,I0691cd70 into gingerbread
* changes:
  SipService: registers broadcast receivers on demand.
  SipService: release wake lock for cancelled tasks.
2011-01-24 19:41:42 -08:00
Chung-yih Wang
f268a2f848 Add auth. username in SipProfile.
bug:3326867
Change-Id: I2a62c75fb3f5e9c6ec2e00b29396e93b0c183d9b
2011-01-07 15:21:54 +08:00
Hung-ying Tyan
f0bb1ce70f SipService: registers broadcast receivers on demand.
The previous implementation registers receivers when SipService starts up.
If the user doesn't use SIP at all, SipService will still process connecivity
and wifi state change events, which involves holding wake lock and thus
consumes power unnecessarily.

With this CL, SipService is completely idle if the user doesn't use SIP at all.
It registers receivers only when at least one account is opened.

Bug: 3326998
Change-Id: Ib70e0cf2c808e0ebab4c3c43dcab5532d24e5eeb
2011-01-07 11:57:22 +08:00
Hung-ying Tyan
0c01e6e060 SipService: release wake lock for cancelled tasks.
Bug: 3327004
Change-Id: I0691cd70edf61f815ecb0613aca85babd89f6cc4
2011-01-06 13:05:29 +08:00
Chia-chi Yeh
3cf7137642 RTP: Send silence packets on idle streams for every second.
Originally a stream does not send packets when it is receive-only or there is
nothing to mix. However, this causes some problems with certain firewalls and
proxies. A firewall might remove a port mapping when there is no outgoing
packet for a preiod of time, and a proxy might wait for incoming packets from
both sides before start forwarding. To solve these problems, we send out a
silence packet on the stream for every second. It should be good enough to
keep the stream alive with relatively low resources.

Bug: 3119690
Change-Id: Ib9c55e5dddfba28928bd9b376832b68bda24c0e4
2011-01-04 19:54:49 +08:00
Hung-ying Tyan
5bd3782f24 Check if VoIP API is supported in SipManager.
This is to make SipManager.isVoipSupported() effective.
Also add NPE check now that we may return null SipAudioCall when VOIP is not
supported.

Bug: 3251016

Change-Id: Icd551123499f55eef190743b90980922893c4a13
2010-12-21 11:51:03 +08:00
Hung-ying Tyan
a936b256eb Remove SIP realm/domain check
as the realm may be different from the domain.

Bug: 3283834
Change-Id: I64c9f0d6d626afdb397c5d378d30afa9d6a64ca9
2010-12-17 10:20:06 +08:00
Hung-ying Tyan
58ee2acba8 Check port in create peer's SIP profile.
SipURI returns port -1 when port is not present in the URI.
Don't call SipProfile.Builder.setPort() when that happens.

Bug: 3291248
Change-Id: I8e608cbc56ea82862df55fdba885f6a864db83ab
2010-12-16 20:46:50 +08:00
Chung-yih Wang
f053292d7a Fix SIP bug of different transport/port used for requests.
bug: http://b/3156148
Change-Id: I4fa5b274d2e90ebde12d9e99822dc193a65bad32
2010-12-07 10:36:19 +08:00
Hung-ying Tyan
e2abd103a2 Merge "Set AudioGroup mode according to audio settings" into gingerbread 2010-12-02 17:50:33 -08:00
Hung-ying Tyan
06e8cdc0f8 Fix race between ending and answering a SIP call.
+ Also fix race between ending and changing (holding/unholding) a SIP call.
+ Remove an unused method.

Bug : 3128233

Change-Id: Ie18d8333a88f0d9906d54988243d909b58e07e4b
2010-12-01 15:02:36 +08:00
Hung-ying Tyan
fa81463e88 Set AudioGroup mode according to audio settings
Set AudioGroup mode according to holding, mute and speaker phone settings.

Bug: 3119690
Change-Id: I02803ae105409b7f8482e6c2ef3e67623bd54e03
2010-11-30 18:55:37 +08:00
Hung-ying Tyan
4189d99b6e Do not suppress error feedback during a SIP call.
Bug: 3124788
Change-Id: Ia0a06f72336d1795515428eba0c9f875c32d13d1
2010-11-30 17:00:45 +08:00
Hung-ying Tyan
349f3509f7 Merge "Correct SipService.isOpened() implementation." into gingerbread 2010-11-30 00:56:57 -08:00
Hung-ying Tyan
d9e12303d2 Merge "Notify SipSessions before closing SIP stack." into gingerbread 2010-11-30 00:54:51 -08:00
Hung-ying Tyan
0bba953541 Merge "Throw proper exceptions in SipManager" into gingerbread 2010-11-30 00:51:22 -08:00
Chia-chi Yeh
bd399b0bd2 Merge "RTP: Pause echo suppressor when far-end volume is low." into gingerbread 2010-11-29 22:19:57 -08:00
Hung-ying Tyan
8d1b2a17d9 Throw proper exceptions in SipManager
instead of silently returning null and causing NPE in applications as returning
null is not documented in the javadoc.

Add connection to the connection list in SipCall after dial() succeeds so that
we don't need to clean up if it fails. The original code will cause the failed
connection to continue to live in the SipCall and in next dial() attempt, a new
connection is created and the in-call screen sees two connections in the call
and thus shows conference call UI.

Bug: 3157234, 3157387
Change-Id: Iabc3235f781c4f1e09384a67ad56b09ad2c12e5e
2010-11-03 18:09:31 +08:00
Hung-ying Tyan
262cdfca7a Correct SipService.isOpened() implementation.
Make it return true for all existing accounts.
Rename mOpened to mOpenedToReceiveCalls to make it less confusing.

Bug: 3155849
Change-Id: I327f411bf76afd73434ad1fa2ffef3db1e35d778
2010-11-02 15:17:50 +08:00
Scott Main
02b1d685cc docs: revise javadocs for sip
add a package description, revise class descriptions and edit some method docs

Change-Id: Ice969a99c830349674c65d99e4b7a6f1d2f24a7e
2010-10-28 16:37:43 -07:00
Chia-chi Yeh
0c7d30660c RTP: Pause echo suppressor when far-end volume is low.
Bug: 3136725
Change-Id: Ieeedd2836d3028045aacac963f44285491708cc3
2010-10-27 18:15:26 +08:00
Hung-ying Tyan
5d0c5cf2d6 Notify SipSessions before closing SIP stack.
Bug: 3116480
Change-Id: I748d63382ade250aed27ccb09ea68c76a433fd27
2010-10-25 16:12:26 +08:00
Hung-ying Tyan
60c45d0269 Clean up pending sessions on incoming call in SipService
Bug: 3122186
Change-Id: I25c9aa19d138f6940a29025d54e7bc2ffb7daa29
2010-10-22 09:01:49 +08:00
Chia-chi Yeh
703aae06c0 Merge "RTP: Fix non-zero DC in EchoSuppressor caused while aggregating samples." into gingerbread 2010-10-21 12:53:37 -07:00
Chia-chi Yeh
8a68b52b98 RTP: Fix non-zero DC in EchoSuppressor caused while aggregating samples.
Rewrite using integer arithmetic to get full 32-bit precision instead
of 23-bit in single precision floating-points.

Bug: 3029745
Change-Id: If67dcc403923755f403d08bbafb41ebce26e4e8b
2010-10-22 03:47:02 +08:00
Hung-ying Tyan
e87b644402 Add permission requirements to SipAudioCall and SipManager javadoc.
Bug: 3116259

Change-Id: I00a033794e9d3e1c2d2ccfe4e612cd50003ec2ee
2010-10-21 03:27:20 +08:00
Hung-ying Tyan
9b449e5606 Remove ringtone API from SipAudioCall.
(watch out auto-merge conflict for SipAudioCall).

Bug: 3113033, related CL: https://android-git/g/#change,75185

Change-Id: Ib48d3b990e229e0b341e47e10e76934e1a50d10f
2010-10-20 22:51:22 +08:00
Chung-yih Wang
4944fdd771 Periodically scan wifi when wifi is not connected and wifi lock is
grabbed in SipService.

bug: http://b/3077454
Change-Id: I153974325c29e0f927c8eb7fdbc4725aaf10087d
2010-10-19 14:09:30 -07:00
Hung-ying Tyan
0a6e717fb6 Handle dialing a SIP call to self.
Reply BUSY HERE response so server may redirect the call to the voice mailbox.

http://b/issue?id=3103072
http://b/issue?id=3109479

Change-Id: I81f5dd59ad87298dd9dda87084538ee460eabba8
2010-10-19 14:00:11 -07:00
Joe Onorato
431bb22695 Reduce logging.
Remember, the system and main logs are
    - Shared resources
    - Primarily for recording problems
    - To be used only for large grained events during normal operation

Bug: 3104855
Change-Id: I136fbd101917dcbc8ebc3f96f276426b48bde7b7
2010-10-19 15:08:05 -04:00
Chung-yih Wang
b4116c09fb Fix the incorrect environment variable name for the thread pool size.
bug: http://b/3099715
Change-Id: I531048414f22c8edcd9c4f815c12a0bdd6347640
2010-10-19 11:31:52 +08:00
John Huang
45bd8303fe Merge "Uncomment SIP/VOIP feature check in SipManager." into gingerbread 2010-10-18 13:41:04 -07:00
Hung-ying Tyan
a0cdfbf5b7 Uncomment SIP/VOIP feature check in SipManager.
http://b/issue?id=2971947

Change-Id: I3afa8eb03c4e347b382213dd388354365f766b2f
2010-10-18 19:48:04 +08:00
Chung-yih Wang
66cc5355a1 Set the thread pool size of NIST sip stack to one.
Set the thread pool size to one to fix the out-of-order packets
seen in sip service when the device is waken up from sleep.

bug:http://b/3099715
Change-Id: Ia169e3fde77488068c369e3345ecf6a6d8ddf792
2010-10-18 16:00:47 +08:00
Hung-ying Tyan
28f63c0689 SipService: add wake lock for incoming INVITE packets.
+ Keep the wake lock for 500ms. (Some measurements on N1 indicate 160~180ms
  needed to bring up InCallScreen but since INVITE doesn't come in frequently
  we can be more generous just to be safe.)
+ Move MyWakeupLock out of SipService so SipSessionGroup can use it without
  awkward inter-dependency with SipService.
  + Add acquire(int timeout) to be used to create the "timed" wake lock.

http://b/issue?id=3081828

Change-Id: Iffd1d78d1a5cae9f795252ada75310917095204d
2010-10-15 09:25:17 +08:00
Hung-ying Tyan
bd57eeafe0 SipService: add wake lock for multiple components.
+ Add MyWakeLock to maintain a global wake lock for multiple components.
  + Use a Set to store components that want to hold the lock.
  + When the first component enters the set, we grab the global wake lock.
  + When the set becomes empty, we release the global lock.
  + In places like no account being opened to receive calls, we reset the
    wake lock just to be safe from possible leakage.
+ Make MyExecutor aware of the wake lock. It will grab the wake lock on
  behalf of the task so that tasks don't need to worry about the lock.
  + Connectivity receiver is modified to be executed in MyExecutor.
  + WakeupTimer handler is already protected by AlarmManager's wake lock but
    all the timeout handlers that register themselves to the WakeupTimer are
    to be executed in MyExecutor to be protected by the wake lock.
  + Remove unnecessary code in the Keepalive and registration processes. Since
    both processes are executed in MyExecutor submitted by the WakeupTimer (as
    they are timeout handlers registered to the WakeupTimer), they don't need
    to add themselves to MyExecutor explicitly in their run() callbacks.
+ Make the keepalive process wait for at most 3 seconds instead of forever for
  server response. It could cause the wake lock to be held longer than necessary
  and is a potential cause for ANR.

http://b/issue?id=3081828

Related bug:
http://b/issue?id=3087153

Change-Id: Idee0ddb837e67daa0d5092c012bb242bd7c18431
2010-10-14 16:54:47 +08:00
Hung-ying Tyan
4f8fd10f76 Make SipService listen to WIFI state change events.
+ Grab a WIFI lock if any account is opened to receive calls and WIFI is enabled
+ Release the WIFI lock if no account is opened to receive calls or WIFI is
  disabled
+ Remove screen on/off event receiver

http://b/issue?id=3077454

Change-Id: Ifdf60a850bcf4106c75ec1e7563b26d8b33d7e92
2010-10-13 17:11:58 +08:00
Hung-ying Tyan
f1b1eec9de Merge "SipService: mScreenOn is flipped to wrong value." into gingerbread 2010-10-12 19:44:17 -07:00
Hung-ying Tyan
d6fc979edb SipService: mScreenOn is flipped to wrong value.
http://b/issue?id=3077454

Change-Id: I23b6f70730074689b939e449c2c202ce8ffb586f
2010-10-13 10:25:07 +08:00
Hung-ying Tyan
ebc886c857 Fix SipSessionGroup from throwing ConcurrentModificationException
http://b/issue?id=3087256

Change-Id: I67df64105db7c1295649f1f3ce77f99025ce3d44
2010-10-12 15:41:11 +08:00
Hung-ying Tyan
685b61b711 SipService: fix a missing switch-case break.
Change-Id: I638eecd8000293d4cb37b3595c02ca33df4924eb
2010-10-12 10:46:29 +08:00
Hung-ying Tyan
692cac9fdd SipHelper: add debug log for challenge responses.
Change-Id: If0143a0f076ef30b1b8998e477df933923bfa7b1
2010-10-11 11:26:50 +08:00
Chung-yih Wang
c7fda188ae Do not release the wifi lock if the screen is off.
We need to be able to receive calls if the device is able to
reassociate with any AP later on.

Change-Id: Ib7aafb98386bf250ed9b5ec0a5b519594efa1649
2010-10-09 08:37:40 +08:00
Hung-ying Tyan
aa562ffdb8 SipService: add permission check for using API
Change-Id: Ifd85ba07f1b913011cb3e80e5027c67bfe3db280
2010-10-08 11:57:18 +08:00
Hung-ying Tyan
08faac3c26 Unhide SIP API.
Change-Id: I09468e3149a242a3b1e085ad220eb74f84ac6c68
2010-10-08 08:31:42 +08:00
Chung-yih Wang
4483232f57 Suppress harder for echo without affecting the volume of real voice.
Change-Id: Ia3ce98eedd487a9e879ff0a4907b8c15b5707429
2010-10-08 06:09:07 +08:00
Hung-ying Tyan
9db99a4dc1 Make SipService broadcast SIP_SERVICE_UP when it's up.
http://b/issue?id=3062010

Change-Id: I13419fa3a8fdfba1977260f703e4dcaa42a6606c
2010-10-07 09:15:25 +08:00
Hung-ying Tyan
16c29bd7f2 Merge "SIP: Fix busy authentication loop." into gingerbread 2010-10-06 17:29:28 -07:00
Hung-ying Tyan
ee8a884f35 SIP: Fix busy authentication loop.
Add a retry count and give up after two attempts.
Also stop auto registration when server is unreachable.
And rename onError() to restartLater() for better readability.

http://b/issue?id=3066573

Change-Id: Icfa65c58546a1e2bf8e59e29584a3926c53c479b
2010-10-07 07:04:46 +08:00