PGRData/Resources/Scripts/XManager/XPermissionManager.lua

83 lines
2.8 KiB
Lua
Raw Normal View History

2022-12-26 14:06:01 +05:30
XPermissionManager = XPermissionManager or {}
-- 权限授权状态
local PERMISSION_DENIED = -1
local PERMISSION_GRANTED = 0
local PERMISSION_CUSTOMER_DENIED = 1
local PERMISSION_STATE_NONE = 2
local PERMISSION_STATE_KEY = "PERMISSION_GRANTED_"
local CSXToolGetPermission = function() print("PermissionManager not init") end
local PermissionStateMap = {}
local PermissionTextMap = {}
-- [权限] = 设置权限文字提示key
local PermissionEnumMap = {
[CS.XPermissionEnum.CAMERA] = "PremissionCameraDesc",
[CS.XPermissionEnum.READ_EXTERNAL_STORAGE] = "PremissionReadDesc",
[CS.XPermissionEnum.WRITE_EXTERNAL_STORAGE] = "PremissionWriteDesc",
}
-- 权限初始化逻辑
function XPermissionManager.Init()
-- 暂不允许直接调用请求权限接口
CSXToolGetPermission = CS.XTool.GetPermission
CS.XTool.GetPermission = nil
for enum, desc in pairs(PermissionEnumMap) do
local code = enum:GetHashCode()
PermissionTextMap[code] = CS.XTextManager.GetText(desc)
end
if not CS.XTool.CheckPermission then -- 兼容线上版本
return
end
for enum, desc in pairs(PermissionEnumMap) do
local code = enum:GetHashCode()
local customerState = CS.UnityEngine.PlayerPrefs.GetInt(PERMISSION_STATE_KEY .. code, PERMISSION_STATE_NONE)
PermissionStateMap[code] = customerState
local state = CS.XTool.CheckPermission(enum) -- 设备权限情况
if state == PERMISSION_GRANTED then
CS.UnityEngine.PlayerPrefs.SetInt(PERMISSION_STATE_KEY .. code, state)
PermissionStateMap[code] = state
end
end
end
-- 检查并获取权限(拒绝后不重复询问)
function XPermissionManager.TryGetPermission(permissionEnum, description, cb)
local code = permissionEnum:GetHashCode()
if PermissionStateMap[code] == PERMISSION_CUSTOMER_DENIED and
(CS.XTool.CheckPermission == nil or CS.XTool.CheckPermission(permissionEnum) ~= PERMISSION_GRANTED) then
local text = PermissionTextMap[code]
if not PermissionTextMap[code] then
XLog.Error("获取权限错误在PermissionEnumMap中缺少处理代码")
end
text = text or CS.XTextManager.GetText("PremissionDesc")
XUiManager.TipMsg(text, XUiManager.UiTipType.Tip)
return
end
local resultCB = function(isGranted, dontTip)
local state = isGranted and PERMISSION_GRANTED or PERMISSION_CUSTOMER_DENIED
if PermissionStateMap[code] ~= state then
CS.UnityEngine.PlayerPrefs.SetInt(PERMISSION_STATE_KEY .. code, state)
CS.UnityEngine.PlayerPrefs.Save()
PermissionStateMap[code] = state
end
cb(isGranted, dontTip)
end
return CSXToolGetPermission(permissionEnum, description, resultCB)
end
function XPermissionManager.GetPermissionStateMap()
return PermissionStateMap
end