diff options
Diffstat (limited to 'src/com')
| -rw-r--r-- | src/com/android/browser/BaseUi.java | 44 | ||||
| -rw-r--r-- | src/com/android/browser/Controller.java | 13 | ||||
| -rw-r--r-- | src/com/android/browser/Tab.java | 29 | ||||
| -rw-r--r-- | src/com/android/browser/UI.java | 3 | ||||
| -rw-r--r-- | src/com/android/browser/WebViewController.java | 4 | ||||
| -rw-r--r-- | src/com/android/browser/WebViewFactory.java | 2 |
6 files changed, 74 insertions, 21 deletions
diff --git a/src/com/android/browser/BaseUi.java b/src/com/android/browser/BaseUi.java index 2a23bb10a..5f8944fc8 100644 --- a/src/com/android/browser/BaseUi.java +++ b/src/com/android/browser/BaseUi.java @@ -34,12 +34,15 @@ import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; +import android.view.View.OnClickListener; import android.view.ViewGroup; +import android.view.ViewGroup.LayoutParams; import android.view.WindowManager; import android.webkit.WebChromeClient; import android.webkit.WebHistoryItem; import android.webkit.WebView; import android.widget.FrameLayout; +import android.widget.ImageButton; import android.widget.LinearLayout; import android.widget.Toast; @@ -164,6 +167,16 @@ public class BaseUi implements UI, WebViewFactory { return w; } + @Override + public WebView createSubWebView(boolean privateBrowsing) { + ScrollWebView web = (ScrollWebView) createWebView(privateBrowsing); + if (mXLargeScreenSize) { + // no scroll listener for subview + web.setScrollListener(null); + } + return web; + } + void stopWebViewScrolling() { ScrollWebView web = (ScrollWebView) mUiController.getCurrentWebView(); if (web != null) { @@ -415,6 +428,33 @@ public class BaseUi implements UI, WebViewFactory { } /** + * create a sub window container and webview for the tab + * Note: this methods operates through side-effects for now + * it sets both the subView and subViewContainer for the given tab + * @param tab tab to create the sub window for + * @param subView webview to be set as a subwindow for the tab + */ + @Override + public void createSubWindow(Tab tab, WebView subView) { + View subViewContainer = mActivity.getLayoutInflater().inflate( + R.layout.browser_subwindow, null); + ViewGroup inner = (ViewGroup) subViewContainer + .findViewById(R.id.inner_container); + inner.addView(subView, new LayoutParams(LayoutParams.MATCH_PARENT, + LayoutParams.MATCH_PARENT)); + final ImageButton cancel = (ImageButton) subViewContainer + .findViewById(R.id.subwindow_close); + final WebView cancelSubView = subView; + cancel.setOnClickListener(new OnClickListener() { + public void onClick(View v) { + cancelSubView.getWebChromeClient().onCloseWindow(cancelSubView); + } + }); + tab.setSubWebView(subView); + tab.setSubViewContainer(subViewContainer); + } + + /** * Remove the sub window from the content view. */ @Override @@ -428,6 +468,10 @@ public class BaseUi implements UI, WebViewFactory { */ @Override public void attachSubWindow(View container) { + if (container.getParent() != null) { + // already attached, remove first + ((ViewGroup) container.getParent()).removeView(container); + } mContentView.addView(container, COVER_SCREEN_PARAMS); } diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java index 9f9b451fe..e0b15b435 100644 --- a/src/com/android/browser/Controller.java +++ b/src/com/android/browser/Controller.java @@ -306,11 +306,22 @@ public class Controller mFactory = factory; } - WebViewFactory getWebViewFactory() { + @Override + public WebViewFactory getWebViewFactory() { return mFactory; } @Override + public void createSubWindow(Tab tab) { + endActionMode(); + WebView mainView = tab.getWebView(); + WebView subView = mFactory.createWebView((mainView == null) + ? false + : mainView.isPrivateBrowsingEnabled()); + mUi.createSubWindow(tab, subView); + } + + @Override public Activity getActivity() { return mActivity; } diff --git a/src/com/android/browser/Tab.java b/src/com/android/browser/Tab.java index ec425841d..b12b31775 100644 --- a/src/com/android/browser/Tab.java +++ b/src/com/android/browser/Tab.java @@ -36,7 +36,6 @@ import android.util.Log; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.View; -import android.view.View.OnClickListener; import android.view.ViewStub; import android.webkit.ConsoleMessage; import android.webkit.DownloadListener; @@ -53,7 +52,6 @@ import android.webkit.WebStorage; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.FrameLayout; -import android.widget.ImageButton; import android.widget.LinearLayout; import android.widget.TextView; @@ -1278,15 +1276,7 @@ class Tab { */ boolean createSubWindow() { if (mSubView == null) { - mWebViewController.endActionMode(); - mSubViewContainer = mInflateService.inflate( - R.layout.browser_subwindow, null); - mSubView = (WebView) mSubViewContainer.findViewById(R.id.webview); - mSubView.setScrollBarStyle(View.SCROLLBARS_OUTSIDE_OVERLAY); - // use trackball directly - mSubView.setMapTrackballToArrowKeys(false); - // Enable the built-in zoom - mSubView.getSettings().setBuiltInZoomControls(true); + mWebViewController.createSubWindow(this); mSubView.setWebViewClient(new SubWindowClient(mWebViewClient, mWebViewController)); mSubView.setWebChromeClient(new SubWindowChromeClient( @@ -1307,15 +1297,6 @@ class Tab { } }); mSubView.setOnCreateContextMenuListener(mActivity); - final BrowserSettings s = BrowserSettings.getInstance(); - s.addObserver(mSubView.getSettings()).update(s, null); - final ImageButton cancel = (ImageButton) mSubViewContainer - .findViewById(R.id.subwindow_close); - cancel.setOnClickListener(new OnClickListener() { - public void onClick(View v) { - mSubView.getWebChromeClient().onCloseWindow(mSubView); - } - }); return true; } return false; @@ -1463,10 +1444,18 @@ class Tab { return mSubView; } + void setSubWebView(WebView subView) { + mSubView = subView; + } + View getSubViewContainer() { return mSubViewContainer; } + void setSubViewContainer(View subViewContainer) { + mSubViewContainer = subViewContainer; + } + /** * @return The geolocation permissions prompt for this tab. */ diff --git a/src/com/android/browser/UI.java b/src/com/android/browser/UI.java index 08cf33a0f..3a8a5cd4c 100644 --- a/src/com/android/browser/UI.java +++ b/src/com/android/browser/UI.java @@ -25,6 +25,7 @@ import android.view.ActionMode; import android.view.Menu; import android.view.View; import android.webkit.WebChromeClient.CustomViewCallback; +import android.webkit.WebView; import java.util.List; @@ -57,6 +58,8 @@ public interface UI extends ScrollListener { public void attachTab(Tab tab); + public void createSubWindow(Tab tab, WebView subWebView); + public void attachSubWindow(View subContainer); public void removeSubWindow(View subContainer); diff --git a/src/com/android/browser/WebViewController.java b/src/com/android/browser/WebViewController.java index fdd8ab10d..8c99c58df 100644 --- a/src/com/android/browser/WebViewController.java +++ b/src/com/android/browser/WebViewController.java @@ -39,6 +39,10 @@ public interface WebViewController { TabControl getTabControl(); + WebViewFactory getWebViewFactory(); + + void createSubWindow(Tab tab); + void onPageStarted(Tab tab, WebView view, String url, Bitmap favicon); void onPageFinished(Tab tab, String url); diff --git a/src/com/android/browser/WebViewFactory.java b/src/com/android/browser/WebViewFactory.java index 6047d1cda..1186e65bc 100644 --- a/src/com/android/browser/WebViewFactory.java +++ b/src/com/android/browser/WebViewFactory.java @@ -25,4 +25,6 @@ public interface WebViewFactory { public WebView createWebView(boolean privateBrowsing); + public WebView createSubWebView(boolean privateBrowsing); + } |
