Merge "Genericize promo card." into ub-contactsdialer-a-dev
diff --git a/res/layout/voicemail_promo_card.xml b/res/layout/voicemail_promo_card.xml
index 103fa30..891f096 100644
--- a/res/layout/voicemail_promo_card.xml
+++ b/res/layout/voicemail_promo_card.xml
@@ -79,20 +79,20 @@
             android:gravity="end">
 
             <TextView
-                android:id="@+id/settings_action"
+                android:id="@+id/secondary_action"
                 style="@style/PromoCardActionStyle"
                 android:background="?android:attr/selectableItemBackground"
                 android:text="@string/visual_voicemail_settings"
                 android:nextFocusLeft="@+id/promo_card"
-                android:nextFocusRight="@+id/ok_action"
+                android:nextFocusRight="@+id/primary_action"
                 android:paddingEnd="@dimen/promo_card_action_between_padding"/>
 
             <TextView
-                android:id="@+id/ok_action"
+                android:id="@+id/primary_action"
                 style="@style/PromoCardActionStyle"
                 android:background="?android:attr/selectableItemBackground"
                 android:text="@android:string/ok"
-                android:nextFocusLeft="@+id/settings_action"
+                android:nextFocusLeft="@+id/secondary_action"
                 android:nextFocusRight="@+id/promo_card"/>
         </LinearLayout>
     </LinearLayout>
diff --git a/src/com/android/dialer/calllog/CallLogAdapter.java b/src/com/android/dialer/calllog/CallLogAdapter.java
index 4d4d454..90985af 100644
--- a/src/com/android/dialer/calllog/CallLogAdapter.java
+++ b/src/com/android/dialer/calllog/CallLogAdapter.java
@@ -67,11 +67,9 @@
     private static final int NO_EXPANDED_LIST_ITEM = -1;
 
     private static final int VOICEMAIL_PROMO_CARD_POSITION = 0;
-    /**
-     * View type for voicemail promo card.  Note: Numbering starts at 20 to avoid collision
-     * with {@link com.android.common.widget.GroupingListAdapter#ITEM_TYPE_IN_GROUP}.
-     */
-    private static final int VIEW_TYPE_VOICEMAIL_PROMO_CARD = 20;
+
+    protected static final int VIEW_TYPE_NORMAL = 0;
+    private static final int VIEW_TYPE_VOICEMAIL_PROMO_CARD = 1;
 
     /**
      * The key for the show voicemail promo card preference which will determine whether the promo
@@ -389,9 +387,9 @@
     protected void bindVoicemailPromoCardViewHolder(ViewHolder viewHolder) {
         PromoCardViewHolder promoCardViewHolder = (PromoCardViewHolder) viewHolder;
 
-        promoCardViewHolder.getSettingsTextView().setOnClickListener(
-                mVoicemailSettingsActionListener);
-        promoCardViewHolder.getOkTextView().setOnClickListener(mOkActionListener);
+        promoCardViewHolder.getSecondaryActionView()
+                .setOnClickListener(mVoicemailSettingsActionListener);
+        promoCardViewHolder.getPrimaryActionView().setOnClickListener(mOkActionListener);
     }
 
     /**
diff --git a/src/com/android/dialer/calllog/GroupingListAdapter.java b/src/com/android/dialer/calllog/GroupingListAdapter.java
index 54dd5f6..70190df 100644
--- a/src/com/android/dialer/calllog/GroupingListAdapter.java
+++ b/src/com/android/dialer/calllog/GroupingListAdapter.java
@@ -126,7 +126,7 @@
      * that position.
      */
     public int getGroupSize(int listPosition) {
-        if (listPosition >= mGroupMetadata.size()) {
+        if (listPosition < 0 || listPosition >= mGroupMetadata.size()) {
             return 0;
         }
 
@@ -138,7 +138,7 @@
      * corresponding to that position.
      */
     public Object getItem(int listPosition) {
-        if (mCursor == null || listPosition >= mGroupMetadata.size()) {
+        if (mCursor == null || listPosition < 0 || listPosition >= mGroupMetadata.size()) {
             return null;
         }
 
diff --git a/src/com/android/dialer/calllog/PromoCardViewHolder.java b/src/com/android/dialer/calllog/PromoCardViewHolder.java
index 656b669..f5a7501 100644
--- a/src/com/android/dialer/calllog/PromoCardViewHolder.java
+++ b/src/com/android/dialer/calllog/PromoCardViewHolder.java
@@ -24,7 +24,8 @@
 import com.android.dialer.R;
 
 /**
- * View holder class for a promo card which will appear in the voicemail tab.
+ * Generic ViewHolder class for a promo card with a primary and secondary action.
+ * Example: the promo card which appears in the voicemail tab.
  */
 public class PromoCardViewHolder extends RecyclerView.ViewHolder {
     public static PromoCardViewHolder create(View rootView) {
@@ -32,14 +33,15 @@
     }
 
     /**
-     * The "Settings" button view.
+     * The primary action button view.
      */
-    private View mSettingsTextView;
+    private View mPrimaryActionView;
 
     /**
+     * The secondary action button view.
      * The "Ok" button view.
      */
-    private View mOkTextView;
+    private View mSecondaryActionView;
 
     /**
      * Creates an instance of the {@link ViewHolder}.
@@ -49,33 +51,33 @@
     private PromoCardViewHolder(View rootView) {
         super(rootView);
 
-        mSettingsTextView = rootView.findViewById(R.id.settings_action);
-        mOkTextView = rootView.findViewById(R.id.ok_action);
+        mPrimaryActionView = rootView.findViewById(R.id.primary_action);
+        mSecondaryActionView = rootView.findViewById(R.id.secondary_action);
     }
 
-    /**
-     * Retrieves the "Settings" button.
+   /**
+     * Retrieves the "primary" action button (eg. "OK").
      *
      * @return The view.
      */
-    public View getSettingsTextView() {
-        return mSettingsTextView;
+    public View getPrimaryActionView() {
+        return mPrimaryActionView;
     }
 
     /**
-     * Retrieves the "Ok" button.
+     * Retrieves the "secondary" action button (eg. "Cancel" or "More Info").
      *
      * @return The view.
      */
-    public View getOkTextView() {
-        return mOkTextView;
+    public View getSecondaryActionView() {
+        return mSecondaryActionView;
     }
 
     @NeededForTesting
     public static PromoCardViewHolder createForTest(Context context) {
         PromoCardViewHolder viewHolder = new PromoCardViewHolder(new View(context));
-        viewHolder.mSettingsTextView = new View(context);
-        viewHolder.mOkTextView = new View(context);
+        viewHolder.mPrimaryActionView = new View(context);
+        viewHolder.mSecondaryActionView = new View(context);
         return viewHolder;
     }
 }