The current implementation always starts with default minimum interval when
the measurement process starts. By keeping last known good interval, we can
save the time in re-measurement.
Change-Id: I8f1720acafaa7e101855fe0c66d5c7b0e578e0d7
In two ways:
(1) When there's a session timeout, restart the measurement at a later time
instead of just stalling.
(2) When there's a port change, do not re-measure the interval if the current
interval works well in the past. We keep success count and decrement it
by half when there's a port change. When the count is below a threshold,
we restart the measurement process.
Change-Id: I7256464435a5e2d2a239bfccaa004e9ceb1d9ce5
Misc keepalive fixes including:
+ Restart NAT port timeout measurement when keepalive fails. The max interval
is set to the current keepalive interval.
+ When exception occurs during sending a keepalive, restarts registration.
+ When exception occurs during measurement, retry for a limited times before
giving up.
Change-Id: I7aa787a5ec7c4c9b4334aa1017371d9049b3520c
Reuse the new component in the original keepalive process and the NAT port
mapping timeout measurement process.
This is the foundation for fixing the following bug.
Bug: 3464181
Change-Id: If7e951c000503fa64843942ad062c4d853e20c8d
This is to prepare to move keepalive process to SipSessionGroup before fixing
the following bug.
Bug: 3464181
Change-Id: I57d8f6effad76706b5a76e1269c53d558db88ae4
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: Idea43747f8204b0ccad3fc05a1b1c0b29c9b2557
Make it return true for all existing accounts.
Rename mOpened to mOpenedToReceiveCalls to make it less confusing.
Bug: 3155849
Change-Id: I327f411bf76afd73434ad1fa2ffef3db1e35d778
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
+ 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
+ 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
+ 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
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
The SipService used to take an action string and broadcasts an intent with
that action string when an incoming call is received. The design is not safe
(as the intent may be sniffed) and inflexible (can only received by
BroadcastReceiver). Now we use PendingIntent to fix all these.
Companion CL: https://android-git.corp.google.com/g/#change,71800
Change-Id: Id12e5c1cf9321edafb171494932cd936eae10b6e
+ Fix keepalive timer event leak due to the race between stopping timer and
the async'ed timeout handler
+ SipSessionImpl: set state before handling an event to ensure we get correct
state when some error occurs during handling the event.
+ Fix potential NPE in SipManager.ListenerRelay.getUri().
Change-Id: I021ee34f83059fd4fbb64b30bea427a5462aa51b