diff options
author | John Spurlock <jspurlock@google.com> | 2013-08-06 22:29:16 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2013-08-06 22:29:17 +0000 |
commit | 166bc5b664b28f93c8bcf74f4b3abb8a82e44dbc (patch) | |
tree | b076649a6bd0d6a501ff729090d09411718ecb4e /packages/SystemUI | |
parent | 14db9654f6c31e94fe9272776f1f1b8602a17fdc (diff) | |
parent | e1f366faf8691f0dacde1dad35b28fcc37120776 (diff) | |
download | frameworks_base-166bc5b664b28f93c8bcf74f4b3abb8a82e44dbc.zip frameworks_base-166bc5b664b28f93c8bcf74f4b3abb8a82e44dbc.tar.gz frameworks_base-166bc5b664b28f93c8bcf74f4b3abb8a82e44dbc.tar.bz2 |
Merge "Introduce new transparent bars sysui flags."
Diffstat (limited to 'packages/SystemUI')
5 files changed, 84 insertions, 56 deletions
diff --git a/packages/SystemUI/res/values-land/refs.xml b/packages/SystemUI/res/values-land/refs.xml index f5e79b9..62fb77d 100644 --- a/packages/SystemUI/res/values-land/refs.xml +++ b/packages/SystemUI/res/values-land/refs.xml @@ -16,5 +16,5 @@ */ --> <resources> - <item type="string" name="hideybar_confirmation_message">@string/hideybar_confirmation_message_long</item> + <item type="string" name="hiding_navigation_confirmation_message">@string/hiding_navigation_confirmation_message_long</item> </resources> diff --git a/packages/SystemUI/res/values-sw600dp-port/refs.xml b/packages/SystemUI/res/values-sw600dp-port/refs.xml index f5e79b9..62fb77d 100644 --- a/packages/SystemUI/res/values-sw600dp-port/refs.xml +++ b/packages/SystemUI/res/values-sw600dp-port/refs.xml @@ -16,5 +16,5 @@ */ --> <resources> - <item type="string" name="hideybar_confirmation_message">@string/hideybar_confirmation_message_long</item> + <item type="string" name="hiding_navigation_confirmation_message">@string/hiding_navigation_confirmation_message_long</item> </resources> diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml index b99d20c..0073e60 100644 --- a/packages/SystemUI/res/values/strings.xml +++ b/packages/SystemUI/res/values/strings.xml @@ -502,8 +502,8 @@ <string name="status_bar_help_text">Access them anytime by swiping down.\nSwipe down again for system controls.</string> <!-- Toast bar message when hiding the navigation bar --> - <string name="hideybar_confirmation_message">Swipe edge of screen to reveal bar</string> + <string name="hiding_navigation_confirmation_message">Swipe edge of screen to reveal bar</string> <!-- Longer version of toast bar message when hiding the navigation bar (if room) --> - <string name="hideybar_confirmation_message_long">Swipe from edge of screen to reveal system bar</string> + <string name="hiding_navigation_confirmation_message_long">Swipe from edge of screen to reveal system bar</string> </resources> 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 d1ccde1..3a81454 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java @@ -127,11 +127,15 @@ public class PhoneStatusBar extends BaseStatusBar { private static final int NOTIFICATION_PRIORITY_MULTIPLIER = 10; // see NotificationManagerService private static final int HIDE_ICONS_BELOW_SCORE = Notification.PRIORITY_LOW * NOTIFICATION_PRIORITY_MULTIPLIER; - private static final int STATUS_OR_NAV_OVERLAY = - View.STATUS_BAR_OVERLAY | View.NAVIGATION_BAR_OVERLAY; + private static final int STATUS_OR_NAV_TRANSIENT = + View.STATUS_BAR_TRANSIENT | View.NAVIGATION_BAR_TRANSIENT; private static final long AUTOHIDE_TIMEOUT_MS = 3000; private static final float TRANSPARENT_ALPHA = 0.7f; + private static final int BAR_MODE_NORMAL = 0; + private static final int BAR_MODE_TRANSIENT = 1; + private static final int BAR_MODE_TRANSPARENT = 2; + // fling gesture tuning parameters, scaled to display density private float mSelfExpandVelocityPx; // classic value: 2000px/s private float mSelfCollapseVelocityPx; // classic value: 2000px/s (will be negated to collapse "up") @@ -306,33 +310,33 @@ public class PhoneStatusBar extends BaseStatusBar { } }; - private Toast mHideybarConfirmation; - private boolean mHideybarConfirmationDismissed; + private Toast mHidingNavigationConfirmation; + private boolean mHidingNavigationConfirmationDismissed; - private final View.OnTouchListener mDismissHideybarConfirmationOnTouchOutside = + private final View.OnTouchListener mDismissHidingNavigationConfirmationOnTouchOutside = new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if (event.getActionMasked() == MotionEvent.ACTION_OUTSIDE) { - dismissHideybarConfirmation(); + dismissHidingNavigationConfirmation(); } return false; } }; - private final Runnable mHideybarConfirmationAction = new Runnable() { + private final Runnable mHidingNavigationConfirmationAction = new Runnable() { @Override public void run() { - if (mHideybarConfirmation != null) { + if (mHidingNavigationConfirmation != null) { final boolean isGloballyConfirmed = Prefs.read(mContext) - .getBoolean(Prefs.HIDEYBAR_CONFIRMED, false); + .getBoolean(Prefs.HIDING_NAVIGATION_CONFIRMED, false); if (!isGloballyConfirmed) { // user pressed button, consider this a confirmation Prefs.edit(mContext) - .putBoolean(Prefs.HIDEYBAR_CONFIRMED, true) + .putBoolean(Prefs.HIDING_NAVIGATION_CONFIRMED, true) .apply(); } - dismissHideybarConfirmation(); + dismissHidingNavigationConfirmation(); } } }; @@ -342,7 +346,7 @@ public class PhoneStatusBar extends BaseStatusBar { private final Runnable mAutohide = new Runnable() { @Override public void run() { - int requested = mSystemUiVisibility & ~STATUS_OR_NAV_OVERLAY; + int requested = mSystemUiVisibility & ~STATUS_OR_NAV_TRANSIENT; if (mSystemUiVisibility != requested) { notifyUiVisibilityChanged(requested); } @@ -1892,8 +1896,9 @@ public class PhoneStatusBar extends BaseStatusBar { if (diff != 0) { mSystemUiVisibility = newVal; - if (0 != (diff & View.SYSTEM_UI_FLAG_LOW_PROFILE)) { - final boolean lightsOut = (0 != (vis & View.SYSTEM_UI_FLAG_LOW_PROFILE)); + // update low profile + if ((diff & View.SYSTEM_UI_FLAG_LOW_PROFILE) != 0) { + final boolean lightsOut = (vis & View.SYSTEM_UI_FLAG_LOW_PROFILE) != 0; if (lightsOut) { animateCollapsePanels(); if (mTicking) { @@ -1908,70 +1913,93 @@ public class PhoneStatusBar extends BaseStatusBar { setStatusBarLowProfile(lightsOut); } - boolean sbOverlayChanged = 0 != (diff & View.STATUS_BAR_OVERLAY); - boolean nbOverlayChanged = 0 != (diff & View.NAVIGATION_BAR_OVERLAY); - if (sbOverlayChanged || nbOverlayChanged) { - boolean sbOverlay = 0 != (vis & View.STATUS_BAR_OVERLAY); - boolean nbOverlay = 0 != (vis & View.NAVIGATION_BAR_OVERLAY); - if (sbOverlayChanged) { - setTransparent(mStatusBarView, sbOverlay); - } - if (nbOverlayChanged) { - setTransparent(mNavigationBarView, nbOverlay); - } - if (sbOverlayChanged && sbOverlay || nbOverlayChanged && nbOverlay) { + // update status bar mode + int sbMode = updateBarMode(oldVal, newVal, mStatusBarView, + View.STATUS_BAR_TRANSIENT, View.SYSTEM_UI_FLAG_TRANSPARENT_STATUS); + + // update navigation bar mode + int nbMode = updateBarMode(oldVal, newVal, mNavigationBarView, + View.NAVIGATION_BAR_TRANSIENT, View.SYSTEM_UI_FLAG_TRANSPARENT_NAVIGATION); + + if (sbMode != -1 || nbMode != -1) { + // update transient bar autohide + if (sbMode == BAR_MODE_TRANSIENT || nbMode == BAR_MODE_TRANSIENT) { scheduleAutohide(); } else { cancelAutohide(); } } + + // update hiding navigation confirmation if (mNavigationBarView != null) { - int flags = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_ALLOW_OVERLAY; - boolean oldVisible = (oldVal & flags) == flags; - boolean newVisible = (newVal & flags) == flags; - if (!oldVisible && newVisible) { - mHideybarConfirmationDismissed = false; + final int hidingNav = + View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_ALLOW_TRANSIENT; + boolean oldHidingNav = (oldVal & hidingNav) != 0; + boolean newHidingNav = (newVal & hidingNav) != 0; + if (!oldHidingNav && newHidingNav) { + mHidingNavigationConfirmationDismissed = false; } - setHideybarConfirmationVisible(newVisible); + setHidingNavigationConfirmationVisible(newHidingNav); } + + // send updated sysui visibility to window manager notifyUiVisibilityChanged(mSystemUiVisibility); } } - private void dismissHideybarConfirmation() { - if (mHideybarConfirmation != null) { - mHideybarConfirmationDismissed = true; - mHideybarConfirmation.cancel(); - mHideybarConfirmation = null; + private int updateBarMode(int oldVis, int newVis, View view, + int transientFlag, int transparentFlag) { + final int oldMode = barMode(oldVis, transientFlag, transparentFlag); + final int newMode = barMode(newVis, transientFlag, transparentFlag); + if (oldMode == newMode) { + return -1; // no mode change + } + setTransparent(view, newMode != BAR_MODE_NORMAL); + return newMode; + } + + private int barMode(int vis, int transientFlag, int transparentFlag) { + return (vis & transientFlag) != 0 ? BAR_MODE_TRANSIENT + : (vis & transparentFlag) != 0 ? BAR_MODE_TRANSPARENT + : BAR_MODE_NORMAL; + } + + private void dismissHidingNavigationConfirmation() { + if (mHidingNavigationConfirmation != null) { + mHidingNavigationConfirmationDismissed = true; + mHidingNavigationConfirmation.cancel(); + mHidingNavigationConfirmation = null; } } - private void setHideybarConfirmationVisible(boolean visible) { - if (DEBUG) Log.d(TAG, "setHideybarConfirmationVisible " + visible); - if (visible && mHideybarConfirmation == null && !mHideybarConfirmationDismissed) { + private void setHidingNavigationConfirmationVisible(boolean visible) { + if (DEBUG) Log.d(TAG, "setHidingNavigationConfirmationVisible " + visible); + if (visible && + mHidingNavigationConfirmation == null && !mHidingNavigationConfirmationDismissed) { // create the confirmation toast bar - int msg = R.string.hideybar_confirmation_message; - mHideybarConfirmation = Toast.makeBar(mContext, msg, Toast.LENGTH_INFINITE) - .setAction(com.android.internal.R.string.ok, mHideybarConfirmationAction); - View v = mHideybarConfirmation.getView(); + int msg = R.string.hiding_navigation_confirmation_message; + mHidingNavigationConfirmation = Toast.makeBar(mContext, msg, Toast.LENGTH_INFINITE) + .setAction(com.android.internal.R.string.ok, + mHidingNavigationConfirmationAction); + View v = mHidingNavigationConfirmation.getView(); v.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION); boolean isGloballyConfirmed = Prefs.read(mContext) - .getBoolean(Prefs.HIDEYBAR_CONFIRMED, false); + .getBoolean(Prefs.HIDING_NAVIGATION_CONFIRMED, false); if (isGloballyConfirmed) { // dismiss on outside touch if globally confirmed - v.setOnTouchListener(mDismissHideybarConfirmationOnTouchOutside); + v.setOnTouchListener(mDismissHidingNavigationConfirmationOnTouchOutside); } // position at the bottom like normal toasts, but use top gravity // to avoid jumping around when showing/hiding the nav bar v.measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED); int offsetY = mContext.getResources().getDimensionPixelSize( com.android.internal.R.dimen.toast_y_offset); - mHideybarConfirmation.setGravity(Gravity.TOP, + mHidingNavigationConfirmation.setGravity(Gravity.TOP, 0, mCurrentDisplaySize.y - v.getMeasuredHeight() / 2 - offsetY); // show the confirmation - mHideybarConfirmation.show(); + mHidingNavigationConfirmation.show(); } else if (!visible) { - dismissHideybarConfirmation(); + dismissHidingNavigationConfirmation(); } } @@ -1985,7 +2013,7 @@ public class PhoneStatusBar extends BaseStatusBar { @Override public void suspendAutohide() { mHandler.removeCallbacks(mAutohide); - mAutohideSuspended = 0 != (mSystemUiVisibility & STATUS_OR_NAV_OVERLAY); + mAutohideSuspended = 0 != (mSystemUiVisibility & STATUS_OR_NAV_TRANSIENT); } private void cancelAutohide() { @@ -1999,7 +2027,7 @@ public class PhoneStatusBar extends BaseStatusBar { } private void checkUserAutohide(View v, MotionEvent event) { - if ((mSystemUiVisibility & STATUS_OR_NAV_OVERLAY) != 0 // an overlay bar is revealed + if ((mSystemUiVisibility & STATUS_OR_NAV_TRANSIENT) != 0 // a transient bar is revealed && event.getAction() == MotionEvent.ACTION_OUTSIDE // touch outside the source bar && event.getX() == 0 && event.getY() == 0 // a touch outside both bars ) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/Prefs.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/Prefs.java index d03f6ce..3d51f20 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/Prefs.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/Prefs.java @@ -25,7 +25,7 @@ public class Prefs { public static final String SHOWN_COMPAT_MODE_HELP = "shown_compat_mode_help"; public static final String SHOWN_QUICK_SETTINGS_HELP = "shown_quick_settings_help"; - public static final String HIDEYBAR_CONFIRMED = "hideybar_confirmed"; + public static final String HIDING_NAVIGATION_CONFIRMED = "hiding_navigation_confirmed"; public static SharedPreferences read(Context context) { return context.getSharedPreferences(Prefs.SHARED_PREFS_NAME, Context.MODE_PRIVATE); |