From f4b368e296e086a92c3dca493f979716b65d90a4 Mon Sep 17 00:00:00 2001 From: Fabian Kozynski Date: Tue, 13 Aug 2019 10:34:06 -0400 Subject: [PATCH] Do not animate QSCustomizer when screen off When QSCustomizer is open and the power button is pressed to put phone in AOD, prevent the animation and instead hide the panel immediately. Also make sure that QS cannot expand when phone is dozing. Test: manual Fixes: 139175485 Change-Id: I6c058b2ce42a2b65d03ca3b758f96aac7cc00ad3 --- .../systemui/qs/customize/QSCustomizer.java | 35 +++++++++++++------ .../phone/NotificationPanelView.java | 3 +- .../util/InjectionInflationController.java | 6 ++++ 3 files changed, 33 insertions(+), 11 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizer.java b/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizer.java index 83b000dca83bb..38153ecd59c9a 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizer.java +++ b/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizer.java @@ -38,8 +38,8 @@ import androidx.recyclerview.widget.RecyclerView; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto; -import com.android.systemui.Dependency; import com.android.systemui.R; +import com.android.systemui.keyguard.ScreenLifecycle; import com.android.systemui.plugins.qs.QS; import com.android.systemui.plugins.qs.QSTile; import com.android.systemui.qs.QSDetailClipper; @@ -52,6 +52,8 @@ import com.android.systemui.statusbar.policy.KeyguardMonitor.Callback; import java.util.ArrayList; import java.util.List; +import javax.inject.Inject; + /** * Allows full-screen customization of QS, through show() and hide(). * @@ -66,6 +68,8 @@ public class QSCustomizer extends LinearLayout implements OnMenuItemClickListene private final QSDetailClipper mClipper; private final LightBarController mLightBarController; + private KeyguardMonitor mKeyguardMonitor; + private final ScreenLifecycle mScreenLifecycle; private final TileQueryHelper mTileQueryHelper; private final View mTransparentView; @@ -82,7 +86,11 @@ public class QSCustomizer extends LinearLayout implements OnMenuItemClickListene private boolean mOpening; private boolean mIsShowingNavBackdrop; - public QSCustomizer(Context context, AttributeSet attrs) { + @Inject + public QSCustomizer(Context context, AttributeSet attrs, + LightBarController lightBarController, + KeyguardMonitor keyguardMonitor, + ScreenLifecycle screenLifecycle) { super(new ContextThemeWrapper(context, R.style.edit_theme), attrs); LayoutInflater.from(getContext()).inflate(R.layout.qs_customize_panel_content, this); @@ -115,7 +123,9 @@ public class QSCustomizer extends LinearLayout implements OnMenuItemClickListene DefaultItemAnimator animator = new DefaultItemAnimator(); animator.setMoveDuration(TileAdapter.MOVE_DURATION); mRecyclerView.setItemAnimator(animator); - mLightBarController = Dependency.get(LightBarController.class); + mLightBarController = lightBarController; + mKeyguardMonitor = keyguardMonitor; + mScreenLifecycle = screenLifecycle; updateNavBackDrop(getResources().getConfiguration()); } @@ -177,7 +187,7 @@ public class QSCustomizer extends LinearLayout implements OnMenuItemClickListene queryTiles(); mNotifQsContainer.setCustomizerAnimating(true); mNotifQsContainer.setCustomizerShowing(true); - Dependency.get(KeyguardMonitor.class).addCallback(mKeyguardCallback); + mKeyguardMonitor.addCallback(mKeyguardCallback); updateNavColors(); } } @@ -193,7 +203,7 @@ public class QSCustomizer extends LinearLayout implements OnMenuItemClickListene queryTiles(); mNotifQsContainer.setCustomizerAnimating(false); mNotifQsContainer.setCustomizerShowing(true); - Dependency.get(KeyguardMonitor.class).addCallback(mKeyguardCallback); + mKeyguardMonitor.addCallback(mKeyguardCallback); updateNavColors(); } } @@ -203,16 +213,21 @@ public class QSCustomizer extends LinearLayout implements OnMenuItemClickListene } public void hide() { + final boolean animate = mScreenLifecycle.getScreenState() != ScreenLifecycle.SCREEN_OFF; if (isShown) { MetricsLogger.hidden(getContext(), MetricsProto.MetricsEvent.QS_EDIT); isShown = false; mToolbar.dismissPopupMenus(); setCustomizing(false); save(); - mClipper.animateCircularClip(mX, mY, false, mCollapseAnimationListener); - mNotifQsContainer.setCustomizerAnimating(true); + if (animate) { + mClipper.animateCircularClip(mX, mY, false, mCollapseAnimationListener); + } else { + setVisibility(View.GONE); + } + mNotifQsContainer.setCustomizerAnimating(animate); mNotifQsContainer.setCustomizerShowing(false); - Dependency.get(KeyguardMonitor.class).removeCallback(mKeyguardCallback); + mKeyguardMonitor.removeCallback(mKeyguardCallback); updateNavColors(); } } @@ -268,7 +283,7 @@ public class QSCustomizer extends LinearLayout implements OnMenuItemClickListene public void saveInstanceState(Bundle outState) { if (isShown) { - Dependency.get(KeyguardMonitor.class).removeCallback(mKeyguardCallback); + mKeyguardMonitor.removeCallback(mKeyguardCallback); } outState.putBoolean(EXTRA_QS_CUSTOMIZING, mCustomizing); } @@ -300,7 +315,7 @@ public class QSCustomizer extends LinearLayout implements OnMenuItemClickListene @Override public void onKeyguardShowingChanged() { if (!isAttachedToWindow()) return; - if (Dependency.get(KeyguardMonitor.class).isShowing() && !mOpening) { + if (mKeyguardMonitor.isShowing() && !mOpening) { hide(); } } 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 d0626ed780e24..23f8c7ef1d9df 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java @@ -1738,7 +1738,8 @@ public class NotificationPanelView extends PanelView implements private void setQsExpansion(float height) { height = Math.min(Math.max(height, mQsMinExpansionHeight), mQsMaxExpansionHeight); mQsFullyExpanded = height == mQsMaxExpansionHeight && mQsMaxExpansionHeight != 0; - if (height > mQsMinExpansionHeight && !mQsExpanded && !mStackScrollerOverscrolling) { + if (height > mQsMinExpansionHeight && !mQsExpanded && !mStackScrollerOverscrolling + && !mDozing) { setQsExpanded(true); } else if (height <= mQsMinExpansionHeight && mQsExpanded) { setQsExpanded(false); diff --git a/packages/SystemUI/src/com/android/systemui/util/InjectionInflationController.java b/packages/SystemUI/src/com/android/systemui/util/InjectionInflationController.java index 9b264c4a326e2..e44e58a84dc86 100644 --- a/packages/SystemUI/src/com/android/systemui/util/InjectionInflationController.java +++ b/packages/SystemUI/src/com/android/systemui/util/InjectionInflationController.java @@ -32,6 +32,7 @@ import com.android.systemui.qs.QSFooterImpl; import com.android.systemui.qs.QSPanel; import com.android.systemui.qs.QuickQSPanel; import com.android.systemui.qs.QuickStatusBarHeader; +import com.android.systemui.qs.customize.QSCustomizer; import com.android.systemui.statusbar.NotificationShelf; import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout; import com.android.systemui.statusbar.phone.LockIcon; @@ -172,6 +173,11 @@ public class InjectionInflationController { * Creates the QuickQSPanel. */ QuickQSPanel createQuickQSPanel(); + + /** + * Creates the QSCustomizer. + */ + QSCustomizer createQSCustomizer(); } /**