Commit 2f0622dd76eb5c89a0ca36e03886c2ed243c8c13

Authored by Thiago Filipe Soares da Rocha
1 parent 80a71388

Finish refactoring

Assets/Scenes/Main.unity
... ... @@ -515,7 +515,7 @@ GameObject:
515 515 m_Icon: {fileID: 0}
516 516 m_NavMeshLayer: 0
517 517 m_StaticEditorFlags: 0
518   - m_IsActive: 0
  518 + m_IsActive: 1
519 519 --- !u!224 &126648712
520 520 RectTransform:
521 521 m_ObjectHideFlags: 0
... ... @@ -574,12 +574,12 @@ MonoBehaviour:
574 574 m_OnClick:
575 575 m_PersistentCalls:
576 576 m_Calls:
577   - - m_Target: {fileID: 0}
578   - m_MethodName:
  577 + - m_Target: {fileID: 210788816}
  578 + m_MethodName: OnCancel
579 579 m_Mode: 1
580 580 m_Arguments:
581 581 m_ObjectArgument: {fileID: 0}
582   - m_ObjectArgumentAssemblyTypeName:
  582 + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
583 583 m_IntArgument: 0
584 584 m_FloatArgument: 0
585 585 m_StringArgument:
... ... @@ -8431,7 +8431,7 @@ MonoBehaviour:
8431 8431 m_PersistentCalls:
8432 8432 m_Calls:
8433 8433 - m_Target: {fileID: 210788816}
8434   - m_MethodName: OnDownloadCancel
  8434 + m_MethodName: OnCancel
8435 8435 m_Mode: 1
8436 8436 m_Arguments:
8437 8437 m_ObjectArgument: {fileID: 0}
... ...
Assets/Scripts/Export Video/AndroidJavaUti.cs
1   -using UnityEngine;
  1 +/**********************
  2 +********LAVID**********
  3 +***VLibras Project*****
  4 +*------------------------------------------------------------------------
  5 +*Description:
  6 +*This class is an Android Plugin that gets the current sd card path from
  7 +* Android Device, making available the access to files folder.
  8 +*---------------------------------------------------------------------------
  9 +*Plugin directory:
  10 +* - Assets/Plugins/Android
  11 +*References:
  12 +* - http://docs.unity3d.com/ScriptReference/AndroidJavaClass.html
  13 +*------------------------------------------------------------------------
  14 +*Author: Thiago Filipe
  15 +*thiago.filipe@lavid.ufpb.br
  16 +***********************/
  17 +
  18 +using UnityEngine;
2 19 using System.Collections;
3 20 using System;
4 21  
... ... @@ -26,8 +43,6 @@ public class AndroidJavaUti{
26 43 return m_pkgName;
27 44 }
28 45 }
29   -
30   -
31 46 public static string CurrentSDCardPath
32 47 {
33 48 get
... ...
Assets/Scripts/Export Video/AndroidToast.cs
1   -using UnityEngine;
  1 +/**********************
  2 +********LAVID**********
  3 +***VLibras Project*****
  4 +*------------------------------------------------------------------------
  5 +*Description:
  6 +*This class is a Android Plugin that allows the creation of Toast
  7 +* notifications.
  8 +*---------------------------------------------------------------------------
  9 +*Plugin directory:
  10 +* - Assets/Plugins/Android
  11 +*References:
  12 +* - http://docs.unity3d.com/ScriptReference/AndroidJavaClass.html
  13 +*------------------------------------------------------------------------
  14 +*Author: Thiago Filipe
  15 +*thiago.filipe@lavid.ufpb.br
  16 +***********************/
  17 +
  18 +using UnityEngine;
2 19 using System.Collections;
3 20  
4 21 public class AndroidToast : MonoBehaviour
... ... @@ -7,7 +24,6 @@ public class AndroidToast : MonoBehaviour
7 24 AndroidJavaClass UnityPlayer;
8 25 AndroidJavaObject context;
9 26  
10   -
11 27 public void showToast(string toastString){
12 28 if (Application.platform == RuntimePlatform.Android)
13 29 {
... ... @@ -17,7 +33,7 @@ public class AndroidToast : MonoBehaviour
17 33  
18 34 AndroidJavaClass Toast = new AndroidJavaClass("android.widget.Toast");
19 35 AndroidJavaObject javaString = new AndroidJavaObject("java.lang.String", toastString);
20   - AndroidJavaObject toast = Toast.CallStatic<AndroidJavaObject>("makeText", context, javaString, Toast.GetStatic<int>("LENGTH_SHORT"));
  36 + AndroidJavaObject toast = Toast.CallStatic<AndroidJavaObject>("makeText", context, javaString, Toast.GetStatic<int>("LENGTH_LONG")); //Toast Duration Time
21 37 toast.Call("show");
22 38 }
23 39 }
... ...
Assets/Scripts/Export Video/ExportLayers.cs
... ... @@ -13,4 +13,12 @@ public class ExportLayers{
13 13 OnLockExport,
14 14 All
15 15 }
  16 +
  17 + public enum ConnectionStatusError
  18 + {
  19 + INTERNET_CONNECTION_FAILURE,
  20 + DOWNLOAD_CONNECTION_FAILURE,
  21 + CONNECTION_TIMEOUT_FAILURE,
  22 + ERROR_CONNECTION_FAILURE
  23 + }
16 24 }
... ...
Assets/Scripts/Export Video/ExportVideo.cs
... ... @@ -32,22 +32,34 @@ public class ExportVideo : MonoBehaviour {
32 32 public ScreenManager screenManager;
33 33 private MobileNativeDialog nativeDialog;
34 34  
35   - public static string gloss = "Gloss";
  35 + private static string gloss = "Gloss";
36 36 private string currentGloss = "CurrentGloss";
37 37 private string currentTime = "";
38 38 private const string SERVER_URL = "http://150.165.205.38/video/";
39 39  
  40 + /* Strings related to the Android Dialog*/
40 41 private string title = "Download";
41 42 private string message = "Para compartilhar é preciso realizar o download do vídeo. Tamanho do Download: ";
42 43 private string yesOp = "DOWNLOAD";
43 44 private string noOp = "CANCELAR";
  45 +
  46 +
44 47 private float videoSize = 0;
45   - private string videoId = "";
46   - private bool CancelDownload = false;
  48 + private string videoId = "";
47 49 private byte[] videoContent = null;
48   -
49 50  
50 51  
  52 + private bool videoRequestRunning = false;
  53 + private bool videoDownloadRunning = false;
  54 +
  55 +
  56 + /*Getting called by PlayerManager, setting the gloss property*/
  57 +
  58 + public static void SetGloss(string _gloss)
  59 + {
  60 + PlayerLogger.Log("ExportVideo", "SetGloss", "Setting current gloss to gloss property from ExportVideo");
  61 + gloss = _gloss;
  62 + }
51 63  
52 64 /* Function that hides the export button and
53 65 * shows the progress bar while getting video info*/
... ... @@ -61,7 +73,7 @@ public class ExportVideo : MonoBehaviour {
61 73 StartCoroutine("requestVideoInfo");
62 74 Debug.Log("Hiding export button and showing progress loading");
63 75  
64   - }
  76 + }
65 77  
66 78 /* Function that gets called by the web request
67 79 * hiding the progress bar and showing the download
... ... @@ -116,16 +128,30 @@ public class ExportVideo : MonoBehaviour {
116 128 screenManager.changeExportStates(ExportLayers.ExportLayer.Share_Layer, true);
117 129 }
118 130  
119   - public void OnDownloadCancel()
120   - {
121   - Debug.Log("User canceled the download, resetting states to default");
122   - CancelDownload = true;
123   - screenManager.changeExportStates(ExportLayers.ExportLayer.All, true);
124   - videoContent = null;
  131 + /*Cancels the VideoRequest or VideoDownload by interrupting the coroutine and resetting values*/
125 132  
  133 + public void OnCancel()
  134 + {
  135 + if (videoRequestRunning)
  136 + {
  137 + StopCoroutine("requestVideoInfo");
  138 + PlayerLogger.Log("ExportVideo", "OnRequestCancel", "User canceled the request, resetting states to default.");
  139 +
  140 + }else if (videoDownloadRunning)
  141 + {
  142 + StopCoroutine("videoDownload");
  143 + PlayerLogger.Log("ExportVideo", "videoDownload", "User canceled the download, resetting states to default.");
  144 + }
126 145  
  146 + videoId = "";
  147 + videoSize = 0;
  148 + videoContent = null;
  149 + screenManager.changeExportStates(ExportLayers.ExportLayer.All, true);
127 150 }
128 151  
  152 + /*With sharing layer active, gets called when the user clicks on it and makes
  153 + * the video available to share*/
  154 +
129 155 public void OnShareVideo()
130 156 {
131 157 Debug.Log("Sharing video content");
... ... @@ -136,6 +162,7 @@ public class ExportVideo : MonoBehaviour {
136 162 else
137 163 {
138 164 new AndroidToast().showToast("Erro ao compartilhar vídeo");
  165 + screenManager.changeExportStates(ExportLayers.ExportLayer.All, true);
139 166 }
140 167  
141 168 }else
... ... @@ -147,6 +174,7 @@ public class ExportVideo : MonoBehaviour {
147 174 new MediaShareAndroid().ShareActivity(videoContent, currentTime);
148 175 else
149 176 {
  177 + screenManager.changeExportStates(ExportLayers.ExportLayer.All, true);
150 178 new AndroidToast().showToast("Erro ao compartilhar vídeo");
151 179 }
152 180  
... ... @@ -154,85 +182,87 @@ public class ExportVideo : MonoBehaviour {
154 182  
155 183 }
156 184  
  185 + /*Coroutine that downloads the video and update the progress download layer*/
157 186  
158 187 private IEnumerator videoDownload()
159 188 {
  189 + videoDownloadRunning = true;
160 190 WWW DownloadVideo = new WWW(SERVER_URL + videoId);
161   - while (!CancelDownload && !DownloadVideo.isDone)
  191 + while (!DownloadVideo.isDone)
162 192 {
163 193 screenManager.updateProgressDownloadSprite(DownloadVideo.progress);
164 194 yield return null;
165 195 }
166 196  
167   - if (!CancelDownload)
  197 + try
168 198 {
169 199 if (DownloadVideo.bytesDownloaded > 0 && DownloadVideo.bytesDownloaded <= videoSize)
170 200 {
171 201 videoContent = DownloadVideo.bytes;
172   -
173 202 OnDownloadFinished();
174   - }else
  203 + }
  204 + else
175 205 {
176   - new AndroidToast().showToast("Erro ao efetuar download. Tente novamente");
177   - screenManager.changeExportStates(ExportLayers.ExportLayer.All, true);
  206 + GetConnectionStatusError(ExportLayers.ConnectionStatusError.DOWNLOAD_CONNECTION_FAILURE);
178 207 }
179   - }else
  208 +
  209 +
  210 + }
  211 + finally
180 212 {
181   - CancelDownload = false;
182   - yield break;
  213 + videoDownloadRunning = false;
183 214 }
184 215 }
185 216  
  217 + /*Coroutine that makes the video information request*/
  218 +
186 219 private IEnumerator requestVideoInfo()
187 220 {
188   -
  221 + videoRequestRunning = true;
189 222 WWWForm JsonRequest = new WWWForm();
190 223 JsonRequest.AddField("gloss", gloss);
191 224 WWW videoInfoRequest = new WWW(SERVER_URL,JsonRequest);
192   -
193   -
194   -
195 225  
196 226 PlayerLogger.Log("ExportVideo", "requestVideoInfo", "Request for: " + SERVER_URL);
197 227  
198 228 yield return WaitForResponse(videoInfoRequest);
199 229  
200   -
201   -
202 230 try
203 231 {
204 232 if (!videoInfoRequest.isDone)
205 233 {
206 234  
207 235 screenManager.changeExportStates(ExportLayers.ExportLayer.All, true);
208   - new AndroidToast().showToast("Erro de conexão, tenta novamente.");
  236 + GetConnectionStatusError(ExportLayers.ConnectionStatusError.CONNECTION_TIMEOUT_FAILURE);
209 237 PlayerLogger.Log("ExportVideo", "requestVideoInfo", "TimeOut");
210 238 }
211 239 else if (videoInfoRequest.error != null)
212 240 {
213 241  
214 242 screenManager.changeExportStates(ExportLayers.ExportLayer.All, true);
215   - new AndroidToast().showToast("Erro de conexão, tenta novamente.");
  243 + GetConnectionStatusError(ExportLayers.ConnectionStatusError.INTERNET_CONNECTION_FAILURE);
216 244 PlayerLogger.Log("ExportVideo", "requestVideoInfo", "(WWW) Error: " + videoInfoRequest.error);
217 245 }
218 246 else if (videoInfoRequest.responseHeaders.Count == 0)
219 247 {
220 248 PlayerLogger.Log("ExportVideo", "requestVideoInfo", "(WWW) Unsucessful Answer");
221   - new AndroidToast().showToast("Erro de conexão, tenta novamente.");
  249 + GetConnectionStatusError(ExportLayers.ConnectionStatusError.ERROR_CONNECTION_FAILURE);
222 250 screenManager.changeExportStates(ExportLayers.ExportLayer.All, true);
223 251  
224 252 }
225 253 else if (!videoInfoRequest.responseHeaders["STATUS"].Contains("200"))
226 254 {
227   - new AndroidToast().showToast("Erro de conexão, tenta novamente.");
  255 +
228 256 PlayerLogger.Log("ExportVideo", "requestVideoInfo", "Unsuccessful answer (" + videoInfoRequest.responseHeaders["STATUS"] + ").");
  257 + GetConnectionStatusError(ExportLayers.ConnectionStatusError.ERROR_CONNECTION_FAILURE);
229 258 screenManager.changeExportStates(ExportLayers.ExportLayer.All, true);
230 259  
231 260 }
232 261 else if (String.IsNullOrEmpty(videoInfoRequest.text))
233 262 {
234   - new AndroidToast().showToast("Erro de conexão, tenta novamente.");
  263 +
235 264 screenManager.changeExportStates(ExportLayers.ExportLayer.All, true);
  265 + GetConnectionStatusError(ExportLayers.ConnectionStatusError.ERROR_CONNECTION_FAILURE);
236 266 PlayerLogger.Log("ExportVideo", "requestVideoInfo", "Empty answer.");
237 267 }
238 268 else
... ... @@ -252,12 +282,15 @@ public class ExportVideo : MonoBehaviour {
252 282 }
253 283 finally
254 284 {
  285 + videoRequestRunning = false;
255 286  
256 287  
257 288  
258 289 }
259 290 }
260 291  
  292 +
  293 +
261 294 public IEnumerator WaitForResponse(WWW www, Events.RequestSuccess success, Events.RequestError error)
262 295 {
263 296 yield return Methods.WaitForResponse(www, 60f, success, error);
... ... @@ -269,6 +302,29 @@ public class ExportVideo : MonoBehaviour {
269 302 yield return WaitForResponse(www, null, null);
270 303 }
271 304  
  305 + public static void GetConnectionStatusError(ExportLayers.ConnectionStatusError error)
  306 + {
  307 + switch (error)
  308 + {
  309 + case ExportLayers.ConnectionStatusError.CONNECTION_TIMEOUT_FAILURE:
  310 + new AndroidToast().showToast("Erro de conexão. Tente novamente.");
  311 + break;
  312 + case ExportLayers.ConnectionStatusError.DOWNLOAD_CONNECTION_FAILURE:
  313 + new AndroidToast().showToast("Erro ao efetuar download, tente novamente.");
  314 + break;
  315 + case ExportLayers.ConnectionStatusError.INTERNET_CONNECTION_FAILURE:
  316 + new AndroidToast().showToast("Não há acesso à internet. Verifique sua conexão");
  317 + break;
  318 + case ExportLayers.ConnectionStatusError.ERROR_CONNECTION_FAILURE:
  319 + new AndroidToast().showToast("Problema na conexão. Aguarde e tente novamente.");
  320 + break;
  321 + default:
  322 + new AndroidToast().showToast("Ocorreu um erro. Estamos trabalhando para solucioná-lo!");
  323 + break;
  324 + }
  325 +
  326 + }
  327 +
272 328  
273 329  
274 330  
... ...
Assets/Scripts/Export Video/MediaShareAndroid.cs
... ... @@ -32,13 +32,13 @@ public class MediaShareAndroid : MonoBehaviour
32 32 private string FileName = "/VLibrasVideo_";
33 33  
34 34  
  35 + /*Makes sure that Vlibras Folder gets created and write the video bytes in it.*/
  36 +
35 37 private void WriteOnAndroid(byte[] videoContent)
36 38 {
37 39 if(!Directory.Exists(AndroidPath + Vlibras))
38 40 {
39   - Directory.CreateDirectory(AndroidPath + Vlibras);
40   -
41   -
  41 + Directory.CreateDirectory(AndroidPath + Vlibras);
42 42 }
43 43 if (!Directory.Exists(AndroidPath + Vlibras + FileName))
44 44 File.WriteAllBytes(AndroidPath + Vlibras + FileName, videoContent);
... ... @@ -47,7 +47,7 @@ public class MediaShareAndroid : MonoBehaviour
47 47  
48 48 }
49 49  
50   -
  50 + /* Creates the sharing activity and shows the chooser to the user*/
51 51  
52 52 public void ShareActivity(byte[] videoContent, string CurrentTime)
53 53 {
... ...
Assets/Scripts/PlayerManager.cs
... ... @@ -85,6 +85,8 @@ public class PlayerManager : GenericPlayerManager {
85 85 this.signs = this.gameObject.GetComponent<Dictionary>().Signs;
86 86 }
87 87  
  88 +
  89 +
88 90 public void playDict(string word)
89 91 {
90 92 PlayerLogger.Log("Requesting dictionary: " + word);
... ... @@ -93,7 +95,7 @@ public class PlayerManager : GenericPlayerManager {
93 95 base.gloss = word;
94 96  
95 97 base.playNow(word);
96   - ExportVideo.gloss = word;
  98 + ExportVideo.SetGloss(word);
97 99 this.screenManager.changeExportStates(ExportLayers.ExportLayer.OnLockExport, false);
98 100  
99 101 this.screenManager.hideScreen();
... ... @@ -279,10 +281,8 @@ public class PlayerManager : GenericPlayerManager {
279 281 gloss = glossRequest.text;
280 282  
281 283 base.gloss = gloss;
282   - ExportVideo.gloss = gloss;
283   -
284   - base.playNow(base.gloss);
285   -
  284 + ExportVideo.SetGloss(gloss);
  285 + base.playNow(base.gloss);
286 286  
287 287 yield break;
288 288 }
... ...
Assets/Scripts/UI/ScreenManager.cs
... ... @@ -371,7 +371,7 @@ public class ScreenManager : MonoBehaviour {
371 371 setShareLayerState(show_Layer);
372 372 break;
373 373 case ExportLayers.ExportLayer.OnLockExport:
374   - onLockExport = show_Layer;
  374 + onLockExport = show_Layer;
375 375 break;
376 376 default:
377 377 onLockExport = false;
... ...