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
This commit is contained in:
arangelov
2020-05-27 15:59:18 +01:00
committed by Antoan Angelov
parent d220529254
commit 981e41417a
8 changed files with 105 additions and 11 deletions

View File

@@ -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.
* <p>They are not updated automatically, because the view is cached when created.
* <p>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:
* <ol>
@@ -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);

View File

@@ -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()) {

View File

@@ -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());

View File

@@ -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">
<ImageView
android:id="@+id/resolver_empty_state_icon"

View File

@@ -26,6 +26,7 @@
android:id="@id/contentPanel">
<RelativeLayout
android:id="@+id/title_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alwaysShow="true"
@@ -33,7 +34,7 @@
android:paddingTop="@dimen/resolver_small_margin"
android:paddingStart="@dimen/resolver_edge_margin"
android:paddingEnd="@dimen/resolver_edge_margin"
android:paddingBottom="@dimen/resolver_edge_margin"
android:paddingBottom="@dimen/resolver_title_padding_bottom"
android:background="@drawable/bottomsheet_background">
<TextView

View File

@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8" ?>
<!--
~ Copyright (C) 2020 The Android Open Source Project
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
<resources>
<dimen name="resolver_empty_state_container_padding_top">48dp</dimen>
<dimen name="resolver_empty_state_container_padding_bottom">48dp</dimen>
<dimen name="resolver_title_padding_bottom">@dimen/resolver_edge_margin</dimen>
<dimen name="resolver_button_bar_spacing">8dp</dimen>
</resources>

View File

@@ -813,7 +813,7 @@
<dimen name="chooser_icon_size">56dp</dimen>
<dimen name="chooser_badge_size">22dp</dimen>
<dimen name="resolver_icon_size">32dp</dimen>
<dimen name="resolver_button_bar_spacing">8dp</dimen>
<dimen name="resolver_button_bar_spacing">0dp</dimen>
<dimen name="resolver_badge_size">18dp</dimen>
<dimen name="resolver_icon_margin">16dp</dimen>
<dimen name="resolver_small_margin">18dp</dimen>
@@ -826,6 +826,9 @@
<dimen name="resolver_max_collapsed_height_with_default">144dp</dimen>
<dimen name="resolver_max_collapsed_height_with_default_with_tabs">300dp</dimen>
<dimen name="resolver_tab_text_size">14sp</dimen>
<dimen name="resolver_title_padding_bottom">0dp</dimen>
<dimen name="resolver_empty_state_container_padding_top">8dp</dimen>
<dimen name="resolver_empty_state_container_padding_bottom">8dp</dimen>
<dimen name="chooser_action_button_icon_size">18dp</dimen>

View File

@@ -3961,6 +3961,7 @@
<java-symbol type="id" name="resolver_button_bar_divider" />
<java-symbol type="id" name="resolver_empty_state_container" />
<java-symbol type="id" name="button_bar_container" />
<java-symbol type="id" name="title_container" />
<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_personal_apps" />
@@ -3984,6 +3985,9 @@
<java-symbol type="dimen" name="resolver_max_collapsed_height_with_default_with_tabs" />
<java-symbol type="bool" name="resolver_landscape_phone" />
<java-symbol type="dimen" name="resolver_tab_text_size" />
<java-symbol type="dimen" name="resolver_title_padding_bottom" />
<java-symbol type="dimen" name="resolver_empty_state_container_padding_top" />
<java-symbol type="dimen" name="resolver_empty_state_container_padding_bottom" />
<!-- Toast message for background started foreground service while-in-use permission restriction feature -->
<java-symbol type="string" name="allow_while_in_use_permission_in_fgs" />