PermissionsFlowManager.cs
4.56 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
//-----------------------------------------------------------------------
// <copyright file="PermissionsFlowManager.cs" company="Google Inc.">
// Copyright 2016 Google Inc. All rights reserved.
//
// Licensed under the Apache License, Version 2.0(the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// </copyright>
//-----------------------------------------------------------------------
namespace GoogleVR.PermissionsDemo
{
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
#if UNITY_ANDROID || UNITY_EDITOR
/// <summary>Manages the permission flow in PermissionsDemo.</summary>
public class PermissionsFlowManager : MonoBehaviour
{
/// <summary>A text field which informs the user of permissions flow status.</summary>
/// <remarks>Modified by methods in this class.</remarks>
public Text statusText;
private static string[] permissionNames = { "android.permission.READ_EXTERNAL_STORAGE" };
private static List<GvrPermissionsRequester.PermissionStatus> permissionList =
new List<GvrPermissionsRequester.PermissionStatus>();
/// <summary>
/// Checks whether all necessary external permissions have been granted and informs user of
/// the current state.
/// </summary>
public void CheckPermission()
{
statusText.text = "Checking permission....";
GvrPermissionsRequester permissionRequester = GvrPermissionsRequester.Instance;
if (permissionRequester != null)
{
bool granted = permissionRequester.IsPermissionGranted(permissionNames[0]);
statusText.text = permissionNames[0] + ": " + (granted ? "Granted" : "Denied");
}
else
{
statusText.text = "Permission requester cannot be initialized.";
}
}
/// <summary>
/// Checks external permissions requirements and current permissions granted.
/// </summary>
/// <remarks>
/// Prompts user with requests for outstanding needed permissions, and informs them of the
/// current state.
/// </remarks>
public void RequestPermissions()
{
if (statusText != null)
{
statusText.text = "Requesting permission....";
}
GvrPermissionsRequester permissionRequester = GvrPermissionsRequester.Instance;
if (permissionRequester == null)
{
statusText.text = "Permission requester cannot be initialized.";
return;
}
Debug.Log("Permissions.RequestPermisions: Check if permission has been granted");
if (!permissionRequester.IsPermissionGranted(permissionNames[0]))
{
Debug.Log("Permissions.RequestPermisions: Permission has not been previously " +
"granted");
if (permissionRequester.ShouldShowRational(permissionNames[0]))
{
statusText.text = "This game needs to access external storage. Please grant " +
"permission when prompted.";
statusText.color = Color.red;
}
permissionRequester.RequestPermissions(permissionNames,
(GvrPermissionsRequester.PermissionStatus[] permissionResults) =>
{
statusText.color = Color.cyan;
permissionList.Clear();
permissionList.AddRange(permissionResults);
string msg = "";
foreach (GvrPermissionsRequester.PermissionStatus p in permissionList)
{
msg += p.Name + ": " + (p.Granted ? "Granted" : "Denied") + "\n";
}
statusText.text = msg;
});
}
else
{
statusText.text = "ExternalStorage permission already granted!";
}
}
}
#endif // (UNITY_ANDROID || UNITY_EDITOR)
}