Merge "fix tab NPE" into honeycomb
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) {