summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMichael Kolb <kolby@google.com>2011-08-04 16:54:31 -0700
committerMichael Kolb <kolby@google.com>2011-08-05 09:57:32 -0700
commite28b347fcc1df6e6bd41cb294d521a4f1e7c5c75 (patch)
treef4cefe11ff78dbca0b2525fb56e4b707c5d55d65 /src
parentedd390b6e1448a206f514d97c8ff1fcfb58773bd (diff)
downloadpackages_apps_Browser-e28b347fcc1df6e6bd41cb294d521a4f1e7c5c75.zip
packages_apps_Browser-e28b347fcc1df6e6bd41cb294d521a4f1e7c5c75.tar.gz
packages_apps_Browser-e28b347fcc1df6e6bd41cb294d521a4f1e7c5c75.tar.bz2
close external tabs on back
Bug: 4466495 close externally created tabs when the back button is used and no further back history is available Change-Id: If605474d929fb759226a1e1f4125bfaab43e6653
Diffstat (limited to 'src')
-rw-r--r--src/com/android/browser/Controller.java3
-rw-r--r--src/com/android/browser/IntentHandler.java11
-rw-r--r--src/com/android/browser/Tab.java13
3 files changed, 23 insertions, 4 deletions
diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java
index 142375d..89b700b 100644
--- a/src/com/android/browser/Controller.java
+++ b/src/com/android/browser/Controller.java
@@ -2415,6 +2415,9 @@ public class Controller
// Now we close the other tab
closeTab(current);
} else {
+ if ((current.getAppId() != null) || current.closeOnBack()) {
+ closeCurrentTab();
+ }
/*
* Instead of finishing the activity, simply push this to the back
* of the stack and let ActivityManager to choose the foreground
diff --git a/src/com/android/browser/IntentHandler.java b/src/com/android/browser/IntentHandler.java
index 6ed5b72..c76197d 100644
--- a/src/com/android/browser/IntentHandler.java
+++ b/src/com/android/browser/IntentHandler.java
@@ -17,10 +17,6 @@
package com.android.browser;
-import com.android.browser.search.SearchEngine;
-import com.android.common.Search;
-import com.android.common.speech.LoggingEvents;
-
import android.app.Activity;
import android.app.SearchManager;
import android.content.ContentResolver;
@@ -36,6 +32,10 @@ import android.speech.RecognizerResultsIntent;
import android.text.TextUtils;
import android.util.Patterns;
+import com.android.browser.search.SearchEngine;
+import com.android.common.Search;
+import com.android.common.speech.LoggingEvents;
+
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
@@ -187,6 +187,9 @@ public class IntentHandler {
Tab tab = mController.openTab(urlData);
if (tab != null) {
tab.setAppId(appId);
+ if ((intent.getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0) {
+ tab.setCloseOnBack(true);
+ }
}
}
} else {
diff --git a/src/com/android/browser/Tab.java b/src/com/android/browser/Tab.java
index a251212..39bf49c 100644
--- a/src/com/android/browser/Tab.java
+++ b/src/com/android/browser/Tab.java
@@ -145,6 +145,8 @@ class Tab implements PictureListener {
// Application identifier used to find tabs that another application wants
// to reuse.
private String mAppId;
+ // flag to indicate if tab should be closed on back
+ private boolean mCloseOnBack;
// Keep the original url around to avoid killing the old WebView if the url
// has not changed.
// Error console for the tab
@@ -225,6 +227,7 @@ class Tab implements PictureListener {
static final String APPID = "appid";
static final String INCOGNITO = "privateBrowsingEnabled";
static final String USERAGENT = "useragent";
+ static final String CLOSEFLAG = "closeOnBack";
// -------------------------------------------------------------------------
@@ -1785,6 +1788,14 @@ class Tab implements PictureListener {
mAppId = id;
}
+ boolean closeOnBack() {
+ return mCloseOnBack;
+ }
+
+ void setCloseOnBack(boolean close) {
+ mCloseOnBack = close;
+ }
+
String getUrl() {
return UrlUtils.filteredUrl(mCurrentState.mUrl);
}
@@ -1895,6 +1906,7 @@ class Tab implements PictureListener {
if (mAppId != null) {
mSavedState.putString(APPID, mAppId);
}
+ mSavedState.putBoolean(CLOSEFLAG, mCloseOnBack);
// Remember the parent tab so the relationship can be restored.
if (mParent != null) {
mSavedState.putLong(PARENTTAB, mParent.mId);
@@ -1916,6 +1928,7 @@ class Tab implements PictureListener {
// This will maintain the app id, original url and close-on-exit values.
mId = b.getLong(ID);
mAppId = b.getString(APPID);
+ mCloseOnBack = b.getBoolean(CLOSEFLAG);
if (b.getBoolean(USERAGENT)
!= mSettings.hasDesktopUseragent(getWebView())) {
mSettings.toggleDesktopUseragent(getWebView());