diff --git a/res/layout-sw580dp/contact_detail_updates_fragment.xml b/res/layout-sw580dp/contact_detail_updates_fragment.xml
index 6002151..3bcb01c 100644
--- a/res/layout-sw580dp/contact_detail_updates_fragment.xml
+++ b/res/layout-sw580dp/contact_detail_updates_fragment.xml
@@ -24,7 +24,6 @@
     <ListView android:id="@android:id/list"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
-        android:background="@color/background_social_updates"
         android:fadingEdge="none"
         android:divider="@null"/>
 
diff --git a/res/layout-w470dp/contact_detail_updates_fragment.xml b/res/layout-w470dp/contact_detail_updates_fragment.xml
index 44207fc..50536de 100644
--- a/res/layout-w470dp/contact_detail_updates_fragment.xml
+++ b/res/layout-w470dp/contact_detail_updates_fragment.xml
@@ -23,7 +23,6 @@
     <ListView android:id="@android:id/list"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:background="@color/background_social_updates"
         android:fadingEdge="none"
         android:divider="@null"/>
 
diff --git a/res/layout/carousel_updates_tab.xml b/res/layout/carousel_updates_tab.xml
index 3f633fc..967b60a 100644
--- a/res/layout/carousel_updates_tab.xml
+++ b/res/layout/carousel_updates_tab.xml
@@ -27,7 +27,8 @@
     android:background="@color/detail_tab_background">
 
     <ImageView android:id="@+id/status_photo"
-        android:layout_width="wrap_content"
+        android:scaleType="centerCrop"
+        android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:layout_alignParentTop="true"
         android:layout_alignParentLeft="true"
diff --git a/res/layout/contact_detail_updates_fragment.xml b/res/layout/contact_detail_updates_fragment.xml
index a949cd8..4c056a8 100644
--- a/res/layout/contact_detail_updates_fragment.xml
+++ b/res/layout/contact_detail_updates_fragment.xml
@@ -18,7 +18,7 @@
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:ex="http://schemas.android.com/apk/res/com.android.contacts"
     android:id="@android:id/list"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:background="@color/background_social_updates"
-        android:divider="@null"/>
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:background="@color/background_primary"
+    android:divider="@null"/>
diff --git a/src/com/android/contacts/detail/ContactDetailDisplayUtils.java b/src/com/android/contacts/detail/ContactDetailDisplayUtils.java
index 86cb7fa..6bca80d 100644
--- a/src/com/android/contacts/detail/ContactDetailDisplayUtils.java
+++ b/src/com/android/contacts/detail/ContactDetailDisplayUtils.java
@@ -56,6 +56,7 @@
 import android.widget.CheckBox;
 import android.widget.ImageView;
 import android.widget.LinearLayout;
+import android.widget.ListView;
 import android.widget.TextView;
 
 import java.util.List;
@@ -500,4 +501,44 @@
             view.setBackgroundColor((int) (alpha * 255) << 24);
         }
     }
+
+    /**
+     * Returns the top coordinate of the first item in the {@link ListView}. If the first item
+     * in the {@link ListView} is not visible or there are no children in the list, then return
+     * Integer.MIN_VALUE. Note that the returned value will be <= 0 because the first item in the
+     * list cannot have a positive offset.
+     */
+    public static int getFirstListItemOffset(ListView listView) {
+        if (listView == null || listView.getChildCount() == 0 ||
+                listView.getFirstVisiblePosition() != 0) {
+            return Integer.MIN_VALUE;
+        }
+        return listView.getChildAt(0).getTop();
+    }
+
+    /**
+     * Tries to scroll the first item in the list to the given offset (this can be a no-op if the
+     * list is already in the correct position).
+     * @param listView that should be scrolled
+     * @param offset which should be <= 0
+     */
+    public static void requestToMoveToOffset(ListView listView, int offset) {
+        // We try to offset the list if the first item in the list is showing (which is presumed
+        // to have a larger height than the desired offset). If the first item in the list is not
+        // visible, then we simply do not scroll the list at all (since it can get complicated to
+        // compute how many items in the list will equal the given offset). Potentially
+        // some animation elsewhere will make the transition smoother for the user to compensate
+        // for this simplification.
+        if (listView == null || listView.getChildCount() == 0 ||
+                listView.getFirstVisiblePosition() != 0 || offset > 0) {
+            return;
+        }
+
+        // As an optimization, check if the first item is already at the given offset.
+        if (listView.getChildAt(0).getTop() == offset) {
+            return;
+        }
+
+        listView.setSelectionFromTop(0, offset);
+    }
 }
diff --git a/src/com/android/contacts/detail/ContactDetailFragment.java b/src/com/android/contacts/detail/ContactDetailFragment.java
index 4d50a39..daf8229 100644
--- a/src/com/android/contacts/detail/ContactDetailFragment.java
+++ b/src/com/android/contacts/detail/ContactDetailFragment.java
@@ -377,6 +377,25 @@
         bindData();
     }
 
+    /**
+     * Returns the top coordinate of the first item in the {@link ListView}. If the first item
+     * in the {@link ListView} is not visible or there are no children in the list, then return
+     * Integer.MIN_VALUE. Note that the returned value will be <= 0 because the first item in the
+     * list cannot have a positive offset.
+     */
+    public int getFirstListItemOffset() {
+        return ContactDetailDisplayUtils.getFirstListItemOffset(mListView);
+    }
+
+    /**
+     * Tries to scroll the first item to the given offset (this can be a no-op if the list is
+     * already in the correct position).
+     * @param offset which should be <= 0
+     */
+    public void requestToMoveToOffset(int offset) {
+        ContactDetailDisplayUtils.requestToMoveToOffset(mListView, offset);
+    }
+
     protected void bindData() {
         if (mView == null) {
             return;
diff --git a/src/com/android/contacts/detail/ContactDetailLayoutController.java b/src/com/android/contacts/detail/ContactDetailLayoutController.java
index a10431b..579d7bf 100644
--- a/src/com/android/contacts/detail/ContactDetailLayoutController.java
+++ b/src/com/android/contacts/detail/ContactDetailLayoutController.java
@@ -20,6 +20,7 @@
 import com.android.contacts.R;
 import com.android.contacts.activities.ContactDetailActivity.FragmentKeyListener;
 
+import android.animation.ObjectAnimator;
 import android.app.FragmentManager;
 import android.app.FragmentTransaction;
 import android.content.Context;
@@ -28,7 +29,9 @@
 import android.support.v4.view.ViewPager.OnPageChangeListener;
 import android.view.LayoutInflater;
 import android.view.View;
-import android.view.ViewGroup;
+import android.view.animation.AnimationUtils;
+import android.widget.AbsListView;
+import android.widget.AbsListView.OnScrollListener;
 
 /**
  * Determines the layout of the contact card.
@@ -38,6 +41,9 @@
     private static final String KEY_CONTACT_HAS_UPDATES = "contactHasUpdates";
     private static final String KEY_CURRENT_PAGE_INDEX = "currentPageIndex";
 
+    private static final int TAB_INDEX_DETAIL = 0;
+    private static final int TAB_INDEX_UPDATES = 1;
+
     /**
      * There are 3 possible layouts for the contact detail screen:
      * 1. TWO_COLUMN - Tall and wide screen so the 2 pages can be shown side-by-side
@@ -48,6 +54,7 @@
         TWO_COLUMN, VIEW_PAGER_AND_TAB_CAROUSEL, FRAGMENT_CAROUSEL,
     }
 
+    private final Context mContext;
     private final LayoutInflater mLayoutInflater;
     private final FragmentManager mFragmentManager;
 
@@ -58,10 +65,11 @@
     private View mUpdatesFragmentView;
 
     private final ViewPager mViewPager;
-    private final ContactDetailTabCarousel mTabCarousel;
     private ContactDetailViewPagerAdapter mViewPagerAdapter;
+    private int mViewPagerState;
 
-    private ContactDetailFragmentCarousel mFragmentCarousel;
+    private final ContactDetailTabCarousel mTabCarousel;
+    private final ContactDetailFragmentCarousel mFragmentCarousel;
 
     private ContactDetailFragment.Listener mContactDetailFragmentListener;
 
@@ -80,6 +88,7 @@
                     + "without a non-null FragmentManager");
         }
 
+        mContext = context;
         mLayoutInflater = (LayoutInflater) context.getSystemService(
                 Context.LAYOUT_INFLATER_SERVICE);
         mFragmentManager = fragmentManager;
@@ -139,17 +148,17 @@
                 // which will in turn be the parents to the mDetailFragment and mUpdatesFragment
                 // since the fragments must have the same parent view IDs in both landscape and
                 // portrait layouts.
-                ViewGroup detailContainer = (ViewGroup) mLayoutInflater.inflate(
+                mDetailFragmentView = mLayoutInflater.inflate(
                         R.layout.contact_detail_about_fragment_container, mViewPager, false);
-                ViewGroup updatesContainer = (ViewGroup) mLayoutInflater.inflate(
+                mUpdatesFragmentView = mLayoutInflater.inflate(
                         R.layout.contact_detail_updates_fragment_container, mViewPager, false);
 
                 mViewPagerAdapter = new ContactDetailViewPagerAdapter();
-                mViewPagerAdapter.setAboutFragmentView(detailContainer);
-                mViewPagerAdapter.setUpdatesFragmentView(updatesContainer);
+                mViewPagerAdapter.setAboutFragmentView(mDetailFragmentView);
+                mViewPagerAdapter.setUpdatesFragmentView(mUpdatesFragmentView);
 
-                mViewPager.addView(detailContainer);
-                mViewPager.addView(updatesContainer);
+                mViewPager.addView(mDetailFragmentView);
+                mViewPager.addView(mUpdatesFragmentView);
                 mViewPager.setAdapter(mViewPagerAdapter);
                 mViewPager.setOnPageChangeListener(mOnPageChangeListener);
 
@@ -164,7 +173,10 @@
                 }
 
                 mTabCarousel.setListener(mTabCarouselListener);
-                TabCarouselScrollManager.bind(mTabCarousel, mDetailFragment, mUpdatesFragment);
+                mDetailFragment.setVerticalScrollListener(
+                        new VerticalScrollListener(TAB_INDEX_DETAIL));
+                mUpdatesFragment.setVerticalScrollListener(
+                        new VerticalScrollListener(TAB_INDEX_UPDATES));
                 mViewPager.setCurrentItem(currentPageIndex);
                 break;
             }
@@ -239,8 +251,9 @@
                 break;
             }
             case VIEW_PAGER_AND_TAB_CAROUSEL: {
-                // Update and show the tab carousel
+                // Update and show the tab carousel (also restore its last saved position)
                 mTabCarousel.loadData(mContactData);
+                mTabCarousel.restoreYCoordinate();
                 mTabCarousel.setVisibility(View.VISIBLE);
                 // Update ViewPager to allow swipe between all the fragments (to see updates)
                 mViewPagerAdapter.enableSwipe(true);
@@ -320,7 +333,9 @@
         outState.putInt(KEY_CURRENT_PAGE_INDEX, getCurrentPageIndex());
     }
 
-    private OnPageChangeListener mOnPageChangeListener = new OnPageChangeListener() {
+    private final OnPageChangeListener mOnPageChangeListener = new OnPageChangeListener() {
+
+        private ObjectAnimator mTabCarouselAnimator;
 
         @Override
         public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
@@ -338,17 +353,102 @@
 
         @Override
         public void onPageSelected(int position) {
-            // Since a new page has been selected by the {@link ViewPager},
-            // update the tab selection in the carousel.
+            // Since the {@link ViewPager} has committed to a new page now (but may not have
+            // finished scrolling yet), update the tab selection in the carousel.
             mTabCarousel.setCurrentTab(position);
         }
 
         @Override
-        public void onPageScrollStateChanged(int state) {}
+        public void onPageScrollStateChanged(int state) {
+            if (mViewPagerState == ViewPager.SCROLL_STATE_IDLE) {
 
+                // If we are leaving the IDLE state, we are starting a swipe.
+                // First cancel any pending animations on the tab carousel.
+                cancelTabCarouselAnimator();
+
+                // Sync the two lists because the list on the other page will start to show as
+                // we swipe over more.
+                syncScrollStateBetweenLists(mViewPager.getCurrentItem());
+
+            } else if (state == ViewPager.SCROLL_STATE_IDLE) {
+
+                // Otherwise if the {@link ViewPager} is idle now, a page has been selected and
+                // scrolled into place. Perform an animation of the tab carousel is needed.
+                int currentPageIndex = mViewPager.getCurrentItem();
+                int tabCarouselOffset = (int) mTabCarousel.getY();
+                boolean shouldAnimateTabCarousel;
+
+                // Find the offset position of the first item in the list of the current page.
+                int listOffset = getOffsetOfFirstItemInList(currentPageIndex);
+
+                // If the list was able to successfully offset by the tab carousel amount, then
+                // log this as the new Y coordinate for that page, and no animation is needed.
+                if (listOffset == tabCarouselOffset) {
+                    mTabCarousel.storeYCoordinate(currentPageIndex, tabCarouselOffset);
+                    shouldAnimateTabCarousel = false;
+                } else if (listOffset == Integer.MIN_VALUE) {
+                    // If the offset of the first item in the list is unknown (i.e. the item
+                    // is no longer visible on screen) then just animate the tab carousel to the
+                    // previously logged position.
+                    shouldAnimateTabCarousel = true;
+                } else if (Math.abs(listOffset) < Math.abs(tabCarouselOffset)) {
+                    // If the list could not offset the full amount of the tab carousel offset (i.e.
+                    // the list can only be scrolled a tiny amount), then animate the carousel down
+                    // to compensate.
+                    mTabCarousel.storeYCoordinate(currentPageIndex, listOffset);
+                    shouldAnimateTabCarousel = true;
+                } else {
+                    // By default, animate back to the Y coordinate of the tab carousel the last
+                    // time the other page was selected.
+                    shouldAnimateTabCarousel = true;
+                }
+
+                if (shouldAnimateTabCarousel) {
+                    float desiredOffset = mTabCarousel.getStoredYCoordinateForTab(currentPageIndex);
+                    if (desiredOffset != tabCarouselOffset) {
+                        createTabCarouselAnimator(desiredOffset);
+                        mTabCarouselAnimator.start();
+                    }
+                }
+            }
+            mViewPagerState = state;
+        }
+
+        private void createTabCarouselAnimator(float desiredValue) {
+            mTabCarouselAnimator = ObjectAnimator.ofFloat(
+                    mTabCarousel, "y", desiredValue).setDuration(75);
+            mTabCarouselAnimator.setInterpolator(AnimationUtils.loadInterpolator(
+                    mContext, android.R.anim.accelerate_decelerate_interpolator));
+        }
+
+        private void cancelTabCarouselAnimator() {
+            if (mTabCarouselAnimator != null) {
+                mTabCarouselAnimator.cancel();
+                mTabCarouselAnimator = null;
+            }
+        }
     };
 
-    private ContactDetailTabCarousel.Listener mTabCarouselListener =
+    private void syncScrollStateBetweenLists(int currentPageIndex) {
+        // Since the user interacted with the currently visible page, we need to sync the
+        // list on the other page (i.e. if the updates page is the current page, modify the
+        // list in the details page).
+        if (currentPageIndex == TAB_INDEX_UPDATES) {
+            mDetailFragment.requestToMoveToOffset((int) mTabCarousel.getY());
+        } else {
+            mUpdatesFragment.requestToMoveToOffset((int) mTabCarousel.getY());
+        }
+    }
+
+    private int getOffsetOfFirstItemInList(int currentPageIndex) {
+        if (currentPageIndex == TAB_INDEX_DETAIL) {
+            return mDetailFragment.getFirstListItemOffset();
+        } else {
+            return mUpdatesFragment.getFirstListItemOffset();
+        }
+    }
+
+    private final ContactDetailTabCarousel.Listener mTabCarouselListener =
             new ContactDetailTabCarousel.Listener() {
 
         @Override
@@ -385,4 +485,52 @@
             mViewPager.setCurrentItem(position);
         }
     };
+
+    private final class VerticalScrollListener implements OnScrollListener {
+
+        private final int mPageIndex;
+
+        public VerticalScrollListener(int pageIndex) {
+            mPageIndex = pageIndex;
+        }
+
+        @Override
+        public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount,
+                int totalItemCount) {
+            int currentPageIndex = mViewPager.getCurrentItem();
+            // Don't move the carousel if: 1) the contact does not have social updates because then
+            // tab carousel must not be visible, 2) if the view pager is still being scrolled, or
+            // 3) if the current page being viewed is not this one.
+            if (!mContactHasUpdates || mViewPagerState != ViewPager.SCROLL_STATE_IDLE ||
+                    mPageIndex != currentPageIndex) {
+                return;
+            }
+            // If the FIRST item is not visible on the screen, then the carousel must be pinned
+            // at the top of the screen.
+            if (firstVisibleItem != 0) {
+                mTabCarousel.moveToYCoordinate(mPageIndex,
+                        -mTabCarousel.getAllowedVerticalScrollLength());
+                return;
+            }
+            View topView = view.getChildAt(firstVisibleItem);
+            if (topView == null) {
+                return;
+            }
+            int amtToScroll = Math.max((int) view.getChildAt(firstVisibleItem).getY(),
+                    -mTabCarousel.getAllowedVerticalScrollLength());
+            mTabCarousel.moveToYCoordinate(mPageIndex, amtToScroll);
+        }
+
+        @Override
+        public void onScrollStateChanged(AbsListView view, int scrollState) {
+            // Once the list has become IDLE, check if we need to sync the scroll position of
+            // the other list now. This will make swiping faster by doing the re-layout now
+            // (instead of at the start of a swipe). However, there will still be another check
+            // when we start swiping if the scroll positions are correct (to catch the edge case
+            // where the user flings and immediately starts a swipe so we never get the idle state).
+            if (scrollState == SCROLL_STATE_IDLE) {
+                syncScrollStateBetweenLists(mPageIndex);
+            }
+        }
+    }
 }
diff --git a/src/com/android/contacts/detail/ContactDetailTabCarousel.java b/src/com/android/contacts/detail/ContactDetailTabCarousel.java
index bb30f7e..8a51d81 100644
--- a/src/com/android/contacts/detail/ContactDetailTabCarousel.java
+++ b/src/com/android/contacts/detail/ContactDetailTabCarousel.java
@@ -24,7 +24,6 @@
 import android.util.AttributeSet;
 import android.view.MotionEvent;
 import android.view.View;
-import android.view.View.OnClickListener;
 import android.view.View.OnTouchListener;
 import android.widget.HorizontalScrollView;
 import android.widget.ImageView;
@@ -59,6 +58,9 @@
     private CarouselTab mAboutTab;
     private CarouselTab mUpdatesTab;
 
+    /** Last Y coordinate of the carousel when the tab at the given index was selected */
+    private final float[] mYCoordinateArray = new float[TAB_COUNT];
+
     private int mTabDisplayLabelHeight;
 
     private int mLastScrollPosition;
@@ -172,6 +174,39 @@
     }
 
     /**
+     * Restore the Y position of this view to the last manually requested value. This can be done
+     * after the parent has been re-laid out again, where this view's position could have been
+     * lost if the view laid outside its parent's bounds.
+     */
+    public void restoreYCoordinate() {
+        setY(getStoredYCoordinateForTab(mCurrentTab));
+    }
+
+    /**
+     * Request that the view move to the given Y coordinate. Also store the Y coordinate as the
+     * last requested Y coordinate for the given tabIndex.
+     */
+    public void moveToYCoordinate(int tabIndex, float y) {
+        setY(y);
+        storeYCoordinate(tabIndex, y);
+    }
+
+    /**
+     * Store this information as the last requested Y coordinate for the given tabIndex.
+     */
+    public void storeYCoordinate(int tabIndex, float y) {
+        mYCoordinateArray[tabIndex] = y;
+    }
+
+    /**
+     * Returns the stored Y coordinate of this view the last time the user was on the selected
+     * tab given by tabIndex.
+     */
+    public float getStoredYCoordinateForTab(int tabIndex) {
+        return mYCoordinateArray[tabIndex];
+    }
+
+    /**
      * Returns the number of pixels that this view can be scrolled horizontally.
      */
     public int getAllowedHorizontalScrollLength() {
diff --git a/src/com/android/contacts/detail/ContactDetailUpdatesFragment.java b/src/com/android/contacts/detail/ContactDetailUpdatesFragment.java
index 99766f2..afe159b 100644
--- a/src/com/android/contacts/detail/ContactDetailUpdatesFragment.java
+++ b/src/com/android/contacts/detail/ContactDetailUpdatesFragment.java
@@ -23,7 +23,6 @@
 import com.android.contacts.model.AccountType;
 import com.android.contacts.model.AccountTypeManager;
 import com.android.contacts.util.StreamItemEntry;
-import com.android.contacts.util.StreamItemPhotoEntry;
 
 import android.app.ListFragment;
 import android.content.ContentUris;
@@ -31,12 +30,12 @@
 import android.net.Uri;
 import android.os.Bundle;
 import android.provider.ContactsContract.StreamItems;
-import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.View.OnClickListener;
 import android.view.ViewGroup;
 import android.widget.AbsListView.OnScrollListener;
+import android.widget.ListView;
 
 public class ContactDetailUpdatesFragment extends ListFragment
         implements FragmentKeyListener, ViewOverlay {
@@ -194,4 +193,22 @@
         mVerticalScrollListener = listener;
     }
 
+    /**
+     * Returns the top coordinate of the first item in the {@link ListView}. If the first item
+     * in the {@link ListView} is not visible or there are no children in the list, then return
+     * Integer.MIN_VALUE. Note that the returned value will be <= 0 because the first item in the
+     * list cannot have a positive offset.
+     */
+    public int getFirstListItemOffset() {
+        return ContactDetailDisplayUtils.getFirstListItemOffset(getListView());
+    }
+
+    /**
+     * Tries to scroll the first item to the given offset (this can be a no-op if the list is
+     * already in the correct position).
+     * @param offset which should be <= 0
+     */
+    public void requestToMoveToOffset(int offset) {
+        ContactDetailDisplayUtils.requestToMoveToOffset(getListView(), offset);
+    }
 }
diff --git a/src/com/android/contacts/detail/ContactDetailViewPagerAdapter.java b/src/com/android/contacts/detail/ContactDetailViewPagerAdapter.java
index 40e391d..e0ed5e9 100644
--- a/src/com/android/contacts/detail/ContactDetailViewPagerAdapter.java
+++ b/src/com/android/contacts/detail/ContactDetailViewPagerAdapter.java
@@ -36,17 +36,17 @@
 
     private int mFragmentViewCount = MAX_FRAGMENT_VIEW_COUNT;
 
-    private ViewGroup mAboutFragmentView;
-    private ViewGroup mUpdatesFragmentView;
+    private View mAboutFragmentView;
+    private View mUpdatesFragmentView;
 
     public ContactDetailViewPagerAdapter() {
     }
 
-    public void setAboutFragmentView(ViewGroup view) {
+    public void setAboutFragmentView(View view) {
         mAboutFragmentView = view;
     }
 
-    public void setUpdatesFragmentView(ViewGroup view) {
+    public void setUpdatesFragmentView(View view) {
         mUpdatesFragmentView = view;
     }
 
diff --git a/src/com/android/contacts/detail/TabCarouselScrollManager.java b/src/com/android/contacts/detail/TabCarouselScrollManager.java
deleted file mode 100644
index 2415b50..0000000
--- a/src/com/android/contacts/detail/TabCarouselScrollManager.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.contacts.detail;
-
-import android.view.View;
-import android.widget.AbsListView;
-import android.widget.AbsListView.OnScrollListener;
-
-/**
- * Takes care of managing scrolling for the side-by-side views using the tab carousel.
- */
-public class TabCarouselScrollManager {
-    private final ContactDetailTabCarousel mTabCarousel;
-    private final ContactDetailFragment mAboutFragment;
-    private final ContactDetailUpdatesFragment mUpdatesFragment;
-    private final OnScrollListener mVerticalScrollListener = new OnScrollListener() {
-        @Override
-        public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount,
-                int totalItemCount) {
-            if (mTabCarousel == null) {
-                return;
-            }
-            // If the FIRST item is not visible on the screen, then the carousel must be pinned
-            // at the top of the screen.
-            if (firstVisibleItem != 0) {
-                mTabCarousel.setY(-mTabCarousel.getAllowedVerticalScrollLength());
-                return;
-            }
-            View topView = view.getChildAt(firstVisibleItem);
-            if (topView == null) {
-                return;
-            }
-            int amtToScroll = Math.max((int) view.getChildAt(firstVisibleItem).getY(),
-                    -mTabCarousel.getAllowedVerticalScrollLength());
-            mTabCarousel.setY(amtToScroll);
-        }
-
-        @Override
-        public void onScrollStateChanged(AbsListView view, int scrollState) {}
-    };
-
-    private TabCarouselScrollManager(ContactDetailTabCarousel tabCarousel,
-            ContactDetailFragment aboutFragment, ContactDetailUpdatesFragment updatesFragment) {
-        mTabCarousel = tabCarousel;
-        mAboutFragment = aboutFragment;
-        mUpdatesFragment = updatesFragment;
-    }
-
-    public void bind() {
-        mAboutFragment.setVerticalScrollListener(mVerticalScrollListener);
-        mUpdatesFragment.setVerticalScrollListener(mVerticalScrollListener);
-    }
-
-    public static void bind(ContactDetailTabCarousel tabCarousel,
-            ContactDetailFragment aboutFragment, ContactDetailUpdatesFragment updatesFragment) {
-        TabCarouselScrollManager scrollManager =
-                new TabCarouselScrollManager(tabCarousel, aboutFragment, updatesFragment);
-        scrollManager.bind();
-    }
-}
