Fix gear being covered on notification update

If a notification is updated to be non clearable but is in the middle of
being dismissed then it is snapped back into place. Part of the ways to
check if it was being dismissed is by checking the translation of the
notification.

In the case that the notification was translated to display the gear, then
when it was updated it would be snapped back over the gear. This CL fixes
this issue by snapping back to the gear instead of 0 in this situation.

Bug: 28019486
Change-Id: Ic6c4c29b0adee15d7b358fcdbc8446e8a4cd9f82
This commit is contained in:
Mady Mellor
2016-04-18 16:37:06 -07:00
parent 8dd32a56f7
commit 86889c2d21
2 changed files with 14 additions and 4 deletions

View File

@@ -494,7 +494,15 @@ public class SwipeHelper implements Gefingerpoken {
updateSwipeProgressFromOffset(view, canAnimViewBeDismissed);
}
public void snapChildIfNeeded(final View view, boolean animate) {
/**
* Called when a view is updated to be non-dismissable, if the view was being dismissed before
* the update this will handle snapping it back into place.
*
* @param view the view to snap if necessary.
* @param animate whether to animate the snap or not.
* @param targetLeft the target to snap to.
*/
public void snapChildIfNeeded(final View view, boolean animate, float targetLeft) {
if ((mDragging && mCurrView == view) || mSnappingChild) {
return;
}
@@ -508,7 +516,7 @@ public class SwipeHelper implements Gefingerpoken {
}
if (needToSnap) {
if (animate) {
snapChild(view, 0 /* targetLeft */, 0.0f /* velocity */);
snapChild(view, targetLeft, 0.0f /* velocity */);
} else {
snapChildInstantly(view);
}

View File

@@ -990,9 +990,11 @@ public class NotificationStackScrollLayout extends ViewGroup
true /* isDismissAll */);
}
public void snapViewIfNeeded(View child) {
public void snapViewIfNeeded(ExpandableNotificationRow child) {
boolean animate = mIsExpanded || isPinnedHeadsUp(child);
mSwipeHelper.snapChildIfNeeded(child, animate);
// If the child is showing the gear to go to settings, snap to that
float targetLeft = child.getSettingsRow().isVisible() ? child.getTranslation() : 0;
mSwipeHelper.snapChildIfNeeded(child, animate, targetLeft);
}
@Override