Add Full Immersive Mode support for API 19+

Added immersive mode to the browser. Previous
implementation was from 2011 and would only
hide the status bar. Now we hide the entire
System UI where supported (api 19+).

Change-Id: I5b3c6079c38bd2035c3bf9ce60887ff85ccfa2a2
diff --git a/src/com/android/browser/BaseUi.java b/src/com/android/browser/BaseUi.java
index 64e7416..3be4674 100644
--- a/src/com/android/browser/BaseUi.java
+++ b/src/com/android/browser/BaseUi.java
@@ -28,6 +28,7 @@
 import android.graphics.drawable.Drawable;
 import android.graphics.drawable.LayerDrawable;
 import android.graphics.drawable.PaintDrawable;
+import android.os.Build;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.Message;
@@ -108,6 +109,8 @@
     // the video progress view
     private View mVideoProgressView;
 
+    private final View mDecorView;
+
     private boolean mActivityPaused;
     protected TitleBar mTitleBar;
     private NavigationBarBase mNavigationBar;
@@ -139,8 +142,22 @@
         mTitleBar.setProgress(100);
         mNavigationBar = mTitleBar.getNavigationBar();
         mUrlBarAutoShowManager = new UrlBarAutoShowManager(this);
+
+        // install system ui visibility listeners
+        mDecorView = mActivity.getWindow().getDecorView();
+        mDecorView.setOnSystemUiVisibilityChangeListener(mSystemUiVisibilityChangeListener);
     }
 
+    private View.OnSystemUiVisibilityChangeListener mSystemUiVisibilityChangeListener =
+            new View.OnSystemUiVisibilityChangeListener() {
+                @Override
+                public void onSystemUiVisibilityChange(int visFlags) {
+                    final boolean lostFullscreen = (visFlags & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0;
+                    if (lostFullscreen)
+                        setFullscreen(BrowserSettings.getInstance().useFullscreen());
+                }
+            };
+
     private void cancelStopToast() {
         if (mStopToast != null) {
             mStopToast.cancel();
@@ -186,6 +203,7 @@
         mActivityPaused = false;
         // check if we exited without setting active tab
         // b: 5188145
+        setFullscreen(BrowserSettings.getInstance().useFullscreen());
         final Tab ct = mTabControl.getCurrentTab();
         if (ct != null) {
             setActiveTab(ct);
@@ -807,9 +825,12 @@
         if (mCustomView != null) {
             mCustomView.setSystemUiVisibility(enabled ?
                     fullscreenImmersiveSetting : View.SYSTEM_UI_FLAG_VISIBLE);
+        } else if (Build.VERSION.SDK_INT >= 19) {
+            mContentView.setSystemUiVisibility(enabled ?
+                    fullscreenImmersiveSetting  : View.SYSTEM_UI_FLAG_VISIBLE);
         } else {
             mContentView.setSystemUiVisibility(enabled ?
-                    View.SYSTEM_UI_FLAG_LOW_PROFILE : View.SYSTEM_UI_FLAG_VISIBLE);
+                    View.SYSTEM_UI_FLAG_LOW_PROFILE  : View.SYSTEM_UI_FLAG_VISIBLE);
         }
         if (enabled)
             winParams.flags |=  bits;