diff --git a/app/src/main/java/io/timelimit/android/integration/platform/android/AndroidDeviceOwnerApi.kt b/app/src/main/java/io/timelimit/android/integration/platform/android/AndroidDeviceOwnerApi.kt index 34a5814..44bbc15 100644 --- a/app/src/main/java/io/timelimit/android/integration/platform/android/AndroidDeviceOwnerApi.kt +++ b/app/src/main/java/io/timelimit/android/integration/platform/android/AndroidDeviceOwnerApi.kt @@ -134,9 +134,19 @@ class AndroidDeviceOwnerApi( if (VERSION.SDK_INT < VERSION_CODES.LOLLIPOP) return false if (!devicePolicyManager.isDeviceOwnerApp(componentName.packageName)) return false - return devicePolicyManager.setPermissionGrantState( - componentName, componentName.packageName, Manifest.permission.ACCESS_FINE_LOCATION, - DevicePolicyManager.PERMISSION_GRANT_STATE_GRANTED - ) + try { + return devicePolicyManager.setPermissionGrantState( + componentName, componentName.packageName, Manifest.permission.ACCESS_FINE_LOCATION, + DevicePolicyManager.PERMISSION_GRANT_STATE_GRANTED + ) + } catch (ex: SecurityException) { + // set to default so that granting this manually is possible + devicePolicyManager.setPermissionGrantState( + componentName, componentName.packageName, Manifest.permission.ACCESS_FINE_LOCATION, + DevicePolicyManager.PERMISSION_GRANT_STATE_DEFAULT + ) + + return false + } } } \ No newline at end of file diff --git a/app/src/main/java/io/timelimit/android/integration/platform/android/AndroidIntegration.kt b/app/src/main/java/io/timelimit/android/integration/platform/android/AndroidIntegration.kt index bb43054..4170731 100644 --- a/app/src/main/java/io/timelimit/android/integration/platform/android/AndroidIntegration.kt +++ b/app/src/main/java/io/timelimit/android/integration/platform/android/AndroidIntegration.kt @@ -519,16 +519,24 @@ class AndroidIntegration(context: Context): PlatformIntegration(maximumProtectio context.packageName, Manifest.permission.ACCESS_FINE_LOCATION, ).let { - if (it == DevicePolicyManager.PERMISSION_GRANT_STATE_DEFAULT) { - policyManager.setPermissionGrantState( - deviceAdmin, - context.packageName, - Manifest.permission.ACCESS_FINE_LOCATION, - if (ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) - DevicePolicyManager.PERMISSION_GRANT_STATE_GRANTED - else - DevicePolicyManager.PERMISSION_GRANT_STATE_DENIED - ) + try { + if (it == DevicePolicyManager.PERMISSION_GRANT_STATE_DEFAULT) { + policyManager.setPermissionGrantState( + deviceAdmin, + context.packageName, + Manifest.permission.ACCESS_FINE_LOCATION, + if (ContextCompat.checkSelfPermission( + context, + Manifest.permission.ACCESS_FINE_LOCATION + ) == PackageManager.PERMISSION_GRANTED + ) + DevicePolicyManager.PERMISSION_GRANT_STATE_GRANTED + else + DevicePolicyManager.PERMISSION_GRANT_STATE_DENIED + ) + } + } catch (ex: SecurityException) { + // ignore } }