Merge "Fix the gear so that it is always centered based on the min noti height" into nyc-dev am: 5a3e441

am: 6485812

* commit '64858129ba0a7c6530c33fa2950348157fe0ef9f':
  Fix the gear so that it is always centered based on the min noti height

Change-Id: Id8ef5719568aab6469dd84a8fcd04d54fdf2e046
This commit is contained in:
Mady Mellor
2016-04-25 19:18:25 +00:00
committed by android-build-merger
5 changed files with 41 additions and 27 deletions

View File

@@ -24,12 +24,9 @@
<com.android.systemui.statusbar.AlphaOptimizedImageView
android:id="@+id/gear_icon"
android:layout_width="@dimen/notification_gear_width"
android:layout_height="@dimen/notification_gear_height"
android:paddingTop="@dimen/notification_gear_top_padding"
android:paddingStart="@dimen/notification_gear_padding"
android:paddingEnd="@dimen/notification_gear_padding"
android:paddingBottom="@dimen/notification_gear_padding"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="@dimen/notification_gear_padding"
android:src="@drawable/ic_settings"
android:tint="@color/notification_gear_color"
android:alpha="0"

View File

@@ -81,13 +81,7 @@
<!-- Width of the space containing the gear icon behind a notification -->
<dimen name="notification_gear_width">64dp</dimen>
<!-- Height of the space containing the gear icon behind a notification -->
<dimen name="notification_gear_height">74dp</dimen>
<!-- The space above the gear icon displayed behind a notification -->
<dimen name="notification_gear_top_padding">30dp</dimen>
<!-- The space on either side and below the gear icon displayed behind a notification -->
<!-- The space around the gear icon displayed behind a notification -->
<dimen name="notification_gear_padding">20dp</dimen>
<!-- size at which Notification icons will be drawn in the status bar -->

View File

@@ -263,6 +263,9 @@ public class ExpandableNotificationRow extends ActivatableNotificationView {
int headsUpheight = headsUpCustom && beforeN ? mMaxHeadsUpHeightLegacy
: mMaxHeadsUpHeight;
layout.setHeights(minHeight, headsUpheight, mNotificationMaxHeight);
if (mSettingsIconRow != null) {
mSettingsIconRow.updateVerticalLocation();
}
}
public StatusBarNotification getStatusBarNotification() {

View File

@@ -55,8 +55,11 @@ public class NotificationSettingsIconRow extends FrameLayout implements View.OnC
private boolean mOnLeft = true;
private boolean mDismissing = false;
private boolean mSnapping = false;
private boolean mIconPlaced = false;
private int[] mGearLocation = new int[2];
private int[] mParentLocation = new int[2];
private int mVertSpaceForGear;
public NotificationSettingsIconRow(Context context) {
this(context, null);
@@ -83,16 +86,18 @@ public class NotificationSettingsIconRow extends FrameLayout implements View.OnC
setOnClickListener(this);
mHorizSpaceForGear =
getResources().getDimensionPixelOffset(R.dimen.notification_gear_width);
mVertSpaceForGear = getResources().getDimensionPixelOffset(R.dimen.notification_min_height);
resetState();
}
public void resetState() {
setGearAlpha(0f);
mIconPlaced = false;
mSettingsFadedIn = false;
mAnimating = false;
mSnapping = false;
mDismissing = false;
setIconLocation(true /* on left */, true /* force */);
setIconLocation(true /* on left */);
if (mListener != null) {
mListener.onSettingsIconRowReset(mParent);
}
@@ -104,7 +109,7 @@ public class NotificationSettingsIconRow extends FrameLayout implements View.OnC
public void setNotificationRowParent(ExpandableNotificationRow parent) {
mParent = parent;
setIconLocation(mOnLeft, true /* force */);
setIconLocation(mOnLeft);
}
public void setAppName(String appName) {
@@ -184,7 +189,7 @@ public class NotificationSettingsIconRow extends FrameLayout implements View.OnC
if (isIconLocationChange(transX)) {
setGearAlpha(0f);
}
setIconLocation(transX > 0 /* fromLeft */, false /* force */);
setIconLocation(transX > 0 /* fromLeft */);
mFadeAnimator = ValueAnimator.ofFloat(mGearIcon.getAlpha(), 1);
mFadeAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
@@ -221,22 +226,39 @@ public class NotificationSettingsIconRow extends FrameLayout implements View.OnC
mFadeAnimator.start();
}
@Override
public void onRtlPropertiesChanged(int layoutDirection) {
setIconLocation(mOnLeft, true /* force */);
public void updateVerticalLocation() {
if (mParent == null) {
return;
}
int parentHeight = mParent.getCollapsedHeight();
if (parentHeight < mVertSpaceForGear) {
mGearIcon.setTranslationY((parentHeight / 2) - (mGearIcon.getHeight() / 2));
} else {
mGearIcon.setTranslationY((mVertSpaceForGear - mGearIcon.getHeight()) / 2);
}
}
public void setIconLocation(boolean onLeft, boolean force) {
if ((!force && onLeft == mOnLeft) || mSnapping || mParent == null) {
@Override
public void onRtlPropertiesChanged(int layoutDirection) {
setIconLocation(mOnLeft);
}
public void setIconLocation(boolean onLeft) {
updateVerticalLocation();
if ((mIconPlaced && onLeft == mOnLeft) || mSnapping || mParent == null
|| mGearIcon.getWidth() == 0) {
// Do nothing
return;
}
final boolean isRtl = mParent.isLayoutRtl();
// TODO No need to cast to float here once b/28050538 is fixed.
final float left = (float) (isRtl ? -(mParent.getWidth() - mHorizSpaceForGear) : 0);
final float right = (float) (isRtl ? 0 : (mParent.getWidth() - mHorizSpaceForGear));
setTranslationX(onLeft ? left : right);
final float centerX = ((mHorizSpaceForGear - mGearIcon.getWidth()) / 2);
setTranslationX(onLeft ? left + centerX : right + centerX);
mOnLeft = onLeft;
mIconPlaced = true;
}
public boolean isIconLocationChange(float translation) {
@@ -264,9 +286,8 @@ public class NotificationSettingsIconRow extends FrameLayout implements View.OnC
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 centerY =
(int) (mGearIcon.getTranslationY() * 2 + mGearIcon.getHeight())/ 2;
final int x = mGearLocation[0] - mParentLocation[0] + centerX;
final int y = mGearLocation[1] - mParentLocation[1] + centerY;
mListener.onGearTouched(mParent, x, y);

View File

@@ -3524,8 +3524,7 @@ public class NotificationStackScrollLayout extends ViewGroup
} else {
// Check scheduled, reset alpha and update location; check will fade it in
mCurrIconRow.setGearAlpha(0f);
mCurrIconRow.setIconLocation(translation > 0 /* onLeft */,
false /* force */);
mCurrIconRow.setIconLocation(translation > 0 /* onLeft */);
}
}
}