ContactTiles now expand to automatically fill parent view.

Change-Id: I58dd59b720f65be772e456eca428fd8de950ef32
diff --git a/res/layout/contact_tile_regular.xml b/res/layout/contact_tile_regular.xml
index 3fbc0fb..c864ee6 100644
--- a/res/layout/contact_tile_regular.xml
+++ b/res/layout/contact_tile_regular.xml
@@ -16,14 +16,30 @@
 <view
     xmlns:android="http://schemas.android.com/apk/res/android"
     class="com.android.contacts.list.ContactTileView"
-    style="@style/ContactTileRegularLayout">
+    android:focusable="true"
+    android:padding="3dip"
+    android:background="@drawable/list_selector" >
 
-    <ImageView
-        android:id="@+id/contact_tile_image"
-        style="@style/ContactTileRegularImage" />
+    <RelativeLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent" >
 
-    <TextView
-        android:id="@+id/contact_tile_name"
-        style="@style/ContactTileRegularText" />
+        <ImageView
+            android:id="@+id/contact_tile_image"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:scaleType="centerCrop" />
+
+        <TextView
+            android:id="@+id/contact_tile_name"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_alignParentBottom="true"
+            android:background="@color/contact_tile_regular_text"
+            android:textColor="@color/contact_tile_regular_text_background"
+            android:textSize="17sp"
+            android:alpha="0.7" />
+
+    </RelativeLayout>
 
 </view>
diff --git a/res/layout/contact_tile_small.xml b/res/layout/contact_tile_small.xml
index a750943..9eda2cf 100644
--- a/res/layout/contact_tile_small.xml
+++ b/res/layout/contact_tile_small.xml
@@ -16,17 +16,30 @@
 <view
     xmlns:android="http://schemas.android.com/apk/res/android"
     class="com.android.contacts.list.ContactTileView"
-    style="@style/ContactTileSmallLayout">
+    android:focusable="true"
+    android:padding="5dip"
+    android:background="@drawable/list_selector" >
 
     <LinearLayout
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content">
+        android:layout_width="match_parent"
+        android:layout_height="match_parent" >
+
         <ImageView
+            android:layout_width="0dip"
+            android:layout_height="wrap_content"
+            android:layout_weight="1"
             android:id="@+id/contact_tile_image"
-            style="@style/ContactTileSmallImage" />
+            android:gravity="top"
+            android:scaleType="centerCrop" />
+
         <TextView
+            android:layout_width="0dip"
+            android:layout_height="wrap_content"
+            android:layout_weight="1"
             android:id="@+id/contact_tile_name"
-            style="@style/ContactTileSmallText" />
+            android:paddingTop="8dip"
+            android:paddingLeft="4dip" />
+
     </LinearLayout>
 
 </view>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 3c80950..6c0970f 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -280,54 +280,6 @@
         <item name="android:paddingTop">5dip</item>
     </style>
 
-    <style name="ContactTileRegularText">
-        <item name="android:layout_width">160dip</item>
-        <item name="android:layout_height">wrap_content</item>
-        <item name="android:layout_alignParentBottom">true</item>
-        <item name="android:background">@color/contact_tile_regular_text</item>
-        <item name="android:textColor">@color/contact_tile_regular_text_background</item>
-        <item name="android:textSize">17sp</item>
-        <item name="android:alpha">0.7</item>
-        <item name="android:gravity">center_horizontal</item>
-    </style>
-
-    <style name="ContactTileRegularImage">
-        <item name="android:layout_width">160dip</item>
-        <item name="android:layout_height">160dip</item>
-        <item name="android:layout_alignParentTop">true</item>
-        <item name="android:layout_alignParentLeft">true</item>
-        <item name="android:scaleType">centerCrop</item>
-    </style>
-
-    <style name="ContactTileRegularLayout">
-        <item name="android:layout_width">155dip</item>
-        <item name="android:layout_height">160dip</item>
-        <item name="android:focusable">true</item>
-        <item name="android:padding">5dip</item>
-        <item name="android:background">@drawable/list_selector</item>
-    </style>
-
-    <style name="ContactTileSmallText">
-        <item name="android:layout_width">80dip</item>
-        <item name="android:layout_height">wrap_content</item>
-        <item name="android:paddingTop">8dip</item>
-        <item name="android:paddingLeft">4dip</item>
-    </style>
-
-    <style name="ContactTileSmallImage">
-        <item name="android:layout_width">80dip</item>
-        <item name="android:layout_height">80dip</item>
-        <item name="android:scaleType">centerCrop</item>
-    </style>
-
-    <style name="ContactTileSmallLayout">
-        <item name="android:layout_width">160dip</item>
-        <item name="android:layout_height">80dip</item>
-        <item name="android:focusable">true</item>
-        <item name="android:padding">5dip</item>
-        <item name="android:background">@drawable/list_selector</item>
-    </style>
-
     <style name="GroupBrowseListItem">
         <item name="android:paddingRight">20dip</item>
     </style>
diff --git a/src/com/android/contacts/list/ContactTileAdapter.java b/src/com/android/contacts/list/ContactTileAdapter.java
index 32a68cb..961eeb8 100644
--- a/src/com/android/contacts/list/ContactTileAdapter.java
+++ b/src/com/android/contacts/list/ContactTileAdapter.java
@@ -18,7 +18,6 @@
 import com.android.contacts.ContactPhotoManager;
 import com.android.contacts.R;
 import com.android.contacts.StrequentMetaDataLoader;
-
 import android.content.ContentUris;
 import android.content.Context;
 import android.database.Cursor;
@@ -158,6 +157,11 @@
         return numRows;
     }
 
+    public void setColumnCount(int colCount) {
+        mColumnCount = colCount;
+        notifyDataSetChanged();
+    }
+
     /**
      * Returns the number of rows required to show the provided number of entries
      * with the current number of columns.
@@ -230,12 +234,13 @@
 
         // Creating new row if needed
         if (contactTileRowView == null) {
-            int layoutResId = getLayoutResourceId(getItemViewType(position));
-            contactTileRowView = new ContactTileRow(mContext, layoutResId);
+            int itemViewType = getItemViewType(position);
+            int layoutResId = getLayoutResourceId(itemViewType);
+            contactTileRowView = new ContactTileRow(mContext, layoutResId,
+                    itemViewType == ViewTypes.REGULAR);
         }
 
         contactTileRowView.configureRow(contactList);
-
         return contactTileRowView;
     }
 
@@ -268,9 +273,11 @@
 
     /**
      * Returns view type based on {@link DisplayType}.
-     * STARRED_ONLY and GROUP_MEMBERS are {@link ViewTypes}.REGULAR.
-     * FREQUENT_ONLY is {@link ViewTypes}.SMALL.
-     * STREQUENT mixes both {@link ViewTypes} and also adds in {@link ViewTypes}.DIVIDER.
+     * {@link DisplayType#STARRED_ONLY} and {@link DisplayType#GROUP_MEMBERS}
+     * are {@link ViewTypes#REGULAR}.
+     * {@link DisplayType#FREQUENT_ONLY} is {@link ViewTypes#SMALL}.
+     * {@link DisplayType#STREQUENT} mixes both {@link ViewTypes}
+     * and also adds in {@link ViewTypes#DIVIDER}.
      */
     @Override
     public int getItemViewType(int position) {
@@ -299,10 +306,12 @@
      */
     private class ContactTileRow extends LinearLayout implements OnClickListener {
         private int mLayoutResId;
+        private boolean mIsContactTileSquare;
 
-        public ContactTileRow(Context context, int layoutResId) {
+        public ContactTileRow(Context context, int layoutResId, boolean isSquare) {
             super(context);
             mLayoutResId = layoutResId;
+            mIsContactTileSquare = isSquare;
         }
 
         /**
@@ -322,6 +331,9 @@
 
             if (getChildCount() <= tileIndex) {
                 contactTile = (ContactTileView) inflate(mContext, mLayoutResId, null);
+                contactTile.setIsSquare(mIsContactTileSquare);
+                contactTile.setLayoutParams(new LinearLayout.LayoutParams(0,
+                        LinearLayout.LayoutParams.WRAP_CONTENT, 1.0f));
                 contactTile.setPhotoManager(mPhotoManager);
                 contactTile.setOnClickListener(this);
                 addView(contactTile);
diff --git a/src/com/android/contacts/list/ContactTileView.java b/src/com/android/contacts/list/ContactTileView.java
index d19ca7e..4cce82e 100644
--- a/src/com/android/contacts/list/ContactTileView.java
+++ b/src/com/android/contacts/list/ContactTileView.java
@@ -24,20 +24,25 @@
 import android.util.AttributeSet;
 import android.util.Log;
 import android.view.View;
+import android.widget.FrameLayout;
 import android.widget.ImageView;
-import android.widget.RelativeLayout;
 import android.widget.TextView;
 
-/*
+/**
  * A ContactTile displays the contact's picture overlayed with their name
  */
-public class ContactTileView extends RelativeLayout {
+public class ContactTileView extends FrameLayout {
     private final static String TAG = "ContactTileView";
 
     private Uri mLookupUri;
     private ImageView mPhoto;
     private TextView mName;
     private ContactPhotoManager mPhotoManager = null;
+    /*
+     * Is set to true if the {@link ContactTileView} is a square.
+     * A {@link ViewType#REGULAR} is displayed as a square.
+     */
+    private boolean mIsSquare;
 
     public ContactTileView(Context context, AttributeSet attrs) {
         super(context, attrs);
@@ -50,6 +55,14 @@
         mPhoto = (ImageView) findViewById(R.id.contact_tile_image);
     }
 
+    public boolean isSquare() {
+        return mIsSquare;
+    }
+
+    public void setIsSquare(boolean isSquare) {
+        mIsSquare = isSquare;
+    }
+
     public void setPhotoManager(ContactPhotoManager photoManager) {
         mPhotoManager = photoManager;
     }
@@ -74,4 +87,14 @@
     public Uri getLookupUri() {
         return mLookupUri;
     }
+
+    @Override
+    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+        // Getting how much space is currently available and telling our
+        // Children to split it.
+        int width = getDefaultSize(getSuggestedMinimumWidth(), widthMeasureSpec);
+        int childMeasureSpec = MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY);
+        measureChildren(childMeasureSpec, childMeasureSpec);
+        setMeasuredDimension(width, width / (mIsSquare ? 1 : 2));
+    }
 }