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

Commit 9196970f authored by Steve Kondik's avatar Steve Kondik Committed by Gerrit Code Review
Browse files

Merge "GPS: Retry inject XTRA on failure; immediately for some devices." into froyo

parents 366927ff 28c7b7d4
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -19,6 +19,10 @@ ifneq ($(USE_CUSTOM_RUNTIME_HEAP_MAX),)
  LOCAL_CFLAGS += -DCUSTOM_RUNTIME_HEAP_MAX=$(USE_CUSTOM_RUNTIME_HEAP_MAX)
endif

ifneq ($(BOARD_USE_BROKEN_INJECT_XTRA_HACK),)
  LOCAL_CFLAGS += -DUSE_BROKEN_INJECT_XTRA_HACK=1
endif

LOCAL_CFLAGS += -DGL_GLEXT_PROTOTYPES -DEGL_EGLEXT_PROTOTYPES

LOCAL_SRC_FILES:= \
+20 −3
Original line number Diff line number Diff line
@@ -429,13 +429,30 @@ static jboolean android_location_GpsLocationProvider_supports_xtra(JNIEnv* env,
    return (sGpsXtraInterface != NULL);
}

static void android_location_GpsLocationProvider_inject_xtra_data(JNIEnv* env, jobject obj,
#ifdef USE_BROKEN_INJECT_XTRA_HACK
static jboolean android_location_GpsLocationProvider_inject_xtra_data(JNIEnv* env, jobject obj,
        jbyteArray data, jint length)
{
    int ret = -1, tries;
    jbyte* bytes = env->GetByteArrayElements(data, 0);
    sGpsXtraInterface->inject_xtra_data((char *)bytes, length);
    for (tries = 0; tries < 5 && ret; ++tries) {
        LOGV("Injecting XTRA data (try %d)\n", tries);
        ret = sGpsXtraInterface->inject_xtra_data((char *)bytes, length);
    }
    env->ReleaseByteArrayElements(data, bytes, 0);
    return (ret != 0);
}
#else
static jboolean android_location_GpsLocationProvider_inject_xtra_data(JNIEnv* env, jobject obj,
        jbyteArray data, jint length)
{
    int ret;
    jbyte* bytes = env->GetByteArrayElements(data, 0);
    ret = sGpsXtraInterface->inject_xtra_data((char *)bytes, length);
    env->ReleaseByteArrayElements(data, bytes, 0);
    return (ret != 0);
}
#endif

static void android_location_GpsLocationProvider_agps_data_conn_open(JNIEnv* env, jobject obj, jstring apn)
{
@@ -525,7 +542,7 @@ static JNINativeMethod sMethods[] = {
    {"native_inject_time", "(JJI)V", (void*)android_location_GpsLocationProvider_inject_time},
    {"native_inject_location", "(DDF)V", (void*)android_location_GpsLocationProvider_inject_location},
    {"native_supports_xtra", "()Z", (void*)android_location_GpsLocationProvider_supports_xtra},
    {"native_inject_xtra_data", "([BI)V", (void*)android_location_GpsLocationProvider_inject_xtra_data},
    {"native_inject_xtra_data", "([BI)Z", (void*)android_location_GpsLocationProvider_inject_xtra_data},
    {"native_agps_data_conn_open", "(Ljava/lang/String;)V", (void*)android_location_GpsLocationProvider_agps_data_conn_open},
    {"native_agps_data_conn_closed", "()V", (void*)android_location_GpsLocationProvider_agps_data_conn_closed},
    {"native_agps_data_conn_failed", "()V", (void*)android_location_GpsLocationProvider_agps_data_conn_failed},
+6 −2
Original line number Diff line number Diff line
@@ -540,7 +540,11 @@ public class GpsLocationProvider implements LocationProviderInterface {
            if (DEBUG) {
                Log.d(TAG, "calling native_inject_xtra_data");
            }
            native_inject_xtra_data(data, data.length);
            if (!native_inject_xtra_data(data, data.length)) {
                // try again later
                mHandler.removeMessages(DOWNLOAD_XTRA_DATA);
                mHandler.sendMessageDelayed(Message.obtain(mHandler, DOWNLOAD_XTRA_DATA), RETRY_INTERVAL);
            }
        } else {
            // try again later
            mHandler.removeMessages(DOWNLOAD_XTRA_DATA);
@@ -1460,7 +1464,7 @@ public class GpsLocationProvider implements LocationProviderInterface {
    // XTRA Support
    private native void native_inject_time(long time, long timeReference, int uncertainty);
    private native boolean native_supports_xtra();
    private native void native_inject_xtra_data(byte[] data, int length);
    private native boolean native_inject_xtra_data(byte[] data, int length);

    // DEBUG Support
    private native String native_get_internal_state();