From 1e0e687b7133d7f1dff5bf3e4f94fb27fc049510 Mon Sep 17 00:00:00 2001 From: Philipp Schaefer Date: Fri, 20 Dec 2013 23:21:26 +0100 Subject: [PATCH 1/9] pause/resume webview too on activities pause/resume --- .../src/com/cradle/iitc_mobile/IITC_Mobile.java | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java b/mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java index 2cd93077..3f3f4bd5 100644 --- a/mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java +++ b/mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java @@ -13,7 +13,6 @@ import android.content.IntentFilter; import android.content.SharedPreferences; import android.content.SharedPreferences.OnSharedPreferenceChangeListener; import android.content.res.Configuration; -import android.location.Location; import android.net.Uri; import android.os.Bundle; import android.os.Handler; @@ -267,6 +266,20 @@ public class IITC_Mobile extends Activity implements OnSharedPreferenceChangeLis } } + @Override + protected void onResume() { + mIitcWebView.resumeTimers(); + mIitcWebView.onResume(); + super.onResume(); + } + + @Override + protected void onPause() { + mIitcWebView.pauseTimers(); + mIitcWebView.onPause(); + super.onPause(); + } + @Override protected void onStop() { Log.d("iitcm", "stopping iitcm"); From fa89fc67d85f94a7e7c5c79e4b9e7223621f1dac Mon Sep 17 00:00:00 2001 From: Philipp Schaefer Date: Sat, 21 Dec 2013 17:09:34 +0100 Subject: [PATCH 2/9] new tile management --- mobile/IITC_Mobile.iml | 2 +- .../cradle/iitc_mobile/IITC_Application.java | 9 +++ .../cradle/iitc_mobile/IITC_TileManager.java | 44 ++++++++++++ .../com/cradle/iitc_mobile/IITC_WebView.java | 2 +- .../iitc_mobile/IITC_WebViewClient.java | 31 ++++++--- .../iitc_mobile/async/DownloadTile.java | 69 +++++++++++++++++++ 6 files changed, 144 insertions(+), 13 deletions(-) create mode 100644 mobile/src/com/cradle/iitc_mobile/IITC_TileManager.java create mode 100644 mobile/src/com/cradle/iitc_mobile/async/DownloadTile.java diff --git a/mobile/IITC_Mobile.iml b/mobile/IITC_Mobile.iml index 7647439e..66d0a847 100644 --- a/mobile/IITC_Mobile.iml +++ b/mobile/IITC_Mobile.iml @@ -9,7 +9,7 @@ - + diff --git a/mobile/src/com/cradle/iitc_mobile/IITC_Application.java b/mobile/src/com/cradle/iitc_mobile/IITC_Application.java index 23327f58..1f203448 100644 --- a/mobile/src/com/cradle/iitc_mobile/IITC_Application.java +++ b/mobile/src/com/cradle/iitc_mobile/IITC_Application.java @@ -20,4 +20,13 @@ public class IITC_Application extends Application { return super.getCacheDir(); } } + + @Override + public File getFilesDir() { + if (PreferenceManager.getDefaultSharedPreferences(this).getBoolean("pref_external_storage", false)) { + return (getExternalFilesDir(null) != null) ? getExternalFilesDir(null) : super.getFilesDir(); + } else { + return super.getFilesDir(); + } + } } diff --git a/mobile/src/com/cradle/iitc_mobile/IITC_TileManager.java b/mobile/src/com/cradle/iitc_mobile/IITC_TileManager.java new file mode 100644 index 00000000..7acf1ee3 --- /dev/null +++ b/mobile/src/com/cradle/iitc_mobile/IITC_TileManager.java @@ -0,0 +1,44 @@ +package com.cradle.iitc_mobile; + +import android.util.Log; +import android.webkit.WebResourceResponse; + +import com.cradle.iitc_mobile.async.DownloadTile; + +import java.io.BufferedInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.InputStream; +import java.net.URL; +import java.net.URLConnection; + +public class IITC_TileManager { + + private final IITC_Mobile mIitc; + private static final String TYPE = "image/*"; + private static final String ENCODING = null; + + IITC_TileManager(IITC_Mobile iitc) { + mIitc = iitc; + } + + public WebResourceResponse getTile(String url) throws Exception { + Log.d("iitcm", "checking for tile: " + url); + String path = mIitc.getApplication().getFilesDir().toString() + "/" + url; + path = path.replace("http://", ""); + path = path.replace("https://", ""); + String[] split = path.split("/"); + String fileName = split[split.length - 1]; + path = path.replace(fileName, ""); + File file = new File(path, fileName); + if (file.exists()) { + InputStream in = new BufferedInputStream(new FileInputStream(file)); + return new WebResourceResponse(TYPE, ENCODING, in); + } else { + // asynchronously download tile to cache and let webviewclient load the resource + new DownloadTile(path, fileName).execute(url); + return null; + } + } +} diff --git a/mobile/src/com/cradle/iitc_mobile/IITC_WebView.java b/mobile/src/com/cradle/iitc_mobile/IITC_WebView.java index 206513d6..5503db5c 100644 --- a/mobile/src/com/cradle/iitc_mobile/IITC_WebView.java +++ b/mobile/src/com/cradle/iitc_mobile/IITC_WebView.java @@ -118,7 +118,7 @@ public class IITC_WebView extends WebView { } }); - mIitcWebViewClient = new IITC_WebViewClient(c); + mIitcWebViewClient = new IITC_WebViewClient(mIitc); setWebViewClient(mIitcWebViewClient); } diff --git a/mobile/src/com/cradle/iitc_mobile/IITC_WebViewClient.java b/mobile/src/com/cradle/iitc_mobile/IITC_WebViewClient.java index f1e8af47..d28f080b 100644 --- a/mobile/src/com/cradle/iitc_mobile/IITC_WebViewClient.java +++ b/mobile/src/com/cradle/iitc_mobile/IITC_WebViewClient.java @@ -43,10 +43,12 @@ public class IITC_WebViewClient extends WebViewClient { private String mIitcScript = null; private String mIitcPath = null; private boolean mIitcInjected = false; - private final Context mContext; + private final IITC_Mobile mIitc; + private final IITC_TileManager mTileManager; - public IITC_WebViewClient(Context c) { - this.mContext = c; + public IITC_WebViewClient(IITC_Mobile iitc) { + this.mIitc = iitc; + this.mTileManager = new IITC_TileManager(mIitc); this.mIitcPath = Environment.getExternalStorageDirectory().getPath() + "/IITC_Mobile/"; } @@ -113,13 +115,13 @@ public class IITC_WebViewClient extends WebViewClient { js = this.fileToString(mIitcPath + "dev/total-conversion-build.user.js", false); if (js.equals("false")) { - Toast.makeText(mContext, "File " + mIitcPath + + Toast.makeText(mIitc, "File " + mIitcPath + "dev/total-conversion-build.user.js not found. " + "Disable developer mode or add iitc files to the dev folder.", Toast.LENGTH_LONG).show(); return; } else { - Toast.makeText(mContext, "Developer mode enabled", + Toast.makeText(mIitc, "Developer mode enabled", Toast.LENGTH_SHORT).show(); } } else { @@ -145,7 +147,7 @@ public class IITC_WebViewClient extends WebViewClient { mIitcInjected = false; } - PackageManager pm = mContext.getPackageManager(); + PackageManager pm = mIitc.getPackageManager(); boolean hasMultitouch = pm .hasSystemFeature(PackageManager.FEATURE_TOUCHSCREEN_MULTITOUCH); boolean forcedZoom = sharedPref.getBoolean("pref_user_zoom", false); @@ -202,7 +204,7 @@ public class IITC_WebViewClient extends WebViewClient { public void loadPlugins(WebView view) { // get the plugin preferences SharedPreferences sharedPref = PreferenceManager - .getDefaultSharedPreferences(mContext); + .getDefaultSharedPreferences(mIitc); boolean dev_enabled = sharedPref.getBoolean("pref_dev_checkbox", false); String path = (dev_enabled) ? mIitcPath + "dev/plugins/" : "plugins/"; @@ -261,7 +263,7 @@ public class IITC_WebViewClient extends WebViewClient { } } else { // load plugins from asset folder - AssetManager am = mContext.getAssets(); + AssetManager am = mIitc.getAssets(); try { s = new Scanner(am.open(file)).useDelimiter("\\A"); } catch (IOException e) { @@ -285,7 +287,14 @@ public class IITC_WebViewClient extends WebViewClient { @Override public WebResourceResponse shouldInterceptRequest(final WebView view, String url) { - if (url.contains("/css/common.css")) { + if (url.matches(".*tile.*jpg") || url.matches(".*tile.*png") || url.matches(".*mts.*googleapis.*")) { + try { + return mTileManager.getTile(url); + } catch (Exception e) { + e.printStackTrace(); + return super.shouldInterceptRequest(view, url); + } + } else if (url.contains("/css/common.css")) { return new WebResourceResponse("text/css", "UTF-8", STYLE); // } else if (url.contains("gen_dashboard.js")) { // // define initialize function to get rid of JS ReferenceError on intel page's 'onLoad' @@ -318,7 +327,7 @@ public class IITC_WebViewClient extends WebViewClient { Log.d("iitcm", "should be an internal clicked position link...reload script for: " + url); - ((IITC_Mobile) mContext).loadUrl(url); + mIitc.loadUrl(url); } if (url.contains("logout")) { Log.d("iitcm", "logging out...updating caching mode"); @@ -330,7 +339,7 @@ public class IITC_WebViewClient extends WebViewClient { "no ingress intel link, start external app to load url: " + url); Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); - mContext.startActivity(intent); + mIitc.startActivity(intent); return true; } } diff --git a/mobile/src/com/cradle/iitc_mobile/async/DownloadTile.java b/mobile/src/com/cradle/iitc_mobile/async/DownloadTile.java new file mode 100644 index 00000000..49e6fbb0 --- /dev/null +++ b/mobile/src/com/cradle/iitc_mobile/async/DownloadTile.java @@ -0,0 +1,69 @@ +package com.cradle.iitc_mobile.async; + +import android.app.AlertDialog; +import android.os.AsyncTask; +import android.util.Log; + +import com.cradle.iitc_mobile.IITC_Mobile; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLConnection; + +/* + * this class parses the http response of a web page. + * since network operations shouldn't be done on main UI thread + * (NetworkOnMainThread exception is thrown) we use an async task for this. + */ +public class DownloadTile extends AsyncTask { + + private String mFilePath; + private String mFileName; + + public DownloadTile(String path, String fileName) { + mFilePath = path; + mFileName = fileName; + + } + + @Override + protected Boolean doInBackground(String... urls) { + URL tileUrl = null; + URLConnection conn = null; + try { + tileUrl = new URL(urls[0]); + conn = tileUrl.openConnection(); + InputStream is = null; + is = conn.getInputStream(); + Log.d("iitcm", "writing to path: " + mFilePath); + File file = new File(mFilePath, mFileName); + File output = writeTileToFile(is, file, mFilePath); + } catch (IOException e) { + e.printStackTrace(); + return false; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + return true; + } + + private File writeTileToFile(InputStream inStream, File file, String path) throws Exception { + File filePath = new File(path); + filePath.mkdirs(); + FileOutputStream outStream = new FileOutputStream(file); + int bufferSize = 1024; + byte[] buffer = new byte[bufferSize]; + int len = 0; + while ((len = inStream.read(buffer)) != -1) { + outStream.write(buffer, 0, len); + } + if(outStream!=null) outStream.close(); + return file; + } + +} From 3e5124022d58e457313455382c1a8f9dd2f00a28 Mon Sep 17 00:00:00 2001 From: Philipp Schaefer Date: Sat, 21 Dec 2013 17:25:31 +0100 Subject: [PATCH 3/9] removed default cache, since we cache tiles on our own it's not needed anymore --- mobile/res/values/strings.xml | 19 ++---------- mobile/res/xml/preferences.xml | 8 ----- .../cradle/iitc_mobile/IITC_Application.java | 9 ------ .../com/cradle/iitc_mobile/IITC_Mobile.java | 4 --- .../com/cradle/iitc_mobile/IITC_WebView.java | 30 ------------------- .../iitc_mobile/IITC_WebViewClient.java | 6 ---- 6 files changed, 2 insertions(+), 74 deletions(-) diff --git a/mobile/res/values/strings.xml b/mobile/res/values/strings.xml index abec316b..e6fb797d 100644 --- a/mobile/res/values/strings.xml +++ b/mobile/res/values/strings.xml @@ -97,8 +97,8 @@ Nice for tablets, looks awful on smartphones Force https Disabling may improve performance - Move cache to external storage - Restart required! Write cache to sdCard. Saves internal storage. + Move tiles cache to external storage + Restart required! Write cache to sdCard. External storage has to be mounted. Press back button twice to exit Avoids accidental exits @@ -116,10 +116,6 @@ IITC source Load IITC main script from url or use local script. Currently used source: - Aggressive Caching - Prefer cached values even if they are expired…saves traffic but - may result in login issues - System Bar Action Bar @@ -133,17 +129,6 @@ 16 - - Always - Mobile data only (default) - Never - - - 0 - 1 - 2 - - Clear Cookies Search Choose account to login diff --git a/mobile/res/xml/preferences.xml b/mobile/res/xml/preferences.xml index df042414..089dcebc 100644 --- a/mobile/res/xml/preferences.xml +++ b/mobile/res/xml/preferences.xml @@ -112,14 +112,6 @@ - - Date: Sat, 21 Dec 2013 17:33:53 +0100 Subject: [PATCH 4/9] changed google tile regex --- mobile/src/com/cradle/iitc_mobile/IITC_WebViewClient.java | 3 ++- mobile/src/com/cradle/iitc_mobile/async/DownloadTile.java | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/mobile/src/com/cradle/iitc_mobile/IITC_WebViewClient.java b/mobile/src/com/cradle/iitc_mobile/IITC_WebViewClient.java index 0d41050e..bccc7966 100644 --- a/mobile/src/com/cradle/iitc_mobile/IITC_WebViewClient.java +++ b/mobile/src/com/cradle/iitc_mobile/IITC_WebViewClient.java @@ -285,7 +285,8 @@ public class IITC_WebViewClient extends WebViewClient { @Override public WebResourceResponse shouldInterceptRequest(final WebView view, String url) { - if (url.matches(".*tile.*jpg") || url.matches(".*tile.*png") || url.matches(".*mts.*googleapis.*")) { + // if any tiles are requested, handle it with IITC_TileManager + if (url.matches(".*tile.*jpg") || url.matches(".*tile.*png") || url.matches(".*mts.*googleapis.*smartmaps")) { try { return mTileManager.getTile(url); } catch (Exception e) { diff --git a/mobile/src/com/cradle/iitc_mobile/async/DownloadTile.java b/mobile/src/com/cradle/iitc_mobile/async/DownloadTile.java index 49e6fbb0..942e2e47 100644 --- a/mobile/src/com/cradle/iitc_mobile/async/DownloadTile.java +++ b/mobile/src/com/cradle/iitc_mobile/async/DownloadTile.java @@ -39,8 +39,8 @@ public class DownloadTile extends AsyncTask { conn = tileUrl.openConnection(); InputStream is = null; is = conn.getInputStream(); - Log.d("iitcm", "writing to path: " + mFilePath); File file = new File(mFilePath, mFileName); + Log.d("iitcm", "writing to file: " + file.toString()); File output = writeTileToFile(is, file, mFilePath); } catch (IOException e) { e.printStackTrace(); From 2e4b670bb38839b5341f4c1bda61a53244f414df Mon Sep 17 00:00:00 2001 From: Philipp Schaefer Date: Sat, 21 Dec 2013 17:39:39 +0100 Subject: [PATCH 5/9] outsourced webchromeclient --- .../iitc_mobile/IITC_WebChromeClient.java | 52 ++++++++++++++++ .../com/cradle/iitc_mobile/IITC_WebView.java | 59 ++++--------------- 2 files changed, 65 insertions(+), 46 deletions(-) create mode 100644 mobile/src/com/cradle/iitc_mobile/IITC_WebChromeClient.java diff --git a/mobile/src/com/cradle/iitc_mobile/IITC_WebChromeClient.java b/mobile/src/com/cradle/iitc_mobile/IITC_WebChromeClient.java new file mode 100644 index 00000000..2098855d --- /dev/null +++ b/mobile/src/com/cradle/iitc_mobile/IITC_WebChromeClient.java @@ -0,0 +1,52 @@ +package com.cradle.iitc_mobile; + +import android.app.Activity; +import android.webkit.ConsoleMessage; +import android.webkit.GeolocationPermissions; +import android.webkit.WebChromeClient; +import android.webkit.WebView; + +/** + * Created by cradle on 12/21/13. + */ +public class IITC_WebChromeClient extends WebChromeClient { + + private IITC_Mobile mIitcm; + + public IITC_WebChromeClient(IITC_Mobile iitcm) { + mIitcm = iitcm; + } + /** + * our webchromeclient should share geolocation with the iitc script + * + * allow access by default + */ + @Override + public void onGeolocationPermissionsShowPrompt(String origin, + GeolocationPermissions.Callback callback) { + callback.invoke(origin, true, false); + } + + /** + * display progress bar in activity + */ + @Override + public void onProgressChanged(WebView view, int newProgress) { + super.onProgressChanged(view, newProgress); + + // maximum for newProgress is 100 + // maximum for setProgress is 10,000 + mIitcm.setProgress(newProgress * 100); + } + + /** + * remove splash screen if any JS error occurs + */ + @Override + public boolean onConsoleMessage(ConsoleMessage consoleMessage) { + if (consoleMessage.messageLevel() == ConsoleMessage.MessageLevel.ERROR) { + mIitcm.setLoadingState(false); + } + return super.onConsoleMessage(consoleMessage); + } +} diff --git a/mobile/src/com/cradle/iitc_mobile/IITC_WebView.java b/mobile/src/com/cradle/iitc_mobile/IITC_WebView.java index a9745ae1..23ceb645 100644 --- a/mobile/src/com/cradle/iitc_mobile/IITC_WebView.java +++ b/mobile/src/com/cradle/iitc_mobile/IITC_WebView.java @@ -37,6 +37,7 @@ public class IITC_WebView extends WebView { private WebSettings mSettings; private IITC_WebViewClient mIitcWebViewClient; + private IITC_WebChromeClient mIitcWebChromeClient; private IITC_JSInterface mJsInterface; private IITC_Mobile mIitc; private SharedPreferences mSharedPrefs; @@ -66,56 +67,22 @@ public class IITC_WebView extends WebView { mNavHider = new Runnable() { @Override public void run() { - if (isInFullscreen() && (getFullscreenStatus() & (FS_NAVBAR)) != 0) { - int systemUiVisibility = SYSTEM_UI_FLAG_HIDE_NAVIGATION; - // in immersive mode the user can interact with the app while the navbar is hidden - // this mode is available since KitKat - // you can leave this mode by swiping down from the top of the screen. this does only work - // when the app is in total-fullscreen mode - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && (mFullscreenStatus & FS_SYSBAR) != 0) { - systemUiVisibility |= SYSTEM_UI_FLAG_IMMERSIVE; - } - setSystemUiVisibility(systemUiVisibility); + if (isInFullscreen() && (getFullscreenStatus() & (FS_NAVBAR)) != 0) { + int systemUiVisibility = SYSTEM_UI_FLAG_HIDE_NAVIGATION; + // in immersive mode the user can interact with the app while the navbar is hidden + // this mode is available since KitKat + // you can leave this mode by swiping down from the top of the screen. this does only work + // when the app is in total-fullscreen mode + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && (mFullscreenStatus & FS_SYSBAR) != 0) { + systemUiVisibility |= SYSTEM_UI_FLAG_IMMERSIVE; } + setSystemUiVisibility(systemUiVisibility); + } } }; - setWebChromeClient(new WebChromeClient() { - /** - * our webchromeclient should share geolocation with the iitc script - * - * allow access by default - */ - @Override - public void onGeolocationPermissionsShowPrompt(String origin, - GeolocationPermissions.Callback callback) { - callback.invoke(origin, true, false); - } - - /** - * display progress bar in activity - */ - @Override - public void onProgressChanged(WebView view, int newProgress) { - super.onProgressChanged(view, newProgress); - - // maximum for newProgress is 100 - // maximum for setProgress is 10,000 - ((Activity) getContext()).setProgress(newProgress * 100); - } - - /** - * remove splash screen if any JS error occurs - */ - @Override - public boolean onConsoleMessage(ConsoleMessage consoleMessage) { - if (consoleMessage.messageLevel() == ConsoleMessage.MessageLevel.ERROR) { - mIitc.setLoadingState(false); - } - return super.onConsoleMessage(consoleMessage); - } - }); - + mIitcWebChromeClient = new IITC_WebChromeClient(mIitc); + setWebChromeClient(mIitcWebChromeClient); mIitcWebViewClient = new IITC_WebViewClient(mIitc); setWebViewClient(mIitcWebViewClient); } From 8f5072dda516210aa280fb2c0807413e23cee064 Mon Sep 17 00:00:00 2001 From: Philipp Schaefer Date: Sat, 21 Dec 2013 17:59:50 +0100 Subject: [PATCH 6/9] added tile support for bing, ovi and yandex maps...tileManager should now manage all iitc supported tiles --- mobile/src/com/cradle/iitc_mobile/IITC_WebViewClient.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/mobile/src/com/cradle/iitc_mobile/IITC_WebViewClient.java b/mobile/src/com/cradle/iitc_mobile/IITC_WebViewClient.java index bccc7966..8d9e022d 100644 --- a/mobile/src/com/cradle/iitc_mobile/IITC_WebViewClient.java +++ b/mobile/src/com/cradle/iitc_mobile/IITC_WebViewClient.java @@ -286,7 +286,12 @@ public class IITC_WebViewClient extends WebViewClient { public WebResourceResponse shouldInterceptRequest(final WebView view, String url) { // if any tiles are requested, handle it with IITC_TileManager - if (url.matches(".*tile.*jpg") || url.matches(".*tile.*png") || url.matches(".*mts.*googleapis.*smartmaps")) { + if (url.matches(".*tile.*jpg.*") // mapquest tiles | ovi tiles + || url.matches(".*tile.*png.*") // cloudmade tiles + || url.matches(".*mts.*googleapis.*smartmaps") // google tiles + || url.matches(".*tile.*jpeg.*") // bing tiles + || url.matches(".*maps.*yandex.*tiles.*") // yandex maps + ) { try { return mTileManager.getTile(url); } catch (Exception e) { From c624a789d5ad666355a5fe5c1227dcf3966ebfc3 Mon Sep 17 00:00:00 2001 From: Philipp Schaefer Date: Sat, 21 Dec 2013 18:39:50 +0100 Subject: [PATCH 7/9] update tiles if outdated (use lastModified tag and only update on wifi) --- mobile/src/com/cradle/iitc_mobile/IITC_TileManager.java | 5 ++++- mobile/src/com/cradle/iitc_mobile/IITC_WebView.java | 2 +- mobile/src/com/cradle/iitc_mobile/async/DownloadTile.java | 4 +++- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/mobile/src/com/cradle/iitc_mobile/IITC_TileManager.java b/mobile/src/com/cradle/iitc_mobile/IITC_TileManager.java index 7acf1ee3..0dd424f0 100644 --- a/mobile/src/com/cradle/iitc_mobile/IITC_TileManager.java +++ b/mobile/src/com/cradle/iitc_mobile/IITC_TileManager.java @@ -12,6 +12,7 @@ import java.io.FileOutputStream; import java.io.InputStream; import java.net.URL; import java.net.URLConnection; +import java.util.Date; public class IITC_TileManager { @@ -24,7 +25,6 @@ public class IITC_TileManager { } public WebResourceResponse getTile(String url) throws Exception { - Log.d("iitcm", "checking for tile: " + url); String path = mIitc.getApplication().getFilesDir().toString() + "/" + url; path = path.replace("http://", ""); path = path.replace("https://", ""); @@ -33,6 +33,9 @@ public class IITC_TileManager { path = path.replace(fileName, ""); File file = new File(path, fileName); if (file.exists()) { + // asynchronously download tile if outdated, ignore date if not connected to wifi + if (mIitc.getWebView().isConnectedToWifi()) new DownloadTile(path, fileName).execute(url); + // return tile from storage InputStream in = new BufferedInputStream(new FileInputStream(file)); return new WebResourceResponse(TYPE, ENCODING, in); } else { diff --git a/mobile/src/com/cradle/iitc_mobile/IITC_WebView.java b/mobile/src/com/cradle/iitc_mobile/IITC_WebView.java index 23ceb645..4d74b4ae 100644 --- a/mobile/src/com/cradle/iitc_mobile/IITC_WebView.java +++ b/mobile/src/com/cradle/iitc_mobile/IITC_WebView.java @@ -237,7 +237,7 @@ public class IITC_WebView extends WebView { } @TargetApi(Build.VERSION_CODES.JELLY_BEAN) - private boolean isConnectedToWifi() { + public boolean isConnectedToWifi() { ConnectivityManager conMan = (ConnectivityManager) getContext() .getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo wifi = conMan.getNetworkInfo(ConnectivityManager.TYPE_WIFI); diff --git a/mobile/src/com/cradle/iitc_mobile/async/DownloadTile.java b/mobile/src/com/cradle/iitc_mobile/async/DownloadTile.java index 942e2e47..47eb13d6 100644 --- a/mobile/src/com/cradle/iitc_mobile/async/DownloadTile.java +++ b/mobile/src/com/cradle/iitc_mobile/async/DownloadTile.java @@ -37,9 +37,11 @@ public class DownloadTile extends AsyncTask { try { tileUrl = new URL(urls[0]); conn = tileUrl.openConnection(); + File file = new File(mFilePath, mFileName); + // update tile if needed, else return + if (conn.getLastModified() < file.lastModified()) return true; InputStream is = null; is = conn.getInputStream(); - File file = new File(mFilePath, mFileName); Log.d("iitcm", "writing to file: " + file.toString()); File output = writeTileToFile(is, file, mFilePath); } catch (IOException e) { From 90e8764f4995258cec7166b20d9b96a0591d8ebd Mon Sep 17 00:00:00 2001 From: Philipp Schaefer Date: Sat, 21 Dec 2013 18:41:26 +0100 Subject: [PATCH 8/9] removed not used imports --- mobile/src/com/cradle/iitc_mobile/IITC_TileManager.java | 5 ----- mobile/src/com/cradle/iitc_mobile/IITC_WebChromeClient.java | 1 - mobile/src/com/cradle/iitc_mobile/async/DownloadTile.java | 4 ---- 3 files changed, 10 deletions(-) diff --git a/mobile/src/com/cradle/iitc_mobile/IITC_TileManager.java b/mobile/src/com/cradle/iitc_mobile/IITC_TileManager.java index 0dd424f0..fe7df95f 100644 --- a/mobile/src/com/cradle/iitc_mobile/IITC_TileManager.java +++ b/mobile/src/com/cradle/iitc_mobile/IITC_TileManager.java @@ -1,6 +1,5 @@ package com.cradle.iitc_mobile; -import android.util.Log; import android.webkit.WebResourceResponse; import com.cradle.iitc_mobile.async.DownloadTile; @@ -8,11 +7,7 @@ import com.cradle.iitc_mobile.async.DownloadTile; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; -import java.io.FileOutputStream; import java.io.InputStream; -import java.net.URL; -import java.net.URLConnection; -import java.util.Date; public class IITC_TileManager { diff --git a/mobile/src/com/cradle/iitc_mobile/IITC_WebChromeClient.java b/mobile/src/com/cradle/iitc_mobile/IITC_WebChromeClient.java index 2098855d..a191f9ef 100644 --- a/mobile/src/com/cradle/iitc_mobile/IITC_WebChromeClient.java +++ b/mobile/src/com/cradle/iitc_mobile/IITC_WebChromeClient.java @@ -1,6 +1,5 @@ package com.cradle.iitc_mobile; -import android.app.Activity; import android.webkit.ConsoleMessage; import android.webkit.GeolocationPermissions; import android.webkit.WebChromeClient; diff --git a/mobile/src/com/cradle/iitc_mobile/async/DownloadTile.java b/mobile/src/com/cradle/iitc_mobile/async/DownloadTile.java index 47eb13d6..4136b819 100644 --- a/mobile/src/com/cradle/iitc_mobile/async/DownloadTile.java +++ b/mobile/src/com/cradle/iitc_mobile/async/DownloadTile.java @@ -1,16 +1,12 @@ package com.cradle.iitc_mobile.async; -import android.app.AlertDialog; import android.os.AsyncTask; import android.util.Log; -import com.cradle.iitc_mobile.IITC_Mobile; - import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; -import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; From cd524c4e617b4294d72074ef00e429e3b2614e13 Mon Sep 17 00:00:00 2001 From: Philipp Schaefer Date: Sat, 21 Dec 2013 19:39:12 +0100 Subject: [PATCH 9/9] removed copy+pasted comment... --- mobile/src/com/cradle/iitc_mobile/async/DownloadTile.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/mobile/src/com/cradle/iitc_mobile/async/DownloadTile.java b/mobile/src/com/cradle/iitc_mobile/async/DownloadTile.java index 4136b819..42882c93 100644 --- a/mobile/src/com/cradle/iitc_mobile/async/DownloadTile.java +++ b/mobile/src/com/cradle/iitc_mobile/async/DownloadTile.java @@ -10,11 +10,6 @@ import java.io.InputStream; import java.net.URL; import java.net.URLConnection; -/* - * this class parses the http response of a web page. - * since network operations shouldn't be done on main UI thread - * (NetworkOnMainThread exception is thrown) we use an async task for this. - */ public class DownloadTile extends AsyncTask { private String mFilePath;