Merge "ContactTiles now expand to automatically fill parent view."
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));
+ }
}