Merge "sysui: show a drag handler when QS is collapsed in split shade" into sc-v2-dev
This commit is contained in:
24
packages/SystemUI/res/drawable/ic_qs_drag_handle.xml
Normal file
24
packages/SystemUI/res/drawable/ic_qs_drag_handle.xml
Normal file
@@ -0,0 +1,24 @@
|
||||
<!--
|
||||
~ Copyright (C) 2021 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
|
||||
-->
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="36dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24.0"
|
||||
android:viewportHeight="24.0">
|
||||
<path
|
||||
android:fillColor="?android:attr/textColorPrimary"
|
||||
android:pathData="M5.41,7.59L4,9l8,8 8,-8 -1.41,-1.41L12,14.17" />
|
||||
</vector>
|
||||
@@ -13,13 +13,13 @@
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
<com.android.systemui.qs.QSContainerImpl
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
<com.android.systemui.qs.QSContainerImpl xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/quick_settings_container"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:clipToPadding="false"
|
||||
android:clipChildren="false" >
|
||||
android:clipChildren="false">
|
||||
|
||||
<com.android.systemui.qs.NonInterceptingScrollView
|
||||
android:id="@+id/expanded_qs_scroll_view"
|
||||
@@ -40,15 +40,33 @@
|
||||
android:accessibilityTraversalBefore="@android:id/edit"
|
||||
android:clipToPadding="false"
|
||||
android:clipChildren="false">
|
||||
|
||||
<include layout="@layout/qs_footer_impl" />
|
||||
</com.android.systemui.qs.QSPanel>
|
||||
</com.android.systemui.qs.NonInterceptingScrollView>
|
||||
|
||||
<include layout="@layout/quick_status_bar_expanded_header" />
|
||||
|
||||
<include android:id="@+id/qs_detail" layout="@layout/qs_detail" />
|
||||
<include
|
||||
android:id="@+id/qs_detail"
|
||||
layout="@layout/qs_detail" />
|
||||
|
||||
<include android:id="@+id/qs_customize" layout="@layout/qs_customize_panel"
|
||||
<include
|
||||
android:id="@+id/qs_customize"
|
||||
layout="@layout/qs_customize_panel"
|
||||
android:visibility="gone" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/qs_drag_handle"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_horizontal"
|
||||
android:layout_marginTop="24dp"
|
||||
android:elevation="4dp"
|
||||
android:importantForAccessibility="no"
|
||||
android:scaleType="center"
|
||||
android:src="@drawable/ic_qs_drag_handle"
|
||||
android:tint="@color/qs_detail_button_white"
|
||||
tools:ignore="UseAppTint" />
|
||||
|
||||
</com.android.systemui.qs.QSContainerImpl>
|
||||
|
||||
@@ -27,6 +27,7 @@ import android.util.AttributeSet;
|
||||
import android.view.View;
|
||||
import android.view.WindowInsets;
|
||||
import android.widget.FrameLayout;
|
||||
import android.widget.ImageView;
|
||||
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.qs.customize.QSCustomizer;
|
||||
@@ -47,6 +48,7 @@ public class QSContainerImpl extends FrameLayout {
|
||||
private float mQsExpansion;
|
||||
private QSCustomizer mQSCustomizer;
|
||||
private NonInterceptingScrollView mQSPanelContainer;
|
||||
private ImageView mDragHandle;
|
||||
|
||||
private int mSideMargins;
|
||||
private boolean mQsDisabled;
|
||||
@@ -65,6 +67,7 @@ public class QSContainerImpl extends FrameLayout {
|
||||
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);
|
||||
}
|
||||
|
||||
@@ -195,6 +198,8 @@ public class QSContainerImpl extends FrameLayout {
|
||||
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() {
|
||||
@@ -216,6 +221,7 @@ public class QSContainerImpl extends FrameLayout {
|
||||
public void setExpansion(float expansion) {
|
||||
mQsExpansion = expansion;
|
||||
mQSPanelContainer.setScrollingEnabled(expansion > 0f);
|
||||
mDragHandle.setAlpha(1.0f - expansion);
|
||||
updateExpansion();
|
||||
}
|
||||
|
||||
|
||||
@@ -32,6 +32,7 @@ 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;
|
||||
@@ -86,6 +87,7 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
|
||||
private QSFooter mFooter;
|
||||
private float mLastQSExpansion = -1;
|
||||
private boolean mQsDisabled;
|
||||
private ImageView mQsDragHandler;
|
||||
|
||||
private final RemoteInputQuickSettingsDisabler mRemoteInputQuickSettingsDisabler;
|
||||
private final InjectionInflationController mInjectionInflater;
|
||||
@@ -187,6 +189,7 @@ 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);
|
||||
|
||||
@@ -291,6 +294,7 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
|
||||
mQSAnimator.onRtlChanged();
|
||||
}
|
||||
}
|
||||
updateQsState();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -363,15 +367,19 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
|
||||
: View.INVISIBLE);
|
||||
mHeader.setExpanded((keyguardShowing && !mHeaderAnimating && !mShowCollapsedOnKeyguard)
|
||||
|| (mQsExpanded && !mStackScrollerOverscrolling), mQuickQSPanelController);
|
||||
mFooter.setVisibility(
|
||||
!mQsDisabled && (mQsExpanded || !keyguardShowing || mHeaderAnimating
|
||||
|| mShowCollapsedOnKeyguard)
|
||||
mFooter.setVisibility(!mQsDisabled && (mQsExpanded || !keyguardShowing || mHeaderAnimating
|
||||
|| mShowCollapsedOnKeyguard)
|
||||
? View.VISIBLE
|
||||
: View.INVISIBLE);
|
||||
mFooter.setExpanded((keyguardShowing && !mHeaderAnimating && !mShowCollapsedOnKeyguard)
|
||||
|| (mQsExpanded && !mStackScrollerOverscrolling));
|
||||
mQSPanelController.setVisibility(
|
||||
!mQsDisabled && expandVisually ? View.VISIBLE : View.INVISIBLE);
|
||||
mQsDragHandler.setVisibility((mQsExpanded || !keyguardShowing || mHeaderAnimating
|
||||
|| mShowCollapsedOnKeyguard)
|
||||
&& Utils.shouldUseSplitNotificationShade(mFeatureFlags, getResources())
|
||||
? View.VISIBLE
|
||||
: View.GONE);
|
||||
}
|
||||
|
||||
private boolean isKeyguardState() {
|
||||
|
||||
Reference in New Issue
Block a user