move subwindow handling to UI
added sub view creation to WebViewFactory
removed WebView from subview layout
use WebVIewFactory for creating the SubWebView
moved layout/view related code to UI
Change-Id: Id5b1905e4c36814fe7cc047cbd97128235d7e65e
diff --git a/res/layout/browser_subwindow.xml b/res/layout/browser_subwindow.xml
index adf3284..a3868cd 100644
--- a/res/layout/browser_subwindow.xml
+++ b/res/layout/browser_subwindow.xml
@@ -28,12 +28,6 @@
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@android:drawable/dialog_frame" >
- <WebView android:id="@+id/webview"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:fadeScrollbars="true"
- android:scrollbarStyle="outsideOverlay"
- android:layout_weight="1" />
</LinearLayout>
</FrameLayout>
<LinearLayout
diff --git a/src/com/android/browser/BaseUi.java b/src/com/android/browser/BaseUi.java
index 2a23bb1..5f8944f 100644
--- a/src/com/android/browser/BaseUi.java
+++ b/src/com/android/browser/BaseUi.java
@@ -34,12 +34,15 @@
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 @@
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 @@
}
/**
+ * 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 @@
*/
@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 9f9b451..e0b15b4 100644
--- a/src/com/android/browser/Controller.java
+++ b/src/com/android/browser/Controller.java
@@ -306,11 +306,22 @@
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 ec42584..b12b317 100644
--- a/src/com/android/browser/Tab.java
+++ b/src/com/android/browser/Tab.java
@@ -36,7 +36,6 @@
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.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 @@
*/
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 @@
}
});
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 @@
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 08cf33a..3a8a5cd 100644
--- a/src/com/android/browser/UI.java
+++ b/src/com/android/browser/UI.java
@@ -25,6 +25,7 @@
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 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 fdd8ab1..8c99c58 100644
--- a/src/com/android/browser/WebViewController.java
+++ b/src/com/android/browser/WebViewController.java
@@ -39,6 +39,10 @@
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 6047d1c..1186e65 100644
--- a/src/com/android/browser/WebViewFactory.java
+++ b/src/com/android/browser/WebViewFactory.java
@@ -25,4 +25,6 @@
public WebView createWebView(boolean privateBrowsing);
+ public WebView createSubWebView(boolean privateBrowsing);
+
}