diff options
| author | 2011-08-04 07:39:03 -0700 | |
|---|---|---|
| committer | 2011-08-04 07:39:03 -0700 | |
| commit | 8f5dd9ad3f98d97d2862b57ba8cd961d2201e40c (patch) | |
| tree | 0441ee5839e58c068b025f486f6d8a326e5bad6e | |
| parent | 9b0c6beed2cd5463655712ad80ed160c08611ff8 (diff) | |
| parent | a5fe6b2efee02ab11c35e80ec50fec62be227273 (diff) | |
Merge "GPS Provider Service changes"
| -rwxr-xr-x | services/java/com/android/server/location/GpsLocationProvider.java | 35 | ||||
| -rwxr-xr-x | services/jni/com_android_server_location_GpsLocationProvider.cpp | 12 |
2 files changed, 43 insertions, 4 deletions
diff --git a/services/java/com/android/server/location/GpsLocationProvider.java b/services/java/com/android/server/location/GpsLocationProvider.java index 53f08e176c30..9350c7d8773d 100755 --- a/services/java/com/android/server/location/GpsLocationProvider.java +++ b/services/java/com/android/server/location/GpsLocationProvider.java @@ -22,6 +22,7 @@ import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; +import android.database.Cursor; import android.location.Criteria; import android.location.IGpsStatusListener; import android.location.IGpsStatusProvider; @@ -33,6 +34,7 @@ import android.location.LocationProvider; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.net.SntpClient; +import android.net.Uri; import android.os.Binder; import android.os.Bundle; import android.os.Handler; @@ -46,6 +48,7 @@ import android.os.ServiceManager; import android.os.SystemClock; import android.os.WorkSource; import android.provider.Settings; +import android.provider.Telephony.Carriers; import android.provider.Telephony.Sms.Intents; import android.telephony.SmsMessage; import android.telephony.TelephonyManager; @@ -490,8 +493,17 @@ public class GpsLocationProvider implements LocationProviderInterface { } if (info != null) { + boolean dataEnabled = Settings.Secure.getInt(mContext.getContentResolver(), + Settings.Secure.MOBILE_DATA, 1) == 1; + boolean networkAvailable = info.isAvailable() && dataEnabled; + String defaultApn = getSelectedApn(); + if (defaultApn == null) { + defaultApn = "dummy-apn"; + } + native_update_network_state(info.isConnected(), info.getType(), - info.isRoaming(), info.getExtraInfo()); + info.isRoaming(), networkAvailable, + info.getExtraInfo(), defaultApn); } if (info != null && info.getType() == ConnectivityManager.TYPE_MOBILE_SUPL @@ -1578,6 +1590,25 @@ public class GpsLocationProvider implements LocationProviderInterface { } } + private String getSelectedApn() { + Uri uri = Uri.parse("content://telephony/carriers/preferapn"); + String apn = null; + + Cursor cursor = mContext.getContentResolver().query(uri, new String[] {"apn"}, + null, null, Carriers.DEFAULT_SORT_ORDER); + + if (null != cursor) { + try { + if (cursor.moveToFirst()) { + apn = cursor.getString(0); + } + } finally { + cursor.close(); + } + } + return apn; + } + // for GPS SV statistics private static final int MAX_SVS = 32; private static final int EPHEMERIS_MASK = 0; @@ -1636,5 +1667,5 @@ public class GpsLocationProvider implements LocationProviderInterface { private native void native_agps_set_id(int type, String setid); private native void native_update_network_state(boolean connected, int type, - boolean roaming, String extraInfo); + boolean roaming, boolean available, String extraInfo, String defaultAPN); } diff --git a/services/jni/com_android_server_location_GpsLocationProvider.cpp b/services/jni/com_android_server_location_GpsLocationProvider.cpp index d0e8e57667da..c18a6fcf4ea1 100755 --- a/services/jni/com_android_server_location_GpsLocationProvider.cpp +++ b/services/jni/com_android_server_location_GpsLocationProvider.cpp @@ -533,7 +533,7 @@ static jstring android_location_GpsLocationProvider_get_internal_state(JNIEnv* e } static void android_location_GpsLocationProvider_update_network_state(JNIEnv* env, jobject obj, - jboolean connected, int type, jboolean roaming, jstring extraInfo) + jboolean connected, int type, jboolean roaming, jboolean available, jstring extraInfo, jstring apn) { if (sAGpsRilInterface && sAGpsRilInterface->update_network_state) { @@ -544,6 +544,14 @@ static void android_location_GpsLocationProvider_update_network_state(JNIEnv* en } else { sAGpsRilInterface->update_network_state(connected, type, roaming, NULL); } + + // update_network_availability callback was not included in original AGpsRilInterface + if (sAGpsRilInterface->size >= sizeof(AGpsRilInterface) + && sAGpsRilInterface->update_network_availability) { + const char *c_apn = env->GetStringUTFChars(apn, NULL); + sAGpsRilInterface->update_network_availability(available, c_apn); + env->ReleaseStringUTFChars(apn, c_apn); + } } } @@ -572,7 +580,7 @@ static JNINativeMethod sMethods[] = { {"native_send_ni_response", "(II)V", (void*)android_location_GpsLocationProvider_send_ni_response}, {"native_agps_ni_message", "([BI)V", (void *)android_location_GpsLocationProvider_agps_send_ni_message}, {"native_get_internal_state", "()Ljava/lang/String;", (void*)android_location_GpsLocationProvider_get_internal_state}, - {"native_update_network_state", "(ZIZLjava/lang/String;)V", (void*)android_location_GpsLocationProvider_update_network_state }, + {"native_update_network_state", "(ZIZZLjava/lang/String;Ljava/lang/String;)V", (void*)android_location_GpsLocationProvider_update_network_state }, }; int register_android_server_location_GpsLocationProvider(JNIEnv* env) |