From a5a08d8890b08ac1fde8ccaf333fe33c69333ae5 Mon Sep 17 00:00:00 2001 From: yueg Date: Tue, 31 Oct 2017 14:11:53 -0700 Subject: Add avatar and small icon in bubble primary button. Bug: 67605985 Test: NewBubbleIntegrationTest, NewReturnToCallControllerTest PiperOrigin-RevId: 174089572 Change-Id: Icaeb41482cffe522e09ee1ec068b5d47f476b146 --- java/com/android/newbubble/NewBubble.java | 56 ++++++++++++++++++++-- java/com/android/newbubble/NewBubbleInfo.java | 5 ++ .../res/drawable/bubble_ripple_circle_small.xml | 26 ++++++++++ .../newbubble/res/layout/new_bubble_base.xml | 30 ++++++++---- java/com/android/newbubble/res/values/values.xml | 3 ++ 5 files changed, 108 insertions(+), 12 deletions(-) create mode 100644 java/com/android/newbubble/res/drawable/bubble_ripple_circle_small.xml (limited to 'java/com/android/newbubble') diff --git a/java/com/android/newbubble/NewBubble.java b/java/com/android/newbubble/NewBubble.java index d9b9ae2ad..226326f3c 100644 --- a/java/com/android/newbubble/NewBubble.java +++ b/java/com/android/newbubble/NewBubble.java @@ -57,6 +57,7 @@ import android.view.animation.OvershootInterpolator; import android.widget.ImageView; import android.widget.TextView; import android.widget.ViewAnimator; +import com.android.dialer.util.DrawableConverter; import com.android.newbubble.NewBubbleInfo.Action; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @@ -113,7 +114,10 @@ public class NewBubble { hideAndReset(); } else { doResize( - () -> viewHolder.getPrimaryButton().setDisplayedChild(ViewHolder.CHILD_INDEX_ICON)); + () -> + viewHolder + .getPrimaryButton() + .setDisplayedChild(ViewHolder.CHILD_INDEX_AVATAR_AND_ICON)); } } }; @@ -351,6 +355,32 @@ public class NewBubble { updateButtonStates(); } + /** + * Update the avatar from photo. + * + * @param avatar the new photo avatar in the bubble's primary button + */ + public void updatePhotoAvatar(@NonNull Drawable avatar) { + // Make it round + int bubbleSize = context.getResources().getDimensionPixelSize(R.dimen.bubble_size); + Drawable roundAvatar = + DrawableConverter.getRoundedDrawable(context, avatar, bubbleSize, bubbleSize); + + updateAvatar(roundAvatar); + } + + /** + * Update the avatar. + * + * @param avatar the new avatar in the bubble's primary button + */ + public void updateAvatar(@NonNull Drawable avatar) { + if (!avatar.equals(currentInfo.getAvatar())) { + currentInfo = NewBubbleInfo.from(currentInfo).setAvatar(avatar).build(); + viewHolder.getPrimaryAvatar().setImageDrawable(currentInfo.getAvatar()); + } + } + /** Returns the currently displayed NewBubbleInfo */ public NewBubbleInfo getBubbleInfo() { return currentInfo; @@ -525,6 +555,7 @@ public class NewBubble { } private void update() { + // Whole primary button background RippleDrawable backgroundRipple = (RippleDrawable) context.getResources().getDrawable(R.drawable.bubble_ripple_circle, context.getTheme()); @@ -532,12 +563,23 @@ public class NewBubble { ColorUtils.compositeColors( context.getColor(R.color.bubble_primary_background_darken), currentInfo.getPrimaryColor()); - backgroundRipple.getDrawable(0).setTint(primaryTint); + backgroundRipple.getDrawable(0).mutate().setTint(primaryTint); viewHolder.getPrimaryButton().setBackground(backgroundRipple); + // Small icon + RippleDrawable smallIconBackgroundRipple = + (RippleDrawable) + context + .getResources() + .getDrawable(R.drawable.bubble_ripple_circle_small, context.getTheme()); + smallIconBackgroundRipple + .getDrawable(0) + .setTint(context.getColor(R.color.bubble_button_text_color_blue)); + viewHolder.getPrimaryIcon().setBackground(smallIconBackgroundRipple); viewHolder.getPrimaryIcon().setImageIcon(currentInfo.getPrimaryIcon()); - updatePrimaryIconAnimation(); + viewHolder.getPrimaryAvatar().setImageDrawable(currentInfo.getAvatar()); + updatePrimaryIconAnimation(); updateButtonStates(); } @@ -715,13 +757,14 @@ public class NewBubble { @VisibleForTesting class ViewHolder { - public static final int CHILD_INDEX_ICON = 0; + public static final int CHILD_INDEX_AVATAR_AND_ICON = 0; public static final int CHILD_INDEX_TEXT = 1; private final NewMoveHandler moveHandler; private final NewWindowRoot root; private final ViewAnimator primaryButton; private final ImageView primaryIcon; + private final ImageView primaryAvatar; private final TextView primaryText; private final NewCheckableButton fullScreenButton; @@ -737,6 +780,7 @@ public class NewBubble { View contentView = inflater.inflate(R.layout.new_bubble_base, root, true); expandedView = contentView.findViewById(R.id.bubble_expanded_layout); primaryButton = contentView.findViewById(R.id.bubble_button_primary); + primaryAvatar = contentView.findViewById(R.id.bubble_icon_avatar); primaryIcon = contentView.findViewById(R.id.bubble_icon_primary); primaryText = contentView.findViewById(R.id.bubble_text); @@ -793,6 +837,10 @@ public class NewBubble { return primaryIcon; } + public ImageView getPrimaryAvatar() { + return primaryAvatar; + } + public TextView getPrimaryText() { return primaryText; } diff --git a/java/com/android/newbubble/NewBubbleInfo.java b/java/com/android/newbubble/NewBubbleInfo.java index f615929e3..44232f39b 100644 --- a/java/com/android/newbubble/NewBubbleInfo.java +++ b/java/com/android/newbubble/NewBubbleInfo.java @@ -35,6 +35,9 @@ public abstract class NewBubbleInfo { public abstract Icon getPrimaryIcon(); + @Nullable + public abstract Drawable getAvatar(); + @Px public abstract int getStartingYPosition(); @@ -61,6 +64,8 @@ public abstract class NewBubbleInfo { public abstract Builder setPrimaryIcon(@NonNull Icon primaryIcon); + public abstract Builder setAvatar(@Nullable Drawable avatar); + public abstract Builder setStartingYPosition(@Px int startingYPosition); public abstract Builder setActions(List actions); diff --git a/java/com/android/newbubble/res/drawable/bubble_ripple_circle_small.xml b/java/com/android/newbubble/res/drawable/bubble_ripple_circle_small.xml new file mode 100644 index 000000000..109d1cec1 --- /dev/null +++ b/java/com/android/newbubble/res/drawable/bubble_ripple_circle_small.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + diff --git a/java/com/android/newbubble/res/layout/new_bubble_base.xml b/java/com/android/newbubble/res/layout/new_bubble_base.xml index ef35d7426..9174f3fdb 100644 --- a/java/com/android/newbubble/res/layout/new_bubble_base.xml +++ b/java/com/android/newbubble/res/layout/new_bubble_base.xml @@ -36,14 +36,28 @@ android:background="@drawable/bubble_ripple_circle" android:measureAllChildren="false" tools:backgroundTint="#FF0000AA"> - + + + + 16dp 4dp + 16dp -4dp 64dp 16dp @@ -29,4 +30,6 @@ 160dp 20dp 4dp + 24dp + 4dp -- cgit v1.2.3