Merge "Making notifications wider in split shade mode" into sc-dev am: e4b11be6c8

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/13601945

MUST ONLY BE SUBMITTED BY AUTOMERGER

Change-Id: I44dc3671cc6572292579bd0a248f4c381e628158
This commit is contained in:
Michał Brzeziński
2021-02-22 16:01:16 +00:00
committed by Automerger Merge Worker
4 changed files with 60 additions and 68 deletions

View File

@@ -73,7 +73,7 @@
android:id="@+id/qs_edge_guideline" android:id="@+id/qs_edge_guideline"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
systemui:layout_constraintGuide_percent="0.5" systemui:layout_constraintGuide_percent="0.4"
android:orientation="vertical"/> android:orientation="vertical"/>
<com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout <com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout

View File

@@ -868,25 +868,16 @@ public class NotificationPanelViewController extends PanelViewController {
public void updateResources() { public void updateResources() {
int qsWidth = mResources.getDimensionPixelSize(R.dimen.qs_panel_width); int qsWidth = mResources.getDimensionPixelSize(R.dimen.qs_panel_width);
ViewGroup.LayoutParams lp = mQsFrame.getLayoutParams();
if (lp.width != qsWidth) {
lp.width = qsWidth;
mQsFrame.setLayoutParams(lp);
}
int panelWidth = mResources.getDimensionPixelSize(R.dimen.notification_panel_width); int panelWidth = mResources.getDimensionPixelSize(R.dimen.notification_panel_width);
lp = mNotificationStackScrollLayoutController.getLayoutParams();
if (lp.width != panelWidth) {
lp.width = panelWidth;
mNotificationStackScrollLayoutController.setLayoutParams(lp);
}
// In order to change the constraints at runtime, all children of the Constraint Layout // To change the constraints at runtime, all children of the ConstraintLayout must have ids
// must have ids.
ensureAllViewsHaveIds(mNotificationContainerParent); ensureAllViewsHaveIds(mNotificationContainerParent);
ConstraintSet constraintSet = new ConstraintSet(); ConstraintSet constraintSet = new ConstraintSet();
constraintSet.clone(mNotificationContainerParent); constraintSet.clone(mNotificationContainerParent);
if (Utils.shouldUseSplitNotificationShade(mFeatureFlags, mResources)) { if (Utils.shouldUseSplitNotificationShade(mFeatureFlags, mResources)) {
// width = 0 to take up all available space within constraints
qsWidth = 0;
panelWidth = 0;
constraintSet.connect(R.id.qs_frame, END, R.id.qs_edge_guideline, END); constraintSet.connect(R.id.qs_frame, END, R.id.qs_edge_guideline, END);
constraintSet.connect( constraintSet.connect(
R.id.notification_stack_scroller, START, R.id.notification_stack_scroller, START,
@@ -895,6 +886,8 @@ public class NotificationPanelViewController extends PanelViewController {
constraintSet.connect(R.id.qs_frame, END, PARENT_ID, END); constraintSet.connect(R.id.qs_frame, END, PARENT_ID, END);
constraintSet.connect(R.id.notification_stack_scroller, START, PARENT_ID, START); constraintSet.connect(R.id.notification_stack_scroller, START, PARENT_ID, START);
} }
constraintSet.getConstraint(R.id.notification_stack_scroller).layout.mWidth = panelWidth;
constraintSet.getConstraint(R.id.qs_frame).layout.mWidth = qsWidth;
constraintSet.applyTo(mNotificationContainerParent); constraintSet.applyTo(mNotificationContainerParent);
} }

View File

@@ -18,14 +18,12 @@ package com.android.systemui.statusbar.phone;
import android.app.Fragment; import android.app.Fragment;
import android.content.Context; import android.content.Context;
import android.content.res.Configuration;
import android.graphics.Canvas; import android.graphics.Canvas;
import android.util.AttributeSet; import android.util.AttributeSet;
import android.view.View; import android.view.View;
import android.view.WindowInsets; import android.view.WindowInsets;
import android.widget.FrameLayout; import android.widget.FrameLayout;
import androidx.annotation.DimenRes;
import androidx.constraintlayout.widget.ConstraintLayout; import androidx.constraintlayout.widget.ConstraintLayout;
import com.android.systemui.R; import com.android.systemui.R;
@@ -82,22 +80,6 @@ public class NotificationsQuickSettingsContainer extends ConstraintLayout
FragmentHostManager.get(this).removeTagListener(QS.TAG, this); FragmentHostManager.get(this).removeTagListener(QS.TAG, this);
} }
@Override
protected void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
reloadWidth(mQsFrame, R.dimen.qs_panel_width);
reloadWidth(mStackScroller, R.dimen.notification_panel_width);
}
/**
* Loads the given width resource and sets it on the given View.
*/
private void reloadWidth(View view, @DimenRes int width) {
LayoutParams params = (LayoutParams) view.getLayoutParams();
params.width = getResources().getDimensionPixelSize(width);
view.setLayoutParams(params);
}
@Override @Override
public WindowInsets onApplyWindowInsets(WindowInsets insets) { public WindowInsets onApplyWindowInsets(WindowInsets insets) {
mBottomPadding = insets.getStableInsetBottom(); mBottomPadding = insets.getStableInsetBottom();

View File

@@ -33,6 +33,7 @@ import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
import android.annotation.IdRes;
import android.app.ActivityManager; import android.app.ActivityManager;
import android.app.StatusBarManager; import android.app.StatusBarManager;
import android.content.res.Configuration; import android.content.res.Configuration;
@@ -269,8 +270,9 @@ public class NotificationPanelViewTest extends SysuiTestCase {
when(mView.findViewById(R.id.qs_frame)).thenReturn(mQsFrame); when(mView.findViewById(R.id.qs_frame)).thenReturn(mQsFrame);
when(mView.findViewById(R.id.keyguard_status_view)) when(mView.findViewById(R.id.keyguard_status_view))
.thenReturn(mock(KeyguardStatusView.class)); .thenReturn(mock(KeyguardStatusView.class));
when(mView.findViewById(R.id.keyguard_header)).thenReturn(mKeyguardStatusBar);
mNotificationContainerParent = new NotificationsQuickSettingsContainer(getContext(), null); mNotificationContainerParent = new NotificationsQuickSettingsContainer(getContext(), null);
mNotificationContainerParent.addView(newViewWithId(R.id.qs_frame));
mNotificationContainerParent.addView(newViewWithId(R.id.notification_stack_scroller));
when(mView.findViewById(R.id.notification_container_parent)) when(mView.findViewById(R.id.notification_container_parent))
.thenReturn(mNotificationContainerParent); .thenReturn(mNotificationContainerParent);
FlingAnimationUtils.Builder flingAnimationUtilsBuilder = new FlingAnimationUtils.Builder( FlingAnimationUtils.Builder flingAnimationUtilsBuilder = new FlingAnimationUtils.Builder(
@@ -300,10 +302,6 @@ public class NotificationPanelViewTest extends SysuiTestCase {
.thenReturn(mKeyguardClockSwitchController); .thenReturn(mKeyguardClockSwitchController);
when(mKeyguardStatusViewComponent.getKeyguardStatusViewController()) when(mKeyguardStatusViewComponent.getKeyguardStatusViewController())
.thenReturn(mKeyguardStatusViewController); .thenReturn(mKeyguardStatusViewController);
when(mQsFrame.getLayoutParams()).thenReturn(
new ViewGroup.LayoutParams(600, 400));
when(mNotificationStackScrollLayoutController.getLayoutParams()).thenReturn(
new ViewGroup.LayoutParams(600, 400));
mNotificationPanelViewController = new NotificationPanelViewController(mView, mNotificationPanelViewController = new NotificationPanelViewController(mView,
mResources, mResources,
@@ -451,7 +449,8 @@ public class NotificationPanelViewTest extends SysuiTestCase {
@Test @Test
public void testAllChildrenOfNotificationContainer_haveIds() { public void testAllChildrenOfNotificationContainer_haveIds() {
enableDualPaneShade(); enableSplitShade();
mNotificationContainerParent.removeAllViews();
mNotificationContainerParent.addView(newViewWithId(1)); mNotificationContainerParent.addView(newViewWithId(1));
mNotificationContainerParent.addView(newViewWithId(View.NO_ID)); mNotificationContainerParent.addView(newViewWithId(View.NO_ID));
@@ -464,35 +463,59 @@ public class NotificationPanelViewTest extends SysuiTestCase {
@Test @Test
public void testSinglePaneShadeLayout_isAlignedToParent() { public void testSinglePaneShadeLayout_isAlignedToParent() {
when(mFeatureFlags.isTwoColumnNotificationShadeEnabled()).thenReturn(false); when(mFeatureFlags.isTwoColumnNotificationShadeEnabled()).thenReturn(false);
mNotificationContainerParent.addView(newViewWithId(R.id.qs_frame));
mNotificationContainerParent.addView(newViewWithId(R.id.notification_stack_scroller));
mNotificationPanelViewController.updateResources(); mNotificationPanelViewController.updateResources();
ConstraintSet constraintSet = new ConstraintSet(); assertThat(getConstraintSetLayout(R.id.qs_frame).endToEnd)
constraintSet.clone(mNotificationContainerParent); .isEqualTo(ConstraintSet.PARENT_ID);
ConstraintSet.Layout qsFrameLayout = constraintSet.getConstraint(R.id.qs_frame).layout; assertThat(getConstraintSetLayout(R.id.notification_stack_scroller).startToStart)
ConstraintSet.Layout stackScrollerLayout = constraintSet.getConstraint( .isEqualTo(ConstraintSet.PARENT_ID);
R.id.notification_stack_scroller).layout;
assertThat(qsFrameLayout.endToEnd).isEqualTo(ConstraintSet.PARENT_ID);
assertThat(stackScrollerLayout.startToStart).isEqualTo(ConstraintSet.PARENT_ID);
} }
@Test @Test
public void testSplitShadeLayout_isAlignedToGuideline() { public void testSplitShadeLayout_isAlignedToGuideline() {
enableDualPaneShade(); enableSplitShade();
mNotificationContainerParent.addView(newViewWithId(R.id.qs_frame));
mNotificationContainerParent.addView(newViewWithId(R.id.notification_stack_scroller));
mNotificationPanelViewController.updateResources(); mNotificationPanelViewController.updateResources();
ConstraintSet constraintSet = new ConstraintSet(); assertThat(getConstraintSetLayout(R.id.qs_frame).endToEnd)
constraintSet.clone(mNotificationContainerParent); .isEqualTo(R.id.qs_edge_guideline);
ConstraintSet.Layout qsFrameLayout = constraintSet.getConstraint(R.id.qs_frame).layout; assertThat(getConstraintSetLayout(R.id.notification_stack_scroller).startToStart)
ConstraintSet.Layout stackScrollerLayout = constraintSet.getConstraint( .isEqualTo(R.id.qs_edge_guideline);
R.id.notification_stack_scroller).layout; }
assertThat(qsFrameLayout.endToEnd).isEqualTo(R.id.qs_edge_guideline);
assertThat(stackScrollerLayout.startToStart).isEqualTo(R.id.qs_edge_guideline); @Test
public void testSinglePaneShadeLayout_childrenHaveConstantWidth() {
when(mFeatureFlags.isTwoColumnNotificationShadeEnabled()).thenReturn(false);
mNotificationPanelViewController.updateResources();
assertThat(getConstraintSetLayout(R.id.qs_frame).mWidth)
.isEqualTo(mResources.getDimensionPixelSize(R.dimen.qs_panel_width));
assertThat(getConstraintSetLayout(R.id.notification_stack_scroller).mWidth)
.isEqualTo(mResources.getDimensionPixelSize(R.dimen.notification_panel_width));
}
@Test
public void testSplitShadeLayout_childrenHaveZeroWidth() {
enableSplitShade();
mNotificationPanelViewController.updateResources();
assertThat(getConstraintSetLayout(R.id.qs_frame).mWidth).isEqualTo(0);
assertThat(getConstraintSetLayout(R.id.notification_stack_scroller).mWidth).isEqualTo(0);
}
@Test
public void testOnDragDownEvent_horizontalTranslationIsZeroForSplitShade() {
when(mNotificationStackScrollLayoutController.getWidth()).thenReturn(350f);
when(mView.getWidth()).thenReturn(800);
enableSplitShade();
onTouchEvent(MotionEvent.obtain(0L, 0L, MotionEvent.ACTION_DOWN,
200f /* x position */, 0f, 0));
verify(mQsFrame).setTranslationX(0);
} }
@Test @Test
@@ -538,19 +561,13 @@ public class NotificationPanelViewTest extends SysuiTestCase {
return view; return view;
} }
@Test private ConstraintSet.Layout getConstraintSetLayout(@IdRes int id) {
public void testOnDragDownEvent_horizontalTranslationIsZeroForDualPaneShade() { ConstraintSet constraintSet = new ConstraintSet();
when(mNotificationStackScrollLayoutController.getWidth()).thenReturn(350f); constraintSet.clone(mNotificationContainerParent);
when(mView.getWidth()).thenReturn(800); return constraintSet.getConstraint(id).layout;
enableDualPaneShade();
onTouchEvent(MotionEvent.obtain(0L, 0L, MotionEvent.ACTION_DOWN,
200f /* x position */, 0f, 0));
verify(mQsFrame).setTranslationX(0);
} }
private void enableDualPaneShade() { private void enableSplitShade() {
when(mResources.getBoolean(R.bool.config_use_split_notification_shade)).thenReturn(true); when(mResources.getBoolean(R.bool.config_use_split_notification_shade)).thenReturn(true);
when(mFeatureFlags.isTwoColumnNotificationShadeEnabled()).thenReturn(true); when(mFeatureFlags.isTwoColumnNotificationShadeEnabled()).thenReturn(true);
} }