Merge "Ignore GONE views in shade when processing sections" into rvc-dev

This commit is contained in:
TreeHugger Robot
2020-07-24 21:41:57 +00:00
committed by Android (Google) Code Review
2 changed files with 51 additions and 40 deletions

View File

@@ -326,6 +326,7 @@ class NotificationSectionsManager @Inject internal constructor(
// shade. // shade.
for (i in parent.childCount - 1 downTo -1) { for (i in parent.childCount - 1 downTo -1) {
val child: View? = parent.getChildAt(i) val child: View? = parent.getChildAt(i)
child?.let { child?.let {
logShadeChild(i, child) logShadeChild(i, child)
// If this child is a header, update the tracked positions // If this child is a header, update the tracked positions
@@ -339,7 +340,8 @@ class NotificationSectionsManager @Inject internal constructor(
} }
} }
val row = child as? ExpandableNotificationRow val row = (child as? ExpandableNotificationRow)
?.takeUnless { it.visibility == View.GONE }
// Is there a section discontinuity? This usually occurs due to HUNs // Is there a section discontinuity? This usually occurs due to HUNs
inIncomingSection = inIncomingSection || nextBucket?.let { next -> inIncomingSection = inIncomingSection || nextBucket?.let { next ->
@@ -386,7 +388,7 @@ class NotificationSectionsManager @Inject internal constructor(
// Offset the target to account for the current position of the people header. // Offset the target to account for the current position of the people header.
peopleState?.targetPosition = peopleState?.currentPosition?.let { current -> peopleState?.targetPosition = peopleState?.currentPosition?.let { current ->
peopleState?.targetPosition?.let { target -> peopleState.targetPosition?.let { target ->
if (current < target) target - 1 else target if (current < target) target - 1 else target
} }
} }

View File

@@ -380,7 +380,7 @@ public class NotificationSectionsManagerTest extends SysuiTestCase {
setupMockStack( setupMockStack(
PEOPLE_HEADER, PEOPLE_HEADER,
ALERTING.headsUp(), ALERTING,
PERSON, PERSON,
ALERTING_HEADER, ALERTING_HEADER,
GENTLE_HEADER, GENTLE_HEADER,
@@ -403,9 +403,9 @@ public class NotificationSectionsManagerTest extends SysuiTestCase {
enablePeopleFiltering(); enablePeopleFiltering();
setupMockStack( setupMockStack(
PERSON.headsUp(), PERSON,
INCOMING_HEADER, INCOMING_HEADER,
ALERTING.headsUp(), ALERTING,
PEOPLE_HEADER, PEOPLE_HEADER,
PERSON PERSON
); );
@@ -425,7 +425,7 @@ public class NotificationSectionsManagerTest extends SysuiTestCase {
enablePeopleFiltering(); enablePeopleFiltering();
setupMockStack( setupMockStack(
PERSON.headsUp(), PERSON,
PEOPLE_HEADER, PEOPLE_HEADER,
PERSON PERSON
); );
@@ -443,8 +443,8 @@ public class NotificationSectionsManagerTest extends SysuiTestCase {
enablePeopleFiltering(); enablePeopleFiltering();
setupMockStack( setupMockStack(
ALERTING.headsUp(), ALERTING,
PERSON.headsUp() PERSON
); );
mSectionsManager.updateSectionBoundaries(); mSectionsManager.updateSectionBoundaries();
verifyMockStack( verifyMockStack(
@@ -461,7 +461,7 @@ public class NotificationSectionsManagerTest extends SysuiTestCase {
setupMockStack( setupMockStack(
INCOMING_HEADER, INCOMING_HEADER,
ALERTING.headsUp(), ALERTING,
PEOPLE_HEADER, PEOPLE_HEADER,
FSN, FSN,
PERSON, PERSON,
@@ -502,9 +502,9 @@ public class NotificationSectionsManagerTest extends SysuiTestCase {
public void testMediaControls_AddWhenEnterKeyguardWithHeadsUp() { public void testMediaControls_AddWhenEnterKeyguardWithHeadsUp() {
enableMediaControls(); enableMediaControls();
// GIVEN a stack that doesn't include media controls but includes HEADS_UP // GIVEN a stack that doesn't include media
setupMockStack( setupMockStack(
ALERTING.headsUp(), ALERTING,
ALERTING, ALERTING,
GENTLE_HEADER, GENTLE_HEADER,
GENTLE); GENTLE);
@@ -584,6 +584,27 @@ public class NotificationSectionsManagerTest extends SysuiTestCase {
); );
} }
@Test
public void testIgnoreGoneView() {
enablePeopleFiltering();
setupMockStack(
PERSON.gone(),
ALERTING,
GENTLE
);
mSectionsManager.updateSectionBoundaries();
verifyMockStack(
ChildType.ALERTING_HEADER,
ChildType.PERSON,
ChildType.ALERTING,
ChildType.GENTLE_HEADER,
ChildType.GENTLE
);
}
private void enablePeopleFiltering() { private void enablePeopleFiltering() {
when(mSectionsFeatureManager.isFilteringEnabled()).thenReturn(true); when(mSectionsFeatureManager.isFilteringEnabled()).thenReturn(true);
} }
@@ -619,16 +640,16 @@ public class NotificationSectionsManagerTest extends SysuiTestCase {
child = mSectionsManager.getSilentHeaderView(); child = mSectionsManager.getSilentHeaderView();
break; break;
case FSN: case FSN:
child = mockNotification(BUCKET_FOREGROUND_SERVICE, entry.mIsHeadsUp); child = mockNotification(BUCKET_FOREGROUND_SERVICE, entry.mIsGone);
break; break;
case PERSON: case PERSON:
child = mockNotification(BUCKET_PEOPLE, entry.mIsHeadsUp); child = mockNotification(BUCKET_PEOPLE, entry.mIsGone);
break; break;
case ALERTING: case ALERTING:
child = mockNotification(BUCKET_ALERTING, entry.mIsHeadsUp); child = mockNotification(BUCKET_ALERTING, entry.mIsGone);
break; break;
case GENTLE: case GENTLE:
child = mockNotification(BUCKET_SILENT, entry.mIsHeadsUp); child = mockNotification(BUCKET_SILENT, entry.mIsGone);
break; break;
case OTHER: case OTHER:
child = mock(View.class); child = mock(View.class);
@@ -643,7 +664,7 @@ public class NotificationSectionsManagerTest extends SysuiTestCase {
} }
} }
private View mockNotification(int bucket, boolean headsUp) { private View mockNotification(int bucket, boolean isGone) {
ExpandableNotificationRow notifRow = ExpandableNotificationRow notifRow =
mock(ExpandableNotificationRow.class, RETURNS_DEEP_STUBS); mock(ExpandableNotificationRow.class, RETURNS_DEEP_STUBS);
when(notifRow.getVisibility()).thenReturn(View.VISIBLE); when(notifRow.getVisibility()).thenReturn(View.VISIBLE);
@@ -659,8 +680,7 @@ public class NotificationSectionsManagerTest extends SysuiTestCase {
return null; return null;
}).when(mockEntry).setBucket(anyInt()); }).when(mockEntry).setBucket(anyInt());
when(notifRow.isHeadsUp()).thenReturn(headsUp); when(notifRow.getVisibility()).thenReturn(isGone ? View.GONE : View.VISIBLE);
when(mockEntry.isRowHeadsUp()).thenReturn(headsUp);
return notifRow; return notifRow;
} }
@@ -767,16 +787,16 @@ public class NotificationSectionsManagerTest extends SysuiTestCase {
child = mSectionsManager.getSilentHeaderView(); child = mSectionsManager.getSilentHeaderView();
break; break;
case FSN: case FSN:
child = mockNotification(BUCKET_FOREGROUND_SERVICE, entry.mIsHeadsUp); child = mockNotification(BUCKET_FOREGROUND_SERVICE, entry.mIsGone);
break; break;
case PERSON: case PERSON:
child = mockNotification(BUCKET_PEOPLE, entry.mIsHeadsUp); child = mockNotification(BUCKET_PEOPLE, entry.mIsGone);
break; break;
case ALERTING: case ALERTING:
child = mockNotification(BUCKET_ALERTING, entry.mIsHeadsUp); child = mockNotification(BUCKET_ALERTING, entry.mIsGone);
break; break;
case GENTLE: case GENTLE:
child = mockNotification(BUCKET_SILENT, entry.mIsHeadsUp); child = mockNotification(BUCKET_SILENT, entry.mIsGone);
break; break;
case OTHER: case OTHER:
child = mock(View.class); child = mock(View.class);
@@ -796,36 +816,25 @@ public class NotificationSectionsManagerTest extends SysuiTestCase {
private static final StackEntry ALERTING_HEADER = new StackEntry(ChildType.ALERTING_HEADER); private static final StackEntry ALERTING_HEADER = new StackEntry(ChildType.ALERTING_HEADER);
private static final StackEntry GENTLE_HEADER = new StackEntry(ChildType.GENTLE_HEADER); private static final StackEntry GENTLE_HEADER = new StackEntry(ChildType.GENTLE_HEADER);
private static final StackEntry FSN = new StackEntry(ChildType.FSN); private static final StackEntry FSN = new StackEntry(ChildType.FSN);
private static final StackEntry.Hunnable PERSON = new StackEntry.Hunnable(ChildType.PERSON); private static final StackEntry PERSON = new StackEntry(ChildType.PERSON);
private static final StackEntry.Hunnable ALERTING = new StackEntry.Hunnable(ChildType.ALERTING); private static final StackEntry ALERTING = new StackEntry(ChildType.ALERTING);
private static final StackEntry GENTLE = new StackEntry(ChildType.GENTLE); private static final StackEntry GENTLE = new StackEntry(ChildType.GENTLE);
private static class StackEntry { private static class StackEntry {
final ChildType mChildType; final ChildType mChildType;
final boolean mIsHeadsUp; final boolean mIsGone;
StackEntry(ChildType childType) { StackEntry(ChildType childType) {
this(childType, false); this(childType, false);
} }
StackEntry(ChildType childType, boolean isHeadsUp) { StackEntry(ChildType childType, boolean isGone) {
mChildType = childType; mChildType = childType;
mIsHeadsUp = isHeadsUp; mIsGone = isGone;
} }
static class Hunnable extends StackEntry { public StackEntry gone() {
return new StackEntry(mChildType, true);
Hunnable(ChildType childType) {
super(childType, false);
}
Hunnable(ChildType childType, boolean isHeadsUp) {
super(childType, isHeadsUp);
}
public Hunnable headsUp() {
return new Hunnable(mChildType, true);
}
} }
} }
} }