diff --git a/nymea-app/platformintegration/android/platformpermissionsandroid.cpp b/nymea-app/platformintegration/android/platformpermissionsandroid.cpp index 0d93eea3..2870ddf2 100644 --- a/nymea-app/platformintegration/android/platformpermissionsandroid.cpp +++ b/nymea-app/platformintegration/android/platformpermissionsandroid.cpp @@ -3,12 +3,13 @@ #include #include #include +#include PlatformPermissionsAndroid * PlatformPermissionsAndroid::s_instance = nullptr; #define FLAG_ACTIVITY_NEW_TASK 0x10000000 -QHash permissionMap = { +QHash permissionMapV31 = { // TODO: Once QtBluetooth does not request the COARSE_LOCATION and FINE_LOCATION for Bluetooth any more, remove it from here. The new Bluetooth permissions would be enough. {PlatformPermissions::PermissionBluetooth, {"android.permission.BLUETOOTH_SCAN", "android.permission.BLUETOOTH_CONNECT", "android.permission.BLUETOOTH_ADVERTISE", "android.permission.ACCESS_COARSE_LOCATION", "android.permission.ACCESS_FINE_LOCATION"}}, {PlatformPermissions::PermissionLocation, {"android.permission.ACCESS_FINE_LOCATION"}}, @@ -16,6 +17,13 @@ QHash permissionMap = { {PlatformPermissions::PermissionNotifications, {"android.permission.POST_NOTIFICATIONS"}}, }; +QHash permissionMapV30 = { + {PlatformPermissions::PermissionBluetooth, {"android.permission.ACCESS_COARSE_LOCATION", "android.permission.ACCESS_FINE_LOCATION"}}, + {PlatformPermissions::PermissionLocation, {"android.permission.ACCESS_FINE_LOCATION"}}, + {PlatformPermissions::PermissionBackgroundLocation, {"android.permission.ACCESS_FINE_LOCATION", "android.permission.ACCESS_BACKGROUND_LOCATION"}}, + {PlatformPermissions::PermissionNotifications, {"android.permission.POST_NOTIFICATIONS"}}, +}; + PlatformPermissionsAndroid::PlatformPermissionsAndroid(QObject *parent) : PlatformPermissions{parent} { @@ -35,8 +43,8 @@ PlatformPermissionsAndroid::PlatformPermissionsAndroid(QObject *parent) void PlatformPermissionsAndroid::requestPermission(PlatformPermissions::Permission permission) { - if (permissionMap.contains(permission)) { - QtAndroid::requestPermissions({permissionMap.value(permission)}, &permissionResultCallback); + if (permissionMap().contains(permission)) { + QtAndroid::requestPermissions({permissionMap().value(permission)}, &permissionResultCallback); } } @@ -51,10 +59,19 @@ void PlatformPermissionsAndroid::openPermissionSettings() QtAndroid::androidContext().callMethod("startActivity", "(Landroid/content/Intent;)V", intent.handle().object()); } +QHash PlatformPermissionsAndroid::permissionMap() const +{ + QOperatingSystemVersion osVersion = QOperatingSystemVersion::current(); + if (osVersion.majorVersion() <= 11) { + return permissionMapV30; + } + return permissionMapV31; +} + PlatformPermissions::PermissionStatus PlatformPermissionsAndroid::checkPermission(Permission permission) const { PermissionStatus status = PermissionStatusGranted; - QStringList androidPermissions = permissionMap.value(permission); + QStringList androidPermissions = permissionMap().value(permission); foreach (const QString androidPermission, androidPermissions) { if (QtAndroid::shouldShowRequestPermissionRationale(androidPermission)) { return PermissionStatusDenied; diff --git a/nymea-app/platformintegration/android/platformpermissionsandroid.h b/nymea-app/platformintegration/android/platformpermissionsandroid.h index 038e8c7f..02828137 100644 --- a/nymea-app/platformintegration/android/platformpermissionsandroid.h +++ b/nymea-app/platformintegration/android/platformpermissionsandroid.h @@ -19,6 +19,7 @@ public: signals: private: + QHash permissionMap() const; static PlatformPermissionsAndroid *s_instance; static void permissionResultCallback(const QtAndroid::PermissionResultMap &results);