Merge "rename vendor proprietary name XTRA to PSDS" into qt-dev

This commit is contained in:
Anil Admal
2019-05-04 00:54:32 +00:00
committed by Android (Google) Code Review
3 changed files with 91 additions and 90 deletions

View File

@@ -180,9 +180,10 @@ public class GnssLocationProvider extends AbstractLocationProvider implements
private static final int SET_REQUEST = 3;
private static final int INJECT_NTP_TIME = 5;
private static final int DOWNLOAD_XTRA_DATA = 6;
// PSDS stands for Predicted Satellite Data Service
private static final int DOWNLOAD_PSDS_DATA = 6;
private static final int UPDATE_LOCATION = 7; // Handle external location from network listener
private static final int DOWNLOAD_XTRA_DATA_FINISHED = 11;
private static final int DOWNLOAD_PSDS_DATA_FINISHED = 11;
private static final int SUBSCRIPTION_OR_CARRIER_CONFIG_CHANGED = 12;
private static final int INITIALIZE_HANDLER = 13;
private static final int REQUEST_LOCATION = 16;
@@ -295,19 +296,19 @@ public class GnssLocationProvider extends AbstractLocationProvider implements
// Typical hot TTTF is ~5 seconds, so 10 seconds seems sane.
private static final int GPS_POLLING_THRESHOLD_INTERVAL = 10 * 1000;
// how long to wait if we have a network error in NTP or XTRA downloading
// how long to wait if we have a network error in NTP or PSDS downloading
// the initial value of the exponential backoff
// current setting - 5 minutes
private static final long RETRY_INTERVAL = 5 * 60 * 1000;
// how long to wait if we have a network error in NTP or XTRA downloading
// how long to wait if we have a network error in NTP or PSDS downloading
// the max value of the exponential backoff
// current setting - 4 hours
private static final long MAX_RETRY_INTERVAL = 4 * 60 * 60 * 1000;
// Timeout when holding wakelocks for downloading XTRA data.
private static final long DOWNLOAD_XTRA_DATA_TIMEOUT_MS = 60 * 1000;
// Timeout when holding wakelocks for downloading PSDS data.
private static final long DOWNLOAD_PSDS_DATA_TIMEOUT_MS = 60 * 1000;
private final ExponentialBackOff mXtraBackOff = new ExponentialBackOff(RETRY_INTERVAL,
private final ExponentialBackOff mPsdsBackOff = new ExponentialBackOff(RETRY_INTERVAL,
MAX_RETRY_INTERVAL);
// true if we are enabled, protected by this
@@ -315,14 +316,14 @@ public class GnssLocationProvider extends AbstractLocationProvider implements
private boolean mShutdown;
// states for injecting ntp and downloading xtra data
// states for injecting ntp and downloading psds data
private static final int STATE_PENDING_NETWORK = 0;
private static final int STATE_DOWNLOADING = 1;
private static final int STATE_IDLE = 2;
// flags to trigger NTP or XTRA data download when network becomes available
// initialized to true so we do NTP and XTRA when the network comes up after booting
private int mDownloadXtraDataPending = STATE_PENDING_NETWORK;
// flags to trigger NTP or PSDS data download when network becomes available
// initialized to true so we do NTP and PSDS when the network comes up after booting
private int mDownloadPsdsDataPending = STATE_PENDING_NETWORK;
// true if GPS is navigating
private boolean mNavigating;
@@ -346,8 +347,8 @@ public class GnssLocationProvider extends AbstractLocationProvider implements
// capabilities reported through the top level IGnssCallback.hal
private volatile int mTopHalCapabilities;
// true if XTRA is supported
private boolean mSupportsXtra;
// true if PSDS is supported
private boolean mSupportsPsds;
// for calculating time to first fix
private long mFixRequestTime = 0;
@@ -404,8 +405,8 @@ public class GnssLocationProvider extends AbstractLocationProvider implements
// Wakelocks
private final static String WAKELOCK_KEY = "GnssLocationProvider";
private final PowerManager.WakeLock mWakeLock;
private static final String DOWNLOAD_EXTRA_WAKELOCK_KEY = "GnssLocationProviderXtraDownload";
private final PowerManager.WakeLock mDownloadXtraWakeLock;
private static final String DOWNLOAD_EXTRA_WAKELOCK_KEY = "GnssLocationProviderPsdsDownload";
private final PowerManager.WakeLock mDownloadPsdsWakeLock;
// Alarms
private final static String ALARM_WAKEUP = "com.android.internal.location.ALARM_WAKEUP";
@@ -592,10 +593,10 @@ public class GnssLocationProvider extends AbstractLocationProvider implements
mWakeLock = mPowerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, WAKELOCK_KEY);
mWakeLock.setReferenceCounted(true);
// Create a separate wake lock for xtra downloader as it may be released due to timeout.
mDownloadXtraWakeLock = mPowerManager.newWakeLock(
// Create a separate wake lock for psds downloader as it may be released due to timeout.
mDownloadPsdsWakeLock = mPowerManager.newWakeLock(
PowerManager.PARTIAL_WAKE_LOCK, DOWNLOAD_EXTRA_WAKELOCK_KEY);
mDownloadXtraWakeLock.setReferenceCounted(true);
mDownloadPsdsWakeLock.setReferenceCounted(true);
mAlarmManager = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);
mWakeupIntent = PendingIntent.getBroadcast(mContext, 0, new Intent(ALARM_WAKEUP), 0);
@@ -701,10 +702,10 @@ public class GnssLocationProvider extends AbstractLocationProvider implements
*/
private void onNetworkAvailable() {
mNtpTimeHelper.onNetworkAvailable();
if (mDownloadXtraDataPending == STATE_PENDING_NETWORK) {
if (mSupportsXtra) {
if (mDownloadPsdsDataPending == STATE_PENDING_NETWORK) {
if (mSupportsPsds) {
// Download only if supported, (prevents an unnecessary on-boot download)
xtraDownloadRequest();
psdsDownloadRequest();
}
}
}
@@ -811,61 +812,61 @@ public class GnssLocationProvider extends AbstractLocationProvider implements
return false;
}
private void handleDownloadXtraData() {
if (!mSupportsXtra) {
// native code reports xtra not supported, don't try
Log.d(TAG, "handleDownloadXtraData() called when Xtra not supported");
private void handleDownloadPsdsData() {
if (!mSupportsPsds) {
// native code reports psds not supported, don't try
Log.d(TAG, "handleDownloadPsdsData() called when PSDS not supported");
return;
}
if (mDownloadXtraDataPending == STATE_DOWNLOADING) {
if (mDownloadPsdsDataPending == STATE_DOWNLOADING) {
// already downloading data
return;
}
if (!mNetworkConnectivityHandler.isDataNetworkConnected()) {
// try again when network is up
mDownloadXtraDataPending = STATE_PENDING_NETWORK;
mDownloadPsdsDataPending = STATE_PENDING_NETWORK;
return;
}
mDownloadXtraDataPending = STATE_DOWNLOADING;
mDownloadPsdsDataPending = STATE_DOWNLOADING;
// hold wake lock while task runs
mDownloadXtraWakeLock.acquire(DOWNLOAD_XTRA_DATA_TIMEOUT_MS);
Log.i(TAG, "WakeLock acquired by handleDownloadXtraData()");
mDownloadPsdsWakeLock.acquire(DOWNLOAD_PSDS_DATA_TIMEOUT_MS);
Log.i(TAG, "WakeLock acquired by handleDownloadPsdsData()");
AsyncTask.THREAD_POOL_EXECUTOR.execute(() -> {
GpsXtraDownloader xtraDownloader = new GpsXtraDownloader(
GpsPsdsDownloader psdsDownloader = new GpsPsdsDownloader(
mGnssConfiguration.getProperties());
byte[] data = xtraDownloader.downloadXtraData();
byte[] data = psdsDownloader.downloadPsdsData();
if (data != null) {
if (DEBUG) Log.d(TAG, "calling native_inject_xtra_data");
native_inject_xtra_data(data, data.length);
mXtraBackOff.reset();
if (DEBUG) Log.d(TAG, "calling native_inject_psds_data");
native_inject_psds_data(data, data.length);
mPsdsBackOff.reset();
}
sendMessage(DOWNLOAD_XTRA_DATA_FINISHED, 0, null);
sendMessage(DOWNLOAD_PSDS_DATA_FINISHED, 0, null);
if (data == null) {
// try again later
// since this is delayed and not urgent we do not hold a wake lock here
mHandler.sendEmptyMessageDelayed(DOWNLOAD_XTRA_DATA,
mXtraBackOff.nextBackoffMillis());
mHandler.sendEmptyMessageDelayed(DOWNLOAD_PSDS_DATA,
mPsdsBackOff.nextBackoffMillis());
}
// Release wake lock held by task, synchronize on mLock in case multiple
// download tasks overrun.
synchronized (mLock) {
if (mDownloadXtraWakeLock.isHeld()) {
if (mDownloadPsdsWakeLock.isHeld()) {
// This wakelock may have time-out, if a timeout was specified.
// Catch (and ignore) any timeout exceptions.
try {
mDownloadXtraWakeLock.release();
if (DEBUG) Log.d(TAG, "WakeLock released by handleDownloadXtraData()");
mDownloadPsdsWakeLock.release();
if (DEBUG) Log.d(TAG, "WakeLock released by handleDownloadPsdsData()");
} catch (Exception e) {
Log.i(TAG, "Wakelock timeout & release race exception in "
+ "handleDownloadXtraData()", e);
+ "handleDownloadPsdsData()", e);
}
} else {
Log.e(TAG, "WakeLock expired before release in "
+ "handleDownloadXtraData()");
+ "handleDownloadPsdsData()");
}
}
});
@@ -920,7 +921,7 @@ public class GnssLocationProvider extends AbstractLocationProvider implements
if (inited) {
mEnabled = true;
mSupportsXtra = native_supports_xtra();
mSupportsPsds = native_supports_psds();
// TODO: remove the following native calls if we can make sure they are redundant.
if (mSuplServerHost != null) {
@@ -1162,9 +1163,9 @@ public class GnssLocationProvider extends AbstractLocationProvider implements
deleteAidingData(extras);
} else if ("force_time_injection".equals(command)) {
requestUtcTime();
} else if ("force_xtra_injection".equals(command)) {
if (mSupportsXtra) {
xtraDownloadRequest();
} else if ("force_psds_injection".equals(command)) {
if (mSupportsPsds) {
psdsDownloadRequest();
}
} else {
Log.w(TAG, "sendExtraCommand: unknown command " + command);
@@ -1677,9 +1678,9 @@ public class GnssLocationProvider extends AbstractLocationProvider implements
}
@NativeEntryPoint
private void xtraDownloadRequest() {
if (DEBUG) Log.d(TAG, "xtraDownloadRequest");
sendMessage(DOWNLOAD_XTRA_DATA, 0, null);
private void psdsDownloadRequest() {
if (DEBUG) Log.d(TAG, "psdsDownloadRequest");
sendMessage(DOWNLOAD_PSDS_DATA, 0, null);
}
/**
@@ -2012,11 +2013,11 @@ public class GnssLocationProvider extends AbstractLocationProvider implements
case REQUEST_LOCATION:
handleRequestLocation(msg.arg1 == 1, (boolean) msg.obj);
break;
case DOWNLOAD_XTRA_DATA:
handleDownloadXtraData();
case DOWNLOAD_PSDS_DATA:
handleDownloadPsdsData();
break;
case DOWNLOAD_XTRA_DATA_FINISHED:
mDownloadXtraDataPending = STATE_IDLE;
case DOWNLOAD_PSDS_DATA_FINISHED:
mDownloadPsdsDataPending = STATE_IDLE;
break;
case UPDATE_LOCATION:
handleUpdateLocation((Location) msg.obj);
@@ -2166,10 +2167,10 @@ public class GnssLocationProvider extends AbstractLocationProvider implements
return "INJECT_NTP_TIME";
case REQUEST_LOCATION:
return "REQUEST_LOCATION";
case DOWNLOAD_XTRA_DATA:
return "DOWNLOAD_XTRA_DATA";
case DOWNLOAD_XTRA_DATA_FINISHED:
return "DOWNLOAD_XTRA_DATA_FINISHED";
case DOWNLOAD_PSDS_DATA:
return "DOWNLOAD_PSDS_DATA";
case DOWNLOAD_PSDS_DATA_FINISHED:
return "DOWNLOAD_PSDS_DATA_FINISHED";
case UPDATE_LOCATION:
return "UPDATE_LOCATION";
case SUBSCRIPTION_OR_CARRIER_CONFIG_CHANGED:
@@ -2266,12 +2267,12 @@ public class GnssLocationProvider extends AbstractLocationProvider implements
private native void native_inject_location(double latitude, double longitude, float accuracy);
// XTRA Support
// PSDS Support
private native void native_inject_time(long time, long timeReference, int uncertainty);
private native boolean native_supports_xtra();
private native boolean native_supports_psds();
private native void native_inject_xtra_data(byte[] data, int length);
private native void native_inject_psds_data(byte[] data, int length);
// DEBUG Support
private native String native_get_internal_state();

View File

@@ -32,26 +32,26 @@ import java.util.Random;
import java.util.concurrent.TimeUnit;
/**
* A class for downloading GPS XTRA data.
* A class for downloading GPS PSDS data.
*
* {@hide}
*/
public class GpsXtraDownloader {
public class GpsPsdsDownloader {
private static final String TAG = "GpsXtraDownloader";
private static final String TAG = "GpsPsdsDownloader";
private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
private static final long MAXIMUM_CONTENT_LENGTH_BYTES = 1000000; // 1MB.
private static final String DEFAULT_USER_AGENT = "Android";
private static final int CONNECTION_TIMEOUT_MS = (int) TimeUnit.SECONDS.toMillis(30);
private static final int READ_TIMEOUT_MS = (int) TimeUnit.SECONDS.toMillis(60);
private final String[] mXtraServers;
private final String[] mPsdsServers;
// to load balance our server requests
private int mNextServerIndex;
private final String mUserAgent;
GpsXtraDownloader(Properties properties) {
// read XTRA servers from the Properties object
GpsPsdsDownloader(Properties properties) {
// read PSDS servers from the Properties object
int count = 0;
String server1 = properties.getProperty("XTRA_SERVER_1");
String server2 = properties.getProperty("XTRA_SERVER_2");
@@ -69,14 +69,14 @@ public class GpsXtraDownloader {
}
if (count == 0) {
Log.e(TAG, "No XTRA servers were specified in the GPS configuration");
mXtraServers = null;
Log.e(TAG, "No PSDS servers were specified in the GPS configuration");
mPsdsServers = null;
} else {
mXtraServers = new String[count];
mPsdsServers = new String[count];
count = 0;
if (server1 != null) mXtraServers[count++] = server1;
if (server2 != null) mXtraServers[count++] = server2;
if (server3 != null) mXtraServers[count++] = server3;
if (server1 != null) mPsdsServers[count++] = server1;
if (server2 != null) mPsdsServers[count++] = server2;
if (server3 != null) mPsdsServers[count++] = server3;
// randomize first server
Random random = new Random();
@@ -84,11 +84,11 @@ public class GpsXtraDownloader {
}
}
byte[] downloadXtraData() {
byte[] downloadPsdsData() {
byte[] result = null;
int startIndex = mNextServerIndex;
if (mXtraServers == null) {
if (mPsdsServers == null) {
return null;
}
@@ -97,14 +97,14 @@ public class GpsXtraDownloader {
final int oldTag = TrafficStats.getAndSetThreadStatsTag(
TrafficStatsConstants.TAG_SYSTEM_GPS);
try {
result = doDownload(mXtraServers[mNextServerIndex]);
result = doDownload(mPsdsServers[mNextServerIndex]);
} finally {
TrafficStats.setThreadStatsTag(oldTag);
}
// increment mNextServerIndex and wrap around if necessary
mNextServerIndex++;
if (mNextServerIndex == mXtraServers.length) {
if (mNextServerIndex == mPsdsServers.length) {
mNextServerIndex = 0;
}
// break if we have tried all the servers
@@ -115,7 +115,7 @@ public class GpsXtraDownloader {
}
protected byte[] doDownload(String url) {
if (DEBUG) Log.d(TAG, "Downloading XTRA data from " + url);
if (DEBUG) Log.d(TAG, "Downloading PSDS data from " + url);
HttpURLConnection connection = null;
try {
@@ -132,7 +132,7 @@ public class GpsXtraDownloader {
connection.connect();
int statusCode = connection.getResponseCode();
if (statusCode != HttpURLConnection.HTTP_OK) {
if (DEBUG) Log.d(TAG, "HTTP error downloading gps XTRA: " + statusCode);
if (DEBUG) Log.d(TAG, "HTTP error downloading gps PSDS: " + statusCode);
return null;
}
@@ -143,14 +143,14 @@ public class GpsXtraDownloader {
while ((count = in.read(buffer)) != -1) {
bytes.write(buffer, 0, count);
if (bytes.size() > MAXIMUM_CONTENT_LENGTH_BYTES) {
if (DEBUG) Log.d(TAG, "XTRA file too large");
if (DEBUG) Log.d(TAG, "PSDS file too large");
return null;
}
}
return bytes.toByteArray();
}
} catch (IOException ioe) {
if (DEBUG) Log.d(TAG, "Error downloading gps XTRA: ", ioe);
if (DEBUG) Log.d(TAG, "Error downloading gps PSDS: ", ioe);
} finally {
if (connection != null) {
connection.disconnect();

View File

@@ -62,7 +62,7 @@ static jmethodID method_reportNmea;
static jmethodID method_setTopHalCapabilities;
static jmethodID method_setGnssYearOfHardware;
static jmethodID method_setGnssHardwareModelName;
static jmethodID method_xtraDownloadRequest;
static jmethodID method_psdsDownloadRequest;
static jmethodID method_reportNiNotification;
static jmethodID method_requestLocation;
static jmethodID method_requestRefLocation;
@@ -802,7 +802,7 @@ class GnssXtraCallback : public IGnssXtraCallback {
*/
Return<void> GnssXtraCallback::downloadRequestCb() {
JNIEnv* env = getJniEnv();
env->CallVoidMethod(mCallbacksObj, method_xtraDownloadRequest);
env->CallVoidMethod(mCallbacksObj, method_psdsDownloadRequest);
checkAndClearExceptionFromCallback(env, __FUNCTION__);
return Void();
}
@@ -1525,7 +1525,7 @@ static void android_location_GnssLocationProvider_init_once(JNIEnv* env, jclass
method_setGnssYearOfHardware = env->GetMethodID(clazz, "setGnssYearOfHardware", "(I)V");
method_setGnssHardwareModelName = env->GetMethodID(clazz, "setGnssHardwareModelName",
"(Ljava/lang/String;)V");
method_xtraDownloadRequest = env->GetMethodID(clazz, "xtraDownloadRequest", "()V");
method_psdsDownloadRequest = env->GetMethodID(clazz, "psdsDownloadRequest", "()V");
method_reportNiNotification = env->GetMethodID(clazz, "reportNiNotification",
"(IIIIILjava/lang/String;Ljava/lang/String;II)V");
method_requestLocation = env->GetMethodID(clazz, "requestLocation", "(ZZ)V");
@@ -2190,12 +2190,12 @@ static void android_location_GnssLocationProvider_inject_location(JNIEnv* /* env
}
}
static jboolean android_location_GnssLocationProvider_supports_xtra(
static jboolean android_location_GnssLocationProvider_supports_psds(
JNIEnv* /* env */, jobject /* obj */) {
return (gnssXtraIface != nullptr) ? JNI_TRUE : JNI_FALSE;
}
static void android_location_GnssLocationProvider_inject_xtra_data(JNIEnv* env, jobject /* obj */,
static void android_location_GnssLocationProvider_inject_psds_data(JNIEnv* env, jobject /* obj */,
jbyteArray data, jint length) {
if (gnssXtraIface == nullptr) {
ALOGE("XTRA Interface not supported");
@@ -3047,10 +3047,10 @@ static const JNINativeMethod sMethods[] = {
android_location_GnssLocationProvider_inject_best_location)},
{"native_inject_location", "(DDF)V", reinterpret_cast<void *>(
android_location_GnssLocationProvider_inject_location)},
{"native_supports_xtra", "()Z", reinterpret_cast<void *>(
android_location_GnssLocationProvider_supports_xtra)},
{"native_inject_xtra_data", "([BI)V", reinterpret_cast<void *>(
android_location_GnssLocationProvider_inject_xtra_data)},
{"native_supports_psds", "()Z", reinterpret_cast<void *>(
android_location_GnssLocationProvider_supports_psds)},
{"native_inject_psds_data", "([BI)V", reinterpret_cast<void *>(
android_location_GnssLocationProvider_inject_psds_data)},
{"native_agps_set_id", "(ILjava/lang/String;)V", reinterpret_cast<void *>(
android_location_GnssLocationProvider_agps_set_id)},
{"native_agps_set_ref_location_cellid", "(IIIII)V", reinterpret_cast<void *>(