// ========================================================================== //

        /* protected - [Override & Unity API]       */


        /* protected - [abstract & virtual]         */


        // ========================================================================== //

        #region Private

        static IEnumerator RequsetPermission_Coroutine(EPermissionName ePermissionName, System.Action <bool> OnResult_HasPermission)
        {
            yield return(new WaitForEndOfFrame());

            Permission.RequestUserPermission(g_mapPermission.GetValue_OrDefault(ePermissionName));

            yield return(new WaitForSeconds(0.2f));

            yield return(new WaitUntil(() => Application.isFocused == true));

            OnResult_HasPermission?.Invoke(Check_HasPermission(ePermissionName));
        }
        public static void RequestUserPermission_Coroutine(MonoBehaviour pCoroutineExecuter, EPermissionName ePermissionName, System.Action <bool> OnResult_HasPermission = null)
        {
#if UNITY_EDITOR
            OnResult_HasPermission?.Invoke(true);
#else
            pCoroutineExecuter.StartCoroutine(RequsetPermission_Coroutine(ePermissionName, OnResult_HasPermission));
#endif
        }
        // ========================================================================== //

        /* public - [Do~Something] Function             */

        public static bool Check_HasPermission(EPermissionName ePermissionName)
        {
            return(Permission.HasUserAuthorizedPermission(g_mapPermission.GetValue_OrDefault(ePermissionName)));
        }