Treat voice searches from within the browser differently
from those initiated from outside the browser.
Fix for http://b/issue?id=2546173
For a voice search initiated from outside the browser, an appId
will be attached. In that case, try to reuse the application tab.
In TabControl.recreateWebView, treat this as if the url does not
match the old url, so a new WebView will be created with a fresh
history list, and the back key will exit the browser. However, if
no appId is provided, simply reuse the current tab. In this case,
the history list will be preserved, and pressing the back key will
return to earlier voice searches.
Change-Id: I9ec1efd56454ba94eb2bc348c4476fb6bd025dad
diff --git a/src/com/android/browser/BrowserActivity.java b/src/com/android/browser/BrowserActivity.java
index 1c136b3..1f969af 100644
--- a/src/com/android/browser/BrowserActivity.java
+++ b/src/com/android/browser/BrowserActivity.java
@@ -460,7 +460,10 @@
final String appId = intent
.getStringExtra(Browser.EXTRA_APPLICATION_ID);
- if ((Intent.ACTION_VIEW.equals(action) || activateVoiceSearch)
+ if ((Intent.ACTION_VIEW.equals(action)
+ // If a voice search has no appId, it means that it came
+ // from the browser. In that case, reuse the current tab.
+ || (activateVoiceSearch && appId != null))
&& !getPackageName().equals(appId)
&& (flags & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0) {
Tab appTab = mTabControl.getTabFromId(appId);