From 981e41417afbfaab3ecc7abe472a5e8524a4a990 Mon Sep 17 00:00:00 2001 From: arangelov Date: Wed, 27 May 2020 15:59:18 +0100 Subject: [PATCH] Reduce paddings in landscape mode On orientation change, the paddings are not automatically updated. We re-set them manually, because requestLayout() or invalidate() did not solve this. Also properly updates the empty state icon visibility (as in some cases it was still showing in landscape on config change). Test: manual Test: atest ResolverActivityTest Test: atest ChooserActivityTest Fixes: 149817494 Change-Id: I2d6ff1078ee834fa50aa47ede7641f6359c267de --- .../app/AbstractMultiProfilePagerAdapter.java | 39 +++++++++++++++---- .../internal/app/ResolverActivity.java | 19 +++++++++ .../app/ResolverMultiProfilePagerAdapter.java | 19 +++++++++ core/res/res/layout/resolver_empty_states.xml | 4 +- core/res/res/layout/resolver_list.xml | 3 +- core/res/res/values-h480dp/dimens.xml | 23 +++++++++++ core/res/res/values/dimens.xml | 5 ++- core/res/res/values/symbols.xml | 4 ++ 8 files changed, 105 insertions(+), 11 deletions(-) create mode 100644 core/res/res/values-h480dp/dimens.xml diff --git a/core/java/com/android/internal/app/AbstractMultiProfilePagerAdapter.java b/core/java/com/android/internal/app/AbstractMultiProfilePagerAdapter.java index c8f5be43c04e3..493865ac563f9 100644 --- a/core/java/com/android/internal/app/AbstractMultiProfilePagerAdapter.java +++ b/core/java/com/android/internal/app/AbstractMultiProfilePagerAdapter.java @@ -340,6 +340,30 @@ public abstract class AbstractMultiProfilePagerAdapter extends PagerAdapter { protected abstract void showNoWorkToPersonalIntentsEmptyState( ResolverListAdapter activeListAdapter); + /** + * Updates padding and visibilities as a result of an orientation change. + *

They are not updated automatically, because the view is cached when created. + *

When overridden, make sure to always call the super method. + */ + void updateAfterConfigChange() { + for (int i = 0; i < getItemCount(); i++) { + ViewGroup emptyStateView = getItem(i).getEmptyStateView(); + ImageView icon = emptyStateView.findViewById(R.id.resolver_empty_state_icon); + updateIconVisibility(icon, emptyStateView); + } + } + + private void updateIconVisibility(ImageView icon, ViewGroup emptyStateView) { + if (isSpinnerShowing(emptyStateView)) { + icon.setVisibility(View.INVISIBLE); + } else if (mWorkProfileUserHandle != null + && !getContext().getResources().getBoolean(R.bool.resolver_landscape_phone)) { + icon.setVisibility(View.VISIBLE); + } else { + icon.setVisibility(View.GONE); + } + } + /** * The empty state screens are shown according to their priority: *

    @@ -441,7 +465,7 @@ public abstract class AbstractMultiProfilePagerAdapter extends PagerAdapter { ProfileDescriptor descriptor = getItem( userHandleToPageIndex(activeListAdapter.getUserHandle())); descriptor.rootView.findViewById(R.id.resolver_list).setVisibility(View.GONE); - View emptyStateView = descriptor.getEmptyStateView(); + ViewGroup emptyStateView = descriptor.getEmptyStateView(); resetViewVisibilitiesForWorkProfileEmptyState(emptyStateView); emptyStateView.setVisibility(View.VISIBLE); @@ -464,12 +488,8 @@ public abstract class AbstractMultiProfilePagerAdapter extends PagerAdapter { button.setOnClickListener(buttonOnClick); ImageView icon = emptyStateView.findViewById(R.id.resolver_empty_state_icon); - if (!getContext().getResources().getBoolean(R.bool.resolver_landscape_phone)) { - icon.setVisibility(View.VISIBLE); - icon.setImageResource(iconRes); - } else { - icon.setVisibility(View.GONE); - } + icon.setImageResource(iconRes); + updateIconVisibility(icon, emptyStateView); activeListAdapter.markTabLoaded(); } @@ -491,6 +511,11 @@ public abstract class AbstractMultiProfilePagerAdapter extends PagerAdapter { activeListAdapter.markTabLoaded(); } + private boolean isSpinnerShowing(View emptyStateView) { + return emptyStateView.findViewById(R.id.resolver_empty_state_progress).getVisibility() + == View.VISIBLE; + } + private void showSpinner(View emptyStateView) { emptyStateView.findViewById(R.id.resolver_empty_state_icon).setVisibility(View.INVISIBLE); emptyStateView.findViewById(R.id.resolver_empty_state_title).setVisibility(View.INVISIBLE); diff --git a/core/java/com/android/internal/app/ResolverActivity.java b/core/java/com/android/internal/app/ResolverActivity.java index ff8fd50f308cd..b82f0dfcbe12d 100644 --- a/core/java/com/android/internal/app/ResolverActivity.java +++ b/core/java/com/android/internal/app/ResolverActivity.java @@ -642,6 +642,9 @@ public class ResolverActivity extends Activity implements public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); mMultiProfilePagerAdapter.getActiveListAdapter().handlePackagesChanged(); + if (isIntentPicker() && shouldShowTabs() && !useLayoutWithDefault()) { + updateIntentPickerPaddings(); + } if (mSystemWindowInsets != null) { mResolverDrawerLayout.setPadding(mSystemWindowInsets.left, mSystemWindowInsets.top, @@ -649,6 +652,22 @@ public class ResolverActivity extends Activity implements } } + private void updateIntentPickerPaddings() { + View titleCont = findViewById(R.id.title_container); + titleCont.setPadding( + titleCont.getPaddingLeft(), + titleCont.getPaddingTop(), + titleCont.getPaddingRight(), + getResources().getDimensionPixelSize(R.dimen.resolver_title_padding_bottom)); + View buttonBar = findViewById(R.id.button_bar); + buttonBar.setPadding( + buttonBar.getPaddingLeft(), + getResources().getDimensionPixelSize(R.dimen.resolver_button_bar_spacing), + buttonBar.getPaddingRight(), + getResources().getDimensionPixelSize(R.dimen.resolver_button_bar_spacing)); + mMultiProfilePagerAdapter.updateAfterConfigChange(); + } + @Override // ResolverListCommunicator public void sendVoiceChoicesIfNeeded() { if (!isVoiceInteraction()) { diff --git a/core/java/com/android/internal/app/ResolverMultiProfilePagerAdapter.java b/core/java/com/android/internal/app/ResolverMultiProfilePagerAdapter.java index b4f9f08e37716..2464fc737a1fc 100644 --- a/core/java/com/android/internal/app/ResolverMultiProfilePagerAdapter.java +++ b/core/java/com/android/internal/app/ResolverMultiProfilePagerAdapter.java @@ -18,6 +18,7 @@ package com.android.internal.app; import android.annotation.Nullable; import android.content.Context; +import android.content.res.Resources; import android.os.UserHandle; import android.view.LayoutInflater; import android.view.View; @@ -65,6 +66,24 @@ public class ResolverMultiProfilePagerAdapter extends AbstractMultiProfilePagerA mShouldShowNoCrossProfileIntentsEmptyState = shouldShowNoCrossProfileIntentsEmptyState; } + @Override + void updateAfterConfigChange() { + super.updateAfterConfigChange(); + for (ResolverProfileDescriptor descriptor : mItems) { + View emptyStateCont = + descriptor.rootView.findViewById(R.id.resolver_empty_state_container); + Resources resources = getContext().getResources(); + emptyStateCont.setPadding( + emptyStateCont.getPaddingLeft(), + resources.getDimensionPixelSize( + R.dimen.resolver_empty_state_container_padding_top), + emptyStateCont.getPaddingRight(), + resources.getDimensionPixelSize( + R.dimen.resolver_empty_state_container_padding_bottom)); + + } + } + private ResolverProfileDescriptor createProfileDescriptor( ResolverListAdapter adapter) { final LayoutInflater inflater = LayoutInflater.from(getContext()); diff --git a/core/res/res/layout/resolver_empty_states.xml b/core/res/res/layout/resolver_empty_states.xml index 196a0e8654051..bdcfeb21598a1 100644 --- a/core/res/res/layout/resolver_empty_states.xml +++ b/core/res/res/layout/resolver_empty_states.xml @@ -27,8 +27,8 @@ android:id="@+id/resolver_empty_state_container" android:layout_width="match_parent" android:layout_height="wrap_content" - android:paddingTop="48dp" - android:paddingBottom="48dp" + android:paddingTop="@dimen/resolver_empty_state_container_padding_top" + android:paddingBottom="@dimen/resolver_empty_state_container_padding_bottom" android:gravity="center_horizontal"> + + + + 48dp + 48dp + @dimen/resolver_edge_margin + 8dp + \ No newline at end of file diff --git a/core/res/res/values/dimens.xml b/core/res/res/values/dimens.xml index c7ad5da7d1c7a..ad3d20ee5f24e 100644 --- a/core/res/res/values/dimens.xml +++ b/core/res/res/values/dimens.xml @@ -813,7 +813,7 @@ 56dp 22dp 32dp - 8dp + 0dp 18dp 16dp 18dp @@ -826,6 +826,9 @@ 144dp 300dp 14sp + 0dp + 8dp + 8dp 18dp diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index 878b8db3f1e8b..f30d482e06b2a 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -3961,6 +3961,7 @@ + @@ -3984,6 +3985,9 @@ + + +