1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-12 13:20:55 +00:00

Disable automatic permissions request

The feature was added in Godot 4.2, but it goes against recommended best practices for permissions request, as such it's being reverted.
In its place, developers now have to explicitly request the permissions they need to access.

(cherry picked from commit df4f9e8e64)
This commit is contained in:
Fredia Huya-Kouadio
2024-01-11 08:04:09 -08:00
committed by Yuri Sizov
parent 41dcabb0cf
commit 894d629185
3 changed files with 13 additions and 13 deletions

View File

@@ -91,6 +91,10 @@ open class GodotEditor : GodotActivity() {
private val commandLineParams = ArrayList<String>() private val commandLineParams = ArrayList<String>()
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
// We exclude certain permissions from the set we request at startup, as they'll be
// requested on demand based on use-cases.
PermissionsUtil.requestManifestPermissions(this, setOf(Manifest.permission.RECORD_AUDIO))
val params = intent.getStringArrayExtra(EXTRA_COMMAND_LINE_PARAMS) val params = intent.getStringArrayExtra(EXTRA_COMMAND_LINE_PARAMS)
Log.d(TAG, "Received parameters ${params.contentToString()}") Log.d(TAG, "Received parameters ${params.contentToString()}")
updateCommandLineParams(params) updateCommandLineParams(params)

View File

@@ -30,7 +30,6 @@
package org.godotengine.godot package org.godotengine.godot
import android.Manifest
import android.app.Activity import android.app.Activity
import android.content.Intent import android.content.Intent
import android.content.pm.PackageManager import android.content.pm.PackageManager
@@ -65,10 +64,6 @@ abstract class GodotActivity : FragmentActivity(), GodotHost {
private set private set
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
// We exclude certain permissions from the set we request at startup, as they'll be
// requested on demand based on use-cases.
PermissionsUtil.requestManifestPermissions(this, setOf(Manifest.permission.RECORD_AUDIO))
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setContentView(R.layout.godot_app_layout) setContentView(R.layout.godot_app_layout)
@@ -156,7 +151,8 @@ abstract class GodotActivity : FragmentActivity(), GodotHost {
super.onRequestPermissionsResult(requestCode, permissions, grantResults) super.onRequestPermissionsResult(requestCode, permissions, grantResults)
godotFragment?.onRequestPermissionsResult(requestCode, permissions, grantResults) godotFragment?.onRequestPermissionsResult(requestCode, permissions, grantResults)
if (requestCode == PermissionsUtil.REQUEST_ALL_PERMISSION_REQ_CODE) { // Logging the result of permission requests
if (requestCode == PermissionsUtil.REQUEST_ALL_PERMISSION_REQ_CODE || requestCode == PermissionsUtil.REQUEST_SINGLE_PERMISSION_REQ_CODE) {
Log.d(TAG, "Received permissions request result..") Log.d(TAG, "Received permissions request result..")
for (i in permissions.indices) { for (i in permissions.indices) {
val permissionGranted = grantResults[i] == PackageManager.PERMISSION_GRANTED val permissionGranted = grantResults[i] == PackageManager.PERMISSION_GRANTED

View File

@@ -56,9 +56,9 @@ import java.util.Set;
public final class PermissionsUtil { public final class PermissionsUtil {
private static final String TAG = PermissionsUtil.class.getSimpleName(); private static final String TAG = PermissionsUtil.class.getSimpleName();
static final int REQUEST_RECORD_AUDIO_PERMISSION = 1; public static final int REQUEST_RECORD_AUDIO_PERMISSION = 1;
static final int REQUEST_CAMERA_PERMISSION = 2; public static final int REQUEST_CAMERA_PERMISSION = 2;
static final int REQUEST_VIBRATE_PERMISSION = 3; public static final int REQUEST_VIBRATE_PERMISSION = 3;
public static final int REQUEST_ALL_PERMISSION_REQ_CODE = 1001; public static final int REQUEST_ALL_PERMISSION_REQ_CODE = 1001;
public static final int REQUEST_SINGLE_PERMISSION_REQ_CODE = 1002; public static final int REQUEST_SINGLE_PERMISSION_REQ_CODE = 1002;
public static final int REQUEST_MANAGE_EXTERNAL_STORAGE_REQ_CODE = 2002; public static final int REQUEST_MANAGE_EXTERNAL_STORAGE_REQ_CODE = 2002;
@@ -70,7 +70,7 @@ public final class PermissionsUtil {
* Request a dangerous permission. name must be specified in <a href="https://github.com/aosp-mirror/platform_frameworks_base/blob/master/core/res/AndroidManifest.xml">this</a> * Request a dangerous permission. name must be specified in <a href="https://github.com/aosp-mirror/platform_frameworks_base/blob/master/core/res/AndroidManifest.xml">this</a>
* @param permissionName the name of the requested permission. * @param permissionName the name of the requested permission.
* @param activity the caller activity for this method. * @param activity the caller activity for this method.
* @return true/false. "true" if permission was granted otherwise returns "false". * @return true/false. "true" if permission is already granted, "false" if a permission request was dispatched.
*/ */
public static boolean requestPermission(String permissionName, Activity activity) { public static boolean requestPermission(String permissionName, Activity activity) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
@@ -124,7 +124,7 @@ public final class PermissionsUtil {
/** /**
* Request dangerous permissions which are defined in the Android manifest file from the user. * Request dangerous permissions which are defined in the Android manifest file from the user.
* @param activity the caller activity for this method. * @param activity the caller activity for this method.
* @return true/false. "true" if all permissions were granted otherwise returns "false". * @return true/false. "true" if all permissions were already granted, returns "false" if permissions requests were dispatched.
*/ */
public static boolean requestManifestPermissions(Activity activity) { public static boolean requestManifestPermissions(Activity activity) {
return requestManifestPermissions(activity, null); return requestManifestPermissions(activity, null);
@@ -134,7 +134,7 @@ public final class PermissionsUtil {
* Request dangerous permissions which are defined in the Android manifest file from the user. * Request dangerous permissions which are defined in the Android manifest file from the user.
* @param activity the caller activity for this method. * @param activity the caller activity for this method.
* @param excludes Set of permissions to exclude from the request * @param excludes Set of permissions to exclude from the request
* @return true/false. "true" if all permissions were granted otherwise returns "false". * @return true/false. "true" if all permissions were already granted, returns "false" if permissions requests were dispatched.
*/ */
public static boolean requestManifestPermissions(Activity activity, @Nullable Set<String> excludes) { public static boolean requestManifestPermissions(Activity activity, @Nullable Set<String> excludes) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
@@ -235,7 +235,7 @@ public final class PermissionsUtil {
/** /**
* Check if the given permission is in the AndroidManifest.xml file. * Check if the given permission is in the AndroidManifest.xml file.
* @param context the caller context for this method. * @param context the caller context for this method.
* @param permission the permession to look for in the manifest file. * @param permission the permission to look for in the manifest file.
* @return "true" if the permission is in the manifest file of the activity, "false" otherwise. * @return "true" if the permission is in the manifest file of the activity, "false" otherwise.
*/ */
public static boolean hasManifestPermission(Context context, String permission) { public static boolean hasManifestPermission(Context context, String permission) {