Avoid performing work in the platform when GPS HAL does not support a feature.
b/19271554 Prevents accessing and computing data in cases when we know that the result cannot be used by the GPS HAL, because the required interface is not supported. Change-Id: I74bf1719f2c8ab7fbfe1244ebe0bebe3ed55ba24
This commit is contained in:
@@ -550,14 +550,19 @@ public class GpsLocationProvider implements LocationProviderInterface {
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
// Convert properties to string contents and send it to HAL.
|
||||
ByteArrayOutputStream baos = new ByteArrayOutputStream(4096);
|
||||
properties.store(baos, null);
|
||||
native_configuration_update(baos.toString());
|
||||
Log.d(TAG, "final config = " + baos.toString());
|
||||
} catch (IOException ex) {
|
||||
Log.w(TAG, "failed to dump properties contents");
|
||||
if (native_is_gnss_configuration_supported()) {
|
||||
try {
|
||||
// Convert properties to string contents and send it to HAL.
|
||||
ByteArrayOutputStream baos = new ByteArrayOutputStream(4096);
|
||||
properties.store(baos, null);
|
||||
native_configuration_update(baos.toString());
|
||||
Log.d(TAG, "final config = " + baos.toString());
|
||||
} catch (IOException ex) {
|
||||
Log.w(TAG, "failed to dump properties contents");
|
||||
}
|
||||
} else if (DEBUG) {
|
||||
Log.d(TAG, "Skipped configuration update because GNSS configuration in GPS HAL is not"
|
||||
+ " supported");
|
||||
}
|
||||
|
||||
// SUPL_ES configuration.
|
||||
@@ -732,16 +737,21 @@ public class GpsLocationProvider implements LocationProviderInterface {
|
||||
}
|
||||
|
||||
if (info != null) {
|
||||
boolean dataEnabled = TelephonyManager.getDefault().getDataEnabled();
|
||||
boolean networkAvailable = info.isAvailable() && dataEnabled;
|
||||
String defaultApn = getSelectedApn();
|
||||
if (defaultApn == null) {
|
||||
defaultApn = "dummy-apn";
|
||||
}
|
||||
if (native_is_agps_ril_supported()) {
|
||||
boolean dataEnabled = TelephonyManager.getDefault().getDataEnabled();
|
||||
boolean networkAvailable = info.isAvailable() && dataEnabled;
|
||||
String defaultApn = getSelectedApn();
|
||||
if (defaultApn == null) {
|
||||
defaultApn = "dummy-apn";
|
||||
}
|
||||
|
||||
native_update_network_state(info.isConnected(), info.getType(),
|
||||
info.isRoaming(), networkAvailable,
|
||||
info.getExtraInfo(), defaultApn);
|
||||
native_update_network_state(info.isConnected(), info.getType(),
|
||||
info.isRoaming(), networkAvailable,
|
||||
info.getExtraInfo(), defaultApn);
|
||||
} else if (DEBUG) {
|
||||
Log.d(TAG, "Skipped network state update because AGPS-RIL in GPS HAL is not"
|
||||
+ " supported");
|
||||
}
|
||||
}
|
||||
|
||||
if (info != null && info.getType() == ConnectivityManager.TYPE_MOBILE_SUPL
|
||||
@@ -1752,7 +1762,7 @@ public class GpsLocationProvider implements LocationProviderInterface {
|
||||
// NI Client support
|
||||
//=============================================================
|
||||
private final INetInitiatedListener mNetInitiatedListener = new INetInitiatedListener.Stub() {
|
||||
// Sends a response for an NI reqeust to HAL.
|
||||
// Sends a response for an NI request to HAL.
|
||||
@Override
|
||||
public boolean sendNiResponse(int notificationId, int userResponse)
|
||||
{
|
||||
@@ -1843,7 +1853,7 @@ public class GpsLocationProvider implements LocationProviderInterface {
|
||||
private void requestSetID(int flags) {
|
||||
TelephonyManager phone = (TelephonyManager)
|
||||
mContext.getSystemService(Context.TELEPHONY_SERVICE);
|
||||
int type = AGPS_SETID_TYPE_NONE;
|
||||
int type = AGPS_SETID_TYPE_NONE;
|
||||
String data = "";
|
||||
|
||||
if ((flags & AGPS_RIL_REQUEST_SETID_IMSI) == AGPS_RIL_REQUEST_SETID_IMSI) {
|
||||
@@ -1994,20 +2004,26 @@ public class GpsLocationProvider implements LocationProviderInterface {
|
||||
.addOnSubscriptionsChangedListener(mOnSubscriptionsChangedListener);
|
||||
|
||||
// listen for events
|
||||
IntentFilter intentFilter = new IntentFilter();
|
||||
intentFilter.addAction(Intents.DATA_SMS_RECEIVED_ACTION);
|
||||
intentFilter.addDataScheme("sms");
|
||||
intentFilter.addDataAuthority("localhost","7275");
|
||||
mContext.registerReceiver(mBroadcastReceiver, intentFilter, null, this);
|
||||
IntentFilter intentFilter;
|
||||
if (native_is_agps_ril_supported()) {
|
||||
intentFilter = new IntentFilter();
|
||||
intentFilter.addAction(Intents.DATA_SMS_RECEIVED_ACTION);
|
||||
intentFilter.addDataScheme("sms");
|
||||
intentFilter.addDataAuthority("localhost", "7275");
|
||||
mContext.registerReceiver(mBroadcastReceiver, intentFilter, null, this);
|
||||
|
||||
intentFilter = new IntentFilter();
|
||||
intentFilter.addAction(Intents.WAP_PUSH_RECEIVED_ACTION);
|
||||
try {
|
||||
intentFilter.addDataType("application/vnd.omaloc-supl-init");
|
||||
} catch (IntentFilter.MalformedMimeTypeException e) {
|
||||
Log.w(TAG, "Malformed SUPL init mime type");
|
||||
intentFilter = new IntentFilter();
|
||||
intentFilter.addAction(Intents.WAP_PUSH_RECEIVED_ACTION);
|
||||
try {
|
||||
intentFilter.addDataType("application/vnd.omaloc-supl-init");
|
||||
} catch (IntentFilter.MalformedMimeTypeException e) {
|
||||
Log.w(TAG, "Malformed SUPL init mime type");
|
||||
}
|
||||
mContext.registerReceiver(mBroadcastReceiver, intentFilter, null, this);
|
||||
} else if (DEBUG) {
|
||||
Log.d(TAG, "Skipped registration for SMS/WAP-PUSH messages because AGPS Ril in GPS"
|
||||
+ " HAL is not supported");
|
||||
}
|
||||
mContext.registerReceiver(mBroadcastReceiver, intentFilter, null, this);
|
||||
|
||||
intentFilter = new IntentFilter();
|
||||
intentFilter.addAction(ALARM_WAKEUP);
|
||||
@@ -2187,6 +2203,8 @@ public class GpsLocationProvider implements LocationProviderInterface {
|
||||
static { class_init_native(); }
|
||||
private static native void class_init_native();
|
||||
private static native boolean native_is_supported();
|
||||
private static native boolean native_is_agps_ril_supported();
|
||||
private static native boolean native_is_gnss_configuration_supported();
|
||||
|
||||
private native boolean native_init();
|
||||
private native void native_cleanup();
|
||||
|
||||
@@ -509,13 +509,22 @@ static void android_location_GpsLocationProvider_class_init_native(JNIEnv* env,
|
||||
}
|
||||
}
|
||||
|
||||
static jboolean android_location_GpsLocationProvider_is_supported(JNIEnv* /* env */,
|
||||
jclass /* clazz */) {
|
||||
if (sGpsInterface != NULL) {
|
||||
return JNI_TRUE;
|
||||
} else {
|
||||
return JNI_FALSE;
|
||||
}
|
||||
static jboolean android_location_GpsLocationProvider_is_supported(
|
||||
JNIEnv* /* env */, jclass /* clazz */)
|
||||
{
|
||||
return (sGpsInterface != NULL) ? JNI_TRUE : JNI_FALSE;
|
||||
}
|
||||
|
||||
static jboolean android_location_GpsLocationProvider_is_agps_ril_supported(
|
||||
JNIEnv* /* env */, jclass /* clazz */)
|
||||
{
|
||||
return (sAGpsRilInterface != NULL) ? JNI_TRUE : JNI_FALSE;
|
||||
}
|
||||
|
||||
static jboolean android_location_gpsLocationProvider_is_gnss_configuration_supported(
|
||||
JNIEnv* /* env */, jclass /* jclazz */)
|
||||
{
|
||||
return (sGnssConfigurationInterface != NULL) ? JNI_TRUE : JNI_FALSE;
|
||||
}
|
||||
|
||||
static jboolean android_location_GpsLocationProvider_init(JNIEnv* env, jobject obj)
|
||||
@@ -715,14 +724,10 @@ static void android_location_GpsLocationProvider_inject_location(JNIEnv* /* env
|
||||
sGpsInterface->inject_location(latitude, longitude, accuracy);
|
||||
}
|
||||
|
||||
static jboolean android_location_GpsLocationProvider_supports_xtra(JNIEnv* /* env */,
|
||||
jobject /* obj */)
|
||||
static jboolean android_location_GpsLocationProvider_supports_xtra(
|
||||
JNIEnv* /* env */, jobject /* obj */)
|
||||
{
|
||||
if (sGpsXtraInterface != NULL) {
|
||||
return JNI_TRUE;
|
||||
} else {
|
||||
return JNI_FALSE;
|
||||
}
|
||||
return (sGpsXtraInterface != NULL) ? JNI_TRUE : JNI_FALSE;
|
||||
}
|
||||
|
||||
static void android_location_GpsLocationProvider_inject_xtra_data(JNIEnv* env, jobject /* obj */,
|
||||
@@ -844,13 +849,10 @@ static void android_location_GpsLocationProvider_update_network_state(JNIEnv* en
|
||||
}
|
||||
}
|
||||
|
||||
static jboolean android_location_GpsLocationProvider_is_geofence_supported(JNIEnv* /* env */,
|
||||
jobject /* obj */)
|
||||
static jboolean android_location_GpsLocationProvider_is_geofence_supported(
|
||||
JNIEnv* /* env */, jobject /* obj */)
|
||||
{
|
||||
if (sGpsGeofencingInterface != NULL) {
|
||||
return JNI_TRUE;
|
||||
}
|
||||
return JNI_FALSE;
|
||||
return (sGpsGeofencingInterface != NULL) ? JNI_TRUE : JNI_FALSE;
|
||||
}
|
||||
|
||||
static jboolean android_location_GpsLocationProvider_add_geofence(JNIEnv* /* env */,
|
||||
@@ -1436,6 +1438,10 @@ static JNINativeMethod sMethods[] = {
|
||||
/* name, signature, funcPtr */
|
||||
{"class_init_native", "()V", (void *)android_location_GpsLocationProvider_class_init_native},
|
||||
{"native_is_supported", "()Z", (void*)android_location_GpsLocationProvider_is_supported},
|
||||
{"native_is_agps_ril_supported", "()Z",
|
||||
(void*)android_location_GpsLocationProvider_is_agps_ril_supported},
|
||||
{"native_is_gnss_configuration_supported", "()Z",
|
||||
(void*)android_location_gpsLocationProvider_is_gnss_configuration_supported},
|
||||
{"native_init", "()Z", (void*)android_location_GpsLocationProvider_init},
|
||||
{"native_cleanup", "()V", (void*)android_location_GpsLocationProvider_cleanup},
|
||||
{"native_set_position_mode",
|
||||
|
||||
Reference in New Issue
Block a user