Conflicts:
	mobile/AndroidManifest.xml

version code 14, version number 0.3.2.1, was used in an f-droid.org build (in theory)
This commit is contained in:
Jon Atkins 2013-05-03 02:02:03 +01:00
commit 31f38b77a3
8 changed files with 104 additions and 43 deletions

View File

@ -220,7 +220,7 @@ if buildMobile:
os.makedirs("mobile/assets") os.makedirs("mobile/assets")
except: except:
pass pass
shutil.copy(os.path.join(outDir,"total-conversion-build.user.js"), "mobile/assets/iitc.js") shutil.copy(os.path.join(outDir,"total-conversion-build.user.js"), "mobile/assets/total-conversion-build.user.js")
# copy the user location script into the mobile folder. # copy the user location script into the mobile folder.
shutil.copy(os.path.join(outDir,"user-location.user.js"), "mobile/assets/user-location.user.js") shutil.copy(os.path.join(outDir,"user-location.user.js"), "mobile/assets/user-location.user.js")

View File

@ -7,6 +7,11 @@ Communication from app to script is handled by loading Javascript function calls
Communication from script to app is handled by the JavascriptInterface (see /mobile/src/com/cradle/iitc\_mobile/IITC_JSInterface.java). If a method ```foo(String)``` is defined in JSInterface, it can be called by ```android.foo("Hello World")``` in the IITC script. Communication from script to app is handled by the JavascriptInterface (see /mobile/src/com/cradle/iitc\_mobile/IITC_JSInterface.java). If a method ```foo(String)``` is defined in JSInterface, it can be called by ```android.foo("Hello World")``` in the IITC script.
Developing IITC and Plugins for IITC Mobile
-------------------------------------------
The developer mode can be enabled in the settings. Create a folder ```IITC_Mobile/dev/``` on your external storage of your Android device and copy the sources from ```$IITC_folder/build/mobile/``` to it. If the developer mode is enabled all sources will be loaded from there.
Debugging Debugging
--------- ---------

View File

@ -5,7 +5,9 @@ The Android App behaves like the desktop version, but uses the mobile view, whic
- it should be much faster than the standard mobile ingress intel map - it should be much faster than the standard mobile ingress intel map
- a gmaps intent is sent, when a portals Map link is clicked (lets you navigate to portals) - plugin support
- a geo intent is sent, when a portals Map link is clicked (lets you navigate to portals)
- a geolocate button (you have to enable GPS satellites + location access to use this feature) - a geolocate button (you have to enable GPS satellites + location access to use this feature)

View File

@ -25,13 +25,12 @@
is continued on a fork of <a href="https://github.com/jonatkins"><b>jonatkins</b></a>.<br><br> is continued on a fork of <a href="https://github.com/jonatkins"><b>jonatkins</b></a>.<br><br>
<b>Website:</b><br> <b>Website:</b><br>
<a href="http://iitc.jonatkins.com/">http://iitc.jonatkins.com/</a><br><br> <a href="http://iitc.jonatkins.com/">http://iitc.jonatkins.com/</a><br><br>
<b>Fork github:</b><br> <b>IITC on Github:</b><br>
<a href="https://github.com/jonatkins/ingress-intel-total-conversion">https://github.com/jonatkins/ingress-intel-total-conversion</a><br><br> <a href="https://github.com/jonatkins/ingress-intel-total-conversion">https://github.com/jonatkins/ingress-intel-total-conversion</a>]]>
<b>Old github:</b><br>
<a href="https://github.com/breunigs/ingress-intel-total-conversion">https://github.com/breunigs/ingress-intel-total-conversion</a>]]>
</string> </string>
<string name="pref_ui_cat">UI</string> <string name="pref_ui_cat">UI</string>
<string name="pref_misc_cat">Misc</string>
<string name="pref_plugins">Plugins</string> <string name="pref_plugins">Plugins</string>
<string name="pref_plugins_title">Available plugins</string> <string name="pref_plugins_title">Available plugins</string>
<string name="pref_force_desktop">Force desktop mode</string> <string name="pref_force_desktop">Force desktop mode</string>
@ -39,6 +38,9 @@
<string name="pref_user_loc">Display user location</string> <string name="pref_user_loc">Display user location</string>
<string name="pref_user_loc_sum">Show users position on map</string> <string name="pref_user_loc_sum">Show users position on map</string>
<string name="pref_developer_options">Developer options</string> <string name="pref_developer_options">Developer options</string>
<string name="pref_enable_dev_mode">Enable developer mode</string>
<string name="pref_enable_dev_mode_sum">If enabled, all IITC sources will be loaded from external storage of the Android device.
Please copy all sources from $IITC_folder/build/mobile/ to /sdcard/IITC_Mobile/dev/.</string>
<string name="pref_select_iitc">IITC source</string> <string name="pref_select_iitc">IITC source</string>
</resources> </resources>

View File

@ -12,31 +12,41 @@
<PreferenceCategory <PreferenceCategory
android:key="pref_about_cat" android:key="pref_about_cat"
android:title="@string/pref_ui_cat"> android:title="@string/pref_ui_cat">
<CheckBoxPreference <CheckBoxPreference
android:key="pref_force_desktop" android:key="pref_force_desktop"
android:title="@string/pref_force_desktop" android:title="@string/pref_force_desktop"
android:summary="@string/pref_force_desktop_sum" android:summary="@string/pref_force_desktop_sum"
android:defaultValue="false" /> android:defaultValue="false" />
<CheckBoxPreference <CheckBoxPreference
android:key="pref_user_loc" android:key="pref_user_loc"
android:title="@string/pref_user_loc" android:title="@string/pref_user_loc"
android:summary="@string/pref_user_loc_sum" android:summary="@string/pref_user_loc_sum"
android:defaultValue="false" /> android:defaultValue="false" />
<MultiSelectListPreference </PreferenceCategory>
android:key="pref_plugins"
android:title="@string/pref_plugins" <PreferenceCategory
android:dialogTitle="@string/pref_plugins_title"/> android:key="pref_mics"
android:title="@string/pref_misc_cat">
<EditTextPreference
android:key="pref_iitc_source"
android:title="@string/pref_select_iitc"
android:summary="Load IITC main script from url or use local script. Currently used source: "
android:defaultValue="local"/>
<MultiSelectListPreference
android:key="pref_plugins"
android:title="@string/pref_plugins"
android:dialogTitle="@string/pref_plugins_title"/>
</PreferenceCategory> </PreferenceCategory>
<PreferenceCategory <PreferenceCategory
android:key="pref_developer_options" android:key="pref_developer_options"
android:title="@string/pref_developer_options"> android:title="@string/pref_developer_options">
<EditTextPreference <CheckBoxPreference
android:key="pref_iitc_source" android:key="pref_dev_checkbox"
android:title="@string/pref_select_iitc" android:title="@string/pref_enable_dev_mode"
android:summary="" android:summary="@string/pref_enable_dev_mode_sum"
android:defaultValue="local"/> android:defaultValue="false" />
<ListPreference <ListPreference
android:key="pref_build_version" android:key="pref_build_version"

View File

@ -53,9 +53,8 @@ public class IITC_Mobile extends Activity {
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if (key.equals("pref_force_desktop")) if (key.equals("pref_force_desktop"))
desktop = sharedPreferences.getBoolean("pref_force_desktop", false); desktop = sharedPreferences.getBoolean("pref_force_desktop", false);
if (key.equals("pref_user_loc")) { if (key.equals("pref_user_loc"))
user_loc = sharedPreferences.getBoolean("pref_user_loc", false); user_loc = sharedPreferences.getBoolean("pref_user_loc", false);
}
IITC_Mobile.this.loadUrl(intel_url); IITC_Mobile.this.loadUrl(intel_url);
} }
}; };

View File

@ -23,6 +23,8 @@ public class IITC_WebView extends WebView {
settings.setAllowFileAccess(true); settings.setAllowFileAccess(true);
settings.setGeolocationEnabled(true); settings.setGeolocationEnabled(true);
settings.setDatabasePath(this.getContext().getApplicationInfo().dataDir + "/databases/"); settings.setDatabasePath(this.getContext().getApplicationInfo().dataDir + "/databases/");
settings.setAppCachePath(this.getContext().getApplicationInfo().dataDir + "/cache/");
settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
this.js_interface = new IITC_JSInterface(c); this.js_interface = new IITC_JSInterface(c);
this.addJavascriptInterface(js_interface, "android"); this.addJavascriptInterface(js_interface, "android");

View File

@ -6,14 +6,17 @@ import android.content.SharedPreferences;
import android.content.res.AssetManager; import android.content.res.AssetManager;
import android.net.Uri; import android.net.Uri;
import android.net.http.SslError; import android.net.http.SslError;
import android.os.Environment;
import android.preference.PreferenceManager; import android.preference.PreferenceManager;
import android.util.Log; import android.util.Log;
import android.webkit.SslErrorHandler; import android.webkit.SslErrorHandler;
import android.webkit.WebResourceResponse; import android.webkit.WebResourceResponse;
import android.webkit.WebView; import android.webkit.WebView;
import android.webkit.WebViewClient; import android.webkit.WebViewClient;
import android.widget.Toast;
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.InputStream; import java.io.InputStream;
import java.io.IOException; import java.io.IOException;
import java.net.URL; import java.net.URL;
@ -27,10 +30,13 @@ public class IITC_WebViewClient extends WebViewClient {
private WebResourceResponse iitcjs; private WebResourceResponse iitcjs;
private String js = null; private String js = null;
private String dev_path = null;
Context context; Context context;
public IITC_WebViewClient(Context c) { public IITC_WebViewClient(Context c) {
this.context = c; this.context = c;
this.dev_path = Environment.getExternalStorageDirectory().getPath() +
"/IITC_Mobile/dev/";
try { try {
loadIITC_JS(c); loadIITC_JS(c);
} catch(IOException e) { } catch(IOException e) {
@ -39,7 +45,9 @@ public class IITC_WebViewClient extends WebViewClient {
} }
public String getIITCVersion() { public String getIITCVersion() {
String header = js.substring(js.indexOf("==UserScript=="), js.indexOf("==/UserScript==")); String header = "";
if (js != null)
header = js.substring(js.indexOf("==UserScript=="), js.indexOf("==/UserScript=="));
// remove new line comments // remove new line comments
header = header.replace("\n//", ""); header = header.replace("\n//", "");
// get a list of key-value // get a list of key-value
@ -53,22 +61,40 @@ public class IITC_WebViewClient extends WebViewClient {
} }
public void loadIITC_JS(Context c) throws java.io.IOException { public void loadIITC_JS(Context c) throws java.io.IOException {
// in developer options, you are able to load the script from external source // 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 // if a http address is given, use script from this address. else use the local script
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(c); SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(c);
String iitc_source = sharedPref.getString("pref_iitc_source", "local"); String iitc_source = sharedPref.getString("pref_iitc_source", "local");
String js = ""; String js = "";
if (iitc_source.contains("http")) {
URL url = new URL(iitc_source); // if developer mode are enabled, load all iitc script from external storage
js = new Scanner(url.openStream(), "UTF-8").useDelimiter("\\A").next(); if (sharedPref.getBoolean("pref_dev_checkbox", true)) {
File js_file = new File(dev_path + "total-conversion-build.user.js");
if (!js_file.exists()) {
Toast.makeText(context, "File " + dev_path +
"total-conversion-build.user.js not found. " +
"Disable developer mode or add iitc files " +
"to the dev folder.", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(context, "Developer mode enabled", Toast.LENGTH_SHORT).show();
}
Scanner s = null;
s = new Scanner(js_file).useDelimiter("\\A");
if (s != null) js = s.hasNext() ? s.next() : "";
} else { } else {
InputStream input; // load iitc script from web or asset folder
input = c.getAssets().open("iitc.js"); if (iitc_source.contains("http")) {
int size = input.available(); URL url = new URL(iitc_source);
byte[] buffer = new byte[size]; js = new Scanner(url.openStream(), "UTF-8").useDelimiter("\\A").next();
input.read(buffer); } else {
input.close(); InputStream input;
js = new String(buffer); input = c.getAssets().open("total-conversion-build.user.js");
int size = input.available();
byte[] buffer = new byte[size];
input.read(buffer);
input.close();
js = new String(buffer);
}
} }
this.js = js; this.js = js;
@ -101,6 +127,7 @@ public class IITC_WebViewClient extends WebViewClient {
// get the plugin preferences // get the plugin preferences
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(context); SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(context);
Set<String> plugin_list = sharedPref.getStringSet("pref_plugins", null); Set<String> plugin_list = sharedPref.getStringSet("pref_plugins", null);
boolean dev_enabled = sharedPref.getBoolean("pref_dev_checkbox", true);
// iterate through all enabled plugins and load them // iterate through all enabled plugins and load them
if (plugin_list != null) { if (plugin_list != null) {
@ -114,7 +141,14 @@ public class IITC_WebViewClient extends WebViewClient {
Scanner s = null; Scanner s = null;
String src = ""; String src = "";
try { try {
s = new Scanner(am.open("plugins/" + plugin_array[i])).useDelimiter("\\A"); // load plugins from external storage if dev mode are enabled
if (dev_enabled) {
File js_file = new File(dev_path + "plugins/" + plugin_array[i]);
s = new Scanner(js_file).useDelimiter("\\A");
}
else
// load plugins from asset folder
s = new Scanner(am.open("plugins/" + plugin_array[i])).useDelimiter("\\A");
} catch (IOException e2) { } catch (IOException e2) {
// TODO Auto-generated catch block // TODO Auto-generated catch block
e2.printStackTrace(); e2.printStackTrace();
@ -127,16 +161,23 @@ public class IITC_WebViewClient extends WebViewClient {
// inject the user location script if enabled in settings // inject the user location script if enabled in settings
if (sharedPref.getBoolean("pref_user_loc", false)) if (sharedPref.getBoolean("pref_user_loc", false))
enableTracking(view); enableTracking(view, dev_enabled);
} }
public void enableTracking(WebView view) { public void enableTracking(WebView view, boolean dev_enabled) {
Log.d("iitcm", "enable tracking..."); Log.d("iitcm", "enable tracking...");
AssetManager am = context.getAssets(); AssetManager am = context.getAssets();
Scanner s = null; Scanner s = null;
String src = ""; String src = "";
try { try {
s = new Scanner(am.open("user-location.user.js")).useDelimiter("\\A"); // load plugin from external storage if dev mode are enabled
if (dev_enabled) {
File js_file = new File(dev_path + "user-location.user.js");
s = new Scanner(js_file).useDelimiter("\\A");
}
else
// load plugin from asset folder
s = new Scanner(am.open("user-location.user.js")).useDelimiter("\\A");
} catch (IOException e2) { } catch (IOException e2) {
// TODO Auto-generated catch block // TODO Auto-generated catch block
e2.printStackTrace(); e2.printStackTrace();