diff options
author | Jorim Jaggi <jjaggi@google.com> | 2014-05-26 14:14:06 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2014-05-26 14:14:06 +0000 |
commit | 5b5cbd13d8474db1176d50a4c3b3476026c006a7 (patch) | |
tree | 09c6b6da1b2a78d33f9848c0172fadff9e4ef7ba /packages | |
parent | 161920fabbcb583250d42c6ae77acd38b30e6f6c (diff) | |
parent | f62f2bbcf2edec636700f80f5f279cce7ebad95b (diff) | |
download | frameworks_base-5b5cbd13d8474db1176d50a4c3b3476026c006a7.zip frameworks_base-5b5cbd13d8474db1176d50a4c3b3476026c006a7.tar.gz frameworks_base-5b5cbd13d8474db1176d50a4c3b3476026c006a7.tar.bz2 |
Merge "Make QS panel peek below the header." into lmp-preview-dev
Diffstat (limited to 'packages')
10 files changed, 77 insertions, 48 deletions
diff --git a/packages/SystemUI/res/drawable/notification_header_bg.xml b/packages/SystemUI/res/drawable/notification_header_bg.xml index 09d0d7d..5daec20 100644 --- a/packages/SystemUI/res/drawable/notification_header_bg.xml +++ b/packages/SystemUI/res/drawable/notification_header_bg.xml @@ -19,13 +19,11 @@ <item android:state_pressed="true"> <shape> <solid android:color="@color/background_color_1_press" /> - <corners android:radius="@*android:dimen/notification_quantum_rounded_rect_radius" /> </shape> </item> <item> <shape> <solid android:color="@color/background_color_1" /> - <corners android:radius="@*android:dimen/notification_quantum_rounded_rect_radius" /> </shape> </item> </selector>
\ No newline at end of file diff --git a/packages/SystemUI/res/drawable/qs_panel_background.xml b/packages/SystemUI/res/drawable/qs_panel_background.xml index c324976..a1a5362 100644 --- a/packages/SystemUI/res/drawable/qs_panel_background.xml +++ b/packages/SystemUI/res/drawable/qs_panel_background.xml @@ -13,11 +13,8 @@ See the License for the specific language governing permissions and limitations under the License. --> -<inset xmlns:android="http://schemas.android.com/apk/res/android" - android:insetLeft="@dimen/notification_side_padding" - android:insetRight="@dimen/notification_side_padding"> - <shape> - <solid android:color="@color/system_primary_color" /> - <corners android:radius="@*android:dimen/notification_quantum_rounded_rect_radius" /> - </shape> -</inset> +<shape xmlns:android="http://schemas.android.com/apk/res/android"> + <solid android:color="@color/system_primary_color" /> + <corners + android:radius="@*android:dimen/notification_quantum_rounded_rect_radius"/> +</shape> diff --git a/packages/SystemUI/res/layout/qs_panel.xml b/packages/SystemUI/res/layout/qs_panel.xml index 85de645..398787f 100644 --- a/packages/SystemUI/res/layout/qs_panel.xml +++ b/packages/SystemUI/res/layout/qs_panel.xml @@ -16,11 +16,10 @@ <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/quick_settings_container" - android:paddingLeft="@dimen/notification_side_padding" - android:paddingRight="@dimen/notification_side_padding" android:layout_width="match_parent" android:layout_height="wrap_content" - android:background="@drawable/qs_panel_background" > + android:background="@drawable/qs_panel_background" + android:elevation="2dp"> <com.android.systemui.qs.QSPanel android:id="@+id/quick_settings_panel" android:background="#0000" diff --git a/packages/SystemUI/res/layout/status_bar_expanded.xml b/packages/SystemUI/res/layout/status_bar_expanded.xml index d683162..cde83bf 100644 --- a/packages/SystemUI/res/layout/status_bar_expanded.xml +++ b/packages/SystemUI/res/layout/status_bar_expanded.xml @@ -59,7 +59,6 @@ android:id="@+id/scroll_view" android:layout_width="match_parent" android:layout_height="match_parent" - android:visibility="invisible" android:scrollbars="none" android:overScrollMode="never" android:fillViewport="true"> @@ -71,7 +70,9 @@ layout="@layout/qs_panel" android:layout_marginTop="@dimen/status_bar_header_height_expanded" android:layout_width="match_parent" - android:layout_height="wrap_content"/> + android:layout_height="wrap_content" + android:layout_marginLeft="@dimen/notification_side_padding" + android:layout_marginRight="@dimen/notification_side_padding"/> <!-- A view to reserve space for the collapsed stack --> <View @@ -80,7 +81,6 @@ </LinearLayout> </com.android.systemui.statusbar.phone.ObservableScrollView> - <com.android.systemui.statusbar.stack.NotificationStackScrollLayout android:id="@+id/notification_stack_scroller" android:layout_width="match_parent" diff --git a/packages/SystemUI/res/layout/status_bar_expanded_header.xml b/packages/SystemUI/res/layout/status_bar_expanded_header.xml index 89fa988..9c4f619 100644 --- a/packages/SystemUI/res/layout/status_bar_expanded_header.xml +++ b/packages/SystemUI/res/layout/status_bar_expanded_header.xml @@ -25,7 +25,7 @@ android:paddingStart="@dimen/notification_side_padding" android:paddingEnd="@dimen/notification_side_padding" android:baselineAligned="false" - android:elevation="10dp" + android:elevation="4dp" > <View diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml index e9dcea2..bf0cb68 100644 --- a/packages/SystemUI/res/values/dimens.xml +++ b/packages/SystemUI/res/values/dimens.xml @@ -196,6 +196,9 @@ <dimen name="qs_dual_tile_height">109dp</dimen> <dimen name="qs_dual_tile_padding">12dp</dimen> + <!-- How far the expanded QS panel peeks from the header in collapsed state. --> + <dimen name="qs_peek_height">8dp</dimen> + <!-- used by DessertCase --> <dimen name="dessert_case_cell_size">192dp</dimen> diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java index a92156d..f5252a3 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java @@ -47,6 +47,7 @@ public class NotificationPanelView extends PanelView implements PhoneStatusBar mStatusBar; private StatusBarHeaderView mHeader; private View mQsContainer; + private View mQsPanel; private View mKeyguardStatusView; private ObservableScrollView mScrollView; private View mStackScrollerContainer; @@ -65,6 +66,7 @@ public class NotificationPanelView extends PanelView implements */ private boolean mIntercepting; private boolean mQsExpanded; + private boolean mKeyguardShowing; private float mInitialHeightOnTouch; private float mInitialTouchX; private float mInitialTouchY; @@ -74,6 +76,7 @@ public class NotificationPanelView extends PanelView implements private int mQsMinExpansionHeight; private int mQsMaxExpansionHeight; private int mMinStackHeight; + private int mQsPeekHeight; private float mNotificationTranslation; private int mStackScrollerIntrinsicPadding; private boolean mQsExpansionEnabled = true; @@ -118,6 +121,7 @@ public class NotificationPanelView extends PanelView implements mKeyguardStatusView = findViewById(R.id.keyguard_status_view); mStackScrollerContainer = findViewById(R.id.notification_container_parent); mQsContainer = findViewById(R.id.quick_settings_container); + mQsPanel = findViewById(R.id.quick_settings_panel); mScrollView = (ObservableScrollView) findViewById(R.id.scroll_view); mScrollView.setListener(this); mNotificationStackScroller = (NotificationStackScrollLayout) @@ -136,22 +140,21 @@ public class NotificationPanelView extends PanelView implements mFlingAnimationUtils = new FlingAnimationUtils(getContext(), 0.4f); mStatusBarMinHeight = getResources().getDimensionPixelSize( com.android.internal.R.dimen.status_bar_height); + mQsPeekHeight = getResources().getDimensionPixelSize(R.dimen.qs_peek_height); mClockPositionAlgorithm.loadDimens(getResources()); } @Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) { super.onLayout(changed, left, top, right, bottom); - if (!mQsExpanded) { - positionClockAndNotifications(); - mNotificationStackScroller.setStackHeight(getExpandedHeight()); - } // Calculate quick setting heights. - mQsMinExpansionHeight = mHeader.getCollapsedHeight(); + mQsMinExpansionHeight = mHeader.getCollapsedHeight() + mQsPeekHeight; mQsMaxExpansionHeight = mHeader.getExpandedHeight() + mQsContainer.getHeight(); - if (mQsExpansionHeight == 0) { - mQsExpansionHeight = mQsMinExpansionHeight; + if (!mQsExpanded) { + setQsExpansion(mQsMinExpansionHeight); + positionClockAndNotifications(); + mNotificationStackScroller.setStackHeight(getExpandedHeight()); } } @@ -162,7 +165,8 @@ public class NotificationPanelView extends PanelView implements private void positionClockAndNotifications() { boolean animateClock = mNotificationStackScroller.isAddOrRemoveAnimationPending(); if (mStatusBar.getBarState() != StatusBarState.KEYGUARD) { - mStackScrollerIntrinsicPadding = mHeader.getBottom() + mNotificationTopPadding; + mStackScrollerIntrinsicPadding = mHeader.getBottom() + mQsPeekHeight + + mNotificationTopPadding; mTopPaddingAdjustment = 0; } else { mClockPositionAlgorithm.setup( @@ -452,29 +456,38 @@ public class NotificationPanelView extends PanelView implements setQsExpansion(height); } - private void expandQs() { - mHeader.setExpanded(true); - mNotificationStackScroller.setEnabled(false); - mScrollView.setVisibility(View.VISIBLE); - mQsExpanded = true; + private void setQsExpanded(boolean expanded) { + boolean changed = mQsExpanded != expanded; + if (changed) { + mQsExpanded = expanded; + updateQsState(); + } + } + + public void setKeyguardShowing(boolean keyguardShowing) { + mKeyguardShowing = keyguardShowing; + updateQsState(); } - private void collapseQs() { - mHeader.setExpanded(false); - mNotificationStackScroller.setEnabled(true); - mScrollView.setVisibility(View.INVISIBLE); - mQsExpanded = false; + private void updateQsState() { + mHeader.setExpanded(mQsExpanded); + mNotificationStackScroller.setEnabled(!mQsExpanded); + mQsPanel.setVisibility(mQsExpanded ? View.VISIBLE : View.INVISIBLE); + mQsContainer.setVisibility(mKeyguardShowing && !mQsExpanded + ? View.INVISIBLE + : View.VISIBLE); + mScrollView.setTouchEnabled(mQsExpanded); } private void setQsExpansion(float height) { height = Math.min(Math.max(height, mQsMinExpansionHeight), mQsMaxExpansionHeight); if (height > mQsMinExpansionHeight && !mQsExpanded) { - expandQs(); + setQsExpanded(true); } else if (height <= mQsMinExpansionHeight && mQsExpanded) { - collapseQs(); + setQsExpanded(false); } mQsExpansionHeight = height; - mHeader.setExpansion(height); + mHeader.setExpansion(height - mQsPeekHeight); setQsTranslation(height); setQsStackScrollerPadding(height); mStatusBar.userActivity(); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ObservableScrollView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ObservableScrollView.java index c4e61d0..ea5b309 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ObservableScrollView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ObservableScrollView.java @@ -30,6 +30,7 @@ public class ObservableScrollView extends ScrollView { private Listener mListener; private int mLastOverscrollAmount; private boolean mDispatchingTouchEvent; + private boolean mTouchEnabled = true; public ObservableScrollView(Context context, AttributeSet attrs) { super(context, attrs); @@ -39,6 +40,10 @@ public class ObservableScrollView extends ScrollView { mListener = listener; } + public void setTouchEnabled(boolean touchEnabled) { + mTouchEnabled = touchEnabled; + } + public boolean isScrolledToBottom() { return getScrollY() == getMaxScrollY(); } @@ -59,6 +64,9 @@ public class ObservableScrollView extends ScrollView { @Override public boolean dispatchTouchEvent(MotionEvent ev) { + if (!mTouchEnabled) { + return false; + } mDispatchingTouchEvent = true; boolean result = super.dispatchTouchEvent(ev); mDispatchingTouchEvent = false; 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 0922abd..28367d0e 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java @@ -2770,9 +2770,11 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, if (mState == StatusBarState.KEYGUARD || mState == StatusBarState.SHADE_LOCKED) { mKeyguardBottomArea.setVisibility(View.VISIBLE); mHeader.setKeyguardShowing(true); + mNotificationPanel.setKeyguardShowing(true); } else { mKeyguardBottomArea.setVisibility(View.GONE); mHeader.setKeyguardShowing(false); + mNotificationPanel.setKeyguardShowing(false); } updateStackScrollerState(); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarHeaderView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarHeaderView.java index 389e725..3ead5df 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarHeaderView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarHeaderView.java @@ -38,6 +38,11 @@ import com.android.systemui.statusbar.policy.UserInfoController; */ public class StatusBarHeaderView extends RelativeLayout implements View.OnClickListener { + /** + * How much the header expansion gets rubberbanded while expanding the panel. + */ + private static final float EXPANSION_RUBBERBAND_FACTOR = 0.35f; + private boolean mExpanded; private boolean mKeyguardShowing; @@ -128,6 +133,7 @@ public class StatusBarHeaderView extends RelativeLayout implements View.OnClickL updateVisibilities(); updateSystemIconsLayoutParams(); updateBrightnessControllerState(); + updateZTranslation(); if (mQSPanel != null) { mQSPanel.setExpanded(expanded); } @@ -202,18 +208,25 @@ public class StatusBarHeaderView extends RelativeLayout implements View.OnClickL } } + private void updateZTranslation() { + + // If we are on the Keyguard, we need to set our z position to zero, so we don't get + // shadows. + if (mKeyguardShowing && !mExpanded) { + setZ(0); + } else { + setTranslationZ(0); + } + } + public void setExpansion(float height) { + height = (height - mCollapsedHeight) * EXPANSION_RUBBERBAND_FACTOR + mCollapsedHeight; if (height < mCollapsedHeight) { height = mCollapsedHeight; } if (height > mExpandedHeight) { height = mExpandedHeight; } - if (mExpanded) { - mBackground.setTranslationY(-(mExpandedHeight - height)); - } else { - mBackground.setTranslationY(0); - } setClipping(height); } @@ -247,14 +260,10 @@ public class StatusBarHeaderView extends RelativeLayout implements View.OnClickL public void setKeyguardShowing(boolean keyguardShowing) { mKeyguardShowing = keyguardShowing; - if (keyguardShowing) { - setZ(0); - } else { - setTranslationZ(0); - } updateHeights(); updateWidth(); updateVisibilities(); + updateZTranslation(); } public void setUserInfoController(UserInfoController userInfoController) { |