Fullscreen video support. Replaces 5140
diff --git a/res/layout/custom_screen.xml b/res/layout/custom_screen.xml
index 95c8434..0c4d7a2 100644
--- a/res/layout/custom_screen.xml
+++ b/res/layout/custom_screen.xml
@@ -14,16 +14,24 @@
limitations under the License.
-->
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- >
- <com.android.browser.TitleBar android:id="@+id/title_bar"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- />
- <FrameLayout android:id="@+id/main_content"
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android">
+ <FrameLayout android:id="@+id/fullscreen_custom_content"
+ android:visibility="gone"
+ android:background="@color/dark_gray"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
- android:foreground="?android:attr/windowContentOverlay"
+ />
+ <LinearLayout android:orientation="vertical"
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent">
+ <com.android.browser.TitleBar android:id="@+id/title_bar"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
/>
-</LinearLayout>
\ No newline at end of file
+ <FrameLayout android:id="@+id/main_content"
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent"
+ android:foreground="?android:attr/windowContentOverlay"
+ />
+ </LinearLayout>
+</FrameLayout>
\ No newline at end of file
diff --git a/src/com/android/browser/BrowserActivity.java b/src/com/android/browser/BrowserActivity.java
index b676437..afe21db 100644
--- a/src/com/android/browser/BrowserActivity.java
+++ b/src/com/android/browser/BrowserActivity.java
@@ -689,17 +689,24 @@
FrameLayout frameLayout = (FrameLayout) getWindow().getDecorView()
.findViewById(com.android.internal.R.id.content);
if (CUSTOM_BROWSER_BAR) {
- // This LinearLayout will hold the title bar and a FrameLayout, which
+ // This FrameLayout will hold the custom FrameLayout and a LinearLayout
+ // that contains the title bar and a FrameLayout, which
// holds everything else.
- LinearLayout linearLayout = (LinearLayout) LayoutInflater.from(this)
+ FrameLayout browserFrameLayout = (FrameLayout) LayoutInflater.from(this)
.inflate(R.layout.custom_screen, null);
- mTitleBar = (TitleBar) linearLayout.findViewById(R.id.title_bar);
+ mTitleBar = (TitleBar) browserFrameLayout.findViewById(R.id.title_bar);
mTitleBar.setBrowserActivity(this);
- mContentView = (FrameLayout) linearLayout.findViewById(
+ mContentView = (FrameLayout) browserFrameLayout.findViewById(
R.id.main_content);
- frameLayout.addView(linearLayout, COVER_SCREEN_PARAMS);
+ mCustomViewContainer = (FrameLayout) browserFrameLayout
+ .findViewById(R.id.fullscreen_custom_content);
+ frameLayout.addView(browserFrameLayout, COVER_SCREEN_PARAMS);
} else {
- mContentView = frameLayout;
+ mCustomViewContainer = new FrameLayout(this);
+ mCustomViewContainer.setBackgroundColor(Color.DKGRAY);
+ mContentView = new FrameLayout(this);
+ frameLayout.addView(mCustomViewContainer, COVER_SCREEN_PARAMS);
+ frameLayout.addView(mContentView, COVER_SCREEN_PARAMS);
}
// Create the tab control and our initial tab
@@ -2692,10 +2699,15 @@
// because of accumulated key events,
// we should ignore it as browser is not active any more.
WebView topWindow = getTopWindow();
- if (topWindow == null)
+ if (topWindow == null && mCustomView == null)
return KeyTracker.State.NOT_TRACKING;
if (keyCode == KeyEvent.KEYCODE_BACK) {
+ // Check if a custom view is currently showing and, if it is, hide it.
+ if (mCustomView != null) {
+ mWebChromeClient.onHideCustomView();
+ return KeyTracker.State.DONE_TRACKING;
+ }
// During animations, block the back key so that other animations
// are not triggered and so that we don't end up destroying all the
// WebViews before finishing the animation.
@@ -3752,6 +3764,37 @@
updateIcon(view.getUrl(), icon);
}
+ @Override
+ public void onShowCustomView(View view) {
+ if (mCustomView != null)
+ return;
+
+ // Add the custom view to its container.
+ mCustomViewContainer.addView(view, COVER_SCREEN_GRAVITY_CENTER);
+ mCustomView = view;
+ // Save the menu state and set it to empty while the custom
+ // view is showing.
+ mOldMenuState = mMenuState;
+ mMenuState = EMPTY_MENU;
+ // Finally show the custom view container.
+ mCustomViewContainer.setVisibility(View.VISIBLE);
+ mCustomViewContainer.bringToFront();
+ }
+
+ @Override
+ public void onHideCustomView() {
+ if (mCustomView == null)
+ return;
+
+ // Remove the custom view from its container.
+ mCustomViewContainer.removeView(mCustomView);
+ mCustomView = null;
+ // Reset the old menu state.
+ mMenuState = mOldMenuState;
+ mOldMenuState = EMPTY_MENU;
+ mCustomViewContainer.setVisibility(View.GONE);
+ }
+
/**
* The origin has exceeded it's database quota.
* @param url the URL that exceeded the quota
@@ -4913,11 +4956,14 @@
private ContentResolver mResolver;
private FrameLayout mContentView;
private ImageGrid mTabOverview;
+ private View mCustomView;
+ private FrameLayout mCustomViewContainer;
// FIXME, temp address onPrepareMenu performance problem. When we move everything out of
// view, we should rewrite this.
private int mCurrentMenuState = 0;
private int mMenuState = R.id.MAIN_MENU;
+ private int mOldMenuState = EMPTY_MENU;
private static final int EMPTY_MENU = -1;
private Menu mMenu;
@@ -5008,6 +5054,11 @@
new FrameLayout.LayoutParams(
ViewGroup.LayoutParams.FILL_PARENT,
ViewGroup.LayoutParams.FILL_PARENT);
+ /*package*/ static final FrameLayout.LayoutParams COVER_SCREEN_GRAVITY_CENTER =
+ new FrameLayout.LayoutParams(
+ ViewGroup.LayoutParams.FILL_PARENT,
+ ViewGroup.LayoutParams.FILL_PARENT,
+ Gravity.CENTER);
// We may provide UI to customize these
// Google search from the browser
static String QuickSearch_G;