Clear back stack after submitted query into preloaded page.
This ensures that the blank searchbox page does not appear in the back stack.
Bug: 5252128
Change-Id: I93e2e7f7c1c69e6e0e93b38acf1c7c9dc887ec19
diff --git a/src/com/android/browser/PreloadedTabControl.java b/src/com/android/browser/PreloadedTabControl.java
index ed066f2..4ffe6b4 100644
--- a/src/com/android/browser/PreloadedTabControl.java
+++ b/src/com/android/browser/PreloadedTabControl.java
@@ -21,6 +21,7 @@
import android.webkit.SearchBox;
import java.util.Map;
+import java.util.regex.Pattern;
/**
* Class to manage the controlling of preloaded tab.
@@ -74,6 +75,7 @@
}
maybeSetQuery(query, sb);
if (LOGD_ENABLED) Log.d(LOGTAG, "Submitting query " + query);
+ final String currentUrl = mTab.getUrl();
sb.onsubmit(new SearchBox.SearchBoxListener() {
@Override
public void onSubmitComplete(boolean called) {
@@ -83,7 +85,21 @@
if (LOGD_ENABLED) Log.d(LOGTAG, "Query not submitted; falling back");
loadUrl(fallbackUrl, fallbackHeaders);
// make sure that the failed, preloaded URL is cleared from the back stack
- mTab.clearBackStackWhenItemAdded(fallbackUrl);
+ mTab.clearBackStackWhenItemAdded(Pattern.compile(
+ "^" + Pattern.quote(fallbackUrl) + "$"));
+ } else {
+ // ignore the next fragment change, to avoid leaving a blank page in the browser
+ // after the query has been submitted.
+ String currentWithoutFragment = Uri.parse(currentUrl)
+ .buildUpon()
+ .fragment(null)
+ .toString();
+ mTab.clearBackStackWhenItemAdded(
+ Pattern.compile(
+ "^" +
+ Pattern.quote(currentWithoutFragment) +
+ "(\\#.*)?" +
+ "$"));
}
}});
return true;