Commit Graph

239 Commits

Author SHA1 Message Date
Yu-Han Yang
894d6e63e3 Handle emergency SUPL on active SIM
- Call setSetId on the active sub ID in emergency SUPL
- Reload GNSS configurations when emergency call starts and ends

Bug: 211060538
Test: manual
Change-Id: I4d61854644e851bb742eff0e89826a2d0e5284d6
2022-07-20 20:11:20 +00:00
Yu-Han Yang
1096bce6b8 Use TelephonyCallback to replace the deprecated broadcast
Bug: 196115028
Test: manual
Change-Id: I53e8053d7f03e3263986d4e8ce03ebfbcfd79316
2021-11-03 13:40:09 -07:00
Soonil Nagarkar
49983fcbbd Copy LocationProviderBase API into SystemApi surface
This allows third party location providers to link against the standard
API surface. This replaces the LocationProviderBase implementation in
the com.android.location.providers API. Both will temporarily coexist
until third party applications can be migrated, and then old version
will be removed. Only the LocationProviderBase API is migrated right now
as its the only API that has undergone changes.

This also restores some old, unused classes which should not have been
remove from the API surface. Clients that support older API version will
still need to link against these classes.

Bug: 176115245
Test: builds
Change-Id: I2d688447e1f59e441f5c48ff36d3f0dd8b5dc7f6
2021-01-08 10:33:44 -08:00
Neil Fuller
8df5ad8006 Merge "Delete location.timezone.provider API classes" 2021-01-06 10:32:18 +00:00
Soonil Nagarkar
a8e676b326 Refactor Java GNSS HAL
Extracts large parts of the GNSS HAL into a central GnssNative class,
which can be faked for testing. This is a large step towards making all
GNSS code unit testable, and allows for more modular HAL configurations.
Begins to break up the GnssLocationProvider god object and pull
functionality out into other classes. Changes include:

-Making GnssCapabilities parcelable so it can be part of the API
-Splitting out the NMEA listener from status listeners, which
substantially reduces the burden of supported NMEA listeners as well as
the amount of GNSS<->AP communication.
-All GNSS listeners now respond properly to HAL restarts.
-Partially extract out emergency call detection.

Bug: 153129152
Test: manual
Change-Id: Idee0d548f38c6adf921cd6c28b5d815bbd366f8a
2021-01-05 17:37:39 -08:00
TreeHugger Robot
1573c52be1 Merge "Replace LocationProvider with ProviderProperties" 2021-01-05 22:09:13 +00:00
Neil Fuller
204b52a384 Delete location.timezone.provider API classes
Delete location.timezone.provider API classes and associated internal
classes that are no longer used.

Bug: 175633818
Test: build
Change-Id: I66319e63e3150e3b71f31f8d9404e4114f802662
2021-01-05 20:36:29 +00:00
Yu-Han Yang
b5765cc3e7 Clean up dead code in NetInitiatedActivity
Bug: 174151048
Test: on device
Change-Id: I5a3a77557720571b455ffec296cdd4e2e1a02f7b
2020-12-29 10:42:33 -08:00
Soonil Nagarkar
b76a3541a1 Replace LocationProvider with ProviderProperties
LocationProvider cannot represent unknown properties, which is currently
causing problems with getProvider() which may return null even when a
particular provider exists. Instead provide isProvider() to query
whether a provider exists, and getProviderProperties() to query a
provider's properties.

Bug: 176232308
Test: atest CtsLocationNoneTestCases
Change-Id: Ic42cc953624be116616b0b997e18356247fdf288
2020-12-28 10:50:50 -08:00
Soonil Nagarkar
ff097cef17 Move NUM_GPS_SIGNAL_QUALITY_LEVELS to GnssSignalQuality
This allows us to move GnssMetrics out of the client in a follow up CL.

Test: compiles
Change-Id: Idce044199f2ce223f893bfaecf43e5043a83bb94
2020-12-15 21:29:08 +00:00
Neil Fuller
110409d776 Change LocationTimeZoneEvent elapsed realtime
Switch LocationTimeZoneEvent to elapsedRealtimeMillis from nanos. This
makes it more consistent with other usages of the elapsed realtime clock
in time zone detection. This information is currently only used for
debug so there will be no functional change.

Also change LocationTimeZoneEvent toString() to additionally report
mElapsedRealtimeMillis value using Duration.toString(); this is done
elsewhere in debug output for time zone detection so makes understanding
log output easier.

Bug: 169304499
Test: build only
Change-Id: If307c9b27d64ca49a4fcc0d9bb6e36f362990b3e
2020-11-25 10:41:11 +00:00
Neil Fuller
bd14141056 Move LocationTimeZoneEvent to com.android
LocationTimeZoneEvent was originally supposed to fulfil the same role as
Location does in the LocationProvider. Since Location is public SDK, it
was in android.location. LocationTimeZoneEvent is not public SDK (or any
form of API), so it can be moved to com.android instead.
LocationTimeZoneEventUnbundled is in the API in its place.

Bug: 169304499
Test: treehugger only
Change-Id: I5d382362383000b16852928895a18ac4e4269a8f
2020-11-24 14:47:16 +00:00
Soonil Nagarkar
be6ed5aa14 Add batching APIs and Location.equals()
-Moves batching APIs from SystemApi to Public, and makes them
multi-client safe.
-Adds equals/hashcode to Location.

Bug: 171512333
Test: manual + presubmit
Change-Id: I6ee28f8229fdf49386cd370ea785de63b97e7cde
2020-11-10 10:14:34 -08:00
Soonil Nagarkar
f6a861a34f Add quality to LocationRequest/ProviderRequest
Expose quality APIs publically after refactoring them to match external
usage of quality constants. Removes list of location requests from
provider request, as there is no client that really uses this, and it
feels like too much information to give to providers.

Bug: 168624248
Test: presubmits
Change-Id: Icf8a9f6096da0071d97190d3f7196948492e52a1
2020-10-14 16:53:50 -07:00
Taesu Lee
902b89d936 Use TelephonyManager#isEmergencyNumber() instead
Replace deprecated PhoneNumberUtils#isLocalEmergencyNumber() and
isEmergencyNumber() with TelephonyManager#isEmergencyNumber().

Test: Build
Bug: 132703886

Signed-off-by: Taesu Lee <taesu82.lee@samsung.com>
Change-Id: I232d7f7d23efd963b6d30938f0fa304c90fca8a8
2020-10-13 15:52:20 -07:00
Neil Fuller
3299f0913f Tidy up the "unbundled" provider API
This commit introduces a LocationTimeZoneEventUnbundled, as
LocationTimeZoneEvent will not be on another API surface so cannot be
reused. (The equivalent from LocationProvider is Location, which is
public API so there is no LocationUnbundled.)

Add an initialization timeout to LocationTimeZoneProviderRequest so that
providers can make intelligent choices about (for example) how long to
spend waiting for geolocation to happen passively.

Test: atest services/tests/servicestests/src/com/android/internal/location/timezone/
Test: atest services/tests/servicestests/src/com/android/server/location/timezone/
Bug: 152744911
Change-Id: Id3e9e6916e8c3a132d8fc892338578ab9d2ff574
2020-09-24 17:38:10 +01:00
Soonil Nagarkar
f2bc6ba3a0 Fix up provider internal/external APIs
-Encapsulate various fields
-Bring naming in line with API guidelines
-Minor refactoring

Bug: 168621146
Test: manual
Change-Id: I55681a3d84d7833c98569a13a57e6c4f0b728a67
2020-09-15 17:13:46 -07:00
Salud Lemus
3d655ad09e Replace manual creation of StatsEvent objects with their appropriate buildStatsEvent() method
Currently, Java clients are manually creating the StatsEvent objects
which can lead to errors. Now that there is support for pulled atoms for
stats-log-api-gen for Java clients, use the appropriate buildStatsEvent
method that was auto generated by stats-log-api-gen.

Bug: 160368804
Test: Ran `m` and completed successfully
Test: Ran `atest statsd_test` and all CTS tests passed
Test: Ran `atest UidAtomTests` and all CTS tests passed except for the CTS tests related to a SIM card because the device does not have a SIM card

Change-Id: Id229ba5ca94203135a8a5e2607de9844e0432ce1
2020-07-14 23:00:57 +00:00
Soonil Nagarkar
00af9a3205 Ask location provider for its package name
The package name from the service watcher may be inconsistent with the
package name of the currently bound service.

Test: none
Change-Id: Iede437d2e61a0da0b853fdbb133a29add04f6bf3
2020-07-09 16:57:25 -07:00
Soonil Nagarkar
c25f4f1d0e Various small fixes
Test: manual
Change-Id: Id9874dd034aae96d540fac7c580c6689e25f44e8
2020-06-22 13:55:45 -07:00
TreeHugger Robot
5e72ff77d4 Merge "Remove unused intent in NiNotification" into rvc-dev am: e93814953c am: ebaf86bece am: c6e39e749d am: 6200c35d5b
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/11799318

Change-Id: I23e0430e37ab8714fb35389d269dc7c8a6c99986
2020-06-09 23:21:32 +00:00
TreeHugger Robot
e93814953c Merge "Remove unused intent in NiNotification" into rvc-dev 2020-06-09 22:26:42 +00:00
Yu-Han Yang
50bf07e963 Remove unused intent in NiNotification
Bug: 154319182
Test: manual
Change-Id: I5958a8fb442cf4506e1824243493f91aea34a7cc
2020-06-08 14:59:23 -07:00
Ruchir Rastogi
80169f2f12 Merge changes I6c0940fd,I1b2dc636 into rvc-dev am: 01d150e539 am: fdd1c9d081 am: f40041df55 am: f1d8c17883
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/11727208

Change-Id: I6623d52ca3265652dcafdf8c4a15ce2ccb2936b0
2020-06-08 20:52:51 +00:00
Ruchir Rastogi
ef0904eac0 Move GnssStats puller to binder thread
Pass direct executor to setPullAtomCallback. This causes the puller to
run directly on the binder thread, as opposed to the Background thread,
which could be busy with other work.

This change means that the puller can be executed concurrently. To
properly handle that, the Statistics class is made thread-safe.

Test: adb shell cmd stats pull-source 10074
Bug: 157186182
Change-Id: I6c0940fd4ed231f9d962981cc1f9e8c983c48f7f
2020-06-05 14:08:37 -07:00
Ruchir Rastogi
5ea18c9036 Partial CP of ag/10846962
CP to rvc-dev to avoid automerger conflicts for ag/11727208.

Test: m
Bug: 157186182
Change-Id: I1b2dc636b90e6a643a2d5722022671563955f96a
Merged-In: I1eb1dfb68190c68e896e87c5bea1f2ec44065e80
2020-06-05 14:05:01 -07:00
Neil Fuller
3575562606 Remove LocationTimeZoneProviderRequest.workSource
Remove LocationTimeZoneProviderRequest.workSource and correct some docs.

Bug: 152744911
Test: treehugger only
Change-Id: Ibd26886a1c4e66507bbcaafc5132b615e5af443e
2020-05-19 18:27:02 +01:00
Soonil Nagarkar
b03841f2b3 Merge "Rename ILocationProviderManager method" 2020-04-09 16:30:02 +00:00
Neil Fuller
714fa9a76b Merge "Minimal skeleton for location time zone providers" 2020-04-09 11:00:41 +00:00
Soonil Nagarkar
d879ec9443 Rename ILocationProviderManager method
Test: presubmit
Change-Id: Ib2b0fd5c2065e85b390815fad6a2d7e04b81afb7
2020-04-08 15:51:37 -07:00
Neil Fuller
0970a9bbb6 Minimal skeleton for location time zone providers
Minimal skeleton for location time zone providers. Most behavior has
been stripped and more detail will be added later.

Test: atest services/tests/servicestests/src/android/location/timezone/LocationTimeZoneEventTest.java
Test: services/tests/servicestests/src/com/android/internal/location/timezone/LocationTimeZoneProviderRequestTest.java
Change-Id: I64102df0970e6cfbcc07c9377b226c8663a29a74
2020-04-08 12:11:58 +01:00
Soonil Nagarkar
7fe47adb41 Merge "Fix up LocationRequest and ProviderRequest" into rvc-dev am: 240eaaaaab am: 293347f282 am: 14f734fbed am: d8f077de28
Change-Id: I49e0d5ec63fca56395fee5463633c21cff73f06d
2020-04-02 20:25:51 +00:00
Soonil Nagarkar
c4f8716720 Fix up LocationRequest and ProviderRequest
-Use more idiomatic and efficient parceling
-Cleanup LocationRequest a bit

Bug: 151026407
Test: presubmits
Change-Id: I3865421a128417a5096e39ee110139a13ab9ab3b
2020-04-01 11:06:12 -07:00
Soonil Nagarkar
99a2a72529 Make GnssStatus a Parcelable
This saves 24 bytes per serialization and makes code simpler. Also
includes some cleanup in GnssMetrics.

Bug: 152442920
Test: presubmits
Change-Id: I1eb1dfb68190c68e896e87c5bea1f2ec44065e80
2020-03-26 14:36:08 -07:00
Soonil Nagarkar
cfb945c470 Add equals() to ProviderProperties
This lets us ignore updates to properties which are the same, and spend
less cycles giving everyone state updates when nothing has changed. Also
updates the Parcelable format for ProviderProperties, and removes dead
code from ServiceWatcher.

Test: presubmits
Change-Id: Ia6517438ff8988064247cc8d3288d576f73a1aa9
2020-03-11 08:52:00 -07:00
Automerger Merge Worker
1276b66a26 Merge "Address Puller API Feedback" into rvc-dev am: 8651b62518 am: eff89f9fcf am: c7a97df065 am: 6776affc26
Change-Id: Ib42990a37d5b00945f4e662554853d47ff1ee86e
2020-03-07 22:46:31 +00:00
Tej Singh
72a70a8a3c Address Puller API Feedback
1. Rename registerPullAtomCallback to setPullAtomCallback
2. Rename unregisterPullAtomCallback to clearPullAtomCallback
3. Add getters to PullAtomMetadata
4. Change Ns to Millis (when I tried to make it Nanos, I received a
built time error saying to prefer millis unless we need the precision.
We do not need the precision, so I changed it).
5. Fix out of order params.

I did not change usePooledBuffer to setPooledBuffer because I think use
is more appropriate for our use case.

Test: make
Test: atest PullAtomMetadataTest
Test: atest GtsStatsdHostTestCases
Bug: 149475498

Change-Id: Ib07aa57a6e02c77917fe0e65a3d4a77c00ce8565
2020-03-05 16:43:02 -08:00
Soonil Nagarkar
470c8f6a3f Give location providers a known identity
Providers no longer need the ability to specify additional packages,
this can be replaced with tracking the provider identity.

In addition, move CallerIdentity into the client space, and fix some
minor GNSS bugs.

Bug: 149839935
Test: atest LocationProviderTest
Change-Id: Ide107abc61531946b20d2ac50cd9555fc215ef03
2020-03-04 12:38:31 -08:00
TreeHugger Robot
853823717d Merge "Log permission mismatch with 128s emergency extension" 2020-03-03 03:07:16 +00:00
Yu-Han Yang
5ca36f4012 Log permission mismatch with 128s emergency extension
Bug: 145793324
Test: on device
Change-Id: Iea685e407aebe1fb77bb57c9df9f8034f9641d58
2020-02-27 14:31:42 -08:00
Blake Kragten
e4383d8999 Merge "GnssMetrics" 2020-02-21 22:15:29 +00:00
Blake Kragten
6ce382a372 GnssMetrics
These metrics will pull different metrics that tell the performance of the gnss subsystem.

Metrics include:
Location reports
% of location failure
Num times GPS had to first fix
Mean time to first fix on signal
Num position accuracy logs
Mean position accuracy in meters
Num top 4 Cn0 messages
Mean top 4 average Cn0 (signal quality)
Num L5 top 4 Cn0 messages
Mean L5 top 4 average Cn0 (signal quality)
Num Satellite status messages received
Num of Satellites used in fix
L5 Satellite status messages received
L5 of Satellites used in fix

metric_id: 1111
gauge_metrics {
  data {
    bucket_info {
      atom {
        gnss_stats {
          location_reports: 12
          location_failure_reports: 3
          time_to_first_fix_reports: 2
          time_to_first_fix_milli_s: 43588
          position_accuracy_reports: 9
          position_accuracy_meters: 112
          top_four_average_cn0_reports: 31
          top_four_average_cn0_db_mhz: 734711
          l5_top_four_average_cn0_reports: 1
          l5_top_four_average_cn0_db_mhz: 21500
          sv_status_reports: 1015
          sv_status_reports_used_in_fix: 100
          l5_sv_status_reports: 7
          l5_sv_status_reports_used_in_fix: 0
        }
      }
      elapsed_timestamp_nanos: 537249375445
      start_bucket_elapsed_millis: 522186
      end_bucket_elapsed_millis: 549283
    }
  }
}
time_base_elapsed_nano_seconds: 9283624934
bucket_size_nano_seconds: 60000000000
is_active: true

Bug: 147910698
Test: On Device using test script and gnsslogger.apk
>  make statsd_testdrive
>  ./out/host/linux-x86/bin/statsd_testdrive <ATOM_ID>

Change-Id: I92461eb8533ec810bb67d76a25931295cfa1efbd
2020-02-19 17:07:11 -08:00
Soonil Nagarkar
3819f972df Revert requestSetProviderEnabled API
Bug: 144955780
Test: presubmits
Change-Id: Iec8520acfd98b9d9d92a4876ebfa899ac2a0731e
2020-02-19 14:39:58 -08:00
Muhammad Qureshi
e2b2432bc6 Use FrameworkStatsLog instead of StatsLog
As part of statsd becoming a Mainline module in R, autogenerated
StatsLog.write() calls are going away and replaced by
*StatsLog.java
that is autogenerated for each module.
This CL replaces some usages of StatsLog with
FrameworkStatsLog.

Bug: 145952197
Test: m
Change-Id: Iaa2db34a7be4c3215f62cc36661ba8ac81656baa
2020-02-03 09:17:40 -08:00
Soonil Nagarkar
980ce6a741 Add DPM API to request location provider enable
DPM can currently control the master location toggle, but cannot
influence the behavior of individual providers. This adds an API for
DPM (or other privileged entities) to request a provider to turn itself
on.

Practically, this is necessary to allow DPM to control network location,
which may be gated by additional consents. This change also renames some
internal location code to make clearer the distinction between provider
enabled and provider allowed: enabled = location on && allowed

Bug: 136219903
Test: CTS tests to be added
Change-Id: I05f03c976428f0f5a8a2cf627a84dc9e2baf3e67
2020-01-23 18:06:31 -08:00
Soonil Nagarkar
c3107caf22 Fix parceling bug in ProviderRequest
Forgot to add worksource write in addition to worksource read.

Bug: 148129736
Test: manual
Change-Id: Idac06b9191ada54bed0c79e9c799d8cd1ab0ebac
2020-01-22 14:58:16 -08:00
Soonil Nagarkar
4c0b85ba06 Overhaul FusedLocationProvider
Fix some minor bugs and ensure fused location provider correctly
supports location bypass. This is especially important for when
location bypass is invoked in direct boot.

The added UPDATE_DEVICE_STATS permission is necessary for FusedLocation
to correctly update WorkSources. FusedLocation receives work from LMS and
then further delegates that work to other location providers. The other
location providers should be informed of the correct applications for
battery blame, and should not be blaming the FusedLocation package.
1) This is the minimally scoped permission necessary to battery blame
correctly.
2) There is no way to attribute battery blame without this permission.
3) This is the correct permission - as required by LocationManager, and
this permission will likely never be removed (FusedLocation will always
need to battery blame).

Test: atest FusedLocationTests
Change-Id: If7126fffaae5577ddf8e366a0b5c17b3e5286582
2020-01-22 17:22:54 +00:00
Blake Kragten
439408699d Merge "Revert "GPS Atoms Addition"" 2020-01-16 17:18:11 +00:00
Blake Kragten
c7bdb71cc7 Revert "GPS Atoms Addition"
Revert "CTS GPS test"

Revert submission 9726785-1574459091307-c480d999

Reason for revert: Pushed atoms will be integrated into the new pulled atom.
Reverted Changes:
I9cbc8e41e: CTS GPS test
If8aed8f47: GPS Atoms Addition

Change-Id: I8d0a0b73d870a8d9fb02975df70f662de4fd1690
2020-01-15 18:57:33 -08:00
Soonil Nagarkar
8df02f452c Refactor providers/managers
Refactor how providers/managers are implemented in LMS, substantially
simplifying code, and opening up further simplification around
permissions in the next change.

Also, limit the number of additional packages providers can have, and
merge WorkSource into ProviderRequest so that providers can pass just
ProviderRequests around, not both.

Test: presubmits
Change-Id: Ic6fab46883cf53eb26368b54a824feac39c57a32
2020-01-09 14:52:50 -08:00