From 84ac49babc81c94357706c5073fdb89f27b5fdbd Mon Sep 17 00:00:00 2001 From: yueg Date: Wed, 1 Nov 2017 16:22:28 -0700 Subject: Implement some UI changes. Including: - merge end call button with other buttons - add ripple effect for buttons - adjust elevation according to material design guide - add triangle in expanded view Bug: 67605985 Test: manual PiperOrigin-RevId: 174253861 Change-Id: I7b5315245a322235efb39a9cda26b8686cc7bbf9 --- .../incallui/NewReturnToCallController.java | 7 ++ java/com/android/incallui/res/values/strings.xml | 3 + java/com/android/newbubble/NewBubble.java | 49 ++++----- java/com/android/newbubble/NewBubbleInfo.java | 4 +- java/com/android/newbubble/NewCheckableButton.java | 9 +- .../newbubble/res/drawable/bubble_pill_down.xml | 23 +++++ .../res/drawable/bubble_ripple_circle.xml | 26 ----- .../newbubble/res/drawable/bubble_shape_circle.xml | 25 +++++ .../res/drawable/bubble_shape_circle_small.xml | 23 +++++ .../newbubble/res/layout/new_bubble_base.xml | 112 ++++++++++----------- java/com/android/newbubble/res/values/colors.xml | 7 +- java/com/android/newbubble/res/values/styles.xml | 38 +++++++ java/com/android/newbubble/res/values/values.xml | 14 ++- 13 files changed, 209 insertions(+), 131 deletions(-) create mode 100644 java/com/android/newbubble/res/drawable/bubble_pill_down.xml delete mode 100644 java/com/android/newbubble/res/drawable/bubble_ripple_circle.xml create mode 100644 java/com/android/newbubble/res/drawable/bubble_shape_circle.xml create mode 100644 java/com/android/newbubble/res/drawable/bubble_shape_circle_small.xml create mode 100644 java/com/android/newbubble/res/values/styles.xml diff --git a/java/com/android/incallui/NewReturnToCallController.java b/java/com/android/incallui/NewReturnToCallController.java index fa7a45de0..97bf7ad50 100644 --- a/java/com/android/incallui/NewReturnToCallController.java +++ b/java/com/android/incallui/NewReturnToCallController.java @@ -277,17 +277,22 @@ public class NewReturnToCallController implements InCallUiListener, Listener, Au List actions = new ArrayList<>(); SpeakerButtonInfo speakerButtonInfo = new SpeakerButtonInfo(audioState, IconSize.SIZE_24_DP); + // Return to call actions.add( Action.builder() .setIconDrawable(context.getDrawable(R.drawable.quantum_ic_fullscreen_vd_theme_24)) .setIntent(fullScreen) + .setName(context.getText(R.string.bubble_return_to_call)) .build()); + // Mute/unmute actions.add( Action.builder() .setIconDrawable(context.getDrawable(R.drawable.quantum_ic_mic_off_white_24)) .setChecked(audioState.isMuted()) .setIntent(toggleMute) + .setName(context.getText(R.string.incall_label_mute)) .build()); + // Speaker/audio selector actions.add( Action.builder() .setIconDrawable(context.getDrawable(speakerButtonInfo.icon)) @@ -295,10 +300,12 @@ public class NewReturnToCallController implements InCallUiListener, Listener, Au .setChecked(speakerButtonInfo.isChecked) .setIntent(speakerButtonInfo.checkable ? toggleSpeaker : showSpeakerSelect) .build()); + // End call actions.add( Action.builder() .setIconDrawable(context.getDrawable(R.drawable.quantum_ic_call_end_vd_theme_24)) .setIntent(endCall) + .setName(context.getText(R.string.incall_label_end_call)) .build()); return actions; } diff --git a/java/com/android/incallui/res/values/strings.xml b/java/com/android/incallui/res/values/strings.xml index 2f1542a08..af6125366 100644 --- a/java/com/android/incallui/res/values/strings.xml +++ b/java/com/android/incallui/res/values/strings.xml @@ -202,4 +202,7 @@ Do not show this again + + Back to call + diff --git a/java/com/android/newbubble/NewBubble.java b/java/com/android/newbubble/NewBubble.java index 226326f3c..fb6a5e458 100644 --- a/java/com/android/newbubble/NewBubble.java +++ b/java/com/android/newbubble/NewBubble.java @@ -26,17 +26,14 @@ import android.content.Intent; import android.graphics.PixelFormat; import android.graphics.drawable.Animatable; import android.graphics.drawable.Drawable; -import android.graphics.drawable.RippleDrawable; import android.net.Uri; import android.os.Handler; import android.provider.Settings; -import android.support.annotation.ColorInt; import android.support.annotation.IntDef; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.annotation.VisibleForTesting; import android.support.v4.graphics.ColorUtils; -import android.support.v4.graphics.drawable.DrawableCompat; import android.support.v4.os.BuildCompat; import android.support.v4.view.animation.FastOutLinearInInterpolator; import android.support.v4.view.animation.LinearOutSlowInInterpolator; @@ -556,26 +553,22 @@ public class NewBubble { private void update() { // Whole primary button background - RippleDrawable backgroundRipple = - (RippleDrawable) - context.getResources().getDrawable(R.drawable.bubble_ripple_circle, context.getTheme()); + Drawable backgroundCirle = + context.getResources().getDrawable(R.drawable.bubble_shape_circle, context.getTheme()); int primaryTint = ColorUtils.compositeColors( context.getColor(R.color.bubble_primary_background_darken), currentInfo.getPrimaryColor()); - backgroundRipple.getDrawable(0).mutate().setTint(primaryTint); - viewHolder.getPrimaryButton().setBackground(backgroundRipple); + backgroundCirle.mutate().setTint(primaryTint); + viewHolder.getPrimaryButton().setBackground(backgroundCirle); // 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); + Drawable smallIconBackgroundCircle = + context + .getResources() + .getDrawable(R.drawable.bubble_shape_circle_small, context.getTheme()); + smallIconBackgroundCircle.setTint(context.getColor(R.color.bubble_button_color_blue)); + viewHolder.getPrimaryIcon().setBackground(smallIconBackgroundCircle); viewHolder.getPrimaryIcon().setImageIcon(currentInfo.getPrimaryIcon()); viewHolder.getPrimaryAvatar().setImageDrawable(currentInfo.getAvatar()); @@ -595,13 +588,10 @@ public class NewBubble { } private void updateButtonStates() { - int colorBlue = context.getColor(R.color.bubble_button_text_color_blue); - int colorWhite = context.getColor(R.color.bubble_button_text_color_white); - - configureButton(currentInfo.getActions().get(0), viewHolder.getFullScreenButton(), colorBlue); - configureButton(currentInfo.getActions().get(1), viewHolder.getMuteButton(), colorBlue); - configureButton(currentInfo.getActions().get(2), viewHolder.getAudioRouteButton(), colorBlue); - configureButton(currentInfo.getActions().get(3), viewHolder.getEndCallButton(), colorWhite); + configureButton(currentInfo.getActions().get(0), viewHolder.getFullScreenButton()); + configureButton(currentInfo.getActions().get(1), viewHolder.getMuteButton()); + configureButton(currentInfo.getActions().get(2), viewHolder.getAudioRouteButton()); + configureButton(currentInfo.getActions().get(3), viewHolder.getEndCallButton()); } private void doShowText(@NonNull CharSequence text) { @@ -610,16 +600,11 @@ public class NewBubble { viewHolder.getPrimaryButton().setDisplayedChild(ViewHolder.CHILD_INDEX_TEXT); } - private void configureButton(Action action, NewCheckableButton button, @ColorInt int iconColor) { - Drawable iconDrawable = DrawableCompat.wrap(action.getIconDrawable()); - DrawableCompat.setTint(iconDrawable.mutate(), iconColor); - - button.setCompoundDrawablesWithIntrinsicBounds(iconDrawable, null, null, null); + private void configureButton(Action action, NewCheckableButton button) { + button.setCompoundDrawablesWithIntrinsicBounds(action.getIconDrawable(), null, null, null); button.setChecked(action.isChecked()); button.setEnabled(action.isEnabled()); - if (action.getName() != null) { - button.setText(action.getName()); - } + button.setText(action.getName()); button.setOnClickListener(v -> doAction(action)); } diff --git a/java/com/android/newbubble/NewBubbleInfo.java b/java/com/android/newbubble/NewBubbleInfo.java index 44232f39b..126b300ed 100644 --- a/java/com/android/newbubble/NewBubbleInfo.java +++ b/java/com/android/newbubble/NewBubbleInfo.java @@ -79,7 +79,7 @@ public abstract class NewBubbleInfo { public abstract Drawable getIconDrawable(); - @Nullable + @NonNull public abstract CharSequence getName(); @NonNull @@ -108,7 +108,7 @@ public abstract class NewBubbleInfo { public abstract Builder setIconDrawable(Drawable iconDrawable); - public abstract Builder setName(@Nullable CharSequence name); + public abstract Builder setName(@NonNull CharSequence name); public abstract Builder setIntent(@NonNull PendingIntent intent); diff --git a/java/com/android/newbubble/NewCheckableButton.java b/java/com/android/newbubble/NewCheckableButton.java index 63525a4a1..8e43335ca 100644 --- a/java/com/android/newbubble/NewCheckableButton.java +++ b/java/com/android/newbubble/NewCheckableButton.java @@ -17,6 +17,7 @@ package com.android.newbubble; import android.content.Context; +import android.content.res.ColorStateList; import android.support.v4.view.AccessibilityDelegateCompat; import android.support.v4.view.ViewCompat; import android.support.v4.view.accessibility.AccessibilityNodeInfoCompat; @@ -68,10 +69,12 @@ public class NewCheckableButton extends AppCompatButton implements Checkable { public void setChecked(boolean checked) { if (mChecked != checked) { mChecked = checked; - setTextColor( + int newColor = checked - ? getContext().getColor(R.color.bubble_button_text_color_blue) - : getContext().getColor(R.color.bubble_button_text_color_black)); + ? getContext().getColor(R.color.bubble_button_color_blue) + : getContext().getColor(R.color.bubble_button_color_grey); + setTextColor(newColor); + setCompoundDrawableTintList(ColorStateList.valueOf(newColor)); } } diff --git a/java/com/android/newbubble/res/drawable/bubble_pill_down.xml b/java/com/android/newbubble/res/drawable/bubble_pill_down.xml new file mode 100644 index 000000000..721e6fc52 --- /dev/null +++ b/java/com/android/newbubble/res/drawable/bubble_pill_down.xml @@ -0,0 +1,23 @@ + + + + + + + diff --git a/java/com/android/newbubble/res/drawable/bubble_ripple_circle.xml b/java/com/android/newbubble/res/drawable/bubble_ripple_circle.xml deleted file mode 100644 index 8d5cf0bb5..000000000 --- a/java/com/android/newbubble/res/drawable/bubble_ripple_circle.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - diff --git a/java/com/android/newbubble/res/drawable/bubble_shape_circle.xml b/java/com/android/newbubble/res/drawable/bubble_shape_circle.xml new file mode 100644 index 000000000..af9d8589b --- /dev/null +++ b/java/com/android/newbubble/res/drawable/bubble_shape_circle.xml @@ -0,0 +1,25 @@ + + + + + + + diff --git a/java/com/android/newbubble/res/drawable/bubble_shape_circle_small.xml b/java/com/android/newbubble/res/drawable/bubble_shape_circle_small.xml new file mode 100644 index 000000000..73b9cf338 --- /dev/null +++ b/java/com/android/newbubble/res/drawable/bubble_shape_circle_small.xml @@ -0,0 +1,23 @@ + + + + + + + + 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 9174f3fdb..c90cabdf2 100644 --- a/java/com/android/newbubble/res/layout/new_bubble_base.xml +++ b/java/com/android/newbubble/res/layout/new_bubble_base.xml @@ -19,6 +19,7 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:clipChildren="false" tools:theme="@style/Theme.AppCompat"> + android:clipToPadding="false"> @@ -72,80 +77,67 @@ + + + android:layout_marginTop="@dimen/bubble_radius" + android:textColor="@color/bubble_button_color_grey" + android:background="@color/background_dialer_white" + android:drawableTint="@color/bubble_button_color_grey" + style="@style/CheckableButtonWithSelectableItemBackground"/> + android:layout_marginTop="@dimen/bubble_expanded_separator_height" + android:textColor="@color/bubble_button_color_grey" + android:background="@color/background_dialer_white" + android:drawableTint="@color/bubble_button_color_grey" + style="@style/CheckableButtonWithSelectableItemBackground"/> - - + android:layout_marginTop="@dimen/bubble_expanded_separator_height" + android:textColor="@color/bubble_button_color_grey" + android:background="@color/background_dialer_white" + android:drawableTint="@color/bubble_button_color_grey" + style="@style/CheckableButtonWithSelectableItemBackground"/> + android:layout_below="@id/bubble_button_audio_route" + android:layout_marginTop="@dimen/bubble_expanded_separator_height" + android:textColor="@color/bubble_button_color_white" + android:background="@drawable/bubble_pill_down" + android:backgroundTint="@color/dialer_end_call_button_color" + android:foreground="?attr/selectableItemBackground" + android:drawableTint="@color/bubble_button_color_white" + style="@style/CheckableButton"/> diff --git a/java/com/android/newbubble/res/values/colors.xml b/java/com/android/newbubble/res/values/colors.xml index 556d8bd95..8b1294fc6 100644 --- a/java/com/android/newbubble/res/values/colors.xml +++ b/java/com/android/newbubble/res/values/colors.xml @@ -18,8 +18,7 @@ #33000000 - @color/dialer_primary_text_color - @color/dialer_primary_text_color_white - @color/dialer_theme_color - @color/dialer_end_call_button_color + @color/dialer_secondary_text_color + @color/dialer_primary_text_color_white + @color/dialer_theme_color diff --git a/java/com/android/newbubble/res/values/styles.xml b/java/com/android/newbubble/res/values/styles.xml new file mode 100644 index 000000000..274bd8704 --- /dev/null +++ b/java/com/android/newbubble/res/values/styles.xml @@ -0,0 +1,38 @@ + + + + + + + + + \ No newline at end of file diff --git a/java/com/android/newbubble/res/values/values.xml b/java/com/android/newbubble/res/values/values.xml index 381b0079e..d8cd08f87 100644 --- a/java/com/android/newbubble/res/values/values.xml +++ b/java/com/android/newbubble/res/values/values.xml @@ -18,17 +18,23 @@ 56dp 16dp - 4dp + 6dp + 36dp 16dp - -4dp + 12dp + 16dp + -16dp 64dp 16dp + -16dp 12dp + 24dp - 10dp + 6dp + 8dp 160dp - 20dp + 12dp 4dp 24dp 4dp -- cgit v1.2.3