Merge "Reduce number of views in call log."
diff --git a/res/layout/call_log_list_item.xml b/res/layout/call_log_list_item.xml
index f28bda1..5447f65 100644
--- a/res/layout/call_log_list_item.xml
+++ b/res/layout/call_log_list_item.xml
@@ -74,24 +74,12 @@
                 android:background="@drawable/ic_divider_dashed_holo_dark"
             />
             <ImageView
-                android:id="@+id/call_icon"
+                android:id="@+id/secondary_action_icon"
                 android:layout_width="@dimen/call_log_call_action_width"
                 android:layout_height="@dimen/call_log_call_action_height"
                 android:layout_gravity="center_vertical"
                 android:scaleType="center"
-                android:src="@drawable/ic_ab_dialer_holo_dark"
                 android:background="@drawable/list_selector"
-                android:contentDescription="@string/description_call_log_call_button"
-            />
-            <ImageView
-                android:id="@+id/play_icon"
-                android:layout_width="@dimen/call_log_call_action_width"
-                android:layout_height="@dimen/call_log_call_action_height"
-                android:layout_gravity="center_vertical"
-                android:scaleType="center"
-                android:src="@drawable/ic_play_holo_dark"
-                android:background="@drawable/list_selector"
-                android:contentDescription="@string/description_call_log_play_button"
             />
         </LinearLayout>
         <LinearLayout
diff --git a/src/com/android/contacts/calllog/CallLogFragment.java b/src/com/android/contacts/calllog/CallLogFragment.java
index 58dcc8b..bac3987 100644
--- a/src/com/android/contacts/calllog/CallLogFragment.java
+++ b/src/com/android/contacts/calllog/CallLogFragment.java
@@ -327,7 +327,8 @@
             PhoneCallDetailsHelper phoneCallDetailsHelper = new PhoneCallDetailsHelper(
                     resources, callTypeHelper, mPhoneNumberHelper);
             mCallLogViewsHelper =
-                    new CallLogListItemHelper(phoneCallDetailsHelper, mPhoneNumberHelper);
+                    new CallLogListItemHelper(
+                            phoneCallDetailsHelper, mPhoneNumberHelper, resources);
             mCallLogGroupBuilder = new CallLogGroupBuilder(this);
         }
 
@@ -660,8 +661,7 @@
         private void findAndCacheViews(View view) {
             // Get the views to bind to.
             CallLogListItemViews views = CallLogListItemViews.fromView(view);
-            views.callView.setOnClickListener(mCallPlayOnClickListener);
-            views.playView.setOnClickListener(mCallPlayOnClickListener);
+            views.secondaryActionView.setOnClickListener(mCallPlayOnClickListener);
             view.setTag(views);
         }
 
@@ -703,17 +703,15 @@
             if (callType == Calls.VOICEMAIL_TYPE) {
                 String voicemailUri = c.getString(CallLogQuery.VOICEMAIL_URI);
                 final long rowId = c.getLong(CallLogQuery.ID);
-                views.playView.setTag(
+                views.secondaryActionView.setTag(
                         IntentProvider.getPlayVoicemailIntentProvider(rowId, voicemailUri));
-                views.callView.setTag(null);
             } else if (!TextUtils.isEmpty(number)) {
                 // Store away the number so we can call it directly if you click on the call icon.
-                views.callView.setTag(IntentProvider.getReturnCallIntentProvider(number));
-                views.playView.setTag(null);
+                views.secondaryActionView.setTag(
+                        IntentProvider.getReturnCallIntentProvider(number));
             } else {
                 // No action enabled.
-                views.callView.setTag(null);
-                views.playView.setTag(null);
+                views.secondaryActionView.setTag(null);
             }
 
             // Lookup contacts with this number
diff --git a/src/com/android/contacts/calllog/CallLogListItemHelper.java b/src/com/android/contacts/calllog/CallLogListItemHelper.java
index a973d49..5951ea3 100644
--- a/src/com/android/contacts/calllog/CallLogListItemHelper.java
+++ b/src/com/android/contacts/calllog/CallLogListItemHelper.java
@@ -18,7 +18,9 @@
 
 import com.android.contacts.PhoneCallDetails;
 import com.android.contacts.PhoneCallDetailsHelper;
+import com.android.contacts.R;
 
+import android.content.res.Resources;
 import android.provider.CallLog.Calls;
 import android.view.View;
 
@@ -30,6 +32,8 @@
     private final PhoneCallDetailsHelper mPhoneCallDetailsHelper;
     /** Helper for handling phone numbers. */
     private final PhoneNumberHelper mPhoneNumberHelper;
+    /** Resources to look up strings. */
+    private final Resources mResources;
 
     /**
      * Creates a new helper instance.
@@ -38,9 +42,10 @@
      * @param phoneNumberHelper used to process phone number
      */
     public CallLogListItemHelper(PhoneCallDetailsHelper phoneCallDetailsHelper,
-            PhoneNumberHelper phoneNumberHelper) {
+            PhoneNumberHelper phoneNumberHelper, Resources resources) {
         mPhoneCallDetailsHelper = phoneCallDetailsHelper;
         mPhoneNumberHelper= phoneNumberHelper;
+        mResources = resources;
     }
 
     /**
@@ -59,22 +64,35 @@
 
         if (canPlay) {
             // Playback action takes preference.
-            views.callView.setVisibility(View.GONE);
-            views.playView.setVisibility(View.VISIBLE);
+            configurePlaySecondaryAction(views);
             views.unheardView.setVisibility(isHighlighted ? View.VISIBLE : View.GONE);
             views.dividerView.setVisibility(View.VISIBLE);
         } else if (canCall) {
-            // Call is the main action.
-            views.callView.setVisibility(View.VISIBLE);
-            views.playView.setVisibility(View.GONE);
+            // Call is the secondary action.
+            configureCallSecondaryAction(views);
             views.unheardView.setVisibility(View.GONE);
             views.dividerView.setVisibility(View.VISIBLE);
         } else {
             // No action available.
-            views.callView.setVisibility(View.GONE);
-            views.playView.setVisibility(View.GONE);
+            views.secondaryActionView.setVisibility(View.GONE);
             views.unheardView.setVisibility(View.GONE);
             views.dividerView.setVisibility(View.GONE);
         }
     }
+
+    /** Sets the secondary action to correspond to the call button. */
+    private void configureCallSecondaryAction(CallLogListItemViews views) {
+        views.secondaryActionView.setVisibility(View.VISIBLE);
+        views.secondaryActionView.setImageResource(R.drawable.ic_ab_dialer_holo_dark);
+        views.secondaryActionView.setContentDescription(
+                mResources.getString(R.string.description_call_log_call_button));
+    }
+
+    /** Sets the secondary action to correspond to the play button. */
+    private void configurePlaySecondaryAction(CallLogListItemViews views) {
+        views.secondaryActionView.setVisibility(View.VISIBLE);
+        views.secondaryActionView.setImageResource(R.drawable.ic_play_holo_dark);
+        views.secondaryActionView.setContentDescription(
+                mResources.getString(R.string.description_call_log_play_button));
+    }
 }
diff --git a/src/com/android/contacts/calllog/CallLogListItemViews.java b/src/com/android/contacts/calllog/CallLogListItemViews.java
index 21f2dc5..040d0ad 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;
 
@@ -30,13 +31,11 @@
 public final class CallLogListItemViews {
     /** The quick contact badge for the contact. */
     public final QuickContactBadge quickContactView;
-    /** The main action button on the entry. */
-    public final View callView;
-    /** The play action button used for voicemail. */
-    public final View playView;
+    /** The secondary action button on the entry. */
+    public final ImageView secondaryActionView;
     /** The icon used for unheard voicemail. */
     public final View unheardView;
-    /** The divider between callView and playView. */
+    /** The divider between the primary and secondary actions. */
     public final View dividerView;
     /** The details of the phone call. */
     public final PhoneCallDetailsViews phoneCallDetailsViews;
@@ -46,12 +45,11 @@
     public final TextView listHeaderTextView;
 
     private CallLogListItemViews(QuickContactBadge quickContactView,
-            View callView, View playView, View unheardView, View dividerView,
+            ImageView secondaryActionView, View unheardView, View dividerView,
             PhoneCallDetailsViews phoneCallDetailsViews, View listItemView,
             TextView listHeaderTextView) {
         this.quickContactView = quickContactView;
-        this.callView = callView;
-        this.playView = playView;
+        this.secondaryActionView = secondaryActionView;
         this.unheardView = unheardView;
         this.dividerView = dividerView;
         this.phoneCallDetailsViews = phoneCallDetailsViews;
@@ -62,8 +60,7 @@
     public static CallLogListItemViews fromView(View view) {
         return new CallLogListItemViews(
                 (QuickContactBadge) view.findViewById(R.id.quick_contact_photo),
-                view.findViewById(R.id.call_icon),
-                view.findViewById(R.id.play_icon),
+                (ImageView) view.findViewById(R.id.secondary_action_icon),
                 view.findViewById(R.id.unheard_icon),
                 view.findViewById(R.id.divider),
                 PhoneCallDetailsViews.fromView(view),
@@ -74,8 +71,7 @@
     public static CallLogListItemViews createForTest(Context context) {
         return new CallLogListItemViews(
                 new QuickContactBadge(context),
-                new View(context),
-                new View(context),
+                new ImageView(context),
                 new View(context),
                 new View(context),
                 PhoneCallDetailsViews.createForTest(context),
diff --git a/tests/src/com/android/contacts/activities/CallLogActivityTests.java b/tests/src/com/android/contacts/activities/CallLogActivityTests.java
index 7043eb0..ce2418f 100644
--- a/tests/src/com/android/contacts/activities/CallLogActivityTests.java
+++ b/tests/src/com/android/contacts/activities/CallLogActivityTests.java
@@ -174,7 +174,7 @@
         insert(CallerInfo.PRIVATE_NUMBER, NOW, 0, Calls.INCOMING_TYPE);
         View view = mAdapter.newGroupView(getActivity(), mParentView);
         mAdapter.bindGroupView(view, getActivity(), mCursor, 3, false);
-        assertNotNull(view.findViewById(R.id.call_icon));
+        assertNotNull(view.findViewById(R.id.secondary_action_icon));
     }
 
     @MediumTest
@@ -183,7 +183,7 @@
         insert(CallerInfo.PRIVATE_NUMBER, NOW, 0, Calls.INCOMING_TYPE);
         View view = mAdapter.newStandAloneView(getActivity(), mParentView);
         mAdapter.bindStandAloneView(view, getActivity(), mCursor);
-        assertNotNull(view.findViewById(R.id.call_icon));
+        assertNotNull(view.findViewById(R.id.secondary_action_icon));
     }
 
     @MediumTest
@@ -192,7 +192,7 @@
         insert(CallerInfo.PRIVATE_NUMBER, NOW, 0, Calls.INCOMING_TYPE);
         View view = mAdapter.newChildView(getActivity(), mParentView);
         mAdapter.bindChildView(view, getActivity(), mCursor);
-        assertNotNull(view.findViewById(R.id.call_icon));
+        assertNotNull(view.findViewById(R.id.secondary_action_icon));
     }
 
     @MediumTest
@@ -303,7 +303,7 @@
         mAdapter.bindStandAloneView(view, getActivity(), mCursor);
 
         CallLogListItemViews views = (CallLogListItemViews) view.getTag();
-        IntentProvider intentProvider = (IntentProvider) views.callView.getTag();
+        IntentProvider intentProvider = (IntentProvider) views.secondaryActionView.getTag();
         Intent intent = intentProvider.getIntent(mActivity);
         // Starts a call.
         assertEquals(Intent.ACTION_CALL_PRIVILEGED, intent.getAction());
@@ -319,7 +319,7 @@
         mAdapter.bindStandAloneView(view, getActivity(), mCursor);
 
         CallLogListItemViews views = (CallLogListItemViews) view.getTag();
-        IntentProvider intentProvider = (IntentProvider) views.playView.getTag();
+        IntentProvider intentProvider = (IntentProvider) views.secondaryActionView.getTag();
         Intent intent = intentProvider.getIntent(mActivity);
         // Starts the call detail activity.
         assertEquals(new ComponentName(mActivity, CallDetailActivity.class),
@@ -357,9 +357,9 @@
             String number = getPhoneNumberForListEntry(i);
             if (CallerInfo.PRIVATE_NUMBER.equals(number) ||
                 CallerInfo.UNKNOWN_NUMBER.equals(number)) {
-                assertFalse(View.VISIBLE == mItem.callView.getVisibility());
+                assertFalse(View.VISIBLE == mItem.secondaryActionView.getVisibility());
             } else {
-                assertEquals(View.VISIBLE, mItem.callView.getVisibility());
+                assertEquals(View.VISIBLE, mItem.secondaryActionView.getVisibility());
             }
         }
     }
diff --git a/tests/src/com/android/contacts/calllog/CallLogListItemHelperTest.java b/tests/src/com/android/contacts/calllog/CallLogListItemHelperTest.java
index 1cf7da9..74f834a 100644
--- a/tests/src/com/android/contacts/calllog/CallLogListItemHelperTest.java
+++ b/tests/src/com/android/contacts/calllog/CallLogListItemHelperTest.java
@@ -59,7 +59,7 @@
         mPhoneNumberHelper = new PhoneNumberHelper(resources, TEST_VOICEMAIL_NUMBER);
         PhoneCallDetailsHelper phoneCallDetailsHelper = new PhoneCallDetailsHelper(
                 resources, callTypeHelper, mPhoneNumberHelper);
-        mHelper = new CallLogListItemHelper(phoneCallDetailsHelper, mPhoneNumberHelper);
+        mHelper = new CallLogListItemHelper(phoneCallDetailsHelper, mPhoneNumberHelper, resources);
         mViews = CallLogListItemViews.createForTest(context);
     }
 
@@ -72,8 +72,7 @@
 
     public void testSetPhoneCallDetails() {
         setPhoneCallDetailsWithNumber("12125551234", "1-212-555-1234");
-        assertEquals(View.VISIBLE, mViews.callView.getVisibility());
-        assertEquals(View.GONE, mViews.playView.getVisibility());
+        assertEquals(View.VISIBLE, mViews.secondaryActionView.getVisibility());
         assertEquals(View.GONE, mViews.unheardView.getVisibility());
     }
 
@@ -94,37 +93,32 @@
 
     public void testSetPhoneCallDetails_VoicemailNumber() {
         setPhoneCallDetailsWithNumber(TEST_VOICEMAIL_NUMBER, TEST_VOICEMAIL_NUMBER);
-        assertEquals(View.VISIBLE, mViews.callView.getVisibility());
-        assertEquals(View.GONE, mViews.playView.getVisibility());
+        assertEquals(View.VISIBLE, mViews.secondaryActionView.getVisibility());
         assertEquals(View.GONE, mViews.unheardView.getVisibility());
     }
 
     public void testSetPhoneCallDetails_ReadVoicemail() {
         setPhoneCallDetailsWithTypes(Calls.VOICEMAIL_TYPE);
-        assertEquals(View.GONE, mViews.callView.getVisibility());
-        assertEquals(View.VISIBLE, mViews.playView.getVisibility());
+        assertEquals(View.VISIBLE, mViews.secondaryActionView.getVisibility());
         assertEquals(View.GONE, mViews.unheardView.getVisibility());
     }
 
     public void testSetPhoneCallDetails_UnreadVoicemail() {
         setUnreadPhoneCallDetailsWithTypes(Calls.VOICEMAIL_TYPE);
-        assertEquals(View.GONE, mViews.callView.getVisibility());
-        assertEquals(View.VISIBLE, mViews.playView.getVisibility());
+        assertEquals(View.VISIBLE, mViews.secondaryActionView.getVisibility());
         assertEquals(View.VISIBLE, mViews.unheardView.getVisibility());
     }
 
     public void testSetPhoneCallDetails_VoicemailFromUnknown() {
         setPhoneCallDetailsWithNumberAndType(CallerInfo.UNKNOWN_NUMBER, CallerInfo.UNKNOWN_NUMBER,
                 Calls.VOICEMAIL_TYPE);
-        assertEquals(View.GONE, mViews.callView.getVisibility());
-        assertEquals(View.VISIBLE, mViews.playView.getVisibility());
+        assertEquals(View.VISIBLE, mViews.secondaryActionView.getVisibility());
         assertEquals(View.GONE, mViews.unheardView.getVisibility());
     }
 
     /** 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.secondaryActionView.getVisibility());
         assertEquals(View.GONE, mViews.unheardView.getVisibility());
         assertEquals(View.GONE, mViews.dividerView.getVisibility());
     }