summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Dianne Hackborn <hackbod@google.com> 2012-04-05 18:31:41 -0700
committer Dianne Hackborn <hackbod@google.com> 2012-04-05 18:31:41 -0700
commit9801435820dc159725c0185f18f7e60e0fb1b833 (patch)
tree62919488882ed2e7c0325746376b83524b6cec32
parent9828830611137bb751ab3512082a3bd31f439e38 (diff)
Fix so that status bar doesn't resize when hiding nav bar.
The status bar now extends behind the nav bar, and uses fitsSystemWindows to ensure its content is not covered. We always report a stable content insets (as if the nav bar is visible) even if the nav bar is hidden, so the content doesn't jump when transitioing. This does mean that if you only hide the nav bar (and not the status bar), when in landscape you will end up with a status bar whose right side still leaves room for the nav bar. But why the hell would you want to do that? Also improve documentation on setSystemUiVisibility(). Change-Id: I8087d875f1214ef0085a91b5ed5c2f35ff2fc1b3
-rw-r--r--core/java/android/view/View.java53
-rw-r--r--core/java/com/android/internal/widget/ActionBarOverlayLayout.java3
-rw-r--r--packages/SystemUI/res/layout/status_bar.xml1
-rwxr-xr-xpolicy/src/com/android/internal/policy/impl/PhoneWindowManager.java12
4 files changed, 56 insertions, 13 deletions
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index 5d7c8cd15669..8c2094d26415 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -14421,9 +14421,48 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
}
/**
- * Request that the visibility of the status bar be changed.
- * @param visibility Bitwise-or of flags {@link #SYSTEM_UI_FLAG_LOW_PROFILE} or
- * {@link #SYSTEM_UI_FLAG_HIDE_NAVIGATION}.
+ * Request that the visibility of the status bar or other screen/window
+ * decorations be changed.
+ *
+ * <p>This method is used to put the over device UI into temporary modes
+ * where the user's attention is focused more on the application content,
+ * by dimming or hiding surrounding system affordances. This is typically
+ * used in conjunction with {@link Window#FEATURE_ACTION_BAR_OVERLAY
+ * Window.FEATURE_ACTION_BAR_OVERLAY}, allowing the applications content
+ * to be placed behind the action bar (and with these flags other system
+ * affordances) so that smooth transitions between hiding and showing them
+ * can be done.
+ *
+ * <p>Two representative examples of the use of system UI visibility is
+ * implementing a content browsing application (like a magazine reader)
+ * and a video playing application.
+ *
+ * <p>The first code shows a typical implementation of a View in a content
+ * browsing application. In this implementation, the application goes
+ * into a content-oriented mode by hiding the status bar and action bar,
+ * and putting the navigation elements into lights out mode. The user can
+ * then interact with content while in this mode. Such an application should
+ * provide an easy way for the user to toggle out of the mode (such as to
+ * check information in the status bar or access notifications). In the
+ * implementation here, this is done simply by tapping on the content.
+ *
+ * {@sample development/samples/ApiDemos/src/com/example/android/apis/view/ContentBrowserActivity.java
+ * content}
+ *
+ * <p>This second code sample shows a typical implementation of a View
+ * in a video playing application. In this situation, while the video is
+ * playing the application would like to go into a complete full-screen mode,
+ * to use as much of the display as possible for the video. When in this state
+ * the user can not interact with the application; the system intercepts
+ * touching on the screen to pop the UI out of full screen mode.
+ *
+ * {@sample development/samples/ApiDemos/src/com/example/android/apis/view/VideoPlayerActivity.java
+ * content}
+ *
+ * @param visibility Bitwise-or of flags {@link #SYSTEM_UI_FLAG_LOW_PROFILE},
+ * {@link #SYSTEM_UI_FLAG_HIDE_NAVIGATION}, {@link #SYSTEM_UI_FLAG_FULLSCREEN},
+ * {@link #SYSTEM_UI_FLAG_LAYOUT_STABLE}, {@link #SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION},
+ * and {@link #SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN}.
*/
public void setSystemUiVisibility(int visibility) {
if (visibility != mSystemUiVisibility) {
@@ -14435,9 +14474,11 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
}
/**
- * Returns the status bar visibility that this view has requested.
- * @return Bitwise-or of flags {@link #SYSTEM_UI_FLAG_LOW_PROFILE} or
- * {@link #SYSTEM_UI_FLAG_HIDE_NAVIGATION}.
+ * Returns the last {@link #setSystemUiVisibility(int) that this view has requested.
+ * @return Bitwise-or of flags {@link #SYSTEM_UI_FLAG_LOW_PROFILE},
+ * {@link #SYSTEM_UI_FLAG_HIDE_NAVIGATION}, {@link #SYSTEM_UI_FLAG_FULLSCREEN},
+ * {@link #SYSTEM_UI_FLAG_LAYOUT_STABLE}, {@link #SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION},
+ * and {@link #SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN}.
*/
public int getSystemUiVisibility() {
return mSystemUiVisibility;
diff --git a/core/java/com/android/internal/widget/ActionBarOverlayLayout.java b/core/java/com/android/internal/widget/ActionBarOverlayLayout.java
index 85214814a230..d1652df22afb 100644
--- a/core/java/com/android/internal/widget/ActionBarOverlayLayout.java
+++ b/core/java/com/android/internal/widget/ActionBarOverlayLayout.java
@@ -18,14 +18,11 @@ package com.android.internal.widget;
import com.android.internal.app.ActionBarImpl;
-import android.animation.LayoutTransition;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Rect;
import android.util.AttributeSet;
-import android.util.Log;
import android.view.View;
-import android.view.ViewTreeObserver;
import android.widget.FrameLayout;
/**
diff --git a/packages/SystemUI/res/layout/status_bar.xml b/packages/SystemUI/res/layout/status_bar.xml
index b1aaade7c914..0ba8cce05542 100644
--- a/packages/SystemUI/res/layout/status_bar.xml
+++ b/packages/SystemUI/res/layout/status_bar.xml
@@ -26,6 +26,7 @@
android:orientation="vertical"
android:focusable="true"
android:descendantFocusability="afterDescendants"
+ android:fitsSystemWindows="true"
>
<LinearLayout android:id="@+id/icons"
diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
index c3cac6e2e6fa..ded190be6d44 100755
--- a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
+++ b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
@@ -2230,10 +2230,14 @@ public class PhoneWindowManager implements WindowManagerPolicy {
// decide where the status bar goes ahead of time
if (mStatusBar != null) {
// apply any navigation bar insets
- pf.left = df.left = vf.left = mDockLeft;
- pf.top = df.top = vf.top = mDockTop;
- pf.right = df.right = vf.right = mDockRight;
- pf.bottom = df.bottom = vf.bottom = mDockBottom;
+ pf.left = df.left = mUnrestrictedScreenLeft;
+ pf.top = df.top = mUnrestrictedScreenTop;
+ pf.right = df.right = mUnrestrictedScreenWidth - mUnrestrictedScreenLeft;
+ pf.bottom = df.bottom = mUnrestrictedScreenHeight - mUnrestrictedScreenTop;
+ vf.left = mStableLeft;
+ vf.top = mStableTop;
+ vf.right = mStableRight;
+ vf.bottom = mStableBottom;
mStatusBar.computeFrameLw(pf, df, vf, vf);
final Rect r = mStatusBar.getFrameLw();