1
1
package com .coderbunker .kioskapp ;
2
2
3
+ import android .Manifest ;
3
4
import android .app .Activity ;
4
5
import android .app .Dialog ;
5
6
import android .content .Context ;
11
12
import android .hardware .Camera ;
12
13
import android .net .http .SslError ;
13
14
import android .os .Bundle ;
15
+ import android .support .annotation .Nullable ;
14
16
import android .view .KeyEvent ;
15
17
import android .view .MotionEvent ;
16
18
import android .view .View ;
17
19
import android .view .Window ;
18
20
import android .view .WindowManager ;
19
21
import android .webkit .SslErrorHandler ;
22
+ import android .webkit .WebResourceRequest ;
23
+ import android .webkit .WebResourceResponse ;
20
24
import android .webkit .WebSettings ;
21
25
import android .webkit .WebView ;
22
26
import android .webkit .WebViewClient ;
28
32
import com .coderbunker .kioskapp .facerecognition .CameraPreview ;
29
33
import com .coderbunker .kioskapp .facerecognition .FaceDetectionListener ;
30
34
import com .coderbunker .kioskapp .lib .HOTP ;
35
+ import com .coderbunker .kioskapp .lib .SaveAndLoad ;
31
36
import com .coderbunker .kioskapp .lib .TOTP ;
37
+ import com .coderbunker .kioskapp .lib .URLRequest ;
38
+ import com .gun0912 .tedpermission .PermissionListener ;
39
+ import com .gun0912 .tedpermission .TedPermission ;
32
40
33
41
import java .util .ArrayList ;
34
42
import java .util .Arrays ;
@@ -45,7 +53,7 @@ public class KioskActivity extends Activity implements Observer {
45
53
private WebView webView ;
46
54
private TextView face_detection_score , face_counter_view ;
47
55
private static String password = "1234" ;
48
- private static String URL = "" ;
56
+ private static String url = "" ;
49
57
50
58
private final List blockedKeys = new ArrayList (Arrays .asList (KeyEvent .KEYCODE_VOLUME_DOWN ,
51
59
KeyEvent .KEYCODE_VOLUME_UP , KeyEvent .KEYCODE_BACK , KeyEvent .KEYCODE_HOME , KeyEvent .KEYCODE_POWER , KeyEvent .KEYCODE_APP_SWITCH ));
@@ -68,6 +76,8 @@ public class KioskActivity extends Activity implements Observer {
68
76
private Camera mCamera ;
69
77
private CameraPreview mCameraPreview ;
70
78
79
+ private boolean enableCaching = false ;
80
+
71
81
@ Override
72
82
public void onBackPressed () {
73
83
//Do nothing...
@@ -93,7 +103,7 @@ protected void onCreate(Bundle savedInstanceState) {
93
103
prefs = this .getSharedPreferences (
94
104
"com.coderbunker.kioskapp" , Context .MODE_PRIVATE );
95
105
96
- URL = prefs .getString ("url" , "https://coderbunker.github.io/kiosk-web/" );
106
+ url = prefs .getString ("url" , "https://coderbunker.github.io/kiosk-web/" );
97
107
String otp = prefs .getString ("otp" , null );
98
108
99
109
if (otp == null ) {
@@ -127,6 +137,26 @@ public void run() {
127
137
timerLock .schedule (lock , 5000 );
128
138
}
129
139
140
+ @ Nullable
141
+ @ Override
142
+ public WebResourceResponse shouldInterceptRequest (WebView view , WebResourceRequest request ) {
143
+ System .out .println ("Test: " + request .getUrl ().toString ());
144
+
145
+ if (enableCaching ) {
146
+ if (request .getUrl ().toString ().contains (".mp4" ) || request .getUrl ().toString ().contains (".wav" )) {
147
+ String [] url_parts = request .getUrl ().toString ().split ("/" );
148
+ String file_name = url_parts [url_parts .length - 1 ];
149
+
150
+ if (SaveAndLoad .readFromFile (file_name , KioskActivity .this ).equals ("" )) {
151
+ URLRequest .startDownload (request .getUrl ().toString (), file_name );
152
+ }
153
+ return new WebResourceResponse (SaveAndLoad .getMimeType (request .getUrl ().toString ()), "UTF-8" , SaveAndLoad .readFromFileAndReturnInputStream (file_name , KioskActivity .this ));
154
+
155
+ }
156
+ }
157
+ return super .shouldInterceptRequest (view , request );
158
+ }
159
+
130
160
@ Override
131
161
public boolean shouldOverrideUrlLoading (WebView view , String url ) {
132
162
if (url .contains (url )) {
@@ -141,14 +171,15 @@ public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError e
141
171
handler .proceed (); //Ignore SSL certificate error
142
172
}
143
173
});
174
+
144
175
webView .getSettings ().setJavaScriptEnabled (true );
145
176
webView .getSettings ().setAppCacheEnabled (true );
146
- webView .getSettings ().setAppCacheMaxSize (5000 * 1000 * 1000 );
147
- webView .getSettings ().setCacheMode (WebSettings .LOAD_CACHE_ELSE_NETWORK );
177
+ webView .getSettings ().setAppCacheMaxSize (200 * 1024 * 1024 );
178
+ webView .getSettings ().setCacheMode (WebSettings .LOAD_DEFAULT );
148
179
webView .getSettings ().setMediaPlaybackRequiresUserGesture (false );
149
- webView .loadUrl (URL );
180
+ webView .loadUrl (url );
150
181
151
- Toast .makeText (this , "Loading " + URL , Toast .LENGTH_SHORT ).show ();
182
+ Toast .makeText (this , "Loading " + url , Toast .LENGTH_SHORT ).show ();
152
183
153
184
//Touch events for password
154
185
webView .setOnClickListener (new View .OnClickListener () {
@@ -207,22 +238,41 @@ public void run() {
207
238
208
239
209
240
if (checkCameraHardware (this )) {
210
- mCamera = getCameraInstance ();
211
- if (mCamera != null ) {
212
241
213
- FaceDetectionListener faceDetectionListener = new FaceDetectionListener ();
214
- faceDetectionListener .addObserver (this );
215
- mCamera .setFaceDetectionListener (faceDetectionListener );
242
+ PermissionListener permissionlistener = new PermissionListener () {
243
+ @ Override
244
+ public void onPermissionGranted () {
245
+ try {
246
+ mCamera .unlock ();
247
+ } catch (Exception e ) {
216
248
217
- mCameraPreview = new CameraPreview (this , mCamera );
249
+ }
250
+ mCamera = getCameraInstance ();
251
+ if (mCamera != null ) {
252
+ FaceDetectionListener faceDetectionListener = new FaceDetectionListener ();
253
+ faceDetectionListener .addObserver (KioskActivity .this );
254
+ mCamera .setFaceDetectionListener (faceDetectionListener );
218
255
219
- FrameLayout preview = findViewById (R .id .camera_preview );
220
- preview .addView (mCameraPreview );
256
+ mCameraPreview = new CameraPreview (context , mCamera );
221
257
222
- mCamera . startPreview ( );
223
- } else {
258
+ FrameLayout preview = findViewById ( R . id . camera_preview );
259
+ preview . addView ( mCameraPreview );
224
260
225
- }
261
+ mCamera .startPreview ();
262
+ Toast .makeText (context , "Face recognition started" , Toast .LENGTH_LONG ).show ();
263
+ } else {
264
+ Toast .makeText (context , "Due a camera issue the face recognition can not be started." , Toast .LENGTH_LONG ).show ();
265
+ }
266
+ }
267
+
268
+ @ Override
269
+ public void onPermissionDenied (ArrayList <String > deniedPermissions ) {
270
+ Toast .makeText (context , "Face recognition not active due denied permissions." , Toast .LENGTH_SHORT ).show ();
271
+ }
272
+
273
+ };
274
+
275
+ TedPermission .with (context ).setPermissionListener (permissionlistener ).setPermissions (Manifest .permission .CAMERA ).check ();
226
276
}
227
277
228
278
@@ -465,31 +515,12 @@ protected void onPause() {
465
515
super .onPause ();
466
516
}
467
517
468
- private long last_detected = 0 ;
469
- private long face_current_counter = 0 ;
470
- private long face_counter = 0 ;
471
-
472
518
@ Override
473
519
public void update (Observable o , Object arg ) {
474
520
if (o instanceof FaceDetectionListener ) {
475
- Camera .Face face = ((Camera .Face ) arg );
476
-
477
- face_detection_score .setText ("Score:" + face .score );
478
-
479
- if (face .score >= 85 ) {
480
- face_current_counter ++;
481
- } else {
482
- face_current_counter = 0 ;
483
- }
484
-
485
- if (face_current_counter >= 5 && last_detected < System .currentTimeMillis () + 45000 ) {
486
- face_counter ++;
487
- last_detected = System .currentTimeMillis ();
488
- face_current_counter = -5000 ;
489
- }
490
-
491
- face_counter_view .setText ("Viewers: " + face_counter );
492
-
521
+ Camera .Face [] faces = ((Camera .Face []) arg );
522
+ //face_detection_score.setText("Faces:" + faces.length);
523
+ face_counter_view .setText ("Current faces: " + faces .length );
493
524
}
494
525
}
495
526
}
0 commit comments