Skip to content

Commit 8de9bbe

Browse files
committed
Added I/O Permissions
- Added App Icon - Added Permission Manager - Added Crop Border
1 parent 7a1448a commit 8de9bbe

21 files changed

+642
-48
lines changed

Assets/Plugins.meta

+8
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Assets/Plugins/Android.meta

+8
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.enikhil7.docscannner" xmlns:tools="http://schemas.android.com/tools" android:installLocation="preferExternal">
3+
<supports-screens android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" android:xlargeScreens="true" android:anyDensity="true" />
4+
<application android:theme="@style/UnityThemeSelector" android:icon="@mipmap/app_icon" android:label="@string/app_name">
5+
<activity android:name="com.unity3d.player.UnityPlayerActivity" android:label="@string/app_name" android:screenOrientation="sensorLandscape" android:launchMode="singleTask" android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|orientation|screenLayout|uiMode|screenSize|smallestScreenSize|fontScale|layoutDirection|density" android:hardwareAccelerated="false">
6+
<intent-filter>
7+
<action android:name="android.intent.action.MAIN" />
8+
<category android:name="android.intent.category.LAUNCHER" />
9+
</intent-filter>
10+
<meta-data android:name="unityplayer.UnityActivity" android:value="true" />
11+
<meta-data android:name="android.notch_support" android:value="true" />
12+
</activity>
13+
<meta-data android:name="unity.build-id" android:value="1863c0ed-c89f-49a8-af95-cd9010f26443" />
14+
<meta-data android:name="unity.splash-mode" android:value="0" />
15+
<meta-data android:name="unity.splash-enable" android:value="True" />
16+
<meta-data android:name="notch.config" android:value="portrait|landscape" />
17+
</application>
18+
<uses-feature android:glEsVersion="0x00020000" />
19+
<uses-permission android:name="android.permission.INTERNET" />
20+
<uses-permission android:name="android.permission.CAMERA" />
21+
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
22+
<uses-feature android:name="android.hardware.camera" android:required="false" />
23+
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />
24+
<uses-feature android:name="android.hardware.camera.front" android:required="false" />
25+
<uses-feature android:name="android.hardware.touchscreen" android:required="false" />
26+
<uses-feature android:name="android.hardware.touchscreen.multitouch" android:required="false" />
27+
<uses-feature android:name="android.hardware.touchscreen.multitouch.distinct" android:required="false" />
28+
</manifest>

Assets/Plugins/Android/AndroidManifest.xml.meta

+7
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Binary file not shown.

Assets/Plugins/Android/unityandroidpermissions.aar.meta

+32
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
using System;
2+
using UnityEngine;
3+
4+
public class AndroidPermissionCallback : AndroidJavaProxy
5+
{
6+
private event Action<string> OnPermissionGrantedAction;
7+
private event Action<string> OnPermissionDeniedAction;
8+
private event Action<string> OnPermissionDeniedAndDontAskAgainAction;
9+
10+
public AndroidPermissionCallback(Action<string> onGrantedCallback, Action<string> onDeniedCallback, Action<string> onDeniedAndDontAskAgainCallback)
11+
: base("com.unity3d.plugin.UnityAndroidPermissions$IPermissionRequestResult")
12+
{
13+
if (onGrantedCallback != null)
14+
{
15+
OnPermissionGrantedAction += onGrantedCallback;
16+
}
17+
if (onDeniedCallback != null)
18+
{
19+
OnPermissionDeniedAction += onDeniedCallback;
20+
}
21+
if (onDeniedAndDontAskAgainCallback != null)
22+
{
23+
OnPermissionDeniedAndDontAskAgainAction += onDeniedAndDontAskAgainCallback;
24+
}
25+
}
26+
27+
// Handle permission granted
28+
public virtual void OnPermissionGranted(string permissionName)
29+
{
30+
//Debug.Log("Permission " + permissionName + " GRANTED");
31+
if (OnPermissionGrantedAction != null)
32+
{
33+
OnPermissionGrantedAction(permissionName);
34+
}
35+
}
36+
37+
// Handle permission denied
38+
public virtual void OnPermissionDenied(string permissionName)
39+
{
40+
//Debug.Log("Permission " + permissionName + " DENIED!");
41+
if (OnPermissionDeniedAction != null)
42+
{
43+
OnPermissionDeniedAction(permissionName);
44+
}
45+
}
46+
47+
// Handle permission denied and 'Dont ask again' selected
48+
// Note: falls back to OnPermissionDenied() if action not registered
49+
public virtual void OnPermissionDeniedAndDontAskAgain(string permissionName)
50+
{
51+
//Debug.Log("Permission " + permissionName + " DENIED and 'Dont ask again' was selected!");
52+
if (OnPermissionDeniedAndDontAskAgainAction != null)
53+
{
54+
OnPermissionDeniedAndDontAskAgainAction(permissionName);
55+
}
56+
else if (OnPermissionDeniedAction != null)
57+
{
58+
// Fall back to OnPermissionDeniedAction
59+
OnPermissionDeniedAction(permissionName);
60+
}
61+
}
62+
}
63+
64+
public class AndroidPermissionsManager
65+
{
66+
private static AndroidJavaObject m_Activity;
67+
private static AndroidJavaObject m_PermissionService;
68+
69+
private static AndroidJavaObject GetActivity()
70+
{
71+
if (m_Activity == null)
72+
{
73+
var unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
74+
m_Activity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
75+
}
76+
return m_Activity;
77+
}
78+
79+
private static AndroidJavaObject GetPermissionsService()
80+
{
81+
return m_PermissionService ??
82+
(m_PermissionService = new AndroidJavaObject("com.unity3d.plugin.UnityAndroidPermissions"));
83+
}
84+
85+
public static bool IsPermissionGranted(string permissionName)
86+
{
87+
return GetPermissionsService().Call<bool>("IsPermissionGranted", GetActivity(), permissionName);
88+
}
89+
90+
public static void RequestPermission(string permissionName, AndroidPermissionCallback callback)
91+
{
92+
RequestPermission(new[] { permissionName }, callback);
93+
}
94+
95+
public static void RequestPermission(string[] permissionNames, AndroidPermissionCallback callback)
96+
{
97+
GetPermissionsService().Call("RequestPermissionAsync", GetActivity(), permissionNames, callback);
98+
}
99+
}

Assets/Scripts/AndroidPermissionsManager.cs.meta

+11
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Assets/Scripts/DDOL_Navigation.cs

+64-1
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,29 @@ public class DDOL_Navigation : MonoBehaviour
1010
public static DDOL_Navigation Instance;
1111

1212
public GameObject blocker;
13+
public GameObject cropBorder;
1314
public Texture2D testingTexture;
1415
public StreamManager streamManager;
1516
public GameObject controlsParent;
1617
public RawImage capturedImage;
1718

19+
event System.Action<string> Granted;
20+
event System.Action<string> Denied;
21+
event System.Action<string> DontAskDenied;
22+
1823
public static Texture2D SavedTexture { private set; get; }
1924

2025
void Awake()
2126
{
22-
blocker.SetActive(!Permission.HasUserAuthorizedPermission(Permission.Camera));
27+
Granted = new System.Action<string>(GrantedCallback);
28+
Denied = new System.Action<string>(DeniedCallback);
29+
DontAskDenied = new System.Action<string>(DontAskDeniedCallback);
30+
31+
AndroidPermissionCallback permissionCallback = new AndroidPermissionCallback(Granted, Denied, DontAskDenied);
32+
33+
AndroidPermissionsManager.RequestPermission(new string[] { Permission.Camera, Permission.ExternalStorageWrite }, permissionCallback);
34+
35+
blocker.SetActive(!(Permission.HasUserAuthorizedPermission(Permission.Camera) && Permission.HasUserAuthorizedPermission(Permission.ExternalStorageWrite)));
2336

2437
if (!Instance)
2538
{
@@ -30,6 +43,52 @@ void Awake()
3043
capturedImage.gameObject.SetActive(false);
3144
}
3245

46+
void GrantedCallback(string callback)
47+
{
48+
Debug.LogError("GrantedCallback: " + callback);
49+
}
50+
void DeniedCallback(string callback)
51+
{
52+
Debug.LogError("DeniedCallback: " + callback);
53+
}
54+
void DontAskDeniedCallback(string callback)
55+
{
56+
Debug.LogError("DontAskDeniedCallback: " + callback);
57+
}
58+
59+
/*
60+
void Start()
61+
{
62+
#if PLATFORM_ANDROID
63+
if (!Permission.HasUserAuthorizedPermission(Permission.Microphone))
64+
{
65+
Permission.RequestUserPermission(Permission.Microphone);
66+
dialog = new GameObject();
67+
}
68+
#endif
69+
}
70+
71+
void OnGUI()
72+
{
73+
#if PLATFORM_ANDROID
74+
if (!Permission.HasUserAuthorizedPermission(Permission.Microphone))
75+
{
76+
// The user denied permission to use the microphone.
77+
// Display a message explaining why you need it with Yes/No buttons.
78+
// If the user says yes then present the request again
79+
// Display a dialog here.
80+
dialog.AddComponent<PermissionsRationaleDialog>();
81+
return;
82+
}
83+
else if (dialog != null)
84+
{
85+
Destroy(dialog);
86+
}
87+
#endif
88+
89+
// Now you can do things with the microphone
90+
}*/
91+
3392
void Update()
3493
{
3594
if (Input.GetKeyDown(KeyCode.Escape)) Application.Quit();
@@ -66,11 +125,15 @@ public void ResetTexture()
66125
IEnumerator Capture(Texture2D capturedTexture)
67126
{
68127
controlsParent.SetActive(false);
128+
cropBorder.SetActive(false);
69129
yield return new WaitForEndOfFrame();
70130

131+
Debug.Log("Cam Texture: " + streamManager.WebCam.width + "X" + streamManager.WebCam.height);
132+
71133
capturedTexture.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0, false);
72134
capturedTexture.Apply();
73135

136+
cropBorder.SetActive(true);
74137
controlsParent.SetActive(true);
75138
}
76139
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
using UnityEngine;
2+
using UnityEngine.Android;
3+
4+
public class PermissionsRationaleDialog : MonoBehaviour
5+
{
6+
const int kDialogWidth = 300;
7+
const int kDialogHeight = 100;
8+
private bool windowOpen = true;
9+
10+
void DoMyWindow(int windowID)
11+
{
12+
GUI.Label(new Rect(10, 20, kDialogWidth - 20, kDialogHeight - 50), "Please let me use the microphone.");
13+
GUI.Button(new Rect(10, kDialogHeight - 30, 100, 20), "No");
14+
if (GUI.Button(new Rect(kDialogWidth - 110, kDialogHeight - 30, 100, 20), "Yes"))
15+
{
16+
#if PLATFORM_ANDROID
17+
Permission.RequestUserPermission(Permission.Microphone);
18+
#endif
19+
windowOpen = false;
20+
}
21+
}
22+
23+
void OnGUI()
24+
{
25+
if (windowOpen)
26+
{
27+
Rect rect = new Rect((Screen.width / 2) - (kDialogWidth / 2), (Screen.height / 2) - (kDialogHeight / 2), kDialogWidth, kDialogHeight);
28+
GUI.ModalWindow(0, rect, DoMyWindow, "Permissions Request Dialog");
29+
}
30+
}
31+
}

Assets/Scripts/PermissionsRationaleDialog.cs.meta

+11
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)