Merge "Ignore GONE views in shade when processing sections" into rvc-dev am: af2f54f4e3
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/12211269 Change-Id: I4010f19c21bb6185e18dade509c611d03655a36f
This commit is contained in:
@@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user