From 8dab453962327e01c6f2e2a22d61540d1c3d6f47 Mon Sep 17 00:00:00 2001 From: calderwoodra Date: Wed, 15 Nov 2017 14:16:43 -0800 Subject: Dialpad FAB no longer loses it's icon on fragment resume. There must be a bug in FloatingActionButton because when you call setImageDrawable multiple times (possibly with the same drawable/icon), the FAB renders with no icon present. That's why the icon would disappear in Fragment#onResume. Bug: 69006360 Test: manual PiperOrigin-RevId: 175878924 Change-Id: I1c36be3f9aeb003410f0bdbb9d52b5a483262f03 --- java/com/android/dialer/dialpadview/DialpadFragment.java | 2 +- .../dialer/dialpadview/res/layout/dialpad_fragment.xml | 1 + .../dialer/widget/FloatingActionButtonController.java | 12 ++++++++---- 3 files changed, 10 insertions(+), 5 deletions(-) (limited to 'java') diff --git a/java/com/android/dialer/dialpadview/DialpadFragment.java b/java/com/android/dialer/dialpadview/DialpadFragment.java index e85b57e33..8d11bcbe3 100644 --- a/java/com/android/dialer/dialpadview/DialpadFragment.java +++ b/java/com/android/dialer/dialpadview/DialpadFragment.java @@ -643,7 +643,7 @@ public class DialpadFragment extends Fragment iconId = R.drawable.ic_wifi_calling; } mFloatingActionButtonController.changeIcon( - res.getDrawable(iconId, null), res.getString(R.string.description_dial_button)); + iconId, res.getString(R.string.description_dial_button)); mDialpadQueryListener = FragmentUtils.getParentUnsafe(this, OnDialpadQueryChangedListener.class); diff --git a/java/com/android/dialer/dialpadview/res/layout/dialpad_fragment.xml b/java/com/android/dialer/dialpadview/res/layout/dialpad_fragment.xml index 2f62e1407..2e6b6eca0 100644 --- a/java/com/android/dialer/dialpadview/res/layout/dialpad_fragment.xml +++ b/java/com/android/dialer/dialpadview/res/layout/dialpad_fragment.xml @@ -66,6 +66,7 @@ android:layout_centerHorizontal="true" android:contentDescription="@string/description_dial_button" android:src="@drawable/quantum_ic_call_vd_theme_24" + android:tint="#ffffff" app:backgroundTint="@color/dialpad_fab_green" app:colorControlNormal="#ffffff" app:elevation="@dimen/floating_action_button_translation_z"/> diff --git a/java/com/android/dialer/widget/FloatingActionButtonController.java b/java/com/android/dialer/widget/FloatingActionButtonController.java index a0c4e6ddd..dde4d44ce 100644 --- a/java/com/android/dialer/widget/FloatingActionButtonController.java +++ b/java/com/android/dialer/widget/FloatingActionButtonController.java @@ -18,7 +18,7 @@ package com.android.dialer.widget; import android.app.Activity; import android.content.res.Resources; -import android.graphics.drawable.Drawable; +import android.support.annotation.DrawableRes; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.FloatingActionButton.OnVisibilityChangedListener; import android.view.View; @@ -39,6 +39,7 @@ public class FloatingActionButtonController { private final int mFloatingActionButtonMarginRight; private final FloatingActionButton mFab; private final Interpolator mFabInterpolator; + private int mFabIconId = -1; private int mScreenWidth; public FloatingActionButtonController(Activity activity, FloatingActionButton fab) { @@ -82,9 +83,12 @@ public class FloatingActionButtonController { } } - public void changeIcon(Drawable icon, String description) { - if (mFab.getDrawable() != icon || !mFab.getContentDescription().equals(description)) { - mFab.setImageDrawable(icon); + public void changeIcon(@DrawableRes int iconId, String description) { + if (this.mFabIconId != iconId) { + mFab.setImageResource(iconId); + this.mFabIconId = iconId; + } + if (!mFab.getContentDescription().equals(description)) { mFab.setContentDescription(description); } } -- cgit v1.2.3