From de8130c1fd5ba90c5883e2891e64e8bb04ad4ce1 Mon Sep 17 00:00:00 2001 From: Harini Date: Sun, 6 Oct 2024 15:46:42 -0700 Subject: [PATCH 01/15] find place changes --- CppSamples/Search/FindPlace/FindPlace.cpp | 35 ++++++++++++-- CppSamples/Search/FindPlace/FindPlace.h | 2 + CppSamples/Search/FindPlace/FindPlace.pro | 6 ++- CppSamples/Search/FindPlace/FindPlace.qml | 22 +++++++++ CppSamples/Search/FindPlace/ios/Info.plist | 55 ++++++++++++++++++++++ CppSamples/Search/FindPlace/mac/Info.plist | 31 ++++++++++++ 6 files changed, 147 insertions(+), 4 deletions(-) create mode 100644 CppSamples/Search/FindPlace/ios/Info.plist create mode 100644 CppSamples/Search/FindPlace/mac/Info.plist diff --git a/CppSamples/Search/FindPlace/FindPlace.cpp b/CppSamples/Search/FindPlace/FindPlace.cpp index dbf84ee0ce..f4f07106d8 100644 --- a/CppSamples/Search/FindPlace/FindPlace.cpp +++ b/CppSamples/Search/FindPlace/FindPlace.cpp @@ -52,6 +52,11 @@ #include #include +#if (QT_VERSION >= QT_VERSION_CHECK(6, 6, 0)) || defined(Q_OS_IOS) || defined(Q_OS_MACOS) || defined(Q_OS_ANDROID) +#define PERMISSIONS_PLATFORM +#include +#endif + using namespace Esri::ArcGISRuntime; FindPlace::FindPlace(QQuickItem* parent /* = nullptr */): @@ -107,9 +112,9 @@ void FindPlace::connectSignals() if (drawStatus != DrawStatus::Completed || m_mapView->locationDisplay()->isStarted()) return; - // turn on the location display - m_mapView->locationDisplay()->setAutoPanMode(LocationDisplayAutoPanMode::Recenter); - m_mapView->locationDisplay()->start(); + // turn on the location display + m_mapView->locationDisplay()->setAutoPanMode(LocationDisplayAutoPanMode::Recenter); + startLocationDisplay(); }); connect(m_mapView, &MapQuickView::mousePressed, this, [this](QMouseEvent& /*event*/) @@ -143,6 +148,30 @@ void FindPlace::connectSignals() }); } +void FindPlace::startLocationDisplay() +{ +#ifdef PERMISSIONS_PLATFORM + QLocationPermission locationPermission{}; + locationPermission.setAccuracy(QLocationPermission::Accuracy::Precise); + locationPermission.setAvailability(QLocationPermission::Availability::WhenInUse); + switch (qApp->checkPermission(locationPermission)) + { + case Qt::PermissionStatus::Undetermined: + qApp->requestPermission(locationPermission, this, &FindPlace::startLocationDisplay); + return; + case Qt::PermissionStatus::Granted: + // turn on the location display + m_mapView->locationDisplay()->start(); + return; + case Qt::PermissionStatus::Denied: + emit locationPermissionDenied(); + return; + } +#else + m_mapView->locationDisplay()->start(); +#endif +} + void FindPlace::addGraphicsOverlay() { // add a graphics overlay to the mapview diff --git a/CppSamples/Search/FindPlace/FindPlace.h b/CppSamples/Search/FindPlace/FindPlace.h index 23232ef615..e20bb3d45e 100644 --- a/CppSamples/Search/FindPlace/FindPlace.h +++ b/CppSamples/Search/FindPlace/FindPlace.h @@ -69,6 +69,7 @@ class FindPlace : public QQuickItem void hideCallout(); void showCallout(); void showExtentButton(); + void locationPermissionDenied(); private: void addGraphicsOverlay(); @@ -78,6 +79,7 @@ class FindPlace : public QQuickItem void setPoiTextHasFocus(bool hasFocus); Esri::ArcGISRuntime::GeocodeParameters createParameters(); void onGeocodingCompleted_(const QList& results); + void startLocationDisplay(); private: Esri::ArcGISRuntime::Map* m_map = nullptr; diff --git a/CppSamples/Search/FindPlace/FindPlace.pro b/CppSamples/Search/FindPlace/FindPlace.pro index 79142c6e1f..f223da44d5 100644 --- a/CppSamples/Search/FindPlace/FindPlace.pro +++ b/CppSamples/Search/FindPlace/FindPlace.pro @@ -64,7 +64,11 @@ ios { OTHER_FILES += \ $$PWD/Info.plist - QMAKE_INFO_PLIST = $$PWD/Info.plist + QMAKE_INFO_PLIST = $$PWD/ios/Info.plist +} + +macx { + QMAKE_INFO_PLIST = $$PWD/mac/Info.plist } android { diff --git a/CppSamples/Search/FindPlace/FindPlace.qml b/CppSamples/Search/FindPlace/FindPlace.qml index 48d3140de6..41de14df84 100644 --- a/CppSamples/Search/FindPlace/FindPlace.qml +++ b/CppSamples/Search/FindPlace/FindPlace.qml @@ -19,6 +19,7 @@ import QtQuick.Controls import QtPositioning import Esri.ArcGISRuntime.Toolkit import Esri.Samples +import QtQuick.Dialogs FindPlaceSample { id: findPlaceSample @@ -151,4 +152,25 @@ FindPlaceSample { callout.dismiss(); } } + + Connections { + target: findPlaceSample + function onLocationPermissionDenied() { + permissionDeniedDialog.open() + } + } + + Dialog { + id: permissionDeniedDialog + title: "Location Permission Denied" + modal: true + standardButtons: Dialog.Ok + x: (parent.width - width) / 2 + y: (parent.height - height) / 2 + + Text { + text: "This application requires location permissions." + color: "white" + } + } } diff --git a/CppSamples/Search/FindPlace/ios/Info.plist b/CppSamples/Search/FindPlace/ios/Info.plist new file mode 100644 index 0000000000..da9cbe0006 --- /dev/null +++ b/CppSamples/Search/FindPlace/ios/Info.plist @@ -0,0 +1,55 @@ + + + + + CFBundleDisplayName + FindPlace + CFBundleExecutable + FindPlace + CFBundleGetInfoString + ArcGIS + CFBundleIcons~ipad + + CFBundleIdentifier + com.esri.${PRODUCT_NAME:rfc1034identifier} + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + NOTE + This app is cool + UIFileSharingEnabled + FALSE + UIRequiresPersistentWiFi + NO + LSRequiresIPhoneOS + + NSLocationWhenInUseUsageDescription + Location required for application + NSLocationAlwaysAndWhenInUseUsageDescription + Location required for application + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UILaunchStoryboardName + LaunchScreen + + + diff --git a/CppSamples/Search/FindPlace/mac/Info.plist b/CppSamples/Search/FindPlace/mac/Info.plist new file mode 100644 index 0000000000..d3fa3cacd9 --- /dev/null +++ b/CppSamples/Search/FindPlace/mac/Info.plist @@ -0,0 +1,31 @@ + + + + + CFBundleDisplayName + FindPlace + CFBundleExecutable + FindPlace + CFBundleGetInfoString + ArcGIS + CFBundleIdentifier + com.esri.FindPlace + CFBundleName + FindPlace + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + NSLocationUsageDescription + Location required for application + NSLocationWhenInUseUsageDescription + Location required for application + NSLocationAlwaysAndWhenInUseUsageDescription + Location required for application + + + From 43d235320d85a8b0abb17ac975e7b7f814f9f0ca Mon Sep 17 00:00:00 2001 From: Harini Date: Sun, 6 Oct 2024 15:55:13 -0700 Subject: [PATCH 02/15] indoor positioning changes --- ...owDeviceLocationUsingIndoorPositioning.cpp | 51 ++++++++++++++++- ...ShowDeviceLocationUsingIndoorPositioning.h | 4 ++ ...owDeviceLocationUsingIndoorPositioning.pro | 6 +- ...owDeviceLocationUsingIndoorPositioning.qml | 43 +++++++++++++++ .../ios/Info.plist | 55 +++++++++++++++++++ .../mac/Info.plist | 33 +++++++++++ 6 files changed, 190 insertions(+), 2 deletions(-) create mode 100644 CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ios/Info.plist create mode 100644 CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/mac/Info.plist diff --git a/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ShowDeviceLocationUsingIndoorPositioning.cpp b/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ShowDeviceLocationUsingIndoorPositioning.cpp index 74200a01ae..5b7387f42d 100644 --- a/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ShowDeviceLocationUsingIndoorPositioning.cpp +++ b/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ShowDeviceLocationUsingIndoorPositioning.cpp @@ -33,6 +33,11 @@ #include "MapViewTypes.h" #include "PortalItem.h" +#if (QT_VERSION >= QT_VERSION_CHECK(6, 6, 0)) || defined(Q_OS_IOS) || defined(Q_OS_MACOS) || defined(Q_OS_ANDROID) +#define PERMISSIONS_PLATFORM +#include +#endif + using namespace Esri::ArcGISRuntime; namespace { @@ -84,6 +89,48 @@ void ShowDeviceLocationUsingIndoorPositioning::setMapView(MapQuickView* mapView) emit mapViewChanged(); } +void ShowDeviceLocationUsingIndoorPositioning::startBluetoothPermision() +{ +#ifdef PERMISSIONS_PLATFORM + QBluetoothPermission bluetoothPermission{}; + switch (qApp->checkPermission(bluetoothPermission)) + { + case Qt::PermissionStatus::Undetermined: + qApp->requestPermission(bluetoothPermission, this, &ShowDeviceLocationUsingIndoorPositioning::startBluetoothPermision); + return; + case Qt::PermissionStatus::Granted: + return; + case Qt::PermissionStatus::Denied: + emit bluetoothPermissionDenied(); + return; + } +#endif +} + +void ShowDeviceLocationUsingIndoorPositioning::startLocationDisplay() +{ +#ifdef PERMISSIONS_PLATFORM + QLocationPermission locationPermission{}; + locationPermission.setAccuracy(QLocationPermission::Accuracy::Precise); + locationPermission.setAvailability(QLocationPermission::Availability::WhenInUse); + switch (qApp->checkPermission(locationPermission)) + { + case Qt::PermissionStatus::Undetermined: + qApp->requestPermission(locationPermission, this, &ShowDeviceLocationUsingIndoorPositioning::startLocationDisplay); + return; + case Qt::PermissionStatus::Granted: + // turn on the location display + m_mapView->locationDisplay()->start(); + return; + case Qt::PermissionStatus::Denied: + emit locationPermissionDenied(); + return; + } +#else + m_mapView->locationDisplay()->start(); +#endif +} + // This function uses a helper class `IndoorsLocationDataSourceCreator` to construct the IndoorsLocationDataSource void ShowDeviceLocationUsingIndoorPositioning::setupIndoorsLocationDataSource() { @@ -95,7 +142,9 @@ void ShowDeviceLocationUsingIndoorPositioning::setupIndoorsLocationDataSource() m_mapView->locationDisplay()->setDataSource(indoorsLDS); m_mapView->locationDisplay()->setAutoPanMode(LocationDisplayAutoPanMode::Navigation); - m_mapView->locationDisplay()->start(); + + startBluetoothPermision(); + startLocationDisplay(); }); indoorsLocationDataSourceCreator->createIndoorsLocationDataSource(m_map, positioningTableName, pathwaysLayerName); diff --git a/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ShowDeviceLocationUsingIndoorPositioning.h b/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ShowDeviceLocationUsingIndoorPositioning.h index 46c988fd4d..ca5e4631dc 100644 --- a/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ShowDeviceLocationUsingIndoorPositioning.h +++ b/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ShowDeviceLocationUsingIndoorPositioning.h @@ -52,6 +52,8 @@ class ShowDeviceLocationUsingIndoorPositioning : public QObject signals: void mapViewChanged(); void locationPropertiesChanged(); + void locationPermissionDenied(); + void bluetoothPermissionDenied(); private: Esri::ArcGISRuntime::MapQuickView* mapView() const; @@ -61,6 +63,8 @@ class ShowDeviceLocationUsingIndoorPositioning : public QObject void setupIndoorsLocationDataSource(); void locationChangedHandler(const Esri::ArcGISRuntime::Location& loc); void changeFloorDisplay(); + void startLocationDisplay(); + void startBluetoothPermision(); Esri::ArcGISRuntime::Map* m_map = nullptr; Esri::ArcGISRuntime::MapQuickView* m_mapView = nullptr; diff --git a/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ShowDeviceLocationUsingIndoorPositioning.pro b/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ShowDeviceLocationUsingIndoorPositioning.pro index be67161b40..52895d81d8 100644 --- a/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ShowDeviceLocationUsingIndoorPositioning.pro +++ b/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ShowDeviceLocationUsingIndoorPositioning.pro @@ -57,7 +57,11 @@ ios { OTHER_FILES += \ $$PWD/Info.plist - QMAKE_INFO_PLIST = $$PWD/Info.plist + QMAKE_INFO_PLIST = $$PWD/ios/Info.plist +} + +macx { + QMAKE_INFO_PLIST = $$PWD/mac/Info.plist } android { diff --git a/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ShowDeviceLocationUsingIndoorPositioning.qml b/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ShowDeviceLocationUsingIndoorPositioning.qml index 052cf54422..4c7cfed477 100644 --- a/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ShowDeviceLocationUsingIndoorPositioning.qml +++ b/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ShowDeviceLocationUsingIndoorPositioning.qml @@ -18,6 +18,7 @@ import QtQuick import QtQuick.Controls import QtQuick.Layouts import Esri.Samples +import QtQuick.Dialogs Item { @@ -80,4 +81,46 @@ Item { id: model mapView: view } + + Connections { + target: model + function onLocationPermissionDenied() { + locationPermissionDeniedDialog.open() + } + } + + Dialog { + id: locationPermissionDeniedDialog + title: "Location Permission Denied" + modal: true + standardButtons: Dialog.Ok + x: (parent.width - width) / 2 + y: (parent.height - height) / 2 + + Text { + text: "This application requires location permission." + color: "white" + } + } + + Connections { + target: model + function onBluetoothPermissionDenied() { + bluetoothPermissionDeniedDialog.open() + } + } + + Dialog { + id: bluetoothPermissionDeniedDialog + title: "Bluetooth Permission Denied" + modal: true + standardButtons: Dialog.Ok + x: (parent.width - width) / 2 + y: (parent.height - height) / 2 + + Text { + text: "This application requires bluetooth permission." + color: "white" + } + } } diff --git a/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ios/Info.plist b/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ios/Info.plist new file mode 100644 index 0000000000..340628fcbd --- /dev/null +++ b/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ios/Info.plist @@ -0,0 +1,55 @@ + + + + + CFBundleDisplayName + ShowDeviceLocationUsingIndoorPositioning + CFBundleExecutable + ShowDeviceLocationUsingIndoorPositioning + CFBundleGetInfoString + ArcGIS + CFBundleIcons~ipad + + CFBundleIdentifier + com.esri.${PRODUCT_NAME:rfc1034identifier} + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + NOTE + This app is cool + UIFileSharingEnabled + FALSE + UIRequiresPersistentWiFi + NO + LSRequiresIPhoneOS + + NSLocationWhenInUseUsageDescription + Location required for application + UISupportedInterfaceOrientations + NSBluetoothAlwaysUsageDescription + Bluetooth access is required for Indoor Positioning + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UILaunchStoryboardName + LaunchScreen + + + diff --git a/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/mac/Info.plist b/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/mac/Info.plist new file mode 100644 index 0000000000..3b3efb3839 --- /dev/null +++ b/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/mac/Info.plist @@ -0,0 +1,33 @@ + + + + + CFBundleDisplayName + FindPlace + CFBundleExecutable + FindPlace + CFBundleGetInfoString + ArcGIS + CFBundleIdentifier + com.esri.FindPlace + CFBundleName + FindPlace + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + NSLocationUsageDescription + Location required for application + NSLocationWhenInUseUsageDescription + Location required for application + NSLocationAlwaysAndWhenInUseUsageDescription + Location required for application + NSBluetoothAlwaysUsageDescription + Bluetooth access is required for Indoor Positioning + + + From 7f9d59c213a19b777cd162b1ba266541570ebe48 Mon Sep 17 00:00:00 2001 From: Harini Date: Sun, 6 Oct 2024 21:20:20 -0700 Subject: [PATCH 03/15] fixes --- ...owDeviceLocationUsingIndoorPositioning.cpp | 6 +- .../ios/Info.plist | 99 ++++++++++--------- CppSamples/Search/FindPlace/FindPlace.cpp | 8 +- 3 files changed, 57 insertions(+), 56 deletions(-) diff --git a/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ShowDeviceLocationUsingIndoorPositioning.cpp b/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ShowDeviceLocationUsingIndoorPositioning.cpp index 5b7387f42d..ffde32802a 100644 --- a/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ShowDeviceLocationUsingIndoorPositioning.cpp +++ b/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ShowDeviceLocationUsingIndoorPositioning.cpp @@ -84,6 +84,9 @@ void ShowDeviceLocationUsingIndoorPositioning::setMapView(MapQuickView* mapView) m_mapView = mapView; m_mapView->setMap(m_map); + startBluetoothPermision(); + startLocationDisplay(); + setupIndoorsLocationDataSource(); emit mapViewChanged(); @@ -142,9 +145,6 @@ void ShowDeviceLocationUsingIndoorPositioning::setupIndoorsLocationDataSource() m_mapView->locationDisplay()->setDataSource(indoorsLDS); m_mapView->locationDisplay()->setAutoPanMode(LocationDisplayAutoPanMode::Navigation); - - startBluetoothPermision(); - startLocationDisplay(); }); indoorsLocationDataSourceCreator->createIndoorsLocationDataSource(m_map, positioningTableName, pathwaysLayerName); diff --git a/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ios/Info.plist b/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ios/Info.plist index 340628fcbd..dad491cbc3 100644 --- a/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ios/Info.plist +++ b/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ios/Info.plist @@ -2,54 +2,55 @@ - CFBundleDisplayName - ShowDeviceLocationUsingIndoorPositioning - CFBundleExecutable - ShowDeviceLocationUsingIndoorPositioning - CFBundleGetInfoString - ArcGIS - CFBundleIcons~ipad - - CFBundleIdentifier - com.esri.${PRODUCT_NAME:rfc1034identifier} - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1.0 - NOTE - This app is cool - UIFileSharingEnabled - FALSE - UIRequiresPersistentWiFi - NO - LSRequiresIPhoneOS - - NSLocationWhenInUseUsageDescription - Location required for application - UISupportedInterfaceOrientations - NSBluetoothAlwaysUsageDescription - Bluetooth access is required for Indoor Positioning - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UILaunchStoryboardName - LaunchScreen + CFBundleDisplayName + ShowDeviceLocationUsingIndoorPositioning + CFBundleExecutable + ShowDeviceLocationUsingIndoorPositioning + CFBundleGetInfoString + ArcGIS + CFBundleIcons~ipad + + CFBundleIdentifier + com.esri.${PRODUCT_NAME:rfc1034identifier} + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + NOTE + This app is cool + UIFileSharingEnabled + FALSE + UIRequiresPersistentWiFi + NO + LSRequiresIPhoneOS + + NSLocationWhenInUseUsageDescription + Location required for application + NSLocationAlwaysAndWhenInUseUsageDescription + Location required for application + NSBluetoothAlwaysUsageDescription + Bluetooth access is required for Indoor Positioning + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UILaunchStoryboardName + LaunchScreen - diff --git a/CppSamples/Search/FindPlace/FindPlace.cpp b/CppSamples/Search/FindPlace/FindPlace.cpp index f4f07106d8..6e19272fa2 100644 --- a/CppSamples/Search/FindPlace/FindPlace.cpp +++ b/CppSamples/Search/FindPlace/FindPlace.cpp @@ -101,6 +101,10 @@ void FindPlace::componentComplete() m_mapView->calloutData()->setVisible(false); m_calloutData = m_mapView->calloutData(); + // turn on the location display + startLocationDisplay(); + m_mapView->locationDisplay()->setAutoPanMode(LocationDisplayAutoPanMode::Recenter); + // connect mapview signals connectSignals(); } @@ -111,10 +115,6 @@ void FindPlace::connectSignals() { if (drawStatus != DrawStatus::Completed || m_mapView->locationDisplay()->isStarted()) return; - - // turn on the location display - m_mapView->locationDisplay()->setAutoPanMode(LocationDisplayAutoPanMode::Recenter); - startLocationDisplay(); }); connect(m_mapView, &MapQuickView::mousePressed, this, [this](QMouseEvent& /*event*/) From 53fe261cbfb0e19d4e072519b2c9297619634fa3 Mon Sep 17 00:00:00 2001 From: Harini Date: Sun, 6 Oct 2024 21:24:17 -0700 Subject: [PATCH 04/15] fix --- CppSamples/Search/FindPlace/ios/Info.plist | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/CppSamples/Search/FindPlace/ios/Info.plist b/CppSamples/Search/FindPlace/ios/Info.plist index da9cbe0006..15cffaed6e 100644 --- a/CppSamples/Search/FindPlace/ios/Info.plist +++ b/CppSamples/Search/FindPlace/ios/Info.plist @@ -25,15 +25,15 @@ NOTE This app is cool UIFileSharingEnabled - FALSE + FALSE UIRequiresPersistentWiFi NO LSRequiresIPhoneOS NSLocationWhenInUseUsageDescription - Location required for application - NSLocationAlwaysAndWhenInUseUsageDescription - Location required for application + Location required for application + NSLocationAlwaysAndWhenInUseUsageDescription + Location required for application UISupportedInterfaceOrientations UIInterfaceOrientationPortrait From 09c57fdf441261bb5ee9c81bb30caa7ea7bce1b6 Mon Sep 17 00:00:00 2001 From: Harini Date: Wed, 9 Oct 2024 09:25:59 -0700 Subject: [PATCH 05/15] android changes --- ...owDeviceLocationUsingIndoorPositioning.cpp | 30 +++++++++++-------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ShowDeviceLocationUsingIndoorPositioning.cpp b/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ShowDeviceLocationUsingIndoorPositioning.cpp index ffde32802a..652ba055f1 100644 --- a/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ShowDeviceLocationUsingIndoorPositioning.cpp +++ b/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ShowDeviceLocationUsingIndoorPositioning.cpp @@ -116,21 +116,25 @@ void ShowDeviceLocationUsingIndoorPositioning::startLocationDisplay() QLocationPermission locationPermission{}; locationPermission.setAccuracy(QLocationPermission::Accuracy::Precise); locationPermission.setAvailability(QLocationPermission::Availability::WhenInUse); - switch (qApp->checkPermission(locationPermission)) - { - case Qt::PermissionStatus::Undetermined: - qApp->requestPermission(locationPermission, this, &ShowDeviceLocationUsingIndoorPositioning::startLocationDisplay); - return; - case Qt::PermissionStatus::Granted: - // turn on the location display + #if !defined(Q_OS_ANDROID) + switch (qApp->checkPermission(locationPermission)) + { + case Qt::PermissionStatus::Undetermined: + qApp->requestPermission(locationPermission, this, &ShowDeviceLocationUsingIndoorPositioning::startLocationDisplay); + return; + case Qt::PermissionStatus::Granted: + // turn on the location display + m_mapView->locationDisplay()->start(); + return; + case Qt::PermissionStatus::Denied: + emit locationPermissionDenied(); + return; + } + #else m_mapView->locationDisplay()->start(); - return; - case Qt::PermissionStatus::Denied: - emit locationPermissionDenied(); - return; - } + #endif #else - m_mapView->locationDisplay()->start(); + m_mapView->locationDisplay()->start(); #endif } From 23e4a499ae8d5d080d1bb4214d9104beb6fd2d72 Mon Sep 17 00:00:00 2001 From: Harini Date: Wed, 9 Oct 2024 11:31:50 -0700 Subject: [PATCH 06/15] add comment --- .../ShowDeviceLocationUsingIndoorPositioning.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ShowDeviceLocationUsingIndoorPositioning.cpp b/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ShowDeviceLocationUsingIndoorPositioning.cpp index 652ba055f1..f7a201be57 100644 --- a/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ShowDeviceLocationUsingIndoorPositioning.cpp +++ b/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ShowDeviceLocationUsingIndoorPositioning.cpp @@ -116,6 +116,7 @@ void ShowDeviceLocationUsingIndoorPositioning::startLocationDisplay() QLocationPermission locationPermission{}; locationPermission.setAccuracy(QLocationPermission::Accuracy::Precise); locationPermission.setAvailability(QLocationPermission::Availability::WhenInUse); + // Location requests together with bluetooth on Android #if !defined(Q_OS_ANDROID) switch (qApp->checkPermission(locationPermission)) { From 73f62577e602f9caa9985bb3c7934689488e2c64 Mon Sep 17 00:00:00 2001 From: Harini Date: Fri, 11 Oct 2024 10:01:56 -0700 Subject: [PATCH 07/15] update as per 6.5.6 --- .../ShowDeviceLocationUsingIndoorPositioning.cpp | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ShowDeviceLocationUsingIndoorPositioning.cpp b/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ShowDeviceLocationUsingIndoorPositioning.cpp index f7a201be57..9b18463a72 100644 --- a/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ShowDeviceLocationUsingIndoorPositioning.cpp +++ b/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ShowDeviceLocationUsingIndoorPositioning.cpp @@ -116,8 +116,6 @@ void ShowDeviceLocationUsingIndoorPositioning::startLocationDisplay() QLocationPermission locationPermission{}; locationPermission.setAccuracy(QLocationPermission::Accuracy::Precise); locationPermission.setAvailability(QLocationPermission::Availability::WhenInUse); - // Location requests together with bluetooth on Android - #if !defined(Q_OS_ANDROID) switch (qApp->checkPermission(locationPermission)) { case Qt::PermissionStatus::Undetermined: @@ -131,11 +129,6 @@ void ShowDeviceLocationUsingIndoorPositioning::startLocationDisplay() emit locationPermissionDenied(); return; } - #else - m_mapView->locationDisplay()->start(); - #endif -#else - m_mapView->locationDisplay()->start(); #endif } @@ -150,6 +143,7 @@ void ShowDeviceLocationUsingIndoorPositioning::setupIndoorsLocationDataSource() m_mapView->locationDisplay()->setDataSource(indoorsLDS); m_mapView->locationDisplay()->setAutoPanMode(LocationDisplayAutoPanMode::Navigation); + m_mapView->locationDisplay()->start(); }); indoorsLocationDataSourceCreator->createIndoorsLocationDataSource(m_map, positioningTableName, pathwaysLayerName); From 156c0c61c5dc0f173237034814a6fc2d8cc9a0a9 Mon Sep 17 00:00:00 2001 From: Harini Date: Fri, 11 Oct 2024 14:56:16 -0700 Subject: [PATCH 08/15] find place changes --- CppSamples/Search/FindPlace/FindPlace.cpp | 425 +++++++++++----------- CppSamples/Search/FindPlace/FindPlace.h | 100 ++--- 2 files changed, 262 insertions(+), 263 deletions(-) diff --git a/CppSamples/Search/FindPlace/FindPlace.cpp b/CppSamples/Search/FindPlace/FindPlace.cpp index 6e19272fa2..aacaa8c669 100644 --- a/CppSamples/Search/FindPlace/FindPlace.cpp +++ b/CppSamples/Search/FindPlace/FindPlace.cpp @@ -60,303 +60,302 @@ using namespace Esri::ArcGISRuntime; FindPlace::FindPlace(QQuickItem* parent /* = nullptr */): - QQuickItem(parent) + QQuickItem(parent) { } FindPlace::~FindPlace() { - m_mapView->locationDisplay()->stop(); + m_mapView->locationDisplay()->stop(); } void FindPlace::init() { - // Register the map view for QML - qmlRegisterType("Esri.Samples", 1, 0, "MapView"); - qmlRegisterType("Esri.Samples", 1, 0, "FindPlaceSample"); - qmlRegisterUncreatableType("Esri.Samples", 1, 0, "CalloutData", "CalloutData is an uncreatable type"); - qmlRegisterUncreatableType("Esri.Samples", 1, 0, "AbstractListModel", "AbstractListModel is uncreateable"); + // Register the map view for QML + qmlRegisterType("Esri.Samples", 1, 0, "MapView"); + qmlRegisterType("Esri.Samples", 1, 0, "FindPlaceSample"); + qmlRegisterUncreatableType("Esri.Samples", 1, 0, "CalloutData", "CalloutData is an uncreatable type"); + qmlRegisterUncreatableType("Esri.Samples", 1, 0, "AbstractListModel", "AbstractListModel is uncreateable"); } void FindPlace::componentComplete() { - QQuickItem::componentComplete(); + QQuickItem::componentComplete(); - // find QML MapView component - m_mapView = findChild("mapView"); + // find QML MapView component + m_mapView = findChild("mapView"); - // Create a map using the topographic basemap - m_map = new Map(BasemapStyle::ArcGISTopographic, this); + // Create a map using the topographic basemap + m_map = new Map(BasemapStyle::ArcGISTopographic, this); - // Set map to map view - m_mapView->setMap(m_map); + // Set map to map view + m_mapView->setMap(m_map); - // create the locator - createLocator(); + // create the locator + createLocator(); - // add the graphics overlay - addGraphicsOverlay(); + // add the graphics overlay + addGraphicsOverlay(); - // initialize callout - m_mapView->calloutData()->setVisible(false); - m_calloutData = m_mapView->calloutData(); + // initialize callout + m_mapView->calloutData()->setVisible(false); + m_calloutData = m_mapView->calloutData(); - // turn on the location display - startLocationDisplay(); - m_mapView->locationDisplay()->setAutoPanMode(LocationDisplayAutoPanMode::Recenter); + // start location permission + startLocationPermission(); - // connect mapview signals - connectSignals(); + // connect mapview signals + connectSignals(); } void FindPlace::connectSignals() { - connect(m_mapView, &MapQuickView::drawStatusChanged, this, [this](DrawStatus drawStatus) - { - if (drawStatus != DrawStatus::Completed || m_mapView->locationDisplay()->isStarted()) - return; - }); - - connect(m_mapView, &MapQuickView::mousePressed, this, [this](QMouseEvent& /*event*/) - { - emit hideSuggestionView(); - }); - - connect(m_mapView, &MapQuickView::viewpointChanged, this, [this]() - { - emit hideSuggestionView(); - if (m_graphicsOverlay->graphics()->size() > 0) - emit showExtentButton(); - }); - - // perform an identify operation on mouse clicked - connect(m_mapView, &MapQuickView::mouseClicked, this, [this](QMouseEvent& e) - { - emit hideCallout(); - m_mapView->identifyGraphicsOverlayAsync(m_graphicsOverlay, e.position(), 5, false, 1).then(this, [this] (IdentifyGraphicsOverlayResult* result) - { - if (result->graphics().length() == 0) - return; - - // display the callout with the identify result - Graphic* graphic = result->graphics().at(0); - m_calloutData->setGeoElement(graphic); - m_calloutData->setTitle(graphic->attributes()->attributeValue("ShortLabel").toString()); - m_calloutData->setDetail(graphic->attributes()->attributeValue("Place_addr").toString()); - emit showCallout(); - }); - }); + connect(m_mapView, &MapQuickView::drawStatusChanged, this, [this](DrawStatus drawStatus) + { + if (drawStatus != DrawStatus::Completed || m_mapView->locationDisplay()->isStarted()) + return; + + // turn on the location display + m_mapView->locationDisplay()->setAutoPanMode(LocationDisplayAutoPanMode::Recenter); + m_mapView->locationDisplay()->start(); + }); + + connect(m_mapView, &MapQuickView::mousePressed, this, [this](QMouseEvent& /*event*/) + { + emit hideSuggestionView(); + }); + + connect(m_mapView, &MapQuickView::viewpointChanged, this, [this]() + { + emit hideSuggestionView(); + if (m_graphicsOverlay->graphics()->size() > 0) + emit showExtentButton(); + }); + + // perform an identify operation on mouse clicked + connect(m_mapView, &MapQuickView::mouseClicked, this, [this](QMouseEvent& e) + { + emit hideCallout(); + m_mapView->identifyGraphicsOverlayAsync(m_graphicsOverlay, e.position(), 5, false, 1).then(this, [this] (IdentifyGraphicsOverlayResult* result) + { + if (result->graphics().length() == 0) + return; + + // display the callout with the identify result + Graphic* graphic = result->graphics().at(0); + m_calloutData->setGeoElement(graphic); + m_calloutData->setTitle(graphic->attributes()->attributeValue("ShortLabel").toString()); + m_calloutData->setDetail(graphic->attributes()->attributeValue("Place_addr").toString()); + emit showCallout(); + }); + }); } -void FindPlace::startLocationDisplay() +void FindPlace::startLocationPermission() { #ifdef PERMISSIONS_PLATFORM - QLocationPermission locationPermission{}; - locationPermission.setAccuracy(QLocationPermission::Accuracy::Precise); - locationPermission.setAvailability(QLocationPermission::Availability::WhenInUse); - switch (qApp->checkPermission(locationPermission)) - { - case Qt::PermissionStatus::Undetermined: - qApp->requestPermission(locationPermission, this, &FindPlace::startLocationDisplay); - return; - case Qt::PermissionStatus::Granted: - // turn on the location display - m_mapView->locationDisplay()->start(); - return; - case Qt::PermissionStatus::Denied: - emit locationPermissionDenied(); - return; - } -#else - m_mapView->locationDisplay()->start(); + QLocationPermission locationPermission{}; + locationPermission.setAccuracy(QLocationPermission::Accuracy::Precise); + locationPermission.setAvailability(QLocationPermission::Availability::WhenInUse); + switch (qApp->checkPermission(locationPermission)) + { + case Qt::PermissionStatus::Undetermined: + qApp->requestPermission(locationPermission, this, &FindPlace::startLocationPermission); + return; + case Qt::PermissionStatus::Granted: + return; + case Qt::PermissionStatus::Denied: + emit locationPermissionDenied(); + return; + } #endif } void FindPlace::addGraphicsOverlay() { - // add a graphics overlay to the mapview - m_graphicsOverlay = new GraphicsOverlay(this); - m_mapView->graphicsOverlays()->append(m_graphicsOverlay); - - // create a renderer for graphics representing geocode results - PictureMarkerSymbol* pinSymbol = new PictureMarkerSymbol(QUrl("qrc:/Samples/Search/FindPlace/red_pin.png"), this); - pinSymbol->setHeight(36); - pinSymbol->setWidth(19); - pinSymbol->setOffsetY(pinSymbol->height() / 2); - SimpleRenderer* simpleRenderer = new SimpleRenderer(pinSymbol, this); - m_graphicsOverlay->setRenderer(simpleRenderer); + // add a graphics overlay to the mapview + m_graphicsOverlay = new GraphicsOverlay(this); + m_mapView->graphicsOverlays()->append(m_graphicsOverlay); + + // create a renderer for graphics representing geocode results + PictureMarkerSymbol* pinSymbol = new PictureMarkerSymbol(QUrl("qrc:/Samples/Search/FindPlace/red_pin.png"), this); + pinSymbol->setHeight(36); + pinSymbol->setWidth(19); + pinSymbol->setOffsetY(pinSymbol->height() / 2); + SimpleRenderer* simpleRenderer = new SimpleRenderer(pinSymbol, this); + m_graphicsOverlay->setRenderer(simpleRenderer); } void FindPlace::createLocator() { - // create a locator task that uses the world geocoding service - m_locatorTask = new LocatorTask(QUrl("https://geocode-api.arcgis.com/arcgis/rest/services/World/GeocodeServer"), this); + // create a locator task that uses the world geocoding service + m_locatorTask = new LocatorTask(QUrl("https://geocode-api.arcgis.com/arcgis/rest/services/World/GeocodeServer"), this); - // set the suggestions Q_PROPERTY - m_suggestListModel = m_locatorTask->suggestions(); - emit suggestionsChanged(); + // set the suggestions Q_PROPERTY + m_suggestListModel = m_locatorTask->suggestions(); + emit suggestionsChanged(); } void FindPlace::onGeocodingCompleted_(const QList& results) { - // if we are converting the location string to a Point, re-geocode with that information, - // and don't add any graphics to the map - if (m_isSearchingLocation) - { - m_isSearchingLocation = false; + // if we are converting the location string to a Point, re-geocode with that information, + // and don't add any graphics to the map + if (m_isSearchingLocation) + { + m_isSearchingLocation = false; + if (results.length() == 0) + return; + + GeocodeResult topLocation = results.at(0); + geocodePOIs(m_poiSearchText, topLocation.displayLocation()); + return; + } + + // create graphics for each geocode result if (results.length() == 0) - return; - - GeocodeResult topLocation = results.at(0); - geocodePOIs(m_poiSearchText, topLocation.displayLocation()); - return; - } - - // create graphics for each geocode result - if (results.length() == 0) - return; - - m_graphicsOverlay->graphics()->clear(); - - // delete parent if it exists - if (m_graphicParent) - { - delete m_graphicParent; - m_graphicParent = nullptr; - } - m_graphicParent = new QObject(this); - - Geometry bbox; - for (const GeocodeResult& result : results) - { - Graphic* graphic = new Graphic(result.displayLocation(), result.attributes(), m_graphicParent); - m_graphicsOverlay->graphics()->append(graphic); - // create bounding box so we can set the viewpoint at the end - if (bbox.isEmpty()) - bbox = graphic->geometry(); - else - bbox = GeometryEngine::unionOf(bbox, graphic->geometry()); - } - // zoom to the bounding box - m_mapView->setViewpointGeometryAsync(bbox, 40); + return; + + m_graphicsOverlay->graphics()->clear(); + + // delete parent if it exists + if (m_graphicParent) + { + delete m_graphicParent; + m_graphicParent = nullptr; + } + m_graphicParent = new QObject(this); + + Geometry bbox; + for (const GeocodeResult& result : results) + { + Graphic* graphic = new Graphic(result.displayLocation(), result.attributes(), m_graphicParent); + m_graphicsOverlay->graphics()->append(graphic); + // create bounding box so we can set the viewpoint at the end + if (bbox.isEmpty()) + bbox = graphic->geometry(); + else + bbox = GeometryEngine::unionOf(bbox, graphic->geometry()); + } + // zoom to the bounding box + m_mapView->setViewpointGeometryAsync(bbox, 40); } void FindPlace::setPoiTextHasFocus(bool hasFocus) { - if (m_poiTextHasFocus == hasFocus) - return; - - m_poiTextHasFocus = hasFocus; - - // create and update the suggestion parameters - SuggestParameters suggestParams; - // the Points of Interest suggestions should use the POI category, and the location - // suggestions should use the Populated Place category as filters - QStringList categories; - m_poiTextHasFocus ? categories << "POI" : categories << "Populated Place"; - suggestParams.setCategories(categories); - suggestParams.setMaxResults(5); - if (m_locatorTask) - m_locatorTask->suggestions()->setSuggestParameters(suggestParams); - emit poiTextHasFocusChanged(); + if (m_poiTextHasFocus == hasFocus) + return; + + m_poiTextHasFocus = hasFocus; + + // create and update the suggestion parameters + SuggestParameters suggestParams; + // the Points of Interest suggestions should use the POI category, and the location + // suggestions should use the Populated Place category as filters + QStringList categories; + m_poiTextHasFocus ? categories << "POI" : categories << "Populated Place"; + suggestParams.setCategories(categories); + suggestParams.setMaxResults(5); + if (m_locatorTask) + m_locatorTask->suggestions()->setSuggestParameters(suggestParams); + emit poiTextHasFocusChanged(); } // set the suggestion search text to fetch suggestions void FindPlace::setSuggestionsText(const QString& searchText) { - if (!m_suggestListModel) - return; + if (!m_suggestListModel) + return; - SuggestListModel* suggestListModel = dynamic_cast(m_suggestListModel); - if (!suggestListModel) - return; + SuggestListModel* suggestListModel = dynamic_cast(m_suggestListModel); + if (!suggestListModel) + return; - suggestListModel->setSearchText(searchText); + suggestListModel->setSearchText(searchText); } // geocode without any spatial filter void FindPlace::geocodePOIs(const QString& poi) { - m_poiSearchText = poi; - GeocodeParameters params = createParameters(); - m_locatorTask->geocodeWithParametersAsync(poi, params).then(this, [this](const QList& results) - { - onGeocodingCompleted_(results); - }); + m_poiSearchText = poi; + GeocodeParameters params = createParameters(); + m_locatorTask->geocodeWithParametersAsync(poi, params).then(this, [this](const QList& results) + { + onGeocodingCompleted_(results); + }); } // use extent to filter the geocode results void FindPlace::geocodePOIs(const QString& poi, SearchMode mode) { - m_poiSearchText = poi; + m_poiSearchText = poi; - GeocodeParameters params = createParameters(); - - // If the Mode is CurrentLocation, use the Location Display as preferred search location - if (mode == SearchMode::CurrentLocation) - { - params.setPreferredSearchLocation(m_mapView->locationDisplay()->location().position()); - params.setOutputSpatialReference(m_mapView->locationDisplay()->location().position().spatialReference()); - - m_locatorTask->geocodeWithParametersAsync(m_poiSearchText, params).then(this, [this](const QList& results) - { - onGeocodingCompleted_(results); - }); - } - // If the Mode is BoundingGeometry, use the MapView's current viewpoint as the search area - else - { GeocodeParameters params = createParameters(); - Geometry extent = m_mapView->currentViewpoint(ViewpointType::BoundingGeometry).targetGeometry(); - params.setSearchArea(extent); - params.setOutputSpatialReference(extent.spatialReference()); - m_locatorTask->geocodeWithParametersAsync(m_poiSearchText, params).then(this, [this](const QList& results) + // If the Mode is CurrentLocation, use the Location Display as preferred search location + if (mode == SearchMode::CurrentLocation) + { + params.setPreferredSearchLocation(m_mapView->locationDisplay()->location().position()); + params.setOutputSpatialReference(m_mapView->locationDisplay()->location().position().spatialReference()); + + m_locatorTask->geocodeWithParametersAsync(m_poiSearchText, params).then(this, [this](const QList& results) + { + onGeocodingCompleted_(results); + }); + } + // If the Mode is BoundingGeometry, use the MapView's current viewpoint as the search area + else { - onGeocodingCompleted_(results); - }); - } + GeocodeParameters params = createParameters(); + Geometry extent = m_mapView->currentViewpoint(ViewpointType::BoundingGeometry).targetGeometry(); + params.setSearchArea(extent); + params.setOutputSpatialReference(extent.spatialReference()); + + m_locatorTask->geocodeWithParametersAsync(m_poiSearchText, params).then(this, [this](const QList& results) + { + onGeocodingCompleted_(results); + }); + } } // use a point as a preferred search location for the geocode results void FindPlace::geocodePOIs(const QString& poi, const Point& location) { - m_poiSearchText = poi; + m_poiSearchText = poi; - GeocodeParameters params = createParameters(); - params.setPreferredSearchLocation(location); - params.setOutputSpatialReference(location.spatialReference()); + GeocodeParameters params = createParameters(); + params.setPreferredSearchLocation(location); + params.setOutputSpatialReference(location.spatialReference()); - m_locatorTask->geocodeWithParametersAsync(m_poiSearchText, params).then(this, [this](const QList& results) - { - onGeocodingCompleted_(results); - }); + m_locatorTask->geocodeWithParametersAsync(m_poiSearchText, params).then(this, [this](const QList& results) + { + onGeocodingCompleted_(results); + }); } // use a location string as a preferred search location for the geocode results void FindPlace::geocodePOIs(const QString& poi, const QString& location) { - if (location == m_currentLocationText) - { - geocodePOIs(poi, SearchMode::CurrentLocation); - return; - } - m_poiSearchText = poi; - GeocodeParameters params = createParameters(); - - m_isSearchingLocation = true; - m_locatorTask->geocodeWithParametersAsync(location, params).then(this, [this](const QList& results) - { - onGeocodingCompleted_(results); - }); + if (location == m_currentLocationText) + { + geocodePOIs(poi, SearchMode::CurrentLocation); + return; + } + m_poiSearchText = poi; + GeocodeParameters params = createParameters(); + + m_isSearchingLocation = true; + m_locatorTask->geocodeWithParametersAsync(location, params).then(this, [this](const QList& results) + { + onGeocodingCompleted_(results); + }); } // create base geocode parameters GeocodeParameters FindPlace::createParameters() { - GeocodeParameters params; - params.setResultAttributeNames(QStringList{"*"}); - params.setMaxResults(50); - params.setMinScore(75.0); - return params; + GeocodeParameters params; + params.setResultAttributeNames(QStringList{"*"}); + params.setMaxResults(50); + params.setMinScore(75.0); + return params; } diff --git a/CppSamples/Search/FindPlace/FindPlace.h b/CppSamples/Search/FindPlace/FindPlace.h index e20bb3d45e..d9aec73daf 100644 --- a/CppSamples/Search/FindPlace/FindPlace.h +++ b/CppSamples/Search/FindPlace/FindPlace.h @@ -28,71 +28,71 @@ namespace Esri::ArcGISRuntime { - class CalloutData; - class Map; - class MapQuickView; - class GraphicsOverlay; - class LocatorTask; - class GeocodeResult; +class CalloutData; +class Map; +class MapQuickView; +class GraphicsOverlay; +class LocatorTask; +class GeocodeResult; } class FindPlace : public QQuickItem { - Q_OBJECT + Q_OBJECT - Q_PROPERTY(QAbstractListModel* suggestions MEMBER m_suggestListModel NOTIFY suggestionsChanged) - Q_PROPERTY(bool poiTextHasFocus READ poiTextHasFocus WRITE setPoiTextHasFocus NOTIFY poiTextHasFocusChanged) + Q_PROPERTY(QAbstractListModel* suggestions MEMBER m_suggestListModel NOTIFY suggestionsChanged) + Q_PROPERTY(bool poiTextHasFocus READ poiTextHasFocus WRITE setPoiTextHasFocus NOTIFY poiTextHasFocusChanged) public: - explicit FindPlace(QQuickItem* parent = nullptr); - ~FindPlace() override; + explicit FindPlace(QQuickItem* parent = nullptr); + ~FindPlace() override; - enum class SearchMode - { - CurrentLocation, - MapExtent - }; - Q_ENUM(SearchMode) + enum class SearchMode + { + CurrentLocation, + MapExtent + }; + Q_ENUM(SearchMode) - void componentComplete() override; - static void init(); - Q_INVOKABLE void setSuggestionsText(const QString& searchText); - Q_INVOKABLE void geocodePOIs(const QString& poi, const QString& location); - Q_INVOKABLE void geocodePOIs(const QString& poi, const Esri::ArcGISRuntime::Point& location); - Q_INVOKABLE void geocodePOIs(const QString& poi, FindPlace::SearchMode mode); - Q_INVOKABLE void geocodePOIs(const QString& poi); + void componentComplete() override; + static void init(); + Q_INVOKABLE void setSuggestionsText(const QString& searchText); + Q_INVOKABLE void geocodePOIs(const QString& poi, const QString& location); + Q_INVOKABLE void geocodePOIs(const QString& poi, const Esri::ArcGISRuntime::Point& location); + Q_INVOKABLE void geocodePOIs(const QString& poi, FindPlace::SearchMode mode); + Q_INVOKABLE void geocodePOIs(const QString& poi); signals: - void suggestionsChanged(); - void poiTextHasFocusChanged(); - void hideSuggestionView(); - void hideCallout(); - void showCallout(); - void showExtentButton(); - void locationPermissionDenied(); + void suggestionsChanged(); + void poiTextHasFocusChanged(); + void hideSuggestionView(); + void hideCallout(); + void showCallout(); + void showExtentButton(); + void locationPermissionDenied(); private: - void addGraphicsOverlay(); - void createLocator(); - void connectSignals(); - bool poiTextHasFocus() const { return m_poiTextHasFocus; } - void setPoiTextHasFocus(bool hasFocus); - Esri::ArcGISRuntime::GeocodeParameters createParameters(); - void onGeocodingCompleted_(const QList& results); - void startLocationDisplay(); + void addGraphicsOverlay(); + void createLocator(); + void connectSignals(); + bool poiTextHasFocus() const { return m_poiTextHasFocus; } + void setPoiTextHasFocus(bool hasFocus); + Esri::ArcGISRuntime::GeocodeParameters createParameters(); + void onGeocodingCompleted_(const QList& results); + void startLocationPermission(); private: - Esri::ArcGISRuntime::Map* m_map = nullptr; - Esri::ArcGISRuntime::MapQuickView* m_mapView = nullptr; - Esri::ArcGISRuntime::GraphicsOverlay* m_graphicsOverlay = nullptr; - Esri::ArcGISRuntime::CalloutData* m_calloutData = nullptr; - Esri::ArcGISRuntime::LocatorTask* m_locatorTask = nullptr; - QAbstractListModel* m_suggestListModel = nullptr; - bool m_poiTextHasFocus = true; - bool m_isSearchingLocation = false; - QString m_poiSearchText; - QString m_currentLocationText = QStringLiteral("Current Location"); - QObject* m_graphicParent = nullptr; + Esri::ArcGISRuntime::Map* m_map = nullptr; + Esri::ArcGISRuntime::MapQuickView* m_mapView = nullptr; + Esri::ArcGISRuntime::GraphicsOverlay* m_graphicsOverlay = nullptr; + Esri::ArcGISRuntime::CalloutData* m_calloutData = nullptr; + Esri::ArcGISRuntime::LocatorTask* m_locatorTask = nullptr; + QAbstractListModel* m_suggestListModel = nullptr; + bool m_poiTextHasFocus = true; + bool m_isSearchingLocation = false; + QString m_poiSearchText; + QString m_currentLocationText = QStringLiteral("Current Location"); + QObject* m_graphicParent = nullptr; }; #endif // FINDPLACE_H From c2cf43c904d33f2d00f68c40099de5b77a850e41 Mon Sep 17 00:00:00 2001 From: Harini Date: Fri, 11 Oct 2024 14:59:24 -0700 Subject: [PATCH 09/15] fix alignment --- CppSamples/Search/FindPlace/FindPlace.cpp | 422 +++++++++++----------- CppSamples/Search/FindPlace/FindPlace.h | 100 ++--- 2 files changed, 261 insertions(+), 261 deletions(-) diff --git a/CppSamples/Search/FindPlace/FindPlace.cpp b/CppSamples/Search/FindPlace/FindPlace.cpp index aacaa8c669..a873c275af 100644 --- a/CppSamples/Search/FindPlace/FindPlace.cpp +++ b/CppSamples/Search/FindPlace/FindPlace.cpp @@ -60,302 +60,302 @@ using namespace Esri::ArcGISRuntime; FindPlace::FindPlace(QQuickItem* parent /* = nullptr */): - QQuickItem(parent) + QQuickItem(parent) { } FindPlace::~FindPlace() { - m_mapView->locationDisplay()->stop(); + m_mapView->locationDisplay()->stop(); } void FindPlace::init() { - // Register the map view for QML - qmlRegisterType("Esri.Samples", 1, 0, "MapView"); - qmlRegisterType("Esri.Samples", 1, 0, "FindPlaceSample"); - qmlRegisterUncreatableType("Esri.Samples", 1, 0, "CalloutData", "CalloutData is an uncreatable type"); - qmlRegisterUncreatableType("Esri.Samples", 1, 0, "AbstractListModel", "AbstractListModel is uncreateable"); + // Register the map view for QML + qmlRegisterType("Esri.Samples", 1, 0, "MapView"); + qmlRegisterType("Esri.Samples", 1, 0, "FindPlaceSample"); + qmlRegisterUncreatableType("Esri.Samples", 1, 0, "CalloutData", "CalloutData is an uncreatable type"); + qmlRegisterUncreatableType("Esri.Samples", 1, 0, "AbstractListModel", "AbstractListModel is uncreateable"); } void FindPlace::componentComplete() { - QQuickItem::componentComplete(); + QQuickItem::componentComplete(); - // find QML MapView component - m_mapView = findChild("mapView"); + // find QML MapView component + m_mapView = findChild("mapView"); - // Create a map using the topographic basemap - m_map = new Map(BasemapStyle::ArcGISTopographic, this); + // Create a map using the topographic basemap + m_map = new Map(BasemapStyle::ArcGISTopographic, this); - // Set map to map view - m_mapView->setMap(m_map); + // Set map to map view + m_mapView->setMap(m_map); - // create the locator - createLocator(); + // create the locator + createLocator(); - // add the graphics overlay - addGraphicsOverlay(); + // add the graphics overlay + addGraphicsOverlay(); - // initialize callout - m_mapView->calloutData()->setVisible(false); - m_calloutData = m_mapView->calloutData(); + // initialize callout + m_mapView->calloutData()->setVisible(false); + m_calloutData = m_mapView->calloutData(); - // start location permission - startLocationPermission(); + // start location permission + startLocationPermission(); - // connect mapview signals - connectSignals(); + // connect mapview signals + connectSignals(); } void FindPlace::connectSignals() { - connect(m_mapView, &MapQuickView::drawStatusChanged, this, [this](DrawStatus drawStatus) - { - if (drawStatus != DrawStatus::Completed || m_mapView->locationDisplay()->isStarted()) - return; - - // turn on the location display - m_mapView->locationDisplay()->setAutoPanMode(LocationDisplayAutoPanMode::Recenter); - m_mapView->locationDisplay()->start(); - }); - - connect(m_mapView, &MapQuickView::mousePressed, this, [this](QMouseEvent& /*event*/) - { - emit hideSuggestionView(); - }); - - connect(m_mapView, &MapQuickView::viewpointChanged, this, [this]() - { - emit hideSuggestionView(); - if (m_graphicsOverlay->graphics()->size() > 0) - emit showExtentButton(); - }); - - // perform an identify operation on mouse clicked - connect(m_mapView, &MapQuickView::mouseClicked, this, [this](QMouseEvent& e) - { - emit hideCallout(); - m_mapView->identifyGraphicsOverlayAsync(m_graphicsOverlay, e.position(), 5, false, 1).then(this, [this] (IdentifyGraphicsOverlayResult* result) - { - if (result->graphics().length() == 0) - return; - - // display the callout with the identify result - Graphic* graphic = result->graphics().at(0); - m_calloutData->setGeoElement(graphic); - m_calloutData->setTitle(graphic->attributes()->attributeValue("ShortLabel").toString()); - m_calloutData->setDetail(graphic->attributes()->attributeValue("Place_addr").toString()); - emit showCallout(); - }); - }); + connect(m_mapView, &MapQuickView::drawStatusChanged, this, [this](DrawStatus drawStatus) + { + if (drawStatus != DrawStatus::Completed || m_mapView->locationDisplay()->isStarted()) + return; + + // turn on the location display + m_mapView->locationDisplay()->setAutoPanMode(LocationDisplayAutoPanMode::Recenter); + m_mapView->locationDisplay()->start(); + }); + + connect(m_mapView, &MapQuickView::mousePressed, this, [this](QMouseEvent& /*event*/) + { + emit hideSuggestionView(); + }); + + connect(m_mapView, &MapQuickView::viewpointChanged, this, [this]() + { + emit hideSuggestionView(); + if (m_graphicsOverlay->graphics()->size() > 0) + emit showExtentButton(); + }); + + // perform an identify operation on mouse clicked + connect(m_mapView, &MapQuickView::mouseClicked, this, [this](QMouseEvent& e) + { + emit hideCallout(); + m_mapView->identifyGraphicsOverlayAsync(m_graphicsOverlay, e.position(), 5, false, 1).then(this, [this] (IdentifyGraphicsOverlayResult* result) + { + if (result->graphics().length() == 0) + return; + + // display the callout with the identify result + Graphic* graphic = result->graphics().at(0); + m_calloutData->setGeoElement(graphic); + m_calloutData->setTitle(graphic->attributes()->attributeValue("ShortLabel").toString()); + m_calloutData->setDetail(graphic->attributes()->attributeValue("Place_addr").toString()); + emit showCallout(); + }); + }); } void FindPlace::startLocationPermission() { #ifdef PERMISSIONS_PLATFORM - QLocationPermission locationPermission{}; - locationPermission.setAccuracy(QLocationPermission::Accuracy::Precise); - locationPermission.setAvailability(QLocationPermission::Availability::WhenInUse); - switch (qApp->checkPermission(locationPermission)) - { - case Qt::PermissionStatus::Undetermined: - qApp->requestPermission(locationPermission, this, &FindPlace::startLocationPermission); - return; - case Qt::PermissionStatus::Granted: - return; - case Qt::PermissionStatus::Denied: - emit locationPermissionDenied(); - return; - } + QLocationPermission locationPermission{}; + locationPermission.setAccuracy(QLocationPermission::Accuracy::Precise); + locationPermission.setAvailability(QLocationPermission::Availability::WhenInUse); + switch (qApp->checkPermission(locationPermission)) + { + case Qt::PermissionStatus::Undetermined: + qApp->requestPermission(locationPermission, this, &FindPlace::startLocationPermission); + return; + case Qt::PermissionStatus::Granted: + return; + case Qt::PermissionStatus::Denied: + emit locationPermissionDenied(); + return; + } #endif } void FindPlace::addGraphicsOverlay() { - // add a graphics overlay to the mapview - m_graphicsOverlay = new GraphicsOverlay(this); - m_mapView->graphicsOverlays()->append(m_graphicsOverlay); - - // create a renderer for graphics representing geocode results - PictureMarkerSymbol* pinSymbol = new PictureMarkerSymbol(QUrl("qrc:/Samples/Search/FindPlace/red_pin.png"), this); - pinSymbol->setHeight(36); - pinSymbol->setWidth(19); - pinSymbol->setOffsetY(pinSymbol->height() / 2); - SimpleRenderer* simpleRenderer = new SimpleRenderer(pinSymbol, this); - m_graphicsOverlay->setRenderer(simpleRenderer); + // add a graphics overlay to the mapview + m_graphicsOverlay = new GraphicsOverlay(this); + m_mapView->graphicsOverlays()->append(m_graphicsOverlay); + + // create a renderer for graphics representing geocode results + PictureMarkerSymbol* pinSymbol = new PictureMarkerSymbol(QUrl("qrc:/Samples/Search/FindPlace/red_pin.png"), this); + pinSymbol->setHeight(36); + pinSymbol->setWidth(19); + pinSymbol->setOffsetY(pinSymbol->height() / 2); + SimpleRenderer* simpleRenderer = new SimpleRenderer(pinSymbol, this); + m_graphicsOverlay->setRenderer(simpleRenderer); } void FindPlace::createLocator() { - // create a locator task that uses the world geocoding service - m_locatorTask = new LocatorTask(QUrl("https://geocode-api.arcgis.com/arcgis/rest/services/World/GeocodeServer"), this); + // create a locator task that uses the world geocoding service + m_locatorTask = new LocatorTask(QUrl("https://geocode-api.arcgis.com/arcgis/rest/services/World/GeocodeServer"), this); - // set the suggestions Q_PROPERTY - m_suggestListModel = m_locatorTask->suggestions(); - emit suggestionsChanged(); + // set the suggestions Q_PROPERTY + m_suggestListModel = m_locatorTask->suggestions(); + emit suggestionsChanged(); } void FindPlace::onGeocodingCompleted_(const QList& results) { - // if we are converting the location string to a Point, re-geocode with that information, - // and don't add any graphics to the map - if (m_isSearchingLocation) - { - m_isSearchingLocation = false; - if (results.length() == 0) - return; - - GeocodeResult topLocation = results.at(0); - geocodePOIs(m_poiSearchText, topLocation.displayLocation()); - return; - } - - // create graphics for each geocode result + // if we are converting the location string to a Point, re-geocode with that information, + // and don't add any graphics to the map + if (m_isSearchingLocation) + { + m_isSearchingLocation = false; if (results.length() == 0) - return; - - m_graphicsOverlay->graphics()->clear(); - - // delete parent if it exists - if (m_graphicParent) - { - delete m_graphicParent; - m_graphicParent = nullptr; - } - m_graphicParent = new QObject(this); - - Geometry bbox; - for (const GeocodeResult& result : results) - { - Graphic* graphic = new Graphic(result.displayLocation(), result.attributes(), m_graphicParent); - m_graphicsOverlay->graphics()->append(graphic); - // create bounding box so we can set the viewpoint at the end - if (bbox.isEmpty()) - bbox = graphic->geometry(); - else - bbox = GeometryEngine::unionOf(bbox, graphic->geometry()); - } - // zoom to the bounding box - m_mapView->setViewpointGeometryAsync(bbox, 40); + return; + + GeocodeResult topLocation = results.at(0); + geocodePOIs(m_poiSearchText, topLocation.displayLocation()); + return; + } + + // create graphics for each geocode result + if (results.length() == 0) + return; + + m_graphicsOverlay->graphics()->clear(); + + // delete parent if it exists + if (m_graphicParent) + { + delete m_graphicParent; + m_graphicParent = nullptr; + } + m_graphicParent = new QObject(this); + + Geometry bbox; + for (const GeocodeResult& result : results) + { + Graphic* graphic = new Graphic(result.displayLocation(), result.attributes(), m_graphicParent); + m_graphicsOverlay->graphics()->append(graphic); + // create bounding box so we can set the viewpoint at the end + if (bbox.isEmpty()) + bbox = graphic->geometry(); + else + bbox = GeometryEngine::unionOf(bbox, graphic->geometry()); + } + // zoom to the bounding box + m_mapView->setViewpointGeometryAsync(bbox, 40); } void FindPlace::setPoiTextHasFocus(bool hasFocus) { - if (m_poiTextHasFocus == hasFocus) - return; - - m_poiTextHasFocus = hasFocus; - - // create and update the suggestion parameters - SuggestParameters suggestParams; - // the Points of Interest suggestions should use the POI category, and the location - // suggestions should use the Populated Place category as filters - QStringList categories; - m_poiTextHasFocus ? categories << "POI" : categories << "Populated Place"; - suggestParams.setCategories(categories); - suggestParams.setMaxResults(5); - if (m_locatorTask) - m_locatorTask->suggestions()->setSuggestParameters(suggestParams); - emit poiTextHasFocusChanged(); + if (m_poiTextHasFocus == hasFocus) + return; + + m_poiTextHasFocus = hasFocus; + + // create and update the suggestion parameters + SuggestParameters suggestParams; + // the Points of Interest suggestions should use the POI category, and the location + // suggestions should use the Populated Place category as filters + QStringList categories; + m_poiTextHasFocus ? categories << "POI" : categories << "Populated Place"; + suggestParams.setCategories(categories); + suggestParams.setMaxResults(5); + if (m_locatorTask) + m_locatorTask->suggestions()->setSuggestParameters(suggestParams); + emit poiTextHasFocusChanged(); } // set the suggestion search text to fetch suggestions void FindPlace::setSuggestionsText(const QString& searchText) { - if (!m_suggestListModel) - return; + if (!m_suggestListModel) + return; - SuggestListModel* suggestListModel = dynamic_cast(m_suggestListModel); - if (!suggestListModel) - return; + SuggestListModel* suggestListModel = dynamic_cast(m_suggestListModel); + if (!suggestListModel) + return; - suggestListModel->setSearchText(searchText); + suggestListModel->setSearchText(searchText); } // geocode without any spatial filter void FindPlace::geocodePOIs(const QString& poi) { - m_poiSearchText = poi; - GeocodeParameters params = createParameters(); - m_locatorTask->geocodeWithParametersAsync(poi, params).then(this, [this](const QList& results) - { - onGeocodingCompleted_(results); - }); + m_poiSearchText = poi; + GeocodeParameters params = createParameters(); + m_locatorTask->geocodeWithParametersAsync(poi, params).then(this, [this](const QList& results) + { + onGeocodingCompleted_(results); + }); } // use extent to filter the geocode results void FindPlace::geocodePOIs(const QString& poi, SearchMode mode) { - m_poiSearchText = poi; + m_poiSearchText = poi; - GeocodeParameters params = createParameters(); + GeocodeParameters params = createParameters(); + + // If the Mode is CurrentLocation, use the Location Display as preferred search location + if (mode == SearchMode::CurrentLocation) + { + params.setPreferredSearchLocation(m_mapView->locationDisplay()->location().position()); + params.setOutputSpatialReference(m_mapView->locationDisplay()->location().position().spatialReference()); - // If the Mode is CurrentLocation, use the Location Display as preferred search location - if (mode == SearchMode::CurrentLocation) + m_locatorTask->geocodeWithParametersAsync(m_poiSearchText, params).then(this, [this](const QList& results) { - params.setPreferredSearchLocation(m_mapView->locationDisplay()->location().position()); - params.setOutputSpatialReference(m_mapView->locationDisplay()->location().position().spatialReference()); - - m_locatorTask->geocodeWithParametersAsync(m_poiSearchText, params).then(this, [this](const QList& results) - { - onGeocodingCompleted_(results); - }); - } - // If the Mode is BoundingGeometry, use the MapView's current viewpoint as the search area - else + onGeocodingCompleted_(results); + }); + } + // If the Mode is BoundingGeometry, use the MapView's current viewpoint as the search area + else + { + GeocodeParameters params = createParameters(); + Geometry extent = m_mapView->currentViewpoint(ViewpointType::BoundingGeometry).targetGeometry(); + params.setSearchArea(extent); + params.setOutputSpatialReference(extent.spatialReference()); + + m_locatorTask->geocodeWithParametersAsync(m_poiSearchText, params).then(this, [this](const QList& results) { - GeocodeParameters params = createParameters(); - Geometry extent = m_mapView->currentViewpoint(ViewpointType::BoundingGeometry).targetGeometry(); - params.setSearchArea(extent); - params.setOutputSpatialReference(extent.spatialReference()); - - m_locatorTask->geocodeWithParametersAsync(m_poiSearchText, params).then(this, [this](const QList& results) - { - onGeocodingCompleted_(results); - }); - } + onGeocodingCompleted_(results); + }); + } } // use a point as a preferred search location for the geocode results void FindPlace::geocodePOIs(const QString& poi, const Point& location) { - m_poiSearchText = poi; + m_poiSearchText = poi; - GeocodeParameters params = createParameters(); - params.setPreferredSearchLocation(location); - params.setOutputSpatialReference(location.spatialReference()); + GeocodeParameters params = createParameters(); + params.setPreferredSearchLocation(location); + params.setOutputSpatialReference(location.spatialReference()); - m_locatorTask->geocodeWithParametersAsync(m_poiSearchText, params).then(this, [this](const QList& results) - { - onGeocodingCompleted_(results); - }); + m_locatorTask->geocodeWithParametersAsync(m_poiSearchText, params).then(this, [this](const QList& results) + { + onGeocodingCompleted_(results); + }); } // use a location string as a preferred search location for the geocode results void FindPlace::geocodePOIs(const QString& poi, const QString& location) { - if (location == m_currentLocationText) - { - geocodePOIs(poi, SearchMode::CurrentLocation); - return; - } - m_poiSearchText = poi; - GeocodeParameters params = createParameters(); - - m_isSearchingLocation = true; - m_locatorTask->geocodeWithParametersAsync(location, params).then(this, [this](const QList& results) - { - onGeocodingCompleted_(results); - }); + if (location == m_currentLocationText) + { + geocodePOIs(poi, SearchMode::CurrentLocation); + return; + } + m_poiSearchText = poi; + GeocodeParameters params = createParameters(); + + m_isSearchingLocation = true; + m_locatorTask->geocodeWithParametersAsync(location, params).then(this, [this](const QList& results) + { + onGeocodingCompleted_(results); + }); } // create base geocode parameters GeocodeParameters FindPlace::createParameters() { - GeocodeParameters params; - params.setResultAttributeNames(QStringList{"*"}); - params.setMaxResults(50); - params.setMinScore(75.0); - return params; + GeocodeParameters params; + params.setResultAttributeNames(QStringList{"*"}); + params.setMaxResults(50); + params.setMinScore(75.0); + return params; } diff --git a/CppSamples/Search/FindPlace/FindPlace.h b/CppSamples/Search/FindPlace/FindPlace.h index d9aec73daf..566beed952 100644 --- a/CppSamples/Search/FindPlace/FindPlace.h +++ b/CppSamples/Search/FindPlace/FindPlace.h @@ -28,71 +28,71 @@ namespace Esri::ArcGISRuntime { -class CalloutData; -class Map; -class MapQuickView; -class GraphicsOverlay; -class LocatorTask; -class GeocodeResult; + class CalloutData; + class Map; + class MapQuickView; + class GraphicsOverlay; + class LocatorTask; + class GeocodeResult; } class FindPlace : public QQuickItem { - Q_OBJECT + Q_OBJECT - Q_PROPERTY(QAbstractListModel* suggestions MEMBER m_suggestListModel NOTIFY suggestionsChanged) - Q_PROPERTY(bool poiTextHasFocus READ poiTextHasFocus WRITE setPoiTextHasFocus NOTIFY poiTextHasFocusChanged) + Q_PROPERTY(QAbstractListModel* suggestions MEMBER m_suggestListModel NOTIFY suggestionsChanged) + Q_PROPERTY(bool poiTextHasFocus READ poiTextHasFocus WRITE setPoiTextHasFocus NOTIFY poiTextHasFocusChanged) public: - explicit FindPlace(QQuickItem* parent = nullptr); - ~FindPlace() override; + explicit FindPlace(QQuickItem* parent = nullptr); + ~FindPlace() override; - enum class SearchMode - { - CurrentLocation, - MapExtent - }; - Q_ENUM(SearchMode) + enum class SearchMode + { + CurrentLocation, + MapExtent + }; + Q_ENUM(SearchMode) - void componentComplete() override; - static void init(); - Q_INVOKABLE void setSuggestionsText(const QString& searchText); - Q_INVOKABLE void geocodePOIs(const QString& poi, const QString& location); - Q_INVOKABLE void geocodePOIs(const QString& poi, const Esri::ArcGISRuntime::Point& location); - Q_INVOKABLE void geocodePOIs(const QString& poi, FindPlace::SearchMode mode); - Q_INVOKABLE void geocodePOIs(const QString& poi); + void componentComplete() override; + static void init(); + Q_INVOKABLE void setSuggestionsText(const QString& searchText); + Q_INVOKABLE void geocodePOIs(const QString& poi, const QString& location); + Q_INVOKABLE void geocodePOIs(const QString& poi, const Esri::ArcGISRuntime::Point& location); + Q_INVOKABLE void geocodePOIs(const QString& poi, FindPlace::SearchMode mode); + Q_INVOKABLE void geocodePOIs(const QString& poi); signals: - void suggestionsChanged(); - void poiTextHasFocusChanged(); - void hideSuggestionView(); - void hideCallout(); - void showCallout(); - void showExtentButton(); - void locationPermissionDenied(); + void suggestionsChanged(); + void poiTextHasFocusChanged(); + void hideSuggestionView(); + void hideCallout(); + void showCallout(); + void showExtentButton(); + void locationPermissionDenied(); private: - void addGraphicsOverlay(); - void createLocator(); - void connectSignals(); - bool poiTextHasFocus() const { return m_poiTextHasFocus; } - void setPoiTextHasFocus(bool hasFocus); - Esri::ArcGISRuntime::GeocodeParameters createParameters(); - void onGeocodingCompleted_(const QList& results); - void startLocationPermission(); + void addGraphicsOverlay(); + void createLocator(); + void connectSignals(); + bool poiTextHasFocus() const { return m_poiTextHasFocus; } + void setPoiTextHasFocus(bool hasFocus); + Esri::ArcGISRuntime::GeocodeParameters createParameters(); + void onGeocodingCompleted_(const QList& results); + void startLocationPermission(); private: - Esri::ArcGISRuntime::Map* m_map = nullptr; - Esri::ArcGISRuntime::MapQuickView* m_mapView = nullptr; - Esri::ArcGISRuntime::GraphicsOverlay* m_graphicsOverlay = nullptr; - Esri::ArcGISRuntime::CalloutData* m_calloutData = nullptr; - Esri::ArcGISRuntime::LocatorTask* m_locatorTask = nullptr; - QAbstractListModel* m_suggestListModel = nullptr; - bool m_poiTextHasFocus = true; - bool m_isSearchingLocation = false; - QString m_poiSearchText; - QString m_currentLocationText = QStringLiteral("Current Location"); - QObject* m_graphicParent = nullptr; + Esri::ArcGISRuntime::Map* m_map = nullptr; + Esri::ArcGISRuntime::MapQuickView* m_mapView = nullptr; + Esri::ArcGISRuntime::GraphicsOverlay* m_graphicsOverlay = nullptr; + Esri::ArcGISRuntime::CalloutData* m_calloutData = nullptr; + Esri::ArcGISRuntime::LocatorTask* m_locatorTask = nullptr; + QAbstractListModel* m_suggestListModel = nullptr; + bool m_poiTextHasFocus = true; + bool m_isSearchingLocation = false; + QString m_poiSearchText; + QString m_currentLocationText = QStringLiteral("Current Location"); + QObject* m_graphicParent = nullptr; }; #endif // FINDPLACE_H From f8146b1a810202bcc0ccecadd18b7b692bba16ec Mon Sep 17 00:00:00 2001 From: Harini Date: Fri, 11 Oct 2024 15:04:08 -0700 Subject: [PATCH 10/15] fix location --- .../ShowDeviceLocationUsingIndoorPositioning.cpp | 9 ++++----- .../ShowDeviceLocationUsingIndoorPositioning.h | 2 +- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ShowDeviceLocationUsingIndoorPositioning.cpp b/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ShowDeviceLocationUsingIndoorPositioning.cpp index 9b18463a72..c197ca1aaf 100644 --- a/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ShowDeviceLocationUsingIndoorPositioning.cpp +++ b/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ShowDeviceLocationUsingIndoorPositioning.cpp @@ -84,8 +84,9 @@ void ShowDeviceLocationUsingIndoorPositioning::setMapView(MapQuickView* mapView) m_mapView = mapView; m_mapView->setMap(m_map); + // Start bluetooth and location permissions startBluetoothPermision(); - startLocationDisplay(); + startLocationPermission(); setupIndoorsLocationDataSource(); @@ -110,7 +111,7 @@ void ShowDeviceLocationUsingIndoorPositioning::startBluetoothPermision() #endif } -void ShowDeviceLocationUsingIndoorPositioning::startLocationDisplay() +void ShowDeviceLocationUsingIndoorPositioning::startLocationPermission() { #ifdef PERMISSIONS_PLATFORM QLocationPermission locationPermission{}; @@ -119,11 +120,9 @@ void ShowDeviceLocationUsingIndoorPositioning::startLocationDisplay() switch (qApp->checkPermission(locationPermission)) { case Qt::PermissionStatus::Undetermined: - qApp->requestPermission(locationPermission, this, &ShowDeviceLocationUsingIndoorPositioning::startLocationDisplay); + qApp->requestPermission(locationPermission, this, &ShowDeviceLocationUsingIndoorPositioning::startLocationPermission); return; case Qt::PermissionStatus::Granted: - // turn on the location display - m_mapView->locationDisplay()->start(); return; case Qt::PermissionStatus::Denied: emit locationPermissionDenied(); diff --git a/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ShowDeviceLocationUsingIndoorPositioning.h b/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ShowDeviceLocationUsingIndoorPositioning.h index ca5e4631dc..42739a86fa 100644 --- a/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ShowDeviceLocationUsingIndoorPositioning.h +++ b/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ShowDeviceLocationUsingIndoorPositioning.h @@ -63,7 +63,7 @@ class ShowDeviceLocationUsingIndoorPositioning : public QObject void setupIndoorsLocationDataSource(); void locationChangedHandler(const Esri::ArcGISRuntime::Location& loc); void changeFloorDisplay(); - void startLocationDisplay(); + void startLocationPermission(); void startBluetoothPermision(); Esri::ArcGISRuntime::Map* m_map = nullptr; From 399978a21fd07ba8c7146de6a6956e85533339a5 Mon Sep 17 00:00:00 2001 From: Harini Date: Mon, 14 Oct 2024 19:29:00 -0700 Subject: [PATCH 11/15] changes as per PR comments --- ...owDeviceLocationUsingIndoorPositioning.cpp | 65 +++++++++---------- ...ShowDeviceLocationUsingIndoorPositioning.h | 8 ++- 2 files changed, 36 insertions(+), 37 deletions(-) diff --git a/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ShowDeviceLocationUsingIndoorPositioning.cpp b/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ShowDeviceLocationUsingIndoorPositioning.cpp index c197ca1aaf..438982ae86 100644 --- a/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ShowDeviceLocationUsingIndoorPositioning.cpp +++ b/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ShowDeviceLocationUsingIndoorPositioning.cpp @@ -35,7 +35,6 @@ #if (QT_VERSION >= QT_VERSION_CHECK(6, 6, 0)) || defined(Q_OS_IOS) || defined(Q_OS_MACOS) || defined(Q_OS_ANDROID) #define PERMISSIONS_PLATFORM -#include #endif using namespace Esri::ArcGISRuntime; @@ -84,51 +83,47 @@ void ShowDeviceLocationUsingIndoorPositioning::setMapView(MapQuickView* mapView) m_mapView = mapView; m_mapView->setMap(m_map); - // Start bluetooth and location permissions - startBluetoothPermision(); - startLocationPermission(); - - setupIndoorsLocationDataSource(); + #ifdef PERMISSIONS_PLATFORM + requestBluetoothPermision(); + #else + setupIndoorsLocationDataSource(); + #endif emit mapViewChanged(); } -void ShowDeviceLocationUsingIndoorPositioning::startBluetoothPermision() +void ShowDeviceLocationUsingIndoorPositioning::requestBluetoothPermision() { -#ifdef PERMISSIONS_PLATFORM - QBluetoothPermission bluetoothPermission{}; - switch (qApp->checkPermission(bluetoothPermission)) + qApp->requestPermission(bluetoothPermission, [this](const QPermission& permission) { - case Qt::PermissionStatus::Undetermined: - qApp->requestPermission(bluetoothPermission, this, &ShowDeviceLocationUsingIndoorPositioning::startBluetoothPermision); - return; - case Qt::PermissionStatus::Granted: - return; - case Qt::PermissionStatus::Denied: - emit bluetoothPermissionDenied(); - return; - } -#endif + Q_UNUSED(permission); + requestLocationPermission(); + }); } -void ShowDeviceLocationUsingIndoorPositioning::startLocationPermission() +void ShowDeviceLocationUsingIndoorPositioning::requestLocationPermission() { -#ifdef PERMISSIONS_PLATFORM - QLocationPermission locationPermission{}; locationPermission.setAccuracy(QLocationPermission::Accuracy::Precise); locationPermission.setAvailability(QLocationPermission::Availability::WhenInUse); - switch (qApp->checkPermission(locationPermission)) - { - case Qt::PermissionStatus::Undetermined: - qApp->requestPermission(locationPermission, this, &ShowDeviceLocationUsingIndoorPositioning::startLocationPermission); - return; - case Qt::PermissionStatus::Granted: - return; - case Qt::PermissionStatus::Denied: - emit locationPermissionDenied(); - return; - } -#endif + qApp->requestPermission(locationPermission, [this](const QPermission& permission) + { + Q_UNUSED(permission); + checkPermissions(); + setupIndoorsLocationDataSource(); + }); +} + +void ShowDeviceLocationUsingIndoorPositioning::checkPermissions() +{ + if (qApp->checkPermission(bluetoothPermission) == Qt::PermissionStatus::Denied) + { + emit bluetoothPermissionDenied(); + } + + if (qApp->checkPermission(locationPermission) == Qt::PermissionStatus::Denied) + { + emit locationPermissionDenied(); + } } // This function uses a helper class `IndoorsLocationDataSourceCreator` to construct the IndoorsLocationDataSource diff --git a/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ShowDeviceLocationUsingIndoorPositioning.h b/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ShowDeviceLocationUsingIndoorPositioning.h index 42739a86fa..66555bafc7 100644 --- a/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ShowDeviceLocationUsingIndoorPositioning.h +++ b/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ShowDeviceLocationUsingIndoorPositioning.h @@ -23,6 +23,7 @@ // Qt headers #include #include +#include namespace Esri::ArcGISRuntime { @@ -63,8 +64,9 @@ class ShowDeviceLocationUsingIndoorPositioning : public QObject void setupIndoorsLocationDataSource(); void locationChangedHandler(const Esri::ArcGISRuntime::Location& loc); void changeFloorDisplay(); - void startLocationPermission(); - void startBluetoothPermision(); + void requestLocationPermission(); + void requestBluetoothPermision(); + void checkPermissions(); Esri::ArcGISRuntime::Map* m_map = nullptr; Esri::ArcGISRuntime::MapQuickView* m_mapView = nullptr; @@ -72,6 +74,8 @@ class ShowDeviceLocationUsingIndoorPositioning : public QObject Esri::ArcGISRuntime::ArcGISFeatureTable* m_pathwaysTable = nullptr; QVariantMap m_locationProperties; int m_currentFloor; + QBluetoothPermission bluetoothPermission{}; + QLocationPermission locationPermission{}; }; #endif // SHOWDEVICELOCATIONUSINGINDOORPOSITIONING_H From 2f472787ca40803c0bb2d2831d061f455a3858b0 Mon Sep 17 00:00:00 2001 From: Harini Date: Thu, 17 Oct 2024 14:19:34 -0700 Subject: [PATCH 12/15] changes as per PR comments --- .../ShowDeviceLocationUsingIndoorPositioning.cpp | 15 ++++++++------- .../ShowDeviceLocationUsingIndoorPositioning.h | 6 ++---- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ShowDeviceLocationUsingIndoorPositioning.cpp b/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ShowDeviceLocationUsingIndoorPositioning.cpp index 438982ae86..367a2b547b 100644 --- a/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ShowDeviceLocationUsingIndoorPositioning.cpp +++ b/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ShowDeviceLocationUsingIndoorPositioning.cpp @@ -84,7 +84,7 @@ void ShowDeviceLocationUsingIndoorPositioning::setMapView(MapQuickView* mapView) m_mapView->setMap(m_map); #ifdef PERMISSIONS_PLATFORM - requestBluetoothPermision(); + requestBluetoothThenLocationPermissions(); #else setupIndoorsLocationDataSource(); #endif @@ -92,17 +92,18 @@ void ShowDeviceLocationUsingIndoorPositioning::setMapView(MapQuickView* mapView) emit mapViewChanged(); } -void ShowDeviceLocationUsingIndoorPositioning::requestBluetoothPermision() +void ShowDeviceLocationUsingIndoorPositioning::requestBluetoothThenLocationPermissions() { - qApp->requestPermission(bluetoothPermission, [this](const QPermission& permission) + qApp->requestPermission(QBluetoothPermission{}, [this](const QPermission& permission) { Q_UNUSED(permission); - requestLocationPermission(); + requestLocationPermissionThenSetupILDS(); }); } -void ShowDeviceLocationUsingIndoorPositioning::requestLocationPermission() +void ShowDeviceLocationUsingIndoorPositioning::requestLocationPermissionThenSetupILDS() { + QLocationPermission locationPermission{}; locationPermission.setAccuracy(QLocationPermission::Accuracy::Precise); locationPermission.setAvailability(QLocationPermission::Availability::WhenInUse); qApp->requestPermission(locationPermission, [this](const QPermission& permission) @@ -115,12 +116,12 @@ void ShowDeviceLocationUsingIndoorPositioning::requestLocationPermission() void ShowDeviceLocationUsingIndoorPositioning::checkPermissions() { - if (qApp->checkPermission(bluetoothPermission) == Qt::PermissionStatus::Denied) + if (qApp->checkPermission(QBluetoothPermission{}) == Qt::PermissionStatus::Denied) { emit bluetoothPermissionDenied(); } - if (qApp->checkPermission(locationPermission) == Qt::PermissionStatus::Denied) + if (qApp->checkPermission(QLocationPermission{}) == Qt::PermissionStatus::Denied) { emit locationPermissionDenied(); } diff --git a/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ShowDeviceLocationUsingIndoorPositioning.h b/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ShowDeviceLocationUsingIndoorPositioning.h index 66555bafc7..56617d015e 100644 --- a/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ShowDeviceLocationUsingIndoorPositioning.h +++ b/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ShowDeviceLocationUsingIndoorPositioning.h @@ -64,8 +64,8 @@ class ShowDeviceLocationUsingIndoorPositioning : public QObject void setupIndoorsLocationDataSource(); void locationChangedHandler(const Esri::ArcGISRuntime::Location& loc); void changeFloorDisplay(); - void requestLocationPermission(); - void requestBluetoothPermision(); + void requestLocationPermissionThenSetupILDS(); + void requestBluetoothThenLocationPermissions(); void checkPermissions(); Esri::ArcGISRuntime::Map* m_map = nullptr; @@ -74,8 +74,6 @@ class ShowDeviceLocationUsingIndoorPositioning : public QObject Esri::ArcGISRuntime::ArcGISFeatureTable* m_pathwaysTable = nullptr; QVariantMap m_locationProperties; int m_currentFloor; - QBluetoothPermission bluetoothPermission{}; - QLocationPermission locationPermission{}; }; #endif // SHOWDEVICELOCATIONUSINGINDOORPOSITIONING_H From 3dd8474d59d35f2bee01ee572b715e2aaeb43173 Mon Sep 17 00:00:00 2001 From: Harini Date: Thu, 17 Oct 2024 19:03:57 -0700 Subject: [PATCH 13/15] changes as per PR comments --- .../ShowDeviceLocationUsingIndoorPositioning.cpp | 1 + .../ShowDeviceLocationUsingIndoorPositioning.h | 1 - .../mac/Info.plist | 8 ++++---- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ShowDeviceLocationUsingIndoorPositioning.cpp b/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ShowDeviceLocationUsingIndoorPositioning.cpp index 367a2b547b..cc47b6553c 100644 --- a/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ShowDeviceLocationUsingIndoorPositioning.cpp +++ b/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ShowDeviceLocationUsingIndoorPositioning.cpp @@ -35,6 +35,7 @@ #if (QT_VERSION >= QT_VERSION_CHECK(6, 6, 0)) || defined(Q_OS_IOS) || defined(Q_OS_MACOS) || defined(Q_OS_ANDROID) #define PERMISSIONS_PLATFORM +#include #endif using namespace Esri::ArcGISRuntime; diff --git a/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ShowDeviceLocationUsingIndoorPositioning.h b/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ShowDeviceLocationUsingIndoorPositioning.h index 56617d015e..423a39af61 100644 --- a/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ShowDeviceLocationUsingIndoorPositioning.h +++ b/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ShowDeviceLocationUsingIndoorPositioning.h @@ -23,7 +23,6 @@ // Qt headers #include #include -#include namespace Esri::ArcGISRuntime { diff --git a/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/mac/Info.plist b/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/mac/Info.plist index 3b3efb3839..13b9fcaaa5 100644 --- a/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/mac/Info.plist +++ b/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/mac/Info.plist @@ -3,15 +3,15 @@ CFBundleDisplayName - FindPlace + ShowDeviceLocationUsingIndoorPositioning CFBundleExecutable - FindPlace + ShowDeviceLocationUsingIndoorPositioning CFBundleGetInfoString ArcGIS CFBundleIdentifier - com.esri.FindPlace + com.esri.ShowDeviceLocationUsingIndoorPositioning CFBundleName - FindPlace + ShowDeviceLocationUsingIndoorPositioning CFBundlePackageType APPL CFBundleShortVersionString From 6c9706705ff10ec21cdda76a89ecdbf14bc0b5a8 Mon Sep 17 00:00:00 2001 From: Harini Date: Thu, 17 Oct 2024 21:08:33 -0700 Subject: [PATCH 14/15] changes as per PR comment --- .../ShowDeviceLocationUsingIndoorPositioning.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ShowDeviceLocationUsingIndoorPositioning.cpp b/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ShowDeviceLocationUsingIndoorPositioning.cpp index cc47b6553c..1017490a2a 100644 --- a/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ShowDeviceLocationUsingIndoorPositioning.cpp +++ b/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ShowDeviceLocationUsingIndoorPositioning.cpp @@ -122,7 +122,10 @@ void ShowDeviceLocationUsingIndoorPositioning::checkPermissions() emit bluetoothPermissionDenied(); } - if (qApp->checkPermission(QLocationPermission{}) == Qt::PermissionStatus::Denied) + QLocationPermission locationPermission{}; + locationPermission.setAccuracy(QLocationPermission::Accuracy::Precise); + locationPermission.setAvailability(QLocationPermission::Availability::WhenInUse); + if (qApp->checkPermission(locationPermission) == Qt::PermissionStatus::Denied) { emit locationPermissionDenied(); } From cace754fbc995dfa88932124555f7e67db81d63f Mon Sep 17 00:00:00 2001 From: Harini Date: Fri, 18 Oct 2024 11:03:55 -0700 Subject: [PATCH 15/15] Addind the android bug info --- .../ShowDeviceLocationUsingIndoorPositioning.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ShowDeviceLocationUsingIndoorPositioning.cpp b/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ShowDeviceLocationUsingIndoorPositioning.cpp index 1017490a2a..213b3f7702 100644 --- a/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ShowDeviceLocationUsingIndoorPositioning.cpp +++ b/CppSamples/Maps/ShowDeviceLocationUsingIndoorPositioning/ShowDeviceLocationUsingIndoorPositioning.cpp @@ -84,6 +84,7 @@ void ShowDeviceLocationUsingIndoorPositioning::setMapView(MapQuickView* mapView) m_mapView = mapView; m_mapView->setMap(m_map); + // Issue expected with Android - https://bugreports.qt.io/browse/QTBUG-130301 #ifdef PERMISSIONS_PLATFORM requestBluetoothThenLocationPermissions(); #else