PGRData/Script/matrix/xmanager/XPermissionManager.lua

82 lines
2.8 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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