diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/com/android/browser/Controller.java | 3 | ||||
-rw-r--r-- | src/com/android/browser/IntentHandler.java | 11 | ||||
-rw-r--r-- | src/com/android/browser/Tab.java | 13 |
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()); |