From 349ac6070be667aa73c0df3077f3662e46c26c36 Mon Sep 17 00:00:00 2001 From: yueg Date: Wed, 17 Jan 2018 09:02:45 -0800 Subject: Handle hiding bubble right after showing it. If hide bubble right after showing it, we should cancel animation, remove view and set visibility to HIDEN. Otherwise we can't retrieve correct bubble status later, thus hide/show bubble unexpectedly. It at least fix some cases of IllegalArgumentException. Bug: 71746139 Test: NewBubbleTest PiperOrigin-RevId: 182222155 Change-Id: If020b83cfffd9c643fd6fe3d2879a05e5969281f --- java/com/android/newbubble/NewBubble.java | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/java/com/android/newbubble/NewBubble.java b/java/com/android/newbubble/NewBubble.java index cb7a09469..65f7a0aab 100644 --- a/java/com/android/newbubble/NewBubble.java +++ b/java/com/android/newbubble/NewBubble.java @@ -103,7 +103,7 @@ public class NewBubble { @NonNull private NewBubbleInfo currentInfo; - @Visibility private int visibility; + @VisibleForTesting @Visibility int visibility; private boolean expanded; private CharSequence textAfterShow; private int collapseEndAction; @@ -112,6 +112,7 @@ public class NewBubble { private AnimatorSet collapseAnimatorSet; private Integer overrideGravity; @VisibleForTesting AnimatorSet exitAnimatorSet; + @VisibleForTesting AnimatorSet enterAnimatorSet; private final int primaryIconMoveDistance; private final int leftBoundary; @@ -120,15 +121,15 @@ public class NewBubble { /** Type of action after bubble collapse */ @Retention(RetentionPolicy.SOURCE) @IntDef({CollapseEnd.NOTHING, CollapseEnd.HIDE}) - @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) - public @interface CollapseEnd { + private @interface CollapseEnd { int NOTHING = 0; int HIDE = 1; } @Retention(RetentionPolicy.SOURCE) + @VisibleForTesting @IntDef({Visibility.ENTERING, Visibility.SHOWING, Visibility.EXITING, Visibility.HIDDEN}) - private @interface Visibility { + @interface Visibility { int HIDDEN = 0; int ENTERING = 1; int SHOWING = 2; @@ -440,7 +441,7 @@ public class NewBubble { ObjectAnimator.ofFloat(viewHolder.getPrimaryAvatar(), "alpha", 1); ObjectAnimator iconAlphaAnimator = ObjectAnimator.ofFloat(viewHolder.getPrimaryIcon(), "alpha", 1); - AnimatorSet enterAnimatorSet = new AnimatorSet(); + enterAnimatorSet = new AnimatorSet(); enterAnimatorSet.playTogether( scaleXAnimator, scaleYAnimator, avatarAlphaAnimator, iconAlphaAnimator); enterAnimatorSet.setInterpolator(new OvershootInterpolator()); @@ -609,6 +610,14 @@ public class NewBubble { // Make bubble non clickable to prevent further buggy actions viewHolder.setChildClickable(false); + if (visibility == Visibility.ENTERING) { + enterAnimatorSet.removeAllListeners(); + enterAnimatorSet.cancel(); + enterAnimatorSet = null; + afterHiding.run(); + return; + } + if (collapseAnimatorSet != null) { collapseEndAction = CollapseEnd.HIDE; return; -- cgit v1.2.3 From bb41b26b5d8b438f6d163c56e31f0ff3801c7ed0 Mon Sep 17 00:00:00 2001 From: linyuh Date: Wed, 17 Jan 2018 10:26:16 -0800 Subject: Correctly show the contact's photo in CallDetailsActivity when launched from the new call log. Bug: 70218437,71867391 Test: ModulesTest & Manual PiperOrigin-RevId: 182233967 Change-Id: I6eb4bf236230eee6bbecc99b128fef5afddfd1e9 --- .../calldetails/CallDetailsHeaderViewHolder.java | 4 ++-- java/com/android/dialer/calllog/ui/menu/Modules.java | 20 ++++++++------------ 2 files changed, 10 insertions(+), 14 deletions(-) diff --git a/java/com/android/dialer/calldetails/CallDetailsHeaderViewHolder.java b/java/com/android/dialer/calldetails/CallDetailsHeaderViewHolder.java index 604a5e8dc..647c6edb6 100644 --- a/java/com/android/dialer/calldetails/CallDetailsHeaderViewHolder.java +++ b/java/com/android/dialer/calldetails/CallDetailsHeaderViewHolder.java @@ -136,9 +136,9 @@ public class CallDetailsHeaderViewHolder extends RecyclerView.ViewHolder ContactPhotoManager.getInstance(context) .loadDialerThumbnailOrPhoto( contactPhoto, - contact.hasContactUri() ? Uri.parse(contact.getContactUri()) : null, + contact.getContactUri().isEmpty() ? null : Uri.parse(contact.getContactUri()), contact.getPhotoId(), - contact.hasPhotoUri() ? Uri.parse(contact.getPhotoUri()) : null, + contact.getPhotoUri().isEmpty() ? null : Uri.parse(contact.getPhotoUri()), contact.getNameOrNumber(), contact.getContactType()); diff --git a/java/com/android/dialer/calllog/ui/menu/Modules.java b/java/com/android/dialer/calllog/ui/menu/Modules.java index 92dd41163..fd0606ee0 100644 --- a/java/com/android/dialer/calllog/ui/menu/Modules.java +++ b/java/com/android/dialer/calllog/ui/menu/Modules.java @@ -23,13 +23,13 @@ import android.text.TextUtils; import com.android.dialer.calldetails.CallDetailsActivity; import com.android.dialer.callintent.CallInitiationType; import com.android.dialer.calllog.model.CoalescedRow; +import com.android.dialer.calllogutils.CallLogContactTypes; import com.android.dialer.calllogutils.PhoneAccountUtils; import com.android.dialer.contactactions.ContactActionModule; import com.android.dialer.contactactions.DividerModule; import com.android.dialer.contactactions.IntentModule; import com.android.dialer.contactactions.SharedModules; import com.android.dialer.dialercontact.DialerContact; -import com.android.dialer.lettertile.LetterTileDrawable; import java.util.ArrayList; import java.util.List; @@ -125,23 +125,19 @@ final class Modules { DialerContact.Builder dialerContactBuilder = DialerContact.newBuilder() .setNumber(originalNumber) - .setContactType(LetterTileDrawable.TYPE_DEFAULT) // TODO(zachh): Use proper type. + .setContactType(CallLogContactTypes.getContactType(row)) .setPhotoId(row.numberAttributes().getPhotoId()); - if (!TextUtils.isEmpty(row.numberAttributes().getName())) { + if (!row.numberAttributes().getName().isEmpty()) { dialerContactBuilder.setNameOrNumber(row.numberAttributes().getName()); } else if (!TextUtils.isEmpty(originalNumber)) { dialerContactBuilder.setNameOrNumber(originalNumber); } - if (row.numberAttributes().hasNumberTypeLabel()) { - dialerContactBuilder.setNumberLabel(row.numberAttributes().getNumberTypeLabel()); - } - if (row.numberAttributes().hasPhotoUri()) { - dialerContactBuilder.setPhotoUri(row.numberAttributes().getPhotoUri()); - } - if (row.numberAttributes().hasLookupUri()) { - dialerContactBuilder.setContactUri(row.numberAttributes().getLookupUri()); - } + + dialerContactBuilder.setNumberLabel(row.numberAttributes().getNumberTypeLabel()); + dialerContactBuilder.setPhotoUri(row.numberAttributes().getPhotoUri()); + dialerContactBuilder.setContactUri(row.numberAttributes().getLookupUri()); + if (row.formattedNumber() != null) { dialerContactBuilder.setDisplayNumber(row.formattedNumber()); } -- cgit v1.2.3