Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 012641e5 authored by Flavio Lerda's avatar Flavio Lerda Committed by Android (Google) Code Review
Browse files

Merge "Disable quick contact badge for unknown contacts."

parents d1cac908 4d44e623
Loading
Loading
Loading
Loading
+13 −2
Original line number Diff line number Diff line
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android">
    <QuickContactBadge
    <FrameLayout
        android:id="@+id/contact_photo"
        android:layout_width="@dimen/call_log_list_contact_photo_size"
        android:layout_height="@dimen/call_log_list_contact_photo_size"
        android:layout_alignParentLeft="true"
        android:layout_centerInParent="true"
    >
        <QuickContactBadge
            android:id="@+id/quick_contact_photo"
            android:layout_width="@dimen/call_log_list_contact_photo_size"
            android:layout_height="@dimen/call_log_list_contact_photo_size"
        />
        <ImageView
            android:id="@+id/plain_contact_photo"
            android:layout_width="@dimen/call_log_list_contact_photo_size"
            android:layout_height="@dimen/call_log_list_contact_photo_size"
        />
    </FrameLayout>
</merge>
+17 −13
Original line number Diff line number Diff line
@@ -63,7 +63,6 @@ import android.view.View;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
import android.widget.ListView;
import android.widget.QuickContactBadge;
import android.widget.TextView;

import java.util.LinkedList;
@@ -176,7 +175,7 @@ public class CallLogFragment extends ListFragment implements ViewPagerVisibility
    private TextView mStatusMessageAction;

    public static final class ContactInfo {
        public long personId;
        public long personId = -1;
        public String name;
        public int type;
        public String label;
@@ -657,6 +656,8 @@ public class CallLogFragment extends ListFragment implements ViewPagerVisibility
            // Get the views to bind to.
            CallLogListItemViews views = CallLogListItemViews.fromView(view);
            views.callView.setOnClickListener(this);
            // Do nothing when a plain photo is clicked. Without this, the list item will fire.
            views.plainPhotoView.setOnClickListener(null);
            view.setTag(views);
        }

@@ -763,10 +764,7 @@ public class CallLogFragment extends ListFragment implements ViewPagerVisibility
            // New items also use the highlighted version of the text.
            final boolean isHighlighted = isNew;
            mCallLogViewsHelper.setPhoneCallDetails(views, details, useIcons, isHighlighted);
            if (views.photoView != null) {
                bindQuickContact(views.photoView, thumbnailUri, personId, lookupKey);
            }

            setPhoto(views, thumbnailUri, personId, lookupKey);

            // Listen for the first draw
            if (mPreDrawListener == null) {
@@ -794,14 +792,20 @@ public class CallLogFragment extends ListFragment implements ViewPagerVisibility
            return callTypes;
        }

        private void bindQuickContact(QuickContactBadge view, Uri thumbnailUri, long contactId,
        private void setPhoto(CallLogListItemViews views, Uri thumbnailUri, long contactId,
                String lookupKey) {
            view.assignContactUri(getContactUri(contactId, lookupKey));
            mContactPhotoManager.loadPhoto(view, thumbnailUri);
            if (contactId == -1) {
                // This does not correspond to a contact, do not use the QuickContactBadge.
                mContactPhotoManager.loadPhoto(views.plainPhotoView, thumbnailUri);
                views.plainPhotoView.setVisibility(View.VISIBLE);
                views.quickContactView.setVisibility(View.GONE);
            } else {
                views.quickContactView.assignContactUri(
                        Contacts.getLookupUri(contactId, lookupKey));
                mContactPhotoManager.loadPhoto(views.quickContactView, thumbnailUri);
                views.quickContactView.setVisibility(View.VISIBLE);
                views.plainPhotoView.setVisibility(View.GONE);
            }

        private Uri getContactUri(long contactId, String lookupKey) {
            return Contacts.getLookupUri(contactId, lookupKey);
        }

        /**
+13 −6
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import com.android.contacts.R;

import android.content.Context;
import android.view.View;
import android.widget.ImageView;
import android.widget.QuickContactBadge;
import android.widget.TextView;

@@ -28,8 +29,10 @@ import android.widget.TextView;
 * Simple value object containing the various views within a call log entry.
 */
public final class CallLogListItemViews {
    /** The quick contact badge for the contact. Only present for group and stand alone entries. */
    public final QuickContactBadge photoView;
    /** The quick contact badge for the contact. */
    public final QuickContactBadge quickContactView;
    /** The photo view without quick contact badge. */
    public final ImageView plainPhotoView;
    /** The main action button on the entry. */
    public final View callView;
    /** The play action button used for voicemail. */
@@ -47,11 +50,12 @@ public final class CallLogListItemViews {
    /** The text of the header in a stand-alone row, or null for other types of rows. */
    public final TextView listHeaderTextView;

    private CallLogListItemViews(QuickContactBadge photoView, View callView,
            View playView, View unheardView, View dividerView,
    private CallLogListItemViews(QuickContactBadge quickContactView, ImageView photoView,
            View callView, View playView, View unheardView, View dividerView,
            PhoneCallDetailsViews phoneCallDetailsViews, View listItemView, View listHeaderView,
            TextView listHeaderTextView) {
        this.photoView = photoView;
        this.quickContactView = quickContactView;
        this.plainPhotoView = photoView;
        this.callView = callView;
        this.playView = playView;
        this.unheardView = unheardView;
@@ -63,7 +67,9 @@ public final class CallLogListItemViews {
    }

    public static CallLogListItemViews fromView(View view) {
        return new CallLogListItemViews((QuickContactBadge) view.findViewById(R.id.contact_photo),
        return new CallLogListItemViews(
                (QuickContactBadge) view.findViewById(R.id.quick_contact_photo),
                (ImageView) view.findViewById(R.id.plain_contact_photo),
                view.findViewById(R.id.call_icon),
                view.findViewById(R.id.play_icon),
                view.findViewById(R.id.unheard_icon),
@@ -77,6 +83,7 @@ public final class CallLogListItemViews {
    public static CallLogListItemViews createForTest(Context context) {
        return new CallLogListItemViews(
                new QuickContactBadge(context),
                new ImageView(context),
                new View(context),
                new View(context),
                new View(context),
+25 −0
Original line number Diff line number Diff line
@@ -266,6 +266,31 @@ public class CallLogActivityTests
        assertNumberAndLabelAre(views, TEST_FORMATTED_NUMBER, numberLabel);
    }

    @MediumTest
    public void testBindView_WithQuickContactBadge() {
        mCursor.moveToFirst();
        insertWithCachedValues(TEST_NUMBER, NOW, 0, Calls.INCOMING_TYPE,
                "John Doe", Phone.TYPE_HOME, "");
        View view = mAdapter.newStandAloneView(getActivity(), mParentView);
        mAdapter.bindStandAloneView(view, getActivity(), mCursor);

        CallLogListItemViews views = (CallLogListItemViews) view.getTag();
        assertEquals(View.VISIBLE, views.quickContactView.getVisibility());
        assertEquals(View.GONE, views.plainPhotoView.getVisibility());
    }

    @MediumTest
    public void testBindView_WithoutQuickContactBadge() {
        mCursor.moveToFirst();
        insert(TEST_NUMBER, NOW, 0, Calls.INCOMING_TYPE);
        View view = mAdapter.newStandAloneView(getActivity(), mParentView);
        mAdapter.bindStandAloneView(view, getActivity(), mCursor);

        CallLogListItemViews views = (CallLogListItemViews) view.getTag();
        assertEquals(View.GONE, views.quickContactView.getVisibility());
        assertEquals(View.VISIBLE, views.plainPhotoView.getVisibility());
    }

    /** Returns the label associated with a given phone type. */
    private CharSequence getTypeLabel(int phoneType) {
        return Phone.getTypeLabel(getActivity().getResources(), phoneType, "");