Update the animation when showing / closing inline controls
This CL updates the circular reveal animation to originate
from the gear and and done button in the inline controls.
Bug: 22451710
Change-Id: I050413c980a8c9e73fe2e9a789567051d3119373
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
index afee846..528fb3d 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
@@ -959,7 +959,7 @@
}, false /* afterKeyguardGone */);
}
- private void bindGuts(ExpandableNotificationRow row) {
+ private void bindGuts(final ExpandableNotificationRow row) {
row.inflateGuts();
final StatusBarNotification sbn = row.getStatusBarNotification();
PackageManager pmUser = getPackageManagerForUser(mContext, sbn.getUser().getIdentifier());
@@ -1003,7 +1003,17 @@
@Override
public void onClick(View v) {
guts.saveImportance(sbn);
- dismissPopups();
+
+ int[] rowLocation = new int[2];
+ int[] doneLocation = new int[2];
+ row.getLocationOnScreen(rowLocation);
+ v.getLocationOnScreen(doneLocation);
+
+ final int centerX = v.getWidth() / 2;
+ final int centerY = v.getHeight() / 2;
+ final int x = doneLocation[0] - rowLocation[0] + centerX;
+ final int y = doneLocation[1] - rowLocation[1] + centerY;
+ dismissPopups(x, y);
}
});
@@ -1049,7 +1059,7 @@
// Post to ensure the the guts are properly layed out.
guts.post(new Runnable() {
public void run() {
- dismissPopups();
+ dismissPopups(-1 /* x */, -1 /* y */, false /* resetGear */);
guts.setVisibility(View.VISIBLE);
final double horz = Math.max(guts.getWidth() - x, x);
final double vert = Math.max(guts.getHeight() - y, y);
@@ -1083,10 +1093,14 @@
}
public void dismissPopups() {
- dismissPopups(-1, -1);
+ dismissPopups(-1 /* x */, -1 /* y */, true /* resetGear */);
}
private void dismissPopups(int x, int y) {
+ dismissPopups(x, y, true /* resetGear */);
+ }
+
+ public void dismissPopups(int x, int y, boolean resetGear) {
if (mNotificationGutsExposed != null) {
final NotificationGuts v = mNotificationGutsExposed;
mNotificationGutsExposed = null;
@@ -1114,8 +1128,7 @@
v.setExposed(false);
mStackScroller.onHeightChanged(null, true /* needsAnimation */);
}
-
- if (mNotificationGearDisplayed != null) {
+ if (resetGear && mNotificationGearDisplayed != null) {
mNotificationGearDisplayed.resetTranslation();
mNotificationGearDisplayed = null;
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java b/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java
index da125d8..e109b09 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java
@@ -656,7 +656,6 @@
mGuts = (NotificationGuts) inflated;
mGuts.setClipTopAmount(getClipTopAmount());
mGuts.setActualHeight(getActualHeight());
- mTranslateableViews.add(mGuts);
mGutsStub = null;
}
});
@@ -1175,6 +1174,10 @@
@Override
public void setActualHeight(int height, boolean notifyListeners) {
super.setActualHeight(height, notifyListeners);
+ if (mGuts != null && mGuts.areGutsExposed()) {
+ mGuts.setActualHeight(height);
+ return;
+ }
int contentHeight = Math.max(getMinHeight(), height);
mPrivateLayout.setContentHeight(contentHeight);
mPublicLayout.setContentHeight(contentHeight);
@@ -1184,7 +1187,6 @@
if (mGuts != null) {
mGuts.setActualHeight(height);
}
- invalidate();
}
@Override
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationSettingsIconRow.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationSettingsIconRow.java
index 4491ebd..476e146 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationSettingsIconRow.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationSettingsIconRow.java
@@ -33,7 +33,7 @@
/**
* Called when the gear behind a notification is touched.
*/
- public void onGearTouched(ExpandableNotificationRow row);
+ public void onGearTouched(ExpandableNotificationRow row, int x, int y);
}
private ExpandableNotificationRow mParent;
@@ -45,6 +45,8 @@
private boolean mSettingsFadedIn = false;
private boolean mAnimating = false;
private boolean mOnLeft = true;
+ private int[] mGearLocation = new int[2];
+ private int[] mParentLocation = new int[2];
public NotificationSettingsIconRow(Context context) {
this(context, null);
@@ -74,6 +76,12 @@
resetState();
}
+ public void resetState() {
+ setGearAlpha(0f);
+ mAnimating = false;
+ setIconLocation(true /* on left */);
+ }
+
public void setGearListener(SettingsIconRowListener listener) {
mListener = listener;
}
@@ -86,12 +94,6 @@
return mParent;
}
- public void resetState() {
- setGearAlpha(0f);
- mAnimating = false;
- setIconLocation(true /* on left */);
- }
-
private void setGearAlpha(float alpha) {
if (alpha == 0) {
mSettingsFadedIn = false; // Can fade in again once it's gone.
@@ -200,7 +202,16 @@
public void onClick(View v) {
if (v.getId() == R.id.gear_icon) {
if (mListener != null) {
- mListener.onGearTouched(mParent);
+ mGearIcon.getLocationOnScreen(mGearLocation);
+ mParent.getLocationOnScreen(mParentLocation);
+
+ final int centerX = (int) (mHorizSpaceForGear / 2);
+ // Top / bottom padding are not equal, need to subtract them to get center of gear.
+ final int centerY = (int) (mGearIcon.getHeight() - mGearIcon.getPaddingTop()
+ - mGearIcon.getPaddingBottom()) / 2 + mGearIcon.getPaddingTop();
+ final int x = mGearLocation[0] - mParentLocation[0] + centerX;
+ final int y = mGearLocation[1] - mParentLocation[1] + centerY;
+ mListener.onGearTouched(mParent, x, y);
}
} else {
// Do nothing when the background is touched.
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java
index e1f9f3c..79f5c7c 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java
@@ -361,9 +361,9 @@
}
@Override
- public void onGearTouched(ExpandableNotificationRow row) {
+ public void onGearTouched(ExpandableNotificationRow row, int x, int y) {
if (mLongPressListener != null) {
- mLongPressListener.onLongPress(row, 0, 0);
+ mLongPressListener.onLongPress(row, x, y);
}
}