From 8e72c9e19cfb0b6c1463fa841f1dd02be8f3b4e1 Mon Sep 17 00:00:00 2001 From: Daniel Sandler Date: Wed, 15 Aug 2012 00:09:26 -0400 Subject: [PATCH] Quick settings come to all Android devices. I mean, real soon now. Change-Id: I9a15b49f271e7ae06eb48a402f58270d8adccbf4 --- .../res/drawable-nodpi/qs_coming_soon.png | Bin 0 -> 29933 bytes .../res/layout-sw600dp/super_status_bar.xml | 8 +++- .../SystemUI/res/layout/quick_settings.xml | 45 ++++++++++++++++++ .../SystemUI/res/layout/super_status_bar.xml | 5 ++ .../res/values-sw600dp-land/dimens.xml | 4 -- .../SystemUI/res/values-sw600dp/dimens.xml | 9 ++-- packages/SystemUI/res/values/dimens.xml | 3 +- .../systemui/statusbar/phone/PanelBar.java | 13 ++--- .../statusbar/phone/PhoneStatusBar.java | 31 +++++++++--- .../statusbar/phone/PhoneStatusBarView.java | 13 ++++- 10 files changed, 108 insertions(+), 23 deletions(-) create mode 100644 packages/SystemUI/res/drawable-nodpi/qs_coming_soon.png create mode 100644 packages/SystemUI/res/layout/quick_settings.xml diff --git a/packages/SystemUI/res/drawable-nodpi/qs_coming_soon.png b/packages/SystemUI/res/drawable-nodpi/qs_coming_soon.png new file mode 100644 index 0000000000000000000000000000000000000000..47c89b1d6caac871e7a7f0b0ffdf20eb87b4dd60 GIT binary patch literal 29933 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 + diff --git a/packages/SystemUI/res/layout/quick_settings.xml b/packages/SystemUI/res/layout/quick_settings.xml new file mode 100644 index 0000000000000..a62a470bbe025 --- /dev/null +++ b/packages/SystemUI/res/layout/quick_settings.xml @@ -0,0 +1,45 @@ + + + + + + + + + \ No newline at end of file diff --git a/packages/SystemUI/res/layout/super_status_bar.xml b/packages/SystemUI/res/layout/super_status_bar.xml index ad905bd12afc2..ad6b8f48e2a40 100644 --- a/packages/SystemUI/res/layout/super_status_bar.xml +++ b/packages/SystemUI/res/layout/super_status_bar.xml @@ -36,11 +36,16 @@ android:id="@+id/panel_holder" android:layout_width="match_parent" android:layout_height="match_parent" + android:layout_marginTop="@*android:dimen/status_bar_height" > + diff --git a/packages/SystemUI/res/values-sw600dp-land/dimens.xml b/packages/SystemUI/res/values-sw600dp-land/dimens.xml index afa0b20785547..c6c07195f9c7a 100644 --- a/packages/SystemUI/res/values-sw600dp-land/dimens.xml +++ b/packages/SystemUI/res/values-sw600dp-land/dimens.xml @@ -19,8 +19,4 @@ 0dp 32dp - - - - 0x33 diff --git a/packages/SystemUI/res/values-sw600dp/dimens.xml b/packages/SystemUI/res/values-sw600dp/dimens.xml index 2b5248f9303ad..b6faff316636a 100644 --- a/packages/SystemUI/res/values-sw600dp/dimens.xml +++ b/packages/SystemUI/res/values-sw600dp/dimens.xml @@ -21,11 +21,12 @@ 192dp - 0dp + 16dp - - - 0x31 + + + 0x33 + 0x35 430dip diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml index 8204e95ef87b8..95393737c254a 100644 --- a/packages/SystemUI/res/values/dimens.xml +++ b/packages/SystemUI/res/values/dimens.xml @@ -158,9 +158,10 @@ 0dp 0dp - + 0x37 + 0x37 24dp diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelBar.java index b2c72e8671956..1ea5b3e338414 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelBar.java @@ -18,7 +18,7 @@ public class PanelBar extends FrameLayout { private PanelHolder mPanelHolder; private ArrayList mPanels = new ArrayList(); - private PanelView mTouchingPanel; + protected PanelView mTouchingPanel; public PanelBar(Context context, AttributeSet attrs) { super(context, attrs); @@ -71,24 +71,25 @@ public class PanelBar extends FrameLayout { public void panelExpansionChanged(PanelView panel, float frac) { boolean fullyClosed = true; - boolean fullyOpened = false; + PanelView fullyOpenedPanel = null; for (PanelView pv : mPanels) { if (pv.getExpandedHeight() > 0f) { fullyClosed = false; final float thisFrac = pv.getExpandedFraction(); LOG("panel %s: f=%.1f", pv, thisFrac); if (panel == pv) { - if (thisFrac == 1f) fullyOpened = true; + if (thisFrac == 1f) fullyOpenedPanel = panel; } else { pv.setExpandedFraction(1f-frac); } } } - if (fullyOpened) onPanelFullyOpened(); + if (fullyOpenedPanel != null) onPanelFullyOpened(fullyOpenedPanel); if (fullyClosed) onAllPanelsCollapsed(); else onPanelPeeked(); - LOG("panelExpansionChanged: [%s%s ]", fullyOpened?" fullyOpened":"", fullyClosed?" fullyClosed":""); + LOG("panelExpansionChanged: [%s%s ]", + (fullyOpenedPanel!=null)?" fullyOpened":"", fullyClosed?" fullyClosed":""); } public void collapseAllPanels(boolean animate) { @@ -109,7 +110,7 @@ public class PanelBar extends FrameLayout { LOG("onAllPanelsCollapsed"); } - public void onPanelFullyOpened() { + public void onPanelFullyOpened(PanelView openPanel) { LOG("onPanelFullyOpened"); } } 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 0f84c2f27367c..4d4adcb85a598 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java @@ -169,12 +169,16 @@ public class PhoneStatusBar extends BaseStatusBar { PanelView mNotificationPanel; // the sliding/resizing panel within the notification window ScrollView mScrollView; View mExpandedContents; - int mNotificationPanelMarginBottomPx, mNotificationPanelMarginLeftPx; final Rect mNotificationPanelBackgroundPadding = new Rect(); int mNotificationPanelGravity; + int mNotificationPanelMarginBottomPx, mNotificationPanelMarginPx; int mNotificationPanelMinHeight; boolean mNotificationPanelIsFullScreenWidth; + // settings + PanelView mSettingsPanel; + int mSettingsPanelGravity; + // top bar View mClearButton; View mSettingsButton; @@ -310,22 +314,29 @@ public class PhoneStatusBar extends BaseStatusBar { mNotificationPanel = (PanelView) mStatusBarWindow.findViewById(R.id.notification_panel); // don't allow clicks on the panel to pass through to the background where they will cause the panel to close - mNotificationPanel.setOnTouchListener(new View.OnTouchListener() { + View.OnTouchListener clickStopper = new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { return true; } - }); + }; + mNotificationPanel.setOnTouchListener(clickStopper); mNotificationPanelIsFullScreenWidth = (mNotificationPanel.getLayoutParams().width == ViewGroup.LayoutParams.MATCH_PARENT); mNotificationPanel.setSystemUiVisibility( View.STATUS_BAR_DISABLE_NOTIFICATION_TICKER | (mNotificationPanelIsFullScreenWidth ? 0 : View.STATUS_BAR_DISABLE_SYSTEM_INFO)); + // quick settings (WIP) + mSettingsPanel = (PanelView) mStatusBarWindow.findViewById(R.id.settings_panel); + mSettingsPanel.setOnTouchListener(clickStopper); + if (!ActivityManager.isHighEndGfx(mDisplay)) { mStatusBarWindow.setBackground(null); mNotificationPanel.setBackground(new FastColorDrawable(context.getResources().getColor( R.color.notification_panel_solid_background))); + mSettingsPanel.setBackground(new FastColorDrawable(context.getResources().getColor( + R.color.notification_panel_solid_background))); } if (ENABLE_INTRUDERS) { mIntruderAlertView = (IntruderAlertView) View.inflate(context, R.layout.intruder_alert, null); @@ -1634,8 +1645,12 @@ public class PhoneStatusBar extends BaseStatusBar { if (DEBUG) Slog.v(TAG, "updateExpandedViewPos"); FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) mNotificationPanel.getLayoutParams(); lp.gravity = mNotificationPanelGravity; - lp.leftMargin = mNotificationPanelMarginLeftPx; + lp.leftMargin = mNotificationPanelMarginPx; mNotificationPanel.setLayoutParams(lp); + lp = (FrameLayout.LayoutParams) mSettingsPanel.getLayoutParams(); + lp.gravity = mSettingsPanelGravity; + lp.rightMargin = mNotificationPanelMarginPx; + mSettingsPanel.setLayoutParams(lp); } // called by makeStatusbar and also by PhoneStatusBarView @@ -1872,11 +1887,15 @@ public class PhoneStatusBar extends BaseStatusBar { mNotificationPanelMarginBottomPx = (int) res.getDimension(R.dimen.notification_panel_margin_bottom); - mNotificationPanelMarginLeftPx + mNotificationPanelMarginPx = (int) res.getDimension(R.dimen.notification_panel_margin_left); mNotificationPanelGravity = res.getInteger(R.integer.notification_panel_layout_gravity); if (mNotificationPanelGravity <= 0) { - mNotificationPanelGravity = Gravity.CENTER_VERTICAL | Gravity.TOP; + mNotificationPanelGravity = Gravity.LEFT | Gravity.TOP; + } + mSettingsPanelGravity = res.getInteger(R.integer.settings_panel_layout_gravity); + if (mSettingsPanelGravity <= 0) { + mSettingsPanelGravity = Gravity.RIGHT | Gravity.TOP; } getNinePatchPadding(res.getDrawable(R.drawable.notification_panel_bg), mNotificationPanelBackgroundPadding); final int notificationPanelDecorationHeight = diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java index 6de015349a1c2..25ff9aa4b73fb 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java @@ -42,6 +42,7 @@ public class PhoneStatusBarView extends PanelBar { private static final String TAG = "PhoneStatusBarView"; PhoneStatusBar mBar; int mScrimColor; + PanelView mFadingPanel = null; public PhoneStatusBarView(Context context, AttributeSet attrs) { super(context, attrs); @@ -76,12 +77,21 @@ public class PhoneStatusBarView extends PanelBar { public void onPanelPeeked() { super.onPanelPeeked(); mBar.makeExpandedVisible(true); + if (mFadingPanel == null) { + mFadingPanel = mTouchingPanel; + } } @Override public void onAllPanelsCollapsed() { super.onAllPanelsCollapsed(); mBar.makeExpandedInvisible(); + mFadingPanel = null; + } + + @Override + public void onPanelFullyOpened(PanelView openPanel) { + mFadingPanel = openPanel; } @Override @@ -98,7 +108,8 @@ public class PhoneStatusBarView extends PanelBar { public void panelExpansionChanged(PanelView pv, float frac) { super.panelExpansionChanged(pv, frac); - if (mScrimColor != 0 && ActivityManager.isHighEndGfx(mBar.mDisplay)) { + if (mFadingPanel == pv + && mScrimColor != 0 && ActivityManager.isHighEndGfx(mBar.mDisplay)) { // woo, special effects final float k = (float)(1f-0.5f*(1f-Math.cos(3.14159f * Math.pow(1f-frac, 2.2f)))); // attenuate background color alpha by k