Added push states for ContactTiles

-This does not include Starred Quick Contact for tablet.
--That view needs to be fixed with Bug: 5062027

Bug: 5044780
Change-Id: I2149f1cbf18904bf64611b65482b1ba7fcb42523
diff --git a/res/layout/contact_tile_starred.xml b/res/layout/contact_tile_starred.xml
index ba1dff2..d667a34 100644
--- a/res/layout/contact_tile_starred.xml
+++ b/res/layout/contact_tile_starred.xml
@@ -61,6 +61,12 @@
             android:layout_marginLeft="4dip"
             style="@style/ContactTileStatusText" />
 
+        <ImageButton
+            android:id="@+id/contact_tile_push_state"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:background="?android:attr/selectableItemBackground" />
+
     </RelativeLayout>
 
 </view>
diff --git a/res/layout/contact_tile_starred_secondary_target.xml b/res/layout/contact_tile_starred_secondary_target.xml
index f7b8673..4b2639b 100644
--- a/res/layout/contact_tile_starred_secondary_target.xml
+++ b/res/layout/contact_tile_starred_secondary_target.xml
@@ -47,8 +47,15 @@
             stlye="@style/ContactTileStarredName" />
 
         <ImageButton
+            android:id="@+id/contact_tile_push_state"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:background="?android:attr/selectableItemBackground" />
+
+        <ImageButton
             android:id="@+id/contact_tile_secondary_button"
             android:src="@drawable/ic_tab_unselected_contacts"
+            android:background="?android:attr/selectableItemBackground"
             android:layout_height="@dimen/contact_tile_shadowbox_height"
             android:layout_width="wrap_content"
             android:layout_alignParentBottom="true"
diff --git a/src/com/android/contacts/list/ContactTileAdapter.java b/src/com/android/contacts/list/ContactTileAdapter.java
index 8993cdd..6f2a551 100644
--- a/src/com/android/contacts/list/ContactTileAdapter.java
+++ b/src/com/android/contacts/list/ContactTileAdapter.java
@@ -19,19 +19,15 @@
 import com.android.contacts.ContactTileLoaderFactory;
 import com.android.contacts.GroupMemberLoader;
 import com.android.contacts.R;
-import com.android.contacts.model.AccountTypeManager;
-import com.android.contacts.model.DataKind;
+import com.android.contacts.list.ContactTileAdapter.DisplayType;
 
 import android.content.ContentUris;
 import android.content.Context;
 import android.database.Cursor;
 import android.net.Uri;
-import android.provider.ContactsContract;
-import android.provider.ContactsContract.CommonDataKinds.Email;
 import android.provider.ContactsContract.CommonDataKinds.Phone;
 import android.provider.ContactsContract.Contacts;
 import android.view.View;
-import android.view.View.OnClickListener;
 import android.view.ViewGroup;
 import android.widget.BaseAdapter;
 import android.widget.LinearLayout;
@@ -426,10 +422,19 @@
         }
     }
 
+    private ContactTileView.Listener mContactTileListener = new ContactTileView.Listener() {
+        @Override
+        public void onClick(ContactTileView contactTileView) {
+            if (mListener != null) {
+                mListener.onContactSelected(contactTileView.getLookupUri());
+            }
+        }
+    };
+
     /**
      * Acts as a row item composed of {@link ContactTileView}
      */
-    private class ContactTileRow extends LinearLayout implements OnClickListener {
+    private class ContactTileRow extends LinearLayout {
         private int mItemViewType;
         private int mLayoutResId;
 
@@ -454,7 +459,7 @@
             }
 
         private void addTileFromEntry(ContactEntry entry, int tileIndex) {
-            ContactTileView contactTile = null;
+            final ContactTileView contactTile;
 
             if (getChildCount() <= tileIndex) {
                 switch (mItemViewType) {
@@ -476,7 +481,7 @@
                 contactTile.setLayoutParams(new LinearLayout.LayoutParams(0,
                         LinearLayout.LayoutParams.WRAP_CONTENT, 1.0f));
                 contactTile.setPhotoManager(mPhotoManager);
-                contactTile.setOnClickListener(this);
+                contactTile.setListener(mContactTileListener);
                 addView(contactTile);
             } else {
                 contactTile = (ContactTileView) getChildAt(tileIndex);
@@ -484,11 +489,6 @@
             contactTile.setClickable(entry != null);
             contactTile.loadFromContact(entry);
         }
-
-        @Override
-        public void onClick(View v) {
-            mListener.onContactSelected(((ContactTileView) v).getLookupUri());
-        }
     }
 
     /**
diff --git a/src/com/android/contacts/list/ContactTileSecondaryTargetView.java b/src/com/android/contacts/list/ContactTileSecondaryTargetView.java
index 862e23d..073ac29 100644
--- a/src/com/android/contacts/list/ContactTileSecondaryTargetView.java
+++ b/src/com/android/contacts/list/ContactTileSecondaryTargetView.java
@@ -20,9 +20,7 @@
 import android.content.Context;
 import android.content.Intent;
 import android.util.AttributeSet;
-import android.view.MotionEvent;
 import android.view.View;
-import android.view.View.OnClickListener;
 import android.widget.ImageButton;
 
 /**
@@ -30,8 +28,7 @@
  * in a perfect square like the {@link ContactTileStarredView}. However it adds in an additional
  * touch target for a secondary action.
  */
-public class ContactTileSecondaryTargetView extends ContactTileStarredView
-        implements OnClickListener {
+public class ContactTileSecondaryTargetView extends ContactTileStarredView {
 
     private final static String TAG = ContactTileSecondaryTargetView.class.getSimpleName();
 
@@ -44,12 +41,13 @@
     @Override
     protected void onFinishInflate() {
         super.onFinishInflate();
-        mSecondaryButton = (ImageButton) findViewById(R.id.contact_tile_secondary_button);
-        mSecondaryButton.setOnClickListener(this);
-    }
 
-    @Override
-    public void onClick(View v) {
-        getContext().startActivity(new Intent(Intent.ACTION_VIEW, getLookupUri()));
+        mSecondaryButton = (ImageButton) findViewById(R.id.contact_tile_secondary_button);
+        mSecondaryButton.setOnClickListener(new OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                getContext().startActivity(new Intent(Intent.ACTION_VIEW, getLookupUri()));
+            }
+        });
     }
 }
diff --git a/src/com/android/contacts/list/ContactTileView.java b/src/com/android/contacts/list/ContactTileView.java
index 3839573..aee34c9 100644
--- a/src/com/android/contacts/list/ContactTileView.java
+++ b/src/com/android/contacts/list/ContactTileView.java
@@ -27,6 +27,7 @@
 import android.util.Log;
 import android.view.View;
 import android.widget.FrameLayout;
+import android.widget.ImageButton;
 import android.widget.ImageView;
 import android.widget.QuickContactBadge;
 import android.widget.TextView;
@@ -46,6 +47,8 @@
     private TextView mPhoneLabel;
     private TextView mPhoneNumber;
     private ContactPhotoManager mPhotoManager = null;
+    private ImageButton mPushState;
+    private Listener mListener;
 
     public ContactTileView(Context context, AttributeSet attrs) {
         super(context, attrs);
@@ -63,6 +66,22 @@
         mStatus = (TextView) findViewById(R.id.contact_tile_status);
         mPhoneLabel = (TextView) findViewById(R.id.contact_tile_phone_type);
         mPhoneNumber = (TextView) findViewById(R.id.contact_tile_phone_number);
+        mPushState = (ImageButton) findViewById(R.id.contact_tile_push_state);
+
+        OnClickListener listener = new OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                if (mListener != null) {
+                    mListener.onClick(ContactTileView.this);
+                }
+            }
+        };
+
+        if(mPushState != null) {
+            mPushState.setOnClickListener(listener);
+        } else {
+            setOnClickListener(listener);
+        }
     }
 
     public void setPhotoManager(ContactPhotoManager photoManager) {
@@ -130,7 +149,15 @@
         }
     }
 
+    public void setListener(Listener listener) {
+        mListener = listener;
+    }
+
     public Uri getLookupUri() {
         return mLookupUri;
     }
+
+    public interface Listener {
+        void onClick(ContactTileView contactTileView);
+    }
 }