Fix tablet padding of ContactPickerFragment
The ContactPickerFragment marks its ListView View.GONE until data
is finished loading. This would cause the ContactListViewUtils
to perform incorrect measurements. Change ContactListViewUtils
to measure the root view instead.
Bug: 17305317
Change-Id: I7d6d723fc95ff3d1dbfd5f7311ee38743c072245
diff --git a/src/com/android/contacts/common/util/ContactListViewUtils.java b/src/com/android/contacts/common/util/ContactListViewUtils.java
index 2bb5c73..24b18a7 100644
--- a/src/com/android/contacts/common/util/ContactListViewUtils.java
+++ b/src/com/android/contacts/common/util/ContactListViewUtils.java
@@ -15,16 +15,16 @@
// These two constants will help add more padding for the text inside the card.
private static final double TEXT_LEFT_PADDING_TO_CARD_PADDING_RATIO = 1.1;
- private static void addPaddingToView(ListView listView, int listSpaceWeight, int listViewWeight)
+ private static void addPaddingToView(ListView listView, int parentWidth,
+ int listSpaceWeight, int listViewWeight)
{
if (listSpaceWeight > 0 && listViewWeight > 0) {
double paddingPercent = (double) listSpaceWeight / (double)
(listSpaceWeight * 2 + listViewWeight);
- int width = listView.getWidth();
listView.setPadding(
- (int) (width * paddingPercent * TEXT_LEFT_PADDING_TO_CARD_PADDING_RATIO),
+ (int) (parentWidth * paddingPercent * TEXT_LEFT_PADDING_TO_CARD_PADDING_RATIO),
listView.getPaddingTop(),
- (int) (width * paddingPercent * TEXT_LEFT_PADDING_TO_CARD_PADDING_RATIO),
+ (int) (parentWidth * paddingPercent * TEXT_LEFT_PADDING_TO_CARD_PADDING_RATIO),
listView.getPaddingBottom());
// The EdgeEffect and ScrollBar need to span to the edge of the ListView's padding.
listView.setClipToPadding(false);
@@ -43,7 +43,7 @@
* @param rootLayout layout that contains ListView and R.id.list_card
*/
public static void applyCardPaddingToView(Resources resources,
- final ListView listView, View rootLayout) {
+ final ListView listView, final View rootLayout) {
// Set a padding on the list view so it appears in the center of the card
// in the layout if required.
final int listSpaceWeight = resources.getInteger(
@@ -65,8 +65,11 @@
SchedulingUtils.doOnPreDraw(listView, /* drawNextFrame = */ false, new Runnable() {
@Override
public void run() {
+ // Use the rootLayout.getWidth() instead of listView.getWidth() since
+ // we sometimes hide the listView until we finish loading data. This would
+ // result in incorrect padding.
ContactListViewUtils.addPaddingToView(
- listView, listSpaceWeight, listViewWeight);
+ listView, rootLayout.getWidth(), listSpaceWeight, listViewWeight);
}
});
}