11package com .coderbunker .kioskapp ;
22
3+ import android .Manifest ;
34import android .app .Activity ;
45import android .app .Dialog ;
56import android .content .Context ;
1112import android .hardware .Camera ;
1213import android .net .http .SslError ;
1314import android .os .Bundle ;
15+ import android .support .annotation .Nullable ;
1416import android .view .KeyEvent ;
1517import android .view .MotionEvent ;
1618import android .view .View ;
1719import android .view .Window ;
1820import android .view .WindowManager ;
1921import android .webkit .SslErrorHandler ;
22+ import android .webkit .WebResourceRequest ;
23+ import android .webkit .WebResourceResponse ;
2024import android .webkit .WebSettings ;
2125import android .webkit .WebView ;
2226import android .webkit .WebViewClient ;
2832import com .coderbunker .kioskapp .facerecognition .CameraPreview ;
2933import com .coderbunker .kioskapp .facerecognition .FaceDetectionListener ;
3034import com .coderbunker .kioskapp .lib .HOTP ;
35+ import com .coderbunker .kioskapp .lib .SaveAndLoad ;
3136import com .coderbunker .kioskapp .lib .TOTP ;
37+ import com .coderbunker .kioskapp .lib .URLRequest ;
38+ import com .gun0912 .tedpermission .PermissionListener ;
39+ import com .gun0912 .tedpermission .TedPermission ;
3240
3341import java .util .ArrayList ;
3442import java .util .Arrays ;
@@ -45,7 +53,7 @@ public class KioskActivity extends Activity implements Observer {
4553 private WebView webView ;
4654 private TextView face_detection_score , face_counter_view ;
4755 private static String password = "1234" ;
48- private static String URL = "" ;
56+ private static String url = "" ;
4957
5058 private final List blockedKeys = new ArrayList (Arrays .asList (KeyEvent .KEYCODE_VOLUME_DOWN ,
5159 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 {
6876 private Camera mCamera ;
6977 private CameraPreview mCameraPreview ;
7078
79+ private boolean enableCaching = false ;
80+
7181 @ Override
7282 public void onBackPressed () {
7383 //Do nothing...
@@ -93,7 +103,7 @@ protected void onCreate(Bundle savedInstanceState) {
93103 prefs = this .getSharedPreferences (
94104 "com.coderbunker.kioskapp" , Context .MODE_PRIVATE );
95105
96- URL = prefs .getString ("url" , "https://coderbunker.github.io/kiosk-web/" );
106+ url = prefs .getString ("url" , "https://coderbunker.github.io/kiosk-web/" );
97107 String otp = prefs .getString ("otp" , null );
98108
99109 if (otp == null ) {
@@ -127,6 +137,26 @@ public void run() {
127137 timerLock .schedule (lock , 5000 );
128138 }
129139
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+
130160 @ Override
131161 public boolean shouldOverrideUrlLoading (WebView view , String url ) {
132162 if (url .contains (url )) {
@@ -141,14 +171,15 @@ public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError e
141171 handler .proceed (); //Ignore SSL certificate error
142172 }
143173 });
174+
144175 webView .getSettings ().setJavaScriptEnabled (true );
145176 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 );
148179 webView .getSettings ().setMediaPlaybackRequiresUserGesture (false );
149- webView .loadUrl (URL );
180+ webView .loadUrl (url );
150181
151- Toast .makeText (this , "Loading " + URL , Toast .LENGTH_SHORT ).show ();
182+ Toast .makeText (this , "Loading " + url , Toast .LENGTH_SHORT ).show ();
152183
153184 //Touch events for password
154185 webView .setOnClickListener (new View .OnClickListener () {
@@ -207,22 +238,41 @@ public void run() {
207238
208239
209240 if (checkCameraHardware (this )) {
210- mCamera = getCameraInstance ();
211- if (mCamera != null ) {
212241
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 ) {
216248
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 );
218255
219- FrameLayout preview = findViewById (R .id .camera_preview );
220- preview .addView (mCameraPreview );
256+ mCameraPreview = new CameraPreview (context , mCamera );
221257
222- mCamera . startPreview ( );
223- } else {
258+ FrameLayout preview = findViewById ( R . id . camera_preview );
259+ preview . addView ( mCameraPreview );
224260
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 ();
226276 }
227277
228278
@@ -465,31 +515,12 @@ protected void onPause() {
465515 super .onPause ();
466516 }
467517
468- private long last_detected = 0 ;
469- private long face_current_counter = 0 ;
470- private long face_counter = 0 ;
471-
472518 @ Override
473519 public void update (Observable o , Object arg ) {
474520 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 );
493524 }
494525 }
495526}
0 commit comments