diff options
-rw-r--r-- | res/layout/notification_main.xml | 4 | ||||
-rw-r--r-- | res/values/dimens.xml | 3 | ||||
-rw-r--r-- | src/com/android/launcher3/popup/PopupContainerWithArrow.java | 6 | ||||
-rw-r--r-- | src/com/android/launcher3/shortcuts/ShortcutsItemView.java | 49 |
4 files changed, 52 insertions, 10 deletions
diff --git a/res/layout/notification_main.xml b/res/layout/notification_main.xml index b2443f5d9..7a8cf6d5c 100644 --- a/res/layout/notification_main.xml +++ b/res/layout/notification_main.xml @@ -30,7 +30,8 @@ android:gravity="center_vertical" android:background="?attr/popupColorPrimary" android:paddingStart="@dimen/notification_padding_start" - android:paddingEnd="@dimen/notification_main_text_padding_end"> + android:paddingEnd="@dimen/notification_main_text_padding_end" + android:paddingBottom="16dp"> <TextView android:id="@+id/title" android:layout_width="match_parent" @@ -58,6 +59,7 @@ android:layout_width="@dimen/notification_icon_size" android:layout_height="@dimen/notification_icon_size" android:layout_marginEnd="@dimen/notification_padding_end" + android:layout_marginBottom="8dp" android:layout_gravity="center_vertical|end" /> </com.android.launcher3.notification.NotificationMainView> diff --git a/res/values/dimens.xml b/res/values/dimens.xml index 8d6b501c2..b90de82c1 100644 --- a/res/values/dimens.xml +++ b/res/values/dimens.xml @@ -155,6 +155,7 @@ <dimen name="deep_shortcuts_elevation">9dp</dimen> <dimen name="bg_popup_item_width">220dp</dimen> <dimen name="bg_popup_item_height">56dp</dimen> + <dimen name="bg_popup_item_condensed_height">48dp</dimen> <dimen name="pre_drag_view_scale">6dp</dimen> <!-- an icon with shortcuts must be dragged this far before the container is removed. --> <dimen name="deep_shortcuts_start_drag_threshold">16dp</dimen> @@ -198,7 +199,7 @@ <!-- notification_padding_end + (icon_size - footer_icon_size) / 2 --> <dimen name="notification_footer_icon_row_padding">15dp</dimen> <dimen name="notification_header_height">32dp</dimen> - <dimen name="notification_main_height">80dp</dimen> + <dimen name="notification_main_height">96dp</dimen> <dimen name="notification_footer_height">32dp</dimen> <dimen name="notification_header_text_size">13sp</dimen> <dimen name="notification_header_count_text_size">12sp</dimen> diff --git a/src/com/android/launcher3/popup/PopupContainerWithArrow.java b/src/com/android/launcher3/popup/PopupContainerWithArrow.java index cea4bc24f..c5daca0e1 100644 --- a/src/com/android/launcher3/popup/PopupContainerWithArrow.java +++ b/src/com/android/launcher3/popup/PopupContainerWithArrow.java @@ -306,6 +306,12 @@ public class PopupContainerWithArrow extends AbstractFloatingView implements Dra shortcutsItemRoundedCorners &= ~ROUNDED_TOP_CORNERS; } } + if (itemTypeToPopulate != PopupPopulator.Item.SYSTEM_SHORTCUT_ICON + && numNotifications > 0) { + // Condense shortcuts height when there are notifications. + item.getLayoutParams().height = res.getDimensionPixelSize( + R.dimen.bg_popup_item_condensed_height); + } mShortcutsItemView.addShortcutView(item, itemTypeToPopulate); if (shouldUnroundBottomCorners) { shortcutsItemRoundedCorners &= ~ROUNDED_BOTTOM_CORNERS; diff --git a/src/com/android/launcher3/shortcuts/ShortcutsItemView.java b/src/com/android/launcher3/shortcuts/ShortcutsItemView.java index 7f836eb11..59a0386bb 100644 --- a/src/com/android/launcher3/shortcuts/ShortcutsItemView.java +++ b/src/com/android/launcher3/shortcuts/ShortcutsItemView.java @@ -23,6 +23,7 @@ import android.content.Context; import android.graphics.Point; import android.graphics.Rect; import android.util.AttributeSet; +import android.util.Log; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; @@ -55,6 +56,8 @@ import java.util.List; public class ShortcutsItemView extends PopupItemView implements View.OnLongClickListener, View.OnTouchListener, LogContainerProvider { + private static final String TAG = "ShortcutsItem"; + private Launcher mLauncher; private LinearLayout mContent; private LinearLayout mShortcutsLayout; @@ -183,14 +186,20 @@ public class ShortcutsItemView extends PopupItemView implements View.OnLongClick } /** - * Hides shortcuts until only {@param maxShortcuts} are showing. + * Hides shortcuts until only {@param maxShortcuts} are showing. Also sets + * {@link #mHiddenShortcutsHeight} to be the amount of extra space that shortcuts will + * require when {@link #showAllShortcuts(boolean)} is called. */ public void hideShortcuts(boolean hideFromTop, int maxShortcuts) { + // When shortcuts are shown, they get more space allocated to them. + final int oldHeight = mShortcutsLayout.getChildAt(0).getLayoutParams().height; + final int newHeight = getResources().getDimensionPixelSize(R.dimen.bg_popup_item_height); + mHiddenShortcutsHeight = (newHeight - oldHeight) * mShortcutsLayout.getChildCount(); + int numToHide = mShortcutsLayout.getChildCount() - maxShortcuts; if (numToHide <= 0) { return; } - mHiddenShortcutsHeight = 0; final int numShortcuts = mShortcutsLayout.getChildCount(); final int dir = hideFromTop ? 1 : -1; for (int i = hideFromTop ? 0 : numShortcuts - 1; 0 <= i && i < numShortcuts; i += dir) { @@ -224,8 +233,16 @@ public class ShortcutsItemView extends PopupItemView implements View.OnLongClick public Animator showAllShortcuts(boolean showFromTop) { // First set all the shortcuts to VISIBLE. final int numShortcuts = mShortcutsLayout.getChildCount(); + if (numShortcuts == 0) { + Log.w(TAG, "Tried to show all shortcuts but there were no shortcuts to show"); + return null; + } + final int oldHeight = mShortcutsLayout.getChildAt(0).getLayoutParams().height; + final int newHeight = getResources().getDimensionPixelSize(R.dimen.bg_popup_item_height); for (int i = 0; i < numShortcuts; i++) { DeepShortcutView view = (DeepShortcutView) mShortcutsLayout.getChildAt(i); + view.getLayoutParams().height = newHeight; + view.requestLayout(); view.setVisibility(VISIBLE); if (i < numShortcuts - 1) { view.findViewById(R.id.divider).setVisibility(VISIBLE); @@ -238,17 +255,13 @@ public class ShortcutsItemView extends PopupItemView implements View.OnLongClick if (showFromTop) { // The new shortcuts pushed the original shortcuts down, but we want to animate them // to that position. So we revert the translation and animate to the new. - animation.play(ObjectAnimator.ofFloat(mShortcutsLayout, TRANSLATION_Y, - mShortcutsLayout.getTranslationY() - mHiddenShortcutsHeight, - mShortcutsLayout.getTranslationY())); + animation.play(translateYFrom(mShortcutsLayout, -mHiddenShortcutsHeight)); } else if (mSystemShortcutIcons != null) { // When adding the shortcuts from the bottom, things are a little trickier, since // that means they push the icons header down. To account for this, we do the same // translation trick as above, but on the header. Since this means leaving behind // a blank area where the header was, we also need to clip the background. - animation.play(ObjectAnimator.ofFloat(mSystemShortcutIcons, TRANSLATION_Y, - mSystemShortcutIcons.getTranslationY() - mHiddenShortcutsHeight, - mSystemShortcutIcons.getTranslationY())); + animation.play(translateYFrom(mSystemShortcutIcons, -mHiddenShortcutsHeight)); // mPillRect is the bounds of this view before the new shortcuts were shown. Rect backgroundStartRect = new Rect(mPillRect); Rect backgroundEndRect = new Rect(mPillRect); @@ -257,10 +270,30 @@ public class ShortcutsItemView extends PopupItemView implements View.OnLongClick getBackgroundRadius(), backgroundStartRect, backgroundEndRect, mRoundedCorners) .createRevealAnimator(this, false)); } + for (int i = 0; i < numShortcuts; i++) { + // Animate each shortcut to its new height. + DeepShortcutView shortcut = (DeepShortcutView) mShortcutsLayout.getChildAt(i); + int heightDiff = newHeight - oldHeight; + int heightAdjustmentIndex = showFromTop ? numShortcuts - i - 1 : i; + int fromDir = showFromTop ? 1 : -1; + animation.play(translateYFrom(shortcut, heightDiff * heightAdjustmentIndex * fromDir)); + // Make sure the text and icon stay centered in the shortcut. + animation.play(translateYFrom(shortcut.getBubbleText(), heightDiff / 2 * fromDir)); + animation.play(translateYFrom(shortcut.getIconView(), heightDiff / 2 * fromDir)); + } return animation; } /** + * Animates the translationY of the view from the given offset to the view's current translation + * @return an Animator, which should be started by the caller. + */ + private Animator translateYFrom(View v, int diff) { + float finalY = v.getTranslationY(); + return ObjectAnimator.ofFloat(v, TRANSLATION_Y, finalY + diff, finalY); + } + + /** * Adds a {@link SystemShortcut.Widgets} item if there are widgets for the given ItemInfo. */ public void enableWidgetsIfExist(final BubbleTextView originalIcon) { |