[Security.PrivacyPrivilegeManager] CheckPermissionsAsync(), RequestPermissionsAsync()#7732
[Security.PrivacyPrivilegeManager] CheckPermissionsAsync(), RequestPermissionsAsync()#7732wiertel wants to merge 1 commit into
Conversation
|
Warning Gemini encountered an error creating the review. You can try again by commenting |
Public API ChangedPlease follow the ACR process for the changed API below. Added: 21, Removed: 0, Changed: 1Added+ /// <since_tizen>14</since_tizen
+ Tizen.Security.PermissionDeniedException
+ /// <since_tizen>14</since_tizen
+ System.Collections.Generic.IEnumerable`1<System.String> Tizen.Security.PermissionDeniedException::DeniedPrivileges()
+ /// <since_tizen>14</since_tizen
+ System.Void Tizen.Security.PermissionDeniedException::.ctor(System.Collections.Generic.IDictionary`2<System.String,Tizen.Security.PermissionStatus>)
+ /// <since_tizen>14</since_tizen
+ Tizen.Security.PermissionStatus Tizen.Security.PermissionDeniedException::GetStatus(System.String)
+ /// <since_tizen>14</since_tizen
+ Tizen.Security.PermissionResult
+ /// <since_tizen>14</since_tizen
+ System.Boolean Tizen.Security.PermissionResult::AreAllGranted()
+ /// <since_tizen>14</since_tizen
+ System.Boolean Tizen.Security.PermissionResult::IsGranted(System.String)
+ /// <since_tizen>none</since_tizen
+ System.Void Tizen.Security.PermissionResult::.ctor()
+ /// <since_tizen>14</since_tizen
+ Tizen.Security.PermissionStateExtensions
+ /// <since_tizen>14</since_tizen
+ static System.Boolean Tizen.Security.PermissionStateExtensions::IsGranted(Tizen.Security.PermissionStatus)
+ /// <since_tizen>14</since_tizen
+ Tizen.Security.PermissionStatus
+ /// <since_tizen>none</since_tizen
+ static Tizen.Security.PermissionStatus Tizen.Security.PermissionStatus::Ask
+ /// <since_tizen>none</since_tizen
+ static Tizen.Security.PermissionStatus Tizen.Security.PermissionStatus::Deferred
+ /// <since_tizen>none</since_tizen
+ static Tizen.Security.PermissionStatus Tizen.Security.PermissionStatus::Denied
+ /// <since_tizen>none</since_tizen
+ static Tizen.Security.PermissionStatus Tizen.Security.PermissionStatus::DeniedSession
+ /// <since_tizen>none</since_tizen
+ static Tizen.Security.PermissionStatus Tizen.Security.PermissionStatus::Granted
+ /// <since_tizen>none</since_tizen
+ static Tizen.Security.PermissionStatus Tizen.Security.PermissionStatus::GrantedInUse
+ /// <since_tizen>none</since_tizen
+ static Tizen.Security.PermissionStatus Tizen.Security.PermissionStatus::GrantedSession
+ /// <since_tizen>14</since_tizen
+ static System.Threading.Tasks.Task`1<System.Collections.Generic.IEnumerable`1<System.String>> Tizen.Security.PrivacyPrivilegeManager::LoadPrivilegesFromManifestAsync()
+ /// <since_tizen>14</since_tizen
+ static System.Threading.Tasks.Task`1<Tizen.Security.PermissionResult> Tizen.Security.PrivacyPrivilegeManager::CheckPermissionsAsync(System.Collections.Generic.IEnumerable`1<System.String>)
+ /// <since_tizen>14</since_tizen
+ static System.Threading.Tasks.Task`1<Tizen.Security.PermissionResult> Tizen.Security.PrivacyPrivilegeManager::RequestPermissionsAsync(System.Collections.Generic.IEnumerable`1<System.String>,System.Collections.Generic.IEnumerable`1<System.String>)
Changed/// <since_tizen>4</since_tizen
- [Obsolete]
Tizen.Security.PrivacyPrivilegeManager
|
| var requiredList = required != null ? new List<string>(required) : new List<string>(); | ||
|
|
||
| // Remove from required any privileges that are also in optional (they become optional) | ||
| var actualRequired = requiredList.Where(p => !optionalSet.Contains(p)).ToList(); |
There was a problem hiding this comment.
🤖 [AI Review]
🔴 Critical: If required contains duplicate entries, a denied privilege appears twice in actualRequired and the ToDictionary call below throws ArgumentException (duplicate key) instead of the documented PermissionDeniedException.
| var actualRequired = requiredList.Where(p => !optionalSet.Contains(p)).ToList(); | |
| var actualRequired = requiredList.Where(p => !optionalSet.Contains(p)).Distinct().ToList(); |
| /// List<string> manifestPrivileges = await PrivacyPrivilegeManager.LoadPrivilegesFromManifestAsync(); | ||
| /// PermissionResult states = await PrivacyPrivilegeManager.CheckPermissionsAsync(manifestPrivileges); | ||
| /// bool allGranted = states.AllGranted(); |
There was a problem hiding this comment.
🤖 [AI Review]
🟡 Suggestion: This example doesn't compile — LoadPrivilegesFromManifestAsync returns Task<IEnumerable<string>> (not assignable to List<string>), and the method on PermissionResult is AreAllGranted(), not AllGranted(). The example on LoadPrivilegesFromManifestAsync has the same List<string> issue.
| /// List<string> manifestPrivileges = await PrivacyPrivilegeManager.LoadPrivilegesFromManifestAsync(); | |
| /// PermissionResult states = await PrivacyPrivilegeManager.CheckPermissionsAsync(manifestPrivileges); | |
| /// bool allGranted = states.AllGranted(); | |
| /// IEnumerable<string> manifestPrivileges = await PrivacyPrivilegeManager.LoadPrivilegesFromManifestAsync(); | |
| /// PermissionResult states = await PrivacyPrivilegeManager.CheckPermissionsAsync(manifestPrivileges); | |
| /// bool allGranted = states.AreAllGranted(); |
| /// bool isGranted = permissions.IsGranted("http://tizen.org/privilege/account.read"); | ||
| /// | ||
| /// // Check if all privileges are granted | ||
| /// bool allGranted = permissions.AllGranted(); |
There was a problem hiding this comment.
🤖 [AI Review]
🟡 Suggestion: AllGranted() doesn't exist on this class — the method declared below is AreAllGranted().
| /// bool allGranted = permissions.AllGranted(); | |
| /// bool allGranted = permissions.AreAllGranted(); |
| /// <summary> | ||
| /// Extension methods for PermissionState. | ||
| /// </summary> | ||
| /// <since_tizen> 14 </since_tizen> | ||
| public static class PermissionStateExtensions |
There was a problem hiding this comment.
🤖 [AI Review]
🟡 Suggestion: This new public class is named after a PermissionState type that doesn't exist — the enum it extends is PermissionStatus, and the name becomes permanent public API once approved.
| /// <summary> | |
| /// Extension methods for PermissionState. | |
| /// </summary> | |
| /// <since_tizen> 14 </since_tizen> | |
| public static class PermissionStateExtensions | |
| /// <summary> | |
| /// Extension methods for PermissionStatus. | |
| /// </summary> | |
| /// <since_tizen> 14 </since_tizen> | |
| public static class PermissionStatusExtensions |
| public PermissionDeniedException(IDictionary<string, PermissionStatus> denied) | ||
| : base("Required permissions denied: " + string.Join(", ", denied.Keys)) |
There was a problem hiding this comment.
🤖 [AI Review]
🟡 Suggestion: denied is dereferenced in the base-constructor call, so a null argument surfaces as NullReferenceException; throw ArgumentNullException explicitly for the new public API.
| public PermissionDeniedException(IDictionary<string, PermissionStatus> denied) | |
| : base("Required permissions denied: " + string.Join(", ", denied.Keys)) | |
| public PermissionDeniedException(IDictionary<string, PermissionStatus> denied) | |
| : base("Required permissions denied: " + string.Join(", ", (denied ?? throw new ArgumentNullException(nameof(denied))).Keys)) |
|
🤖 [AI Review] Automated review by AI assistant |
Description of Change
A replacement for deprecated privilege requesting API.
API Changes