Add API to allow plugins to lock their orientation in full-screen

This CL has companion changes in the framework and webkit.

bug: 3398386
Change-Id: Iea198ae6b74c68506e605ca8c401f199e2455416
diff --git a/src/com/android/browser/BaseUi.java b/src/com/android/browser/BaseUi.java
index e2fea16..b20e661 100644
--- a/src/com/android/browser/BaseUi.java
+++ b/src/com/android/browser/BaseUi.java
@@ -86,6 +86,7 @@
 
     private View mCustomView;
     private WebChromeClient.CustomViewCallback mCustomViewCallback;
+    private int mOriginalOrientation;
 
     private CombinedBookmarkHistoryView mComboView;
 
@@ -540,7 +541,7 @@
     }
 
     @Override
-    public void showCustomView(View view,
+    public void showCustomView(View view, int requestedOrientation,
             WebChromeClient.CustomViewCallback callback) {
         // if a view already exists then immediately terminate the new one
         if (mCustomView != null) {
@@ -548,6 +549,8 @@
             return;
         }
 
+        mOriginalOrientation = mActivity.getRequestedOrientation();
+
         // Add the custom view to its container.
         mCustomViewContainer.addView(view, COVER_SCREEN_GRAVITY_CENTER);
         mCustomView = view;
@@ -556,6 +559,7 @@
         mContentView.setVisibility(View.GONE);
         // Finally show the custom view container.
         setStatusBarVisibility(false);
+        mActivity.setRequestedOrientation(requestedOrientation);
         mCustomViewContainer.setVisibility(View.VISIBLE);
         mCustomViewContainer.bringToFront();
     }
@@ -573,6 +577,7 @@
         mCustomViewContainer.setVisibility(View.GONE);
         mCustomViewCallback.onCustomViewHidden();
         // Show the content view.
+        mActivity.setRequestedOrientation(mOriginalOrientation);
         setStatusBarVisibility(true);
         mContentView.setVisibility(View.VISIBLE);
     }
diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java
index 1f5c8f0..3974a9c 100644
--- a/src/com/android/browser/Controller.java
+++ b/src/com/android/browser/Controller.java
@@ -1079,14 +1079,14 @@
         return (searchEngine != null && searchEngine.supportsVoiceSearch());
     }
 
-    public void showCustomView(Tab tab, View view,
+    public void showCustomView(Tab tab, View view, int requestedOrientation,
             WebChromeClient.CustomViewCallback callback) {
         if (tab.inForeground()) {
             if (mUi.isCustomViewShowing()) {
                 callback.onCustomViewHidden();
                 return;
             }
-            mUi.showCustomView(view, callback);
+            mUi.showCustomView(view, requestedOrientation, callback);
             // Save the menu state and set it to empty while the custom
             // view is showing.
             mOldMenuState = mMenuState;
diff --git a/src/com/android/browser/Tab.java b/src/com/android/browser/Tab.java
index 98d209e..b0a991a 100644
--- a/src/com/android/browser/Tab.java
+++ b/src/com/android/browser/Tab.java
@@ -983,8 +983,14 @@
         @Override
         public void onShowCustomView(View view,
                 WebChromeClient.CustomViewCallback callback) {
+            onShowCustomView(view, mActivity.getRequestedOrientation(), callback);
+        }
+
+        @Override
+        public void onShowCustomView(View view, int requestedOrientation,
+                WebChromeClient.CustomViewCallback callback) {
             if (mInForeground) mWebViewController.showCustomView(Tab.this, view,
-                    callback);
+                    requestedOrientation, callback);
         }
 
         @Override
diff --git a/src/com/android/browser/UI.java b/src/com/android/browser/UI.java
index 22851f1..a6356a3 100644
--- a/src/com/android/browser/UI.java
+++ b/src/com/android/browser/UI.java
@@ -81,7 +81,8 @@
 
     public void hideComboView();
 
-    public void showCustomView(View view, CustomViewCallback callback);
+    public void showCustomView(View view, int requestedOrientation,
+            CustomViewCallback callback);
 
     public void onHideCustomView();
 
diff --git a/src/com/android/browser/WebViewController.java b/src/com/android/browser/WebViewController.java
index 87703bd..018af99 100644
--- a/src/com/android/browser/WebViewController.java
+++ b/src/com/android/browser/WebViewController.java
@@ -72,7 +72,8 @@
     void onDownloadStart(Tab tab, String url, String useragent, String contentDisposition,
             String mimeType, long contentLength);
 
-    void showCustomView(Tab tab, View view, WebChromeClient.CustomViewCallback callback);
+    void showCustomView(Tab tab, View view, int requestedOrientation, 
+            WebChromeClient.CustomViewCallback callback);
 
     void hideCustomView();
 
diff --git a/src/com/android/browser/XLargeUi.java b/src/com/android/browser/XLargeUi.java
index 4bfd3cf..1530ed3 100644
--- a/src/com/android/browser/XLargeUi.java
+++ b/src/com/android/browser/XLargeUi.java
@@ -353,8 +353,9 @@
     }
 
     @Override
-    public void showCustomView(View view, CustomViewCallback callback) {
-        super.showCustomView(view, callback);
+    public void showCustomView(View view, int requestedOrientation,
+            CustomViewCallback callback) {
+        super.showCustomView(view, requestedOrientation, callback);
         mActivity.getActionBar().hide();
     }