New Pipeline: plumb isChangingPosition

ExpandableNotificationRow has an isChangingPosition flag that's used to
inform the remote input code of when a view is being detached only
briefly as the shade is rearranged, to give it a chance to save and
restore state that would otherwise be discarded.

The new pipeline doesn't currently set and clear this flag, which broke
lifetime extension for notifications with a remote input history (one or
more replies sent), but also kept input focus from being preserved when
a notification is moved.

This change sets and clears the flag in the relevant NodeControllers. It
may or may not render ag/16749051 redundant.

Bug: 211161595
Test: manual, after locally reverting ag/16749051
Change-Id: Ie808a854f6a0bc523dffcc2787818e5765d507ec
This commit is contained in:
Julia Tuttle
2022-02-02 14:20:28 -05:00
parent f278d2d735
commit 4d4e94ca94
2 changed files with 9 additions and 0 deletions

View File

@@ -17,6 +17,7 @@
package com.android.systemui.statusbar.notification.collection.render
import android.view.View
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow
import com.android.systemui.statusbar.notification.row.ExpandableView
import com.android.systemui.statusbar.notification.stack.NotificationListContainer
@@ -41,6 +42,7 @@ class RootNodeController(
override fun addChildAt(child: NodeController, index: Int) {
listContainer.addContainerViewAt(child.view, index)
listContainer.onNotificationViewUpdateFinished()
(child.view as? ExpandableNotificationRow)?.isChangingPosition = false
}
override fun moveChildTo(child: NodeController, index: Int) {
@@ -50,6 +52,7 @@ class RootNodeController(
override fun removeChild(child: NodeController, isTransfer: Boolean) {
if (isTransfer) {
listContainer.setChildTransferInProgress(true)
(child.view as? ExpandableNotificationRow)?.isChangingPosition = true
}
listContainer.removeContainerView(child.view)
if (isTransfer) {

View File

@@ -248,19 +248,25 @@ public class ExpandableNotificationRowController implements NotifViewController
mView.addChildNotification((ExpandableNotificationRow) child.getView(), index);
mListContainer.notifyGroupChildAdded(childView);
childView.setChangingPosition(false);
}
@Override
public void moveChildTo(NodeController child, int index) {
ExpandableNotificationRow childView = (ExpandableNotificationRow) child.getView();
childView.setChangingPosition(true);
mView.removeChildNotification(childView);
mView.addChildNotification(childView, index);
childView.setChangingPosition(false);
}
@Override
public void removeChild(NodeController child, boolean isTransfer) {
ExpandableNotificationRow childView = (ExpandableNotificationRow) child.getView();
if (isTransfer) {
childView.setChangingPosition(true);
}
mView.removeChildNotification(childView);
if (!isTransfer) {
mListContainer.notifyGroupChildRemoved(childView, mView);