diff options
| author | 2012-10-15 13:39:38 -0400 | |
|---|---|---|
| committer | 2012-10-16 02:34:09 -0400 | |
| commit | 101784e5605338f22e32f587ffcaa09b582d556c (patch) | |
| tree | 36998b0170fafdfd46565fcc812cb3ac98c57af0 | |
| parent | 3f840c8c3c1c53f046f6d187b2d3c4120b8d8afe (diff) | |
Flipping quick settings!
Bug: 7348917 ╰(°□°╰)
Change-Id: I16923d6d920913a4bd0d78666587ac579ac18da5
25 files changed, 360 insertions, 56 deletions
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_notifications.png b/packages/SystemUI/res/drawable-hdpi/ic_notifications.png Binary files differnew file mode 100644 index 000000000000..612ab72781da --- /dev/null +++ b/packages/SystemUI/res/drawable-hdpi/ic_notifications.png diff --git a/packages/SystemUI/res/drawable-hdpi/ic_notifications2.png b/packages/SystemUI/res/drawable-hdpi/ic_notifications2.png Binary files differnew file mode 100644 index 000000000000..315c48897cf3 --- /dev/null +++ b/packages/SystemUI/res/drawable-hdpi/ic_notifications2.png diff --git a/packages/SystemUI/res/drawable-hdpi/ic_notify_quicksettings_normal.png b/packages/SystemUI/res/drawable-hdpi/ic_notify_quicksettings_normal.png Binary files differindex 55c46b0778e3..172fd55e036c 100644 --- a/packages/SystemUI/res/drawable-hdpi/ic_notify_quicksettings_normal.png +++ b/packages/SystemUI/res/drawable-hdpi/ic_notify_quicksettings_normal.png diff --git a/packages/SystemUI/res/drawable-hdpi/ic_notify_quicksettings_pressed.png b/packages/SystemUI/res/drawable-hdpi/ic_notify_quicksettings_pressed.png Binary files differindex e30cb8f0fb49..5318a6e695e5 100644 --- a/packages/SystemUI/res/drawable-hdpi/ic_notify_quicksettings_pressed.png +++ b/packages/SystemUI/res/drawable-hdpi/ic_notify_quicksettings_pressed.png diff --git a/packages/SystemUI/res/drawable-mdpi/ic_notifications.png b/packages/SystemUI/res/drawable-mdpi/ic_notifications.png Binary files differnew file mode 100644 index 000000000000..612ab72781da --- /dev/null +++ b/packages/SystemUI/res/drawable-mdpi/ic_notifications.png diff --git a/packages/SystemUI/res/drawable-mdpi/ic_notifications2.png b/packages/SystemUI/res/drawable-mdpi/ic_notifications2.png Binary files differnew file mode 100644 index 000000000000..1d07cbf6a75d --- /dev/null +++ b/packages/SystemUI/res/drawable-mdpi/ic_notifications2.png diff --git a/packages/SystemUI/res/drawable-mdpi/ic_notify_quicksettings_normal.png b/packages/SystemUI/res/drawable-mdpi/ic_notify_quicksettings_normal.png Binary files differindex b1910cf157f5..61044246105c 100644 --- a/packages/SystemUI/res/drawable-mdpi/ic_notify_quicksettings_normal.png +++ b/packages/SystemUI/res/drawable-mdpi/ic_notify_quicksettings_normal.png diff --git a/packages/SystemUI/res/drawable-mdpi/ic_notify_quicksettings_pressed.png b/packages/SystemUI/res/drawable-mdpi/ic_notify_quicksettings_pressed.png Binary files differindex 3abafddd037d..625da59a1940 100644 --- a/packages/SystemUI/res/drawable-mdpi/ic_notify_quicksettings_pressed.png +++ b/packages/SystemUI/res/drawable-mdpi/ic_notify_quicksettings_pressed.png diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_notifications.png b/packages/SystemUI/res/drawable-xhdpi/ic_notifications.png Binary files differnew file mode 100644 index 000000000000..28a902c03358 --- /dev/null +++ b/packages/SystemUI/res/drawable-xhdpi/ic_notifications.png diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_notifications2.png b/packages/SystemUI/res/drawable-xhdpi/ic_notifications2.png Binary files differnew file mode 100644 index 000000000000..b02e7a18eb24 --- /dev/null +++ b/packages/SystemUI/res/drawable-xhdpi/ic_notifications2.png diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_notify_quicksettings_normal.png b/packages/SystemUI/res/drawable-xhdpi/ic_notify_quicksettings_normal.png Binary files differindex 5dc93c255885..477c06781c95 100644 --- a/packages/SystemUI/res/drawable-xhdpi/ic_notify_quicksettings_normal.png +++ b/packages/SystemUI/res/drawable-xhdpi/ic_notify_quicksettings_normal.png diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_notify_quicksettings_pressed.png b/packages/SystemUI/res/drawable-xhdpi/ic_notify_quicksettings_pressed.png Binary files differindex a97de79963d5..6e5c4af24065 100644 --- a/packages/SystemUI/res/drawable-xhdpi/ic_notify_quicksettings_pressed.png +++ b/packages/SystemUI/res/drawable-xhdpi/ic_notify_quicksettings_pressed.png diff --git a/packages/SystemUI/res/drawable/ic_notifications.xml b/packages/SystemUI/res/drawable/ic_notifications.xml new file mode 100644 index 000000000000..2c8012e0b997 --- /dev/null +++ b/packages/SystemUI/res/drawable/ic_notifications.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2012 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<selector xmlns:android="http://schemas.android.com/apk/res/android"> + <item android:state_pressed="true" + android:drawable="@drawable/ic_notifications" /> + <item + android:drawable="@drawable/ic_notifications" /> +</selector> + diff --git a/packages/SystemUI/res/drawable/ic_notify_button_bg.xml b/packages/SystemUI/res/drawable/ic_notify_button_bg.xml new file mode 100644 index 000000000000..85f1ea215849 --- /dev/null +++ b/packages/SystemUI/res/drawable/ic_notify_button_bg.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2012 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<selector xmlns:android="http://schemas.android.com/apk/res/android"> + <item android:state_pressed="true" android:drawable="@*android:drawable/list_selector_pressed_holo_dark" /> + <item android:drawable="@*android:drawable/list_selector_disabled_holo_dark" /> +</selector> diff --git a/packages/SystemUI/res/drawable/ic_notify_clear.xml b/packages/SystemUI/res/drawable/ic_notify_clear.xml index 9c432b299890..21631985821e 100644 --- a/packages/SystemUI/res/drawable/ic_notify_clear.xml +++ b/packages/SystemUI/res/drawable/ic_notify_clear.xml @@ -16,6 +16,6 @@ <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" - android:drawable="@drawable/ic_notify_clear_pressed" /> + android:drawable="@drawable/ic_notify_clear_normal" /> <item android:drawable="@drawable/ic_notify_clear_normal" /> </selector> diff --git a/packages/SystemUI/res/drawable/ic_notify_settings.xml b/packages/SystemUI/res/drawable/ic_notify_settings.xml index 6579d8e87ac3..9303ca4c3d60 100644 --- a/packages/SystemUI/res/drawable/ic_notify_settings.xml +++ b/packages/SystemUI/res/drawable/ic_notify_settings.xml @@ -16,7 +16,7 @@ <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" - android:drawable="@drawable/ic_notify_settings_pressed" /> + android:drawable="@drawable/ic_notify_settings_normal" /> <item android:drawable="@drawable/ic_notify_settings_normal" /> </selector> diff --git a/packages/SystemUI/res/layout/flip_settings.xml b/packages/SystemUI/res/layout/flip_settings.xml new file mode 100644 index 000000000000..1b8898c502ed --- /dev/null +++ b/packages/SystemUI/res/layout/flip_settings.xml @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2012 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<com.android.systemui.statusbar.phone.QuickSettingsScrollView + xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginBottom="@dimen/close_handle_underlap" + android:overScrollMode="ifContentScrolls" + > + <com.android.systemui.statusbar.phone.QuickSettingsContainerView + android:id="@+id/quick_settings_container" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:animateLayoutChanges="true" + android:columnCount="@integer/quick_settings_num_columns" + /> +</com.android.systemui.statusbar.phone.QuickSettingsScrollView>
\ No newline at end of file diff --git a/packages/SystemUI/res/layout/status_bar_expanded.xml b/packages/SystemUI/res/layout/status_bar_expanded.xml index cb4c22713dcf..5408f7695620 100644 --- a/packages/SystemUI/res/layout/status_bar_expanded.xml +++ b/packages/SystemUI/res/layout/status_bar_expanded.xml @@ -50,7 +50,7 @@ android:layout_height="wrap_content" android:layout_marginBottom="@dimen/close_handle_underlap" android:orientation="vertical" - android:animateLayoutChanges="true" + android:animateLayoutChanges="false" > <include layout="@layout/status_bar_expanded_header" @@ -68,19 +68,30 @@ android:visibility="gone" /> - <ScrollView - android:id="@+id/scroll" + <FrameLayout android:layout_width="match_parent" android:layout_height="wrap_content" - android:fadingEdge="none" - android:overScrollMode="ifContentScrolls" > - <com.android.systemui.statusbar.policy.NotificationRowLayout - android:id="@+id/latestItems" + <ViewStub android:id="@+id/flip_settings_stub" + android:layout="@layout/flip_settings" android:layout_width="match_parent" android:layout_height="wrap_content" - systemui:rowHeight="@dimen/notification_row_min_height" /> - </ScrollView> + + <ScrollView + android:id="@+id/scroll" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:fadingEdge="none" + android:overScrollMode="ifContentScrolls" + > + <com.android.systemui.statusbar.policy.NotificationRowLayout + android:id="@+id/latestItems" + android:layout_width="match_parent" + android:layout_height="wrap_content" + systemui:rowHeight="@dimen/notification_row_min_height" + /> + </ScrollView> + </FrameLayout> </LinearLayout> </com.android.systemui.statusbar.phone.NotificationPanelView><!-- end of sliding panel --> diff --git a/packages/SystemUI/res/layout/status_bar_expanded_header.xml b/packages/SystemUI/res/layout/status_bar_expanded_header.xml index c9218375182a..c13405a2c236 100644 --- a/packages/SystemUI/res/layout/status_bar_expanded_header.xml +++ b/packages/SystemUI/res/layout/status_bar_expanded_header.xml @@ -70,21 +70,37 @@ android:textColor="#00A040" android:padding="2dp" /> - - <ImageView android:id="@+id/settings_button" - android:layout_width="50dp" - android:layout_height="50dp" - android:scaleType="center" - android:src="@drawable/ic_notify_settings" - android:contentDescription="@string/accessibility_settings_button" - /> <ImageView android:id="@+id/clear_all_button" android:layout_width="50dp" android:layout_height="50dp" - android:layout_marginLeft="12dp" + android:layout_marginRight="12dp" android:scaleType="center" android:src="@drawable/ic_notify_clear" + android:background="@drawable/ic_notify_button_bg" android:contentDescription="@string/accessibility_clear_all" /> + + <FrameLayout + android:layout_width="50dp" + android:layout_height="50dp" + > + <ImageView android:id="@+id/settings_button" + android:layout_width="50dp" + android:layout_height="50dp" + android:scaleType="center" + android:src="@drawable/ic_notify_settings" + android:background="@drawable/ic_notify_button_bg" + android:contentDescription="@string/accessibility_settings_button" + /> + <ImageView android:id="@+id/notification_button" + android:layout_width="50dp" + android:layout_height="50dp" + android:scaleType="center" + android:src="@drawable/ic_notifications" + android:background="@drawable/ic_notify_button_bg" + android:visibility="gone" + android:contentDescription="@string/accessibility_notifications_button" + /> + </FrameLayout> </LinearLayout> diff --git a/packages/SystemUI/res/values-sw600dp/config.xml b/packages/SystemUI/res/values-sw600dp/config.xml index 50575d062232..48a02ab2ad4e 100644 --- a/packages/SystemUI/res/values-sw600dp/config.xml +++ b/packages/SystemUI/res/values-sw600dp/config.xml @@ -31,4 +31,7 @@ <!-- Whether rotation lock shows up in quick settings or not --> <bool name="quick_settings_show_rotation_lock">true</bool> + + <!-- Enable the "flip settings" panel --> + <bool name="config_hasFlipSettingsPanel">false</bool> </resources> diff --git a/packages/SystemUI/res/values/config.xml b/packages/SystemUI/res/values/config.xml index aec9555215bb..a27630db17fe 100644 --- a/packages/SystemUI/res/values/config.xml +++ b/packages/SystemUI/res/values/config.xml @@ -97,7 +97,10 @@ <integer name="blinds_pop_duration_ms">10</integer> - <!-- Disable quick settings by default --> - <bool name="config_hasSettingsPanel">false</bool> + <!-- Disable the separate quick settings panel --> + <bool name="config_hasSettingsPanel">true</bool> + + <!-- Enable the "flip settings" panel --> + <bool name="config_hasFlipSettingsPanel">true</bool> </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 75a259840ebf..64bce22d2a8d 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java @@ -20,6 +20,7 @@ import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.AnimatorSet; import android.animation.ObjectAnimator; +import android.animation.TimeInterpolator; import android.app.ActivityManager; import android.app.ActivityManagerNative; import android.app.Notification; @@ -61,6 +62,7 @@ import android.view.VelocityTracker; import android.view.View; import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; +import android.view.ViewPropertyAnimator; import android.view.ViewStub; import android.view.WindowManager; import android.view.animation.AccelerateInterpolator; @@ -188,13 +190,16 @@ public class PhoneStatusBar extends BaseStatusBar { TextView mNotificationPanelDebugText; // settings - boolean mHasSettingsPanel; + QuickSettings mQS; + boolean mHasSettingsPanel, mHasFlipSettings; SettingsPanelView mSettingsPanel; + View mFlipSettingsView; + QuickSettingsContainerView mSettingsContainer; int mSettingsPanelGravity; // top bar View mClearButton; - ImageView mSettingsButton; + ImageView mSettingsButton, mNotificationButton; // carrier/wifi label private TextView mCarrierLabel; @@ -290,8 +295,12 @@ public class PhoneStatusBar extends BaseStatusBar { if (MULTIUSER_DEBUG) Slog.d(TAG, String.format("User setup changed: " + "selfChange=%s userSetup=%s mUserSetup=%s", selfChange, userSetup, mUserSetup)); - if (mSettingsPanel != null) + if (mSettingsButton != null) { + mSettingsButton.setVisibility(userSetup ? View.VISIBLE : View.INVISIBLE); + } + if (mSettingsPanel != null) { mSettingsPanel.setEnabled(userSetup); + } if (userSetup != mUserSetup) { mUserSetup = userSetup; if (!mUserSetup && mStatusBarView != null) @@ -355,10 +364,6 @@ public class PhoneStatusBar extends BaseStatusBar { mNotificationPanel = (PanelView) mStatusBarWindow.findViewById(R.id.notification_panel); mNotificationPanelIsFullScreenWidth = (mNotificationPanel.getLayoutParams().width == ViewGroup.LayoutParams.MATCH_PARENT); - mNotificationPanel.setSystemUiVisibility( - View.STATUS_BAR_DISABLE_NOTIFICATION_TICKER | - View.STATUS_BAR_DISABLE_NOTIFICATION_ICONS | - View.STATUS_BAR_DISABLE_CLOCK); // make the header non-responsive to clicks mNotificationPanel.findViewById(R.id.header).setOnTouchListener( @@ -423,6 +428,7 @@ public class PhoneStatusBar extends BaseStatusBar { mDateView = (DateView)mStatusBarWindow.findViewById(R.id.date); mHasSettingsPanel = res.getBoolean(R.bool.config_hasSettingsPanel); + mHasFlipSettings = res.getBoolean(R.bool.config_hasFlipSettingsPanel); mSettingsButton = (ImageView) mStatusBarWindow.findViewById(R.id.settings_button); if (mSettingsButton != null) { @@ -442,9 +448,19 @@ public class PhoneStatusBar extends BaseStatusBar { mSettingsButton.setImageResource(R.drawable.ic_notify_settings); } } - + if (mHasFlipSettings) { + mNotificationButton = (ImageView) mStatusBarWindow.findViewById(R.id.notification_button); + if (mNotificationButton != null) { + mNotificationButton.setOnClickListener(mNotificationButtonListener); + } + } + mScrollView = (ScrollView)mStatusBarWindow.findViewById(R.id.scroll); mScrollView.setVerticalScrollBarEnabled(false); // less drawing during pulldowns + mScrollView.setSystemUiVisibility( + View.STATUS_BAR_DISABLE_NOTIFICATION_TICKER | + View.STATUS_BAR_DISABLE_NOTIFICATION_ICONS | + View.STATUS_BAR_DISABLE_CLOCK); mTicker = new MyTicker(context, mStatusBarView); @@ -505,28 +521,52 @@ public class PhoneStatusBar extends BaseStatusBar { // Quick Settings (where available, some restrictions apply) if (mHasSettingsPanel) { - final View settings_stub - = mStatusBarWindow.findViewById(R.id.quick_settings_stub); - - if (settings_stub != null) { - mSettingsPanel = (SettingsPanelView) ((ViewStub)settings_stub).inflate(); + // first, figure out where quick settings should be inflated + final View settings_stub; + if (mHasFlipSettings) { + // a version of quick settings that flips around behind the notifications + settings_stub = mStatusBarWindow.findViewById(R.id.flip_settings_stub); + if (settings_stub != null) { + mFlipSettingsView = ((ViewStub)settings_stub).inflate(); + mFlipSettingsView.setVisibility(View.GONE); + mFlipSettingsView.setVerticalScrollBarEnabled(false); + } } else { - mSettingsPanel = (SettingsPanelView) mStatusBarWindow.findViewById(R.id.settings_panel); + // full quick settings panel + settings_stub = mStatusBarWindow.findViewById(R.id.quick_settings_stub); + if (settings_stub != null) { + mSettingsPanel = (SettingsPanelView) ((ViewStub)settings_stub).inflate(); + } else { + mSettingsPanel = (SettingsPanelView) mStatusBarWindow.findViewById(R.id.settings_panel); + } + + if (mSettingsPanel != null) { + mSettingsPanel.setBar(mStatusBarView); + + if (!ActivityManager.isHighEndGfx()) { + mSettingsPanel.setBackground(new FastColorDrawable(context.getResources().getColor( + R.color.notification_panel_solid_background))); + } + } } - if (mSettingsPanel != null) { - mSettingsPanel.setBar(mStatusBarView); - mSettingsPanel.setService(this); - mSettingsPanel.setup(mNetworkController, mBluetoothController, mBatteryController, - mLocationController); - mSettingsPanel.setSystemUiVisibility( - View.STATUS_BAR_DISABLE_NOTIFICATION_TICKER + // wherever you find it, Quick Settings needs a container to survive + mSettingsContainer = (QuickSettingsContainerView) + mStatusBarWindow.findViewById(R.id.quick_settings_container); + if (mSettingsContainer != null) { + mQS = new QuickSettings(mContext, mSettingsContainer); + mSettingsContainer.setSystemUiVisibility( + View.STATUS_BAR_DISABLE_NOTIFICATION_TICKER | View.STATUS_BAR_DISABLE_SYSTEM_INFO); - - if (!ActivityManager.isHighEndGfx()) { - mSettingsPanel.setBackground(new FastColorDrawable(context.getResources().getColor( - R.color.notification_panel_solid_background))); + + if (mSettingsPanel != null) { + mSettingsPanel.setQuickSettings(mQS); } + mQS.setService(this); + mQS.setup(mNetworkController, mBluetoothController, mBatteryController, + mLocationController); + } else { + mQS = null; // fly away, be free } } @@ -984,7 +1024,8 @@ public class PhoneStatusBar extends BaseStatusBar { final boolean emergencyCallsShownElsewhere = mEmergencyCallLabel != null; final boolean makeVisible = !(emergencyCallsShownElsewhere && mNetworkController.isEmergencyOnly()) - && mPile.getHeight() < (mNotificationPanel.getHeight() - mCarrierLabelHeight - mNotificationHeaderHeight); + && mPile.getHeight() < (mNotificationPanel.getHeight() - mCarrierLabelHeight - mNotificationHeaderHeight) + && mScrollView.getVisibility() == View.VISIBLE; if (force || mCarrierLabelVisible != makeVisible) { mCarrierLabelVisible = makeVisible; @@ -1239,6 +1280,17 @@ public class PhoneStatusBar extends BaseStatusBar { return; } + if (mHasFlipSettings && !mExpandedVisible) { + // reset things to their proper state + mScrollView.setScaleX(1f); + mScrollView.setVisibility(View.VISIBLE); + mSettingsButton.setAlpha(1f); + mSettingsButton.setVisibility(View.VISIBLE); + mNotificationPanel.setVisibility(View.GONE); + mFlipSettingsView.setVisibility(View.GONE); + mNotificationButton.setVisibility(View.GONE); + } + mExpandedVisible = true; mPile.setLayoutTransitionsEnabled(true); if (mNavigationBarView != null) @@ -1293,6 +1345,53 @@ public class PhoneStatusBar extends BaseStatusBar { mStatusBarView.collapseAllPanels(true); } + public ViewPropertyAnimator setVisibilityWhenDone( + final ViewPropertyAnimator a, final View v, final int vis) { + a.setListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + v.setVisibility(vis); + a.setListener(null); // oneshot + } + }); + return a; + } + + public Animator setVisibilityWhenDone( + final Animator a, final View v, final int vis) { + a.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + v.setVisibility(vis); + } + }); + return a; + } + + public Animator interpolator(TimeInterpolator ti, Animator a) { + a.setInterpolator(ti); + return a; + } + + public Animator startDelay(int d, Animator a) { + a.setStartDelay(d); + return a; + } + + public Animator start(Animator a) { + a.start(); + return a; + } + + final TimeInterpolator mAccelerateInterpolator = new AccelerateInterpolator(); + final TimeInterpolator mDecelerateInterpolator = new DecelerateInterpolator(); + final int FLIP_DURATION_OUT = 125; + final int FLIP_DURATION_IN = 225; + final int FLIP_DURATION = (FLIP_DURATION_IN + FLIP_DURATION_OUT); + + Animator mScrollViewAnim, mFlipSettingsViewAnim, mNotificationButtonAnim, + mSettingsButtonAnim, mClearButtonAnim; + @Override public void animateExpandNotificationsPanel() { if (SPEW) Slog.d(TAG, "animateExpand: mExpandedVisible=" + mExpandedVisible); @@ -1301,6 +1400,47 @@ public class PhoneStatusBar extends BaseStatusBar { } mNotificationPanel.expand(); + if (mHasFlipSettings) { + if (mScrollView.getVisibility() != View.VISIBLE) { + if (mFlipSettingsViewAnim != null) mFlipSettingsViewAnim.cancel(); + if (mScrollViewAnim != null) mScrollViewAnim.cancel(); + if (mSettingsButtonAnim != null) mSettingsButtonAnim.cancel(); + if (mNotificationButtonAnim != null) mNotificationButtonAnim.cancel(); + if (mClearButtonAnim != null) mClearButtonAnim.cancel(); + + mScrollView.setVisibility(View.VISIBLE); + mScrollViewAnim = start( + startDelay(FLIP_DURATION_OUT, + interpolator(mDecelerateInterpolator, + ObjectAnimator.ofFloat(mScrollView, View.SCALE_X, 0f, 1f) + .setDuration(FLIP_DURATION_IN) + ))); + mFlipSettingsViewAnim = start( + setVisibilityWhenDone( + interpolator(mAccelerateInterpolator, + ObjectAnimator.ofFloat(mFlipSettingsView, View.SCALE_X, 1f, 0f) + ) + .setDuration(FLIP_DURATION_OUT), + mFlipSettingsView, View.INVISIBLE)); + mNotificationButtonAnim = start( + setVisibilityWhenDone( + ObjectAnimator.ofFloat(mNotificationButton, View.ALPHA, 0f) + .setDuration(FLIP_DURATION), + mNotificationButton, View.INVISIBLE)); + mSettingsButton.setVisibility(View.VISIBLE); + mSettingsButtonAnim = start( + ObjectAnimator.ofFloat(mSettingsButton, View.ALPHA, 1f) + .setDuration(FLIP_DURATION)); + mClearButton.setVisibility(View.VISIBLE); + mClearButton.setAlpha(0f); + setAreThereNotifications(); // this will show/hide the button as necessary + mNotificationPanel.postDelayed(new Runnable() { + public void run() { + updateCarrierLabelVisibility(false); + } + }, FLIP_DURATION - 150); + } + } if (false) postStartTracing(); } @@ -1312,7 +1452,53 @@ public class PhoneStatusBar extends BaseStatusBar { return; } - if (mSettingsPanel != null) mSettingsPanel.expand(); + if (mHasFlipSettings) { + mNotificationPanel.expand(); + if (mFlipSettingsView.getVisibility() != View.VISIBLE) { + if (mFlipSettingsViewAnim != null) mFlipSettingsViewAnim.cancel(); + if (mScrollViewAnim != null) mScrollViewAnim.cancel(); + if (mSettingsButtonAnim != null) mSettingsButtonAnim.cancel(); + if (mNotificationButtonAnim != null) mNotificationButtonAnim.cancel(); + if (mClearButtonAnim != null) mClearButtonAnim.cancel(); + + mFlipSettingsView.setVisibility(View.VISIBLE); + mFlipSettingsView.setScaleX(0f); + mFlipSettingsViewAnim = start( + startDelay(FLIP_DURATION_OUT, + interpolator(mDecelerateInterpolator, + ObjectAnimator.ofFloat(mFlipSettingsView, View.SCALE_X, 0f, 1f) + .setDuration(FLIP_DURATION_IN) + ))); + mScrollViewAnim = start( + setVisibilityWhenDone( + interpolator(mAccelerateInterpolator, + ObjectAnimator.ofFloat(mScrollView, View.SCALE_X, 1f, 0f) + ) + .setDuration(FLIP_DURATION_OUT), + mScrollView, View.INVISIBLE)); + mSettingsButtonAnim = start( + setVisibilityWhenDone( + ObjectAnimator.ofFloat(mSettingsButton, View.ALPHA, 0f) + .setDuration(FLIP_DURATION), + mScrollView, View.INVISIBLE)); + mNotificationButton.setVisibility(View.VISIBLE); + mNotificationButtonAnim = start( + ObjectAnimator.ofFloat(mNotificationButton, View.ALPHA, 1f) + .setDuration(FLIP_DURATION)); + mClearButtonAnim = start( + setVisibilityWhenDone( + ObjectAnimator.ofFloat(mClearButton, View.ALPHA, 0f) + .setDuration(FLIP_DURATION), + mClearButton, View.INVISIBLE)); + mNotificationPanel.postDelayed(new Runnable() { + public void run() { + updateCarrierLabelVisibility(false); + } + }, FLIP_DURATION - 150); + } + } else if (mSettingsPanel != null) { + mSettingsPanel.expand(); + } if (false) postStartTracing(); } @@ -1622,7 +1808,7 @@ public class PhoneStatusBar extends BaseStatusBar { mCommandQueue.setNavigationIconHints( altBack ? (mNavigationIconHints | StatusBarManager.NAVIGATION_HINT_BACK_ALT) : (mNavigationIconHints & ~StatusBarManager.NAVIGATION_HINT_BACK_ALT)); - if (mSettingsPanel != null) mSettingsPanel.setImeWindowStatus(vis > 0); + if (mQS != null) mQS.setImeWindowStatus(vis > 0); } @Override @@ -1960,6 +2146,12 @@ public class PhoneStatusBar extends BaseStatusBar { } }; + private View.OnClickListener mNotificationButtonListener = new View.OnClickListener() { + public void onClick(View v) { + animateExpandNotificationsPanel(); + } + }; + private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() { public void onReceive(Context context, Intent intent) { Slog.v(TAG, "onReceive: " + intent); @@ -2050,7 +2242,7 @@ public class PhoneStatusBar extends BaseStatusBar { } // Update the QuickSettings container - if (mSettingsPanel != null) mSettingsPanel.updateResources(); + if (mQS != null) mQS.updateResources(); loadDimens(); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettings.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettings.java index faf20e2b7fc4..5b550c29d442 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettings.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettings.java @@ -88,7 +88,7 @@ class QuickSettings { private Context mContext; private PanelBar mBar; private QuickSettingsModel mModel; - private QuickSettingsContainerView mContainerView; + private ViewGroup mContainerView; private DisplayManager mDisplayManager; private WifiDisplayStatus mWifiDisplayStatus; @@ -717,6 +717,7 @@ class QuickSettings { for (QuickSettingsTileView v : mDynamicSpannedTiles) { v.setColumnSpan(span); } + ((QuickSettingsContainerView)mContainerView).updateResources(); mContainerView.requestLayout(); // Reset the dialog diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/SettingsPanelView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/SettingsPanelView.java index 4e10fa3a910f..a58eb2261457 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/SettingsPanelView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/SettingsPanelView.java @@ -53,7 +53,6 @@ public class SettingsPanelView extends PanelView { super.onFinishInflate(); mQSContainer = (QuickSettingsContainerView) findViewById(R.id.quick_settings_container); - mQS = new QuickSettings(getContext(), mQSContainer); Resources resources = getContext().getResources(); mHandleBar = resources.getDrawable(R.drawable.status_bar_close); @@ -62,6 +61,10 @@ public class SettingsPanelView extends PanelView { setContentDescription(resources.getString(R.string.accessibility_desc_quick_settings)); } + + public void setQuickSettings(QuickSettings qs) { + mQS = qs; + } @Override public void setBar(PanelBar panelBar) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowView.java index 0176f421ec0c..89c70e8c6135 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowView.java @@ -42,6 +42,7 @@ public class StatusBarWindowView extends FrameLayout private ExpandHelper mExpandHelper; private NotificationRowLayout latestItems; private NotificationPanelView mNotificationPanel; + private ScrollView mScrollView; PhoneStatusBar mService; @@ -55,13 +56,13 @@ public class StatusBarWindowView extends FrameLayout protected void onAttachedToWindow () { super.onAttachedToWindow(); latestItems = (NotificationRowLayout) findViewById(R.id.latestItems); - ScrollView scroller = (ScrollView) findViewById(R.id.scroll); + mScrollView = (ScrollView) findViewById(R.id.scroll); mNotificationPanel = (NotificationPanelView) findViewById(R.id.notification_panel); int minHeight = getResources().getDimensionPixelSize(R.dimen.notification_row_min_height); int maxHeight = getResources().getDimensionPixelSize(R.dimen.notification_row_max_height); mExpandHelper = new ExpandHelper(mContext, latestItems, minHeight, maxHeight); mExpandHelper.setEventSource(this); - mExpandHelper.setScrollView(scroller); + mExpandHelper.setScrollView(mScrollView); } @Override @@ -80,7 +81,7 @@ public class StatusBarWindowView extends FrameLayout @Override public boolean onInterceptTouchEvent(MotionEvent ev) { boolean intercept = false; - if (mNotificationPanel.isFullyExpanded()) { + if (mNotificationPanel.isFullyExpanded() && mScrollView.getVisibility() == View.VISIBLE) { intercept = mExpandHelper.onInterceptTouchEvent(ev); } if (!intercept) { |