Merge "Disable quick contact badge for unknown contacts."
diff --git a/res/layout/call_log_contact_photo.xml b/res/layout/call_log_contact_photo.xml
index 91b0743..6afb1ab 100644
--- a/res/layout/call_log_contact_photo.xml
+++ b/res/layout/call_log_contact_photo.xml
@@ -1,10 +1,21 @@
<?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>
diff --git a/src/com/android/contacts/calllog/CallLogFragment.java b/src/com/android/contacts/calllog/CallLogFragment.java
index 046988b..3f3fd8d 100644
--- a/src/com/android/contacts/calllog/CallLogFragment.java
+++ b/src/com/android/contacts/calllog/CallLogFragment.java
@@ -63,7 +63,6 @@
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 @@
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 @@
// 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 @@
// 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 @@
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);
- }
-
- private Uri getContactUri(long contactId, String lookupKey) {
- return Contacts.getLookupUri(contactId, lookupKey);
+ 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);
+ }
}
/**
diff --git a/src/com/android/contacts/calllog/CallLogListItemViews.java b/src/com/android/contacts/calllog/CallLogListItemViews.java
index 51bc535..90f78f7 100644
--- a/src/com/android/contacts/calllog/CallLogListItemViews.java
+++ b/src/com/android/contacts/calllog/CallLogListItemViews.java
@@ -21,6 +21,7 @@
import android.content.Context;
import android.view.View;
+import android.widget.ImageView;
import android.widget.QuickContactBadge;
import android.widget.TextView;
@@ -28,8 +29,10 @@
* 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 @@
/** 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 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 static CallLogListItemViews createForTest(Context context) {
return new CallLogListItemViews(
new QuickContactBadge(context),
+ new ImageView(context),
new View(context),
new View(context),
new View(context),
diff --git a/tests/src/com/android/contacts/activities/CallLogActivityTests.java b/tests/src/com/android/contacts/activities/CallLogActivityTests.java
index 8372d9c..b642ffe 100644
--- a/tests/src/com/android/contacts/activities/CallLogActivityTests.java
+++ b/tests/src/com/android/contacts/activities/CallLogActivityTests.java
@@ -266,6 +266,31 @@
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, "");