diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/com/android/browser/ActiveTabsPage.java | 2 | ||||
-rw-r--r-- | src/com/android/browser/Controller.java | 168 | ||||
-rw-r--r-- | src/com/android/browser/IntentHandler.java | 12 | ||||
-rw-r--r-- | src/com/android/browser/NavScreen.java | 6 | ||||
-rw-r--r-- | src/com/android/browser/Tab.java | 25 | ||||
-rw-r--r-- | src/com/android/browser/TabControl.java | 9 | ||||
-rw-r--r-- | src/com/android/browser/UiController.java | 5 | ||||
-rw-r--r-- | src/com/android/browser/UrlHandler.java | 4 | ||||
-rw-r--r-- | src/com/android/browser/WebViewController.java | 6 |
9 files changed, 91 insertions, 146 deletions
diff --git a/src/com/android/browser/ActiveTabsPage.java b/src/com/android/browser/ActiveTabsPage.java index 52d943f..23b313a 100644 --- a/src/com/android/browser/ActiveTabsPage.java +++ b/src/com/android/browser/ActiveTabsPage.java @@ -75,7 +75,7 @@ public class ActiveTabsPage extends LinearLayout implements OnClickListener, if (v == mNewTab) { mController.openTabToHomePage(); } else if (v == mNewIncognitoTab) { - mController.openIncognitoTab(); + mController.openTab(null, true, true, false); } mController.removeActiveTabsPage(false); } diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java index d1e1b0a..0f967ce 100644 --- a/src/com/android/browser/Controller.java +++ b/src/com/android/browser/Controller.java @@ -309,17 +309,15 @@ public class Controller // invoked to view the content by another application. In this case, // the tab will be close when exit. UrlData urlData = mIntentHandler.getUrlDataFromIntent(intent); - - String action = intent.getAction(); - final Tab t = mTabControl.createNewTab( - (Intent.ACTION_VIEW.equals(action) && - intent.getData() != null) - || RecognizerResultsIntent.ACTION_VOICE_SEARCH_RESULTS - .equals(action), - intent.getStringExtra(Browser.EXTRA_APPLICATION_ID), - urlData.mUrl, false); - addTab(t); - setActiveTab(t); + Tab t = null; + if (urlData.isEmpty()) { + t = openTabToHomePage(); + } else { + t = openTab(urlData); + } + if (t != null) { + t.setAppId(intent.getStringExtra(Browser.EXTRA_APPLICATION_ID)); + } WebView webView = t.getWebView(); if (extra != null) { int scale = extra.getInt(Browser.INITIAL_ZOOM_LEVEL, 0); @@ -327,15 +325,6 @@ public class Controller webView.setInitialScale(scale); } } - - if (urlData.isEmpty()) { - loadUrl(webView, mSettings.getHomePage()); - } else { - // monkey protection against delayed start - if (t != null) { - loadUrlDataIn(t, urlData); - } - } } else { mTabControl.restoreState(icicle, currentTab, restoreIncognitoTabs, mUi.needsRestoreAllTabs()); @@ -491,7 +480,12 @@ public class Controller break; case R.id.open_newtab_context_menu_id: final Tab parent = mTabControl.getCurrentTab(); - final Tab newTab = openTab(parent, url, false); + final Tab newTab = + openTab(url, + (parent != null) + && parent.isPrivateBrowsingEnabled(), + !mSettings.openInBackground(), + true); if (newTab != null && newTab != parent) { parent.addChildTab(newTab); } @@ -1189,7 +1183,11 @@ public class Controller removeComboView(); if (!TextUtils.isEmpty(url)) { if (newTab) { - openTab(mTabControl.getCurrentTab(), url, false); + final Tab parent = mTabControl.getCurrentTab(); + openTab(url, + (parent != null) && parent.isPrivateBrowsingEnabled(), + !mSettings.openInBackground(), + true); } else { final Tab currentTab = mTabControl.getCurrentTab(); dismissSubWindow(currentTab); @@ -1390,8 +1388,12 @@ public class Controller @Override public boolean onMenuItemClick(MenuItem item) { final Tab parent = mTabControl.getCurrentTab(); - final Tab newTab = openTab(parent, - extra, false); + final Tab newTab = + openTab(extra, + (parent != null) + && parent.isPrivateBrowsingEnabled(), + !mSettings.openInBackground(), + true); if (newTab != parent) { parent.addChildTab(newTab); } @@ -1544,7 +1546,7 @@ public class Controller break; case R.id.incognito_menu_id: - openIncognitoTab(); + openTab(null, true, true, false); break; case R.id.goto_menu_id: @@ -2196,91 +2198,55 @@ public class Controller } } - @Override - public Tab openTabToHomePage() { - // check for max tabs - if (mTabControl.canCreateNewTab()) { - return openTabAndShow(null, new UrlData(mSettings.getHomePage()), - false, null); - } else { - mUi.showMaxTabsWarning(); - return null; - } - } - - protected Tab openTab(Tab parent, String url, boolean forceForeground) { - if (mSettings.openInBackground() && !forceForeground) { - Tab tab = mTabControl.createNewTab(false, null, null, - (parent != null) && parent.isPrivateBrowsingEnabled()); - if (tab != null) { - addTab(tab); - WebView view = tab.getWebView(); - loadUrl(view, url); - } - return tab; - } else { - return openTabAndShow(parent, new UrlData(url), false, null); + // open a non inconito tab with the given url data + // and set as active tab + public Tab openTab(UrlData urlData) { + Tab tab = createNewTab(false, true, true); + if ((tab != null) && !urlData.isEmpty()) { + loadUrlDataIn(tab, urlData); } + return tab; } - // This method does a ton of stuff. It will attempt to create a new tab - // if we haven't reached MAX_TABS. Otherwise it uses the current tab. If - // url isn't null, it will load the given url. - public Tab openTabAndShow(Tab parent, final UrlData urlData, - boolean closeOnExit, String appId) { - final Tab currentTab = mTabControl.getCurrentTab(); - if (mTabControl.canCreateNewTab()) { - final Tab tab = mTabControl.createNewTab(closeOnExit, appId, - urlData.mUrl, - (parent != null) && parent.isPrivateBrowsingEnabled()); - WebView webview = tab.getWebView(); - // We must set the new tab as the current tab to reflect the old - // animation behavior. - addTab(tab); - setActiveTab(tab); - if (!urlData.isEmpty()) { - loadUrlDataIn(tab, urlData); - } - return tab; - } else { - // Get rid of the subwindow if it exists - dismissSubWindow(currentTab); - if (!urlData.isEmpty()) { - // Load the given url. - loadUrlDataIn(currentTab, urlData); - } - return currentTab; - } + @Override + public Tab openTabToHomePage() { + return openTab(mSettings.getHomePage(), false, true, false); } @Override - public Tab openIncognitoTab() { - if (mTabControl.canCreateNewTab()) { - Tab currentTab = mTabControl.getCurrentTab(); - Tab tab = mTabControl.createNewTab(false, null, - null, true); - addTab(tab); - setActiveTab(tab); - loadUrlDataIn(tab, new UrlData(INCOGNITO_URI)); - return tab; - } else { - mUi.showMaxTabsWarning(); - return null; + public Tab openTab(String url, boolean incognito, boolean setActive, + boolean useCurrent) { + Tab tab = createNewTab(incognito, setActive, useCurrent); + if (tab != null) { + WebView w = tab.getWebView(); + loadUrl(w, ((incognito && url == null) ? INCOGNITO_URI : url)); } + return tab; } - @Override - public Tab createNewTab(String url, boolean incognito) { + // this method will attempt to create a new tab + // incognito: private browsing tab + // setActive: ste tab as current tab + // useCurrent: if no new tab can be created, return current tab + private Tab createNewTab(boolean incognito, boolean setActive, + boolean useCurrent) { + Tab tab = null; if (mTabControl.canCreateNewTab()) { - Tab tab = mTabControl.createNewTab(false, null, null, incognito); - WebView w = tab.getWebView(); + tab = mTabControl.createNewTab(incognito); addTab(tab); - loadUrl(w, (incognito ? INCOGNITO_URI : url)); - return tab; + if (setActive) { + setActiveTab(tab); + } } else { - mUi.showMaxTabsWarning(); - return null; + if (useCurrent) { + tab = mTabControl.getCurrentTab(); + // Get rid of the subwindow if it exists + dismissSubWindow(tab); + } else { + mUi.showMaxTabsWarning(); + } } + return tab; } /** @@ -2416,12 +2382,6 @@ public class Controller // Now we close the other tab closeTab(current); } else { - if (current.closeOnExit()) { - // This will finish the activity if there is only one tab - // open or it will switch to the next available tab if - // available. - closeCurrentTab(); - } /* * Instead of finishing the activity, simply push this to the back * of the stack and let ActivityManager to choose the foreground @@ -2591,7 +2551,7 @@ public class Controller // exclusive use of a modifier if (event.isCtrlPressed()) { if (event.isShiftPressed()) { - openIncognitoTab(); + openTab(null, true, true, false); } else { openTabToHomePage(); } diff --git a/src/com/android/browser/IntentHandler.java b/src/com/android/browser/IntentHandler.java index 1322d96..40db29f 100644 --- a/src/com/android/browser/IntentHandler.java +++ b/src/com/android/browser/IntentHandler.java @@ -134,7 +134,7 @@ public class IntentHandler { } if (intent.getBooleanExtra(Browser.EXTRA_CREATE_NEW_TAB, false)) { - mController.openTabAndShow(mTabControl.getCurrentTab(), urlData, false, null); + mController.openTab(urlData); return; } final String appId = intent @@ -151,7 +151,10 @@ public class IntentHandler { mController.reuseTab(appTab, appId, urlData); return; } else { - mController.openTabAndShow(null, urlData, false, appId); + Tab tab = mController.openTab(urlData); + if (tab != null) { + tab.setAppId(appId); + } } } else { // No matching application tab, try to find a regular tab @@ -168,7 +171,10 @@ public class IntentHandler { // MAX_TABS. Then the url will be opened in the current // tab. If a new tab is created, it will have "true" for // exit on close. - mController.openTabAndShow(null, urlData, false, appId); + Tab tab = mController.openTab(urlData); + if (tab != null) { + tab.setAppId(appId); + } } } } else { diff --git a/src/com/android/browser/NavScreen.java b/src/com/android/browser/NavScreen.java index 848b7b1..4095a96 100644 --- a/src/com/android/browser/NavScreen.java +++ b/src/com/android/browser/NavScreen.java @@ -239,14 +239,12 @@ public class NavScreen extends LinearLayout implements OnClickListener { showMenu(); } else if (mNewIncognito == v) { mUi.hideNavScreen(true); - mUiController.openIncognitoTab(); + mUiController.openTab(null, true, true, false); } } private void openNewTab() { - Tab tab = mUiController.createNewTab( - BrowserSettings.getInstance().getHomePage(), - false); + Tab tab = mUiController.openTabToHomePage(); mAdapter.notifyDataSetChanged(); if (tab != null) { diff --git a/src/com/android/browser/Tab.java b/src/com/android/browser/Tab.java index 3508005..c217e6e 100644 --- a/src/com/android/browser/Tab.java +++ b/src/com/android/browser/Tab.java @@ -108,8 +108,6 @@ class Tab { // Tab that constructed by this Tab. This is used when this Tab is // destroyed, it clears all mParentTab values in the children. private Vector<Tab> mChildTabs; - // If true, the tab will be removed when back out of the first page. - private boolean mCloseOnExit; // If true, the tab is in the foreground of the current activity. private boolean mInForeground; // If true, the tab is in page loading state (after onPageStarted, @@ -191,7 +189,6 @@ class Tab { static final String CURRTAB = "currentTab"; static final String CURRURL = "currentUrl"; static final String CURRTITLE = "currentTitle"; - static final String CLOSEONEXIT = "closeonexit"; static final String PARENTTAB = "parentTab"; static final String APPID = "appid"; static final String ORIGINALURL = "originalUrl"; @@ -859,9 +856,9 @@ class Tab { mWebViewController.attachSubWindow(Tab.this); transport.setWebView(mSubView); } else { - final Tab newTab = mWebViewController.openTabAndShow( - Tab.this, - IntentHandler.EMPTY_URL_DATA, false, null); + final Tab newTab = mWebViewController.openTab(null, + Tab.this.isPrivateBrowsingEnabled(), + true, true); if (newTab != Tab.this) { Tab.this.addChildTab(newTab); } @@ -1290,13 +1287,10 @@ class Tab { // remove later // Construct a new tab - Tab(WebViewController wvcontroller, WebView w, boolean closeOnExit, String appId, - String url) { + Tab(WebViewController wvcontroller, WebView w) { mWebViewController = wvcontroller; mActivity = mWebViewController.getActivity(); mSettings = BrowserSettings.getInstance(); - mCloseOnExit = closeOnExit; - mAppId = appId; mDataController = DataController.getInstance(mActivity); mCurrentState = new PageState(mActivity, w != null ? w.isPrivateBrowsingEnabled() : false); @@ -1666,15 +1660,6 @@ class Tab { return mParentTab; } - /** - * Return whether this tab should be closed when it is backing out of the - * first page. - * @return TRUE if this tab should be closed when exit. - */ - boolean closeOnExit() { - return mCloseOnExit; - } - private void setLockIconType(LockIcon icon) { mCurrentState.mLockIcon = icon; mWebViewController.onUpdatedLockIcon(this); @@ -1741,7 +1726,6 @@ class Tab { mSavedState.putString(CURRURL, mCurrentState.mUrl); mSavedState.putString(CURRTITLE, mCurrentState.mTitle); - mSavedState.putBoolean(CLOSEONEXIT, mCloseOnExit); if (mAppId != null) { mSavedState.putString(APPID, mAppId); } @@ -1766,7 +1750,6 @@ class Tab { // Restore the internal state even if the WebView fails to restore. // This will maintain the app id, original url and close-on-exit values. mSavedState = null; - mCloseOnExit = b.getBoolean(CLOSEONEXIT); mAppId = b.getString(APPID); mScreenshot = b.getParcelable(SCREENSHOT); diff --git a/src/com/android/browser/TabControl.java b/src/com/android/browser/TabControl.java index 07c9fa5..8be3041 100644 --- a/src/com/android/browser/TabControl.java +++ b/src/com/android/browser/TabControl.java @@ -165,8 +165,7 @@ class TabControl { * @return The newly createTab or null if we have reached the maximum * number of open tabs. */ - Tab createNewTab(boolean closeOnExit, String appId, String url, - boolean privateBrowsing) { + Tab createNewTab(boolean privateBrowsing) { int size = mTabs.size(); // Return false if we have maxed out on tabs if (mMaxTabs == size) { @@ -175,7 +174,7 @@ class TabControl { final WebView w = createNewWebView(privateBrowsing); // Create a new tab and add it to the tab list - Tab t = new Tab(mController, w, closeOnExit, appId, url); + Tab t = new Tab(mController, w); mTabs.add(t); // Initially put the tab in the background. t.putInBackground(); @@ -187,7 +186,7 @@ class TabControl { * appId(null), url(null), and privateBrowsing(false). */ Tab createNewTab() { - return createNewTab(false, null, null, false); + return createNewTab(false); } /** @@ -361,7 +360,7 @@ class TabControl { } else { // Create a new tab and don't restore the state yet, add it // to the tab list - Tab t = new Tab(mController, null, false, null, null); + Tab t = new Tab(mController, null); if (state != null) { t.setSavedState(state); // Need to maintain the app id and original url so we diff --git a/src/com/android/browser/UiController.java b/src/com/android/browser/UiController.java index 9b75aca..9f85547 100644 --- a/src/com/android/browser/UiController.java +++ b/src/com/android/browser/UiController.java @@ -42,9 +42,8 @@ public interface UiController extends BookmarksHistoryCallbacks { Tab openTabToHomePage(); - Tab openIncognitoTab(); - - Tab createNewTab(String url, boolean incognito); + Tab openTab(String url, boolean incognito, boolean setActive, + boolean useCurrent); void setActiveTab(Tab tab); diff --git a/src/com/android/browser/UrlHandler.java b/src/com/android/browser/UrlHandler.java index fbbc3cf..c76eee8 100644 --- a/src/com/android/browser/UrlHandler.java +++ b/src/com/android/browser/UrlHandler.java @@ -214,7 +214,9 @@ public class UrlHandler { // depressed by opening in a new tab boolean handleMenuClick(Tab tab, String url) { if (mController.isMenuDown()) { - mController.openTab(tab, url, false); + mController.openTab(url, + (tab != null) && tab.isPrivateBrowsingEnabled(), + !BrowserSettings.getInstance().openInBackground(), true); mActivity.closeOptionsMenu(); return true; } diff --git a/src/com/android/browser/WebViewController.java b/src/com/android/browser/WebViewController.java index 93ca410..6028a97 100644 --- a/src/com/android/browser/WebViewController.java +++ b/src/com/android/browser/WebViewController.java @@ -16,8 +16,6 @@ package com.android.browser; -import com.android.browser.IntentHandler.UrlData; - import android.app.Activity; import android.graphics.Bitmap; import android.net.Uri; @@ -103,8 +101,8 @@ public interface WebViewController { void dismissSubWindow(Tab tab); - Tab openTabAndShow(Tab parent, UrlData urlData, boolean closeOnExit, - String appId); + Tab openTab(String url, boolean incognito, boolean setActive, + boolean useCurrent); boolean switchToTab(int tabindex); |