History log of /frameworks/base/services/java/com/android/server/LocationManagerService.java
Revision Date Author Comments (<<< Hide modified files) (Show modified files >>>)
f5fdca9dc1528a7f5acec04c2f2a1b99e8f4b338 05-Jun-2013 Dianne Hackborn <hackbod@google.com> Maybe fix issue #9296868: Crash in system process

There were some paths in LocationManagerService where
mRecivers was being accessed/modified without the lock held.
Update method names to indicate they need to be called with
lock held to make it more clear in the future when such a
problem may happen.

Change-Id: Ie2a9d019155ac7cedd1db298caca75b8fe382ca7
/frameworks/base/services/java/com/android/server/LocationManagerService.java
a9770e4f062226821c9f66b86128f208b91e2d50 30-May-2013 Victoria Lease <violets@google.com> break up LocationManagerService's WakeLock

This commit splits LocationManagerService's monolithic WakeLock into
per-LocationManagerService.Receiver WakeLocks, for better WorkSource
accounting. This should make it easier to debug location-related
power issues.

Change-Id: I0d2897c305a38099f9663dc1bc9354ce4bbe1077
(cherry picked from commit 0aa28602d51bf41e46d18ffefe724ebc3ff7a704)
/frameworks/base/services/java/com/android/server/LocationManagerService.java
d9ba79ed7c898aa60ee3c5196439d9bac6cbbb59 07-May-2013 Victoria Lease <violets@google.com> OO NOT MERGE allow connected location providers location access

Cherry-pick of I0c383eb82ed041e57a7d32321df2d67b462d4e21 from master

Oops, it seems the fused location provider was being denied access
to locations when any user other than the primary device owner is
logged in. This was breaking the fused location provider entirely
for all secondary users of a given device.

Bug: 8766225
Change-Id: Ic0db5f2094828c897a405abb0dca6ac39a2ca526
/frameworks/base/services/java/com/android/server/LocationManagerService.java
c5fc9988f11acc58229fb6ae80d346277318ada4 18-Apr-2013 Zhentao Sun <robinvane@google.com> Made it easier to disable overlay mechanism of location components.

Fixed b/8276827

Vendor might want to provide their own implementation of "network
location", "fused location" and "geocoder" service. Location manager now
allows those service to be replaced by packages that have the same
signature as one of the packages in config_locationProviderPackageNames.
Such behavior might not be desirable on some devices. This change
make this behavior configurable by 3 boolean flags.

Details:
- Added three boolean flags in core/res/res/values/config.xml to enable
or disable NLP/FLP/Geocoder overlay
- Added 3 package name for the stock NLP/FLP/Geocoder. They are needed
only when overlay is disabled because LocationManagerService need to
know which package is preferred when searching for
NLP/FLP/Geocoder service.
- Made ServiceWatcher able to handle non-overlayable services.
- Fixed an NPE isue in ServiceWatcher. mPm.queryIntentServicesAsUser
might return null.
- Fixed an bug: justCheckThisPackage in bindBestPackageLocked is always
ignored.

Change-Id: Id221961ac7c3aa8ad44b894f9523f04f770ae237
/frameworks/base/services/java/com/android/server/LocationManagerService.java
1b9b7b1f1b4479cc1c7003c75f9c05dfba8c56ac 16-Apr-2013 David Christie <dnchrist@google.com> Fix security issues with LocationManager where apps with coarse permissions
can get location updates too frequently by repeatedly calling getLastKnownLocation
or by registering/unregistering location updates frequently.

Change-Id: Ibd9ce28b0401372b995a0dbfb2f0a984dd11c0b1
/frameworks/base/services/java/com/android/server/LocationManagerService.java
8ce470dd4ba0608abb6b5eae117cefca927af96b 03-Apr-2013 Jaikumar Ganesh <jaikumar@google.com> GPS Hardware geofencing.

Add support for doing geofencing in hardware.

Change-Id: I6d5015190e8d84e1f4beb1010ed977a71c1622d0
/frameworks/base/services/java/com/android/server/LocationManagerService.java
64d41d7391e57886978e94e86cf01a167226dbfe 07-Feb-2013 Dianne Hackborn <hackbod@google.com> Fix build, conflict with another change.

Change-Id: If4d7b6c814d946806838cee7dcaccba4c65c3d0f
/frameworks/base/services/java/com/android/server/LocationManagerService.java
34e0b05e28b25dbe20c819ad4fa923c716c37e5f 07-Feb-2013 Dianne Hackborn <hackbod@google.com> Merge "App ops: track system windows, monitoring changes."
c2293025a25e04b26bf53713d71f85fd9ca5e8e9 07-Feb-2013 Dianne Hackborn <hackbod@google.com> App ops: track system windows, monitoring changes.

Change-Id: I273e82bdad66ada3bf0f7ec9176bc304b9ee1ee8
/frameworks/base/services/java/com/android/server/LocationManagerService.java
f21f175369783d9a77f1e580b42ef9b3e918c2af 06-Feb-2013 Victoria Lease <violets@google.com> Merge "refactor isAllowedBySettingsLocked()"
91641ec5538aa3b9872f24c43f811bffbcd12368 06-Feb-2013 Victoria Lease <violets@google.com> Merge "Fix addGpsStatusListener"
3d5173deea9d74b0476739c7108f9b77bcd8a495 06-Feb-2013 Victoria Lease <violets@google.com> Fix addGpsStatusListener

.detrevni saw tset ()sseccAnoitacoLkcehc eht smees tI

Bug: 8131283
Change-Id: I91ded29338c93aa7ab35d849fc5338b3f6d6590b
/frameworks/base/services/java/com/android/server/LocationManagerService.java
a61bb2375c4133852ade5774c5c1e7bd39cc1407 05-Feb-2013 JP Abgrall <jpa@google.com> Merge "LocationManagerService: Add debug flag lookup from properties"
09eeaecf7440ff63c937337bb2f50079ebbbf9a2 05-Feb-2013 Victoria Lease <violets@google.com> refactor isAllowedBySettingsLocked()

This commit splits LocationManagerService.isAllowedBySettingsLocked()
into isAllowedByUserSettingsRogkei(), which takes a UID argument, and
isAllowedByCurrentUserSettingsLocked(), which does not. This removes
the need to generate synthetic UIDs with arbitrary application IDs
and makes more explicit when LocationManagerService is acting on
behalf of a caller and when it is acting on behalf of the device's
current active user.

Change-Id: I2cb8fb52687d2629848e5a4b66a4bda8f0f66fe1
/frameworks/base/services/java/com/android/server/LocationManagerService.java
f79811e7b9611066b3ca2df3ceea07bdd99597e9 02-Feb-2013 JP Abgrall <jpa@google.com> LocationManagerService: Add debug flag lookup from properties

Instead of hardcoding true/false in the code:
setprop log.LocationManagerService DEBUG
works just fine. Or the reboot-proof version in userdebug/eng builds:
cat > /data/local.prop <<eof
log.tag.LocationManagerService=DEBUG
eof

Change-Id: If4efad1c3adc401c0cb5d1a3cc449b53224ead08
/frameworks/base/services/java/com/android/server/LocationManagerService.java
03cdd3d275499df3ef1059905899dcc5aaf2ab01 02-Feb-2013 Victoria Lease <violets@google.com> dual-mode switching single/multiuser ServiceWatcher

This changelist revises LocationManager's previous multiuser system.

Location provider services that are not multiuser-aware continue to
run as before: ServiceWatcher binds to location provider services as
the current active user. When the device switches from one user to
another, ServiceWatcher unbinds from the old user's location provider
service and binds to the new user's instance.

Now, location provider services that are multiuser-aware or
user-agnostic can declare "serviceIsMultiuser" metadata in their
AndroidManifest.xml to prevent ServiceWatcher from performing this
switching. These services will run as singleton services and will be
expected to handle user switches on their own.

With this feature in, I was able to switch FusedLocationProvider to
run in multiuser mode, sharing the system_server process instead of
running in its own process. The NetworkLocationProvider is unchanged,
still running in singleuser mode, cheerfully oblivious to the
possibility that there might be any user on the device besides the
one it services.

Bug: 8028045
Change-Id: I1a5bd032918419bab6edb46c62ff8c6811170654
/frameworks/base/services/java/com/android/server/LocationManagerService.java
de07d41f6396f9f040fed2b6780932d8e5dbb482 28-Jan-2013 Victoria Lease <violets@google.com> Merge "Annotate Locations coming from mock providers"
5e45ee6752528791deb66b83d76250685de15d47 25-Jan-2013 Dianne Hackborn <hackbod@google.com> App ops: you can now turn off operations.

Also add new ops for calendar and wi-fi scans, finish
implementing rejection of content provider calls, fix
issues with rejecting location calls, fix bug in the
new pm call to retrieve apps with permissions.

Change-Id: I29d9f8600bfbbf6561abf6d491907e2bbf6af417
/frameworks/base/services/java/com/android/server/LocationManagerService.java
54ca7aef2e12b240caa6fb1a1e65abd234bea337 08-Jan-2013 Victoria Lease <violets@google.com> Annotate Locations coming from mock providers

LocationManagerService now annotates incoming Location objects that
have come from mock location providers. The new isFromMockProvider()
method can be called on any Location to determine whether the
provider that supplied the Location was a mock location provider.

Bug: 6813235
Change-Id: Ib5140e93ea427f2e0b0036151047f87a02b4d23a
/frameworks/base/services/java/com/android/server/LocationManagerService.java
35654b61e8fe7bc85afcb076ddbb590d51c5865f 15-Jan-2013 Dianne Hackborn <hackbod@google.com> More work on App Ops service.

Implemented reading and writing state to retain information
across boots, API to retrieve state from it, improved location
manager interaction to monitor both coarse and fine access
and only note operations when location data is being delivered
back to app (not when it is just registering to get the data at
some time in the future).

Also implement tracking of read/write ops on contacts and the
call log. This involved tweaking the content provider protocol
to pass over the name of the calling package, and some
infrastructure in the ContentProvider transport to note incoming
calls with the app ops service. The contacts provider and call
log provider turn this on for themselves.

This also implements some of the mechanics of being able to ignore
incoming provider calls... all that is left are some new APIs for
the real content provider implementation to be involved with
providing the correct behavior for query() (return an empty
cursor with the right columns) and insert() (need to figure out
what URI to return).

Change-Id: I36ebbcd63dee58264a480f3d3786891ca7cbdb4c
/frameworks/base/services/java/com/android/server/LocationManagerService.java
002a54e2291eeb3a3fd0b6b3f9dbc96a7c805062 11-Jan-2013 Dianne Hackborn <hackbod@google.com> WorkSource can now track package names.

Use this to track the package name of applications
accessing GPS.

And now the app ops service can enforce that callers
must provide valid package names.

Change-Id: I842a0abe236ea85f77926d708547f0f95c24bd49
/frameworks/base/services/java/com/android/server/LocationManagerService.java
a06de0f29b58df9246779cc4bfd8f06f7205ddb6 12-Dec-2012 Dianne Hackborn <hackbod@google.com> New "app ops" service.

Initial implementation, tracking use of the vibrator, GPS,
and location reports.

Also includes an update to battery stats to also keep track of
vibrator usage (since I had to be in the vibrator code anyway
to instrument it).

The service itself is only half-done. Currently no API to
retrieve the data (which once there will allow us to show you
which apps are currently causing the GPS to run and who has
recently accessed your location), it doesn't persist its data
like it should, and no way to tell it to reject app requests
for various operations.

But hey, it's a start!

Change-Id: I05b8d76cc4a4f7f37bc758c1701f51f9e0550e15
/frameworks/base/services/java/com/android/server/LocationManagerService.java
5cd731a2333479d85b1bdf6dbf8a185df2877146 20-Dec-2012 Victoria Lease <violets@google.com> prevent concurrency issues during LocationManager init

systemReady() was returning before the LocationManagerService was
actually ready. Applications making LocationManager transactions
during their startup could possibly hit a race condition with the
yet-uninitialised LocationManagerService.

To guarantee that LocationManagerService is actually ready before
returning from systemReady(), we simply do the startup work on the
thread that called systemReady(), rather than spin up a secondary
thread to do the work asynchronously.

LocationWorkerHandler still needs a thread to do its work on, so
rather than have it run on the secondary thread that was
previously used for systemReady()'s work, we create a HandlerThread
for it.

Additionally, LocationManagerService.init() really needed to grab
lock for some of the things it was doing. I moved all of the code
that could benefit from mutex protection to a single section of
systemReady() and wrapped it up with a lock while I was at it.

Bug: 7723944
Change-Id: I51d480e2781622c3a14769c3a2019a2407dcfd8a
/frameworks/base/services/java/com/android/server/LocationManagerService.java
0a19ad089ad93740debc52c122726507e4517ccb 05-Dec-2012 Victoria Lease <violets@google.com> Adjust update interval when expiring location requests.

This is a more complete solution for this issue that disables
location providers when expiring their last request *and* adjusts
update intervals when expiring any request. This should help
further limit battery drain when a high-frequency-update app
exits, as it allows the system to throttle the update interval
back down to something appropriate for the remaining listeners.

Bug: 7611837
Change-Id: I88b419c92940b7e536d48b26e5fc0f72f3c9e73d
/frameworks/base/services/java/com/android/server/LocationManagerService.java
8b38b29b5213c429d1e9802d02549b5638f40706 05-Dec-2012 Victoria Lease <violets@google.com> Notify provider when disposing last UpdateRecord

Location providers were not being notified of the change in status
when the last UpdateRecord was removed due to numUpdates exhaustion
or request expiry. Oops! Enjoy some free battery life!

Bug: 7611837
Change-Id: Id48151eb7de40164258cde7da220a4d6bb34b89a
/frameworks/base/services/java/com/android/server/LocationManagerService.java
a6d0b6f8518c7ee110c907166d53a8d46ead97f1 27-Oct-2012 You Kim <you.kim72@gmail.com> Fix Wrong parameter in HashMap.remove

Change-Id: Ibf93833697c865904f29821e5778853127e5fb00
Signed-off-by: You Kim <you.kim72@gmail.com>

Conflicts:

services/java/com/android/server/LocationManagerService.java
/frameworks/base/services/java/com/android/server/LocationManagerService.java
6c5406acd72eed31f2b4e12f5eddc0e2d2a951e2 30-Nov-2012 Dianne Hackborn <hackbod@google.com> Maybe fix issue #7596986: Frequent runtime restarts; IAE at...

...android.os.Parcel.nativeAppendFrom(Native Method)

The failing stack trace is:

11-20 20:29:04.365 19154 19170 E AndroidRuntime: java.lang.IllegalArgumentException
11-20 20:29:04.365 19154 19170 E AndroidRuntime: at android.os.Parcel.nativeAppendFrom(Native Method)
11-20 20:29:04.365 19154 19170 E AndroidRuntime: at android.os.Parcel.appendFrom(Parcel.java:428)
11-20 20:29:04.365 19154 19170 E AndroidRuntime: at android.os.Bundle.writeToParcel(Bundle.java:1613)
11-20 20:29:04.365 19154 19170 E AndroidRuntime: at android.os.Parcel.writeBundle(Parcel.java:605)
11-20 20:29:04.365 19154 19170 E AndroidRuntime: at android.location.Location.writeToParcel(Location.java:903)
11-20 20:29:04.365 19154 19170 E AndroidRuntime: at android.os.Parcel.writeParcelable(Parcel.java:1254)
11-20 20:29:04.365 19154 19170 E AndroidRuntime: at android.os.Parcel.writeValue(Parcel.java:1173)
11-20 20:29:04.365 19154 19170 E AndroidRuntime: at android.os.Parcel.writeMapInternal(Parcel.java:591)
11-20 20:29:04.365 19154 19170 E AndroidRuntime: at android.os.Bundle.writeToParcel(Bundle.java:1619)
11-20 20:29:04.365 19154 19170 E AndroidRuntime: at android.os.Parcel.writeBundle(Parcel.java:605)
11-20 20:29:04.365 19154 19170 E AndroidRuntime: at android.location.Location.writeToParcel(Location.java:903)
11-20 20:29:04.365 19154 19170 E AndroidRuntime: at android.os.Parcel.writeParcelable(Parcel.java:1254)
11-20 20:29:04.365 19154 19170 E AndroidRuntime: at android.os.Parcel.writeValue(Parcel.java:1173)
11-20 20:29:04.365 19154 19170 E AndroidRuntime: at android.os.Parcel.writeMapInternal(Parcel.java:591)
11-20 20:29:04.365 19154 19170 E AndroidRuntime: at android.os.Bundle.writeToParcel(Bundle.java:1619)
11-20 20:29:04.365 19154 19170 E AndroidRuntime: at android.os.Parcel.writeBundle(Parcel.java:605)
11-20 20:29:04.365 19154 19170 E AndroidRuntime: at android.content.Intent.writeToParcel(Intent.java:6660)
11-20 20:29:04.365 19154 19170 E AndroidRuntime: at android.app.ApplicationThreadProxy.scheduleReceiver(ApplicationThreadNative.java:763)
11-20 20:29:04.365 19154 19170 E AndroidRuntime: at com.android.server.am.BroadcastQueue.processCurBroadcastLocked(BroadcastQueue.java:230)
11-20 20:29:04.365 19154 19170 E AndroidRuntime: at com.android.server.am.BroadcastQueue.processNextBroadcast(BroadcastQueue.java:777)

This is odd because where we do Bundle.writeToParcel(), we are just writing the Parcel
we have with its current length. There is no way this should be able to fail like this...
unless the Bundle is changed while we are running?

Hm.

It looks like the location manager is holding on to Location objects which have a
Bundle of extras. It is that Bundle of extras that the crash is happening on.
And the bundle extras can be changed as it operates. And there are places where
the raw Location object is returned from the location manager, which means the
caller can be olding on to a Location object whose extras can be changed at any
time by other threads in the location manager.

So that seem suspicious.

This change should take care of all these places in the location manager, by
making sure to copy the location object before it goes out of the location
manager.

In addition, add some code to the activity manager to not bring down the entire
system if there is a problem trying to send one of these broadcasts. There is
no need, we can just skip the broadcast as bad.

Change-Id: I3043c1e06f9d2931a367f831b6a970d71b0d0621
/frameworks/base/services/java/com/android/server/LocationManagerService.java
61ecb02f544d9abd098506afb50cb514818f4eb4 14-Nov-2012 Victoria Lease <violets@google.com> Resolve LocationManager + ActivityManager conflict

LocationManagerService was serially stuffing the same Location into
multiple Intents, which it would immediately hand off to
ActivityManagerService, running as a different thread in the same
process. LocationManager would continue to work with that Location
while ActivityManagerService worked with a Parceled version of it.

However, Location.mExtras is also a Bundle, and both
ActivityManagerService and LocationManagerService ended up working
with references to the same Bundle. ActivityManagerService needs
it in Parceled form (ie mParceledData != null), but
LocationManagerService was triggering Bundle.unparcel() when
referencing the data contained within.

As a result, LocationManagerService was able to trigger NPE (or
worse) in ActivityManagerService by manipulating the mExtras
member of a Location that was in the process of being reported to
listeners.

To resolve this issue, I copy-construct a new Location to report to
each listener. This should prevent ActivityManagerService and
LocationManagerService from referencing the same Bundle data, as
Location's copy constructor also copyconstructs the mExtras member,
rather than simply share references.

Bug: 7518371
Change-Id: I1a92615cba361831494447d5de085a8d910b6b2c
/frameworks/base/services/java/com/android/server/LocationManagerService.java
7ff30113de68539ec840c524b8f1561f938f96c5 08-Nov-2012 Dianne Hackborn <hackbod@google.com> Remove extraneous logs.

Change-Id: I4c47d36748de91bd6fddc419afbf59552bf63e9a
/frameworks/base/services/java/com/android/server/LocationManagerService.java
56e675b3a1c351de34de68a149762d3ad1b308c5 06-Nov-2012 Victoria Lease <violets@google.com> disable geofences for secondary users

Geofences are broken in multiuser, and need to be fixed before
reenabling the feature for secondary users.

Change-Id: Ief3008a294deed47760ee25efcf1cdef5371b038
/frameworks/base/services/java/com/android/server/LocationManagerService.java
75defb6f8840dcd2aaf866a5df9d689413fbe433 02-Nov-2012 Laurent Tu <laurentt@google.com> Decrement number of updates in LocationRequest

Decrement the number of updates after a location fix has been sent to a
a listener. This is necessary for respecting calls such as
requestSingleUpdate().

Bug: 7460868
Change-Id: Iea207ab494b93b936ca434d59652bb2cb6404cef
/frameworks/base/services/java/com/android/server/LocationManagerService.java
269518e83efc01b387235d6194dcf93726e384ff 29-Oct-2012 Victoria Lease <violets@google.com> Revert "make FLP play nicely with multiuser"

This reverts commit e5601ce9bfa4effbddb84186f0fe1bfe4ad50301

Change-Id: Icd12f2d2c18f2eeeb2c367a885fb6d170ce426ae
/frameworks/base/services/java/com/android/server/LocationManagerService.java
e5601ce9bfa4effbddb84186f0fe1bfe4ad50301 26-Oct-2012 Victoria Lease <violets@google.com> make FLP play nicely with multiuser

Frameworks' FusedLocationProvider runs as a specific user so that it
can join a specific process. The solution that works for NLP, run one
copy per user as that user, does not work for FLP.

To make FLP play nicely with multiuser, I've allowed SYSTEM_UID to
operate in the background and included a hardcoded exception to
prevent ServiceWatcher from trying to launch one FLP per user.

Bug: 7279799
Change-Id: I573ea5226d8d00777421b39c5c3fb0899bf09b4d
/frameworks/base/services/java/com/android/server/LocationManagerService.java
e09aed49e3498c9e0f3545ab97f816233d5eac66 18-Oct-2012 Jeff Hamilton <jham@android.com> Merge "Changes to support updating location providers." into jb-mr1-dev
37425c3475877f2fdadb78f669ec57fecf82dca7 17-Oct-2012 Victoria Lease <violets@google.com> LocationManager permissions cleanup

This commit is the result of a comprehensive permissions review for
MR1 release. It addresses a number of deviations from spec and from
MR0's behavior, bringing MR1 into sync with both.

It also cleans up the concept of "location resolution permission",
representing it internally as an enumerated access level to reduce
reliance on cumbersome string manipulation. There's a function to
convert the enum int into a permission string where needed, too.

Additionally, this confines caller-identity-sensitive calls to the
hopefully-obviously-named "getCallerAllowedResolutionLevel()". This
should make it much easier to prove correctness with respect to
accidentally calling functions that depend upon the caller's identity
after identity has already been shed by Binder.clearCallingIdentity().

Change-Id: I446169aee8fb2fde26ac6d04b479b40253782acb
/frameworks/base/services/java/com/android/server/LocationManagerService.java
fbadb69978be578cea9d2bf038de7c79b0787e4f 05-Oct-2012 Jeff Hamilton <jham@android.com> Changes to support updating location providers.

This reverts commit 20de160ca32a8f2936a80ffd70551a22e2371d25.

Bug: 7242814
Change-Id: I9ec49a14feb835b6683186fc6da4a74ae19fbae2
/frameworks/base/services/java/com/android/server/LocationManagerService.java
b7f9d254978b285bf04613f6e69a1afa89240ca9 16-Oct-2012 Laurent Tu <laurentt@google.com> Handle unknown case in LocationManager.getProvider

If a provider is unknown, return null in
LocationManagerService.getProviderProperties() instead of throwing a
security exception, so that LocationManager.getProvider() returns null
in this case, as specified by the javadoc.

Bug: 7359960
Change-Id: I1b8b74745f66717a3439a1d353a46a23272cc313
/frameworks/base/services/java/com/android/server/LocationManagerService.java
da479c5f8c9675dc11b3d6c4024749064d54bb67 16-Oct-2012 Victoria Lease <violets@google.com> fix crashing apps

Bug: 7349330
Change-Id: Iea61bce23cb197c7a28d574098253823df73a99b
/frameworks/base/services/java/com/android/server/LocationManagerService.java
a8a6b0848d1c11c3ed0fcb846e3d6c39b91536a0 10-Oct-2012 Kenny Root <kroot@google.com> Merge "Add fused location provider to real provider list" into jb-mr1-dev
c3575188c2f2ad27b1f03b9b9c0705a686a5e42f 09-Oct-2012 Kenny Root <kroot@google.com> Add fused location provider to real provider list

During testing it's possible to mock a location provider, but the fused
location provider wasn't being inserted into the "mRealProviders" map so
when the fused location provider was unmocked, it would disappear
permanently from the list until the next reboot.

Bug: 6949478
Change-Id: I4993aa7fbbd21cea16bdbf2722d637c909b1cd73
/frameworks/base/services/java/com/android/server/LocationManagerService.java
c0c0c0e612e1ccf1e55eb2a9338ddfff40d8d7f2 09-Oct-2012 Victoria Lease <violets@google.com> Merge "Multiuser love for LocationManager" into jb-mr1-dev
b711d57ca4e2c6a1befbfa1a41f4b8094755a93f 02-Oct-2012 Victoria Lease <violets@google.com> Multiuser love for LocationManager

LocationManagerService now keeps track of the current user ID and
denies location requests made by all but the foreground user.

Additionally, location settings are now user-specific, rather than
global to the device. Location provider services now run as specific
users, and when the device's foreground user changes, we rebind to
appropriately-owned providers.

Bug: 6926385
Bug: 7247203
Change-Id: I346074959e96e52bcc77eeb188dffe322b690879
/frameworks/base/services/java/com/android/server/LocationManagerService.java
20de160ca32a8f2936a80ffd70551a22e2371d25 05-Oct-2012 Jeff Hamilton <jham@android.com> Revert "Changes to support updating location providers."

This reverts commit c19efc204aee1f0f3164dc21bd2ef3fdd4259c71.
/frameworks/base/services/java/com/android/server/LocationManagerService.java
82b946496e2a503b5b21af318af5be828a223a44 05-Oct-2012 Jeff Hamilton <jham@android.com> Merge "Changes to support updating location providers." into jb-mr1-dev
60ec50a850ac7265b662df3c872583b6ef581ef8 05-Oct-2012 Laurent Tu <laurentt@google.com> Last position improvements for GeofenceManager

Use LocationManager.getLastPosition() in GeofenceManager instead of
keeping track of it manually. Keeping track of it in GeofenceManager
doesn't handle the case where we install a fence, and cross it just
after that based on the last position before we installed the fence.

Also shuffle around some code in LocationManagerService to remember the
last position even if there are no UpdateRecords. This is useful in the
GeofenceManager for example.

Bug: 7047435
Change-Id: Ia8acc32e357ecc2e1bd689432a5beb1ea7dcd1c7
/frameworks/base/services/java/com/android/server/LocationManagerService.java
dfc8e799ed7500c1a07d4ba1f72e77d3de0f803a 05-Oct-2012 Victoria Lease <violets@google.com> Merge "Handle other providers in isAllowedProviderSafe()" into jb-mr1-dev
a9afaccf303da2b57a47ad16cca559e87e649d15 05-Oct-2012 Victoria Lease <violets@google.com> Merge "multiuser support for LocationBlacklist" into jb-mr1-dev
941221c1577a34c922c03b30be7ef0a4afda4278 04-Oct-2012 Laurent Tu <laurentt@google.com> Handle other providers in isAllowedProviderSafe()

Add a case for isAllowedProviderSafe() to handle providers that are not
GPS/Passive/Network/Fused. For example, this is useful for mock
providers.

Bug: 7047435
Change-Id: If4799aa90a5338889c47582d45cbfc25772c9c53
/frameworks/base/services/java/com/android/server/LocationManagerService.java
18c2b6e730f6d639421e45328f4fb2514683efe5 04-Oct-2012 Victoria Lease <violets@google.com> Merge "throw SecurityException in isProviderEnabled()" into jb-mr1-dev
83762d22c9bde92d412cf5a263a228d705606721 03-Oct-2012 Victoria Lease <violets@google.com> multiuser support for LocationBlacklist

This allows primary/secondary users to have different "Google
Location Services" preferences. It also reenables LocationBlacklist,
which is fixed elsewhere.

Bug: 7213502
Bug: 7248239
Change-Id: I94837682f95920c225c00b7da2de6dd1418a673e
/frameworks/base/services/java/com/android/server/LocationManagerService.java
c19efc204aee1f0f3164dc21bd2ef3fdd4259c71 03-Oct-2012 Jeff Hamilton <jham@android.com> Changes to support updating location providers.

There is now only a single config value pointing
at a list of packages to get certs from. The old
system was a bit confusing.

The fused location provider also now builds
against SDK 17, and the meta data service version
tag was renamed from the overly generic "version"
to "serviceVersion".

Bug: 7242814
Change-Id: I00d27c9cbd5cc31a37bb4a98160435d15a72e19e
/frameworks/base/services/java/com/android/server/LocationManagerService.java
f429921e3a8b171771e268f23fc3fa909d791441 04-Oct-2012 Victoria Lease <violets@google.com> throw SecurityException in isProviderEnabled()

In MR0, we did not allow applications to query enabled status of
location providers they did not have permission to use. Some
applications counted on this behavior, using the thrown
SecurityException to determine whether or not they have permission
to use the specified provider.

Reverting to this behavior fixes the regressions seen in those
applications.

Bug: 7251459
Change-Id: I8b0cfd5862c80f0c831a4ab544c3fa7408bc84a0
/frameworks/base/services/java/com/android/server/LocationManagerService.java
0d21e2161f8542db0a54bf80b74b7fd33afef6f6 03-Oct-2012 Laurent Tu <laurentt@google.com> Remove checkPermission() call in getAllProviders().

getAllProviders() should return all locators, including those not
allowed or not enabled (according to the existing javadoc, at least).
The checkPermission() call prevented this behavior by throwing a
security exception. We restore the previous behavior by removing the
call.

Bug: 6950369

Change-Id: I0c6bc676d4c4db482bb68f1ab7fa5c93675118b4
/frameworks/base/services/java/com/android/server/LocationManagerService.java
3750db176adbaf3f9779df5eadf335f673b2ac4f 02-Oct-2012 Victoria Lease <violets@google.com> Merge "Route GPS notifications to all users." into jb-mr1-dev
5c24fd03426db58b63e1a792c2595447cb722d46 01-Oct-2012 Victoria Lease <violets@google.com> Avoid NPE in GpsLocationProvider

Oops, looks like we were spinning up a secondary thread to run some
tasks that will just happen on the main thread regardless. Removed
the secondary thread and fixed up initialisation order regarding
mHandler and things that post to it. Also reordered GPS and
PASSIVE provider initialisation order since GPS depends on PASSIVE.

This should be both safer and easier to read.

Bug: 7248029
Change-Id: I8630caf0a7bd1b2c401603075676f13dda5be4fa
/frameworks/base/services/java/com/android/server/LocationManagerService.java
38389b6cf7bd2ef49d2bd20ff1bca8677596590e 30-Sep-2012 Victoria Lease <violets@google.com> Route GPS notifications to all users.

This takes the easy way around notifying the correct users
about GPS state transitions by notifying ALL the users(!).

I've also laid groundwork for proper multiuser support in
LocationManager and did a tiny bit of cleanup in
GpsNetInitiatedHandler while I was looking at notifications.

Bug: 7213552
Change-Id: I2d6dc65c459e55d110ac0f5f79ae7a87ad638ede
/frameworks/base/services/java/com/android/server/LocationManagerService.java
4118012da9a22694b3353040a485f8cdc27e2f17 26-Sep-2012 Philip Milne <pmilne@google.com> Fix for bug: #7173350. elapsedRealtimeNano() -> elapsedRealtimeNanos()

Change-Id: Ie38952bbaace080e81e41e61350cda172951d548
/frameworks/base/services/java/com/android/server/LocationManagerService.java
72a374705d32cf715443aa203f75c159e1bc9bd5 26-Sep-2012 Victoria Lease <violets@google.com> Merge "getBestProvider() prefers GPS over NLP" into jb-mr1-dev
1925e290e7ac2801311cb4e732d1bc5a5f3e0c44 25-Sep-2012 Victoria Lease <violets@google.com> getBestProvider() prefers GPS over NLP

Preferring the GPS location provider over NLP should produce better
average and worst-case results than NLP, which is very accurate in
certain conditions and completely useless in others.

Bug: 7182301
Change-Id: If7d50f0d3ac663cbfd84b7033adc204c11bcaca4
/frameworks/base/services/java/com/android/server/LocationManagerService.java
8658e1aa1fb0905852c4b0f5ae1d96cd2d56b6cf 24-Sep-2012 Victoria Lease <violets@google.com> Merge "Allow apps to getProviders() without location permissions." into jb-mr1-dev
8dbb63419bef8678cf92ebae1d43f549f50987c7 22-Sep-2012 Victoria Lease <violets@google.com> Allow apps to getProviders() without location permissions.

This restores MR0's behavior in this regard - apps calling
LocationManager.getProviders() or LocationManager.getBestProvider()
will no longer receive a SecurityException if they do not have
any location permissions. Instead, as was the behavior in MR0, they
only receive providers that their permissions grant them access to,
including an empty list if they have no permission whatsoever.

Bug: 7207864
Change-Id: I027df425e258d436c4821c34a25bc46a2a292824
/frameworks/base/services/java/com/android/server/LocationManagerService.java
09016ab4dd056a16809419d612cb865a14980880 16-Sep-2012 Victoria Lease <violets@google.com> Do not use passive GPS data for COARSE only apps.

FusionEngine now attaches a secondary location that has never seen
GPS data to its result. LocationFudger uses the GPS-less location so
that COARSE apps never see data from the GPS provider.

When the previous location is updated, the previous GPS-less location
is carried over if the location update was GPS-only.

Additionally, apps without FINE permission are not notified when GPS
location changes, and any attempt to use GPS_PROVIDER without FINE
permission is met by a stern SecurityException.

Bug: 7153659
Change-Id: I12f26725782892038ce1133561e1908d91378a4a
/frameworks/base/services/java/com/android/server/LocationManagerService.java
4fab68b5324e1f9b6765cdc33e66d1f074623dc2 13-Sep-2012 Victoria Lease <violets@google.com> Require ACCESS_FINE_LOCATION for Geofence use.

Bug: 7153226
Change-Id: I49236379e739fcda66bbc9a31cfdca9a87122aec
/frameworks/base/services/java/com/android/server/LocationManagerService.java
df9ec6171f6b7f3075d7f8174e9ae6ecf080c917 12-Sep-2012 Victoria Lease <violets@google.com> Secure setting for LocationFudger's accuracy

This replaces the ACCURACY_METERS constant and all derived values with
a secure setting. This value defaults to 2km and has a hardcoded floor
of 500m.

Bug: 6982024
Change-Id: Ibf97ab57145abf28c4a9747444f40250adddf23c
/frameworks/base/services/java/com/android/server/LocationManagerService.java
bb95cb9f997afc34d54f3d5bcb247c44f368b62b 29-Aug-2012 Brian Muramatsu <btmura@google.com> Fix GPS settings change listener in LocManager

Bug 7051185

- Register a ContentObserver to track settings changes rather than
opening up a Cursor with a ContentQueryMap.

- Move updateProvidersLocked into init to assure that the
ContentObserver does not miss any changes.

- Move blacklist and fudger creation before loadProvidersLocked to
improve code readability.

Change-Id: I4d3e19fa33401c384bc2b00658d4336ea119e0e5
/frameworks/base/services/java/com/android/server/LocationManagerService.java
5ac72a29593ab9a20337a2225df52bdf4754be02 30-Aug-2012 Dianne Hackborn <hackbod@google.com> Improve multi-user broadcasts.

You can now use ALL and CURRENT when sending broadcasts, to specify
where the broadcast goes.

Sticky broadcasts are now correctly separated per user, and registered
receivers are filtered based on the requested target user.

New Context APIs for more kinds of sending broadcasts as users.

Updating a bunch of system code that sends broadcasts to explicitly
specify which user the broadcast goes to.

Made a single version of the code for interpreting the requested
target user ID that all entries to activity manager (start activity,
send broadcast, start service) use.

Change-Id: Ie29f02dd5242ef8c8fa56c54593a315cd2574e1c
/frameworks/base/services/java/com/android/server/LocationManagerService.java
595dda6d47a4eeeffc32abbfbc55edfba588d846 24-Aug-2012 Brian Muramatsu <btmura@google.com> Remove unused IntentFilter in LocationManager

This intent filter isn't used anymore, since GpsLocationProvider handles
the CONNECTIVITY_ACTION broadcasts now..

Change-Id: I593a9916aa6f8086b4d684cc3e25286c1cb137cc
/frameworks/base/services/java/com/android/server/LocationManagerService.java
1332b53522e281012fefb34bfbcc68a03028f516 22-Aug-2012 Nick Pelly <npelly@google.com> Fix some location issues exposed by CTS.

Change-Id: I5859ee2c9db5745b0a3bc8abfa8f08728fb25059
/frameworks/base/services/java/com/android/server/LocationManagerService.java
2b7a0d00426218523629e4e8dd2e9197d445c09b 18-Aug-2012 Nick Pelly <npelly@google.com> Fix addGeofence() and addProximityAlert().

Need to clear the callers identity before calling into geofence manager
because it in turn calls fused location API's.

Change-Id: I7993b0b8b2a947ff93c37a7c9d29ca0e7c95f9a8
/frameworks/base/services/java/com/android/server/LocationManagerService.java
4035f5a7c191a68bc9a5912ce44c43c82e9e5dbf 17-Aug-2012 Nick Pelly <npelly@google.com> Port location blacklist code to MR1.

I had to re-do this change for MR1 because LocationManagerService changed
so much. Here is the original change description:

Add package-name-prefix blacklist for location updates.

The Settings.Secure value locationPackagePrefixBlacklist and
locationPackagePrefixWhitelist contains comma seperated package-name
prefixes.

Location & geo-fence updates are silently dropped if the receiving
package name has a prefix on the blacklist. Status updates are
not affected. All other API's work as before.

A content observer is used so run-time updates to the blacklist
apply immediately. There is both a blacklist and a whitelist.
The blacklist applies first, and then exemptions are allowed
from the whitelist. In other words, if your package name prefix
matches both the black AND white list, then it is allowed.

Bug: 6986553
Change-Id: I1e151e08bd7143e47db005bc3fe9795076398df7
/frameworks/base/services/java/com/android/server/LocationManagerService.java
4e31c4fffbc42b4c2b5dca6431cfeef9e078f5b4 14-Aug-2012 Nick Pelly <npelly@google.com> Add javadoc for new location API's.

Change-Id: If15024ee88421c07ba3a174747774fc451fd002e
/frameworks/base/services/java/com/android/server/LocationManagerService.java
74fa7eabda3d0c1a85e0b568e3fc4230ed4fe7a4 14-Aug-2012 Nick Pelly <npelly@google.com> Improve coarse locations.

Fix a couple of bugs, and modify the behavior of the random offset.

The random offset now slowly changes over time, to mitigate against
applications averaging out the offset over time while at a
grid boundary.

Change-Id: Iecffff29145b8c2b30d1eca1662cf9d3e8cff756
/frameworks/base/services/java/com/android/server/LocationManagerService.java
08ca1046fe4f1890f91241f8d082a024ef6cfd93 11-Aug-2012 Nick Pelly <npelly@google.com> Fix a couple of bugs from the location overhaul.

Marshall LocationRequest array correctly.

Observe reportLocation from FusionEngine.

Actually deliver the setRequest message to fusion engine.

Change-Id: Iff64596fdd42f9fb06e563591dda9fbe0241533a
/frameworks/base/services/java/com/android/server/LocationManagerService.java
6fa9ad4afcd762aea519ff61811386c23d18ddb2 16-Jul-2012 Nick Pelly <npelly@google.com> Location overhaul, major commit.

Themes: Fused Location, Geofencing, LocationRequest.

API changes
o Fused location is always returned when asking for location by Criteria.
o Fused location is never returned as a LocationProvider object, nor returned
as a provider String. This wouldn't make sense because the current API
design assumes that LocationProvider's have fixed properties (accuracy, power
etc).
o The fused location engine will tune itself based on the criteria passed
by applications.
o Deprecate LocationProvider. Apps should use fused location (via Criteria
class), instead of enumerating through LocationProvider objects. It is
also over-engineered: designed for a world with a plethora of location
providers that never materialized.
o The Criteria class is also over-engineered, with many methods that aren't
currently used, but for now we won't deprecate them since they may have
value in the future. It is now used to tune the fused location engine.
o Deprecate getBestProvider() and getProvider().
o Add getLastKnownLocation(Criteria), so we can return last known
fused locations.
o Apps with only ACCESS_COARSE_LOCATION _can_ now use the GPS, but the location
they receive will be fudged to a 1km radius. They can also use NETWORK
and fused locatoins, which are fudged in the same way if necessary.
o Totally deprecate Criteria, in favor of LocationRequest.
Criteria was designed to map QOS to a location provider. What we
really need is to map QOS to _locations_.
The death knell was the conflicting ACCURACY_ constants on
Criteria, with values 1, 2, 3, 1, 2. Yes not a typo.
o Totally deprecate LocationProvider.
o Deprecate test/mock provider support. They require a named provider,
which is a concept we are moving away from. We do not yet have a
replacement, but I think its ok to deprecate since you also
need to have 'allow mock locations' checked in developer settings.
They will continue to work.
o Deprecate event codes associated with provider status. The fused
provider is _always_ available.
o Introduce Geofence data object to provide an easier path fowards
for polygons etc.

Implementation changes
o Fused implementation: incoming (GPS and NLP) location fixes are given
a weight, that exponentially decays with respect to age and accuracy.
The half-life of age is ~60 seconds, and the half-life of accuracy is
~20 meters. The fixes are weighted and combined to output a fused
location.
o Move Fused Location impl into
frameworks/base/packages/FusedLocation
o Refactor Fused Location behind the IProvider AIDL interface. This allow us
to distribute newer versions of Fused Location in a new APK, at run-time.
o Introduce ServiceWatcher.java, to refactor code used for run-time upgrades of
Fused Location, and the NLP.
o Fused Location is by default run in the system server (but can be moved to
any process or pacakge, even at run-time).
o Plumb the Criteria requirements through to the Fused Location provider via
ILocation.sendExtraCommand(). I re-used this interface to avoid modifying the
ILocation interface, which would have broken run-time upgradability of the
NLP.
o Switch the geofence manager to using fused location.
o Clean up 'adb shell dumpsys location' output.
o Introduce config_locationProviderPackageNames and
config_overlay_locationProviderPackageNames to configure the default
and overlay package names for Geocoder, NLP and FLP.
o Lots of misc cleanup.
o Improve location fudging. Apply random vector then quantize.
o Hide internal POJO's from clients of com.android.location.provider.jar
(NLP and FLP). Introduce wrappers ProviderRequestUnbundled and
ProviderPropertiesUnbundled.
o Introduce ProviderProperties to collapse all the provider accuracy/
bearing/altitude/power plumbing (that is deprecated anyway).
o DELETE lots of code: DummyLocationProvider,
o Rename the (internal) LocationProvider to LocationProviderBase.
o Plumb pid, uid and packageName throughout
LocationManagerService#Receiver to support future features.

TODO: The FLP and Geofencer have a lot of room to be more intelligent
TODO: Documentation
TODO: test test test

Change-Id: Iacefd2f176ed40ce1e23b090a164792aa8819c55
/frameworks/base/services/java/com/android/server/LocationManagerService.java
821bd8081a3a02de946af7a5c2ab52cdc3e48c4e 03-Aug-2012 Jeff Sharkey <jsharkey@android.com> Pass changed NetworkInfo to LocationProvider.

LocationProviders often rely on non-default networks, so pass the
network that actually changed, instead of the default.

Bug: 6929692
Change-Id: I31d9eec792e07259282aa1bb57ec66c01962df64
/frameworks/base/services/java/com/android/server/LocationManagerService.java
2eeeec248a38ff33999c83f4b8d5bab7d50e79d2 18-Jul-2012 Nick Pelly <npelly@google.com> Improve Location object.

Add getElapsedRealtimeNano():

Currently Location just has getTime() and setTime() based on UTC time.
This is entirely unreliable since it is not guaranteed monotonic.
There is a lot of code that compares fix age based on deltas -
and it is all broken in the case of a system clock change. System
clock can change when switching cellular networks (and in some
cases when switching towers).

Document the meaning of getAccuracy():
It is the horizontal, 95% confidence radius.

Make some fields mandatory if they are reported by a LocationProvider:

All Locations returned by a LocationProvider must include at the
minimum a lat, long, timestamps, and accuracy. This is necessary
to perform fused location. There are no public API's for applications
to feed locations into a location provider so this should not cause
any breakage.

If a LocationProvider does not fill in enough fields on a Location
object then it is dropped, and logged.

Bug: 4305998
Change-Id: I7df77125d8a64e174d7bc8c2708661b4f33461ea
/frameworks/base/services/java/com/android/server/LocationManagerService.java
e0fd693c6098f59004f9e96ad75c058e26c337b0 11-Jul-2012 Nick Pelly <npelly@google.com> Improve geofencing: throttle location updates with distance to fence.

Previously any geofence (proximity alert) would turn the GPS on at full rate.
Now, we modify the GPS interval with the distance to the nearest geofence.
A speed of 100m/s is assumed to calculate the next GPS update.

Also
o Major refactor of geofencing code, to make it easier to continue to improve.
o Discard proximity alerts when an app is removed.
o Misc cleanup of nearby code. There are other upcoming changes
that make this a good time for some house-keeping.

TODO:
The new geofencing heuristics are much better than before, but still
relatively naive. The next steps could be:
- Improve boundary detection
- Improve update thottling for large geofences
- Consider velocity when throttling

Change-Id: Ie6e23d2cb2b931eba5d2a2fc759543bb96e2f7d0
/frameworks/base/services/java/com/android/server/LocationManagerService.java
01ed75c82f29b883144d498b4a6a1414d4227a31 14-Jun-2012 Nick Pelly <npelly@google.com> Fix NPE when public API removeProximityAlert() used before addProximityAlert().

Bug: 6313992
Change-Id: I905ad9ea771286727ce4a3a2334f2a0dac967c3d
/frameworks/base/services/java/com/android/server/LocationManagerService.java
00355d5a592533a3ecb0a5a74aef8e69dd16902a 28-May-2012 Nick Pelly <npelly@google.com> Make location providers upgradeable.

Use config_netowrkLocationProviderPackageName and
config_geocodeProviderPackageName as intial packages. If another
package exists (or is later installed) that also implements a
provider, and has the same signatures as the original providers,
and has a hgiher version number, then use that instead.

The old code used a funky fix of package name substring checks
and service checks that was broken and not upgradeable.

Bug: 6499445
Change-Id: Ic58f09cf85d31d9abf47707093e22f31dda25cf0
/frameworks/base/services/java/com/android/server/LocationManagerService.java
f1be6861daea57ba0a1595739a899d05229d6d15 15-May-2012 Nick Pelly <npelly@google.com> Enforce the minTime parameter in LocationManager#requestLocationUpdates

There is a long history in Android, on both GED and non GED devices
of GPS providers ignoring the minTime parameter making location updates
every second. The problem is usually poor GPS drivers that claim to
do scheduling but then do not.

By making the minTime parameter strict (instead of a hint) we can add
a CTS test to ensure that udpates to not occur too frequently. I believe
this is the desired behavior from apps. If apps want to take advantage
of more frequent updates when another application asks for those updates
then it can use the passive provider.

The CTS test for GPS has already been submitted (as part of CTS Verifier).

Bug: 6424983
Change-Id: I163b9e44ea7ab71530b86fc2282614e0150e90f1
/frameworks/base/services/java/com/android/server/LocationManagerService.java
6e4cb6a93b1a1b6970862d21769d14c9e583dd59 04-May-2012 Nick Pelly <npelly@google.com> Log PID of apps requesting location updates.

BUG=6444765

Change-Id: Ib948b8fddb99f95f63486fbc096a26609c1a6c21
/frameworks/base/services/java/com/android/server/LocationManagerService.java
d0d7503fd3e941113094532f28986f49b11b5fdb 20-Apr-2012 Dianne Hackborn <hackbod@google.com> Move handling of package changes to a background thread.

Helps get rid of some jank when installing applications.

Change-Id: I97d0022f82d67796e334d37086e5911dd6ca6b62
/frameworks/base/services/java/com/android/server/LocationManagerService.java
5e61331da59921413a8e2a144146a8451a054020 30-Jan-2012 Jeff Sharkey <jsharkey@android.com> Move away from deprecated NetworkInfo extra.

Because the NetworkInfo included in CONNECTIVITY_ACTION broadcast
extra does not reflect the state applicable to the calling UID, and
the last sticky broadcast may have stale state, transition to calling
ConnectivityManager.getActiveNetworkInfo() directly.

Change-Id: I86b316fbedd0273585ad5f1248b091bc3a3a5520
/frameworks/base/services/java/com/android/server/LocationManagerService.java
6c418d585e0a91054b168fde3130188afd006c98 29-Jun-2011 Dianne Hackborn <hackbod@google.com> Fix issue #4902856: Don't let apps register non-explicit PendingIntents

Location manager now checks for such intents, and logs a warning when
they are given to it. Nothing thrown yet, it needs to check the
targetSdkVersion of the caller somehow.

When sending the pending intent, we require that the recipient hold the
appropriate permission. This should pretty much close the security hole.

Includes a bunch of infrastructure in the activity manager needed to
support all this.

Change-Id: I4dba7a98a7b8bbb9e347666451aa9cb1efad1848
/frameworks/base/services/java/com/android/server/LocationManagerService.java
1ebe049acc50c291729148e66438ba53e7bf951a 26-Oct-2010 Mike Lockwood <lockwood@android.com> am 1b571bd3: am 1d28a840: Merge "Location Manager: Fix LocationManager.getBestProvider filtering." into gingerbread
9e3191d16c025b44fb4a614b13e1c5b8488eb574 26-Oct-2010 Mike Lockwood <lockwood@android.com> Location Manager: Fix LocationManager.getBestProvider filtering.

getBestProvider should only return location providers that the client
has permission to use.

BUG: 3124614

Change-Id: I065091d0445092563bc53fb4f7d93a1ab6bebb9a
Signed-off-by: Mike Lockwood <lockwood@android.com>
/frameworks/base/services/java/com/android/server/LocationManagerService.java
8fa50d4f2ddec9bd22436e41eb1dd8dd83a2a039 25-Oct-2010 Mike Lockwood <lockwood@android.com> am 6c8d8d89: am 8c32bddf: Merge "GPS: Disable verbose logging" into gingerbread

Merge commit '6c8d8d8927373fdb9ad1c853396b5dbc8295f996'

* commit '6c8d8d8927373fdb9ad1c853396b5dbc8295f996':
GPS: Disable verbose logging
4a7b65e0d544ef1feff8e1e5789f469f89ebb85c 25-Oct-2010 Mike Lockwood <lockwood@android.com> GPS: Disable verbose logging

BUG: 3127049

Change-Id: I9efd9eb7ff69724b133f3b70c52e173f49ddfbc5
Signed-off-by: Mike Lockwood <lockwood@android.com>
/frameworks/base/services/java/com/android/server/LocationManagerService.java
dd074306e1a3847416fdb284bcf8ae7ba92aaf7e 19-Oct-2010 Mike Lockwood <lockwood@google.com> am 11eada78: am ba2ec2b4: Merge "Enable framework GPS and location manager logging" into gingerbread

Merge commit '11eada780dc82fcac2a1dad4e2dde1d310b4231c'

* commit '11eada780dc82fcac2a1dad4e2dde1d310b4231c':
Enable framework GPS and location manager logging
2d4d1bf14b531de9d4238b1e41b53c77f8976405 18-Oct-2010 Mike Lockwood <lockwood@google.com> Enable framework GPS and location manager logging

Change-Id: Id54fc01e7288e7d90d7b76824b708bcb2ee88333
Signed-off-by: Mike Lockwood <lockwood@google.com>
/frameworks/base/services/java/com/android/server/LocationManagerService.java
ca936f1661a1cd3ccf45343e0453bc942fb94aeb 11-Oct-2010 Mike Lockwood <lockwood@google.com> am 98e1f384: am aecab79b: Merge "Remove races in Geocoder/LocationProvider Proxy" into gingerbread

Merge commit '98e1f3840f06d3dfea987154da25d5351460d080'

* commit '98e1f3840f06d3dfea987154da25d5351460d080':
Remove races in Geocoder/LocationProvider Proxy
8863c43d9efda108c880814b0a18688b75d70153 04-Oct-2010 Mark Vandevoorde <mtv@google.com> Remove races in Geocoder/LocationProvider Proxy

The proxy must ensure that enable/disable calls are not reordered when
proxied; this change adds synchronization to prevent such reordering
that could happen following an onServiceConnected() callback, and to
ensure cross-thread visibility of writes.

Also, when the package is updated, the old service instance must be
unbound and the new one bound. This changes uses a separate
Connection object per service instance (package version) to avoid
confusing the binder objects.

Change-Id: I0907f7eed211b97ccfffa395754f1eb8ea8d8fec
/frameworks/base/services/java/com/android/server/LocationManagerService.java
5972e52e15e075e40dfcdc3ffaed1b7c4e2afac1 01-Oct-2010 Mike Lockwood <lockwood@android.com> resolved conflicts for merge of 53b07027 to master

Change-Id: Ia5ce86d84454a4be76e71aeb77942ba8d88d2700
e97ae40dffe7d7f8917c51c4f3f6c1b18c238565 29-Sep-2010 Mike Lockwood <lockwood@android.com> location: rebind to network location and geocoder services after package update

Change-Id: I2d7db3512b9edd7e0ba27d97442967fc2278e3b9
Signed-off-by: Mike Lockwood <lockwood@android.com>
/frameworks/base/services/java/com/android/server/LocationManagerService.java
537ce32c71284f7bef40371778926f34d41f277e 21-Sep-2010 Mike Lockwood <lockwood@android.com> am 24956d36: am 307aef01: Merge "LocationManager: Hide location provider and geocode provider APIs." into gingerbread

Merge commit '24956d36f46dd7be0b029a7b2b43c1020ae8a4c5'

* commit '24956d36f46dd7be0b029a7b2b43c1020ae8a4c5':
LocationManager: Hide location provider and geocode provider APIs.
e15735a9e0c0b1448b68f2d6b3247404fc1df417 20-Sep-2010 Mike Lockwood <lockwood@android.com> LocationManager: Hide location provider and geocode provider APIs.

Also rename Geocoder.isImplemented() to Geocoder.isPresent()

BUG: 3000738
BUG: 3001413

Change-Id: I56bb4e9a9c59f8b79de585eeb168f74c3ff1a853
Signed-off-by: Mike Lockwood <lockwood@android.com>
/frameworks/base/services/java/com/android/server/LocationManagerService.java
e746f03c6c8b8d0897d322ab524d545ace200fcd 14-Sep-2010 Dianne Hackborn <hackbod@google.com> resolved conflicts for merge of 53686433 to master

Change-Id: I27004dc464f5771d3205ae5757c6eccc5b16854d
7e9f4eb2608148436cef36c9969bf8a599b39e72 11-Sep-2010 Dianne Hackborn <hackbod@google.com> Track client requests through location manager.

This fixes a problem where applications could ask the location
manager to do very heavy-weight things (like... say... update
location every minute), which would get accounted against the
system instead of the application because ultimately it is the
system making the heavy calls (wake locks, etc).

To solve this, we introduce a new class WorkSource representing
the source of some work. Wake locks and Wifi locks allow you
to set the source to use (but only if you are system code and thus
can get the permission to do so), which is what will be reported
to the battery stats until the actual caller.

For the initial implementation, the location manager keeps track
of all clients requesting periodic updates, and tells its providers
about them as a WorkSource param when setting their min update time.
The network location provider uses this to set the source on the
wake and wifi locks it acquires, when doing work because of the
update period.

This should also be used elsewhere, such as in the GPS provider,
but this is a good start.

Change-Id: I2b6ffafad9e90ecf15d7c502e2db675fd52ae3cf
/frameworks/base/services/java/com/android/server/LocationManagerService.java
59e61354801b378c074b85f0dea0da62481298c9 28-Aug-2010 Brad Fitzpatrick <bradfitz@android.com> am d71021cb: am 0c731f99: Merge "Send broadcast intent when configured location providers change." into gingerbread

Merge commit 'd71021cb30bd20dabd6783f4235d5f245a7bd1a3'

* commit 'd71021cb30bd20dabd6783f4235d5f245a7bd1a3':
Send broadcast intent when configured location providers change.
0c5a04014d3833c9a82772a832d3bc6410fc52ac 27-Aug-2010 Brad Fitzpatrick <bradfitz@android.com> Send broadcast intent when configured location providers change.

See e.g. http://code.google.com/p/android/issues/detail?id=10042

This is also needed by the power control widget, which has no reliable
way otherwise of staying in-sync.

Change-Id: I8f2b6b79b1843329bae952a25ea56f15e3cf92aa
/frameworks/base/services/java/com/android/server/LocationManagerService.java
6181f39257ecd8a93b1c43ddef771734dfef8f49 19-Jul-2010 Adam Bliss <abliss@google.com> am 27ef0f73: am 9714d2c4: Merge "Don\'t throw an exception from isProviderEnabled and getLastKnownLocation" into gingerbread

Merge commit '27ef0f732c5a97ba88a699b7490045e5370cf51f'

* commit '27ef0f732c5a97ba88a699b7490045e5370cf51f':
Don't throw an exception from isProviderEnabled and getLastKnownLocation
f4d207b1c2212d6e9adc3e7954a8d14c6b9abc51 17-Jul-2010 Mike Lockwood <lockwood@android.com> Don't throw an exception from isProviderEnabled and getLastKnownLocation

if the location provider does not exist. Instead use the same behavior
as if the provider were disabled in settings
(return false for isProviderEnabled and null from getLastKnownLocation).
This eliminates for a lot of exception handling around some simple
queries to the location manager.

BUG: 2841014

Change-Id: I4fbe0c088e915c90969e13083201dd3e7f4029cb
Signed-off-by: Mike Lockwood <lockwood@android.com>
/frameworks/base/services/java/com/android/server/LocationManagerService.java
2b4140ef1b68a074611bfd33ac9d2ec2c2a1064a 24-May-2010 Mark Vandevoorde <mtv@google.com> am a5437f2d: am 88437284: Fix build error (Boolean -> boolean)
884372842bac11f854aa42a9c4de05a3a22cb11f 24-May-2010 Mark Vandevoorde <mtv@google.com> Fix build error (Boolean -> boolean)

Change-Id: I2f337e23f4b092de41523f1195546e9d65851c84
/frameworks/base/services/java/com/android/server/LocationManagerService.java
7df535b976226efdb1fa13a12bf6edcb96ee56e2 24-May-2010 Mike Lockwood <lockwood@google.com> am 749afee8: am 1e11e95f: Merge "Add Geocorder.isImplemented()" into kraken
01ac80b715881db22bde8b31633dd8a4dc375389 22-May-2010 Mark Vandevoorde <mtv@google.com> Add Geocorder.isImplemented()

The Geocorder interface is not part of the Android core. It
requires a backend service which may or may not be available
on a device. The new isImplemented static method allows
apps to discover whether the Geocorder is in fact available
on the device.

Change-Id: I2b5cf7bcc9cce4766bcbb156e91edf34b01f9296
/frameworks/base/services/java/com/android/server/LocationManagerService.java
4d252c484c62c685068b94278cbb68d8c5c8003f 21-May-2010 Mike Lockwood <lockwood@android.com> am dc0ca1d5: am 88262733: Merge "New Location Manager APIs for Criteria based requests and single shot mode." into kraken
03ca216ac19ea4e7afcb183c20c7c780f0d97756 01-Apr-2010 Mike Lockwood <lockwood@android.com> New Location Manager APIs for Criteria based requests and single shot mode.

Use MS-Assisted mode for single shot GPS fixes if it is supported.

Add finer grained control over accuracy to the android.location.Criteria class
and location criteria logic from LocationManager to LocationManagerService

Change-Id: I156b1f6c6a45d255c87ff917cf3e9726a6d7a75b
Signed-off-by: Mike Lockwood <lockwood@android.com>
/frameworks/base/services/java/com/android/server/LocationManagerService.java
105384e3603e5d324c5b74e1d2ec836f817fdc25 12-May-2010 Mike Lockwood <lockwood@android.com> am 4d0c3083: am c7c856fb: am d2084bb6: am e1d7dca6: Merge "LocationManagerService: Call updateNetworkState on providers that are disabled." into froyo
c7c856fb855cdf233077857b995594770515cf1b 12-May-2010 Mike Lockwood <lockwood@android.com> am d2084bb6: am e1d7dca6: Merge "LocationManagerService: Call updateNetworkState on providers that are disabled." into froyo

Merge commit 'd2084bb689bb680eb886d5cfbd27adc6f2e9da1c' into kraken

* commit 'd2084bb689bb680eb886d5cfbd27adc6f2e9da1c':
LocationManagerService: Call updateNetworkState on providers that are disabled.
f19a785e15d9ffa1c1e56c254af082fc87aa1f3c 11-May-2010 Mike Lockwood <lockwood@android.com> LocationManagerService: Call updateNetworkState on providers that are disabled.

Fixes a problem with Network Location not working after SetupWizard until the
network state changes.

Change-Id: Ief81b76beb5cc90b2ca7d8aa2d4c99221898f01d
BUG: 2671347

Signed-off-by: Mike Lockwood <lockwood@android.com>
/frameworks/base/services/java/com/android/server/LocationManagerService.java
00b74270c9f136a8727c5f6cda0997a3a905f385 26-Mar-2010 Mike Lockwood <lockwood@android.com> Move files internal to LocationManagerService from framework.jar to services.jar

Change-Id: Iebbfc49b8300ab59730733efdf489ec87ea45a25
Signed-off-by: Mike Lockwood <lockwood@android.com>
/frameworks/base/services/java/com/android/server/LocationManagerService.java
a03b19272bfcfc2bd161cb20d13b3bb65d5378c9 19-Mar-2010 Mike Lockwood <lockwood@android.com> Preflight before attempting to start network location and geocoder services

Signed-off-by: Mike Lockwood <lockwood@android.com>
/frameworks/base/services/java/com/android/server/LocationManagerService.java
43e33f28721e4759d4edb0fad08d330bba74f25e 26-Mar-2010 Mike Lockwood <lockwood@android.com> Move files internal to LocationManagerService from framework.jar to services.jar

Change-Id: I3dbb40210d87708e0bff46729f707d4ab8e29e42
Signed-off-by: Mike Lockwood <lockwood@android.com>
/frameworks/base/services/java/com/android/server/LocationManagerService.java
223e84d7336db189060f3f766a66037af8690496 12-Mar-2010 Mike Lockwood <lockwood@android.com> Fix LocationManager.getProvider() API breakage.

getProvider() needs to work for providers that are disabled.
It should only return null if the provider does not exist.

Change-Id: Ieb9fbd8965a10329377bc8ac9d8061cebe519ab5
Signed-off-by: Mike Lockwood <lockwood@android.com>
/frameworks/base/services/java/com/android/server/LocationManagerService.java
3c8fbdf5dd19fad0b3006557716ee1026d7d5899 04-Jan-2010 Fred Fettinger <fred.fettinger@motorola.com> location: dump LocationProvider internal state

For each location provider, call getInternalState() to see if it has any
state information to include in a bugreport. If the returned string is not
null, then print a header with the provided name followed by the returned
string.

Change-Id: I0a388d7fba14ac8cadcb80eda0a0ceb95032410b
Signed-off-by: Fred Fettinger <fred.fettinger@motorola.com>
Signed-off-by: Mike Lockwood <lockwood@android.com>
/frameworks/base/services/java/com/android/server/LocationManagerService.java
8fff6451476334fbef30a080f46f37d552257e9a 04-Mar-2010 Sean Foy <sean.foy@gmail.com> Remove the ProximityAlerts update Receiver when the last ProximityAlert expires.
Fixes issue 6900.

Change-Id: Ifcd3fa9c34cfca02ed5e7a94aded33984ac81c60
Signed-off-by: Mike Lockwood <lockwood@android.com>
/frameworks/base/services/java/com/android/server/LocationManagerService.java
3b9ef08bbbdc95a609fa7883d6fff4b4fd22e33c 02-Mar-2010 Mike Lockwood <lockwood@android.com> Don't eat IllegalArgumentExceptions in LocationManagerService.

The exeptions should be returned to the Binder client instead.

Change-Id: I8ab36880622bf8b4fdf28407dec50652c48b6712
Signed-off-by: Mike Lockwood <lockwood@android.com>
/frameworks/base/services/java/com/android/server/LocationManagerService.java
8a9b22056b13477f59df934928c00c58b5871c95 27-Feb-2010 Joe Onorato <joeo@android.com> Switch the services library to using the new Slog
/frameworks/base/services/java/com/android/server/LocationManagerService.java
46db504de583d7d644a28a4e7adae43eed5df1ba 22-Feb-2010 Mike Lockwood <lockwood@android.com> Don't start location providers until the system is ready.

Change-Id: Id545e95705e59ffbaaab8a679a1b7df488813101
BUG: 2461320

Signed-off-by: Mike Lockwood <lockwood@android.com>
/frameworks/base/services/java/com/android/server/LocationManagerService.java
21f1bd17b2dfe361acbb28453b3f3b1a110932fa 20-Feb-2010 Dianne Hackborn <hackbod@google.com> Fix issue #2438980: Implement package watcher for voice recognizer service setting

I am getting tired of writing package monitor code, realized this is missing in
a number of places, and at this point it has gotten complicated enough that I
don't think anyone actually does it 100% right so:

Introducing PackageMonitor.

Yes there are no Java docs. I am still playing around with just what this
thing is to figure out what makes sense and how people will use it. It is
being used to fix this bug for monitoring voice recognizers (integrating the
code from the settings provider for setting an initial value), to replace
the existing code for monitoring input methods (and fix the bug where we
wouldn't remove an input method from the enabled list when it got
uninstalled), to now monitor live wallpaper package changes (now allowing
us to avoid reverting back to the default live wallpaper when the current
one is updated!), and to monitor device admin changes.

Also includes a fix so you can't uninstall an .apk that is currently enabled
as a device admin.

Also includes a fix where the default time zone was not initialized early
enough which should fix issue #2455507 (Observed Google services frame work crash).

In addition, this finally introduces a mechanism to determine if the
"force stop" button should be enabled, with convenience in PackageMonitor
for system services to handle it. All services have been updated to support
this. There is also new infrastructure for reporting battery usage as an
applicatin error report.
/frameworks/base/services/java/com/android/server/LocationManagerService.java
43cc4696bfa7c3839931f3360c9660a9e41050b3 18-Feb-2010 Bryan Mawhinney <bryanmawhinney@google.com> Don't return passive location provider unless app has fine permissions.
/frameworks/base/services/java/com/android/server/LocationManagerService.java
a4903f254b4711c8fc0ac5f7e3d605f4dce34f35 17-Feb-2010 Mike Lockwood <lockwood@android.com> Add passive location provider.

The passive location provider allows receiving location updates without
actually triggering them. This allows an application to receive location
updates that are being generated due to other clients of the location manager.

Change-Id: Ibf7a96b089c56875d4f62d3210252ae8d9f32768
Signed-off-by: Mike Lockwood <lockwood@android.com>
/frameworks/base/services/java/com/android/server/LocationManagerService.java
d03ff94fe58045b5bd1dd783fb98026778a4265d 09-Feb-2010 Mike Lockwood <lockwood@android.com> Clean up interface between LocationManagerService and the location providers:

LocationManagerService now uses new Java interface LocationProviderInterface
rather than LocationProviderProxy to refer to location providers internally.

LocationProviderProxy and the ILocationProvider binder interface are only
used for location providers implemented as services (NetworkLocationProvider)

Built-in location providers (GpsLocationProvider and mock providers) now just
implement LocationProviderInterface rather than using a Binder interface and proxy object.

Delete obsolete and unused TestLocationProvider class.

Change-Id: Id800e7c1864f7c666f8e37125c05896493b9c8c4
Signed-off-by: Mike Lockwood <lockwood@android.com>
/frameworks/base/services/java/com/android/server/LocationManagerService.java
628fd6d9c11ed9806abebf34bc986247c106328f 26-Jan-2010 Mike Lockwood <lockwood@android.com> Network Location unbundling:

The network location and geocode provider services are now started on demand
and their interfaces are now retrieved via bindService().

Remove obsolete LocationManager installLocationProvider() and installGeocodeProvider() methods.

Add abstract class android.location.provider.GeocodeProvider to provide a public wrapper to
the IGeocodeProvider Binder interface. Replaces the LocationManager.GeocodeProvider interface.

Rename LocationProviderImpl to android.location.provider.LocationProvider.

Move LocationManager.reportLocation() to android.location.provider.LocationProvider,
so all methods related to external location providers are now all in one class.

Avoid calling from the Location Manager Service into providers that are disabled so we
do not start the network location service unnecessarily.

Change-Id: If3ed2d5d62b83ba508006711d575cad09f4a0007
Signed-off-by: Mike Lockwood <lockwood@android.com>
/frameworks/base/services/java/com/android/server/LocationManagerService.java
b56ae20b22fd7283df32072a431ab6d4965f3c1b 05-Feb-2010 Suchi Amalapurapu <asuchitra@google.com> Rename media resource broadcasts
Add checks for fwdlocked and updated system apps
add more tests
remove duplicate adds
/frameworks/base/services/java/com/android/server/LocationManagerService.java
08675a3376819a82aa5ab344bc3e7b1635c30b05 28-Jan-2010 Suchi Amalapurapu <asuchitra@google.com> Apps on sdcard: Add new broadcasts

Add new broadcasts ACTION_MEDIA_RESOURCES_AVAILABLE and
ACTION_MEDIA_RESOURCES_UNAVAILABLE that get broadcast by
PackageManagerService when sdcard gets mounted/unmounted
by MountService so that packages on sdcard get recognized by
various system services as being installed/available or
removed/unavailable by the system.
The broadcasts are sent before the actual package cleanup which includes
mounting/unmounting the packages and we force a gc right after so
that any lingering file references to resources on sdcard get
released.
/frameworks/base/services/java/com/android/server/LocationManagerService.java
0dac8c0f7ec00d94b09f92823fa238142163aba8 19-Jan-2010 Mike Lockwood <lockwood@android.com> LocationManagerService: Fix bug removing proximity alerts.

Alerts were not being removed from the mProximitiesEntered array.

Signed-off-by: Mike Lockwood <lockwood@android.com>
/frameworks/base/services/java/com/android/server/LocationManagerService.java
34901409a404c8c66914c5a8ad0f29b1bcde0e78 04-Jan-2010 Mike Lockwood <lockwood@android.com> Cleanup and add public wrapper for IGeocodeProvider interface to prepare for network location unbundling.

Change-Id: I6523d115b56dbf450121e73d48e151f200827eb4
Signed-off-by: Mike Lockwood <lockwood@android.com>
/frameworks/base/services/java/com/android/server/LocationManagerService.java
8eb3ea659761edc2cd5db3acf448059f19389e5e 29-Dec-2009 Brad Larson <brad.larson@garmin.com> Use isLocationProviderEnabled to test for enabled providers

LocationManagerService was just checking if the string of (comma-separated)
Location Providers contained the provider we were interested in. This works
fine in normal cases, but breaks if we add a provider such as test_network.
Enabling test_network causes LocationManagerService to think that the network
provider is also enabled.

The code in Settings.Secure.isLocationProviderEnabled() checks for the commas
in the string as well, to make sure that a provider name which is a substring
of another provider name won't cause problems. It also centralizes the code
which reads the string.

Signed-off-by: Brad Larson <brad.larson@garmin.com>
/frameworks/base/services/java/com/android/server/LocationManagerService.java
7e2b4f602a1a876475da2756c5b92297552e0bc8 11-Nov-2009 Jean-Baptiste Queru <jbq@google.com> merge from open-source master
f2db9fb0f877057a9ef56908d54f3c95fc3fd552 31-Aug-2009 Alexey Tarasov <tarasov@dodologics.com> Typo fix in javadoc

@throw -> @throws
@Deprecated -> @deprecated
/frameworks/base/services/java/com/android/server/LocationManagerService.java
86328a99bd55532e318441d48ee9eb96cdc42403 23-Oct-2009 Mike Lockwood <lockwood@android.com> LocationManagerService: clear calling identity in mock provider calls.

Fixes bug b/2198028 (testDirectionsFromScratchByTyping fails because of android.permission.ACCESS_WIFI_STATE)

Change-Id: I44e95981d805189ed6d906d388c5189ee788802f
Signed-off-by: Mike Lockwood <lockwood@android.com>
/frameworks/base/services/java/com/android/server/LocationManagerService.java
03d246779ea65fc2bd10d0b4f32620f45211133a 08-Oct-2009 Mike Lockwood <lockwood@android.com> GPS: Fix problem with SUPL when SUPL APN is already active.

Use ConnectivityManager.CONNECTIVITY_ACTION broadcast in LocationManagerService
to notify GPS when SUPL connection is ready instead of TelephonyIntents.ACTION_ANY_DATA_CONNECTION_STATE_CHANGED,
which is not sent in all cases.
Expand LocationProvider.updateNetworkState() to include NetworkInfo object.

Fixes bug b/2155661

Change-Id: Iee227ace7d536b36cf7973e3e6a8b7a621ce6565
Signed-off-by: Mike Lockwood <lockwood@android.com>
/frameworks/base/services/java/com/android/server/LocationManagerService.java
080b61ba17014b8c93914f642ccbe05c76dc611d 05-Oct-2009 Joshua Bartel <joshua.bartel@gmail.com> LocationManagerService: Fix race when removing LocationListener

In LocationManagerService if a LocationListener is removed while it has
a pending broadcast the wake lock held while pending broadcasts are
outstanding do not get cleared properly.

There are 2 cases of this race that are fixed:

1. locationCallbackFinished was changed to check the mReceivers HashMap
directly instead of calling getReceiver. getReceiver would add the
ILocationListener as a new Receiver if it did not exist which caused
a receiver that was removed when it still had a broadcast pending to
be added back in a bad state when the pending broadcast completed.

2. removeUpdatesLocked was changed to decrement the pending broadcasts
when a Receiver is removed that has pending broadcasts.

Fixes bug b/2163871

Change-Id: I50a321c9b3359bf69845236dc4a4b9e38e847335
Signed-off-by: Mike Lockwood <lockwood@android.com>
/frameworks/base/services/java/com/android/server/LocationManagerService.java
9ff67a5f9b0bca15ad6933eac90a65b11b29eb2e 05-Oct-2009 Joshua Bartel <joshua.bartel@gmail.com> LocationManagerService: Fix race when removing LocationListener

In LocationManagerService if a LocationListener is removed while it has
a pending broadcast the wake lock held while pending broadcasts are
outstanding do not get cleared properly.

There are 2 cases of this race that are fixed:

1. locationCallbackFinished was changed to check the mReceivers HashMap
directly instead of calling getReceiver. getReceiver would add the
ILocationListener as a new Receiver if it did not exist which caused
a receiver that was removed when it still had a broadcast pending to
be added back in a bad state when the pending broadcast completed.

2. removeUpdatesLocked was changed to decrement the pending broadcasts
when a Receiver is removed that has pending broadcasts.
/frameworks/base/services/java/com/android/server/LocationManagerService.java
5550ef48739a7bb16f80aa6b10e9c151b1438163 15-Jul-2009 Yusuf T. Mobile <yusuf.saib@T-Mobile.com> Fixed Android issue #2002: "Proximity alert detection logic is broken"
http://code.google.com/p/android/issues/detail?id=2002
/frameworks/base/services/java/com/android/server/LocationManagerService.java
2d2078aa1d6e31063f565a20b717f3b8908fff02 15-Jul-2009 Yusuf T. Mobile <yusuf.saib@T-Mobile.com> LocationManagerService: Take fix accuracy into account in proximity zone logic.

Fixes http://code.google.com/p/android/issues/detail?id=2002

Change-Id: If2b0665c556269279c5813f2254f9624a556bd92
Signed-off-by: Mike Lockwood <lockwood@android.com>
/frameworks/base/services/java/com/android/server/LocationManagerService.java
9aa1fa2d3612d1d8ffeae6552d65669f4ca194d9 01-Sep-2009 Mike Lockwood <lockwood@android.com> LocationManagerService: Remove caching of last known locations to flash.

Change-Id: Ibbab20a7c48823fb74c2e175824f55248f25bf8a
Signed-off-by: Mike Lockwood <lockwood@android.com>
/frameworks/base/services/java/com/android/server/LocationManagerService.java
3a76fd627945c1df59aa0318867401e0e53da022 01-Sep-2009 Mike Lockwood <lockwood@android.com> LocationManagerService: Add null pointer check and remove useless finalize() method.

Change-Id: I4017d38a1bea7564a85575486a7c2aef569dfe5d
Signed-off-by: Mike Lockwood <lockwood@android.com>
/frameworks/base/services/java/com/android/server/LocationManagerService.java
72b1f379d5c97c8ff31d2201e78215af777d6bda 31-Aug-2009 Jean-Baptiste Queru <jbq@google.com> donut snapshot
/frameworks/base/services/java/com/android/server/LocationManagerService.java
18ad9f657bda79069233c0b8e1476888ffd894d4 27-Aug-2009 Mike Lockwood <lockwood@android.com> Only allow system code to call LocationManager.sendNiResponse()

Signed-off-by: Mike Lockwood <lockwood@android.com>
/frameworks/base/services/java/com/android/server/LocationManagerService.java
22d1f9fb23015471de6af1a70e40fb5c82ecb665 19-Aug-2009 Danke Xie <dankex@qualcomm.com> gps: Network initiated SUPL

Initial contribution from Qualcomm.

Signed-off-by: Mike Lockwood <lockwood@android.com>
/frameworks/base/services/java/com/android/server/LocationManagerService.java
49c22570bb8717bb678dbd8bae6692bb585370fc 27-Aug-2009 Mike Lockwood <lockwood@android.com> am 7566c1de: LocationManager: Fix problem replacing GPS and network providers with a mock provider.

Merge commit '7566c1debebe072af76411e11d96810fd1409482' into eclair

* commit '7566c1debebe072af76411e11d96810fd1409482':
LocationManager: Fix problem replacing GPS and network providers with a mock provider.
7566c1debebe072af76411e11d96810fd1409482 25-Aug-2009 Mike Lockwood <lockwood@android.com> LocationManager: Fix problem replacing GPS and network providers with a mock provider.

Signed-off-by: Mike Lockwood <lockwood@android.com>
/frameworks/base/services/java/com/android/server/LocationManagerService.java
c6cc836f88349e871c2aa7579223c9220e95e5b0 17-Aug-2009 Mike Lockwood <lockwood@android.com> LocationManagerService: Add NullPointerException to avoid change in behavior.

After fixing a null pointer check we were no longer throwing NullPointerExceptions
which caused a CTS test to fail.

Signed-off-by: Mike Lockwood <lockwood@android.com>
/frameworks/base/services/java/com/android/server/LocationManagerService.java
6ba7ae1e4c3c04f6a71380b913ad79f83b00a628 17-Aug-2009 Mike Lockwood <lockwood@android.com> LocationManagerService: Fix null pointer check in sendExtraCommand().

Signed-off-by: Mike Lockwood <lockwood@android.com>
/frameworks/base/services/java/com/android/server/LocationManagerService.java
cf4550c3198d6b3d92cdc52707fe70d7cc0caa9f 21-Jul-2009 Jean-Baptiste Queru <jbq@google.com> donut snapshot
/frameworks/base/services/java/com/android/server/LocationManagerService.java
b7e9922722f50dbf1911eb12e3ee8023c1450086 07-Jul-2009 Mike Lockwood <lockwood@android.com> LocationManagerService: Use Context.checkCallingOrSelfPermission for permission checks

so other services running in the system process can use the location manager.

Signed-off-by: Mike Lockwood <lockwood@android.com>
/frameworks/base/services/java/com/android/server/LocationManagerService.java
fff2fda0199dedbf1079454dca98a81190dce765 01-Jul-2009 Suchi Amalapurapu <asuchitra@google.com> Fix memory leaks in system_server
unlink DeathRecipients in a whole bunch of places to avoid memory leaks
/frameworks/base/services/java/com/android/server/LocationManagerService.java
4686657cee6411eb00235d49b4a8663a96361a00 10-Jun-2009 Simon Schoar <schoar@googlemail.com> LocationManagerService: Fix logic error removing multiple dead receivers.

If multiple receivers are dead, only the first one will be added.
found in http://code.google.com/p/android/issues/detail?id=2651

Signed-off-by: Mike Lockwood <lockwood@android.com>
/frameworks/base/services/java/com/android/server/LocationManagerService.java
6ba283f726aaedd9a7c963d6b0514d4443c4a572 08-Jun-2009 Mike Lockwood <lockwood@android.com> LocationManagerService: Remove some unneeded imports.

Signed-off-by: Mike Lockwood <lockwood@android.com>
/frameworks/base/services/java/com/android/server/LocationManagerService.java
fd6e5f0dda50e113db4ccc55338b6c4f09da37a4 21-May-2009 Mike Lockwood <lockwood@android.com> location: Replace ILocationCollector interface with new ILocationProvider method

This change replaces ILocationCollector with a more general mechanism that
passes locations received from a provider to all other providers.
The network location provider now uses this to implement the location collector.
In the future, this could be used to inject network locations to the GPS
as aiding data.

This change also removes the now obsolete permission INSTALL_LOCATION_COLLECTOR.

Signed-off-by: Mike Lockwood <lockwood@android.com>
/frameworks/base/services/java/com/android/server/LocationManagerService.java
843ef36f7b96cc19ea7d2996b7c8661b41ec3452 20-May-2009 Jean-Baptiste Queru <jbq@google.com> donut snapshot
/frameworks/base/services/java/com/android/server/LocationManagerService.java
3681f2614fa8c10560c790f6b4287f65d6fd2663 12-May-2009 Mike Lockwood <lockwood@android.com> LocationManager: Recover if process containing NetworkLocation provider crashes

Signed-off-by: Mike Lockwood <lockwood@android.com>
/frameworks/base/services/java/com/android/server/LocationManagerService.java
95427cdbd802f7cb529d62bb79953c45b36a8fcf 07-May-2009 Mike Lockwood <lockwood@android.com> location: Fix mock provider support

Allow mock providers to be used for proximity alerts.
Clear calling identity so mock provider support does not fail due to
lack of INSTALL_LOCATION_PROVIDER permission.

Signed-off-by: Mike Lockwood <lockwood@android.com>
/frameworks/base/services/java/com/android/server/LocationManagerService.java
8dfe5d8c6ba9cb165994f09843abaa6302d63c1d 07-May-2009 Mike Lockwood <lockwood@android.com> location: Remove two unnecessary variables.

Signed-off-by: Mike Lockwood <lockwood@android.com>
/frameworks/base/services/java/com/android/server/LocationManagerService.java
0528b9b26a9d64ba43acd0e334638303d514b8eb 07-May-2009 Mike Lockwood <lockwood@android.com> location: Location Manager wakelock cleanup

Location Providers are now responsible for their own wakelocks and scheduling.

Also fixed a deadlock in LocationManagerService in the code for releasing
wakelocks after client notifications have been received.
The fix is to use the Receiver object and mWakeLock for synchronization
instead of the global mLock lock.

Signed-off-by: Mike Lockwood <lockwood@android.com>
/frameworks/base/services/java/com/android/server/LocationManagerService.java
275555c8eb3fb5df6e7320873b88b77cdde85a9e 01-May-2009 Mike Lockwood <lockwood@android.com> location: Add support for location providers outside of the system process.

Also added new permissions android.permission.INSTALL_LOCATION_PROVIDER
and android.permission.INSTALL_LOCATION_COLLECTOR to the public API.

Signed-off-by: Mike Lockwood <lockwood@android.com>
/frameworks/base/services/java/com/android/server/LocationManagerService.java
15e3d0f082d551f8819fbe4b0d502cc108627876 01-May-2009 Mike Lockwood <lockwood@android.com> location: Use ILocationProvider Binder interface for all location providers.

This change eliminates the LocationProviderImpl class which had been used
for location providers running in the system process.
Now the LocationProvider base class is only used to implement the
LocationManager.createProvider() method for retrieving provider information.
Added a new IGpsStatusProvider interface for providers that serve GPS status.

Signed-off-by: Mike Lockwood <lockwood@android.com>
/frameworks/base/services/java/com/android/server/LocationManagerService.java
662ea09a71ab241774456f7bd4791a3532904da3 28-Apr-2009 Mike Lockwood <lockwood@android.com> location: Optimize use of mProviders ArrayList.

Signed-off-by: Mike Lockwood <lockwood@android.com>
/frameworks/base/services/java/com/android/server/LocationManagerService.java
b8adcad61d9225ecdabde1a01b73455f484cbed7 28-Apr-2009 Mike Lockwood <lockwood@android.com> location: Remove obsolete fake provider support.

Now that we have GPS support in the emulator and public APIs for mock providers,
the fake provider support is no longer needed.

Signed-off-by: Mike Lockwood <lockwood@android.com>
/frameworks/base/services/java/com/android/server/LocationManagerService.java
79762a3ee34eb8be5549bcb183af844b6f19c266 28-Apr-2009 Mike Lockwood <lockwood@android.com> location: Move DummyLocationProvider.java and LocationProviderImpl.java to the internal package.

Signed-off-by: Mike Lockwood <lockwood@android.com>
/frameworks/base/services/java/com/android/server/LocationManagerService.java
3d12b51ee38537f6760a833618948f936e75561d 22-Apr-2009 Mike Lockwood <lockwood@android.com> location: Run LocationManagerService in a separate thread.

Signed-off-by: Mike Lockwood <lockwood@android.com>
/frameworks/base/services/java/com/android/server/LocationManagerService.java
48f17518223a2917fd82195004fbb206cb9a05a3 23-Apr-2009 Mike Lockwood <lockwood@android.com> location: Location Manager wakelock cleanup, phase 2

Remove two second timeout for wakelock when broadcasting events to
location listeners. Instead, hold wakelock until receipt of the event
is acknowledged, either via a Binder call or the
PendingIntent.OnFinished interface.

Signed-off-by: Mike Lockwood <lockwood@android.com>
/frameworks/base/services/java/com/android/server/LocationManagerService.java
a0e3cd3853da1d14da4918c49d25128622cf0610 22-Apr-2009 Mike Lockwood <lockwood@android.com> Fix timing problem that was introduced when we removed location provider polling

The wake lock was not being held until after we enabled location tracking,
so the check to see if the wake lock was held before propogating a
new location prevented us from receiving a network location as soon as we
enabled the provider.
This check is not necessary anyway, so this change removes it.

Signed-off-by: Mike Lockwood <lockwood@android.com>
/frameworks/base/services/java/com/android/server/LocationManagerService.java
9ce7217c8eb4141bda68b85641814958da58a7ab 22-Apr-2009 Mike Lockwood <lockwood@android.com> location: Remove support for a message that never actually gets sent.

Signed-off-by: Mike Lockwood <lockwood@android.com>
/frameworks/base/services/java/com/android/server/LocationManagerService.java
61fc286e8f7e33d0dd2a1e72ae9ef73ed3f42a00 22-Apr-2009 Mike Lockwood <lockwood@android.com> location: Remove unnecessary code that monitors the screen on/off state.

Signed-off-by: Mike Lockwood <lockwood@android.com>
/frameworks/base/services/java/com/android/server/LocationManagerService.java
6de3154674a268b0e109990a1f4c2742dfdc9c66 21-Apr-2009 Mike Lockwood <lockwood@android.com> location: Add some null pointer checks.

Signed-off-by: Mike Lockwood <lockwood@android.com>
/frameworks/base/services/java/com/android/server/LocationManagerService.java
e2b44c5aaff312fbb00e66dd42b8444938017672 21-Apr-2009 Mike Lockwood <lockwood@android.com> location: Location Manager wakelock cleanup, phase 1

Move cell and wifi lock from LocationManagerService to NetworkLocationProvider

Signed-off-by: Mike Lockwood <lockwood@android.com>
/frameworks/base/services/java/com/android/server/LocationManagerService.java
98cb66797422c4ccdee6f1a07636146d784a471b 18-Apr-2009 Mike Lockwood <lockwood@android.com> More Location Manager cleanup:

Move LocationCollector support out of GpsLocationProvider.
Don't disable GPS when screen is off.

Signed-off-by: Mike Lockwood <lockwood@android.com>
/frameworks/base/services/java/com/android/server/LocationManagerService.java
2f82c4eb0b4d315481ad79725ad6f52c5ec69685 17-Apr-2009 Mike Lockwood <lockwood@android.com> location: Generalize support for location provider usage tracking.

This replaces two different mechanisms that were used for GPS and Netork
location provider tracking.
Move BatteryStats logging of GPS usage from LocationManagerService to
GpsLocationProvider.
Clean up tracking of location listeners in LocationManagerService and remove
some HashMaps that are no longer needed.

Signed-off-by: Mike Lockwood <lockwood@android.com>
/frameworks/base/services/java/com/android/server/LocationManagerService.java
a55c321329ae52a2db7a4f2bd36673a20b8f271d 15-Apr-2009 Mike Lockwood <lockwood@android.com> location: Move geocoding support from ILocationProvider to a new interface.

Signed-off-by: Mike Lockwood <lockwood@android.com>
/frameworks/base/services/java/com/android/server/LocationManagerService.java
e932f7f2a47b770c636443d411436bd29cc4bb43 06-Apr-2009 Mike Lockwood <> AI 144663: Use Binder interfaces between NetworkLocationManager and LocationManagerService.
This fixes a hack that was added when NetworkLocationManager was moved out of the framework.
This also lays the groundwork for supporting location providers outside of the system process.
BUG=1729031

Automated import of CL 144663
/frameworks/base/services/java/com/android/server/LocationManagerService.java
f113fbe67b878b356fba11873276d7633ec1af22 06-Apr-2009 Mike Lockwood <> AI 144620: Clean up interface between NetworkLocationProvider and LocationManagerService (part 1)
Move broadcast receivers for wifi scan results and battery status
from LocationManagerService to NetworkLocationProvider
Add a Service for the NetworkLocationProvider, so we can install it from its
own thread rather than from BOOT_COMPLETED or callback from LocationManagerService.
(this Service was also required for receiving Intents in NetworkLocationProvider)
BUG=1729031

Automated import of CL 144620
/frameworks/base/services/java/com/android/server/LocationManagerService.java
66eb4acb89a5e54bdb5b9973e9a1c1b9853d154d 05-Apr-2009 Mike Lockwood <> AI 144599: Location Manager cleanup:
Move PhoneStateListener for listening to cell location changes from LocationManagerService
to the NetworkLocationProvider.
Move CellState class out of the core framework to the NetworkLocationProvider service.
NetworkLocationManager now notifies the collector of its state, rather than LocationManagerService.
BUG=1729031

Automated import of CL 144599
/frameworks/base/services/java/com/android/server/LocationManagerService.java
4e50b78bda9cd58be61581d2886c88ff6348a1c1 03-Apr-2009 Mike Lockwood <> AI 144452: More Location Manager cleanup:
Remove 1 Hz "heartbeat" polling of location providers from LocationManagerService.
Now location providers report their location to LocationManagerService via
LocationManager.setLocation() rather than waiting to be polled.
This reduces GPS fix latency by up to one second.
Remove LocationProvderImpl.getLocation().
Since we are no longer polling, this method is no longer necessary.
BUG=1729031

Automated import of CL 144452
/frameworks/base/services/java/com/android/server/LocationManagerService.java
9637d474899d9725da8a41fdf92b9bd1a15d301e 03-Apr-2009 Mike Lockwood <> AI 144372: Cleanup Settings support for enabling and disabling location providers:
LocationManagerService now listens for changes to settings,
making LocationManager.updateProviders() unnecessary.
Removed LocationManager.updateProviders()
Added Settings.Secure.setLocationProviderEnabled(), which is a thread-safe way
of enabling or disabling a single location provider.
This is safer than reading, modifying and writing the LOCATION_PROVIDERS_ALLOWED directly.
BUG=1729031

Automated import of CL 144372
/frameworks/base/services/java/com/android/server/LocationManagerService.java
e1ccba2113910acc95284abc1f1a0a477b8af36f 02-Apr-2009 Amith Yamasani <> AI 144257: am: CL 144256 Need to show opt-in screen for location collection.
Added a screen to the setup wizard, after login, to ask user to
opt-in for location collection.
Added a dialog to Settings when user turns on Network location.
Fixed a security permission issue in LocationManagerService related
to this change.
Original author: yamasani
Merged from: //branches/cupcake/...

Automated import of CL 144257
/frameworks/base/services/java/com/android/server/LocationManagerService.java
29c1c42e18a72a3c5760a9fb741031877293d5aa 02-Apr-2009 Amith Yamasani <> AI 144256: Need to show opt-in screen for location collection.
Added a screen to the setup wizard, after login, to ask user to
opt-in for location collection.
Added a dialog to Settings when user turns on Network location.
Fixed a security permission issue in LocationManagerService related
to this change.
BUG=1752566

Automated import of CL 144256
/frameworks/base/services/java/com/android/server/LocationManagerService.java
7ec434e2e179776d75c8a4da66dcfd2ee630c5d8 27-Mar-2009 Mike Lockwood <> AI 143095: Location Manager cleanup: move MockProvider to a separate file.
BUG=1729031

Automated import of CL 143095
/frameworks/base/services/java/com/android/server/LocationManagerService.java
105925376f8d0f6b318c9938c7b83ef7fef094da 19-Mar-2009 The Android Open Source Project <initial-contribution@android.com> auto import from //branches/cupcake_rel/...@140373
/frameworks/base/services/java/com/android/server/LocationManagerService.java
4df2423a947bcd3f024cc3d3a1a315a8dc428598 05-Mar-2009 The Android Open Source Project <initial-contribution@android.com> auto import from //depot/cupcake/@136594
/frameworks/base/services/java/com/android/server/LocationManagerService.java
9066cfe9886ac131c34d59ed0e2d287b0e3c0087 04-Mar-2009 The Android Open Source Project <initial-contribution@android.com> auto import from //depot/cupcake/@135843
/frameworks/base/services/java/com/android/server/LocationManagerService.java
d83a98f4ce9cfa908f5c54bbd70f03eec07e7553 04-Mar-2009 The Android Open Source Project <initial-contribution@android.com> auto import from //depot/cupcake/@135843
/frameworks/base/services/java/com/android/server/LocationManagerService.java
076357b8567458d4b6dfdcf839ef751634cd2bfb 03-Mar-2009 The Android Open Source Project <initial-contribution@android.com> auto import from //depot/cupcake/@132589
/frameworks/base/services/java/com/android/server/LocationManagerService.java
3dec7d563a2f3e1eb967ce2054a00b6620e3558c 03-Mar-2009 The Android Open Source Project <initial-contribution@android.com> auto import from //depot/cupcake/@137055
/frameworks/base/services/java/com/android/server/LocationManagerService.java
3001a035439d8134a7d70d796376d1dfbff3cdcd 19-Feb-2009 The Android Open Source Project <initial-contribution@android.com> auto import from //branches/cupcake/...@132276
/frameworks/base/services/java/com/android/server/LocationManagerService.java
da996f390e17e16f2dfa60e972e7ebc4f868f37e 13-Feb-2009 The Android Open Source Project <initial-contribution@android.com> auto import from //branches/cupcake/...@131421
/frameworks/base/services/java/com/android/server/LocationManagerService.java
d24b8183b93e781080b2c16c487e60d51c12da31 11-Feb-2009 The Android Open Source Project <initial-contribution@android.com> auto import from //branches/cupcake/...@130745
/frameworks/base/services/java/com/android/server/LocationManagerService.java
b798689749c64baba81f02e10cf2157c747d6b46 10-Jan-2009 The Android Open Source Project <initial-contribution@android.com> auto import from //branches/cupcake/...@125939
/frameworks/base/services/java/com/android/server/LocationManagerService.java
f013e1afd1e68af5e3b868c26a653bbfb39538f8 18-Dec-2008 The Android Open Source Project <initial-contribution@android.com> Code drop from //branches/cupcake/...@124589
/frameworks/base/services/java/com/android/server/LocationManagerService.java
54b6cfa9a9e5b861a9930af873580d6dc20f773c 21-Oct-2008 The Android Open Source Project <initial-contribution@android.com> Initial Contribution
/frameworks/base/services/java/com/android/server/LocationManagerService.java