1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */
3 /* This Source Code Form is subject to the terms of the Mozilla Public
4  * License, v. 2.0. If a copy of the MPL was not distributed with this
5  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6 
7 #include "Geolocation.h"
8 #include "GeolocationPosition.h"
9 #include "AndroidLocationProvider.h"
10 #include "mozilla/java/GeckoAppShellWrappers.h"
11 
12 using namespace mozilla;
13 
14 extern nsIGeolocationUpdate* gLocationCallback;
15 
NS_IMPL_ISUPPORTS(AndroidLocationProvider,nsIGeolocationProvider)16 NS_IMPL_ISUPPORTS(AndroidLocationProvider, nsIGeolocationProvider)
17 
18 AndroidLocationProvider::AndroidLocationProvider() {}
19 
~AndroidLocationProvider()20 AndroidLocationProvider::~AndroidLocationProvider() {
21   NS_IF_RELEASE(gLocationCallback);
22 }
23 
24 NS_IMETHODIMP
Startup()25 AndroidLocationProvider::Startup() {
26   if (java::GeckoAppShell::EnableLocation(true)) {
27     return NS_OK;
28   }
29   return NS_ERROR_FAILURE;
30 }
31 
32 NS_IMETHODIMP
Watch(nsIGeolocationUpdate * aCallback)33 AndroidLocationProvider::Watch(nsIGeolocationUpdate* aCallback) {
34   NS_IF_RELEASE(gLocationCallback);
35   gLocationCallback = aCallback;
36   NS_IF_ADDREF(gLocationCallback);
37   return NS_OK;
38 }
39 
40 NS_IMETHODIMP
Shutdown()41 AndroidLocationProvider::Shutdown() {
42   if (java::GeckoAppShell::EnableLocation(false)) {
43     return NS_OK;
44   }
45   return NS_ERROR_FAILURE;
46 }
47 
48 NS_IMETHODIMP
SetHighAccuracy(bool enable)49 AndroidLocationProvider::SetHighAccuracy(bool enable) {
50   java::GeckoAppShell::EnableLocationHighAccuracy(enable);
51   return NS_OK;
52 }
53