Skip to content
This repository was archived by the owner on Sep 13, 2024. It is now read-only.

Commit b87f8bd

Browse files
First implementation for caching
1 parent db9f1ae commit b87f8bd

3 files changed

Lines changed: 206 additions & 7 deletions

File tree

app/src/main/java/com/coderbunker/kioskapp/KioskActivity.java

Lines changed: 38 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,15 @@
1212
import android.hardware.Camera;
1313
import android.net.http.SslError;
1414
import android.os.Bundle;
15+
import android.support.annotation.Nullable;
1516
import android.view.KeyEvent;
1617
import android.view.MotionEvent;
1718
import android.view.View;
1819
import android.view.Window;
1920
import android.view.WindowManager;
2021
import android.webkit.SslErrorHandler;
22+
import android.webkit.WebResourceRequest;
23+
import android.webkit.WebResourceResponse;
2124
import android.webkit.WebSettings;
2225
import android.webkit.WebView;
2326
import android.webkit.WebViewClient;
@@ -29,10 +32,14 @@
2932
import com.coderbunker.kioskapp.facerecognition.CameraPreview;
3033
import com.coderbunker.kioskapp.facerecognition.FaceDetectionListener;
3134
import com.coderbunker.kioskapp.lib.HOTP;
35+
import com.coderbunker.kioskapp.lib.SaveAndLoad;
3236
import com.coderbunker.kioskapp.lib.TOTP;
37+
import com.coderbunker.kioskapp.lib.URLRequest;
3338
import com.gun0912.tedpermission.PermissionListener;
3439
import com.gun0912.tedpermission.TedPermission;
3540

41+
import java.net.MalformedURLException;
42+
import java.net.URL;
3643
import java.util.ArrayList;
3744
import java.util.Arrays;
3845
import java.util.List;
@@ -48,7 +55,7 @@ public class KioskActivity extends Activity implements Observer {
4855
private WebView webView;
4956
private TextView face_detection_score, face_counter_view;
5057
private static String password = "1234";
51-
private static String URL = "";
58+
private static String url = "";
5259

5360
private final List blockedKeys = new ArrayList(Arrays.asList(KeyEvent.KEYCODE_VOLUME_DOWN,
5461
KeyEvent.KEYCODE_VOLUME_UP, KeyEvent.KEYCODE_BACK, KeyEvent.KEYCODE_HOME, KeyEvent.KEYCODE_POWER, KeyEvent.KEYCODE_APP_SWITCH));
@@ -96,7 +103,7 @@ protected void onCreate(Bundle savedInstanceState) {
96103
prefs = this.getSharedPreferences(
97104
"com.coderbunker.kioskapp", Context.MODE_PRIVATE);
98105

99-
URL = prefs.getString("url", "https://coderbunker.github.io/kiosk-web/");
106+
url = prefs.getString("url", "https://coderbunker.github.io/kiosk-web/");
100107
String otp = prefs.getString("otp", null);
101108

102109
if (otp == null) {
@@ -130,6 +137,31 @@ public void run() {
130137
timerLock.schedule(lock, 5000);
131138
}
132139

140+
@Nullable
141+
@Override
142+
public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
143+
System.out.println("Test: " + request.getUrl().toString());
144+
145+
try {
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+
String response = URLRequest.requestURL(new URL(request.getUrl().toString()), "GET", "");
152+
153+
SaveAndLoad.writeToFile(file_name, response, KioskActivity.this);
154+
}
155+
return new WebResourceResponse(SaveAndLoad.getMimeType(request.getUrl().toString()), "UTF-8", SaveAndLoad.readFromFileAndReturnInputStream(file_name, KioskActivity.this));
156+
157+
}
158+
} catch (MalformedURLException e) {
159+
e.printStackTrace();
160+
}
161+
162+
return super.shouldInterceptRequest(view, request);
163+
}
164+
133165
@Override
134166
public boolean shouldOverrideUrlLoading(WebView view, String url) {
135167
if (url.contains(url)) {
@@ -150,9 +182,9 @@ public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError e
150182
webView.getSettings().setAppCacheMaxSize(200 * 1024 * 1024);
151183
webView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);
152184
webView.getSettings().setMediaPlaybackRequiresUserGesture(false);
153-
webView.loadUrl(URL);
185+
webView.loadUrl(url);
154186

155-
Toast.makeText(this, "Loading " + URL, Toast.LENGTH_SHORT).show();
187+
Toast.makeText(this, "Loading " + url, Toast.LENGTH_SHORT).show();
156188

157189
//Touch events for password
158190
webView.setOnClickListener(new View.OnClickListener() {
@@ -215,14 +247,13 @@ public void run() {
215247
PermissionListener permissionlistener = new PermissionListener() {
216248
@Override
217249
public void onPermissionGranted() {
218-
try{
250+
try {
219251
mCamera.unlock();
220-
}catch (Exception e){
252+
} catch (Exception e) {
221253

222254
}
223255
mCamera = getCameraInstance();
224256
if (mCamera != null) {
225-
226257
FaceDetectionListener faceDetectionListener = new FaceDetectionListener();
227258
faceDetectionListener.addObserver(KioskActivity.this);
228259
mCamera.setFaceDetectionListener(faceDetectionListener);
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
package com.coderbunker.kioskapp.lib;
2+
3+
import android.content.Context;
4+
import android.util.Log;
5+
import android.webkit.MimeTypeMap;
6+
7+
import java.io.BufferedReader;
8+
import java.io.FileNotFoundException;
9+
import java.io.FileOutputStream;
10+
import java.io.IOException;
11+
import java.io.InputStream;
12+
import java.io.InputStreamReader;
13+
import java.io.OutputStreamWriter;
14+
15+
public class SaveAndLoad {
16+
//Source: https://stackoverflow.com/questions/14376807/how-to-read-write-string-from-a-file-in-android
17+
18+
public static void writeToFile(String filename, String data, Context ctx) {
19+
try {
20+
FileOutputStream fou = ctx.openFileOutput(filename, Context.MODE_PRIVATE);
21+
OutputStreamWriter osw = new OutputStreamWriter(fou);
22+
try {
23+
osw.write(data);
24+
osw.flush();
25+
osw.close();
26+
} catch (IOException e) {
27+
e.printStackTrace();
28+
}
29+
} catch (FileNotFoundException e) {
30+
e.printStackTrace();
31+
}
32+
}
33+
34+
public static String readFromFile(String filename, Context context) {
35+
36+
String ret = "";
37+
38+
try {
39+
InputStream inputStream = context.openFileInput(filename);
40+
41+
if (inputStream != null) {
42+
InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
43+
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
44+
String receiveString = "";
45+
StringBuilder stringBuilder = new StringBuilder();
46+
47+
while ((receiveString = bufferedReader.readLine()) != null) {
48+
stringBuilder.append(receiveString);
49+
}
50+
51+
inputStream.close();
52+
ret = stringBuilder.toString();
53+
}
54+
} catch (FileNotFoundException e) {
55+
Log.e("login activity", "File not found: " + e.toString());
56+
} catch (IOException e) {
57+
Log.e("login activity", "Can not read file: " + e.toString());
58+
}
59+
60+
return ret;
61+
}
62+
63+
public static InputStream readFromFileAndReturnInputStream(String filename, Context context) {
64+
65+
String ret = "";
66+
67+
try {
68+
InputStream inputStream = context.openFileInput(filename);
69+
70+
return inputStream;
71+
} catch (FileNotFoundException e) {
72+
Log.e("login activity", "File not found: " + e.toString());
73+
} catch (IOException e) {
74+
Log.e("login activity", "Can not read file: " + e.toString());
75+
}
76+
77+
return null;
78+
}
79+
80+
public static String getMimeType(String url) {
81+
String type = null;
82+
String extension = MimeTypeMap.getFileExtensionFromUrl(url);
83+
if (extension != null) {
84+
type = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
85+
}
86+
return type;
87+
}
88+
}
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
package com.coderbunker.kioskapp.lib;
2+
3+
import android.os.StrictMode;
4+
5+
import java.io.BufferedInputStream;
6+
import java.io.BufferedReader;
7+
import java.io.IOException;
8+
import java.io.InputStream;
9+
import java.io.InputStreamReader;
10+
import java.io.OutputStreamWriter;
11+
import java.net.HttpURLConnection;
12+
import java.net.ProtocolException;
13+
import java.net.URL;
14+
15+
public class URLRequest {
16+
public static String requestURL(URL url, String method, String body) {
17+
18+
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
19+
StrictMode.setThreadPolicy(policy);
20+
21+
String result = "";
22+
HttpURLConnection httpCon = null;
23+
try {
24+
try {
25+
httpCon = (HttpURLConnection) url.openConnection();
26+
} catch (IOException e) {
27+
e.printStackTrace();
28+
}
29+
assert httpCon != null;
30+
httpCon.setDoOutput(true);
31+
try {
32+
httpCon.setRequestMethod(method);
33+
} catch (ProtocolException e) {
34+
e.printStackTrace();
35+
}
36+
OutputStreamWriter out = null;
37+
try {
38+
out = new OutputStreamWriter(httpCon.getOutputStream());
39+
} catch (IOException e) {
40+
e.printStackTrace();
41+
}
42+
try {
43+
assert out != null;
44+
out.write(body);
45+
} catch (IOException e) {
46+
e.printStackTrace();
47+
}
48+
try {
49+
out.close();
50+
} catch (IOException e) {
51+
e.printStackTrace();
52+
}
53+
try {
54+
httpCon.getInputStream();
55+
} catch (IOException e) {
56+
e.printStackTrace();
57+
}
58+
59+
InputStream is = null;
60+
result = "";
61+
try {
62+
is = new BufferedInputStream(httpCon.getInputStream());
63+
} catch (IOException e) {
64+
e.printStackTrace();
65+
}
66+
BufferedReader br = new BufferedReader(new InputStreamReader(is));
67+
String inputLine = "";
68+
try {
69+
while ((inputLine = br.readLine()) != null) {
70+
result += inputLine;
71+
}
72+
} catch (IOException e) {
73+
e.printStackTrace();
74+
}
75+
return result;
76+
} catch (NullPointerException e) {
77+
return "";
78+
}
79+
}
80+
}

0 commit comments

Comments
 (0)