Special case searching in incognito mode
Bug: 3336558
The default flow when the user hits enter in UrlInputView is handled
by IntentHandler. If the input isn't a URL, it is treated as a search
request, which is causes an intent to be fired off from the search
engine. This is logged, which we can't have in incognito mode. For now,
handle this by having the UrlInputView detect search requests, lookup
the search engine info, and use that to build the search request URL
directly, previnting logging.
Change-Id: I4b98240f4b2aff265638b53cb65677bc1bd507c0
diff --git a/src/com/android/browser/UrlInputView.java b/src/com/android/browser/UrlInputView.java
index 0214843..02c9f4c 100644
--- a/src/com/android/browser/UrlInputView.java
+++ b/src/com/android/browser/UrlInputView.java
@@ -18,11 +18,15 @@
import com.android.browser.SuggestionsAdapter.CompletionListener;
import com.android.browser.SuggestionsAdapter.SuggestItem;
+import com.android.browser.search.SearchEngine;
+import com.android.browser.search.SearchEngineInfo;
+import com.android.browser.search.SearchEngines;
import android.content.Context;
import android.content.res.Configuration;
import android.text.TextUtils;
import android.util.AttributeSet;
+import android.util.Patterns;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnFocusChangeListener;
@@ -55,6 +59,7 @@
private View mContainer;
private boolean mLandscape;
private boolean mInVoiceMode;
+ private boolean mIncognitoMode;
public UrlInputView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
@@ -174,10 +179,33 @@
if (TextUtils.isEmpty(url)) {
mListener.onDismiss();
} else {
+ if (mIncognitoMode && isSearch(url)) {
+ // To prevent logging, intercept this request
+ // TODO: This is a quick hack, refactor this
+ SearchEngine searchEngine = BrowserSettings.getInstance()
+ .getSearchEngine();
+ if (searchEngine == null) return;
+ SearchEngineInfo engineInfo = SearchEngines
+ .getSearchEngineInfo(mContext, searchEngine.getName());
+ if (engineInfo == null) return;
+ url = engineInfo.getSearchUriForQuery(url);
+ // mLister.onAction can take it from here without logging
+ }
mListener.onAction(url, extra, source);
}
}
+ boolean isSearch(String inUrl) {
+ String url = UrlUtils.fixUrl(inUrl).trim();
+ if (TextUtils.isEmpty(url)) return false;
+
+ if (Patterns.WEB_URL.matcher(url).matches()
+ || UrlUtils.ACCEPTED_URI_SCHEMA.matcher(url).matches()) {
+ return false;
+ }
+ return true;
+ }
+
// Completion Listener
@Override
@@ -224,7 +252,8 @@
}
public void setIncognitoMode(boolean incognito) {
- mAdapter.setIncognitoMode(incognito);
+ mIncognitoMode = incognito;
+ mAdapter.setIncognitoMode(mIncognitoMode);
}
}
diff --git a/src/com/android/browser/search/SearchEngines.java b/src/com/android/browser/search/SearchEngines.java
index 62690e7..a6ba3de 100644
--- a/src/com/android/browser/search/SearchEngines.java
+++ b/src/com/android/browser/search/SearchEngines.java
@@ -61,7 +61,7 @@
return new OpenSearchSearchEngine(context, searchEngineInfo);
}
- private static SearchEngineInfo getSearchEngineInfo(Context context, String name) {
+ public static SearchEngineInfo getSearchEngineInfo(Context context, String name) {
try {
return new SearchEngineInfo(context, name);
} catch (IllegalArgumentException exception) {