Merge "Fix fragment carousel going to wrong scroll position after rotation"
diff --git a/res/layout/contact_detail_fragment_carousel.xml b/res/layout/contact_detail_fragment_carousel.xml
index 4f65549..2572cc4 100644
--- a/res/layout/contact_detail_fragment_carousel.xml
+++ b/res/layout/contact_detail_fragment_carousel.xml
@@ -30,7 +30,9 @@
android:id="@+id/about_fragment_container"
android:layout_width="0dip"
android:layout_height="match_parent"
- android:layout_weight="1" />
+ android:layout_weight="1"
+ android:focusable="true"
+ android:focusableInTouchMode="true" />
<!--
Container for the "Updates" page fragment on the contact card for a contact
@@ -42,6 +44,8 @@
android:layout_width="0dip"
android:layout_height="match_parent"
android:layout_weight="1"
- android:visibility="gone" />
+ android:visibility="gone"
+ android:focusable="true"
+ android:focusableInTouchMode="true" />
</LinearLayout>
\ No newline at end of file
diff --git a/src/com/android/contacts/detail/ContactDetailFragmentCarousel.java b/src/com/android/contacts/detail/ContactDetailFragmentCarousel.java
index b01316b..756b1c7 100644
--- a/src/com/android/contacts/detail/ContactDetailFragmentCarousel.java
+++ b/src/com/android/contacts/detail/ContactDetailFragmentCarousel.java
@@ -19,7 +19,6 @@
import com.android.contacts.R;
import android.content.Context;
-import android.os.Handler;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.MotionEvent;
@@ -88,8 +87,6 @@
private View mDetailFragmentView;
private View mUpdatesFragmentView;
- private boolean mScrollToCurrentPage = false;
-
public ContactDetailFragmentCarousel(Context context) {
this(context, null);
}
@@ -144,31 +141,9 @@
resolveSize(screenHeight, heightMeasureSpec));
}
- @Override
- protected void onLayout(boolean changed, int l, int t, int r, int b) {
- super.onLayout(changed, l, t, r, b);
- if (mScrollToCurrentPage) {
- mScrollToCurrentPage = false;
- // Use scrollTo() instead of smoothScrollTo() to prevent a visible flicker to the user
- scrollTo(mCurrentPage == ABOUT_PAGE ? 0 : mAllowedHorizontalScrollLength, 0);
- updateTouchInterceptors();
- }
- }
-
/**
- * Set the current page that should be restored when the view is first laid out.
- */
- public void restoreCurrentPage(int pageIndex) {
- setCurrentPage(pageIndex);
- // It is only possible to scroll the view after onMeasure() has been called (where the
- // allowed horizontal scroll length is determined). Hence, set a flag that will be read
- // in onLayout() after the children and this view have finished being laid out.
- mScrollToCurrentPage = true;
- }
-
- /**
- * Set the current page. This auto-scrolls the carousel to the current page and dims out
- * the non-selected page.
+ * Set the current page. This dims out the non-selected page but doesn't do any scrolling of
+ * the carousel.
*/
public void setCurrentPage(int pageIndex) {
mCurrentPage = pageIndex;
@@ -176,7 +151,6 @@
if (mAboutFragment != null && mUpdatesFragment != null) {
mAboutFragment.setAlphaLayerValue(mCurrentPage == ABOUT_PAGE ? 0 : MAX_ALPHA);
mUpdatesFragment.setAlphaLayerValue(mCurrentPage == UPDATES_PAGE ? 0 : MAX_ALPHA);
- snapToEdge();
}
}
@@ -205,9 +179,12 @@
mEnableSwipe = enable;
if (mUpdatesFragmentView != null) {
mUpdatesFragmentView.setVisibility(enable ? View.VISIBLE : View.GONE);
- mScrollToCurrentPage = true;
- requestLayout();
- invalidate();
+ if (mCurrentPage == ABOUT_PAGE) {
+ mDetailFragmentView.requestFocus();
+ } else {
+ mUpdatesFragmentView.requestFocus();
+ }
+ updateTouchInterceptors();
}
}
}
diff --git a/src/com/android/contacts/detail/ContactDetailLayoutController.java b/src/com/android/contacts/detail/ContactDetailLayoutController.java
index 7a7f400..4b31a6e 100644
--- a/src/com/android/contacts/detail/ContactDetailLayoutController.java
+++ b/src/com/android/contacts/detail/ContactDetailLayoutController.java
@@ -215,7 +215,7 @@
mFragmentCarousel.setFragmentViews(mDetailFragmentView, mUpdatesFragmentView);
mFragmentCarousel.setFragments(mDetailFragment, mUpdatesFragment);
- mFragmentCarousel.restoreCurrentPage(currentPageIndex);
+ mFragmentCarousel.setCurrentPage(currentPageIndex);
break;
}
}