diff --git a/.gitignore b/.gitignore
index d2d07c24..af7e35cf 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,3 @@
-mobile/IngressIntelTC/bin
build
localbuildsettings.py
*.pyc
diff --git a/build.py b/build.py
index 5c2e3cb9..2a3eb7d9 100755
--- a/build.py
+++ b/build.py
@@ -225,7 +225,7 @@ if buildMobile:
except:
pass
shutil.rmtree("mobile/assets/plugins")
- shutil.copytree(os.path.join(outDir,"plugins"), "mobile/assets/plugins", ignore=shutil.ignore_patterns('*.meta.js', 'force-https*', 'privacy-view*'))
+ shutil.copytree(os.path.join(outDir,"plugins"), "mobile/assets/plugins", ignore=shutil.ignore_patterns('*.meta.js', 'force-https*', 'privacy-view*', 'speech-search*'))
if buildMobile != 'copyonly':
diff --git a/code/geosearch.js b/code/geosearch.js
index 7bd7d1ee..ab67a56c 100644
--- a/code/geosearch.js
+++ b/code/geosearch.js
@@ -6,24 +6,29 @@ window.setupGeosearch = function() {
if((e.keyCode ? e.keyCode : e.which) != 13) return;
var search = $(this).val();
-
+
+ if ( window.search(search) ) return;
+
+ e.preventDefault();
+ });
+ $('#geosearchwrapper img').click(function(){
+ map.locate({setView : true, maxZoom: 13});
+ });
+}
+
+window.search = function(search) {
if (!runHooks('geoSearch', search)) {
- return;
+ return true;
}
$.getJSON(NOMINATIM + encodeURIComponent(search), function(data) {
- if(!data || !data[0]) return;
+ if(!data || !data[0]) return true;
var b = data[0].boundingbox;
- if(!b) return;
+ if(!b) return true;
var southWest = new L.LatLng(b[0], b[2]),
northEast = new L.LatLng(b[1], b[3]),
bounds = new L.LatLngBounds(southWest, northEast);
window.map.fitBounds(bounds);
if(window.isSmartphone()) window.smartphone.mapButton.click();
});
- e.preventDefault();
- });
- $('#geosearchwrapper img').click(function(){
- map.locate({setView : true, maxZoom: 13});;
- });
}
diff --git a/mobile/.gitignore b/mobile/.gitignore
index 42e4ba7c..2f94c701 100644
--- a/mobile/.gitignore
+++ b/mobile/.gitignore
@@ -1,11 +1,34 @@
-.classpath
-.project
.settings/
-bin/
-gen/
-libs/
-proguard-project.txt
-local.properties
assets/total-conversion-build.user.js
assets/user-location.user.js
assets/plugins/
+
+# built application files
+*.apk
+*.ap_
+
+# files for the dex VM
+*.dex
+
+# Java class files
+*.class
+
+# generated files
+bin/
+gen/
+out/
+
+# Local configuration file (sdk path, etc)
+local.properties
+
+# Eclipse project files
+.classpath
+.project
+
+# IntelliJ IDEA user settings
+*.iws
+.idea/workspace.xml
+.idea/tasks.xml
+
+# Proguard logs
+proguard_logs/
diff --git a/mobile/.idea/.name b/mobile/.idea/.name
new file mode 100644
index 00000000..d884b924
--- /dev/null
+++ b/mobile/.idea/.name
@@ -0,0 +1 @@
+IITC-Mobile
\ No newline at end of file
diff --git a/mobile/.idea/compiler.xml b/mobile/.idea/compiler.xml
new file mode 100644
index 00000000..217af471
--- /dev/null
+++ b/mobile/.idea/compiler.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mobile/.idea/copyright/profiles_settings.xml b/mobile/.idea/copyright/profiles_settings.xml
new file mode 100644
index 00000000..3572571a
--- /dev/null
+++ b/mobile/.idea/copyright/profiles_settings.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/mobile/.idea/encodings.xml b/mobile/.idea/encodings.xml
new file mode 100644
index 00000000..e206d70d
--- /dev/null
+++ b/mobile/.idea/encodings.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/mobile/.idea/misc.xml b/mobile/.idea/misc.xml
new file mode 100644
index 00000000..e0d90dd8
--- /dev/null
+++ b/mobile/.idea/misc.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/mobile/.idea/modules.xml b/mobile/.idea/modules.xml
new file mode 100644
index 00000000..c7429177
--- /dev/null
+++ b/mobile/.idea/modules.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/mobile/.idea/scopes/scope_settings.xml b/mobile/.idea/scopes/scope_settings.xml
new file mode 100644
index 00000000..922003b8
--- /dev/null
+++ b/mobile/.idea/scopes/scope_settings.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/mobile/.idea/vcs.xml b/mobile/.idea/vcs.xml
new file mode 100644
index 00000000..2e0588cc
--- /dev/null
+++ b/mobile/.idea/vcs.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/mobile/AndroidManifest.xml b/mobile/AndroidManifest.xml
index f9fc9e4d..b0fa5c5a 100644
--- a/mobile/AndroidManifest.xml
+++ b/mobile/AndroidManifest.xml
@@ -24,13 +24,23 @@
android:name="com.cradle.iitc_mobile.IITC_Mobile"
android:theme="@style/AppBaseTheme"
android:label="@string/app_name"
+ android:launchMode="singleTop"
android:configChanges="orientation|keyboard|keyboardHidden|screenSize">
+
+
+
+
+
+
+
+
+
@@ -46,6 +56,10 @@
android:scheme="http"
android:pathPrefix="/intel">
+
+
+
+
@@ -74,7 +89,12 @@
+
+
+
diff --git a/mobile/IITC-Mobile.iml b/mobile/IITC-Mobile.iml
new file mode 100644
index 00000000..57c35466
--- /dev/null
+++ b/mobile/IITC-Mobile.iml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+ MANIFEST_FILE_PATH
+ RESOURCES_DIR_PATH
+ ASSETS_DIR_PATH
+ NATIVE_LIBS_DIR_PATH
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mobile/build.gradle b/mobile/build.gradle
new file mode 100644
index 00000000..2fa22689
--- /dev/null
+++ b/mobile/build.gradle
@@ -0,0 +1,35 @@
+buildscript {
+ repositories {
+ mavenCentral()
+ }
+ dependencies {
+ classpath 'com.android.tools.build:gradle:0.4'
+ }
+}
+apply plugin: 'android'
+
+dependencies {
+}
+
+android {
+ compileSdkVersion 17
+ buildToolsVersion "17"
+
+ defaultConfig {
+ minSdkVersion 14
+ targetSdkVersion 17
+ }
+ sourceSets {
+ main {
+ manifest.srcFile 'AndroidManifest.xml'
+ java.srcDirs = ['src']
+ resources.srcDirs = ['src']
+ aidl.srcDirs = ['src']
+ renderscript.srcDirs = ['src']
+ res.srcDirs = ['res']
+ assets.srcDirs = ['assets']
+ }
+
+ instrumentTest.setRoot('tests')
+ }
+}
diff --git a/mobile/mobile.iml b/mobile/mobile.iml
new file mode 100644
index 00000000..25a68b77
--- /dev/null
+++ b/mobile/mobile.iml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+ MANIFEST_FILE_PATH
+ RESOURCES_DIR_PATH
+ ASSETS_DIR_PATH
+ NATIVE_LIBS_DIR_PATH
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mobile/proguard-project.txt b/mobile/proguard-project.txt
new file mode 100644
index 00000000..34f9866f
--- /dev/null
+++ b/mobile/proguard-project.txt
@@ -0,0 +1,16 @@
+# view res/xml/preferences.xml #generated:4
+-keep class com.cradle.iitc_mobile.IITC_AboutDialogPreference { (...); }
+
+# view AndroidManifest.xml #generated:23
+-keep class com.cradle.iitc_mobile.IITC_Mobile { (...); }
+
+# view AndroidManifest.xml #generated:56
+-keep class com.cradle.iitc_mobile.IITC_SearchableActivity { (...); }
+
+# view AndroidManifest.xml #generated:50
+-keep class com.cradle.iitc_mobile.IITC_Settings { (...); }
+
+# view res/layout/activity_main.xml #generated:6
+-keep class com.cradle.iitc_mobile.IITC_WebView { (...); }
+
+-keep class com.cradle.iitc_mobile.IITC_JSInterface { (...); }
\ No newline at end of file
diff --git a/mobile/res/menu/main.xml b/mobile/res/menu/main.xml
index eba307b5..e203e4fb 100644
--- a/mobile/res/menu/main.xml
+++ b/mobile/res/menu/main.xml
@@ -1,5 +1,9 @@
- -
-
-
+ -
+
- Debug
Choose account to login
Login failed.
+ Search Locations
+ Search
\ No newline at end of file
diff --git a/mobile/res/xml/searchable.xml b/mobile/res/xml/searchable.xml
new file mode 100644
index 00000000..19c27279
--- /dev/null
+++ b/mobile/res/xml/searchable.xml
@@ -0,0 +1,8 @@
+
+
+
diff --git a/mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java b/mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java
index 88604777..d98ca631 100644
--- a/mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java
+++ b/mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java
@@ -4,6 +4,7 @@ import java.io.IOException;
import android.app.ActionBar;
import android.app.Activity;
+import android.app.SearchManager;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
@@ -25,6 +26,7 @@ import android.view.MenuItem;
import android.view.Window;
import android.view.WindowManager;
import android.webkit.WebView;
+import android.widget.SearchView;
import android.widget.Toast;
public class IITC_Mobile extends Activity {
@@ -42,6 +44,7 @@ public class IITC_Mobile extends Activity {
private boolean fullscreen_actionbar = false;
private ActionBar actionBar;
private IITC_DeviceAccountLogin mLogin;
+ private MenuItem searchMenuItem;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -98,7 +101,7 @@ public class IITC_Mobile extends Activity {
}
public void onStatusChanged(String provider, int status,
- Bundle extras) {
+ Bundle extras) {
}
public void onProviderEnabled(String provider) {
@@ -120,8 +123,17 @@ public class IITC_Mobile extends Activity {
fullscreen_actionbar = sharedPref.getBoolean("pref_fullscreen_actionbar", false);
+ handleIntent(getIntent(), true);
+ }
+
+ @Override
+ protected void onNewIntent(Intent intent) {
+ setIntent(intent);
+ handleIntent(intent, false);
+ }
+
+ private void handleIntent(Intent intent, boolean onCreate) {
// load new iitc web view with ingress intel page
- Intent intent = getIntent();
String action = intent.getAction();
if (Intent.ACTION_VIEW.equals(action)) {
Uri uri = intent.getData();
@@ -133,7 +145,15 @@ public class IITC_Mobile extends Activity {
Log.d("iitcm", "loading url...");
this.loadUrl(url);
}
- } else {
+ } else if (Intent.ACTION_SEARCH.equals(action)) {
+ String query = intent.getStringExtra(SearchManager.QUERY);
+ query = query.replace("'", "''");
+ final SearchView searchView =
+ (SearchView) searchMenuItem.getActionView();
+ searchView.setQuery(query, false);
+ searchView.clearFocus();
+ iitc_view.loadUrl("javascript:search('" + query + "');");
+ } else if (onCreate){
this.loadUrl(intel_url);
}
}
@@ -238,7 +258,14 @@ public class IITC_Mobile extends Activity {
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
-
+ // Get the SearchView and set the searchable configuration
+ SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
+ this.searchMenuItem = menu.findItem(R.id.menu_search);
+ final SearchView searchView =
+ (SearchView) searchMenuItem.getActionView();
+ // Assumes current activity is the searchable activity
+ searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
+ searchView.setIconifiedByDefault(false); // Do not iconify the widget; expand it by default
return true;
}
@@ -246,63 +273,63 @@ public class IITC_Mobile extends Activity {
public boolean onOptionsItemSelected(MenuItem item) {
// Handle item selection
switch (item.getItemId()) {
- case android.R.id.home :
+ case android.R.id.home:
iitc_view.loadUrl("javascript: window.show('map');");
actionBar.setTitle(getString(R.string.menu_map));
return true;
- case R.id.menu_map :
+ case R.id.menu_map:
iitc_view.loadUrl("javascript: window.show('map');");
actionBar.setTitle(getString(R.string.menu_map));
return true;
- case R.id.reload_button :
+ case R.id.reload_button:
this.loadUrl(intel_url);
actionBar.setTitle(getString(R.string.menu_map));
return true;
- case R.id.toggle_fullscreen :
+ case R.id.toggle_fullscreen:
toggleFullscreen();
return true;
case R.id.layer_chooser:
// the getLayers function calls the setLayers method of IITC_JSInterface
iitc_view.loadUrl("javascript: window.layerChooser.getLayers()");
return true;
- // get the users current location and focus it on map
- case R.id.locate :
+ // get the users current location and focus it on map
+ case R.id.locate:
iitc_view.loadUrl("javascript: window.show('map');");
iitc_view.loadUrl("javascript: window.map.locate({setView : true, maxZoom: 15});");
actionBar.setTitle(getString(R.string.menu_map));
return true;
- // start settings activity
- case R.id.action_settings :
+ // start settings activity
+ case R.id.action_settings:
Intent intent = new Intent(this, IITC_Settings.class);
intent.putExtra("iitc_version", iitc_view.getWebViewClient()
.getIITCVersion());
startActivity(intent);
return true;
- case R.id.menu_info :
+ case R.id.menu_info:
iitc_view.loadUrl("javascript: window.show('info');");
actionBar.setTitle(getString(R.string.menu_info));
return true;
- case R.id.menu_full :
+ case R.id.menu_full:
iitc_view.loadUrl("javascript: window.show('full');");
actionBar.setTitle(getString(R.string.menu_full));
return true;
- case R.id.menu_compact :
+ case R.id.menu_compact:
iitc_view.loadUrl("javascript: window.show('compact');");
actionBar.setTitle(getString(R.string.menu_compact));
return true;
- case R.id.menu_public :
+ case R.id.menu_public:
iitc_view.loadUrl("javascript: window.show('public');");
actionBar.setTitle(getString(R.string.menu_public));
return true;
- case R.id.menu_faction :
+ case R.id.menu_faction:
iitc_view.loadUrl("javascript: window.show('faction');");
actionBar.setTitle(getString(R.string.menu_faction));
return true;
- case R.id.menu_debug :
+ case R.id.menu_debug:
iitc_view.loadUrl("javascript: window.show('debug')");
actionBar.setTitle(getString(R.string.menu_debug));
return true;
- default :
+ default:
return super.onOptionsItemSelected(item);
}
}
@@ -377,12 +404,12 @@ public class IITC_Mobile extends Activity {
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
- case REQUEST_LOGIN :
+ case REQUEST_LOGIN:
// authentication activity has returned. mLogin will continue authentication
mLogin.onActivityResult(resultCode, data);
break;
- default :
+ default:
super.onActivityResult(requestCode, resultCode, data);
}
}
@@ -391,7 +418,7 @@ public class IITC_Mobile extends Activity {
* called by IITC_WebViewClient when the Google login form is opened.
*/
public void onReceivedLoginRequest(IITC_WebViewClient client, WebView view,
- String realm, String account, String args) {
+ String realm, String account, String args) {
mLogin = new IITC_DeviceAccountLogin(this, view, client);
mLogin.startLogin(realm, account, args);
}
diff --git a/mobile/src/com/cradle/iitc_mobile/IITC_WebView.java b/mobile/src/com/cradle/iitc_mobile/IITC_WebView.java
index b3a752a3..2a910f2a 100644
--- a/mobile/src/com/cradle/iitc_mobile/IITC_WebView.java
+++ b/mobile/src/com/cradle/iitc_mobile/IITC_WebView.java
@@ -26,6 +26,7 @@ public class IITC_WebView extends WebView {
// init web view
private void iitc_init(Context c) {
+ if ( this.isInEditMode() ) return;
settings = this.getSettings();
settings.setJavaScriptEnabled(true);
settings.setDomStorageEnabled(true);