Merge "Don't request a layout during layout." into jb-dev
diff --git a/src/com/android/contacts/detail/ContactDetailTabCarousel.java b/src/com/android/contacts/detail/ContactDetailTabCarousel.java
index 1e20689..dd0723d 100644
--- a/src/com/android/contacts/detail/ContactDetailTabCarousel.java
+++ b/src/com/android/contacts/detail/ContactDetailTabCarousel.java
@@ -21,6 +21,7 @@
import com.android.contacts.detail.ContactDetailPhotoSetter;
import com.android.contacts.util.MoreMath;
import com.android.contacts.util.PhoneCapabilityTester;
+import com.android.contacts.util.SchedulingUtils;
import android.content.Context;
import android.content.res.Resources;
@@ -203,11 +204,19 @@
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
super.onLayout(changed, l, t, r, b);
- if (mScrollToCurrentTab) {
- mScrollToCurrentTab = false;
- scrollTo(mCurrentTab == TAB_INDEX_ABOUT ? 0 : mAllowedHorizontalScrollLength, 0);
- updateAlphaLayers();
- }
+
+ // Defer this stuff until after the layout has finished. This is because
+ // updateAlphaLayers() ultimately results in another layout request, and
+ // the framework currently can't handle this safely.
+ if (!mScrollToCurrentTab) return;
+ mScrollToCurrentTab = false;
+ SchedulingUtils.doAfterLayout(this, new Runnable() {
+ @Override
+ public void run() {
+ scrollTo(mCurrentTab == TAB_INDEX_ABOUT ? 0 : mAllowedHorizontalScrollLength, 0);
+ updateAlphaLayers();
+ }
+ });
}
/** When clicked, selects the corresponding tab. */