diff options
-rw-r--r-- | src/com/android/browser/Controller.java | 8 | ||||
-rw-r--r-- | src/com/android/browser/Tab.java | 2 | ||||
-rw-r--r-- | src/com/android/browser/UrlHandler.java | 20 |
3 files changed, 17 insertions, 13 deletions
diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java index 1e89af1..adc2677 100644 --- a/src/com/android/browser/Controller.java +++ b/src/com/android/browser/Controller.java @@ -2094,15 +2094,11 @@ public class Controller } } - protected void closeEmptyChildTab() { + protected void closeEmptyTab() { Tab current = mTabControl.getCurrentTab(); if (current != null && current.getWebView().copyBackForwardList().getSize() == 0) { - Tab parent = current.getParent(); - if (parent != null) { - switchToTab(parent); - closeTab(current); - } + closeCurrentTab(); } } diff --git a/src/com/android/browser/Tab.java b/src/com/android/browser/Tab.java index 672a1a6..8bf32b0 100644 --- a/src/com/android/browser/Tab.java +++ b/src/com/android/browser/Tab.java @@ -877,7 +877,7 @@ class Tab implements PictureListener { // Sync state (in case of stop/timeout) mCurrentState.mUrl = view.getUrl(); if (mCurrentState.mUrl == null) { - mCurrentState.mUrl = url != null ? url : ""; + mCurrentState.mUrl = ""; } mCurrentState.mOriginalUrl = view.getOriginalUrl(); mCurrentState.mTitle = view.getTitle(); diff --git a/src/com/android/browser/UrlHandler.java b/src/com/android/browser/UrlHandler.java index 74a58f3..73b265d 100644 --- a/src/com/android/browser/UrlHandler.java +++ b/src/com/android/browser/UrlHandler.java @@ -25,6 +25,7 @@ import android.content.pm.ResolveInfo; import android.database.Cursor; import android.net.Uri; import android.os.AsyncTask; +import android.provider.Browser; import android.util.Log; import android.webkit.WebView; @@ -76,7 +77,7 @@ public class UrlHandler { // If a new tab is created through JavaScript open to load this // url, we would like to close it as we will load this url in a // different Activity. - mController.closeEmptyChildTab(); + mController.closeEmptyTab(); return true; } // wtai://wp/sd;dtmf @@ -114,7 +115,7 @@ public class UrlHandler { } } - if (startActivityForUrl(url)) { + if (startActivityForUrl(tab, url)) { return true; } @@ -125,7 +126,7 @@ public class UrlHandler { return false; } - boolean startActivityForUrl(String url) { + boolean startActivityForUrl(Tab tab, String url) { Intent intent; // perform generic parsing of the URI to turn it into an Intent. try { @@ -148,7 +149,7 @@ public class UrlHandler { // If a new tab is created through JavaScript open to load this // url, we would like to close it as we will load this url in a // different Activity. - mController.closeEmptyChildTab(); + mController.closeEmptyTab(); return true; } else { return false; @@ -159,6 +160,13 @@ public class UrlHandler { // security (only access to BROWSABLE activities). intent.addCategory(Intent.CATEGORY_BROWSABLE); intent.setComponent(null); + // Re-use the existing tab if the intent comes back to us + if (tab != null) { + if (tab.getAppId() == null) { + tab.setAppId("com.android.browser-" + tab.getId()); + } + intent.putExtra(Browser.EXTRA_APPLICATION_ID, tab.getAppId()); + } // Make sure webkit can handle it internally before checking for specialized // handlers. If webkit can't handle it internally, we need to call // startActivityIfNeeded @@ -172,7 +180,7 @@ public class UrlHandler { // If a new tab is created through JavaScript open to load this // url, we would like to close it as we will load this url in a // different Activity. - mController.closeEmptyChildTab(); + mController.closeEmptyTab(); return true; } } catch (ActivityNotFoundException ex) { @@ -262,7 +270,7 @@ public class UrlHandler { // Make sure the Tab was not closed while handling the task if (mController.getTabControl().getTabPosition(mTab) != -1) { // If the Activity Manager is not invoked, load the URL directly - if (!startActivityForUrl(result)) { + if (!startActivityForUrl(mTab, result)) { if (!handleMenuClick(mTab, result)) { mController.loadUrl(mTab, result); } |