Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e6ff165b authored by Julia Reynolds's avatar Julia Reynolds
Browse files

Consolidate group expansion handling

There is a small behavior change - if you double expand a minimized group,
when collapsing the group it'll return to its initial stage, rather than
the 'expanded once' state.
was: min -> normal collapsed appearance -> fully expanded -> normal collapsed
now: min -> normal collapsed appearance -> fully expanded -> min

Test: ExpandableNotificationRowTest
Manual: expand group, long press, launch settings intent, open shade - group is collapsed
Manual: post group in 1 & 2 positions in shade - view lock screen - groups are collapsed
Manual: expand group, collapse and expand shade - group is collapsed
Flag: EXEMPT bug fix
Fixes: 438722024
Change-Id: I8a799676160c8665d251b50ac7a1acce1eb3a1ca
parent a3742da5
Loading
Loading
Loading
Loading
+10 −7
Original line number Diff line number Diff line
@@ -414,20 +414,20 @@ public class ExpandableNotificationRow extends ActivatableNotificationView
        if (isBundle()
                || (!shouldShowPublic() && (!mIsMinimized || isExpanded()) && isGroupRoot())) {
            mGroupExpansionChanging = true;

            if (NotificationBundleUi.isEnabled()) {
                final boolean wasExpanded =  mGroupExpansionManager.isGroupExpanded(mEntryAdapter);
                boolean nowExpanded = mGroupExpansionManager.toggleGroupExpansion(mEntryAdapter);
                mOnExpandClickListener.onExpandClicked(this, mEntryAdapter, nowExpanded);
                mOnExpandClickListener.onExpandClicked(this, mEntryAdapter, !wasExpanded);
                if (isBundle()) {
                    mBundleInteractionLogger.logBundleExpansionChanged(
                            mEntryAdapter.getBundleType(), !wasExpanded);
                } else {
                    if (shouldLogExpandClickMetric) {
                        mMetricsLogger.action(
                                MetricsEvent.ACTION_NOTIFICATION_GROUP_EXPANDER, nowExpanded);
                                MetricsEvent.ACTION_NOTIFICATION_GROUP_EXPANDER, !wasExpanded);
                    }
                }
                onExpansionChanged(true /* userAction */, wasExpanded);
                setUserExpanded(!wasExpanded, true);
            } else {
                final boolean wasExpanded =
                        mGroupExpansionManager.isGroupExpanded(getEntryLegacy());
@@ -3187,8 +3187,8 @@ public class ExpandableNotificationRow extends ActivatableNotificationView
     * @param allowChildExpansion whether a call to this method allows expanding children
     */
    public void setUserExpanded(boolean userExpanded, boolean allowChildExpansion) {
        if (mIsSummaryWithChildren && !shouldShowPublic() && allowChildExpansion
                && !mChildrenContainer.showingAsLowPriority()) {
        if (isBundle()
                || (allowChildExpansion && !shouldShowPublic() && (!mIsMinimized || isExpanded()) && isGroupRoot())) {
            final boolean wasExpanded = isGroupExpanded();
            if (NotificationBundleUi.isEnabled()) {
                if (mEntryAdapter.isGroupRoot()) {
@@ -3197,6 +3197,8 @@ public class ExpandableNotificationRow extends ActivatableNotificationView
            } else {
                mGroupExpansionManager.setGroupExpanded(getEntryLegacy(), userExpanded);
            }
            mHasUserChangedExpansion = true;
            mUserExpanded = userExpanded;
            onExpansionChanged(true /* userAction */, wasExpanded);
            return;
        }
@@ -3385,7 +3387,8 @@ public class ExpandableNotificationRow extends ActivatableNotificationView
        return mGroupExpansionManager.isGroupExpanded(getEntryLegacy());
    }

    private boolean isGroupRoot() {
    @VisibleForTesting
    boolean isGroupRoot() {
        return NotificationBundleUi.isEnabled()
                ? mGroupMembershipManager.isGroupRoot(mEntryAdapter)
                : mGroupMembershipManager.isGroupSummary(getEntryLegacy());
+69 −0
Original line number Diff line number Diff line
@@ -115,6 +115,13 @@ public class ExpandableNotificationRowTest extends SysuiTestCase {
        allowTestableLooperAsMainThread();
        mFeatureFlags.set(Flags.ENABLE_NOTIFICATIONS_SIMULATE_SLOW_MEASURE, false);
        mKosmos = new KosmosJavaAdapter(this);

        mKosmos.getGroupExpansionManager().registerGroupExpansionChangeListener(
                (changedRow, expanded) -> {
                    if (changedRow.isGroupRoot()) {
                        changedRow.setChildrenExpanded(expanded);
                    }
                });
    }

    @Test
@@ -1264,6 +1271,68 @@ public class ExpandableNotificationRowTest extends SysuiTestCase {
        assertThat(row.hasStatusBarChipDuringHeadsUpAnimation()).isFalse();
    }

    @Test
    public void testToggleNotificationExpansion() {
        final ExpandableNotificationRow row = mKosmos.createRow();
        row.toggleExpansionState();
        assertThat(row.isExpanded()).isTrue();
        assertThat(row.isUserExpanded()).isTrue();
        assertThat(row.hasUserChangedExpansion()).isTrue();

        row.toggleExpansionState();
        assertThat(row.isExpanded()).isFalse();
        assertThat(row.isUserExpanded()).isFalse();
        assertThat(row.hasUserChangedExpansion()).isTrue();
    }

    @Test
    public void testToggleGroupNotificationExpansion() {
        final ExpandableNotificationRow row = mKosmos.createRowGroup();
        row.toggleExpansionState();
        assertThat(row.isExpanded()).isTrue();
        assertThat(row.isUserExpanded()).isTrue();
        assertThat(row.hasUserChangedExpansion()).isTrue();
        assertThat(row.areChildrenExpanded()).isTrue();
        assertThat(row.getAttachedChildren().get(0).isExpanded()).isFalse();

        row.toggleExpansionState();
        assertThat(row.isExpanded()).isFalse();
        assertThat(row.isUserExpanded()).isFalse();
        assertThat(row.hasUserChangedExpansion()).isTrue();
        assertThat(row.areChildrenExpanded()).isFalse();
        assertThat(row.getAttachedChildren().get(0).isExpanded()).isFalse();
    }

    @Test
    public void testToggleGroupNotificationExpansion_minimized() {
        final ExpandableNotificationRow row = mKosmos.createRowGroup();
        row.setIsMinimized(true);

        // expand into the same state as collapsed non-minimized groups
        row.toggleExpansionState();
        assertThat(row.isExpanded()).isTrue();
        assertThat(row.isUserExpanded()).isTrue();
        assertThat(row.hasUserChangedExpansion()).isTrue();
        assertThat(row.areChildrenExpanded()).isFalse();
        assertThat(row.getAttachedChildren().get(0).isExpanded()).isFalse();

        // fully expand
        row.toggleExpansionState();
        assertThat(row.isExpanded()).isTrue();
        assertThat(row.isUserExpanded()).isTrue();
        assertThat(row.hasUserChangedExpansion()).isTrue();
        assertThat(row.areChildrenExpanded()).isTrue();
        assertThat(row.getAttachedChildren().get(0).isExpanded()).isFalse();

        // back to  fully minimized state
        row.toggleExpansionState();
        assertThat(row.isExpanded()).isFalse();
        assertThat(row.isUserExpanded()).isFalse();
        assertThat(row.hasUserChangedExpansion()).isTrue();
        assertThat(row.areChildrenExpanded()).isFalse();
        assertThat(row.getAttachedChildren().get(0).isExpanded()).isFalse();
    }

    private void setDrawableIconsInImageView(CachingIconView icon, Drawable iconDrawable,
            Drawable rightIconDrawable) {
        ImageView iconView = mock(ImageView.class);