Merge "Fixed an issue where children would animate strangely when removed" into nyc-dev
am: 35a8c2f00e
* commit '35a8c2f00e1c3bb2e2cf24260682400d025a49f0':
Fixed an issue where children would animate strangely when removed
Change-Id: I6d8a18d325bf8885a46fa20756bb3460cb9fa82f
This commit is contained in:
@@ -2181,7 +2181,8 @@ public abstract class BaseStatusBar extends SystemUI implements
|
||||
entry.row.setOnKeyguard(false);
|
||||
entry.row.setSystemExpanded(visibleNotifications == 0 && !childNotification);
|
||||
}
|
||||
boolean suppressedSummary = mGroupManager.isSummaryOfSuppressedGroup(entry.notification);
|
||||
boolean suppressedSummary = mGroupManager.isSummaryOfSuppressedGroup(
|
||||
entry.notification) && !entry.row.isRemoved();
|
||||
boolean childWithVisibleSummary = childNotification
|
||||
&& mGroupManager.getGroupSummary(entry.notification).getVisibility()
|
||||
== View.VISIBLE;
|
||||
|
||||
@@ -156,6 +156,9 @@ public class ExpandableNotificationRow extends ActivatableNotificationView {
|
||||
}
|
||||
}
|
||||
};
|
||||
private boolean mDismissed;
|
||||
private boolean mKeepInParent;
|
||||
private boolean mRemoved;
|
||||
|
||||
public NotificationContentView getPrivateLayout() {
|
||||
return mPrivateLayout;
|
||||
@@ -632,6 +635,9 @@ public class ExpandableNotificationRow extends ActivatableNotificationView {
|
||||
ArrayList<ExpandableNotificationRow> clonedList = new ArrayList<>(notificationChildren);
|
||||
for (int i = 0; i < clonedList.size(); i++) {
|
||||
ExpandableNotificationRow row = clonedList.get(i);
|
||||
if (row.keepInParent()) {
|
||||
continue;
|
||||
}
|
||||
mChildrenContainer.removeNotification(row);
|
||||
mHeaderUtil.restoreNotificationHeader(row);
|
||||
row.setIsChildInGroup(false, null);
|
||||
@@ -639,6 +645,30 @@ public class ExpandableNotificationRow extends ActivatableNotificationView {
|
||||
onChildrenCountChanged();
|
||||
}
|
||||
|
||||
public void setDismissed(boolean dismissed) {
|
||||
mDismissed = dismissed;
|
||||
}
|
||||
|
||||
public boolean isDismissed() {
|
||||
return mDismissed;
|
||||
}
|
||||
|
||||
public boolean keepInParent() {
|
||||
return mKeepInParent;
|
||||
}
|
||||
|
||||
public void setKeepInParent(boolean keepInParent) {
|
||||
mKeepInParent = keepInParent;
|
||||
}
|
||||
|
||||
public boolean isRemoved() {
|
||||
return mRemoved;
|
||||
}
|
||||
|
||||
public void setRemoved(boolean removed) {
|
||||
mRemoved = removed;
|
||||
}
|
||||
|
||||
public interface ExpansionLogger {
|
||||
public void logNotificationExpansion(String key, boolean userAction, boolean expanded);
|
||||
}
|
||||
|
||||
@@ -241,6 +241,12 @@ public class NotificationGroupManager implements HeadsUpManager.OnHeadsUpChanged
|
||||
if (group == null || group.summary == null || group.suppressed) {
|
||||
return false;
|
||||
}
|
||||
if (group.children.isEmpty()) {
|
||||
// If the suppression of a group changes because the last child was removed, this can
|
||||
// still be called temporarily because the child hasn't been fully removed yet. Let's
|
||||
// make sure we still return false in that case.
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -1495,6 +1495,8 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
|
||||
mHeadsUpEntriesToRemoveOnSwitch.add(mHeadsUpManager.getEntry(key));
|
||||
return;
|
||||
}
|
||||
// Let's remove the children if this was a summary
|
||||
handleGroupSummaryRemoved(key, ranking);
|
||||
StatusBarNotification old = removeNotificationViews(key, ranking);
|
||||
if (SPEW) Log.d(TAG, "removeNotification key=" + key + " old=" + old);
|
||||
|
||||
@@ -1511,6 +1513,40 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
|
||||
setAreThereNotifications();
|
||||
}
|
||||
|
||||
/**
|
||||
* Ensures that the group children are cancelled immediately when the group summary is cancelled
|
||||
* instead of waiting for the notification manager to send all cancels. Otherwise this could
|
||||
* lead to flickers.
|
||||
*
|
||||
* This also ensures that the animation looks nice and only consists of a single disappear
|
||||
* animation instead of multiple.
|
||||
*
|
||||
* @param key the key of the notification was removed
|
||||
* @param ranking the current ranking
|
||||
*/
|
||||
private void handleGroupSummaryRemoved(String key,
|
||||
RankingMap ranking) {
|
||||
Entry entry = mNotificationData.get(key);
|
||||
if (entry != null && entry.row != null
|
||||
&& entry.row.isSummaryWithChildren()) {
|
||||
if (entry.notification.getOverrideGroupKey() != null && !entry.row.isDismissed()) {
|
||||
// We don't want to remove children for autobundled notifications as they are not
|
||||
// always cancelled. We only remove them if they were dismissed by the user.
|
||||
return;
|
||||
}
|
||||
entry.row.setRemoved(true);
|
||||
List<ExpandableNotificationRow> notificationChildren =
|
||||
entry.row.getNotificationChildren();
|
||||
ArrayList<ExpandableNotificationRow> toRemove = new ArrayList<>(notificationChildren);
|
||||
for (int i = 0; i < toRemove.size(); i++) {
|
||||
toRemove.get(i).setKeepInParent(true);
|
||||
}
|
||||
for (int i = 0; i < toRemove.size(); i++) {
|
||||
removeNotification(toRemove.get(i).getStatusBarNotification().getKey(), ranking);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void refreshLayout(int layoutDirection) {
|
||||
if (mNavigationBarView != null) {
|
||||
@@ -1700,7 +1736,9 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
|
||||
if (children != null) {
|
||||
toRemove.clear();
|
||||
for (ExpandableNotificationRow childRow : children) {
|
||||
if (orderedChildren == null || !orderedChildren.contains(childRow)) {
|
||||
if ((orderedChildren == null
|
||||
|| !orderedChildren.contains(childRow))
|
||||
&& !childRow.keepInParent()) {
|
||||
toRemove.add(childRow);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -724,6 +724,7 @@ public class NotificationStackScrollLayout extends ViewGroup
|
||||
performDismiss(groupSummary);
|
||||
}
|
||||
}
|
||||
row.setDismissed(true);
|
||||
}
|
||||
final View veto = v.findViewById(R.id.veto);
|
||||
if (veto != null && veto.getVisibility() != View.GONE) {
|
||||
|
||||
@@ -3316,9 +3316,9 @@ public class NotificationManagerService extends SystemService {
|
||||
|
||||
mNotificationList.remove(index);
|
||||
|
||||
cancelNotificationLocked(r, sendDelete, reason);
|
||||
cancelGroupChildrenLocked(r, callingUid, callingPid, listenerName,
|
||||
REASON_GROUP_SUMMARY_CANCELED);
|
||||
cancelNotificationLocked(r, sendDelete, reason);
|
||||
updateLightsLocked();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user