From 27b997491ef04147513b72c3b2ef88daf650ec97 Mon Sep 17 00:00:00 2001 From: arangelov Date: Thu, 23 Apr 2020 18:59:09 +0100 Subject: [PATCH] Keep the intent resolver button bar stuck to the bottom. Fixes: 154939990 Test: atest ChooserActivityTest Test: atest ResolverActivityTest Test: manual Change-Id: Ia450701650dfca55488ed7bf1f9bebcae5b72c2c --- .../app/AbstractMultiProfilePagerAdapter.java | 15 ++++++++----- .../internal/app/ResolverActivity.java | 22 ++++++++++++++++++- .../app/ResolverMultiProfilePagerAdapter.java | 15 ++++++++----- core/res/res/layout/resolver_list.xml | 4 +++- core/res/res/values/symbols.xml | 1 + 5 files changed, 43 insertions(+), 14 deletions(-) diff --git a/core/java/com/android/internal/app/AbstractMultiProfilePagerAdapter.java b/core/java/com/android/internal/app/AbstractMultiProfilePagerAdapter.java index b58dbddab44f0..bcb32fb60f477 100644 --- a/core/java/com/android/internal/app/AbstractMultiProfilePagerAdapter.java +++ b/core/java/com/android/internal/app/AbstractMultiProfilePagerAdapter.java @@ -437,6 +437,9 @@ public abstract class AbstractMultiProfilePagerAdapter extends PagerAdapter { resetViewVisibilitiesForWorkProfileEmptyState(emptyStateView); emptyStateView.setVisibility(View.VISIBLE); + View container = emptyStateView.findViewById(R.id.resolver_empty_state_container); + setupContainerPadding(container); + TextView title = emptyStateView.findViewById(R.id.resolver_empty_state_title); title.setText(titleRes); @@ -463,6 +466,12 @@ public abstract class AbstractMultiProfilePagerAdapter extends PagerAdapter { activeListAdapter.markTabLoaded(); } + /** + * Sets up the padding of the view containing the empty state screens. + *

This method is meant to be overridden so that subclasses can customize the padding. + */ + protected void setupContainerPadding(View container) {} + private void showConsumerUserNoAppsAvailableEmptyState(ResolverListAdapter activeListAdapter) { ProfileDescriptor descriptor = getItem( userHandleToPageIndex(activeListAdapter.getUserHandle())); @@ -555,12 +564,6 @@ public abstract class AbstractMultiProfilePagerAdapter extends PagerAdapter { } } - /** - * Callback called when the button layout has been hidden. - *

This method is meant to be overridden by subclasses. - */ - protected void onButtonLayoutHidden() { } - public interface OnProfileSelectedListener { /** * Callback for when the user changes the active tab from personal to work or vice versa. diff --git a/core/java/com/android/internal/app/ResolverActivity.java b/core/java/com/android/internal/app/ResolverActivity.java index 84c833ea5ffe6..4ba6ce4e04ce4 100644 --- a/core/java/com/android/internal/app/ResolverActivity.java +++ b/core/java/com/android/internal/app/ResolverActivity.java @@ -1030,6 +1030,10 @@ public class ResolverActivity extends Activity implements if (isAutolaunching()) { return; } + if (isIntentPicker()) { + ((ResolverMultiProfilePagerAdapter) mMultiProfilePagerAdapter) + .setUseLayoutWithDefault(useLayoutWithDefault()); + } if (mMultiProfilePagerAdapter.shouldShowEmptyStateScreen(listAdapter)) { mMultiProfilePagerAdapter.showEmptyResolverListEmptyState(listAdapter); } else { @@ -1782,13 +1786,14 @@ public class ResolverActivity extends Activity implements if (buttonBarDivider != null) { buttonBarDivider.setVisibility(View.INVISIBLE); } - mMultiProfilePagerAdapter.onButtonLayoutHidden(); + setButtonBarIgnoreOffset(/* ignoreOffset */ false); return; } if (buttonBarDivider != null) { buttonBarDivider.setVisibility(View.VISIBLE); } buttonLayout.setVisibility(View.VISIBLE); + setButtonBarIgnoreOffset(/* ignoreOffset */ true); if (!useLayoutWithDefault()) { int inset = mSystemWindowInsets != null ? mSystemWindowInsets.bottom : 0; @@ -1802,6 +1807,21 @@ public class ResolverActivity extends Activity implements resetAlwaysOrOnceButtonBar(); } + /** + * Updates the button bar container {@code ignoreOffset} layout param. + *

Setting this to {@code true} means that the button bar will be glued to the bottom of + * the screen. + */ + private void setButtonBarIgnoreOffset(boolean ignoreOffset) { + View buttonBarContainer = findViewById(R.id.button_bar_container); + if (buttonBarContainer != null) { + ResolverDrawerLayout.LayoutParams layoutParams = + (ResolverDrawerLayout.LayoutParams) buttonBarContainer.getLayoutParams(); + layoutParams.ignoreOffset = ignoreOffset; + buttonBarContainer.setLayoutParams(layoutParams); + } + } + private void resetAlwaysOrOnceButtonBar() { // Disable both buttons initially setAlwaysButtonEnabled(false, ListView.INVALID_POSITION, false); diff --git a/core/java/com/android/internal/app/ResolverMultiProfilePagerAdapter.java b/core/java/com/android/internal/app/ResolverMultiProfilePagerAdapter.java index 5e2470ed96511..b4f9f08e37716 100644 --- a/core/java/com/android/internal/app/ResolverMultiProfilePagerAdapter.java +++ b/core/java/com/android/internal/app/ResolverMultiProfilePagerAdapter.java @@ -36,6 +36,7 @@ public class ResolverMultiProfilePagerAdapter extends AbstractMultiProfilePagerA private final ResolverProfileDescriptor[] mItems; private final boolean mShouldShowNoCrossProfileIntentsEmptyState; + private boolean mUseLayoutWithDefault; ResolverMultiProfilePagerAdapter(Context context, ResolverListAdapter adapter, @@ -213,13 +214,15 @@ public class ResolverMultiProfilePagerAdapter extends AbstractMultiProfilePagerA /* subtitleRes */ 0); } + void setUseLayoutWithDefault(boolean useLayoutWithDefault) { + mUseLayoutWithDefault = useLayoutWithDefault; + } + @Override - protected void onButtonLayoutHidden() { - View emptyStateContainer = getItem(getCurrentPage()).getEmptyStateView() - .findViewById(R.id.resolver_empty_state_container); - emptyStateContainer.setPadding(emptyStateContainer.getPaddingLeft(), - emptyStateContainer.getPaddingTop(), emptyStateContainer.getPaddingRight(), - /* bottom */ 0); + protected void setupContainerPadding(View container) { + int bottom = mUseLayoutWithDefault ? container.getPaddingBottom() : 0; + container.setPadding(container.getPaddingLeft(), container.getPaddingTop(), + container.getPaddingRight(), bottom); } class ResolverProfileDescriptor extends ProfileDescriptor { diff --git a/core/res/res/layout/resolver_list.xml b/core/res/res/layout/resolver_list.xml index 76ecefc67c22c..4d0837f495dfb 100644 --- a/core/res/res/layout/resolver_list.xml +++ b/core/res/res/layout/resolver_list.xml @@ -113,11 +113,13 @@ + android:background="?attr/colorBackgroundFloating" + android:layout_ignoreOffset="true"> +