7804 Commits

Author SHA1 Message Date
Kevin Hester-Chow
e0cbb81b7a Merge "Do not assume that there is always a running activity (Necessary for headless devices)" into ics-aah 2012-03-07 15:35:05 -08:00
John Grossman
d7af347922 Detect (at runtime) kernel support for the "hdmi_audio" switch.
A new switch was introduced in AndroidAtHome to deal with a race
condition between the WiredAccessoryObserver and the HW composer HAL.
When the new switch ("hdmi_audio") is present, we want to pay
attention to it instead of paying attention to the old switch
("hdmi").  This change checks at startup for the presence or absence
of the new switch and uses it if available, otherwise it falls back on
classic behavior.

see change ID I960cfc2f3e8df5342e7248a26fd313fdad2ca322 for the kernel
side changes.

see bug 6023647 for a discussion of the issue.

Change-Id: Ia2f2c399c3d85896ede0fff57ecbd51f332b3e0e
Signed-off-by: John Grossman <johngro@google.com>
2012-03-06 17:59:02 -08:00
Kevin Hester-Chow
2d72be20fe Do not assume that there is always a running activity
(Necessary for headless devices)

Change-Id: I61969ebfdd4aa02a3661272a0bcd0aa67667f115
2012-03-05 08:01:00 -08:00
Christopher Tate
f79f800864 Send UpdateLock broadcasts to manifest receivers
So that e.g. the system update service doesn't need to run all the time.

Bug 5543442

Change-Id: Icd0fcc7f771f7ba92ff190ffed0f0debba4bd911
2012-03-01 12:39:25 -08:00
Christopher Tate
8c218b78b3 Merge "Introduce UpdateLocks - "now is not a good time for non-interactive OTA"" into ics-aah 2012-02-29 11:47:02 -08:00
Dianne Hackborn
49b39ced82 am 27e20ccd: Merge "Fix issue #6073913: onActivityResult() not getting called..." into ics-mr1
* commit '27e20ccd9ac4dd1f9bf902ed2b359cc8beff7c9b':
  Fix issue #6073913: onActivityResult() not getting called...
2012-02-28 15:03:04 -08:00
Christopher Tate
66e817655a Introduce UpdateLocks - "now is not a good time for non-interactive OTA"
An "UpdateLock" works similarly to a wake lock in API: the caller is
providing a hint to the OS that now is not a good time to interrupt
the user/device in order to do intrusive work like applying OTAs.
This is particularly important for headless or kiosk-like products
where ordinarily the update process will be automatically scheduled
and proceed without user or administrator intervention.

UpdateLocks require that the caller hold the new signatureOrSystem
permission android.permission.UPDATE_LOCK.  acquire() and release()
will throw security exceptions if this is not the case.

The "is now convenient?" state is expressed to interested parties
by way of a sticky broadcast sent only to registered listeners.  The
broadcast is protected; only the system can send it, so listeners
can trust it to be accurate.  The broadcast intent also includes a
timestamp (System.currentTimeMillis()) to help inform listeners that
wish to implement scheduling policies based on when the device became
idle.

The API change here is a tiny one: a dump(PrintWriter) method has been
added to the TokenWatcher class to facilitate getting information out
of it for dumpsys purposes.  UpdateLock itself is still @hide.

Bug 5543442

Change-Id: Ic1548dd43935f45d4efc67f970abdc290a45f715
2012-02-28 15:01:30 -08:00
Dianne Hackborn
5c607433e3 Fix issue #6073913: onActivityResult() not getting called...
...if the process is killed and restarted

Try to ensure that in all cases we deliver an activity result if one
was requested.

Change-Id: Id43e830d2ee782f98ed1e3b68e5e16f3258d4ad8
2012-02-28 14:45:23 -08:00
Dianne Hackborn
37b5c7cb69 am 133dc2d7: Merge "Fix issue #6048808: sometimes auto-correct is inactive" into ics-mr1
* commit '133dc2d7aecc68990c363c861716b134910a4ced':
  Fix issue #6048808: sometimes auto-correct is inactive
2012-02-24 15:38:03 -08:00
Dianne Hackborn
7663d80f6b Fix issue #6048808: sometimes auto-correct is inactive
My previous change to speed up the time the IME is dismissed was
fundamentally flawed.  That change basically switched the order
the application called the input method manager service from doing
startInput() and then windowGainedFocus(), to first windowGainedFocus()
and then startInput().

The problem is that the service relies on startInput() being done
first, since this is the mechanism to set up the new input focus,
and windowGainedFocus() is just updating the IME visibility state
after that is done.  However, by doing the startInput() first, that
means in the case where we are going to hide the IME we must first
wait for the IME to re-initialize editing on whatever input has
focus in the new window.

To address this, the change here tries to find a half-way point
between the two.  We now do startInput() after windowGainedFocus()
only when this will result in the window being hidden.

It is not as easy as that, though, because these are calls on to
the system service from the application.  So being able to do that
meant a fair amount of re-arranging of this part of the protocol
with the service.  Now windowGainedFocus() is called with all of
the information also needed for startInput(), and takes care of
performing both operations.  The client-side code is correspondingly
rearranged so that the guts of it where startInput() is called can
instead call the windowGainedFocus() entry if appropriate.

So...  in theory this is safer than the previous change, since it
should not be impacting the behavior as much.  In practice, however,
we are touching and re-arranging a lot more code, and "should" is
not a promise.

Change-Id: Icb58bef75ef4bf9979f3e2ba88cea20db2e2c3fb
2012-02-24 13:18:23 -08:00
Dianne Hackborn
f3b7653c15 am 01011c3d: Fix issue #6037252: Screen shifts after all apps are upgraded
* commit '01011c3d7ce4f76c1a76b33a04fc63da784ddbea':
  Fix issue #6037252: Screen shifts after all apps are upgraded
2012-02-21 14:57:47 -08:00
Dianne Hackborn
01011c3d7c Fix issue #6037252: Screen shifts after all apps are upgraded
Two things: (1) make sure the boot message is always positioned within
the entire unrestricted display, and (2) allow the dim background to go
on top of the nav bar when being used for the boot message (this latter
is really a hack that should be more generally fixed in the future).

Change-Id: I7261b044eb802a39cadff931b50a679ff18781d6
2012-02-21 13:54:21 -08:00
Kent Ryhorchuk
9894eb4e1c Merge "New clock sync control loop." into ics-aah 2012-02-15 17:33:00 -08:00
Kent Ryhorchuk
17fe247616 New clock sync control loop.
Change clock sync control to velicity form PI loop. Tuned for office LAN and
WiFi conditions, will probably perform better in clean environments.
Improve packet filtering to prevent clock sync on bad rtt.
Changed diag interface to take rtt times, P, I, D are no longer supported.

Change-Id: Id7758262c5f987f07d7091aba6c0874d7c19f387
2012-02-14 16:41:26 -08:00
Robert Greenwalt
652fdf9b0e am c8711ca7: Merge "Stop using shared DUN APN when tethering stops." into ics-mr1
* commit 'c8711ca7eb962072ccd6175be3cfa861195ba6cd':
  Stop using shared DUN APN when tethering stops.
2012-02-14 13:40:02 -08:00
Mike Lockwood
594eba859f am ffc89899: Merge "Don\'t pulse LED on new notification unless notification has LED flag set" into ics-mr1
* commit 'ffc89899652f5c815b6d156f55a909001420891e':
  Don't pulse LED on new notification unless notification has LED flag set
2012-02-14 12:37:51 -08:00
Robert Greenwalt
2384386f31 Stop using shared DUN APN when tethering stops.
Backported from master, including a bug fix and a cdma enhancement.

Even if other people are sharing the connection (ie, carrier wants
default and tethered traffic on the same APN) stop using a carrier-
described APN when the tethering stops.

bug:5972599
Change-Id: I25e4831855e6b62c0c3ab3a6f4d4846aaee6ac50
2012-02-14 11:44:09 -08:00
Mike Lockwood
ece18efb35 Don't pulse LED on new notification unless notification has LED flag set
Bug: 6006131

Change-Id: I719c7d68e310bfaca227f6286159b3993784926b
Signed-off-by: Mike Lockwood <lockwood@google.com>
2012-02-13 20:42:19 -08:00
John Grossman
e1288ffbf2 Put a bandaid on a segfault in timed audio track handling.
Add a bandaid to prevent a segfault which can occur while handling
timed audio buffers.  There is a deeper problem which should
eventually be addressed, but for now this fix should prevent any
crashing.

The deeper problem is as follows.

When the AudioFlinger mixer gets data to mix from an AudioTrack, it
ends up getting a structure filled out which points into an IMemory
region owned by the AudioTrack.  Unfortunately, this structure is not
holding a refcount on the IMemory which it points into.  If the
IMemory refcount hits 0 and the chunk of RAM is retuned to the binder
heap it came from, there can still be a Buffer object being held by
the AudioFlinger mixer which points into the region of memory which
was retuned to the binfer heap.  If AF reads from this buffer, it
could read corrupt data (if the region of memory gets handed back out
to a writer), or it could segfault (if the heap has been freed and the
pages unmapped).  Similar problems could happen if AF attempts to
write to the buffer, heap corruption in one case, segfaulting in the
other.

In the past, this has not been an issue for AF, because tracks
allocate a single IMemory (which serves as a ring buffer) and the
IMemory lives for as long as the track lives.  As an artifact of the
way the code came out, the mixer cannot be holding a Buffer structure
pointing into the IMemory which used to be owned by a track if the
track no longer exists.  Tracks cannot come into or out of existence
during a mix operation, which is the only thing which makes this safe.

TimedTracks work differently, however.  Timed tracks each allocate a
small binder heap, and then hand out IMemory instances  broken out of
this heap.  The heap lives as long as the track, so the worst which
could happen here is that a TimedTrack's IMemory gets returned to the
heap while there is still a buffer structure in flight pointing into
the memory region, then the region gets handed out again and
overwritten by new data causing the mixer to mix the wrong audio.  The
timing to cause this to happen is very difficult to encounter, and you
to generate the timing conditions required, you need to be in a pretty
bad failure state where audio is already breaking up and skipping, so
its unlikely that anyone would notice (which is why I'm band-aiding
the segfault and letting the deeper issue slide for now).

In general, however, it might be a good idea to revisit this buffering
design.  On principal, if someone is going to hold pointers into a
refcounted object, they should be holding a ref on the object at the
same time.  Failure to do this will usually lead to a situation where
there are corruption or segfault issues, or to a system where the
refcounted object's lifetime must be implicitly managed very carefully
in ways which are usually non-obvious and are easy to break by new
engineers on a project.

Change-Id: Ib391075395ed0ef46a03c37aa38a82d09e88abeb
2012-02-12 17:51:21 -08:00
Wink Saville
673b352f6b am 197fe269: Merge "Add OEM specific USB mode enumeration based on ro.bootmode property" into ics-mr1
* commit '197fe26940022be75384f4038dd789f446d33122':
  Add OEM specific USB mode enumeration based on ro.bootmode property
2012-02-10 15:14:06 -08:00
Kazuhiro Ondo
afd8f1820e Add OEM specific USB mode enumeration based on ro.bootmode property
This patch is adding a capability so that OEM can override USB mode
in case the device is boot up with OEM specific mode. (i.e. modem
debug, factory test etc.)

Bug:5964042
Change-Id: Ic8e23d302563ce71eedb74ce94cca8c65838a4f7
2012-02-10 12:29:12 -08:00
John Grossman
2cb8784d03 Fix a segfault in AudioFlinger.
Check the string returned by a HAL's implementation of get_parameters
for NULL before attempting to make use of it.  That way, we won't
bring down the mediaserver because of a poorly written HAL.

Change-Id: I45f0fd3de003151f98acf32c36c42f58d053f3a0
2012-02-09 11:31:06 -08:00
John Grossman
583a03ac04 Fix device ID selection in the common time service.
Fix an issue I discovered while back-porting this code to master.  The
common time service was using the MAC address of "eth0" (hardcoded) as
its device ID instead of fetching it from the interface it is
currently bound to.  On phones (or any other device with no eth0) this
causes time service to never be able to fetch a device ID as it
should.

Change-Id: Icf8a2006924088efc86065927a648f7f53638657
2012-02-07 16:07:48 -08:00
John Grossman
36d372fb6a Explicitly manage common clock client lifetimes.
Change the CCHelper class to be an instanced instead of a static
pattern.  The CCHelper instances all share an interface to the common
clock service and register/unregister a callback handler in response
to there being CCHelper instance in the system or not.  This brings
usage of the CCHelper into like with the new auto-disable
functionality of the common time service.  For any given process,
whenever there are CCHelper instances active, the process will
maintain a callback target to the common clock service and will be
considered to be an active client.

Also change all of the users of the CCHelper interface to manage the
lifecycle of their new CCHelper instances.

Change-Id: I7c28c5d70d9b07ba7407b4ac706e7e7d7253001b
2012-02-06 18:02:33 -08:00
John Grossman
7d6934f3eb Add the CommonTimeManagementService.
Add a small service to the high level core set of system services to
control the configuration of the native common time service.  This
service is responsible for controlling policy regarding when the
common time service should be allowed to run, which networks it is
allowed to run on, what priority it runs at in the master election
algorithm, and so on.

Change-Id: I37308e882a0e8c4cd3e38c4f47b7c40b9150ba31
2012-02-06 18:02:33 -08:00
John Grossman
354edbc80e Implement new common_time service functionality.
Major re-factor of the common_time (formally aah_timesrv) service in
preparation for up-integration into Android master.  This work
includes bug fixes, new features, and general code cleanup.  High
points are listed below.

+ CommonClock interface has been enhanced to allow querying of many
  more low level synchronization details; mostly for debugging, but in
  theory useful to an application as well.
+ CommonTimeConfig interface has been implemented.  This allows a
  management process to configure a number of different parameters
  (many of them new) to control the behavior of the common_time
  service.  Most importantly, the time service can be bound to a
  specific network interface and should only operate on that interface
  an no others.
+ Enhance log messages to be more useful in determining what the time
  service state machine is doing and why.
+ Enhance information provided by dumpsys to provide many more details
  about the quality of time sync and the network conditions which gave
  rise to the current quality conditions.

Features, features, features....
+ Add a feature which lets the high level choose a different master
  election endpoint so that multiple time synchronization domains can
  co-exist on the same subnet (mostly to support a potential use case
  of multiple home domains in a multiple dwelling environment like a
  hotel, dormitory or apartment complex).
+ Add a feature which lets the high level assign a 64-bit group ID
  which allows partitioning of time synchronization domains even when
  the master election endpoint is shared (as it might be if broadcast
  is being used instead of multicast)
+ Add an auto-disable feature which lets the time service drop into
  network-less mode when there are no active clients of the
  common_time service in the device.  Mostly for phones, this allows
  phones to not consume network/battery resources when they don't need
  to maintain common time.
+ Add a feature which lets the high level choose the priority of the
  common_time service in the master election protocol.  This allows
  high level decisions about things like mobile vs non-mobile, wired
  ethernet vs WiFi to affect who ends up with the job of master on a
  given network.  Priority overrides at the low level also allow
  clients coming in from network-less mode to lower their effective
  priority as they join a new network so as to not disrupt any
  stable long-running timeline which may already be active on the
  network.
+ Add the ability to control some of the core parameters of the time
  sync service which effect network load (like the sync polling
  interval and the master announce interval)

Change-Id: I71af15a83cfa5ef0417b406928967fb9e02f55c6
2012-02-06 18:02:32 -08:00
John Grossman
9387f4f800 Add native common time config service.
Define a native service interface for configuring and controlling the
common time service.  Implement the native marshallers and stub the
implementation of the new interface.

Change-Id: Ia6a6a20ef3d221e8829c55be1dd5f98ed996c610
2012-02-03 17:46:00 -08:00
John Grossman
2627965d61 Add marshallers for the new common clock methods.
Add marshallers and stub implementations for new methods in the common
clock interface to support new functionality being added in the
process of integrating the common time service more closely with the
Java level of Android.

Change-Id: Iac2d3fb405d1b64cea1d8e13f988160afb76a06d
2012-02-03 17:45:53 -08:00
John Grossman
7f1d9e1c53 Move the definition of time server state.
Move the State enum up to the ICommonClock interface so it can be
returned for status/debugging up to clients.

Change-Id: I81fef5b96ffc69a4f2e9801b3744feea099ccd47
2012-02-03 17:45:17 -08:00
John Grossman
232f869c99 De-AAH-ify the common time service.
Bulk name change to remove references to Android@Home from the common time
service in preparation for cleanup and up-integration into the master
branch.  Basically, aah_timesrv is now common_time.

Change-Id: I3d3db212f96e8ba171aa36b9c58e27e4a336cb0a
2012-02-03 17:43:21 -08:00
Robert Greenwalt
9800e30b54 am 44f64c96: Merge "Filter our v6 address from tethering dns." into ics-mr1
* commit '44f64c965776ae65ff85ef8c37afb7e14483bdf2':
  Filter our v6 address from tethering dns.
2012-01-25 11:30:44 -08:00
Robert Greenwalt
03d58bc656 Filter our v6 address from tethering dns.
Don't support IPv6 yet, and the tools crash when they see one, so
filter them out.

bug:5913888
Change-Id: Id7096aa70da4e3cc8e4702b0b489c0228a100db9
2012-01-24 16:44:50 -08:00
Jason Simmons
717c37944c resolved conflicts for merge of 7eeaf3f0 to ics-aah
Change-Id: I92b709268e22e3c3e9590c15173ab073b37db726
2012-01-24 13:16:19 -08:00
Eric Laurent
99322356a0 am 41773d46: Merge "DO NOT MERGE Revert "Revert "AudioFlinger: mix track only when really ready (2)""" into ics-mr1
* commit '41773d46556aa47d4322ff89fdaf7d1345c2d1f2':
  DO NOT MERGE Revert "Revert "AudioFlinger: mix track only when really ready (2)""
2012-01-24 11:51:15 -08:00
Eric Laurent
7eeaf3f07a Merge "AudioFlinger: refine mixer sleep time logic" into ics-mr1 2012-01-24 11:49:39 -08:00
Eric Laurent
41773d4655 Merge "DO NOT MERGE Revert "Revert "AudioFlinger: mix track only when really ready (2)""" into ics-mr1 2012-01-24 11:49:16 -08:00
Robert Greenwalt
4e2acb1db5 am f449ea9e: Merge "Use the carrier-given dns addrs for tethering." into ics-mr1
* commit 'f449ea9e96162698f4ec6d62c70750eb50744da7':
  Use the carrier-given dns addrs for tethering.
2012-01-24 11:42:39 -08:00
Robert Greenwalt
f449ea9e96 Merge "Use the carrier-given dns addrs for tethering." into ics-mr1 2012-01-24 11:40:19 -08:00
Dianne Hackborn
4fdbe9e550 am 47163685: Merge "Another attempt at issue #5823276: home repaints after full-screen app is exited" into ics-mr1
* commit '47163685eb90f9520e7ae0ac0984b4e1535e8e5b':
  Another attempt at issue #5823276: home repaints after full-screen app is exited
2012-01-24 11:35:19 -08:00
Dianne Hackborn
47163685eb Merge "Another attempt at issue #5823276: home repaints after full-screen app is exited" into ics-mr1 2012-01-24 11:33:15 -08:00
Dianne Hackborn
b7ff51bde9 Another attempt at issue #5823276: home repaints after full-screen app is exited
This is between the two previous attempts.  I returned the part from the
original that was breaking gallery, but have some new code to detect when
something about the window params has changed that would require a
layout pass to make sure we still do a layout then, even if the window is
not currently visible.

Change-Id: I07745e1f66022583e3076b84cc8bbe8bd2acd48f
2012-01-23 19:15:27 -08:00
Eric Laurent
0609231f4f AudioFlinger: refine mixer sleep time logic
When an AudioTrack is in underrun state, the AudioFlinger mixer will
sleep for a short period of time to give the app a chance to fill the
AudioTrack buffer. If the AudioTrack is still not ready during next mixing round,
the mixer will proceed with other tracks.

If an application keeps a steady underrun condition, the AudioFlinger mixer will
alternate between ready and not ready states. In the longer term this will cause the
audio HAL to underrun.
There is a mechanism to reduce the sleep period if the mixer is not ready several times in a
row but this mechanism is defeated by the alternating ready/not ready conditions.

The fix consists in only increasing sleep time if the mixer is ready for at least two
consecutive times.

Issue 5904527.

Change-Id: Id0139bca9be8c4e425ec6d428515c4d8f718e8c9
2012-01-23 18:56:59 -08:00
Eric Laurent
0b08965558 DO NOT MERGE Revert "Revert "AudioFlinger: mix track only when really ready (2)""
This reverts commit b918035d34422a2041b6ec8c09c566bb93345b40.

Change-Id: I093bcfa56ad54a080b930208b6b79169d33581fb
2012-01-23 18:37:07 -08:00
Jim Miller
879693917d am 44760b10: Merge "Revert "Fix 5797764: Increase lock screen\'s thread priority"" into ics-mr1
* commit '44760b106a4bafcf83fb356bf91683db40e0e5a2':
  Revert "Fix 5797764: Increase lock screen's thread priority"
2012-01-23 15:51:55 -08:00
Jim Miller
44760b106a Merge "Revert "Fix 5797764: Increase lock screen's thread priority"" into ics-mr1 2012-01-23 15:49:32 -08:00
Jim Miller
54dbbce1c3 Revert "Fix 5797764: Increase lock screen's thread priority"
This reverts commit 6d6a70a33746ef5147ab146f1802f0db424dd2f1

This doesn't appear to have a measurable impact for this issue.
2012-01-23 15:24:42 -08:00
Justin Ho
2a473961e3 am fee5a860: Merge "DO NOT MERGE Revert "AudioFlinger: mix track only when really ready (2)"" into ics-mr1
* commit 'fee5a860a8355cda071ff23644e943414ba7f65d':
  DO NOT MERGE Revert "AudioFlinger: mix track only when really ready (2)"
2012-01-23 15:13:50 -08:00
Justin Ho
b918035d34 DO NOT MERGE Revert "AudioFlinger: mix track only when really ready (2)"
This reverts commit 71c4496a9757438afd30b4404824f296f6158a49.

Change-Id: Iff10c49ea728bb10023ddeb50a3b708db770fff2
2012-01-23 15:02:41 -08:00
Robert Greenwalt
7df80fa4e8 Use the carrier-given dns addrs for tethering.
This fixes a complaint from carriers (that we used 8.8.8.8), but also
fixes the case where there is only room for one live radio
connection: the secondary connection (tethering) doesn't have a
default route to prevent on-device traffic from slipping out on the
tethering connection, but tethered dns is proxied through dnsmasq, so
it is appearing as on-device traffic and is unroutable.  By switching
to the carrier-indicated dns servers we can use the host-routes
already set for those and kill two bugs with one fix.

bug:5898904
Change-Id: Ida8777687994f353b2d4f2c7db5d6ea4b6ac3882
2012-01-23 11:29:37 -08:00
Jim Miller
374fa7dbbc am eaa11a72: Merge "Fix 5797764: Increase lock screen\'s thread priority" into ics-mr1
* commit 'eaa11a723150f1ea79446d7ba4bf77eb47b73337':
  Fix 5797764: Increase lock screen's thread priority
2012-01-20 15:26:13 -08:00