From b8e9dd7e450136918e418581bbe3206fd51a5186 Mon Sep 17 00:00:00 2001 From: Michael Zanetti Date: Tue, 22 Nov 2022 14:06:27 +0100 Subject: [PATCH] Some fixes in the platform permission helper for android --- .../android/platformpermissionsandroid.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/nymea-app/platformintegration/android/platformpermissionsandroid.cpp b/nymea-app/platformintegration/android/platformpermissionsandroid.cpp index 6339dc5d..44a3443d 100644 --- a/nymea-app/platformintegration/android/platformpermissionsandroid.cpp +++ b/nymea-app/platformintegration/android/platformpermissionsandroid.cpp @@ -2,9 +2,12 @@ #include #include +#include PlatformPermissionsAndroid * PlatformPermissionsAndroid::s_instance = nullptr; +#define FLAG_ACTIVITY_NEW_TASK 0x10000000 + QHash permissionMap = { // TODO: Once QtBluetooth does not request the COARSE_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.ACCESS_COARSE_LOCATION"}}, @@ -24,6 +27,7 @@ PlatformPermissionsAndroid::PlatformPermissionsAndroid(QObject *parent) emit bluetoothPermissionChanged(); emit locationPermissionChanged(); emit backgroundLocationPermissionChanged(); + emit notificationsPermissionChanged(); } }); @@ -38,7 +42,13 @@ void PlatformPermissionsAndroid::requestPermission(PlatformPermissions::Permissi void PlatformPermissionsAndroid::openPermissionSettings() { - QtAndroid::androidActivity().callMethod("openPermissionSettings", "()V"); + QAndroidJniObject packageName = QtAndroid::androidContext().callObjectMethod("getPackageName", "()Ljava/lang/String;"); + QString packageUri = "package:" + packageName.toString(); + QAndroidJniObject uri = QAndroidJniObject::callStaticObjectMethod("android/net/Uri", "parse", "(Ljava/lang/String;)Landroid/net/Uri;", QAndroidJniObject::fromString(packageUri).object()); + QAndroidIntent intent = QAndroidIntent("android.settings.APPLICATION_DETAILS_SETTINGS"); + intent.handle().callObjectMethod("setData", "(Landroid/net/Uri;)Landroid/content/Intent;", uri.object()); + intent.handle().callObjectMethod("addFlags", "(I)Landroid/content/Intent;", FLAG_ACTIVITY_NEW_TASK); + QtAndroid::androidContext().callMethod("startActivity", "(Landroid/content/Intent;)V", intent.handle().object()); } PlatformPermissions::PermissionStatus PlatformPermissionsAndroid::checkPermission(Permission permission) const @@ -61,5 +71,6 @@ void PlatformPermissionsAndroid::permissionResultCallback(const QtAndroid::Permi emit s_instance->bluetoothPermissionChanged(); emit s_instance->locationPermissionChanged(); emit s_instance->backgroundLocationPermissionChanged(); + emit s_instance->notificationsPermissionChanged(); }