Merge "Keep the intent resolver button bar stuck to the bottom." into rvc-dev

This commit is contained in:
TreeHugger Robot
2020-04-27 19:53:32 +00:00
committed by Android (Google) Code Review
5 changed files with 43 additions and 14 deletions

View File

@@ -437,6 +437,9 @@ public abstract class AbstractMultiProfilePagerAdapter extends PagerAdapter {
resetViewVisibilitiesForWorkProfileEmptyState(emptyStateView); resetViewVisibilitiesForWorkProfileEmptyState(emptyStateView);
emptyStateView.setVisibility(View.VISIBLE); 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); TextView title = emptyStateView.findViewById(R.id.resolver_empty_state_title);
title.setText(titleRes); title.setText(titleRes);
@@ -463,6 +466,12 @@ public abstract class AbstractMultiProfilePagerAdapter extends PagerAdapter {
activeListAdapter.markTabLoaded(); activeListAdapter.markTabLoaded();
} }
/**
* Sets up the padding of the view containing the empty state screens.
* <p>This method is meant to be overridden so that subclasses can customize the padding.
*/
protected void setupContainerPadding(View container) {}
private void showConsumerUserNoAppsAvailableEmptyState(ResolverListAdapter activeListAdapter) { private void showConsumerUserNoAppsAvailableEmptyState(ResolverListAdapter activeListAdapter) {
ProfileDescriptor descriptor = getItem( ProfileDescriptor descriptor = getItem(
userHandleToPageIndex(activeListAdapter.getUserHandle())); userHandleToPageIndex(activeListAdapter.getUserHandle()));
@@ -555,12 +564,6 @@ public abstract class AbstractMultiProfilePagerAdapter extends PagerAdapter {
} }
} }
/**
* Callback called when the button layout has been hidden.
* <p>This method is meant to be overridden by subclasses.
*/
protected void onButtonLayoutHidden() { }
public interface OnProfileSelectedListener { public interface OnProfileSelectedListener {
/** /**
* Callback for when the user changes the active tab from personal to work or vice versa. * Callback for when the user changes the active tab from personal to work or vice versa.

View File

@@ -1030,6 +1030,10 @@ public class ResolverActivity extends Activity implements
if (isAutolaunching()) { if (isAutolaunching()) {
return; return;
} }
if (isIntentPicker()) {
((ResolverMultiProfilePagerAdapter) mMultiProfilePagerAdapter)
.setUseLayoutWithDefault(useLayoutWithDefault());
}
if (mMultiProfilePagerAdapter.shouldShowEmptyStateScreen(listAdapter)) { if (mMultiProfilePagerAdapter.shouldShowEmptyStateScreen(listAdapter)) {
mMultiProfilePagerAdapter.showEmptyResolverListEmptyState(listAdapter); mMultiProfilePagerAdapter.showEmptyResolverListEmptyState(listAdapter);
} else { } else {
@@ -1782,13 +1786,14 @@ public class ResolverActivity extends Activity implements
if (buttonBarDivider != null) { if (buttonBarDivider != null) {
buttonBarDivider.setVisibility(View.INVISIBLE); buttonBarDivider.setVisibility(View.INVISIBLE);
} }
mMultiProfilePagerAdapter.onButtonLayoutHidden(); setButtonBarIgnoreOffset(/* ignoreOffset */ false);
return; return;
} }
if (buttonBarDivider != null) { if (buttonBarDivider != null) {
buttonBarDivider.setVisibility(View.VISIBLE); buttonBarDivider.setVisibility(View.VISIBLE);
} }
buttonLayout.setVisibility(View.VISIBLE); buttonLayout.setVisibility(View.VISIBLE);
setButtonBarIgnoreOffset(/* ignoreOffset */ true);
if (!useLayoutWithDefault()) { if (!useLayoutWithDefault()) {
int inset = mSystemWindowInsets != null ? mSystemWindowInsets.bottom : 0; int inset = mSystemWindowInsets != null ? mSystemWindowInsets.bottom : 0;
@@ -1802,6 +1807,21 @@ public class ResolverActivity extends Activity implements
resetAlwaysOrOnceButtonBar(); resetAlwaysOrOnceButtonBar();
} }
/**
* Updates the button bar container {@code ignoreOffset} layout param.
* <p>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() { private void resetAlwaysOrOnceButtonBar() {
// Disable both buttons initially // Disable both buttons initially
setAlwaysButtonEnabled(false, ListView.INVALID_POSITION, false); setAlwaysButtonEnabled(false, ListView.INVALID_POSITION, false);

View File

@@ -36,6 +36,7 @@ public class ResolverMultiProfilePagerAdapter extends AbstractMultiProfilePagerA
private final ResolverProfileDescriptor[] mItems; private final ResolverProfileDescriptor[] mItems;
private final boolean mShouldShowNoCrossProfileIntentsEmptyState; private final boolean mShouldShowNoCrossProfileIntentsEmptyState;
private boolean mUseLayoutWithDefault;
ResolverMultiProfilePagerAdapter(Context context, ResolverMultiProfilePagerAdapter(Context context,
ResolverListAdapter adapter, ResolverListAdapter adapter,
@@ -213,13 +214,15 @@ public class ResolverMultiProfilePagerAdapter extends AbstractMultiProfilePagerA
/* subtitleRes */ 0); /* subtitleRes */ 0);
} }
void setUseLayoutWithDefault(boolean useLayoutWithDefault) {
mUseLayoutWithDefault = useLayoutWithDefault;
}
@Override @Override
protected void onButtonLayoutHidden() { protected void setupContainerPadding(View container) {
View emptyStateContainer = getItem(getCurrentPage()).getEmptyStateView() int bottom = mUseLayoutWithDefault ? container.getPaddingBottom() : 0;
.findViewById(R.id.resolver_empty_state_container); container.setPadding(container.getPaddingLeft(), container.getPaddingTop(),
emptyStateContainer.setPadding(emptyStateContainer.getPaddingLeft(), container.getPaddingRight(), bottom);
emptyStateContainer.getPaddingTop(), emptyStateContainer.getPaddingRight(),
/* bottom */ 0);
} }
class ResolverProfileDescriptor extends ProfileDescriptor { class ResolverProfileDescriptor extends ProfileDescriptor {

View File

@@ -113,11 +113,13 @@
</LinearLayout> </LinearLayout>
</TabHost> </TabHost>
<LinearLayout <LinearLayout
android:id="@+id/button_bar_container"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_alwaysShow="true" android:layout_alwaysShow="true"
android:orientation="vertical" android:orientation="vertical"
android:background="?attr/colorBackgroundFloating"> android:background="?attr/colorBackgroundFloating"
android:layout_ignoreOffset="true">
<View <View
android:id="@+id/resolver_button_bar_divider" android:id="@+id/resolver_button_bar_divider"
android:layout_width="match_parent" android:layout_width="match_parent"

View File

@@ -3940,6 +3940,7 @@
<java-symbol type="id" name="resolver_tab_divider" /> <java-symbol type="id" name="resolver_tab_divider" />
<java-symbol type="id" name="resolver_button_bar_divider" /> <java-symbol type="id" name="resolver_button_bar_divider" />
<java-symbol type="id" name="resolver_empty_state_container" /> <java-symbol type="id" name="resolver_empty_state_container" />
<java-symbol type="id" name="button_bar_container" />
<java-symbol type="string" name="resolver_cant_share_with_work_apps" /> <java-symbol type="string" name="resolver_cant_share_with_work_apps" />
<java-symbol type="string" name="resolver_cant_share_with_work_apps_explanation" /> <java-symbol type="string" name="resolver_cant_share_with_work_apps_explanation" />
<java-symbol type="string" name="resolver_cant_share_with_personal_apps" /> <java-symbol type="string" name="resolver_cant_share_with_personal_apps" />