Merge "Add transient notification views of group children to the child container, not directly to the row." into tm-qpr-dev am: e07cc86b6c
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/21534724 Change-Id: Ia1f49becfa420f5afcf35c0539581cd62c7b856d Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -3699,7 +3699,9 @@ public class ExpandableNotificationRow extends ActivatableNotificationView
|
|||||||
}
|
}
|
||||||
pw.println("Roundness: " + getRoundableState().debugString());
|
pw.println("Roundness: " + getRoundableState().debugString());
|
||||||
|
|
||||||
if (mIsSummaryWithChildren) {
|
int transientViewCount = mChildrenContainer == null
|
||||||
|
? 0 : mChildrenContainer.getTransientViewCount();
|
||||||
|
if (mIsSummaryWithChildren || transientViewCount > 0) {
|
||||||
pw.println();
|
pw.println();
|
||||||
pw.print("ChildrenContainer");
|
pw.print("ChildrenContainer");
|
||||||
pw.print(" visibility: " + mChildrenContainer.getVisibility());
|
pw.print(" visibility: " + mChildrenContainer.getVisibility());
|
||||||
@@ -3707,8 +3709,7 @@ public class ExpandableNotificationRow extends ActivatableNotificationView
|
|||||||
pw.print(", translationY: " + mChildrenContainer.getTranslationY());
|
pw.print(", translationY: " + mChildrenContainer.getTranslationY());
|
||||||
pw.println();
|
pw.println();
|
||||||
List<ExpandableNotificationRow> notificationChildren = getAttachedChildren();
|
List<ExpandableNotificationRow> notificationChildren = getAttachedChildren();
|
||||||
pw.println("Children: " + notificationChildren.size());
|
pw.print("Children: " + notificationChildren.size() + " {");
|
||||||
pw.print("{");
|
|
||||||
pw.increaseIndent();
|
pw.increaseIndent();
|
||||||
for (ExpandableNotificationRow child : notificationChildren) {
|
for (ExpandableNotificationRow child : notificationChildren) {
|
||||||
pw.println();
|
pw.println();
|
||||||
@@ -3716,6 +3717,15 @@ public class ExpandableNotificationRow extends ActivatableNotificationView
|
|||||||
}
|
}
|
||||||
pw.decreaseIndent();
|
pw.decreaseIndent();
|
||||||
pw.println("}");
|
pw.println("}");
|
||||||
|
pw.print("Transient Views: " + transientViewCount + " {");
|
||||||
|
pw.increaseIndent();
|
||||||
|
for (int i = 0; i < transientViewCount; i++) {
|
||||||
|
pw.println();
|
||||||
|
ExpandableView child = (ExpandableView) mChildrenContainer.getTransientView(i);
|
||||||
|
child.dump(pw, args);
|
||||||
|
}
|
||||||
|
pw.decreaseIndent();
|
||||||
|
pw.println("}");
|
||||||
} else if (mPrivateLayout != null) {
|
} else if (mPrivateLayout != null) {
|
||||||
mPrivateLayout.dumpSmartReplies(pw);
|
mPrivateLayout.dumpSmartReplies(pw);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -312,7 +312,7 @@ public class ExpandableNotificationRowController implements NotifViewController
|
|||||||
}
|
}
|
||||||
mView.removeChildNotification(childView);
|
mView.removeChildNotification(childView);
|
||||||
if (!isTransfer) {
|
if (!isTransfer) {
|
||||||
mListContainer.notifyGroupChildRemoved(childView, mView);
|
mListContainer.notifyGroupChildRemoved(childView, mView.getChildrenContainer());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2852,7 +2852,7 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable
|
|||||||
}
|
}
|
||||||
child.setOnHeightChangedListener(null);
|
child.setOnHeightChangedListener(null);
|
||||||
updateScrollStateForRemovedChild(child);
|
updateScrollStateForRemovedChild(child);
|
||||||
boolean animationGenerated = generateRemoveAnimation(child);
|
boolean animationGenerated = container != null && generateRemoveAnimation(child);
|
||||||
if (animationGenerated) {
|
if (animationGenerated) {
|
||||||
if (!mSwipedOutViews.contains(child) || !isFullySwipedOut(child)) {
|
if (!mSwipedOutViews.contains(child) || !isFullySwipedOut(child)) {
|
||||||
container.addTransientView(child, 0);
|
container.addTransientView(child, 0);
|
||||||
|
|||||||
@@ -0,0 +1,29 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2023 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.android.systemui.statusbar.notification.collection.render
|
||||||
|
|
||||||
|
import android.view.View
|
||||||
|
|
||||||
|
class FakeNodeController(
|
||||||
|
override val view: View,
|
||||||
|
override val nodeLabel: String = "fakeNodeController"
|
||||||
|
) : NodeController {
|
||||||
|
override fun offerToKeepInParentForAnimation(): Boolean = false
|
||||||
|
override fun removeFromParentIfKeptForAnimation(): Boolean = false
|
||||||
|
override fun resetKeepInParentForAnimation() = Unit
|
||||||
|
}
|
||||||
@@ -30,15 +30,19 @@ import com.android.systemui.plugins.PluginManager
|
|||||||
import com.android.systemui.plugins.statusbar.StatusBarStateController
|
import com.android.systemui.plugins.statusbar.StatusBarStateController
|
||||||
import com.android.systemui.statusbar.NotificationMediaManager
|
import com.android.systemui.statusbar.NotificationMediaManager
|
||||||
import com.android.systemui.statusbar.SmartReplyController
|
import com.android.systemui.statusbar.SmartReplyController
|
||||||
|
import com.android.systemui.statusbar.notification.collection.render.FakeNodeController
|
||||||
import com.android.systemui.statusbar.notification.collection.render.GroupExpansionManager
|
import com.android.systemui.statusbar.notification.collection.render.GroupExpansionManager
|
||||||
import com.android.systemui.statusbar.notification.collection.render.GroupMembershipManager
|
import com.android.systemui.statusbar.notification.collection.render.GroupMembershipManager
|
||||||
import com.android.systemui.statusbar.notification.logging.NotificationLogger
|
import com.android.systemui.statusbar.notification.logging.NotificationLogger
|
||||||
import com.android.systemui.statusbar.notification.people.PeopleNotificationIdentifier
|
import com.android.systemui.statusbar.notification.people.PeopleNotificationIdentifier
|
||||||
|
import com.android.systemui.statusbar.notification.stack.NotificationChildrenContainer
|
||||||
import com.android.systemui.statusbar.notification.stack.NotificationListContainer
|
import com.android.systemui.statusbar.notification.stack.NotificationListContainer
|
||||||
import com.android.systemui.statusbar.phone.KeyguardBypassController
|
import com.android.systemui.statusbar.phone.KeyguardBypassController
|
||||||
import com.android.systemui.statusbar.policy.HeadsUpManager
|
import com.android.systemui.statusbar.policy.HeadsUpManager
|
||||||
import com.android.systemui.statusbar.policy.SmartReplyConstants
|
import com.android.systemui.statusbar.policy.SmartReplyConstants
|
||||||
import com.android.systemui.statusbar.policy.dagger.RemoteInputViewSubcomponent
|
import com.android.systemui.statusbar.policy.dagger.RemoteInputViewSubcomponent
|
||||||
|
import com.android.systemui.util.mockito.any
|
||||||
|
import com.android.systemui.util.mockito.eq
|
||||||
import com.android.systemui.util.mockito.mock
|
import com.android.systemui.util.mockito.mock
|
||||||
import com.android.systemui.util.time.SystemClock
|
import com.android.systemui.util.time.SystemClock
|
||||||
import com.android.systemui.wmshell.BubblesManager
|
import com.android.systemui.wmshell.BubblesManager
|
||||||
@@ -67,6 +71,7 @@ class ExpandableNotificationRowControllerTest : SysuiTestCase() {
|
|||||||
private val metricsLogger: MetricsLogger = mock()
|
private val metricsLogger: MetricsLogger = mock()
|
||||||
private val logBufferLogger: NotificationRowLogger = mock()
|
private val logBufferLogger: NotificationRowLogger = mock()
|
||||||
private val listContainer: NotificationListContainer = mock()
|
private val listContainer: NotificationListContainer = mock()
|
||||||
|
private val childrenContainer: NotificationChildrenContainer = mock()
|
||||||
private val mediaManager: NotificationMediaManager = mock()
|
private val mediaManager: NotificationMediaManager = mock()
|
||||||
private val smartReplyConstants: SmartReplyConstants = mock()
|
private val smartReplyConstants: SmartReplyConstants = mock()
|
||||||
private val smartReplyController: SmartReplyController = mock()
|
private val smartReplyController: SmartReplyController = mock()
|
||||||
@@ -126,6 +131,7 @@ class ExpandableNotificationRowControllerTest : SysuiTestCase() {
|
|||||||
Optional.of(bubblesManager),
|
Optional.of(bubblesManager),
|
||||||
dragController
|
dragController
|
||||||
)
|
)
|
||||||
|
whenever(view.childrenContainer).thenReturn(childrenContainer)
|
||||||
}
|
}
|
||||||
|
|
||||||
@After
|
@After
|
||||||
@@ -170,4 +176,32 @@ class ExpandableNotificationRowControllerTest : SysuiTestCase() {
|
|||||||
Assert.assertFalse(controller.removeFromParentIfKeptForAnimation())
|
Assert.assertFalse(controller.removeFromParentIfKeptForAnimation())
|
||||||
Mockito.verifyNoMoreInteractions(parentView)
|
Mockito.verifyNoMoreInteractions(parentView)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun removeChild_whenTransfer() {
|
||||||
|
val childView: ExpandableNotificationRow = mock()
|
||||||
|
val childNodeController = FakeNodeController(childView)
|
||||||
|
|
||||||
|
// GIVEN a child is removed for transfer
|
||||||
|
controller.removeChild(childNodeController, /* isTransfer= */ true)
|
||||||
|
|
||||||
|
// VERIFY the listContainer is not notified
|
||||||
|
Mockito.verify(childView).isChangingPosition = eq(true)
|
||||||
|
Mockito.verify(view).removeChildNotification(eq(childView))
|
||||||
|
Mockito.verify(listContainer, never()).notifyGroupChildRemoved(any(), any())
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun removeChild_whenNotTransfer() {
|
||||||
|
val childView: ExpandableNotificationRow = mock()
|
||||||
|
val childNodeController = FakeNodeController(childView)
|
||||||
|
|
||||||
|
// GIVEN a child is removed for real
|
||||||
|
controller.removeChild(childNodeController, /* isTransfer= */ false)
|
||||||
|
|
||||||
|
// VERIFY the listContainer is passed the childrenContainer for transient animations
|
||||||
|
Mockito.verify(childView, never()).isChangingPosition = any()
|
||||||
|
Mockito.verify(view).removeChildNotification(eq(childView))
|
||||||
|
Mockito.verify(listContainer).notifyGroupChildRemoved(eq(childView), eq(childrenContainer))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user