Merge "Fixed an issue where a notification could stay userlocked" into oc-dr1-dev

This commit is contained in:
TreeHugger Robot
2017-07-06 15:23:09 +00:00
committed by Android (Google) Code Review
2 changed files with 47 additions and 10 deletions

View File

@@ -545,6 +545,16 @@ public class ExpandHelper implements Gefingerpoken {
*/
@VisibleForTesting
void finishExpanding(boolean forceAbort, float velocity) {
finishExpanding(forceAbort, velocity, true /* allowAnimation */);
}
/**
* Finish the current expand motion
* @param forceAbort whether the expansion should be forcefully aborted and returned to the old
* state
* @param velocity the velocity this was expanded/ collapsed with
*/
private void finishExpanding(boolean forceAbort, float velocity, boolean allowAnimation) {
if (!mExpanding) return;
if (DEBUG) Log.d(TAG, "scale in finishing on view: " + mResizedView);
@@ -568,7 +578,7 @@ public class ExpandHelper implements Gefingerpoken {
mCallback.expansionStateChanged(false);
int naturalHeight = mScaler.getNaturalHeight();
float targetHeight = nowExpanded ? naturalHeight : mSmallSize;
if (targetHeight != currentHeight && mEnabled) {
if (targetHeight != currentHeight && mEnabled && allowAnimation) {
mScaleAnimation.setFloatValues(targetHeight);
mScaleAnimation.setupStartValues();
final View scaledView = mResizedView;
@@ -621,11 +631,23 @@ public class ExpandHelper implements Gefingerpoken {
mResizedView = null;
}
/**
* Use this to abort any pending expansions in progress and force that there will be no
* animations.
*/
public void cancelImmediately() {
cancel(false /* allowAnimation */);
}
/**
* Use this to abort any pending expansions in progress.
*/
public void cancel() {
finishExpanding(true /* forceAbort */, 0f /* velocity */);
cancel(true /* allowAnimation */);
}
private void cancel(boolean allowAnimation) {
finishExpanding(true /* forceAbort */, 0f /* velocity */, allowAnimation);
clearView();
// reset the gesture detector

View File

@@ -3362,15 +3362,29 @@ public class NotificationStackScrollLayout extends ViewGroup
if (!mIsExpanded) {
setOwnScrollY(0);
mStatusBar.resetUserExpandedStates();
clearTemporaryViews();
clearUserLockedViews();
}
}
// lets make sure nothing is in the overlay / transient anymore
clearTemporaryViews(this);
for (int i = 0; i < getChildCount(); i++) {
ExpandableView child = (ExpandableView) getChildAt(i);
if (child instanceof ExpandableNotificationRow) {
ExpandableNotificationRow row = (ExpandableNotificationRow) child;
clearTemporaryViews(row.getChildrenContainer());
}
private void clearUserLockedViews() {
for (int i = 0; i < getChildCount(); i++) {
ExpandableView child = (ExpandableView) getChildAt(i);
if (child instanceof ExpandableNotificationRow) {
ExpandableNotificationRow row = (ExpandableNotificationRow) child;
row.setUserLocked(false);
}
}
}
private void clearTemporaryViews() {
// lets make sure nothing is in the overlay / transient anymore
clearTemporaryViews(this);
for (int i = 0; i < getChildCount(); i++) {
ExpandableView child = (ExpandableView) getChildAt(i);
if (child instanceof ExpandableNotificationRow) {
ExpandableNotificationRow row = (ExpandableNotificationRow) child;
clearTemporaryViews(row.getChildrenContainer());
}
}
}
@@ -3405,6 +3419,7 @@ public class NotificationStackScrollLayout extends ViewGroup
if (changed) {
if (!mIsExpanded) {
mGroupManager.collapseAllGroups();
mExpandHelper.cancelImmediately();
}
updateNotificationAnimationStates();
updateChronometers();