Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ef752b69 authored by destradaa's avatar destradaa
Browse files

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
parent e354f5d5
Loading
Loading
Loading
Loading
+50 −32
Original line number Diff line number Diff line
@@ -550,6 +550,7 @@ public class GpsLocationProvider implements LocationProviderInterface {
            }
        }

        if (native_is_gnss_configuration_supported()) {
            try {
                // Convert properties to string contents and send it to HAL.
                ByteArrayOutputStream baos = new ByteArrayOutputStream(4096);
@@ -559,6 +560,10 @@ public class GpsLocationProvider implements LocationProviderInterface {
            } 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.
        String suplESProperty = mProperties.getProperty("SUPL_ES");
@@ -732,6 +737,7 @@ public class GpsLocationProvider implements LocationProviderInterface {
        }

        if (info != null) {
            if (native_is_agps_ril_supported()) {
                boolean dataEnabled = TelephonyManager.getDefault().getDataEnabled();
                boolean networkAvailable = info.isAvailable() && dataEnabled;
                String defaultApn = getSelectedApn();
@@ -742,6 +748,10 @@ public class GpsLocationProvider implements LocationProviderInterface {
                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)
        {
@@ -1994,7 +2004,9 @@ public class GpsLocationProvider implements LocationProviderInterface {
                    .addOnSubscriptionsChangedListener(mOnSubscriptionsChangedListener);

            // listen for events
            IntentFilter intentFilter = new IntentFilter();
            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");
@@ -2008,6 +2020,10 @@ public class GpsLocationProvider implements LocationProviderInterface {
                    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");
            }

            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();
+26 −20
Original line number Diff line number Diff line
@@ -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",