location_provider_android.cc 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. // Copyright (c) 2012 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "services/device/geolocation/location_provider_android.h"
  5. #include <memory>
  6. #include "base/bind.h"
  7. #include "services/device/geolocation/location_api_adapter_android.h"
  8. namespace device {
  9. class GeolocationManager;
  10. LocationProviderAndroid::LocationProviderAndroid() = default;
  11. LocationProviderAndroid::~LocationProviderAndroid() {
  12. DCHECK(thread_checker_.CalledOnValidThread());
  13. StopProvider();
  14. }
  15. void LocationProviderAndroid::NotifyNewGeoposition(
  16. const mojom::Geoposition& position) {
  17. DCHECK(thread_checker_.CalledOnValidThread());
  18. last_position_ = position;
  19. if (!callback_.is_null())
  20. callback_.Run(this, position);
  21. }
  22. void LocationProviderAndroid::SetUpdateCallback(
  23. const LocationProviderUpdateCallback& callback) {
  24. DCHECK(thread_checker_.CalledOnValidThread());
  25. callback_ = callback;
  26. }
  27. void LocationProviderAndroid::StartProvider(bool high_accuracy) {
  28. DCHECK(thread_checker_.CalledOnValidThread());
  29. LocationApiAdapterAndroid::GetInstance()->Start(
  30. base::BindRepeating(&LocationProviderAndroid::NotifyNewGeoposition,
  31. weak_ptr_factory_.GetWeakPtr()),
  32. high_accuracy);
  33. }
  34. void LocationProviderAndroid::StopProvider() {
  35. DCHECK(thread_checker_.CalledOnValidThread());
  36. LocationApiAdapterAndroid::GetInstance()->Stop();
  37. }
  38. const mojom::Geoposition& LocationProviderAndroid::GetPosition() {
  39. DCHECK(thread_checker_.CalledOnValidThread());
  40. return last_position_;
  41. }
  42. void LocationProviderAndroid::OnPermissionGranted() {
  43. DCHECK(thread_checker_.CalledOnValidThread());
  44. // Nothing to do here.
  45. }
  46. std::unique_ptr<LocationProvider> NewSystemLocationProvider(
  47. scoped_refptr<base::SingleThreadTaskRunner> main_task_runner,
  48. GeolocationManager* geolocation_manager) {
  49. return std::make_unique<LocationProviderAndroid>();
  50. }
  51. } // namespace device