diff options
Diffstat (limited to 'WebCore/platform/android')
-rw-r--r-- | WebCore/platform/android/GeolocationServiceAndroid.cpp | 23 | ||||
-rw-r--r-- | WebCore/platform/android/GeolocationServiceAndroid.h | 3 |
2 files changed, 24 insertions, 2 deletions
diff --git a/WebCore/platform/android/GeolocationServiceAndroid.cpp b/WebCore/platform/android/GeolocationServiceAndroid.cpp index 024877e..20185ce 100644 --- a/WebCore/platform/android/GeolocationServiceAndroid.cpp +++ b/WebCore/platform/android/GeolocationServiceAndroid.cpp @@ -50,6 +50,7 @@ public: ~GeolocationServiceBridge(); void start(); + void stop(); void setEnableGps(bool enable); // Static wrapper functions to hide JNI nastiness. @@ -109,6 +110,7 @@ GeolocationServiceBridge::GeolocationServiceBridge(ListenerInterface* listener) GeolocationServiceBridge::~GeolocationServiceBridge() { + stop(); stopJavaImplementation(); } @@ -119,6 +121,13 @@ void GeolocationServiceBridge::start() javaGeolocationServiceClassMethodIDs[GEOLOCATION_SERVICE_METHOD_START]); } +void GeolocationServiceBridge::stop() +{ + ASSERT(m_javaGeolocationServiceObject); + getJNIEnv()->CallVoidMethod(m_javaGeolocationServiceObject, + javaGeolocationServiceClassMethodIDs[GEOLOCATION_SERVICE_METHOD_STOP]); +} + void GeolocationServiceBridge::setEnableGps(bool enable) { ASSERT(m_javaGeolocationServiceObject); @@ -253,8 +262,6 @@ void GeolocationServiceBridge::stopJavaImplementation() { // Called by GeolocationServiceAndroid on WebKit thread. ASSERT(m_javaGeolocationServiceObject); - getJNIEnv()->CallVoidMethod(m_javaGeolocationServiceObject, - javaGeolocationServiceClassMethodIDs[GEOLOCATION_SERVICE_METHOD_STOP]); getJNIEnv()->DeleteGlobalRef(m_javaGeolocationServiceObject); } @@ -320,6 +327,18 @@ void GeolocationServiceAndroid::stopUpdating() m_lastError = 0; } +void GeolocationServiceAndroid::suspend() +{ + ASSERT(m_javaBridge); + m_javaBridge->stop(); +} + +void GeolocationServiceAndroid::resume() +{ + ASSERT(m_javaBridge); + m_javaBridge->start(); +} + // Note that there is no guarantee that subsequent calls to this method offer a // more accurate or updated position. void GeolocationServiceAndroid::newPositionAvailable(PassRefPtr<Geoposition> position) diff --git a/WebCore/platform/android/GeolocationServiceAndroid.h b/WebCore/platform/android/GeolocationServiceAndroid.h index f233f9a..0eed8d7 100644 --- a/WebCore/platform/android/GeolocationServiceAndroid.h +++ b/WebCore/platform/android/GeolocationServiceAndroid.h @@ -51,6 +51,9 @@ namespace WebCore { virtual Geoposition* lastPosition() const { return m_lastPosition.get(); } virtual PositionError* lastError() const { return m_lastError.get(); } + virtual void suspend(); + virtual void resume(); + // Android-specific void newPositionAvailable(PassRefPtr<Geoposition>); void newErrorAvailable(PassRefPtr<PositionError>); |