Loading core/java/com/android/internal/app/AbstractMultiProfilePagerAdapter.java +18 −0 Original line number Diff line number Diff line Loading @@ -151,6 +151,13 @@ public abstract class AbstractMultiProfilePagerAdapter extends PagerAdapter { mOnProfileSelectedListener.onProfileSelected(position); } } @Override public void onPageScrollStateChanged(int state) { if (mOnProfileSelectedListener != null) { mOnProfileSelectedListener.onProfilePageStateChanged(state); } } }); viewPager.setAdapter(this); viewPager.setCurrentItem(mCurrentPage); Loading Loading @@ -606,6 +613,17 @@ public abstract class AbstractMultiProfilePagerAdapter extends PagerAdapter { * {@link #PROFILE_WORK} if the work profile was selected. */ void onProfileSelected(int profileIndex); /** * Callback for when the scroll state changes. Useful for discovering when the user begins * dragging, when the pager is automatically settling to the current page, or when it is * fully stopped/idle. * @param state {@link ViewPager#SCROLL_STATE_IDLE}, {@link ViewPager#SCROLL_STATE_DRAGGING} * or {@link ViewPager#SCROLL_STATE_SETTLING} * @see ViewPager.OnPageChangeListener#onPageScrollStateChanged */ void onProfilePageStateChanged(int state); } /** Loading core/java/com/android/internal/app/ChooserActivity.java +44 −1 Original line number Diff line number Diff line Loading @@ -130,6 +130,7 @@ import com.android.internal.util.FrameworkStatsLog; import com.android.internal.widget.GridLayoutManager; import com.android.internal.widget.RecyclerView; import com.android.internal.widget.ResolverDrawerLayout; import com.android.internal.widget.ViewPager; import com.google.android.collect.Lists; Loading Loading @@ -205,6 +206,10 @@ public class ChooserActivity extends ResolverActivity implements public static final int SELECTION_TYPE_STANDARD = 3; public static final int SELECTION_TYPE_COPY = 4; private static final int SCROLL_STATUS_IDLE = 0; private static final int SCROLL_STATUS_SCROLLING_VERTICAL = 1; private static final int SCROLL_STATUS_SCROLLING_HORIZONTAL = 2; // statsd logger wrapper protected ChooserActivityLogger mChooserActivityLogger; Loading Loading @@ -294,6 +299,7 @@ public class ChooserActivity extends ResolverActivity implements protected MetricsLogger mMetricsLogger; private ContentPreviewCoordinator mPreviewCoord; private int mScrollStatus = SCROLL_STATUS_IDLE; @VisibleForTesting protected ChooserMultiProfilePagerAdapter mChooserMultiProfilePagerAdapter; Loading Loading @@ -2823,10 +2829,20 @@ public class ChooserActivity extends ResolverActivity implements final float defaultElevation = elevatedView.getElevation(); final float chooserHeaderScrollElevation = getResources().getDimensionPixelSize(R.dimen.chooser_header_scroll_elevation); mChooserMultiProfilePagerAdapter.getActiveAdapterView().addOnScrollListener( new RecyclerView.OnScrollListener() { public void onScrollStateChanged(RecyclerView view, int scrollState) { if (scrollState == RecyclerView.SCROLL_STATE_IDLE) { if (mScrollStatus == SCROLL_STATUS_SCROLLING_VERTICAL) { mScrollStatus = SCROLL_STATUS_IDLE; setHorizontalScrollingEnabled(true); } } else if (scrollState == RecyclerView.SCROLL_STATE_DRAGGING) { if (mScrollStatus == SCROLL_STATUS_IDLE) { mScrollStatus = SCROLL_STATUS_SCROLLING_VERTICAL; setHorizontalScrollingEnabled(false); } } } public void onScrolled(RecyclerView view, int dx, int dy) { Loading Loading @@ -3042,6 +3058,33 @@ public class ChooserActivity extends ResolverActivity implements return super.onApplyWindowInsets(v, insets); } private void setHorizontalScrollingEnabled(boolean enabled) { ResolverViewPager viewPager = findViewById(R.id.profile_pager); viewPager.setSwipingEnabled(enabled); } private void setVerticalScrollEnabled(boolean enabled) { ChooserGridLayoutManager layoutManager = (ChooserGridLayoutManager) mChooserMultiProfilePagerAdapter.getActiveAdapterView() .getLayoutManager(); layoutManager.setVerticalScrollEnabled(enabled); } @Override void onHorizontalSwipeStateChanged(int state) { if (state == ViewPager.SCROLL_STATE_DRAGGING) { if (mScrollStatus == SCROLL_STATUS_IDLE) { mScrollStatus = SCROLL_STATUS_SCROLLING_HORIZONTAL; setVerticalScrollEnabled(false); } } else if (state == ViewPager.SCROLL_STATE_IDLE) { if (mScrollStatus == SCROLL_STATUS_SCROLLING_VERTICAL) { mScrollStatus = SCROLL_STATUS_IDLE; setVerticalScrollEnabled(true); } } } /** * Adapter for all types of items and targets in ShareSheet. * Note that ranked sections like Direct Share - while appearing grid-like - are handled on the Loading core/java/com/android/internal/app/ChooserGridLayoutManager.java +11 −0 Original line number Diff line number Diff line Loading @@ -28,6 +28,8 @@ import com.android.internal.widget.RecyclerView; */ public class ChooserGridLayoutManager extends GridLayoutManager { private boolean mVerticalScrollEnabled = true; /** * Constructor used when layout manager is set in XML by RecyclerView attribute * "layoutManager". If spanCount is not specified in the XML, it defaults to a Loading Loading @@ -67,4 +69,13 @@ public class ChooserGridLayoutManager extends GridLayoutManager { // Do not count the footer view in the official count return super.getRowCountForAccessibility(recycler, state) - 1; } void setVerticalScrollEnabled(boolean verticalScrollEnabled) { mVerticalScrollEnabled = verticalScrollEnabled; } @Override public boolean canScrollVertically() { return mVerticalScrollEnabled && super.canScrollVertically(); } } core/java/com/android/internal/app/ResolverActivity.java +14 −4 Original line number Diff line number Diff line Loading @@ -1653,10 +1653,18 @@ public class ResolverActivity extends Activity implements viewPager.setVisibility(View.VISIBLE); tabHost.setCurrentTab(mMultiProfilePagerAdapter.getCurrentPage()); mMultiProfilePagerAdapter.setOnProfileSelectedListener( index -> { new AbstractMultiProfilePagerAdapter.OnProfileSelectedListener() { @Override public void onProfileSelected(int index) { tabHost.setCurrentTab(index); resetButtonBar(); resetCheckedItem(); } @Override public void onProfilePageStateChanged(int state) { onHorizontalSwipeStateChanged(state); } }); mMultiProfilePagerAdapter.setOnSwitchOnWorkSelectedListener( () -> { Loading @@ -1668,6 +1676,8 @@ public class ResolverActivity extends Activity implements findViewById(R.id.resolver_tab_divider).setVisibility(View.VISIBLE); } void onHorizontalSwipeStateChanged(int state) {} private void maybeHideDivider() { if (!isIntentPicker()) { return; Loading core/java/com/android/internal/app/ResolverViewPager.java +12 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.internal.app; import android.content.Context; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; import com.android.internal.widget.ViewPager; Loading @@ -30,6 +31,8 @@ import com.android.internal.widget.ViewPager; */ public class ResolverViewPager extends ViewPager { private boolean mSwipingEnabled = true; public ResolverViewPager(Context context) { super(context); } Loading Loading @@ -70,4 +73,13 @@ public class ResolverViewPager extends ViewPager { heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY); super.onMeasure(widthMeasureSpec, heightMeasureSpec); } void setSwipingEnabled(boolean swipingEnabled) { mSwipingEnabled = swipingEnabled; } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { return mSwipingEnabled && super.onInterceptTouchEvent(ev); } } Loading
core/java/com/android/internal/app/AbstractMultiProfilePagerAdapter.java +18 −0 Original line number Diff line number Diff line Loading @@ -151,6 +151,13 @@ public abstract class AbstractMultiProfilePagerAdapter extends PagerAdapter { mOnProfileSelectedListener.onProfileSelected(position); } } @Override public void onPageScrollStateChanged(int state) { if (mOnProfileSelectedListener != null) { mOnProfileSelectedListener.onProfilePageStateChanged(state); } } }); viewPager.setAdapter(this); viewPager.setCurrentItem(mCurrentPage); Loading Loading @@ -606,6 +613,17 @@ public abstract class AbstractMultiProfilePagerAdapter extends PagerAdapter { * {@link #PROFILE_WORK} if the work profile was selected. */ void onProfileSelected(int profileIndex); /** * Callback for when the scroll state changes. Useful for discovering when the user begins * dragging, when the pager is automatically settling to the current page, or when it is * fully stopped/idle. * @param state {@link ViewPager#SCROLL_STATE_IDLE}, {@link ViewPager#SCROLL_STATE_DRAGGING} * or {@link ViewPager#SCROLL_STATE_SETTLING} * @see ViewPager.OnPageChangeListener#onPageScrollStateChanged */ void onProfilePageStateChanged(int state); } /** Loading
core/java/com/android/internal/app/ChooserActivity.java +44 −1 Original line number Diff line number Diff line Loading @@ -130,6 +130,7 @@ import com.android.internal.util.FrameworkStatsLog; import com.android.internal.widget.GridLayoutManager; import com.android.internal.widget.RecyclerView; import com.android.internal.widget.ResolverDrawerLayout; import com.android.internal.widget.ViewPager; import com.google.android.collect.Lists; Loading Loading @@ -205,6 +206,10 @@ public class ChooserActivity extends ResolverActivity implements public static final int SELECTION_TYPE_STANDARD = 3; public static final int SELECTION_TYPE_COPY = 4; private static final int SCROLL_STATUS_IDLE = 0; private static final int SCROLL_STATUS_SCROLLING_VERTICAL = 1; private static final int SCROLL_STATUS_SCROLLING_HORIZONTAL = 2; // statsd logger wrapper protected ChooserActivityLogger mChooserActivityLogger; Loading Loading @@ -294,6 +299,7 @@ public class ChooserActivity extends ResolverActivity implements protected MetricsLogger mMetricsLogger; private ContentPreviewCoordinator mPreviewCoord; private int mScrollStatus = SCROLL_STATUS_IDLE; @VisibleForTesting protected ChooserMultiProfilePagerAdapter mChooserMultiProfilePagerAdapter; Loading Loading @@ -2823,10 +2829,20 @@ public class ChooserActivity extends ResolverActivity implements final float defaultElevation = elevatedView.getElevation(); final float chooserHeaderScrollElevation = getResources().getDimensionPixelSize(R.dimen.chooser_header_scroll_elevation); mChooserMultiProfilePagerAdapter.getActiveAdapterView().addOnScrollListener( new RecyclerView.OnScrollListener() { public void onScrollStateChanged(RecyclerView view, int scrollState) { if (scrollState == RecyclerView.SCROLL_STATE_IDLE) { if (mScrollStatus == SCROLL_STATUS_SCROLLING_VERTICAL) { mScrollStatus = SCROLL_STATUS_IDLE; setHorizontalScrollingEnabled(true); } } else if (scrollState == RecyclerView.SCROLL_STATE_DRAGGING) { if (mScrollStatus == SCROLL_STATUS_IDLE) { mScrollStatus = SCROLL_STATUS_SCROLLING_VERTICAL; setHorizontalScrollingEnabled(false); } } } public void onScrolled(RecyclerView view, int dx, int dy) { Loading Loading @@ -3042,6 +3058,33 @@ public class ChooserActivity extends ResolverActivity implements return super.onApplyWindowInsets(v, insets); } private void setHorizontalScrollingEnabled(boolean enabled) { ResolverViewPager viewPager = findViewById(R.id.profile_pager); viewPager.setSwipingEnabled(enabled); } private void setVerticalScrollEnabled(boolean enabled) { ChooserGridLayoutManager layoutManager = (ChooserGridLayoutManager) mChooserMultiProfilePagerAdapter.getActiveAdapterView() .getLayoutManager(); layoutManager.setVerticalScrollEnabled(enabled); } @Override void onHorizontalSwipeStateChanged(int state) { if (state == ViewPager.SCROLL_STATE_DRAGGING) { if (mScrollStatus == SCROLL_STATUS_IDLE) { mScrollStatus = SCROLL_STATUS_SCROLLING_HORIZONTAL; setVerticalScrollEnabled(false); } } else if (state == ViewPager.SCROLL_STATE_IDLE) { if (mScrollStatus == SCROLL_STATUS_SCROLLING_VERTICAL) { mScrollStatus = SCROLL_STATUS_IDLE; setVerticalScrollEnabled(true); } } } /** * Adapter for all types of items and targets in ShareSheet. * Note that ranked sections like Direct Share - while appearing grid-like - are handled on the Loading
core/java/com/android/internal/app/ChooserGridLayoutManager.java +11 −0 Original line number Diff line number Diff line Loading @@ -28,6 +28,8 @@ import com.android.internal.widget.RecyclerView; */ public class ChooserGridLayoutManager extends GridLayoutManager { private boolean mVerticalScrollEnabled = true; /** * Constructor used when layout manager is set in XML by RecyclerView attribute * "layoutManager". If spanCount is not specified in the XML, it defaults to a Loading Loading @@ -67,4 +69,13 @@ public class ChooserGridLayoutManager extends GridLayoutManager { // Do not count the footer view in the official count return super.getRowCountForAccessibility(recycler, state) - 1; } void setVerticalScrollEnabled(boolean verticalScrollEnabled) { mVerticalScrollEnabled = verticalScrollEnabled; } @Override public boolean canScrollVertically() { return mVerticalScrollEnabled && super.canScrollVertically(); } }
core/java/com/android/internal/app/ResolverActivity.java +14 −4 Original line number Diff line number Diff line Loading @@ -1653,10 +1653,18 @@ public class ResolverActivity extends Activity implements viewPager.setVisibility(View.VISIBLE); tabHost.setCurrentTab(mMultiProfilePagerAdapter.getCurrentPage()); mMultiProfilePagerAdapter.setOnProfileSelectedListener( index -> { new AbstractMultiProfilePagerAdapter.OnProfileSelectedListener() { @Override public void onProfileSelected(int index) { tabHost.setCurrentTab(index); resetButtonBar(); resetCheckedItem(); } @Override public void onProfilePageStateChanged(int state) { onHorizontalSwipeStateChanged(state); } }); mMultiProfilePagerAdapter.setOnSwitchOnWorkSelectedListener( () -> { Loading @@ -1668,6 +1676,8 @@ public class ResolverActivity extends Activity implements findViewById(R.id.resolver_tab_divider).setVisibility(View.VISIBLE); } void onHorizontalSwipeStateChanged(int state) {} private void maybeHideDivider() { if (!isIntentPicker()) { return; Loading
core/java/com/android/internal/app/ResolverViewPager.java +12 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.internal.app; import android.content.Context; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; import com.android.internal.widget.ViewPager; Loading @@ -30,6 +31,8 @@ import com.android.internal.widget.ViewPager; */ public class ResolverViewPager extends ViewPager { private boolean mSwipingEnabled = true; public ResolverViewPager(Context context) { super(context); } Loading Loading @@ -70,4 +73,13 @@ public class ResolverViewPager extends ViewPager { heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY); super.onMeasure(widthMeasureSpec, heightMeasureSpec); } void setSwipingEnabled(boolean swipingEnabled) { mSwipingEnabled = swipingEnabled; } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { return mSwipingEnabled && super.onInterceptTouchEvent(ev); } }