diff --git a/code/boot.js b/code/boot.js index 22a59744..d9fb8ced 100644 --- a/code/boot.js +++ b/code/boot.js @@ -3,10 +3,6 @@ // created a basic framework. All of these functions should only ever // be run once. -// Used to disable on multitouch devices -window.showZoom = true; -window.showLayerChooser = true; - window.setupLargeImagePreview = function() { $('#portaldetails').on('click', '.imgpreview', function() { var img = $(this).find('img')[0]; @@ -137,7 +133,12 @@ window.setupMap = function() { ]; // proper initial position is now delayed until all plugins are loaded and the base layer is set - window.map = new L.Map('map', {center: [0,0], zoom: 1, zoomControl: window.showZoom, minZoom: 1}); + window.map = new L.Map('map', { + center: [0,0], + zoom: 1, + zoomControl: (typeof android !== 'undefined' && android && android.showZoom) ? !android.showZoom() : true, + minZoom: 1 + }); // add empty div to leaflet control areas - to force other leaflet controls to move around IITC UI elements // TODO? move the actual IITC DOM into the leaflet control areas, so dummy
s aren't needed @@ -428,7 +429,7 @@ window.setupQRLoadLib = function() { window.setupLayerChooserApi = function() { // hide layer chooser on mobile devices running desktop mode - if (!window.showLayerChooser) { + if (typeof android !== 'undefined' && android && android.setLayers) { $('.leaflet-control-layers').hide(); } diff --git a/mobile/plugins/user-location.user.js b/mobile/plugins/user-location.user.js index b112c547..5b9bdb3c 100644 --- a/mobile/plugins/user-location.user.js +++ b/mobile/plugins/user-location.user.js @@ -20,7 +20,6 @@ window.plugin.userLocation = function() {}; -window.plugin.userLocation.locationLayer = new L.LayerGroup(); window.plugin.userLocation.follow = false; window.plugin.userLocation.setup = function() { @@ -52,6 +51,8 @@ window.plugin.userLocation.setup = function() { clickable: false }); + window.plugin.userLocation.locationLayer = new L.LayerGroup(); + marker.addTo(window.plugin.userLocation.locationLayer); window.plugin.userLocation.locationLayer.addTo(window.map); window.addLayerGroup('User location', window.plugin.userLocation.locationLayer, true); diff --git a/mobile/src/com/cradle/iitc_mobile/IITC_FileManager.java b/mobile/src/com/cradle/iitc_mobile/IITC_FileManager.java new file mode 100644 index 00000000..a1a0bdce --- /dev/null +++ b/mobile/src/com/cradle/iitc_mobile/IITC_FileManager.java @@ -0,0 +1,199 @@ +package com.cradle.iitc_mobile; + +import android.content.SharedPreferences; +import android.content.res.AssetManager; +import android.net.Uri; +import android.os.Environment; +import android.preference.PreferenceManager; +import android.util.Log; +import android.webkit.WebResourceResponse; + +import org.json.JSONObject; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; +import java.util.HashMap; + +public class IITC_FileManager { + private static final WebResourceResponse EMPTY = + new WebResourceResponse("text/plain", "UTF-8", new ByteArrayInputStream("".getBytes())); + private static final String WRAPPER_NEW = "wrapper(info);"; + private static final String WRAPPER_OLD = + "script.appendChild(document.createTextNode('('+ wrapper +')('+JSON.stringify(info)+');'));\n" + + "(document.body || document.head || document.documentElement).appendChild(script);"; + + public static HashMap getScriptInfo(String js) { + HashMap map = new HashMap(); + String header = ""; + if (js != null) { + header = js.substring(js.indexOf("==UserScript=="), + js.indexOf("==/UserScript==")); + } + // remove new line comments + header = header.replace("\n//", " "); + // get a list of key-value + String[] attributes = header.split(" +"); + // add default values + map.put("version", "not found"); + map.put("name", "unknown"); + map.put("description", ""); + map.put("category", "Misc"); + // add parsed values + for (int i = 0; i < attributes.length; i++) { + // search for attributes and use the value + if (attributes[i].equals("@version")) { + map.put("version", attributes[i + 1]); + } + if (attributes[i].equals("@name")) { + map.put("name", attributes[i + 1]); + } + if (attributes[i].equals("@description")) { + map.put("description", attributes[i + 1]); + } + if (attributes[i].equals("@category")) { + map.put("category", attributes[i + 1]); + } + } + return map; + } + + private AssetManager mAssetManager; + private IITC_Mobile mIitc; + private String mIitcPath; + + private SharedPreferences mPrefs; + + public IITC_FileManager(IITC_Mobile iitc) { + mIitc = iitc; + mIitcPath = Environment.getExternalStorageDirectory().getPath() + "/IITC_Mobile/"; + mPrefs = PreferenceManager.getDefaultSharedPreferences(iitc); + mAssetManager = mIitc.getAssets(); + } + + private InputStream getAssetFile(String filename) throws IOException { + if (mPrefs.getBoolean("pref_dev_checkbox", false)) { + File file = new File(mIitcPath + "dev/" + filename); + try { + return new FileInputStream(file); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + } + + String source = mPrefs.getString("pref_iitc_source", "local"); + if (!source.equals("local")) { + // load iitc script from web or asset folder + if (source.contains("http")) { + try { + URL context = new URL(source); + URL url = new URL(context, filename); + return url.openStream(); + } catch (IOException e) { + e.printStackTrace(); + } + } else { + File file = new File(source + File.separatorChar + filename); + try { + return new FileInputStream(file); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + } + } + + // load plugins from asset folder + return mAssetManager.open(filename); + } + + private WebResourceResponse getScript(Uri uri) { + InputStream stream; + try { + stream = getAssetFile(uri.getPath().substring(1)); + } catch (IOException e) { + e.printStackTrace(); + return EMPTY; + } + + InputStream data = prepareUserScript(stream); + + return new WebResourceResponse("application/x-javascript", "UTF-8", data); + } + + private HashMap getScriptInfo(InputStream stream) { + return getScriptInfo(readStream(stream)); + } + + private WebResourceResponse getUserPlugin(Uri uri) { + if (!mPrefs.getBoolean(uri.getPath(), false)) { + Log.e("iitcm", "Attempted to inject user script that is not enabled by user: " + uri.getPath()); + return EMPTY; + } + + InputStream stream; + try { + stream = new FileInputStream(new File(uri.getPath())); + } catch (IOException e) { + e.printStackTrace(); + return EMPTY; + } + + InputStream data = prepareUserScript(stream); + + return new WebResourceResponse("application/x-javascript", "UTF-8", data); + } + + private InputStream prepareUserScript(InputStream stream) { + String content = readStream(stream); + HashMap info = getScriptInfo(content); + + JSONObject jObject = new JSONObject(info); + String gmInfo = "var GM_info={\"script\":" + jObject.toString() + "}"; + + content = content.replace(WRAPPER_OLD, WRAPPER_NEW); + + return new ByteArrayInputStream((gmInfo + content).getBytes()); + } + + private String readStream(InputStream stream) { + ByteArrayOutputStream os = new ByteArrayOutputStream(); + byte[] buffer = new byte[4096]; + + try { + while (true) { + int read = stream.read(buffer); + if (read == -1) + break; + os.write(buffer, 0, read); + } + } catch (IOException e) { + e.printStackTrace(); + return ""; + } + return os.toString(); + } + + public String getIITCVersion() throws IOException { + InputStream stream = getAssetFile("total-conversion-build.user.js"); + + return getScriptInfo(stream).get("version"); + } + + public WebResourceResponse getResponse(String url) { + Uri uri = Uri.parse(url); + + String host = uri.getHost(); + if ("script".equals(host)) + return getScript(uri); + if ("user-plugin".equals(host)) + return getUserPlugin(uri); + + Log.e("iitcm", "could not generate response for url: " + url); + return EMPTY; + } +} diff --git a/mobile/src/com/cradle/iitc_mobile/IITC_JSInterface.java b/mobile/src/com/cradle/iitc_mobile/IITC_JSInterface.java index d51f0e59..90db755e 100644 --- a/mobile/src/com/cradle/iitc_mobile/IITC_JSInterface.java +++ b/mobile/src/com/cradle/iitc_mobile/IITC_JSInterface.java @@ -190,6 +190,13 @@ public class IITC_JSInterface { }); } + public boolean showZoom() { + PackageManager pm = mIitc.getPackageManager(); + boolean hasMultitouch = pm.hasSystemFeature(PackageManager.FEATURE_TOUCHSCREEN_MULTITOUCH); + boolean forcedZoom = mIitc.getPrefs().getBoolean("pref_user_zoom", false); + return forcedZoom || !hasMultitouch; + } + @JavascriptInterface public void setFollowMode(final boolean follow) { mIitc.runOnUiThread(new Runnable() { diff --git a/mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java b/mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java index 049ad8da..4080e985 100644 --- a/mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java +++ b/mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java @@ -40,6 +40,7 @@ public class IITC_Mobile extends Activity implements OnSharedPreferenceChangeLis private static final String mIntelUrl = "https://www.ingress.com/intel"; private SharedPreferences mSharedPrefs; + private IITC_FileManager mFileManager; private IITC_WebView mIitcWebView; private IITC_UserLocation mUserLocation; private IITC_NavigationHelper mNavigationHelper; @@ -87,6 +88,8 @@ public class IITC_Mobile extends Activity implements OnSharedPreferenceChangeLis // get fullscreen status from settings mIitcWebView.updateFullscreenStatus(); + mFileManager = new IITC_FileManager(this); + mUserLocation = new IITC_UserLocation(this); mUserLocation.setLocationMode(Integer.parseInt(mSharedPrefs.getString("pref_user_location_mode", "0"))); @@ -130,9 +133,8 @@ public class IITC_Mobile extends Activity implements OnSharedPreferenceChangeLis } else if (key.equals("pref_press_twice_to_exit") || key.equals("pref_share_selected_tab") || key.equals("pref_messages") - || key.equals("pref_external_storage")) - // no reload needed - { + || key.equals("pref_external_storage")) { + // no reload needed return; } @@ -466,8 +468,12 @@ public class IITC_Mobile extends Activity implements OnSharedPreferenceChangeLis return true; case R.id.action_settings: // start settings activity Intent intent = new Intent(this, IITC_PreferenceActivity.class); - intent.putExtra("iitc_version", mIitcWebView.getWebViewClient() - .getIITCVersion()); + try { + intent.putExtra("iitc_version", mFileManager.getIITCVersion()); + } catch (IOException e) { + e.printStackTrace(); + return true; + } startActivity(intent); return true; case R.id.menu_clear_cookies: @@ -495,16 +501,6 @@ public class IITC_Mobile extends Activity implements OnSharedPreferenceChangeLis mReloadNeeded = false; } - private void loadIITC() { - try { - mIitcWebView.getWebViewClient().loadIITC_JS(this); - } catch (IOException e1) { - e1.printStackTrace(); - } catch (NullPointerException e2) { - e2.printStackTrace(); - } - } - // vp=f enables mDesktopMode mode...vp=m is the default mobile view private String addUrlParam(String url) { if (mDesktopMode) { @@ -519,7 +515,6 @@ public class IITC_Mobile extends Activity implements OnSharedPreferenceChangeLis public void loadUrl(String url) { setLoadingState(true); url = addUrlParam(url); - loadIITC(); mIitcWebView.loadUrl(url); } @@ -649,6 +644,14 @@ public class IITC_Mobile extends Activity implements OnSharedPreferenceChangeLis return mMapSettings; } + public IITC_FileManager getFileManager() { + return mFileManager; + } + + public SharedPreferences getPrefs() { + return mSharedPrefs; + } + public IITC_UserLocation getUserLocation() { return mUserLocation; } diff --git a/mobile/src/com/cradle/iitc_mobile/IITC_PluginPreferenceActivity.java b/mobile/src/com/cradle/iitc_mobile/IITC_PluginPreferenceActivity.java index 0e9f23b2..14681ecc 100644 --- a/mobile/src/com/cradle/iitc_mobile/IITC_PluginPreferenceActivity.java +++ b/mobile/src/com/cradle/iitc_mobile/IITC_PluginPreferenceActivity.java @@ -157,14 +157,14 @@ public class IITC_PluginPreferenceActivity extends PreferenceActivity { void setUpPluginPreferenceScreen() { // get all plugins from asset manager - String[] asset_array = getAssetPlugins(); + String[] assets = getAssetPlugins(); - for (String anAsset_array : asset_array) { + for (String asset : assets) { // find user plugin name for user readable entries Scanner s = null; String src = ""; try { - s = new Scanner(getAssets().open("plugins/" + anAsset_array)) + s = new Scanner(getAssets().open("plugins/" + asset)) .useDelimiter("\\A"); } catch (IOException e2) { // TODO Auto-generated catch block @@ -174,7 +174,7 @@ public class IITC_PluginPreferenceActivity extends PreferenceActivity { src = s.hasNext() ? s.next() : ""; } // now we have all stuff together and can build the pref screen - addPluginPreference(src, anAsset_array, false); + addPluginPreference(src, asset, false); } // load user plugins from /IITC_Mobile/plugins/ @@ -201,7 +201,7 @@ public class IITC_PluginPreferenceActivity extends PreferenceActivity { // parse plugin name, description and category // we need default versions here otherwise iitcm may crash - HashMap info = IITC_WebViewClient.getScriptInfo(src); + HashMap info = IITC_FileManager.getScriptInfo(src); String plugin_name = info.get("name"); String plugin_cat = info.get("category"); String plugin_desc = info.get("description"); diff --git a/mobile/src/com/cradle/iitc_mobile/IITC_WebViewClient.java b/mobile/src/com/cradle/iitc_mobile/IITC_WebViewClient.java index 5b28ff5d..e0934d8f 100644 --- a/mobile/src/com/cradle/iitc_mobile/IITC_WebViewClient.java +++ b/mobile/src/com/cradle/iitc_mobile/IITC_WebViewClient.java @@ -1,10 +1,7 @@ package com.cradle.iitc_mobile; -import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; -import android.content.pm.PackageManager; -import android.content.res.AssetManager; import android.net.Uri; import android.net.http.SslError; import android.os.Environment; @@ -14,23 +11,11 @@ import android.webkit.SslErrorHandler; import android.webkit.WebResourceResponse; import android.webkit.WebView; import android.webkit.WebViewClient; -import android.widget.Toast; - -import com.cradle.iitc_mobile.async.UrlContentToString; - -import org.json.JSONObject; import java.io.ByteArrayInputStream; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.net.URL; -import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; import java.util.Map; -import java.util.Scanner; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.TimeoutException; public class IITC_WebViewClient extends WebViewClient { @@ -40,8 +25,7 @@ public class IITC_WebViewClient extends WebViewClient { private static final ByteArrayInputStream EMPTY = new ByteArrayInputStream( "".getBytes()); - private String mIitcScript = null; - private String mIitcPath = null; + private String mIitcPath; private boolean mIitcInjected = false; private final IITC_Mobile mIitc; private final IITC_TileManager mTileManager; @@ -49,130 +33,18 @@ public class IITC_WebViewClient extends WebViewClient { public IITC_WebViewClient(IITC_Mobile iitc) { this.mIitc = iitc; this.mTileManager = new IITC_TileManager(mIitc); - this.mIitcPath = Environment.getExternalStorageDirectory().getPath() - + "/IITC_Mobile/"; + this.mIitcPath = Environment.getExternalStorageDirectory().getPath() + "/IITC_Mobile/"; } - public String getIITCVersion() { - HashMap map = getScriptInfo(mIitcScript); - return map.get("version"); - } - - // static method because we use it in IITC_PluginPreferenceActivity too - public static HashMap getScriptInfo(String js) { - HashMap map = new HashMap(); - String header = ""; - if (js != null) { - header = js.substring(js.indexOf("==UserScript=="), - js.indexOf("==/UserScript==")); - } - // remove new line comments - header = header.replace("\n//", " "); - // get a list of key-value - String[] attributes = header.split(" +"); - // add default values - map.put("version", "not found"); - map.put("name", "unknown"); - map.put("description", ""); - map.put("category", "Misc"); - // add parsed values - for (int i = 0; i < attributes.length; i++) { - // search for attributes and use the value - if (attributes[i].equals("@version")) { - map.put("version", attributes[i + 1]); - } - if (attributes[i].equals("@name")) { - map.put("name", attributes[i + 1]); - } - if (attributes[i].equals("@description")) { - map.put("description", attributes[i + 1]); - } - if (attributes[i].equals("@category")) { - map.put("category", attributes[i + 1]); - } - } - return map; - } - - public String getGmInfoJson(HashMap map) { - JSONObject jObject = new JSONObject(map); - return "{\"script\":" + jObject.toString() + "}"; - } - - public void loadIITC_JS(Context c) throws java.io.IOException { - // You are able to load the script from external source - // if a http address is given, use script from this address. else use - // the local script - SharedPreferences sharedPref = PreferenceManager - .getDefaultSharedPreferences(c); - String iitc_source = sharedPref.getString("pref_iitc_source", "local"); - String js = ""; - - // if developer mode are enabled, load all iitc script from external - // storage - Log.d("iitcm", "adding iitc main script"); - if (sharedPref.getBoolean("pref_dev_checkbox", false)) { - js = this.fileToString(mIitcPath - + "dev/total-conversion-build.user.js", false); - if (js.equals("false")) { - 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(mIitc, "Developer mode enabled", - Toast.LENGTH_SHORT).show(); - } - } else { - // load iitc script from web or asset folder - if (iitc_source.contains("http")) { - URL url = new URL(iitc_source); - // if parsing of the online iitc source timed out, use the script from assets - try { - js = new UrlContentToString().execute(url).get(5, TimeUnit.SECONDS); - } catch (InterruptedException e) { - e.printStackTrace(); - js = this.fileToString("total-conversion-build.user.js", true); - } catch (ExecutionException e) { - e.printStackTrace(); - js = this.fileToString("total-conversion-build.user.js", true); - } catch (TimeoutException e) { - e.printStackTrace(); - js = this.fileToString("total-conversion-build.user.js", true); - } - } else { - js = this.fileToString("total-conversion-build.user.js", true); - } - mIitcInjected = false; - } - - PackageManager pm = mIitc.getPackageManager(); - boolean hasMultitouch = pm - .hasSystemFeature(PackageManager.FEATURE_TOUCHSCREEN_MULTITOUCH); - boolean forcedZoom = sharedPref.getBoolean("pref_user_zoom", false); - if (hasMultitouch && !forcedZoom) { - js = js.replace("window.showZoom = true;", - "window.showZoom = false;"); - } - - // hide layer chooser on desktop mode - // on mobile mode it is hidden via smartphone.css - boolean desktopMode = sharedPref.getBoolean("pref_force_desktop", false); - if (desktopMode) { - js = js.replace("window.showLayerChooser = true;", - "window.showLayerChooser = false"); - } - - String gmInfo = "GM_info=" + getGmInfoJson(getScriptInfo(js)) + "\n"; - this.mIitcScript = gmInfo + js; - - } + // TODO use somewhere else: + // 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(); // enable https @Override - public void onReceivedSslError(WebView view, SslErrorHandler handler, - SslError error) { + public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { handler.proceed(); } @@ -182,13 +54,61 @@ public class IITC_WebViewClient extends WebViewClient { || url.startsWith("https://www.ingress.com/intel")) { if (mIitcInjected) return; Log.d("iitcm", "injecting iitc.."); - view.loadUrl("javascript: " + this.mIitcScript); + loadScripts((IITC_WebView) view); mIitcInjected = true; - loadPlugins(view); } super.onPageFinished(view, url); } + private void loadScripts(IITC_WebView view) { + List scripts = new LinkedList(); + + scripts.add("script/total-conversion-build.user.js"); + + // get the plugin preferences + SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(mIitc); + Map all_prefs = sharedPref.getAll(); + + // iterate through all plugins + for (Map.Entry entry : all_prefs.entrySet()) { + String plugin = entry.getKey(); + if (plugin.endsWith(".user.js") && entry.getValue().toString().equals("true")) { + if (plugin.startsWith(mIitcPath)) { + scripts.add("user-plugin" + plugin); + } else { + scripts.add("script/plugins/" + plugin); + } + } + } + + // inject the user location script if enabled in settings + if (Integer.parseInt(sharedPref.getString("pref_user_location_mode", "0")) != 0) { + scripts.add("script/user-location.user.js"); + } + + String js = "(function(){['" + join(scripts, "','") + "'].forEach(function(src) {" + + "var script = document.createElement('script');script.src = 'iitcm://'+src;" + + "(document.body || document.head || document.documentElement).appendChild(script);" + + "});})();"; + + view.loadJS(js); + } + + static public String join(List list, String conjunction) + { + StringBuilder sb = new StringBuilder(); + boolean first = true; + for (String item : list) + { + if (first) + first = false; + else + sb.append(conjunction); + sb.append(item); + } + return sb.toString(); + } + /** * this method is called automatically when the Google login form is opened. */ @@ -196,86 +116,41 @@ public class IITC_WebViewClient extends WebViewClient { public void onReceivedLoginRequest(WebView view, String realm, String account, String args) { Log.d("iitcm", "Login requested: " + realm + " " + account + " " + args); mIitcInjected = false; - //((IITC_Mobile) mContext).onReceivedLoginRequest(this, view, realm, account, args); - } - - public void loadPlugins(WebView view) { - // get the plugin preferences - SharedPreferences sharedPref = PreferenceManager - .getDefaultSharedPreferences(mIitc); - boolean dev_enabled = sharedPref.getBoolean("pref_dev_checkbox", false); - String path = (dev_enabled) ? mIitcPath + "dev/plugins/" : "plugins/"; - - Map all_prefs = sharedPref.getAll(); - - // iterate through all plugins - for (Map.Entry entry : all_prefs.entrySet()) { - String plugin = entry.getKey(); - if (plugin.endsWith("user.js") && entry.getValue().toString().equals("true")) { - if (!plugin.startsWith(mIitcPath)) { - // load default iitc plugins - Log.d("iitcm", "adding plugin " + plugin); - loadJS(path + plugin, !dev_enabled, view); - } else { - // load user iitc plugins - Log.d("iitcm", "adding user plugin " + plugin); - loadJS(plugin, false, view); - } - } - } - - // inject the user location script if enabled in settings - if (Integer.parseInt(sharedPref.getString("pref_user_location_mode", "0")) != 0) { - path = path.replace("plugins/", ""); - loadJS(path + "user-location.user.js", !dev_enabled, view); - } - } - - // read a file into a string - // load it as javascript - public boolean loadJS(String file, boolean asset, WebView view) { - String js = fileToString(file, asset); - if (js.equals("false")) { - return false; - } else { - String gmInfo = "GM_info=" + getGmInfoJson(getScriptInfo(js)) + "\n"; - view.loadUrl("javascript:" + gmInfo + js); - } - return true; + // ((IITC_Mobile) mContext).onReceivedLoginRequest(this, view, realm, account, args); } // read a file into a string // use the full path for File // if asset == true use the asset manager to open file - public String fileToString(String file, boolean asset) { - Scanner s = null; - String src = ""; - if (!asset) { - File js_file = new File(file); - try { - s = new Scanner(js_file).useDelimiter("\\A"); - } catch (FileNotFoundException e) { - e.printStackTrace(); - Log.d("iitcm", "failed to parse file " + file); - return "false"; - } - } else { - // load plugins from asset folder - AssetManager am = mIitc.getAssets(); - try { - s = new Scanner(am.open(file)).useDelimiter("\\A"); - } catch (IOException e) { - e.printStackTrace(); - Log.d("iitcm", "failed to parse file assets/" + file); - return "false"; - } - } - - if (s != null) { - src = s.hasNext() ? s.next() : ""; - } - return src; - } + // public String fileToString(String file, boolean asset) { + // Scanner s = null; + // String src = ""; + // if (!asset) { + // File js_file = new File(file); + // try { + // s = new Scanner(js_file).useDelimiter("\\A"); + // } catch (FileNotFoundException e) { + // e.printStackTrace(); + // Log.d("iitcm", "failed to parse file " + file); + // return "false"; + // } + // } else { + // // load plugins from asset folder + // AssetManager am = mIitc.getAssets(); + // try { + // s = new Scanner(am.open(file)).useDelimiter("\\A"); + // } catch (IOException e) { + // e.printStackTrace(); + // Log.d("iitcm", "failed to parse file assets/" + file); + // return "false"; + // } + // } + // + // if (s != null) { + // src = s.hasNext() ? s.next() : ""; + // } + // return src; + // } // Check every external resource if it’s okay to load it and maybe replace // it @@ -283,8 +158,7 @@ public class IITC_WebViewClient extends WebViewClient { // which aren’t required and to inject IITC early into the site. // via http://stackoverflow.com/a/8274881/1684530 @Override - public WebResourceResponse shouldInterceptRequest(final WebView view, - String url) { + public WebResourceResponse shouldInterceptRequest(final WebView view, String url) { // if any tiles are requested, handle it with IITC_TileManager if (url.matches(".*tile.*jpg.*") // mapquest tiles | ovi tiles || url.matches(".*tile.*png.*") // cloudmade tiles @@ -292,7 +166,7 @@ public class IITC_WebViewClient extends WebViewClient { || url.matches(".*khms.*googleapis.*") // google satellite tiles || url.matches(".*tile.*jpeg.*") // bing tiles || url.matches(".*maps.*yandex.*tiles.*") // yandex maps - ) { + ) { try { return mTileManager.getTile(url); } catch (Exception e) { @@ -301,11 +175,11 @@ public class IITC_WebViewClient extends WebViewClient { } } 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' -// String gen_dashboard_replacement = "window.initialize = function() {}"; -// return new WebResourceResponse("text/javascript", "UTF-8", -// new ByteArrayInputStream(gen_dashboard_replacement.getBytes())); + // } else if (url.contains("gen_dashboard.js")) { + // // define initialize function to get rid of JS ReferenceError on intel page's 'onLoad' + // String gen_dashboard_replacement = "window.initialize = function() {}"; + // return new WebResourceResponse("text/javascript", "UTF-8", + // new ByteArrayInputStream(gen_dashboard_replacement.getBytes())); } else if (url.contains("/css/ap_icons.css") || url.contains("/css/map_icons.css") || url.contains("/css/common.css") @@ -317,6 +191,8 @@ public class IITC_WebViewClient extends WebViewClient { || url.contains("js/analytics.js") || url.contains("google-analytics.com/ga.js")) { return new WebResourceResponse("text/plain", "UTF-8", EMPTY); + } else if (url.startsWith("iitcm:")) { + return mIitc.getFileManager().getResponse(url); } else { return super.shouldInterceptRequest(view, url); } diff --git a/mobile/src/com/cradle/iitc_mobile/fragments/MainSettings.java b/mobile/src/com/cradle/iitc_mobile/fragments/MainSettings.java index 461e034b..b9f43949 100644 --- a/mobile/src/com/cradle/iitc_mobile/fragments/MainSettings.java +++ b/mobile/src/com/cradle/iitc_mobile/fragments/MainSettings.java @@ -29,6 +29,7 @@ public class MainSettings extends PreferenceFragment { // set versions String iitcVersion = getArguments().getString("iitc_version"); + String buildVersion = "unknown"; PackageManager pm = getActivity().getPackageManager();