diff --git a/packages/SystemUI/res/drawable/ic_qs_drag_handle.xml b/packages/SystemUI/res/drawable/ic_qs_drag_handle.xml deleted file mode 100644 index 9a69b33fd5917..0000000000000 --- a/packages/SystemUI/res/drawable/ic_qs_drag_handle.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - diff --git a/packages/SystemUI/res/layout/qs_panel.xml b/packages/SystemUI/res/layout/qs_panel.xml index 2ac03c262edb3..f5c6036a5a86f 100644 --- a/packages/SystemUI/res/layout/qs_panel.xml +++ b/packages/SystemUI/res/layout/qs_panel.xml @@ -56,17 +56,4 @@ layout="@layout/qs_customize_panel" android:visibility="gone" /> - - diff --git a/packages/SystemUI/res/values-sw600dp-land/config.xml b/packages/SystemUI/res/values-sw600dp-land/config.xml index 362e18d785ac0..dabc3108458f1 100644 --- a/packages/SystemUI/res/values-sw600dp-land/config.xml +++ b/packages/SystemUI/res/values-sw600dp-land/config.xml @@ -18,11 +18,14 @@ 2 + + 3 + - 4 + 3 - 8 + 6 true diff --git a/packages/SystemUI/res/values-sw720dp-land/config.xml b/packages/SystemUI/res/values-sw720dp-land/config.xml index e4573c6510390..e0b161456aa21 100644 --- a/packages/SystemUI/res/values-sw720dp-land/config.xml +++ b/packages/SystemUI/res/values-sw720dp-land/config.xml @@ -18,11 +18,14 @@ 2 + + 3 + - 4 + 3 - 8 + 6 true diff --git a/packages/SystemUI/src/com/android/systemui/qs/PagedTileLayout.java b/packages/SystemUI/src/com/android/systemui/qs/PagedTileLayout.java index cdf770f80387e..c3de3c57724f2 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/PagedTileLayout.java +++ b/packages/SystemUI/src/com/android/systemui/qs/PagedTileLayout.java @@ -109,6 +109,16 @@ public class PagedTileLayout extends ViewPager implements QSTileLayout { mPageToRestore = savedInstanceState.getInt(CURRENT_PAGE, -1); } + @Override + public int getTilesHeight() { + // Use the first page as that is the maximum height we need to show. + TileLayout tileLayout = mPages.get(0); + if (tileLayout == null) { + return 0; + } + return tileLayout.getTilesHeight(); + } + @Override protected void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSContainerImpl.java b/packages/SystemUI/src/com/android/systemui/qs/QSContainerImpl.java index 8588ddfcfa63b..e230e1bf80519 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSContainerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSContainerImpl.java @@ -27,7 +27,6 @@ import android.graphics.PointF; import android.util.AttributeSet; import android.view.View; import android.widget.FrameLayout; -import android.widget.ImageView; import com.android.systemui.Dumpable; import com.android.systemui.R; @@ -53,7 +52,6 @@ public class QSContainerImpl extends FrameLayout implements Dumpable { private float mQsExpansion; private QSCustomizer mQSCustomizer; private NonInterceptingScrollView mQSPanelContainer; - private ImageView mDragHandle; private int mSideMargins; private boolean mQsDisabled; @@ -71,7 +69,6 @@ public class QSContainerImpl extends FrameLayout implements Dumpable { mQSDetail = findViewById(R.id.qs_detail); mHeader = findViewById(R.id.header); mQSCustomizer = findViewById(R.id.qs_customize); - mDragHandle = findViewById(R.id.qs_drag_handle); setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_NO); } @@ -190,23 +187,14 @@ public class QSContainerImpl extends FrameLayout implements Dumpable { mQSDetail.setBottom(getTop() + scrollBottom); int qsDetailBottomMargin = ((MarginLayoutParams) mQSDetail.getLayoutParams()).bottomMargin; mQSDetail.setBottom(getTop() + scrollBottom - qsDetailBottomMargin); - // Pin the drag handle to the bottom of the panel. - mDragHandle.setTranslationY(scrollBottom - mDragHandle.getHeight()); } protected int calculateContainerHeight() { int heightOverride = mHeightOverride != -1 ? mHeightOverride : getMeasuredHeight(); // Need to add the dragHandle height so touches will be intercepted by it. - int dragHandleHeight; - if (mDragHandle.getVisibility() == VISIBLE) { - dragHandleHeight = Math.round((1 - mQsExpansion) * mDragHandle.getHeight()); - } else { - dragHandleHeight = 0; - } return mQSCustomizer.isCustomizing() ? mQSCustomizer.getHeight() : Math.round(mQsExpansion * (heightOverride - mHeader.getHeight())) - + mHeader.getHeight() - + dragHandleHeight; + + mHeader.getHeight(); } int calculateContainerBottom() { @@ -221,8 +209,6 @@ public class QSContainerImpl extends FrameLayout implements Dumpable { public void setExpansion(float expansion) { mQsExpansion = expansion; mQSPanelContainer.setScrollingEnabled(expansion > 0f); - mDragHandle.setAlpha(1.0f - expansion); - mDragHandle.setClickable(expansion == 0f); // Only clickable when fully collapsed updateExpansion(); } diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSFragment.java b/packages/SystemUI/src/com/android/systemui/qs/QSFragment.java index ee59ae6ab6d79..e82e9d284bdd7 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSFragment.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSFragment.java @@ -33,7 +33,6 @@ import android.view.View.OnClickListener; import android.view.ViewGroup; import android.view.ViewTreeObserver; import android.widget.FrameLayout.LayoutParams; -import android.widget.ImageView; import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; @@ -94,7 +93,6 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca private float mLastPanelFraction; private float mSquishinessFraction = 1; private boolean mQsDisabled; - private ImageView mQsDragHandler; private final RemoteInputQuickSettingsDisabler mRemoteInputQuickSettingsDisabler; private final CommandQueue mCommandQueue; @@ -205,7 +203,6 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca mHeader = view.findViewById(R.id.header); mQSPanelController.setHeaderContainer(view.findViewById(R.id.header_text_container)); mFooter = qsFragmentComponent.getQSFooter(); - mQsDragHandler = view.findViewById(R.id.qs_drag_handle); mQsDetailDisplayer.setQsPanelController(mQSPanelController); @@ -249,11 +246,6 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca mQSPanelController.getMediaHost().getHostView().setAlpha(1.0f); mQSAnimator.requestAnimatorUpdate(); }); - - mQsDragHandler.setOnClickListener(v -> { - Log.d(TAG, "drag handler clicked"); - mCommandQueue.animateExpandSettingsPanel(null); - }); } @Override @@ -385,30 +377,26 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca } private void updateQsState() { - final boolean expandVisually = mQsExpanded || mStackScrollerOverscrolling + final boolean expanded = mQsExpanded || mInSplitShade; + final boolean expandVisually = expanded || mStackScrollerOverscrolling || mHeaderAnimating; - mQSPanelController.setExpanded(mQsExpanded); - mQSDetail.setExpanded(mQsExpanded); + mQSPanelController.setExpanded(expanded); + mQSDetail.setExpanded(expanded); boolean keyguardShowing = isKeyguardState(); - mHeader.setVisibility((mQsExpanded || !keyguardShowing || mHeaderAnimating + mHeader.setVisibility((expanded || !keyguardShowing || mHeaderAnimating || mShowCollapsedOnKeyguard) ? View.VISIBLE : View.INVISIBLE); mHeader.setExpanded((keyguardShowing && !mHeaderAnimating && !mShowCollapsedOnKeyguard) - || (mQsExpanded && !mStackScrollerOverscrolling), mQuickQSPanelController); - mFooter.setVisibility(!mQsDisabled && (mQsExpanded || !keyguardShowing || mHeaderAnimating + || (expanded && !mStackScrollerOverscrolling), mQuickQSPanelController); + mFooter.setVisibility(!mQsDisabled && (expanded || !keyguardShowing || mHeaderAnimating || mShowCollapsedOnKeyguard) ? View.VISIBLE : View.INVISIBLE); mFooter.setExpanded((keyguardShowing && !mHeaderAnimating && !mShowCollapsedOnKeyguard) - || (mQsExpanded && !mStackScrollerOverscrolling)); + || (expanded && !mStackScrollerOverscrolling)); mQSPanelController.setVisibility( !mQsDisabled && expandVisually ? View.VISIBLE : View.INVISIBLE); - mQsDragHandler.setVisibility((mQsExpanded || !keyguardShowing || mHeaderAnimating - || mShowCollapsedOnKeyguard) - && Utils.shouldUseSplitNotificationShade(getResources()) - ? View.VISIBLE - : View.GONE); } private boolean isKeyguardState() { @@ -418,7 +406,8 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca } private void updateShowCollapsedOnKeyguard() { - boolean showCollapsed = mBypassController.getBypassEnabled() || mTransitioningToFullShade; + boolean showCollapsed = mBypassController.getBypassEnabled() + || (mTransitioningToFullShade && !mInSplitShade); if (showCollapsed != mShowCollapsedOnKeyguard) { mShowCollapsedOnKeyguard = showCollapsed; updateQsState(); @@ -498,6 +487,8 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca public void setInSplitShade(boolean inSplitShade) { mInSplitShade = inSplitShade; mQSAnimator.setTranslateWhileExpanding(inSplitShade); + updateShowCollapsedOnKeyguard(); + updateQsState(); } @Override @@ -516,7 +507,8 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca public void setQsExpansion(float expansion, float panelExpansionFraction, float proposedTranslation, float squishinessFraction) { float headerTranslation = mTransitioningToFullShade ? 0 : proposedTranslation; - float progress = mTransitioningToFullShade ? mFullShadeProgress : panelExpansionFraction; + float progress = mTransitioningToFullShade || mState == StatusBarState.KEYGUARD + ? mFullShadeProgress : panelExpansionFraction; setAlphaAnimationProgress(mInSplitShade ? progress : 1); mContainer.setExpansion(expansion); final float translationScaleY = (mInSplitShade diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java b/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java index d69deefc34777..20c0fdd7de890 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java @@ -258,13 +258,8 @@ public class QSPanel extends LinearLayout implements Tunable { } private void updateViewPositions() { - if (!(mTileLayout instanceof TileLayout)) { - return; - } - TileLayout layout = (TileLayout) mTileLayout; - // Adjust view positions based on tile squishing - int tileHeightOffset = layout.getTilesHeight() - layout.getHeight(); + int tileHeightOffset = mTileLayout.getTilesHeight() - mTileLayout.getHeight(); boolean move = false; for (int i = 0; i < getChildCount(); i++) { @@ -787,6 +782,12 @@ public class QSPanel extends LinearLayout implements Tunable { /** */ void setListening(boolean listening, UiEventLogger uiEventLogger); + /** */ + int getHeight(); + + /** */ + int getTilesHeight(); + /** * Sets a size modifier for the tile. Where 0 means collapsed, and 1 expanded. */ diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSPanelController.java b/packages/SystemUI/src/com/android/systemui/qs/QSPanelController.java index 6794d5b0cee42..001c740e310a1 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSPanelController.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSPanelController.java @@ -45,6 +45,7 @@ import com.android.systemui.settings.brightness.BrightnessSliderController; import com.android.systemui.statusbar.CommandQueue; import com.android.systemui.statusbar.policy.BrightnessMirrorController; import com.android.systemui.tuner.TunerService; +import com.android.systemui.util.Utils; import javax.inject.Inject; import javax.inject.Named; @@ -72,6 +73,7 @@ public class QSPanelController extends QSPanelControllerBase { new QSPanel.OnConfigurationChangedListener() { @Override public void onConfigurationChange(Configuration newConfig) { + updateMediaExpansion(); mView.updateResources(); mQsSecurityFooter.onConfigurationChanged(); if (mView.isListening()) { @@ -121,13 +123,17 @@ public class QSPanelController extends QSPanelControllerBase { @Override public void onInit() { super.onInit(); - mMediaHost.setExpansion(1); + updateMediaExpansion(); mMediaHost.setShowsOnlyActiveMedia(false); mMediaHost.init(MediaHierarchyManager.LOCATION_QS); mQsCustomizerController.init(); mBrightnessSliderController.init(); } + private void updateMediaExpansion() { + mMediaHost.setExpansion(Utils.shouldUseSplitNotificationShade(getResources()) ? 0 : 1); + } + @Override protected void onViewAttached() { super.onViewAttached(); diff --git a/packages/SystemUI/src/com/android/systemui/qs/TileLayout.java b/packages/SystemUI/src/com/android/systemui/qs/TileLayout.java index 7f08e5bdb575f..bff318a6f44e4 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/TileLayout.java +++ b/packages/SystemUI/src/com/android/systemui/qs/TileLayout.java @@ -275,6 +275,7 @@ public class TileLayout extends ViewGroup implements QSTileLayout { return Math.max(mColumns * mRows, 1); } + @Override public int getTilesHeight() { return mLastTileBottom + getPaddingBottom(); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/LockscreenShadeTransitionController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/LockscreenShadeTransitionController.kt index dca7f70d34707..0fb08e4034838 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/LockscreenShadeTransitionController.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/LockscreenShadeTransitionController.kt @@ -174,7 +174,7 @@ class LockscreenShadeTransitionController @Inject constructor( internal fun canDragDown(): Boolean { return (statusBarStateController.state == StatusBarState.KEYGUARD || nsslController.isInLockedDownShade()) && - qS.isFullyCollapsed + (qS.isFullyCollapsed || useSplitShade) } /** @@ -285,7 +285,7 @@ class LockscreenShadeTransitionController @Inject constructor( internal val isDragDownAnywhereEnabled: Boolean get() = (statusBarStateController.getState() == StatusBarState.KEYGUARD && !keyguardBypassController.bypassEnabled && - qS.isFullyCollapsed) + (qS.isFullyCollapsed || useSplitShade)) /** * The amount in pixels that the user has dragged down. diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java index 0312c30c73ecc..20a771f24d9df 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java @@ -2246,11 +2246,14 @@ public class NotificationPanelViewController extends PanelViewController { private void updateQsExpansion() { if (mQs == null) return; - float qsExpansionFraction = computeQsExpansionFraction(); - float squishiness = mNotificationStackScrollLayoutController - .getNotificationSquishinessFraction(); - mQs.setQsExpansion(qsExpansionFraction, getExpandedFraction(), getHeaderTranslation(), - mQsExpandImmediate || mQsExpanded ? 1f : squishiness); + final float squishiness = + mQsExpandImmediate || mQsExpanded ? 1f : mNotificationStackScrollLayoutController + .getNotificationSquishinessFraction(); + final float qsExpansionFraction = computeQsExpansionFraction(); + final float adjustedExpansionFraction = mShouldUseSplitNotificationShade + ? 1f : computeQsExpansionFraction(); + mQs.setQsExpansion(adjustedExpansionFraction, getExpandedFraction(), getHeaderTranslation(), + squishiness); mSplitShadeHeaderController.setQsExpandedFraction(qsExpansionFraction); mMediaHierarchyManager.setQsExpansion(qsExpansionFraction); int qsPanelBottomY = calculateQsBottomPosition(qsExpansionFraction);