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:
committed by
Antoan Angelov
parent
d220529254
commit
981e41417a
@@ -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);
|
||||
|
||||
@@ -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()) {
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
23
core/res/res/values-h480dp/dimens.xml
Normal file
23
core/res/res/values-h480dp/dimens.xml
Normal 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>
|
||||
@@ -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>
|
||||
|
||||
|
||||
@@ -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" />
|
||||
|
||||
Reference in New Issue
Block a user