Przeglądaj źródła

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.
Fredia Huya-Kouadio 1 rok temu
rodzic
commit
df4f9e8e64

+ 4 - 0
platform/android/java/editor/src/main/java/org/godotengine/editor/GodotEditor.kt

@@ -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)

+ 2 - 6
platform/android/java/lib/src/org/godotengine/godot/GodotActivity.kt

@@ -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

+ 7 - 7
platform/android/java/lib/src/org/godotengine/godot/utils/PermissionsUtil.java

@@ -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;
-	static final int REQUEST_CAMERA_PERMISSION = 2;
-	static final int REQUEST_VIBRATE_PERMISSION = 3;
+	public static final int REQUEST_RECORD_AUDIO_PERMISSION = 1;
+	public static final int REQUEST_CAMERA_PERMISSION = 2;
+	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) {