Merge "Made the dismissal of notifications snappier" into nyc-dev
am: 910f69e0bb
* commit '910f69e0bb7fc9a6ef880f27fe99ad3a7abbdf15':
Made the dismissal of notifications snappier
Change-Id: I1aeede63075c360101e5fb4d327b4945d064a846
This commit is contained in:
@@ -669,6 +669,10 @@ public class ExpandableNotificationRow extends ActivatableNotificationView {
|
|||||||
mRemoved = removed;
|
mRemoved = removed;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public NotificationChildrenContainer getChildrenContainer() {
|
||||||
|
return mChildrenContainer;
|
||||||
|
}
|
||||||
|
|
||||||
public interface ExpansionLogger {
|
public interface ExpansionLogger {
|
||||||
public void logNotificationExpansion(String key, boolean userAction, boolean expanded);
|
public void logNotificationExpansion(String key, boolean userAction, boolean expanded);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -44,6 +44,7 @@ public abstract class ExpandableView extends FrameLayout {
|
|||||||
private int mMinClipTopAmount = 0;
|
private int mMinClipTopAmount = 0;
|
||||||
private boolean mClipToActualHeight = true;
|
private boolean mClipToActualHeight = true;
|
||||||
private boolean mChangingPosition = false;
|
private boolean mChangingPosition = false;
|
||||||
|
private ViewGroup mTransientContainer;
|
||||||
|
|
||||||
public ExpandableView(Context context, AttributeSet attrs) {
|
public ExpandableView(Context context, AttributeSet attrs) {
|
||||||
super(context, attrs);
|
super(context, attrs);
|
||||||
@@ -416,6 +417,14 @@ public abstract class ExpandableView extends FrameLayout {
|
|||||||
return mChangingPosition;
|
return mChangingPosition;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setTransientContainer(ViewGroup transientContainer) {
|
||||||
|
mTransientContainer = transientContainer;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ViewGroup getTransientContainer() {
|
||||||
|
return mTransientContainer;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A listener notifying when {@link #getActualHeight} changes.
|
* A listener notifying when {@link #getActualHeight} changes.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -1747,7 +1747,8 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
|
|||||||
if (mNotificationData.get(remove.getStatusBarNotification().getKey()) == null) {
|
if (mNotificationData.get(remove.getStatusBarNotification().getKey()) == null) {
|
||||||
// We only want to add an animation if the view is completely removed
|
// We only want to add an animation if the view is completely removed
|
||||||
// otherwise it's just a transfer
|
// otherwise it's just a transfer
|
||||||
mStackScroller.notifyGroupChildRemoved(remove);
|
mStackScroller.notifyGroupChildRemoved(remove,
|
||||||
|
parent.getChildrenContainer());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -687,6 +687,17 @@ public class NotificationStackScrollLayout extends ViewGroup
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void onChildDismissed(View v) {
|
public void onChildDismissed(View v) {
|
||||||
|
ExpandableNotificationRow row = (ExpandableNotificationRow) v;
|
||||||
|
if (!row.isDismissed()) {
|
||||||
|
handleChildDismissed(v);
|
||||||
|
}
|
||||||
|
ViewGroup transientContainer = row.getTransientContainer();
|
||||||
|
if (transientContainer != null) {
|
||||||
|
transientContainer.removeTransientView(v);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void handleChildDismissed(View v) {
|
||||||
if (mDismissAllInProgress) {
|
if (mDismissAllInProgress) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -2071,7 +2082,7 @@ public class NotificationStackScrollLayout extends ViewGroup
|
|||||||
// we only call our internal methods if this is actually a removal and not just a
|
// we only call our internal methods if this is actually a removal and not just a
|
||||||
// notification which becomes a child notification
|
// notification which becomes a child notification
|
||||||
if (!mChildTransferInProgress) {
|
if (!mChildTransferInProgress) {
|
||||||
onViewRemovedInternal(child);
|
onViewRemovedInternal(child, this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2083,24 +2094,30 @@ public class NotificationStackScrollLayout extends ViewGroup
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onViewRemovedInternal(View child) {
|
private void onViewRemovedInternal(View child, ViewGroup transientContainer) {
|
||||||
if (mChangePositionInProgress) {
|
if (mChangePositionInProgress) {
|
||||||
// This is only a position change, don't do anything special
|
// This is only a position change, don't do anything special
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
((ExpandableView) child).setOnHeightChangedListener(null);
|
ExpandableView expandableView = (ExpandableView) child;
|
||||||
|
expandableView.setOnHeightChangedListener(null);
|
||||||
mCurrentStackScrollState.removeViewStateForView(child);
|
mCurrentStackScrollState.removeViewStateForView(child);
|
||||||
updateScrollStateForRemovedChild((ExpandableView) child);
|
updateScrollStateForRemovedChild(expandableView);
|
||||||
boolean animationGenerated = generateRemoveAnimation(child);
|
boolean animationGenerated = generateRemoveAnimation(child);
|
||||||
if (animationGenerated && !mSwipedOutViews.contains(child)) {
|
if (animationGenerated) {
|
||||||
// Add this view to an overlay in order to ensure that it will still be temporary
|
if (!mSwipedOutViews.contains(child)) {
|
||||||
// drawn when removed
|
getOverlay().add(child);
|
||||||
getOverlay().add(child);
|
} else if (Math.abs(expandableView.getTranslation()) != expandableView.getWidth()) {
|
||||||
|
transientContainer.addTransientView(child, 0);
|
||||||
|
expandableView.setTransientContainer(transientContainer);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
mSwipedOutViews.remove(child);
|
||||||
}
|
}
|
||||||
updateAnimationState(false, child);
|
updateAnimationState(false, child);
|
||||||
|
|
||||||
// Make sure the clipRect we might have set is removed
|
// Make sure the clipRect we might have set is removed
|
||||||
((ExpandableView) child).setClipTopOptimization(0);
|
expandableView.setClipTopOptimization(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isChildInGroup(View child) {
|
private boolean isChildInGroup(View child) {
|
||||||
@@ -2277,8 +2294,8 @@ public class NotificationStackScrollLayout extends ViewGroup
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void notifyGroupChildRemoved(View row) {
|
public void notifyGroupChildRemoved(View row, ViewGroup childrenContainer) {
|
||||||
onViewRemovedInternal(row);
|
onViewRemovedInternal(row, childrenContainer);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void notifyGroupChildAdded(View row) {
|
public void notifyGroupChildAdded(View row) {
|
||||||
@@ -2485,8 +2502,8 @@ public class NotificationStackScrollLayout extends ViewGroup
|
|||||||
// we need to know the view after this one
|
// we need to know the view after this one
|
||||||
event.viewAfterChangingView = getFirstChildBelowTranlsationY(child.getTranslationY());
|
event.viewAfterChangingView = getFirstChildBelowTranlsationY(child.getTranslationY());
|
||||||
mAnimationEvents.add(event);
|
mAnimationEvents.add(event);
|
||||||
|
mSwipedOutViews.remove(child);
|
||||||
}
|
}
|
||||||
mSwipedOutViews.clear();
|
|
||||||
mChildrenToRemoveAnimated.clear();
|
mChildrenToRemoveAnimated.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2764,11 +2781,25 @@ public class NotificationStackScrollLayout extends ViewGroup
|
|||||||
mOwnScrollY = 0;
|
mOwnScrollY = 0;
|
||||||
mPhoneStatusBar.resetUserExpandedStates();
|
mPhoneStatusBar.resetUserExpandedStates();
|
||||||
|
|
||||||
// lets make sure nothing is in the overlay anymore
|
// lets make sure nothing is in the overlay / transient anymore
|
||||||
|
clearTransientViews(this);
|
||||||
|
for (int i = 0; i < getChildCount(); i++) {
|
||||||
|
ExpandableView child = (ExpandableView) getChildAt(i);
|
||||||
|
if (child instanceof ExpandableNotificationRow) {
|
||||||
|
ExpandableNotificationRow row = (ExpandableNotificationRow) child;
|
||||||
|
clearTransientViews(row.getChildrenContainer());
|
||||||
|
}
|
||||||
|
}
|
||||||
getOverlay().clear();
|
getOverlay().clear();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void clearTransientViews(ViewGroup viewGroup) {
|
||||||
|
while (viewGroup != null && viewGroup.getTransientViewCount() != 0) {
|
||||||
|
viewGroup.removeTransientView(getTransientView(0));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void onPanelTrackingStarted() {
|
public void onPanelTrackingStarted() {
|
||||||
mPanelTracking = true;
|
mPanelTracking = true;
|
||||||
}
|
}
|
||||||
@@ -3591,6 +3622,11 @@ public class NotificationStackScrollLayout extends ViewGroup
|
|||||||
public void dismissChild(final View view, float velocity,
|
public void dismissChild(final View view, float velocity,
|
||||||
boolean useAccelerateInterpolator) {
|
boolean useAccelerateInterpolator) {
|
||||||
super.dismissChild(view, velocity, useAccelerateInterpolator);
|
super.dismissChild(view, velocity, useAccelerateInterpolator);
|
||||||
|
if (mIsExpanded) {
|
||||||
|
// We don't want to quick-dismiss when it's a heads up as this might lead to closing
|
||||||
|
// of the panel early.
|
||||||
|
handleChildDismissed(view);
|
||||||
|
}
|
||||||
handleGearCoveredOrDismissed();
|
handleGearCoveredOrDismissed();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -865,8 +865,12 @@ public class StackStateAnimator {
|
|||||||
} else if (event.animationType ==
|
} else if (event.animationType ==
|
||||||
NotificationStackScrollLayout.AnimationEvent.ANIMATION_TYPE_REMOVE_SWIPED_OUT) {
|
NotificationStackScrollLayout.AnimationEvent.ANIMATION_TYPE_REMOVE_SWIPED_OUT) {
|
||||||
// A race condition can trigger the view to be added to the overlay even though
|
// A race condition can trigger the view to be added to the overlay even though
|
||||||
// it is swiped out. So let's remove it
|
// it was fully swiped out. So let's remove it
|
||||||
mHostLayout.getOverlay().remove(changingView);
|
mHostLayout.getOverlay().remove(changingView);
|
||||||
|
if (Math.abs(changingView.getTranslation()) == changingView.getWidth()
|
||||||
|
&& changingView.getTransientContainer() != null) {
|
||||||
|
changingView.getTransientContainer().removeTransientView(changingView);
|
||||||
|
}
|
||||||
} else if (event.animationType == NotificationStackScrollLayout
|
} else if (event.animationType == NotificationStackScrollLayout
|
||||||
.AnimationEvent.ANIMATION_TYPE_GROUP_EXPANSION_CHANGED) {
|
.AnimationEvent.ANIMATION_TYPE_GROUP_EXPANSION_CHANGED) {
|
||||||
ExpandableNotificationRow row = (ExpandableNotificationRow) event.changingView;
|
ExpandableNotificationRow row = (ExpandableNotificationRow) event.changingView;
|
||||||
|
|||||||
Reference in New Issue
Block a user