summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--api/current.txt10
-rw-r--r--core/java/android/view/View.java46
-rw-r--r--core/java/android/view/ViewRootImpl.java18
-rw-r--r--core/java/android/view/WindowManager.java55
-rw-r--r--core/res/res/values/attrs.xml10
-rw-r--r--core/res/res/values/config.xml4
-rw-r--r--core/res/res/values/public.xml7
-rw-r--r--core/res/res/values/symbols.xml2
-rw-r--r--core/res/res/values/themes.xml20
-rw-r--r--core/res/res/values/themes_device_defaults.xml12
-rw-r--r--packages/Keyguard/res/values/alias.xml4
-rw-r--r--packages/Keyguard/src/com/android/keyguard/KeyguardViewManager.java10
-rw-r--r--packages/Keyguard/src/com/android/keyguard/MultiPaneChallengeLayout.java2
-rw-r--r--packages/Keyguard/src/com/android/keyguard/SlidingChallengeLayout.java2
-rw-r--r--packages/SystemUI/res/layout-land/status_bar_recent_panel.xml6
-rw-r--r--packages/SystemUI/res/layout/status_bar_recent_panel.xml4
-rw-r--r--packages/SystemUI/src/com/android/systemui/recent/RecentsActivity.java6
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/BarTransitions.java9
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarTransitions.java4
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java18
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarTransitions.java9
-rw-r--r--policy/src/com/android/internal/policy/impl/BarController.java45
-rw-r--r--policy/src/com/android/internal/policy/impl/PhoneWindow.java12
-rw-r--r--policy/src/com/android/internal/policy/impl/PhoneWindowManager.java71
24 files changed, 280 insertions, 106 deletions
diff --git a/api/current.txt b/api/current.txt
index 1ad4377..964454f 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -1226,6 +1226,8 @@ package android {
field public static final int windowTitleBackgroundStyle = 16842844; // 0x101005c
field public static final int windowTitleSize = 16842842; // 0x101005a
field public static final int windowTitleStyle = 16842843; // 0x101005b
+ field public static final int windowTranslucentNavigation = 16843760; // 0x10103f0
+ field public static final int windowTranslucentStatus = 16843759; // 0x10103ef
field public static final int writePermission = 16842760; // 0x1010008
field public static final int x = 16842924; // 0x10100ac
field public static final int xlargeScreens = 16843455; // 0x10102bf
@@ -1758,10 +1760,12 @@ package android {
field public static final int Theme_DeviceDefault_Light_NoActionBar = 16974124; // 0x103012c
field public static final int Theme_DeviceDefault_Light_NoActionBar_Fullscreen = 16974125; // 0x103012d
field public static final int Theme_DeviceDefault_Light_NoActionBar_Overscan = 16974304; // 0x10301e0
+ field public static final int Theme_DeviceDefault_Light_NoActionBar_TranslucentDecor = 16974308; // 0x10301e4
field public static final int Theme_DeviceDefault_Light_Panel = 16974139; // 0x103013b
field public static final int Theme_DeviceDefault_NoActionBar = 16974121; // 0x1030129
field public static final int Theme_DeviceDefault_NoActionBar_Fullscreen = 16974122; // 0x103012a
field public static final int Theme_DeviceDefault_NoActionBar_Overscan = 16974303; // 0x10301df
+ field public static final int Theme_DeviceDefault_NoActionBar_TranslucentDecor = 16974307; // 0x10301e3
field public static final int Theme_DeviceDefault_Panel = 16974138; // 0x103013a
field public static final int Theme_DeviceDefault_Wallpaper = 16974140; // 0x103013c
field public static final int Theme_DeviceDefault_Wallpaper_NoTitleBar = 16974141; // 0x103013d
@@ -1785,10 +1789,12 @@ package android {
field public static final int Theme_Holo_Light_NoActionBar = 16974064; // 0x10300f0
field public static final int Theme_Holo_Light_NoActionBar_Fullscreen = 16974065; // 0x10300f1
field public static final int Theme_Holo_Light_NoActionBar_Overscan = 16974302; // 0x10301de
+ field public static final int Theme_Holo_Light_NoActionBar_TranslucentDecor = 16974306; // 0x10301e2
field public static final int Theme_Holo_Light_Panel = 16973948; // 0x103007c
field public static final int Theme_Holo_NoActionBar = 16973932; // 0x103006c
field public static final int Theme_Holo_NoActionBar_Fullscreen = 16973933; // 0x103006d
field public static final int Theme_Holo_NoActionBar_Overscan = 16974301; // 0x10301dd
+ field public static final int Theme_Holo_NoActionBar_TranslucentDecor = 16974305; // 0x10301e1
field public static final int Theme_Holo_Panel = 16973947; // 0x103007b
field public static final int Theme_Holo_Wallpaper = 16973949; // 0x103007d
field public static final int Theme_Holo_Wallpaper_NoTitleBar = 16973950; // 0x103007e
@@ -28395,8 +28401,6 @@ package android.view {
field public static final int SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION = 512; // 0x200
field public static final int SYSTEM_UI_FLAG_LAYOUT_STABLE = 256; // 0x100
field public static final int SYSTEM_UI_FLAG_LOW_PROFILE = 1; // 0x1
- field public static final int SYSTEM_UI_FLAG_TRANSPARENT_NAVIGATION = 8192; // 0x2000
- field public static final int SYSTEM_UI_FLAG_TRANSPARENT_STATUS = 4096; // 0x1000
field public static final int SYSTEM_UI_FLAG_VISIBLE = 0; // 0x0
field public static final int SYSTEM_UI_LAYOUT_FLAGS = 1536; // 0x600
field public static final int TEXT_ALIGNMENT_CENTER = 4; // 0x4
@@ -29132,6 +29136,8 @@ package android.view {
field public static final int FLAG_SHOW_WHEN_LOCKED = 524288; // 0x80000
field public static final int FLAG_SPLIT_TOUCH = 8388608; // 0x800000
field public static final int FLAG_TOUCHABLE_WHEN_WAKING = 64; // 0x40
+ field public static final int FLAG_TRANSLUCENT_NAVIGATION = 134217728; // 0x8000000
+ field public static final int FLAG_TRANSLUCENT_STATUS = 67108864; // 0x4000000
field public static final int FLAG_TURN_SCREEN_ON = 2097152; // 0x200000
field public static final int FLAG_WATCH_OUTSIDE_TOUCH = 262144; // 0x40000
field public static final int FORMAT_CHANGED = 8; // 0x8
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index f763d19..caeb1d8 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -2448,24 +2448,6 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
public static final int SYSTEM_UI_FLAG_IMMERSIVE = 0x00000800;
/**
- * Flag for {@link #setSystemUiVisibility(int)}: View would like the status bar to have
- * transparency.
- *
- * <p>The transparency request may be denied if the bar is in another mode with a specific
- * style, like {@link #SYSTEM_UI_FLAG_IMMERSIVE immersive mode}.
- */
- public static final int SYSTEM_UI_FLAG_TRANSPARENT_STATUS = 0x00001000;
-
- /**
- * Flag for {@link #setSystemUiVisibility(int)}: View would like the navigation bar to have
- * transparency.
- *
- * <p>The transparency request may be denied if the bar is in another mode with a specific
- * style, like {@link #SYSTEM_UI_FLAG_IMMERSIVE immersive mode}.
- */
- public static final int SYSTEM_UI_FLAG_TRANSPARENT_NAVIGATION = 0x00002000;
-
- /**
* @deprecated Use {@link #SYSTEM_UI_FLAG_LOW_PROFILE} instead.
*/
public static final int STATUS_BAR_HIDDEN = SYSTEM_UI_FLAG_LOW_PROFILE;
@@ -2626,6 +2608,26 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
/**
* @hide
+ *
+ * NOTE: This flag may only be used in subtreeSystemUiVisibility. It is masked
+ * out of the public fields to keep the undefined bits out of the developer's way.
+ *
+ * Flag to specify that the status bar is displayed in translucent mode.
+ */
+ public static final int STATUS_BAR_TRANSLUCENT = 0x40000000;
+
+ /**
+ * @hide
+ *
+ * NOTE: This flag may only be used in subtreeSystemUiVisibility. It is masked
+ * out of the public fields to keep the undefined bits out of the developer's way.
+ *
+ * Flag to specify that the navigation bar is displayed in translucent mode.
+ */
+ public static final int NAVIGATION_BAR_TRANSLUCENT = 0x80000000;
+
+ /**
+ * @hide
*/
public static final int PUBLIC_STATUS_BAR_VISIBILITY_MASK = 0x0000FFFF;
@@ -16934,9 +16936,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* @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},
- * {@link #SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN}, {@link #SYSTEM_UI_FLAG_IMMERSIVE},
- * {@link #SYSTEM_UI_FLAG_TRANSPARENT_STATUS},
- * and {@link #SYSTEM_UI_FLAG_TRANSPARENT_NAVIGATION}.
+ * {@link #SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN}, and {@link #SYSTEM_UI_FLAG_IMMERSIVE}.
*/
public void setSystemUiVisibility(int visibility) {
if (visibility != mSystemUiVisibility) {
@@ -16952,9 +16952,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* @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},
- * {@link #SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN}, {@link #SYSTEM_UI_FLAG_IMMERSIVE},
- * {@link #SYSTEM_UI_FLAG_TRANSPARENT_STATUS},
- * and {@link #SYSTEM_UI_FLAG_TRANSPARENT_NAVIGATION}.
+ * {@link #SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN}, and {@link #SYSTEM_UI_FLAG_IMMERSIVE}.
*/
public int getSystemUiVisibility() {
return mSystemUiVisibility;
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index 7e3ee5f..beb7366 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -754,6 +754,11 @@ public final class ViewRootImpl implements ViewParent,
attrs.systemUiVisibility = mWindowAttributes.systemUiVisibility;
attrs.subtreeSystemUiVisibility = mWindowAttributes.subtreeSystemUiVisibility;
mWindowAttributesChangesFlag = mWindowAttributes.copyFrom(attrs);
+ if ((mWindowAttributesChangesFlag
+ & WindowManager.LayoutParams.TRANSLUCENT_FLAGS_CHANGED) != 0) {
+ // Recompute system ui visibility.
+ mAttachInfo.mRecomputeGlobalAttributes = true;
+ }
if (mWindowAttributes.packageName == null) {
mWindowAttributes.packageName = mBasePackageName;
}
@@ -1026,6 +1031,7 @@ public final class ViewRootImpl implements ViewParent,
mView.dispatchCollectViewAttributes(attachInfo, 0);
attachInfo.mSystemUiVisibility &= ~attachInfo.mDisabledSystemUiVisibility;
WindowManager.LayoutParams params = mWindowAttributes;
+ attachInfo.mSystemUiVisibility |= getImpliedSystemUiVisibility(params);
if (attachInfo.mKeepScreenOn != oldScreenOn
|| attachInfo.mSystemUiVisibility != params.subtreeSystemUiVisibility
|| attachInfo.mHasSystemUiListeners != params.hasSystemUiListeners) {
@@ -1039,6 +1045,18 @@ public final class ViewRootImpl implements ViewParent,
return false;
}
+ private int getImpliedSystemUiVisibility(WindowManager.LayoutParams params) {
+ int vis = 0;
+ // Translucent decor window flags imply stable system ui visibility.
+ if ((params.flags & WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS) != 0) {
+ vis |= View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;
+ }
+ if ((params.flags & WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION) != 0) {
+ vis |= View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION;
+ }
+ return vis;
+ }
+
private boolean measureHierarchy(final View host, final WindowManager.LayoutParams lp,
final Resources res, final int desiredWindowWidth, final int desiredWindowHeight) {
int childWidthMeasureSpec;
diff --git a/core/java/android/view/WindowManager.java b/core/java/android/view/WindowManager.java
index 815b97c..ea3c931 100644
--- a/core/java/android/view/WindowManager.java
+++ b/core/java/android/view/WindowManager.java
@@ -838,6 +838,44 @@ public interface WindowManager extends ViewManager {
*/
public static final int FLAG_LAYOUT_IN_OVERSCAN = 0x02000000;
+ /**
+ * Window flag: request a translucent status bar with minimal system-provided
+ * background protection.
+ *
+ * <p>This flag can be controlled in your theme through the
+ * {@link android.R.attr#windowTranslucentStatus} attribute; this attribute
+ * is automatically set for you in the standard translucent decor themes
+ * such as
+ * {@link android.R.style#Theme_Holo_NoActionBar_TranslucentDecor},
+ * {@link android.R.style#Theme_Holo_Light_NoActionBar_TranslucentDecor},
+ * {@link android.R.style#Theme_DeviceDefault_NoActionBar_TranslucentDecor}, and
+ * {@link android.R.style#Theme_DeviceDefault_Light_NoActionBar_TranslucentDecor}.</p>
+ *
+ * <p>When this flag is enabled for a window, it automatically sets
+ * the system UI visibility flags {@link View#SYSTEM_UI_FLAG_LAYOUT_STABLE} and
+ * {@link View#SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN}.</p>
+ */
+ public static final int FLAG_TRANSLUCENT_STATUS = 0x04000000;
+
+ /**
+ * Window flag: request a translucent navigation bar with minimal system-provided
+ * background protection.
+ *
+ * <p>This flag can be controlled in your theme through the
+ * {@link android.R.attr#windowTranslucentNavigation} attribute; this attribute
+ * is automatically set for you in the standard translucent decor themes
+ * such as
+ * {@link android.R.style#Theme_Holo_NoActionBar_TranslucentDecor},
+ * {@link android.R.style#Theme_Holo_Light_NoActionBar_TranslucentDecor},
+ * {@link android.R.style#Theme_DeviceDefault_NoActionBar_TranslucentDecor}, and
+ * {@link android.R.style#Theme_DeviceDefault_Light_NoActionBar_TranslucentDecor}.</p>
+ *
+ * <p>When this flag is enabled for a window, it automatically sets
+ * the system UI visibility flags {@link View#SYSTEM_UI_FLAG_LAYOUT_STABLE} and
+ * {@link View#SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION}.</p>
+ */
+ public static final int FLAG_TRANSLUCENT_NAVIGATION = 0x08000000;
+
// ----- HIDDEN FLAGS.
// These start at the high bit and go down.
@@ -956,7 +994,11 @@ public interface WindowManager extends ViewManager {
@ViewDebug.FlagToString(mask = FLAG_HARDWARE_ACCELERATED, equals = FLAG_HARDWARE_ACCELERATED,
name = "FLAG_HARDWARE_ACCELERATED"),
@ViewDebug.FlagToString(mask = FLAG_LOCAL_FOCUS_MODE, equals = FLAG_LOCAL_FOCUS_MODE,
- name = "FLAG_LOCAL_FOCUS_MODE")
+ name = "FLAG_LOCAL_FOCUS_MODE"),
+ @ViewDebug.FlagToString(mask = FLAG_TRANSLUCENT_STATUS, equals = FLAG_TRANSLUCENT_STATUS,
+ name = "FLAG_TRANSLUCENT_STATUS"),
+ @ViewDebug.FlagToString(mask = FLAG_TRANSLUCENT_NAVIGATION, equals = FLAG_TRANSLUCENT_NAVIGATION,
+ name = "FLAG_TRANSLUCENT_NAVIGATION")
})
public int flags;
@@ -1046,6 +1088,11 @@ public interface WindowManager extends ViewManager {
* {@hide} */
public static final int PRIVATE_FLAG_SYSTEM_ERROR = 0x00000100;
+ /** Window flag: maintain the previous transparent decor state when this window
+ * becomes top-most.
+ * {@hide} */
+ public static final int PRIVATE_FLAG_INHERIT_TRANSLUCENT_DECOR = 0x00000200;
+
/**
* Control flags that are private to the platform.
* @hide
@@ -1576,6 +1623,8 @@ public interface WindowManager extends ViewManager {
/** {@hide} */
public static final int USER_ACTIVITY_TIMEOUT_CHANGED = 1<<18;
/** {@hide} */
+ public static final int TRANSLUCENT_FLAGS_CHANGED = 1<<19;
+ /** {@hide} */
public static final int EVERYTHING_CHANGED = 0xffffffff;
// internal buffer to backup/restore parameters under compatibility mode.
@@ -1621,6 +1670,10 @@ public interface WindowManager extends ViewManager {
changes |= TYPE_CHANGED;
}
if (flags != o.flags) {
+ final int diff = flags ^ o.flags;
+ if ((diff & (FLAG_TRANSLUCENT_STATUS | FLAG_TRANSLUCENT_NAVIGATION)) != 0) {
+ changes |= TRANSLUCENT_FLAGS_CHANGED;
+ }
flags = o.flags;
changes |= FLAGS_CHANGED;
}
diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml
index c3dc4ff..9ee8bae 100644
--- a/core/res/res/values/attrs.xml
+++ b/core/res/res/values/attrs.xml
@@ -439,6 +439,14 @@
or later. -->
<attr name="windowCloseOnTouchOutside" format="boolean" />
+ <!-- Flag indicating whether this window requests a translucent status bar. Corresponds
+ to {@link android.view.WindowManager.LayoutParams#FLAG_TRANSLUCENT_STATUS}. -->
+ <attr name="windowTranslucentStatus" format="boolean" />
+
+ <!-- Flag indicating whether this window requests a translucent navigation bar. Corresponds
+ to {@link android.view.WindowManager.LayoutParams#FLAG_TRANSLUCENT_NAVIGATION}. -->
+ <attr name="windowTranslucentNavigation" format="boolean" />
+
<!-- ============ -->
<!-- Alert Dialog styles -->
<!-- ============ -->
@@ -1594,6 +1602,8 @@
<attr name="windowSplitActionBar" />
<attr name="windowEnableSplitTouch" />
<attr name="windowCloseOnTouchOutside" />
+ <attr name="windowTranslucentStatus" />
+ <attr name="windowTranslucentNavigation" />
<!-- The minimum width the window is allowed to be, along the major
axis of the screen. That is, when in landscape. Can be either
an absolute dimension or a fraction of the screen size in that
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index ea42f38..429a8a4 100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -585,8 +585,8 @@
<!-- Disable lockscreen rotation by default -->
<bool name="config_enableLockScreenRotation">false</bool>
- <!-- Disable lockscreen transparent bars by default -->
- <bool name="config_enableLockScreenTransparentBars">false</bool>
+ <!-- Disable lockscreen translucent decor by default -->
+ <bool name="config_enableLockScreenTranslucentDecor">false</bool>
<!-- Enable puk unlockscreen by default.
If unlock screen is disabled, the puk should be unlocked through Emergency Dialer -->
diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml
index 431fe82..4635733 100644
--- a/core/res/res/values/public.xml
+++ b/core/res/res/values/public.xml
@@ -2078,5 +2078,12 @@
<public type="attr" name="requireDeviceUnlock" id="0x010103ec" />
<public type="attr" name="apduServiceBanner" id="0x010103ed" />
<public type="attr" name="accessibilityLiveRegion" id="0x010103ee" />
+ <public type="attr" name="windowTranslucentStatus" id="0x010103ef" />
+ <public type="attr" name="windowTranslucentNavigation" id="0x010103f0" />
+
+ <public type="style" name="Theme.Holo.NoActionBar.TranslucentDecor" id="0x010301e1" />
+ <public type="style" name="Theme.Holo.Light.NoActionBar.TranslucentDecor" id="0x010301e2" />
+ <public type="style" name="Theme.DeviceDefault.NoActionBar.TranslucentDecor" id="0x010301e3" />
+ <public type="style" name="Theme.DeviceDefault.Light.NoActionBar.TranslucentDecor" id="0x010301e4" />
</resources>
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index a403345..ad9144c 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -1290,7 +1290,7 @@
<java-symbol type="bool" name="config_disableMenuKeyInLockScreen" />
<java-symbol type="bool" name="config_enableLockBeforeUnlockScreen" />
<java-symbol type="bool" name="config_enableLockScreenRotation" />
- <java-symbol type="bool" name="config_enableLockScreenTransparentBars" />
+ <java-symbol type="bool" name="config_enableLockScreenTranslucentDecor" />
<java-symbol type="bool" name="config_lidControlsSleep" />
<java-symbol type="bool" name="config_reverseDefaultRotation" />
<java-symbol type="bool" name="config_showNavigationBar" />
diff --git a/core/res/res/values/themes.xml b/core/res/res/values/themes.xml
index eb39926..4c80e7d 100644
--- a/core/res/res/values/themes.xml
+++ b/core/res/res/values/themes.xml
@@ -178,6 +178,8 @@ please see themes_device_defaults.xml.
<item name="windowActionBar">false</item>
<item name="windowActionModeOverlay">false</item>
<item name="windowCloseOnTouchOutside">false</item>
+ <item name="windowTranslucentStatus">false</item>
+ <item name="windowTranslucentNavigation">false</item>
<!-- Define these here; ContextThemeWrappers around themes that define them should
always clear these values. -->
@@ -1584,6 +1586,15 @@ please see themes_device_defaults.xml.
<item name="android:windowContentOverlay">@null</item>
</style>
+ <!-- Variant of the holographic (dark) theme that has no title bar and translucent
+ system decor. This theme sets {@link android.R.attr#windowTranslucentStatus} and
+ {@link android.R.attr#windowTranslucentNavigation} to true. -->
+ <style name="Theme.Holo.NoActionBar.TranslucentDecor">
+ <item name="android:windowTranslucentStatus">true</item>
+ <item name="android:windowTranslucentNavigation">true</item>
+ <item name="android:windowContentOverlay">@null</item>
+ </style>
+
<!-- Variant of the holographic (light) theme with no action bar. -->
<style name="Theme.Holo.Light.NoActionBar">
<item name="android:windowActionBar">false</item>
@@ -1608,6 +1619,15 @@ please see themes_device_defaults.xml.
<item name="android:windowContentOverlay">@null</item>
</style>
+ <!-- Variant of the holographic (light) theme that has no title bar and translucent
+ system decor. This theme sets {@link android.R.attr#windowTranslucentStatus} and
+ {@link android.R.attr#windowTranslucentNavigation} to true. -->
+ <style name="Theme.Holo.Light.NoActionBar.TranslucentDecor">
+ <item name="android:windowTranslucentStatus">true</item>
+ <item name="android:windowTranslucentNavigation">true</item>
+ <item name="android:windowContentOverlay">@null</item>
+ </style>
+
<!-- Dialog themes for Holo -->
<eat-comment />
diff --git a/core/res/res/values/themes_device_defaults.xml b/core/res/res/values/themes_device_defaults.xml
index 87b1c9d..721c6b0 100644
--- a/core/res/res/values/themes_device_defaults.xml
+++ b/core/res/res/values/themes_device_defaults.xml
@@ -216,6 +216,12 @@ easier.
<style name="Theme.DeviceDefault.NoActionBar.Overscan" parent="Theme.Holo.NoActionBar.Overscan" >
</style>
+ <!-- Variant of {@link #Theme_DeviceDefault} that has no title bar and translucent
+ system decor. This theme sets {@link android.R.attr#windowTranslucentStatus} and
+ {@link android.R.attr#windowTranslucentNavigation} to true. -->
+ <style name="Theme.DeviceDefault.NoActionBar.TranslucentDecor" parent="Theme.Holo.NoActionBar.TranslucentDecor" >
+ </style>
+
<!-- Variant of {@link #Theme_DeviceDefault} with a light-colored style -->
<style name="Theme.DeviceDefault.Light" parent="Theme.Holo.Light" >
<!-- Text styles -->
@@ -376,6 +382,12 @@ easier.
<style name="Theme.DeviceDefault.Light.NoActionBar.Overscan"
parent="Theme.Holo.Light.NoActionBar.Overscan" >
</style>
+ <!-- Variant of {@link #Theme_DeviceDefault_Light} that has no title bar and translucent
+ system decor. This theme sets {@link android.R.attr#windowTranslucentStatus} and
+ {@link android.R.attr#windowTranslucentNavigation} to true. -->
+ <style name="Theme.DeviceDefault.Light.NoActionBar.TranslucentDecor"
+ parent="Theme.Holo.Light.NoActionBar.TranslucentDecor" >
+ </style>
<!-- DeviceDefault theme for dialog windows and activities. This changes the window to be
floating (not fill the entire screen), and puts a frame around its contents. You can set this
theme on an activity if you would like to make an activity that looks like a Dialog. -->
diff --git a/packages/Keyguard/res/values/alias.xml b/packages/Keyguard/res/values/alias.xml
index b22311e..e6657a1 100644
--- a/packages/Keyguard/res/values/alias.xml
+++ b/packages/Keyguard/res/values/alias.xml
@@ -43,8 +43,8 @@
<!-- Alias used to reference framework configuration for screen rotation. -->
<item type="bool" name="config_enableLockScreenRotation">@*android:bool/config_enableLockScreenRotation</item>
- <!-- Alias used to reference framework configuration for transparent bars. -->
- <item type="bool" name="config_enableLockScreenTransparentBars">@*android:bool/config_enableLockScreenTransparentBars</item>
+ <!-- Alias used to reference framework configuration for translucent decor. -->
+ <item type="bool" name="config_enableLockScreenTranslucentDecor">@*android:bool/config_enableLockScreenTranslucentDecor</item>
<!-- Alias used to reference framework activity duration. -->
<item type="integer" name="config_activityDefaultDur">@*android:integer/config_activityDefaultDur</item>
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardViewManager.java b/packages/Keyguard/src/com/android/keyguard/KeyguardViewManager.java
index 2084a16..6584180 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardViewManager.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardViewManager.java
@@ -124,9 +124,9 @@ public class KeyguardViewManager {
// activities. Other disabled bits are handled by the KeyguardViewMediator talking
// directly to the status bar service.
int visFlags = View.STATUS_BAR_DISABLE_HOME;
- if (shouldEnableTransparentBars()) {
- visFlags |= View.SYSTEM_UI_FLAG_TRANSPARENT_STATUS
- | View.SYSTEM_UI_FLAG_TRANSPARENT_NAVIGATION;
+ if (shouldEnableTranslucentDecor()) {
+ mWindowLayoutParams.flags |= WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS
+ | WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION;
}
if (DEBUG) Log.v(TAG, "show:setSystemUiVisibility(" + Integer.toHexString(visFlags)+")");
mKeyguardHost.setSystemUiVisibility(visFlags);
@@ -143,9 +143,9 @@ public class KeyguardViewManager {
|| res.getBoolean(R.bool.config_enableLockScreenRotation);
}
- private boolean shouldEnableTransparentBars() {
+ private boolean shouldEnableTranslucentDecor() {
Resources res = mContext.getResources();
- return res.getBoolean(R.bool.config_enableLockScreenTransparentBars);
+ return res.getBoolean(R.bool.config_enableLockScreenTranslucentDecor);
}
class ViewManagerHost extends FrameLayout {
diff --git a/packages/Keyguard/src/com/android/keyguard/MultiPaneChallengeLayout.java b/packages/Keyguard/src/com/android/keyguard/MultiPaneChallengeLayout.java
index 67d0d5a..528f988 100644
--- a/packages/Keyguard/src/com/android/keyguard/MultiPaneChallengeLayout.java
+++ b/packages/Keyguard/src/com/android/keyguard/MultiPaneChallengeLayout.java
@@ -79,7 +79,7 @@ public class MultiPaneChallengeLayout extends ViewGroup implements ChallengeLayo
final Resources res = getResources();
mDisplayMetrics = res.getDisplayMetrics();
- setSystemUiVisibility(SYSTEM_UI_FLAG_LAYOUT_STABLE);
+ setSystemUiVisibility(SYSTEM_UI_FLAG_LAYOUT_STABLE | SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
}
public void setInsets(Rect insets) {
diff --git a/packages/Keyguard/src/com/android/keyguard/SlidingChallengeLayout.java b/packages/Keyguard/src/com/android/keyguard/SlidingChallengeLayout.java
index 9718c9b..4f377a3 100644
--- a/packages/Keyguard/src/com/android/keyguard/SlidingChallengeLayout.java
+++ b/packages/Keyguard/src/com/android/keyguard/SlidingChallengeLayout.java
@@ -260,7 +260,7 @@ public class SlidingChallengeLayout extends ViewGroup implements ChallengeLayout
mChallengeBottomBound = res.getDimensionPixelSize(R.dimen.kg_widget_pager_bottom_padding);
setWillNotDraw(false);
- setSystemUiVisibility(SYSTEM_UI_FLAG_LAYOUT_STABLE);
+ setSystemUiVisibility(SYSTEM_UI_FLAG_LAYOUT_STABLE | SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
}
public void setInsets(Rect insets) {
diff --git a/packages/SystemUI/res/layout-land/status_bar_recent_panel.xml b/packages/SystemUI/res/layout-land/status_bar_recent_panel.xml
index b06166d..b2ba25a 100644
--- a/packages/SystemUI/res/layout-land/status_bar_recent_panel.xml
+++ b/packages/SystemUI/res/layout-land/status_bar_recent_panel.xml
@@ -41,15 +41,15 @@
android:fadingEdge="horizontal"
android:scrollbars="none"
android:layout_gravity="right"
- android:fadingEdgeLength="@dimen/status_bar_recents_scroll_fading_edge_length"
- android:fitsSystemWindows="true">
+ android:fadingEdgeLength="@dimen/status_bar_recents_scroll_fading_edge_length">
<LinearLayout android:id="@+id/recents_linear_layout"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layoutDirection="ltr"
android:layout_gravity="left"
- android:orientation="horizontal">
+ android:orientation="horizontal"
+ android:fitsSystemWindows="true">
</LinearLayout>
</com.android.systemui.recent.RecentsHorizontalScrollView>
diff --git a/packages/SystemUI/res/layout/status_bar_recent_panel.xml b/packages/SystemUI/res/layout/status_bar_recent_panel.xml
index 305aaf2..e41475b 100644
--- a/packages/SystemUI/res/layout/status_bar_recent_panel.xml
+++ b/packages/SystemUI/res/layout/status_bar_recent_panel.xml
@@ -45,13 +45,13 @@
android:fadingEdgeLength="@dimen/status_bar_recents_scroll_fading_edge_length"
android:layout_gravity="bottom|start"
android:clipToPadding="false"
- android:clipChildren="false"
- android:fitsSystemWindows="true">
+ android:clipChildren="false">
<LinearLayout android:id="@+id/recents_linear_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
+ android:fitsSystemWindows="true"
android:clipToPadding="false"
android:clipChildren="false">
</LinearLayout>
diff --git a/packages/SystemUI/src/com/android/systemui/recent/RecentsActivity.java b/packages/SystemUI/src/com/android/systemui/recent/RecentsActivity.java
index 818c2980..09a7a5e 100644
--- a/packages/SystemUI/src/com/android/systemui/recent/RecentsActivity.java
+++ b/packages/SystemUI/src/com/android/systemui/recent/RecentsActivity.java
@@ -177,10 +177,14 @@ public class RecentsActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
+ getWindow().addPrivateFlags(
+ WindowManager.LayoutParams.PRIVATE_FLAG_INHERIT_TRANSLUCENT_DECOR);
setContentView(R.layout.status_bar_recent_panel);
mRecentsPanel = (RecentsPanelView) findViewById(R.id.recents_root);
mRecentsPanel.setOnTouchListener(new TouchOutsideListener(mRecentsPanel));
- mRecentsPanel.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
+ mRecentsPanel.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE
+ | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
+ | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
final RecentTasksLoader recentTasksLoader = RecentTasksLoader.getInstance(this);
recentTasksLoader.setRecentsPanel(mRecentsPanel, mRecentsPanel);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/BarTransitions.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/BarTransitions.java
index ce578e5..7b1df91 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/BarTransitions.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/BarTransitions.java
@@ -35,7 +35,7 @@ public class BarTransitions {
public static final int MODE_OPAQUE = 0;
public static final int MODE_SEMI_TRANSPARENT = 1;
- public static final int MODE_TRANSPARENT = 2;
+ public static final int MODE_TRANSLUCENT = 2;
public static final int MODE_LIGHTS_OUT = 3;
public static final int LIGHTS_IN_DURATION = 250;
@@ -125,7 +125,7 @@ public class BarTransitions {
mColorDrawable.setColor(newColor);
}
}
- if (oldColor != null && newColor == null && mColorDrawableShowing) {
+ if (newColor == null && mColorDrawableShowing) {
if (DEBUG) Log.d(mTag, "Hide color layer");
if (animate) {
mTransitionDrawable.reverseTransition(BACKGROUND_DURATION);
@@ -133,9 +133,8 @@ public class BarTransitions {
mTransitionDrawable.resetTransition();
}
mColorDrawableShowing = false;
- } else if (oldColor == null && newColor != null && !mColorDrawableShowing) {
+ } else if (newColor != null && !mColorDrawableShowing) {
if (DEBUG) Log.d(mTag, "Show color layer");
- mTransitionDrawable.setCrossFadeEnabled(!animate);
mTransitionDrawable.startTransition(animate ? BACKGROUND_DURATION : 0);
mColorDrawableShowing = true;
}
@@ -158,7 +157,7 @@ public class BarTransitions {
public static String modeToString(int mode) {
if (mode == MODE_OPAQUE) return "MODE_OPAQUE";
if (mode == MODE_SEMI_TRANSPARENT) return "MODE_SEMI_TRANSPARENT";
- if (mode == MODE_TRANSPARENT) return "MODE_TRANSPARENT";
+ if (mode == MODE_TRANSLUCENT) return "MODE_TRANSLUCENT";
if (mode == MODE_LIGHTS_OUT) return "MODE_LIGHTS_OUT";
throw new IllegalArgumentException("Unknown mode " + mode);
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarTransitions.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarTransitions.java
index 4e92179..5d4b995 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarTransitions.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarTransitions.java
@@ -58,8 +58,8 @@ public final class NavigationBarTransitions extends BarTransitions {
@Override
public void transitionTo(int mode, boolean animate) {
mRequestedMode = mode;
- if (mVertical && mode == MODE_TRANSPARENT) {
- // fully transparent mode not allowed when vertical
+ if (mVertical && mode == MODE_TRANSLUCENT) {
+ // translucent mode not allowed when vertical
mode = MODE_OPAQUE;
}
super.transitionTo(mode, animate);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
index c47d0eb..93a9b92 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
@@ -22,7 +22,7 @@ import static android.app.StatusBarManager.WINDOW_STATE_SHOWING;
import static android.app.StatusBarManager.windowStateToString;
import static com.android.systemui.statusbar.phone.BarTransitions.MODE_OPAQUE;
import static com.android.systemui.statusbar.phone.BarTransitions.MODE_SEMI_TRANSPARENT;
-import static com.android.systemui.statusbar.phone.BarTransitions.MODE_TRANSPARENT;
+import static com.android.systemui.statusbar.phone.BarTransitions.MODE_TRANSLUCENT;
import static com.android.systemui.statusbar.phone.BarTransitions.MODE_LIGHTS_OUT;
import android.animation.Animator;
@@ -1853,12 +1853,12 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode {
// update status bar mode
final int sbMode = computeBarMode(oldVal, newVal, mStatusBarView.getBarTransitions(),
- View.STATUS_BAR_TRANSIENT, View.SYSTEM_UI_FLAG_TRANSPARENT_STATUS);
+ View.STATUS_BAR_TRANSIENT, View.STATUS_BAR_TRANSLUCENT);
// update navigation bar mode
final int nbMode = mNavigationBarView == null ? -1 : computeBarMode(
oldVal, newVal, mNavigationBarView.getBarTransitions(),
- View.NAVIGATION_BAR_TRANSIENT, View.SYSTEM_UI_FLAG_TRANSPARENT_NAVIGATION);
+ View.NAVIGATION_BAR_TRANSIENT, View.NAVIGATION_BAR_TRANSLUCENT);
final boolean sbModeChanged = sbMode != -1;
final boolean nbModeChanged = nbMode != -1;
boolean checkBarModes = false;
@@ -1896,18 +1896,18 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode {
}
private int computeBarMode(int oldVis, int newVis, BarTransitions transitions,
- int transientFlag, int transparentFlag) {
- final int oldMode = barMode(oldVis, transientFlag, transparentFlag);
- final int newMode = barMode(newVis, transientFlag, transparentFlag);
+ int transientFlag, int translucentFlag) {
+ final int oldMode = barMode(oldVis, transientFlag, translucentFlag);
+ final int newMode = barMode(newVis, transientFlag, translucentFlag);
if (oldMode == newMode) {
return -1; // no mode change
}
return newMode;
}
- private int barMode(int vis, int transientFlag, int transparentFlag) {
+ private int barMode(int vis, int transientFlag, int translucentFlag) {
return (vis & transientFlag) != 0 ? MODE_SEMI_TRANSPARENT
- : (vis & transparentFlag) != 0 ? MODE_TRANSPARENT
+ : (vis & translucentFlag) != 0 ? MODE_TRANSLUCENT
: (vis & View.SYSTEM_UI_FLAG_LOW_PROFILE) != 0 ? MODE_LIGHTS_OUT
: MODE_OPAQUE;
}
@@ -2737,7 +2737,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode {
if (command.equals(COMMAND_BARS)) {
String mode = args.getString("mode");
int barMode = "opaque".equals(mode) ? MODE_OPAQUE :
- "transparent".equals(mode) ? MODE_TRANSPARENT :
+ "translucent".equals(mode) ? MODE_TRANSLUCENT :
"semi-transparent".equals(mode) ? MODE_SEMI_TRANSPARENT :
-1;
if (barMode != -1) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarTransitions.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarTransitions.java
index 6bb6776..8406565 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarTransitions.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarTransitions.java
@@ -20,13 +20,12 @@ import android.animation.Animator;
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.content.res.Resources;
-import android.graphics.drawable.GradientDrawable.Orientation;
import android.view.View;
import com.android.systemui.R;
public final class PhoneStatusBarTransitions extends BarTransitions {
- private static final float ICON_ALPHA_WHEN_TRANSPARENT = 1;
+ private static final float ICON_ALPHA_WHEN_NOT_OPAQUE = 1;
private static final float ICON_ALPHA_WHEN_LIGHTS_OUT_BATTERY_CLOCK = 0.5f;
private static final float ICON_ALPHA_WHEN_LIGHTS_OUT_NON_BATTERY_CLOCK = 0;
@@ -59,7 +58,7 @@ public final class PhoneStatusBarTransitions extends BarTransitions {
private float getNonBatteryClockAlphaFor(int mode) {
return mode == MODE_LIGHTS_OUT ? ICON_ALPHA_WHEN_LIGHTS_OUT_NON_BATTERY_CLOCK
- : isTransparent(mode) ? ICON_ALPHA_WHEN_TRANSPARENT
+ : !isOpaque(mode) ? ICON_ALPHA_WHEN_NOT_OPAQUE
: mIconAlphaWhenOpaque;
}
@@ -68,8 +67,8 @@ public final class PhoneStatusBarTransitions extends BarTransitions {
: getNonBatteryClockAlphaFor(mode);
}
- private boolean isTransparent(int mode) {
- return mode == MODE_SEMI_TRANSPARENT || mode == MODE_TRANSPARENT;
+ private boolean isOpaque(int mode) {
+ return !(mode == MODE_SEMI_TRANSPARENT || mode == MODE_TRANSLUCENT);
}
@Override
diff --git a/policy/src/com/android/internal/policy/impl/BarController.java b/policy/src/com/android/internal/policy/impl/BarController.java
index 57c9675..8d97fc8 100644
--- a/policy/src/com/android/internal/policy/impl/BarController.java
+++ b/policy/src/com/android/internal/policy/impl/BarController.java
@@ -23,6 +23,7 @@ import android.os.ServiceManager;
import android.os.SystemClock;
import android.util.Slog;
import android.view.View;
+import android.view.WindowManager;
import android.view.WindowManagerPolicy.WindowState;
import com.android.internal.statusbar.IStatusBarService;
@@ -39,13 +40,14 @@ public class BarController {
private static final int TRANSIENT_BAR_SHOWING = 1;
private static final int TRANSIENT_BAR_HIDING = 2;
- private static final int TRANSPARENT_ANIMATION_DELAY_MS = 1000;
+ private static final int TRANSLUCENT_ANIMATION_DELAY_MS = 1000;
private final String mTag;
private final int mTransientFlag;
private final int mUnhideFlag;
- private final int mTransparentFlag;
+ private final int mTranslucentFlag;
private final int mStatusBarManagerId;
+ private final int mTranslucentWmFlag;
private final Handler mHandler;
private final Object mServiceAquireLock = new Object();
private IStatusBarService mStatusBarService;
@@ -54,15 +56,16 @@ public class BarController {
private int mState = StatusBarManager.WINDOW_STATE_SHOWING;
private int mTransientBarState;
private boolean mPendingShow;
- private long mLastTransparent;
+ private long mLastTranslucent;
- public BarController(String tag, int transientFlag, int unhideFlag, int transparentFlag,
- int statusBarManagerId) {
+ public BarController(String tag, int transientFlag, int unhideFlag, int translucentFlag,
+ int statusBarManagerId, int translucentWmFlag) {
mTag = "BarController." + tag;
mTransientFlag = transientFlag;
mUnhideFlag = unhideFlag;
- mTransparentFlag = transparentFlag;
+ mTranslucentFlag = translucentFlag;
mStatusBarManagerId = statusBarManagerId;
+ mTranslucentWmFlag = translucentWmFlag;
mHandler = new Handler();
}
@@ -84,8 +87,8 @@ public class BarController {
return mTransientBarState == TRANSIENT_BAR_SHOWING;
}
- public boolean wasRecentlyTransparent() {
- return (SystemClock.uptimeMillis() - mLastTransparent) < TRANSPARENT_ANIMATION_DELAY_MS;
+ public boolean wasRecentlyTranslucent() {
+ return (SystemClock.uptimeMillis() - mLastTranslucent) < TRANSLUCENT_ANIMATION_DELAY_MS;
}
public void adjustSystemUiVisibilityLw(int oldVis, int vis) {
@@ -100,6 +103,22 @@ public class BarController {
}
}
+ public int applyTranslucentFlagLw(WindowState win, int vis, int oldVis) {
+ if (mWin != null) {
+ if (win != null && (win.getAttrs().privateFlags
+ & WindowManager.LayoutParams.PRIVATE_FLAG_INHERIT_TRANSLUCENT_DECOR) == 0) {
+ if ((win.getAttrs().flags & mTranslucentWmFlag) != 0) {
+ vis |= mTranslucentFlag;
+ } else {
+ vis &= ~mTranslucentFlag;
+ }
+ } else {
+ vis = (vis & ~mTranslucentFlag) | (oldVis & mTranslucentFlag);
+ }
+ }
+ return vis;
+ }
+
public boolean setBarShowingLw(final boolean show) {
if (mWin == null) return false;
if (show && mTransientBarState == TRANSIENT_BAR_HIDING) {
@@ -186,10 +205,10 @@ public class BarController {
}
}
- public int updateVisibilityLw(boolean allowed, int oldVis, int vis) {
+ public int updateVisibilityLw(boolean transientAllowed, int oldVis, int vis) {
if (mWin == null) return vis;
if (mTransientBarState == TRANSIENT_BAR_SHOWING) { // transient bar requested
- if (allowed) {
+ if (transientAllowed) {
vis |= mTransientFlag;
if ((oldVis & mTransientFlag) == 0) {
vis |= mUnhideFlag; // tell sysui we're ready to unhide
@@ -202,8 +221,8 @@ public class BarController {
vis |= mTransientFlag; // ignore clear requests until transition completes
vis &= ~View.SYSTEM_UI_FLAG_LOW_PROFILE; // never show transient bars in low profile
}
- if ((vis & mTransparentFlag) != 0 || (oldVis & mTransparentFlag) != 0) {
- mLastTransparent = SystemClock.uptimeMillis();
+ if ((vis & mTranslucentFlag) != 0 || (oldVis & mTranslucentFlag) != 0) {
+ mLastTranslucent = SystemClock.uptimeMillis();
}
return vis;
}
@@ -211,7 +230,7 @@ public class BarController {
private void setTransientBarState(int state) {
if (mWin != null && state != mTransientBarState) {
if (mTransientBarState == TRANSIENT_BAR_SHOWING || state == TRANSIENT_BAR_SHOWING) {
- mLastTransparent = SystemClock.uptimeMillis();
+ mLastTranslucent = SystemClock.uptimeMillis();
}
mTransientBarState = state;
if (DEBUG) Slog.d(mTag, "mTransientBarState: " + transientBarStateToString(state));
diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindow.java b/policy/src/com/android/internal/policy/impl/PhoneWindow.java
index 11913ee..d8af007 100644
--- a/policy/src/com/android/internal/policy/impl/PhoneWindow.java
+++ b/policy/src/com/android/internal/policy/impl/PhoneWindow.java
@@ -2750,6 +2750,18 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
setFlags(FLAG_FULLSCREEN, FLAG_FULLSCREEN & (~getForcedWindowFlags()));
}
+ if (a.getBoolean(com.android.internal.R.styleable.Window_windowTranslucentStatus,
+ false)) {
+ setFlags(FLAG_TRANSLUCENT_STATUS, FLAG_TRANSLUCENT_STATUS
+ & (~getForcedWindowFlags()));
+ }
+
+ if (a.getBoolean(com.android.internal.R.styleable.Window_windowTranslucentNavigation,
+ false)) {
+ setFlags(FLAG_TRANSLUCENT_NAVIGATION, FLAG_TRANSLUCENT_NAVIGATION
+ & (~getForcedWindowFlags()));
+ }
+
if (a.getBoolean(com.android.internal.R.styleable.Window_windowOverscan, false)) {
setFlags(FLAG_LAYOUT_IN_OVERSCAN, FLAG_LAYOUT_IN_OVERSCAN&(~getForcedWindowFlags()));
}
diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
index 3232a1e..dd4f3d1 100644
--- a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
+++ b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
@@ -163,9 +163,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
*/
static final int SYSTEM_UI_CHANGING_LAYOUT =
View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
- | View.SYSTEM_UI_FLAG_FULLSCREEN
- | View.SYSTEM_UI_FLAG_TRANSPARENT_STATUS
- | View.SYSTEM_UI_FLAG_TRANSPARENT_NAVIGATION;
+ | View.SYSTEM_UI_FLAG_FULLSCREEN;
/**
* Keyguard stuff
@@ -557,14 +555,16 @@ public class PhoneWindowManager implements WindowManagerPolicy {
private final BarController mStatusBarController = new BarController("StatusBar",
View.STATUS_BAR_TRANSIENT,
View.STATUS_BAR_UNHIDE,
- View.SYSTEM_UI_FLAG_TRANSPARENT_STATUS,
- StatusBarManager.WINDOW_STATUS_BAR);
+ View.STATUS_BAR_TRANSLUCENT,
+ StatusBarManager.WINDOW_STATUS_BAR,
+ WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
private final BarController mNavigationBarController = new BarController("NavigationBar",
View.NAVIGATION_BAR_TRANSIENT,
View.NAVIGATION_BAR_UNHIDE,
- View.SYSTEM_UI_FLAG_TRANSPARENT_NAVIGATION,
- StatusBarManager.WINDOW_NAVIGATION_BAR);
+ View.NAVIGATION_BAR_TRANSLUCENT,
+ StatusBarManager.WINDOW_NAVIGATION_BAR,
+ WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
private TransientNavigationConfirmation mTransientNavigationConfirmation;
@@ -2694,9 +2694,9 @@ public class PhoneWindowManager implements WindowManagerPolicy {
// drive nav being hidden only by whether it is requested.
final int sysui = mLastSystemUiFlags;
boolean navVisible = (sysui & View.SYSTEM_UI_FLAG_HIDE_NAVIGATION) == 0;
- boolean navTransparent = (sysui & View.SYSTEM_UI_FLAG_TRANSPARENT_NAVIGATION) != 0;
+ boolean navTranslucent = (sysui & View.NAVIGATION_BAR_TRANSLUCENT) != 0;
boolean transientAllowed = (sysui & View.SYSTEM_UI_FLAG_IMMERSIVE) != 0;
- navTransparent &= !transientAllowed; // transient trumps transparent
+ navTranslucent &= !transientAllowed; // transient trumps translucent
// When the navigation bar isn't visible, we put up a fake
// input window to catch all touch events. This way we can
@@ -2733,7 +2733,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
- mNavigationBarHeightForRotation[displayRotation];
mTmpNavigationFrame.set(0, top, displayWidth, displayHeight - overscanBottom);
mStableBottom = mStableFullscreenBottom = mTmpNavigationFrame.top;
- if (transientNavBarShowing || navTransparent) {
+ if (transientNavBarShowing || navTranslucent) {
mNavigationBarController.setBarShowingLw(true);
} else if (navVisible) {
mNavigationBarController.setBarShowingLw(true);
@@ -2744,8 +2744,8 @@ public class PhoneWindowManager implements WindowManagerPolicy {
// We currently want to hide the navigation UI.
mNavigationBarController.setBarShowingLw(false);
}
- if (navVisible && !navTransparent && !mNavigationBar.isAnimatingLw()
- && !mNavigationBarController.wasRecentlyTransparent()) {
+ if (navVisible && !navTranslucent && !mNavigationBar.isAnimatingLw()
+ && !mNavigationBarController.wasRecentlyTranslucent()) {
// If the opaque nav bar is currently requested to be visible,
// and not in the process of animating on or off, then
// we can tell the app that it is covered by it.
@@ -2757,7 +2757,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
- mNavigationBarWidthForRotation[displayRotation];
mTmpNavigationFrame.set(left, 0, displayWidth - overscanRight, displayHeight);
mStableRight = mStableFullscreenRight = mTmpNavigationFrame.left;
- if (transientNavBarShowing || navTransparent) {
+ if (transientNavBarShowing || navTranslucent) {
mNavigationBarController.setBarShowingLw(true);
} else if (navVisible) {
mNavigationBarController.setBarShowingLw(true);
@@ -2768,8 +2768,8 @@ public class PhoneWindowManager implements WindowManagerPolicy {
// We currently want to hide the navigation UI.
mNavigationBarController.setBarShowingLw(false);
}
- if (navVisible && !navTransparent && !mNavigationBar.isAnimatingLw()
- && !mNavigationBarController.wasRecentlyTransparent()) {
+ if (navVisible && !navTranslucent && !mNavigationBar.isAnimatingLw()
+ && !mNavigationBarController.wasRecentlyTranslucent()) {
// If the nav bar is currently requested to be visible,
// and not in the process of animating on or off, then
// we can tell the app that it is covered by it.
@@ -2816,7 +2816,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
mStableTop = mUnrestrictedScreenTop + mStatusBarHeight;
boolean statusBarTransient = (sysui & View.STATUS_BAR_TRANSIENT) != 0;
- boolean statusBarTransparent = (sysui & View.SYSTEM_UI_FLAG_TRANSPARENT_STATUS) != 0;
+ boolean statusBarTranslucent = (sysui & View.STATUS_BAR_TRANSLUCENT) != 0;
// If the status bar is hidden, we don't want to cause
// windows behind it to scroll.
@@ -2839,8 +2839,8 @@ public class PhoneWindowManager implements WindowManagerPolicy {
mCurLeft, mCurTop, mCurRight, mCurBottom));
}
if (mStatusBar.isVisibleLw() && !mStatusBar.isAnimatingLw()
- && !statusBarTransient && !statusBarTransparent
- && !mStatusBarController.wasRecentlyTransparent()) {
+ && !statusBarTransient && !statusBarTranslucent
+ && !mStatusBarController.wasRecentlyTranslucent()) {
// If the opaque status bar is currently requested to be visible,
// and not in the process of animating on or off, then
// we can tell the app that it is covered by it.
@@ -2999,15 +2999,18 @@ public class PhoneWindowManager implements WindowManagerPolicy {
dcf.top = mSystemTop;
dcf.right = mSystemRight;
dcf.bottom = mSystemBottom;
+ final boolean inheritTranslucentDecor = (attrs.privateFlags
+ & WindowManager.LayoutParams.PRIVATE_FLAG_INHERIT_TRANSLUCENT_DECOR) != 0;
if (attrs.type >= WindowManager.LayoutParams.FIRST_APPLICATION_WINDOW
- && attrs.type <= WindowManager.LayoutParams.LAST_APPLICATION_WINDOW) {
- if ((attrs.flags & WindowManager.LayoutParams.FLAG_FULLSCREEN) == 0
- && (sysUiFl & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0
- && (sysUiFl & View.SYSTEM_UI_FLAG_TRANSPARENT_STATUS) == 0) {
+ && attrs.type <= WindowManager.LayoutParams.LAST_APPLICATION_WINDOW
+ && !inheritTranslucentDecor) {
+ if ((sysUiFl & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0
+ && (fl & WindowManager.LayoutParams.FLAG_FULLSCREEN) == 0
+ && (fl & WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS) == 0) {
// Ensure policy decor includes status bar
dcf.top = mStableTop;
}
- if ((sysUiFl & View.SYSTEM_UI_FLAG_TRANSPARENT_NAVIGATION) == 0
+ if ((fl & WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION) == 0
&& (sysUiFl & View.SYSTEM_UI_FLAG_HIDE_NAVIGATION) == 0) {
// Ensure policy decor includes navigation bar
dcf.bottom = mStableBottom;
@@ -3257,6 +3260,12 @@ public class PhoneWindowManager implements WindowManagerPolicy {
+ mRestrictedScreenWidth;
pf.bottom = df.bottom = of.bottom = cf.bottom = mRestrictedScreenTop
+ mRestrictedScreenHeight;
+ } else if (attrs.type == TYPE_TOAST || attrs.type == TYPE_SYSTEM_ALERT) {
+ // Toasts are stable to interim decor changes.
+ pf.left = df.left = of.left = cf.left = mStableLeft;
+ pf.top = df.top = of.top = cf.top = mStableTop;
+ pf.right = df.right = of.right = cf.right = mStableRight;
+ pf.bottom = df.bottom = of.bottom = cf.bottom = mStableBottom;
} else {
pf.left = mContentLeft;
pf.top = mContentTop;
@@ -5061,22 +5070,30 @@ public class PhoneWindowManager implements WindowManagerPolicy {
}
private int updateSystemBarsLw(WindowState win, int oldVis, int vis) {
+ // apply translucent bar vis flags
+ WindowState transWin = mKeyguard != null && mKeyguard.isVisibleLw() && !mHideLockScreen
+ ? mKeyguard
+ : mTopFullscreenOpaqueWindowState;
+ vis = mStatusBarController.applyTranslucentFlagLw(transWin, vis, oldVis);
+ vis = mNavigationBarController.applyTranslucentFlagLw(transWin, vis, oldVis);
+
// prevent status bar interaction from clearing certain flags
boolean statusBarHasFocus = win.getAttrs().type == TYPE_STATUS_BAR;
if (statusBarHasFocus) {
int flags = View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_IMMERSIVE
- | View.SYSTEM_UI_FLAG_TRANSPARENT_STATUS
- | View.SYSTEM_UI_FLAG_TRANSPARENT_NAVIGATION;
- vis = (vis & ~flags) | (mLastSystemUiFlags & flags);
+ | View.STATUS_BAR_TRANSLUCENT
+ | View.NAVIGATION_BAR_TRANSLUCENT;
+ vis = (vis & ~flags) | (oldVis & flags);
}
// update status bar
boolean transientAllowed =
(vis & View.SYSTEM_UI_FLAG_IMMERSIVE) != 0;
boolean hideStatusBarWM =
- (win.getAttrs().flags
+ mTopFullscreenOpaqueWindowState != null &&
+ (mTopFullscreenOpaqueWindowState.getAttrs().flags
& WindowManager.LayoutParams.FLAG_FULLSCREEN) != 0;
boolean hideStatusBarSysui =
(vis & View.SYSTEM_UI_FLAG_FULLSCREEN) != 0;