Merge "Made paste work in ExtractEditText" into gingerbread
diff --git a/docs/html/sitemap.txt b/docs/html/sitemap.txt
index d5be8f1..7a0b8ac 100644
--- a/docs/html/sitemap.txt
+++ b/docs/html/sitemap.txt
@@ -164,6 +164,11 @@
http://developer.android.com/guide/practices/design/performance.html
http://developer.android.com/guide/practices/design/responsiveness.html
http://developer.android.com/guide/practices/design/seamlessness.html
+http://developer.android.com/guide/webapps/targetting.html
+http://developer.android.com/guide/webapps/webview.html
+http://developer.android.com/guide/webapps/debugging.html
+http://developer.android.com/guide/webapps/best-practices.html
+http://developer.android.com/guide/topics/admin/device-admin.html
http://developer.android.com/guide/appendix/api-levels.html
http://developer.android.com/guide/appendix/media-formats.html
http://developer.android.com/guide/appendix/g-app-intents.html
diff --git a/services/java/com/android/server/location/GpsLocationProvider.java b/services/java/com/android/server/location/GpsLocationProvider.java
index e9eb4f0..87271e7 100755
--- a/services/java/com/android/server/location/GpsLocationProvider.java
+++ b/services/java/com/android/server/location/GpsLocationProvider.java
@@ -1228,6 +1228,7 @@
private void reportAGpsStatus(int type, int status) {
switch (status) {
case GPS_REQUEST_AGPS_DATA_CONN:
+ if (DEBUG) Log.d(TAG, "GPS_REQUEST_AGPS_DATA_CONN");
// Set mAGpsDataConnectionState before calling startUsingNetworkFeature
// to avoid a race condition with handleUpdateNetworkState()
mAGpsDataConnectionState = AGPS_DATA_CONNECTION_OPENING;
@@ -1250,6 +1251,7 @@
}
break;
case GPS_RELEASE_AGPS_DATA_CONN:
+ if (DEBUG) Log.d(TAG, "GPS_RELEASE_AGPS_DATA_CONN");
if (mAGpsDataConnectionState != AGPS_DATA_CONNECTION_CLOSED) {
mConnMgr.stopUsingNetworkFeature(
ConnectivityManager.TYPE_MOBILE, Phone.FEATURE_ENABLE_SUPL);
@@ -1258,13 +1260,13 @@
}
break;
case GPS_AGPS_DATA_CONNECTED:
- // Log.d(TAG, "GPS_AGPS_DATA_CONNECTED");
+ if (DEBUG) Log.d(TAG, "GPS_AGPS_DATA_CONNECTED");
break;
case GPS_AGPS_DATA_CONN_DONE:
- // Log.d(TAG, "GPS_AGPS_DATA_CONN_DONE");
+ if (DEBUG) Log.d(TAG, "GPS_AGPS_DATA_CONN_DONE");
break;
case GPS_AGPS_DATA_CONN_FAILED:
- // Log.d(TAG, "GPS_AGPS_DATA_CONN_FAILED");
+ if (DEBUG) Log.d(TAG, "GPS_AGPS_DATA_CONN_FAILED");
break;
}
}
diff --git a/services/jni/com_android_server_location_GpsLocationProvider.cpp b/services/jni/com_android_server_location_GpsLocationProvider.cpp
index 71c7aba..b9ceaa1 100755
--- a/services/jni/com_android_server_location_GpsLocationProvider.cpp
+++ b/services/jni/com_android_server_location_GpsLocationProvider.cpp
@@ -238,15 +238,25 @@
return interface;
}
+static const GpsInterface* GetGpsInterface() {
+ if (!sGpsInterface) {
+ sGpsInterface = get_gps_interface();
+ if (!sGpsInterface || sGpsInterface->init(&sGpsCallbacks) != 0) {
+ sGpsInterface = NULL;
+ return NULL;
+ }
+ }
+ return sGpsInterface;
+}
+
static const AGpsInterface* GetAGpsInterface()
{
- if (!sGpsInterface)
- sGpsInterface = get_gps_interface();
- if (!sGpsInterface || sGpsInterface->init(&sGpsCallbacks) != 0)
+ const GpsInterface* interface = GetGpsInterface();
+ if (!interface)
return NULL;
if (!sAGpsInterface) {
- sAGpsInterface = (const AGpsInterface*)sGpsInterface->get_extension(AGPS_INTERFACE);
+ sAGpsInterface = (const AGpsInterface*)interface->get_extension(AGPS_INTERFACE);
if (sAGpsInterface)
sAGpsInterface->init(&sAGpsCallbacks);
}
@@ -255,13 +265,12 @@
static const GpsNiInterface* GetNiInterface()
{
- if (!sGpsInterface)
- sGpsInterface = get_gps_interface();
- if (!sGpsInterface || sGpsInterface->init(&sGpsCallbacks) != 0)
+ const GpsInterface* interface = GetGpsInterface();
+ if (!interface)
return NULL;
if (!sGpsNiInterface) {
- sGpsNiInterface = (const GpsNiInterface*)sGpsInterface->get_extension(GPS_NI_INTERFACE);
+ sGpsNiInterface = (const GpsNiInterface*)interface->get_extension(GPS_NI_INTERFACE);
if (sGpsNiInterface)
sGpsNiInterface->init(&sGpsNiCallbacks);
}
@@ -270,13 +279,12 @@
static const AGpsRilInterface* GetAGpsRilInterface()
{
- if (!sGpsInterface)
- sGpsInterface = get_gps_interface();
- if (!sGpsInterface || sGpsInterface->init(&sGpsCallbacks) != 0)
+ const GpsInterface* interface = GetGpsInterface();
+ if (!interface)
return NULL;
if (!sAGpsRilInterface) {
- sAGpsRilInterface = (const AGpsRilInterface*)sGpsInterface->get_extension(AGPS_RIL_INTERFACE);
+ sAGpsRilInterface = (const AGpsRilInterface*)interface->get_extension(AGPS_RIL_INTERFACE);
if (sAGpsRilInterface)
sAGpsRilInterface->init(&sAGpsRilCallbacks);
}
@@ -297,9 +305,7 @@
}
static jboolean android_location_GpsLocationProvider_is_supported(JNIEnv* env, jclass clazz) {
- if (!sGpsInterface)
- sGpsInterface = get_gps_interface();
- return (sGpsInterface != NULL);
+ return (sGpsInterface != NULL || get_gps_interface() != NULL);
}
static jboolean android_location_GpsLocationProvider_init(JNIEnv* env, jobject obj)
@@ -308,13 +314,12 @@
if (!mCallbacksObj)
mCallbacksObj = env->NewGlobalRef(obj);
- if (!sGpsInterface)
- sGpsInterface = get_gps_interface();
- if (!sGpsInterface || sGpsInterface->init(&sGpsCallbacks) != 0)
+ const GpsInterface* interface = GetGpsInterface();
+ if (!interface)
return false;
if (!sGpsDebugInterface)
- sGpsDebugInterface = (const GpsDebugInterface*)sGpsInterface->get_extension(GPS_DEBUG_INTERFACE);
+ sGpsDebugInterface = (const GpsDebugInterface*)interface->get_extension(GPS_DEBUG_INTERFACE);
return true;
}
diff --git a/voip/java/com/android/server/sip/SipService.java b/voip/java/com/android/server/sip/SipService.java
index db1931b..ee554b5 100644
--- a/voip/java/com/android/server/sip/SipService.java
+++ b/voip/java/com/android/server/sip/SipService.java
@@ -92,6 +92,7 @@
new HashMap<String, ISipSession>();
private ConnectivityReceiver mConnectivityReceiver;
+ private boolean mScreenOn;
/**
* Starts the SIP service. Do nothing if the SIP API is not supported on the
@@ -111,11 +112,27 @@
mConnectivityReceiver = new ConnectivityReceiver();
context.registerReceiver(mConnectivityReceiver,
new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
+ context.registerReceiver(mScreenOnOffReceiver,
+ new IntentFilter(Intent.ACTION_SCREEN_ON));
+ context.registerReceiver(mScreenOnOffReceiver,
+ new IntentFilter(Intent.ACTION_SCREEN_OFF));
mTimer = new WakeupTimer(context);
mWifiOnly = SipManager.isSipWifiOnly(context);
}
+ BroadcastReceiver mScreenOnOffReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ String action = intent.getAction();
+ if (Intent.ACTION_SCREEN_OFF.equals(action)) {
+ mScreenOn = true;
+ } else if (Intent.ACTION_SCREEN_ON.equals(action)) {
+ mScreenOn = false;
+ }
+ }
+ };
+
private MyExecutor getExecutor() {
// create mExecutor lazily
if (mExecutor == null) mExecutor = new MyExecutor();
@@ -366,7 +383,10 @@
boolean wifiOff = (isWifi && !connected) || (wasWifi && !sameType);
boolean wifiOn = isWifi && connected;
if (wifiOff) {
- releaseWifiLock();
+ if (mScreenOn) releaseWifiLock();
+ // If the screen is off, we still keep the wifi lock in order
+ // to be able to reassociate with any available AP. Otherwise,
+ // the wifi driver could be stopped after 15 mins of idle time.
} else if (wifiOn) {
if (anyOpened()) grabWifiLock();
}