Set avatar as background instead of src.
Since we don't need background any more, setting avatar as background makes elevation work on the same view. So we don't need setOutlineProvider() which might provide a different outline to the image's.
Also fix an windowParams NPE.
Test: manual
PiperOrigin-RevId: 183289973
Change-Id: I452b3f2b66b1810839626f57449be7d10662f2c5
diff --git a/java/com/android/newbubble/NewBubble.java b/java/com/android/newbubble/NewBubble.java
index 2e98ad1..54e56ba 100644
--- a/java/com/android/newbubble/NewBubble.java
+++ b/java/com/android/newbubble/NewBubble.java
@@ -25,7 +25,6 @@
import android.app.PendingIntent.CanceledException;
import android.content.Context;
import android.content.Intent;
-import android.graphics.Outline;
import android.graphics.PixelFormat;
import android.graphics.Rect;
import android.graphics.drawable.Animatable;
@@ -47,7 +46,6 @@
import android.view.View;
import android.view.View.AccessibilityDelegate;
import android.view.ViewGroup;
-import android.view.ViewOutlineProvider;
import android.view.ViewTreeObserver.OnPreDrawListener;
import android.view.WindowManager;
import android.view.WindowManager.LayoutParams;
@@ -525,7 +523,7 @@
public void updateAvatar(@NonNull Drawable avatar) {
if (!avatar.equals(currentInfo.getAvatar())) {
currentInfo = NewBubbleInfo.from(currentInfo).setAvatar(avatar).build();
- viewHolder.getPrimaryAvatar().setImageDrawable(currentInfo.getAvatar());
+ viewHolder.getPrimaryAvatar().setBackground(currentInfo.getAvatar());
}
}
@@ -560,7 +558,7 @@
savedYPosition = -1;
viewHolder
- .getPrimaryButton()
+ .getPrimaryAvatar()
.animate()
.translationZ(
context
@@ -569,7 +567,7 @@
}
void onMoveFinish() {
- viewHolder.getPrimaryButton().animate().translationZ(0);
+ viewHolder.getPrimaryAvatar().animate().translationZ(0);
}
void primaryButtonClick() {
@@ -669,17 +667,9 @@
primaryIconMoveDistance =
context.getResources().getDimensionPixelSize(R.dimen.bubble_size)
- context.getResources().getDimensionPixelSize(R.dimen.bubble_small_icon_size);
- // Set boundary for primary button to show elevation (background is transparent)
- viewHolder
- .getPrimaryButton()
- .setOutlineProvider(
- new ViewOutlineProvider() {
- @Override
- public void getOutline(View view, Outline outline) {
- ViewOutlineProvider.BACKGROUND.getOutline(view, outline);
- outline.setAlpha(1);
- }
- });
+
+ // Avatar
+ viewHolder.getPrimaryAvatar().setBackground(currentInfo.getAvatar());
// Small icon
Drawable smallIconBackgroundCircle =
@@ -689,7 +679,6 @@
smallIconBackgroundCircle.setTint(context.getColor(R.color.bubble_button_color_blue));
viewHolder.getPrimaryIcon().setBackground(smallIconBackgroundCircle);
viewHolder.getPrimaryIcon().setImageIcon(currentInfo.getPrimaryIcon());
- viewHolder.getPrimaryAvatar().setImageDrawable(currentInfo.getAvatar());
updatePrimaryIconAnimation();
updateButtonStates();
@@ -873,6 +862,9 @@
xValueAnimator.setInterpolator(new LinearOutSlowInInterpolator());
xValueAnimator.addUpdateListener(
(valueAnimator) -> {
+ if (windowParams == null) {
+ return;
+ }
// Update windowParams and the root layout.
// We can't do ViewPropertyAnimation since it clips children.
float newX = (float) valueAnimator.getAnimatedValue();
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 c86d3bb..9b8250d 100644
--- a/java/com/android/newbubble/res/layout/new_bubble_base.xml
+++ b/java/com/android/newbubble/res/layout/new_bubble_base.xml
@@ -40,14 +40,13 @@
android:layout_marginTop="@dimen/bubble_shadow_padding_size_vertical"
android:layout_marginBottom="@dimen/bubble_shadow_padding_size_vertical"
android:contentDescription="@string/a11y_bubble_description"
- android:background="@drawable/bubble_shape_circle"
- android:measureAllChildren="false"
- android:elevation="@dimen/bubble_elevation">
+ android:measureAllChildren="false">
<ImageView
android:id="@+id/bubble_icon_avatar"
android:layout_width="@dimen/bubble_size"
android:layout_height="@dimen/bubble_size"
- tools:src="@android:drawable/ic_btn_speak_now"/>
+ android:background="@android:drawable/ic_btn_speak_now"
+ android:elevation="@dimen/bubble_elevation"/>
<ImageView
android:id="@+id/bubble_icon_primary"
android:layout_width="@dimen/bubble_small_icon_size"
@@ -59,7 +58,8 @@
android:background="@drawable/bubble_shape_circle_small"
android:measureAllChildren="false"
tools:backgroundTint="#FF0000AA"
- tools:src="@android:drawable/ic_btn_speak_now"/>
+ tools:src="@android:drawable/ic_btn_speak_now"
+ android:elevation="@dimen/bubble_dragging_elevation"/>
</FrameLayout>
</RelativeLayout>
<!-- The RelativeLayout below serves as boundary for @id/bubble_expanded_layout during animation -->
diff --git a/java/com/android/newbubble/res/values/values.xml b/java/com/android/newbubble/res/values/values.xml
index 2e72c5e..f449c9b 100644
--- a/java/com/android/newbubble/res/values/values.xml
+++ b/java/com/android/newbubble/res/values/values.xml
@@ -19,6 +19,7 @@
<dimen name="bubble_size">56dp</dimen>
<dimen name="bubble_icon_padding">16dp</dimen>
<dimen name="bubble_dragging_elevation_change">6dp</dimen>
+ <dimen name="bubble_dragging_elevation">12dp</dimen>
<dimen name="bubble_button_height">36dp</dimen>
<dimen name="bubble_button_icon_padding">16dp</dimen>