diff --git a/code/search.js b/code/search.js
index 746c4bf0..ac6359f1 100644
--- a/code/search.js
+++ b/code/search.js
@@ -50,7 +50,7 @@ window.search.Query.prototype.init = function() {
this.list = $('
')
.appendTo(this.container)
- .append($('- ').text('No results'));
+ .append($('
- ').text(this.confirmed ? 'No local results, searching online...' : 'No local results.'));
this.container.accordion({
collapsible: true,
@@ -195,6 +195,8 @@ window.search.doSearch = function(term, confirmed) {
// clear results
if(term == '') return;
+ if(useAndroidPanes()) show('info');
+
$('#search').tooltip().tooltip('close');
window.search.lastSearch = new window.search.Query(term, confirmed);
@@ -270,6 +272,15 @@ addHook('search', function(query) {
if(!query.confirmed) return;
$.getJSON(NOMINATIM + encodeURIComponent(query.term), function(data) {
+ if(data.length == 0) {
+ query.addResult({
+ title: 'No results on OpenStreetMap',
+ icon: '//www.openstreetmap.org/favicon.ico',
+ onSelected: function() {return true;},
+ });
+ return;
+ }
+
data.forEach(function(item) {
var result = {
title: item.display_name,
diff --git a/mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java b/mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java
index 7ab609a4..ce260370 100644
--- a/mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java
+++ b/mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java
@@ -268,15 +268,13 @@ public class IITC_Mobile extends Activity
}
if (Intent.ACTION_SEARCH.equals(action)) {
- String query = intent.getStringExtra(SearchManager.QUERY);
- query = query.replace("'", "''");
- final SearchView searchView =
- (SearchView) mSearchMenuItem.getActionView();
+ final String query = intent.getStringExtra(SearchManager.QUERY);
+ final SearchView searchView = (SearchView) mSearchMenuItem.getActionView();
searchView.setQuery(query, false);
searchView.clearFocus();
- switchToPane(Pane.MAP);
- mIitcWebView.loadUrl("javascript:if(window.search&&window.search.doSearch){window.search.doSearch('" + query + "',true);window.show('info')}");
+ search(query, true);
+
return;
}
@@ -285,6 +283,14 @@ public class IITC_Mobile extends Activity
}
}
+ private void search(String term, final boolean confirmed) {
+ if (term.isEmpty() && !confirmed) return;
+
+ term = term.replace("'", "\\'");
+ mIitcWebView.loadUrl("javascript:if(window.search&&window.search.doSearch){window.search.doSearch('" + term
+ + "'," + confirmed + ");}");
+ }
+
private void handleGeoUri(final Uri uri) throws URISyntaxException {
final String[] parts = uri.getSchemeSpecificPart().split("\\?", 2);
Double lat = null, lon = null;
@@ -344,8 +350,7 @@ public class IITC_Mobile extends Activity
mSearchTerm = search;
loadUrl(mIntelUrl);
} else {
- switchToPane(Pane.MAP);
- mIitcWebView.loadUrl("javascript:search('" + search + "');");
+ search(search, true);
}
return;
}
@@ -507,9 +512,43 @@ public class IITC_Mobile extends Activity
// Assumes current activity is the searchable activity
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
searchView.setIconifiedByDefault(false); // Do not iconify the widget; expand it by default
+ searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
+ @Override
+ public boolean onQueryTextSubmit(final String query) {
+ search(query, true);
+ return true;
+ }
+
+ @Override
+ public boolean onQueryTextChange(final String query) {
+ search(query, false);
+ return true;
+ }
+ });
+
+ // the SearchView does not allow submitting an empty query, so we catch the clear button
+ final View buttonClear = searchView.findViewById(
+ getResources().getIdentifier("android:id/search_close_btn", null, null));
+ if (buttonClear != null) buttonClear.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(final View v) {
+ searchView.setQuery("", false);
+ search("", true);
+ }
+ });
return true;
}
+ @Override
+ public boolean onKeyDown(final int keyCode, final KeyEvent event) {
+ if (keyCode == KeyEvent.KEYCODE_SEARCH) {
+ mSearchMenuItem.expandActionView();
+ mSearchMenuItem.getActionView().requestFocus();
+ return true;
+ }
+ return super.onKeyDown(keyCode, event);
+ }
+
@Override
public boolean onPrepareOptionsMenu(final Menu menu) {
boolean visible = false;
@@ -731,8 +770,7 @@ public class IITC_Mobile extends Activity
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
- // switchToPane(Pane.MAP);
- mIitcWebView.loadUrl("javascript:search('" + mSearchTerm + "');");
+ search(mSearchTerm, true);
mSearchTerm = null;
}
}, 5000);