Bug 870110 - Part 1: search changes to support FHR on Android. r=wesj,cpeterson

This commit is contained in:
Richard Newman 2013-05-09 17:07:53 -07:00
parent 457b71eb78
commit 43e6b6f3e8
6 changed files with 75 additions and 54 deletions

View File

@ -99,8 +99,12 @@ public class AwesomeBar extends GeckoActivity
}
@Override
public void onSearch(String engine, String text) {
openSearchAndFinish(text, engine);
public void onSearch(SearchEngine engine, String text) {
Intent resultIntent = new Intent();
resultIntent.putExtra(URL_KEY, text);
resultIntent.putExtra(TARGET_KEY, mTarget);
resultIntent.putExtra(SEARCH_KEY, engine.name);
finishWithResult(resultIntent);
}
@Override
@ -379,37 +383,31 @@ public class AwesomeBar extends GeckoActivity
final int index = url.indexOf(' ');
// Check for a keyword if the URL looks like a search query
if (StringUtils.isSearchQuery(url, true)) {
ThreadUtils.postToBackgroundThread(new Runnable() {
@Override
public void run() {
String keywordUrl = null;
String keywordSearch = "";
if (index == -1) {
keywordUrl = BrowserDB.getUrlForKeyword(getContentResolver(), url);
} else {
keywordUrl = BrowserDB.getUrlForKeyword(getContentResolver(), url.substring(0, index));
keywordSearch = url.substring(index + 1);
}
if (keywordUrl == null) {
openUrlAndFinish(url, "", true);
} else {
String search = URLEncoder.encode(keywordSearch);
openUrlAndFinish(keywordUrl.replace("%s", search), "", true);
}
}
});
} else {
if (!StringUtils.isSearchQuery(url, true)) {
openUrlAndFinish(url, "", true);
return;
}
}
ThreadUtils.postToBackgroundThread(new Runnable() {
@Override
public void run() {
final String keyword;
final String keywordSearch;
private void openSearchAndFinish(String url, String engine) {
Intent resultIntent = new Intent();
resultIntent.putExtra(URL_KEY, url);
resultIntent.putExtra(TARGET_KEY, mTarget);
resultIntent.putExtra(SEARCH_KEY, engine);
finishWithResult(resultIntent);
if (index == -1) {
keyword = url;
keywordSearch = "";
} else {
keyword = url.substring(0, index);
keywordSearch = url.substring(index + 1);
}
final String keywordUrl = BrowserDB.getUrlForKeyword(getContentResolver(), keyword);
final String searchUrl = (keywordUrl != null)
? keywordUrl.replace("%s", URLEncoder.encode(keywordSearch))
: url;
openUrlAndFinish(searchUrl, "", true);
}
});
}
@Override

View File

@ -40,7 +40,7 @@ public class AwesomeBarTabs extends TabHost
public interface OnUrlOpenListener {
public void onUrlOpen(String url, String title);
public void onSearch(String engine, String text);
public void onSearch(SearchEngine engine, String text);
public void onEditSuggestion(String suggestion);
}

View File

@ -137,6 +137,7 @@ FENNEC_JAVA_FILES = \
ProfileMigrator.java \
PromptService.java \
Restarter.java \
SearchEngine.java \
sqlite/ByteBufferInputStream.java \
sqlite/MatrixBlobCursor.java \
sqlite/SQLiteBridge.java \

View File

@ -0,0 +1,29 @@
/* -*- Mode: Java; c-basic-offset: 4; tab-width: 20; indent-tabs-mode: nil; -*-
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
package org.mozilla.gecko;
import android.graphics.Bitmap;
import java.util.ArrayList;
public class SearchEngine {
public String name;
public String identifier;
public Bitmap icon;
public ArrayList<String> suggestions;
public SearchEngine(String name, String identifier) {
this(name, identifier, null);
}
public SearchEngine(String name, String identifier, Bitmap icon) {
this.name = name;
this.identifier = identifier;
this.icon = icon;
this.suggestions = new ArrayList<String>();
}
}

View File

@ -359,9 +359,9 @@ public class AllPagesTab extends AwesomeBarTab implements GeckoEventListener {
}
private class AwesomeBarSearchEngineItem implements AwesomeBarItem {
private String mSearchEngine;
private SearchEngine mSearchEngine;
public AwesomeBarSearchEngineItem(String searchEngine) {
public AwesomeBarSearchEngineItem(SearchEngine searchEngine) {
mSearchEngine = searchEngine;
}
@ -428,7 +428,7 @@ public class AllPagesTab extends AwesomeBarTab implements GeckoEventListener {
}
// return search engine
return new AwesomeBarSearchEngineItem(mSearchEngines.get(engineIndex).name);
return new AwesomeBarSearchEngineItem(mSearchEngines.get(engineIndex));
}
private int getEngineIndex(int position) {
@ -549,7 +549,7 @@ public class AllPagesTab extends AwesomeBarTab implements GeckoEventListener {
if (v != viewHolder.userEnteredView && !StringUtils.isSearchQuery(suggestion, false)) {
listener.onUrlOpen(suggestion, null);
} else {
listener.onSearch(engine.name, suggestion);
listener.onSearch(engine, suggestion);
}
}
}
@ -619,22 +619,6 @@ public class AllPagesTab extends AwesomeBarTab implements GeckoEventListener {
}
};
private class SearchEngine {
public String name;
public Bitmap icon;
public ArrayList<String> suggestions;
public SearchEngine(String name) {
this(name, null);
}
public SearchEngine(String name, Bitmap icon) {
this.name = name;
this.icon = icon;
this.suggestions = new ArrayList<String>();
}
};
/**
* Sets suggestions associated with the current suggest engine.
* If there is no suggest engine, this does nothing.
@ -662,11 +646,12 @@ public class AllPagesTab extends AwesomeBarTab implements GeckoEventListener {
for (int i = 0; i < engines.length(); i++) {
JSONObject engineJSON = engines.getJSONObject(i);
String name = engineJSON.getString("name");
String identifier = engineJSON.getString("identifier");
String iconURI = engineJSON.getString("iconURI");
Bitmap icon = BitmapUtils.getBitmapFromDataURI(iconURI);
if (name.equals(suggestEngine) && suggestTemplate != null) {
// suggest engine should be at the front of the list
searchEngines.add(0, new SearchEngine(name, icon));
searchEngines.add(0, new SearchEngine(name, identifier, icon));
// The only time Tabs.getInstance().getSelectedTab() should
// be null is when we're restoring after a crash. We should
@ -676,7 +661,7 @@ public class AllPagesTab extends AwesomeBarTab implements GeckoEventListener {
if (tab == null || !tab.isPrivate())
mSuggestClient = new SuggestClient(GeckoApp.mAppContext, suggestTemplate, SUGGESTION_TIMEOUT, SUGGESTION_MAX);
} else {
searchEngines.add(new SearchEngine(name, icon));
searchEngines.add(new SearchEngine(name, identifier, icon));
}
}

View File

@ -1311,8 +1311,15 @@ var BrowserApp = {
break;
case "keyword-search":
// This assumes the user can only perform a keyword serach on the selected tab.
// This assumes that the user can only perform a keyword search on the selected tab.
this.selectedTab.userSearch = aData;
let engine = aSubject.QueryInterface(Ci.nsISearchEngine);
sendMessageToJava({
type: "Search:Keyword",
identifier: engine.identifier,
name: engine.name,
});
break;
case "Browser:Quit":
@ -5895,6 +5902,7 @@ var SearchEngines = {
let searchEngines = engineData.map(function (engine) {
return {
name: engine.name,
identifier: engine.identifier,
iconURI: (engine.iconURI ? engine.iconURI.spec : null)
};
});