diff options
author | Android (Google) Code Review <android-gerrit@google.com> | 2009-05-20 14:11:34 -0700 |
---|---|---|
committer | The Android Open Source Project <initial-contribution@android.com> | 2009-05-20 14:11:34 -0700 |
commit | 0376fe43e68cbfa7f846d1663a008dd67ec52c22 (patch) | |
tree | 440ea41e63068d98b9bbc167c5f03f9742cbf9c7 /location/java/com | |
parent | 9d248d4ab4ae0923dcd5c61fafb99ffa8d65d1d7 (diff) | |
parent | 2d10ba33190c2ff1b24d6c48dd621c55a25bf2cc (diff) | |
download | frameworks_base-0376fe43e68cbfa7f846d1663a008dd67ec52c22.zip frameworks_base-0376fe43e68cbfa7f846d1663a008dd67ec52c22.tar.gz frameworks_base-0376fe43e68cbfa7f846d1663a008dd67ec52c22.tar.bz2 |
am 2d10ba33: Merge change 2111 into donut
Merge commit '2d10ba33190c2ff1b24d6c48dd621c55a25bf2cc'
* commit '2d10ba33190c2ff1b24d6c48dd621c55a25bf2cc':
GPS: Add support for forcing NTP time and XTRA data injection.
Diffstat (limited to 'location/java/com')
-rw-r--r-- | location/java/com/android/internal/location/GpsLocationProvider.java | 32 |
1 files changed, 29 insertions, 3 deletions
diff --git a/location/java/com/android/internal/location/GpsLocationProvider.java b/location/java/com/android/internal/location/GpsLocationProvider.java index 565859c..9003848 100644 --- a/location/java/com/android/internal/location/GpsLocationProvider.java +++ b/location/java/com/android/internal/location/GpsLocationProvider.java @@ -641,6 +641,16 @@ public class GpsLocationProvider extends ILocationProvider.Stub { if ("delete_aiding_data".equals(command)) { return deleteAidingData(extras); } + if ("force_time_injection".equals(command)) { + return forceTimeInjection(); + } + if ("force_xtra_injection".equals(command)) { + if (native_supports_xtra() && mNetworkThread != null) { + xtraDownloadRequest(); + return true; + } + return false; + } Log.w(TAG, "sendExtraCommand: unknown command " + command); return false; @@ -676,6 +686,15 @@ public class GpsLocationProvider extends ILocationProvider.Stub { return false; } + private boolean forceTimeInjection() { + if (Config.LOGD) Log.d(TAG, "forceTimeInjection"); + if (mNetworkThread != null) { + mNetworkThread.timeInjectRequest(); + return true; + } + return false; + } + public void startNavigating() { if (!mStarted) { if (DEBUG) Log.d(TAG, "startNavigating"); @@ -1004,6 +1023,7 @@ public class GpsLocationProvider extends ILocationProvider.Stub { private long mNextNtpTime = 0; private long mNextXtraTime = 0; + private boolean mTimeInjectRequested = false; private boolean mXtraDownloadRequested = false; private boolean mDone = false; @@ -1054,16 +1074,17 @@ public class GpsLocationProvider extends ILocationProvider.Stub { } waitTime = getWaitTime(); } while (!mDone && ((!mXtraDownloadRequested && - !mSetSuplServer && !mSetC2KServer && waitTime > 0) + !mTimeInjectRequested && !mSetSuplServer && !mSetC2KServer && waitTime > 0) || !mNetworkAvailable)); if (Config.LOGD) Log.d(TAG, "NetworkThread out of wake loop"); if (!mDone) { if (mNtpServer != null && - mNextNtpTime <= System.currentTimeMillis()) { + (mTimeInjectRequested || mNextNtpTime <= System.currentTimeMillis())) { if (Config.LOGD) { Log.d(TAG, "Requesting time from NTP server " + mNtpServer); } + mTimeInjectRequested = false; if (client.requestTime(mNtpServer, 10000)) { long time = client.getNtpTime(); long timeReference = client.getNtpTimeReference(); @@ -1096,6 +1117,7 @@ public class GpsLocationProvider extends ILocationProvider.Stub { if ((mXtraDownloadRequested || (mNextXtraTime > 0 && mNextXtraTime <= System.currentTimeMillis())) && xtraDownloader != null) { + mXtraDownloadRequested = false; byte[] data = xtraDownloader.downloadXtraData(); if (data != null) { if (Config.LOGD) { @@ -1103,7 +1125,6 @@ public class GpsLocationProvider extends ILocationProvider.Stub { } native_inject_xtra_data(data, data.length); mNextXtraTime = 0; - mXtraDownloadRequested = false; } else { mNextXtraTime = System.currentTimeMillis() + RETRY_INTERVAL; } @@ -1118,6 +1139,11 @@ public class GpsLocationProvider extends ILocationProvider.Stub { notify(); } + synchronized void timeInjectRequest() { + mTimeInjectRequested = true; + notify(); + } + synchronized void signal() { notify(); } |