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);