Merge "Fix crash when altering rate for voicemails without content."
diff --git a/res/layout/call_log_list_item_layout.xml b/res/layout/call_log_list_item_layout.xml
index 344413c..4fbe426 100644
--- a/res/layout/call_log_list_item_layout.xml
+++ b/res/layout/call_log_list_item_layout.xml
@@ -20,6 +20,7 @@
android:layout_height="?attr/call_log_list_contact_photo_size"
android:layout_toRightOf="@id/contact_photo"
android:layout_toLeftOf="@id/divider"
+ android:layout_alignWithParentIfMissing="true"
android:layout_marginLeft="?attr/call_log_inner_margin"
>
<include layout="@layout/call_log_phone_call_details"/>
diff --git a/src/com/android/contacts/calllog/CallLogListItemHelper.java b/src/com/android/contacts/calllog/CallLogListItemHelper.java
index 72d489d..d4f2291 100644
--- a/src/com/android/contacts/calllog/CallLogListItemHelper.java
+++ b/src/com/android/contacts/calllog/CallLogListItemHelper.java
@@ -55,10 +55,19 @@
boolean useIcons, boolean isHighlighted) {
mPhoneCallDetailsHelper.setPhoneCallDetails(views.phoneCallDetailsViews, details, useIcons,
isHighlighted);
- views.callView.setVisibility(
- mPhoneNumberHelper.canPlaceCallsTo(details.number)
- ? View.VISIBLE : View.INVISIBLE);
- views.playView.setVisibility(
- details.callTypes[0] == Calls.VOICEMAIL_TYPE ? View.VISIBLE : View.GONE);
+ boolean callVisible = mPhoneNumberHelper.canPlaceCallsTo(details.number);
+ boolean playVisible = details.callTypes[0] == Calls.VOICEMAIL_TYPE;
+
+ if (callVisible || playVisible) {
+ // At least one is visible. Keep the divider and the space for the call button.
+ views.callView.setVisibility(callVisible ? View.VISIBLE : View.INVISIBLE);
+ views.playView.setVisibility(playVisible ? View.VISIBLE : View.GONE);
+ views.dividerView.setVisibility(View.VISIBLE);
+ } else {
+ // Neither is visible, remove all of them entirely.
+ views.callView.setVisibility(View.GONE);
+ views.playView.setVisibility(View.GONE);
+ views.dividerView.setVisibility(View.GONE);
+ }
}
}
diff --git a/src/com/android/contacts/calllog/CallLogListItemViews.java b/src/com/android/contacts/calllog/CallLogListItemViews.java
index c34779d..b66d84e 100644
--- a/src/com/android/contacts/calllog/CallLogListItemViews.java
+++ b/src/com/android/contacts/calllog/CallLogListItemViews.java
@@ -34,6 +34,8 @@
public final ImageView callView;
/** The play action button used for voicemail. */
public final ImageView playView;
+ /** The divider between callView and playView. */
+ public final View dividerView;
/** The details of the phone call. */
public final PhoneCallDetailsViews phoneCallDetailsViews;
/** The item view for a stand-alone row, or null for other types of rows. */
@@ -44,11 +46,12 @@
public final TextView listHeaderTextView;
private CallLogListItemViews(QuickContactBadge photoView, ImageView callView,
- ImageView playView, PhoneCallDetailsViews phoneCallDetailsViews, View listItemView,
- View listHeaderView, TextView listHeaderTextView) {
+ ImageView playView, View dividerView, PhoneCallDetailsViews phoneCallDetailsViews,
+ View listItemView, View listHeaderView, TextView listHeaderTextView) {
this.photoView = photoView;
this.callView = callView;
this.playView = playView;
+ this.dividerView = dividerView;
this.phoneCallDetailsViews = phoneCallDetailsViews;
this.listItemView = listItemView;
this.listHeaderView = listHeaderView;
@@ -59,6 +62,7 @@
return new CallLogListItemViews((QuickContactBadge) view.findViewById(R.id.contact_photo),
(ImageView) view.findViewById(R.id.call_icon),
(ImageView) view.findViewById(R.id.play_icon),
+ view.findViewById(R.id.divider),
PhoneCallDetailsViews.fromView(view),
view.findViewById(R.id.call_log_item),
view.findViewById(R.id.call_log_header),
@@ -66,9 +70,11 @@
}
public static CallLogListItemViews createForTest(QuickContactBadge photoView,
- ImageView callView, ImageView playView, PhoneCallDetailsViews phoneCallDetailsViews,
- View standAloneItemView, View standAloneHeaderView, TextView standAloneHeaderTextView) {
- return new CallLogListItemViews(photoView, callView, playView, phoneCallDetailsViews,
- standAloneItemView, standAloneHeaderView, standAloneHeaderTextView);
+ ImageView callView, ImageView playView, View dividerView,
+ PhoneCallDetailsViews phoneCallDetailsViews, View standAloneItemView,
+ View standAloneHeaderView, TextView standAloneHeaderTextView) {
+ return new CallLogListItemViews(photoView, callView, playView, dividerView,
+ phoneCallDetailsViews, standAloneItemView, standAloneHeaderView,
+ standAloneHeaderTextView);
}
}
diff --git a/tests/src/com/android/contacts/calllog/CallLogListItemHelperTest.java b/tests/src/com/android/contacts/calllog/CallLogListItemHelperTest.java
index c56041e..626d7c6 100644
--- a/tests/src/com/android/contacts/calllog/CallLogListItemHelperTest.java
+++ b/tests/src/com/android/contacts/calllog/CallLogListItemHelperTest.java
@@ -71,7 +71,7 @@
resources, callTypeHelper, mPhoneNumberHelper);
mHelper = new CallLogListItemHelper(phoneCallDetailsHelper, mPhoneNumberHelper);
mViews = CallLogListItemViews.createForTest(new QuickContactBadge(context),
- new ImageView(context), new ImageView(context),
+ new ImageView(context), new ImageView(context), new View(context),
PhoneCallDetailsViews.createForTest(new TextView(context),
new LinearLayout(context), new TextView(context), new TextView(context),
new TextView(context), new TextView(context)),
@@ -93,20 +93,17 @@
public void testSetPhoneCallDetails_Unknown() {
setPhoneCallDetailsWithNumber(CallerInfo.UNKNOWN_NUMBER, CallerInfo.UNKNOWN_NUMBER);
- assertEquals(View.INVISIBLE, mViews.callView.getVisibility());
- assertEquals(View.GONE, mViews.playView.getVisibility());
+ assertNoCallButton();
}
public void testSetPhoneCallDetails_Private() {
setPhoneCallDetailsWithNumber(CallerInfo.PRIVATE_NUMBER, CallerInfo.PRIVATE_NUMBER);
- assertEquals(View.INVISIBLE, mViews.callView.getVisibility());
- assertEquals(View.GONE, mViews.playView.getVisibility());
+ assertNoCallButton();
}
public void testSetPhoneCallDetails_Payphone() {
setPhoneCallDetailsWithNumber(CallerInfo.PAYPHONE_NUMBER, CallerInfo.PAYPHONE_NUMBER);
- assertEquals(View.INVISIBLE, mViews.callView.getVisibility());
- assertEquals(View.GONE, mViews.playView.getVisibility());
+ assertNoCallButton();
}
public void testSetPhoneCallDetails_VoicemailNumber() {
@@ -121,11 +118,37 @@
assertEquals(View.VISIBLE, mViews.playView.getVisibility());
}
+ public void testSetPhoneCallDetails_VoicemailFromUnknown() {
+ setPhoneCallDetailsWithNumberAndType(CallerInfo.UNKNOWN_NUMBER, CallerInfo.UNKNOWN_NUMBER,
+ Calls.VOICEMAIL_TYPE);
+ assertEquals(View.VISIBLE, mViews.playView.getVisibility());
+ assertEmptyCallButton();
+ }
+
+ /** Asserts that the whole call area is gone. */
+ private void assertNoCallButton() {
+ assertEquals(View.GONE, mViews.callView.getVisibility());
+ assertEquals(View.GONE, mViews.playView.getVisibility());
+ assertEquals(View.GONE, mViews.dividerView.getVisibility());
+ }
+
+ /** Asserts that the call area is present but empty. */
+ private void assertEmptyCallButton() {
+ assertEquals(View.INVISIBLE, mViews.callView.getVisibility());
+ assertEquals(View.VISIBLE, mViews.dividerView.getVisibility());
+ }
+
/** Sets the details of a phone call using the specified phone number. */
private void setPhoneCallDetailsWithNumber(String number, String formattedNumber) {
+ setPhoneCallDetailsWithNumberAndType(number, formattedNumber, Calls.INCOMING_TYPE);
+ }
+
+ /** Sets the details of a phone call using the specified phone number. */
+ private void setPhoneCallDetailsWithNumberAndType(String number, String formattedNumber,
+ int callType) {
mHelper.setPhoneCallDetails(mViews,
new PhoneCallDetails(number, formattedNumber, TEST_COUNTRY_ISO,
- new int[]{ Calls.INCOMING_TYPE }, TEST_DATE, TEST_DURATION),
+ new int[]{ callType }, TEST_DATE, TEST_DURATION),
true, false);
}