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

Commit 4cafee42 authored by Andreas Miko's avatar Andreas Miko
Browse files

Fix bundle guts after dismissal

This CL fixes two bugs that occur after dismissal of a bundle:
1) When a bundle returns it is not reinstantiated. Because the
longpresslistener was cleared the bundle guts would not open anymore
2) When dismissing via the dismiss button the bundle would return in
its opened guts state.

Bug: b/409748420 b/417442822 b/417444335
Test: Verified that guts can be opened closed after dismissal and
bundle reappears in normal state
Flag: com.android.systemui.notification_bundle_ui

Change-Id: I6f72e4203aae1e6d3d283aed1c423dc9f57ecaea
parent c2887cf7
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -164,7 +164,7 @@ private fun BottomRow(viewModel: BundleHeaderGutsViewModel, modifier: Modifier =
                modifier
                    .padding(vertical = 13.dp)
                    .clickable(
                        onClick = viewModel.onDismissClicked,
                        onClick = { viewModel.onDismissClicked() },
                        indication = null,
                        interactionSource = null,
                    ),
+4 −2
Original line number Diff line number Diff line
@@ -1807,8 +1807,10 @@ public class ExpandableNotificationRow extends ActivatableNotificationView
    @Override
    public void dismiss(boolean refocusOnDismiss) {
        super.dismiss(refocusOnDismiss);
        if (!isBundle()) {
            setLongPressListener(null);
            setDragController(null);
        }
        mGroupParentWhenDismissed = mNotificationParent;
        mChildAfterViewWhenDismissed = null;
        if (isChildInGroup()) {
+2 −3
Original line number Diff line number Diff line
@@ -509,12 +509,11 @@ public class NotificationGutsManager implements NotifGutsViewManager, CoreStarta

        Function0<Unit> onSettingsClicked = () -> {
            guts.resetFalsingCheck();
            // TODO(b/409748420): navigate to correct settings page
            startBundleSettingsActivity(0, row);
            return Unit.INSTANCE;
        };

        Function0<Unit> dismissBundle = () -> {
        Function0<Unit> onDismissBundle = () -> {
            guts.resetFalsingCheck();
            row.getDismissButtonOnClickListener().onClick(gutsContent.getContentView());
            return Unit.INSTANCE;
@@ -529,7 +528,7 @@ public class NotificationGutsManager implements NotifGutsViewManager, CoreStarta
            return Unit.INSTANCE;
        };

        gutsContent.bindNotification(row, onSettingsClicked, dismissBundle, enableBundle);
        gutsContent.bindNotification(row, onSettingsClicked, onDismissBundle, enableBundle);
    }

    /**
+15 −2
Original line number Diff line number Diff line
@@ -27,16 +27,29 @@ class BundleHeaderGutsViewModel(
    @StringRes val titleText: Int,
    @StringRes val summaryText: Int,
    @DrawableRes val bundleIcon: Int,

    /** Opens the settings page for this bundle. */
    val onSettingsClicked: () -> Unit = {},
    val onDismissClicked: () -> Unit = {},
    private val closeGuts: () -> Unit = {},

    /** Disables this bundle type in settings. */
    private val disableBundle: () -> Unit = {},

    /** Dismisses all bundle children which makes the bundle disappear. */
    private val onDismissClicked: () -> Unit = {},

    /** Closes the guts. This makes the bundle show in its normal state. */
    private val closeGuts: () -> Unit = {},
) {
    var switchState by mutableStateOf(true)

    fun getDoneOrApplyButtonText() =
        if (switchState) string.inline_done_button else string.inline_ok_button

    fun onDismissClicked() {
        closeGuts.invoke()
        onDismissClicked.invoke()
    }

    fun onDoneOrApplyClicked() {
        if (switchState) {
            closeGuts.invoke()