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();