This change moves some logic associated with time detection out of the NetworkTimeUpdateServiceImpl and moves it to the TimeDetectorStrategy called by the TimeDetectorService. The TimeDetectorStategy implementation now decides when to use an NTP-derived time instead. The logic implemented here is effectively the same as it was: NITZ takes priority over NTP until the latest NITZ signal becomes "too old". The motivating reasons for the change: 1) The "what signal is used when several are available?" logic should be in one place: the TimeDetectoryStrategy not scattered around the platform. Centralizing will enable different strategies and time sources to be introduced over time. 2) It will allow removal of the ACTION_NETWORK_SET_TIME intent in a follow-up commit; this intent was used to coordinate the NTP vs NITZ logic should no longer be required. The "bonus" effect of this change is that NetworkTimeUpdateServiceImpl becomes more general: It can now be the authority for the NTP time on a device independently of how the system clock should be set. e.g. it could be used in future to back the AlarmManager.currentNetworkTimeMillis() API call. Anything that needs a "what is the best time according to NTP?" answer could use this service. Note: The NetworkTimeUpdateServiceImpl still observes the AUTO_TIME setting and will perform an NTP lookup "on demand" (if required) when the user enables the setting. This should be a temporary state and likely to be removed in future; knowledge of AUTO_TIME shouldn't be required for the NTP info to be correct and if NetworkTimeUpdateServiceImpl is doing the right thing. Bug: 140712361 Test: atest com.android.server.timedetector Test: atest android.app.timedetector Change-Id: I4b2936a42c552c4dd4cb55010306bb81bca0c712
* Copyright (C) 2016 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
INTRODUCTION
The Android platform core tests (APCT) consist of unit tests for core platform
functionality. These differ from CTS in that they are not necessarily testing
public APIs and are not guaranteed to work outside of AOSP builds.
INSTRUCTIONS
To run a test or set of tests, first build the FrameworksCoreTests package:
make FrameworksCoreTests
Next, install the resulting APK and run tests as you would normal JUnit tests:
adb install -r ${ANDROID_PRODUCT_OUT}/data/app/FrameworksCoreTests/FrameworksCoreTests.apk
adb shell am instrument -w \
com.android.frameworks.coretests/androidx.test.runner.AndroidJUnitRunner
To run a tests within a specific package, add -e AFTER -w and before the runner class:
-e package android.content.pm
To run a specific test or method within a test:
-e class android.content.pm.PackageParserTest
-e class android.content.pm.PackageParserTest#testComputeMinSdkVersion
To run tests in debug mode:
-e debug true
To uninstall the package:
adb shell pm uninstall -k com.android.frameworks.coretests
For more arguments, see the guide to command=line testing:
https://developer.android.com/studio/test/command-line.html