using UnityEngine.Android;
namespace Unity.Notifications.Android
{
///
/// Represents a status of the Android runtime permission.
///
public enum PermissionStatus
{
///
/// No permission as user was not prompted for it.
///
NotRequested = 0,
///
/// User gave permission.
///
Allowed = 1,
///
/// User denied permission.
///
Denied = 2,
///
/// No longer used. User denied permission and expressed intent to not be prompted again.
///
DeniedDontAskAgain = 3,
///
/// A request for permission was made and user hasn't responded yet.
///
RequestPending = 4,
}
///
/// A class to request permission to post notifications.
/// Before Android 13 (API 33) it is not required and Status will become Allowed immediately.
/// May succeed or fail immediately. Users response is saved to PlayerPrefs.
/// Respects users wish to not be asked again.
///
///
///
public class PermissionRequest
{
///
/// The status of this request.
/// Value other than RequestPending means request has completed.
///
public PermissionStatus Status { get; set; }
///
/// Create a new request.
/// Will show user a dialog asking for permission if that is required to post notifications and user hasn't permanently denied it already.
///
public PermissionRequest()
{
Status = AndroidNotificationCenter.UserPermissionToPost;
switch (Status)
{
case PermissionStatus.NotRequested:
case PermissionStatus.Denied:
case PermissionStatus.DeniedDontAskAgain: // this one is no longer used, but might be found in settings
Status = PermissionStatus.RequestPending;
RequestPermission();
break;
}
}
void RequestPermission()
{
var callbacks = new PermissionCallbacks();
callbacks.PermissionGranted += (unused) => PermissionResponse(PermissionStatus.Allowed);
callbacks.PermissionDenied += (unused) => PermissionResponse(PermissionStatus.Denied);
Permission.RequestUserPermission(AndroidNotificationCenter.PERMISSION_POST_NOTIFICATIONS, callbacks);
}
void PermissionResponse(PermissionStatus status)
{
Status = status;
AndroidNotificationCenter.SetPostPermissionSetting(status);
}
}
}