Empty state UI tweaks

- Remove icons from empty state UI
- Increase padding and font sizes
- Remove config change handling as icons no longer need to be toggled
  and padding wasn't changing.
- Remove some other now-unused methods

Bug: 195093229
Test: atest ResolverActivityTest
Test: atest ChooserActivityTest
Test: Visual inspection of UI
Change-Id: Iaa9f7c4e4734e07e76bd9280eb1154c0c67585eb
This commit is contained in:
Matt Casey
2022-04-15 18:51:16 +00:00
parent 4682c6576c
commit 85c88fea3c
10 changed files with 11 additions and 116 deletions

View File

@@ -15,10 +15,8 @@
*/
package com.android.internal.app;
import android.annotation.DrawableRes;
import android.annotation.IntDef;
import android.annotation.Nullable;
import android.annotation.StringRes;
import android.app.AppGlobals;
import android.app.admin.DevicePolicyEventLogger;
import android.content.ContentResolver;
@@ -33,7 +31,6 @@ import android.stats.devicepolicy.DevicePolicyEnums;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import com.android.internal.R;
@@ -347,30 +344,6 @@ 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>
@@ -461,27 +434,13 @@ public abstract class AbstractMultiProfilePagerAdapter extends PagerAdapter {
}
}
protected void showEmptyState(ResolverListAdapter activeListAdapter,
@DrawableRes int iconRes, @StringRes int titleRes, @StringRes int subtitleRes) {
showEmptyState(activeListAdapter, iconRes, titleRes, subtitleRes, /* buttonOnClick */ null);
protected void showEmptyState(ResolverListAdapter activeListAdapter, String title,
String subtitle) {
showEmptyState(activeListAdapter, title, subtitle, /* buttonOnClick */ null);
}
protected void showEmptyState(ResolverListAdapter activeListAdapter,
@DrawableRes int iconRes, String title, String subtitle) {
showEmptyState(activeListAdapter, iconRes, title, subtitle, /* buttonOnClick */ null);
}
protected void showEmptyState(ResolverListAdapter activeListAdapter,
@DrawableRes int iconRes, @StringRes int titleRes, @StringRes int subtitleRes,
View.OnClickListener buttonOnClick) {
String title = titleRes == 0 ? null : mContext.getString(titleRes);
String subtitle = subtitleRes == 0 ? null : mContext.getString(subtitleRes);
showEmptyState(activeListAdapter, iconRes, title, subtitle, buttonOnClick);
}
protected void showEmptyState(ResolverListAdapter activeListAdapter,
@DrawableRes int iconRes, String title, String subtitle,
View.OnClickListener buttonOnClick) {
String title, String subtitle, View.OnClickListener buttonOnClick) {
ProfileDescriptor descriptor = getItem(
userHandleToPageIndex(activeListAdapter.getUserHandle()));
descriptor.rootView.findViewById(R.id.resolver_list).setVisibility(View.GONE);
@@ -507,10 +466,6 @@ public abstract class AbstractMultiProfilePagerAdapter extends PagerAdapter {
button.setVisibility(buttonOnClick != null ? View.VISIBLE : View.GONE);
button.setOnClickListener(buttonOnClick);
ImageView icon = emptyStateView.findViewById(R.id.resolver_empty_state_icon);
icon.setImageResource(iconRes);
updateIconVisibility(icon, emptyStateView);
activeListAdapter.markTabLoaded();
}
@@ -537,7 +492,6 @@ public abstract class AbstractMultiProfilePagerAdapter extends PagerAdapter {
}
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);
emptyStateView.findViewById(R.id.resolver_empty_state_button).setVisibility(View.INVISIBLE);
emptyStateView.findViewById(R.id.resolver_empty_state_progress).setVisibility(View.VISIBLE);
@@ -545,7 +499,6 @@ public abstract class AbstractMultiProfilePagerAdapter extends PagerAdapter {
}
private void resetViewVisibilitiesForWorkProfileEmptyState(View emptyStateView) {
emptyStateView.findViewById(R.id.resolver_empty_state_icon).setVisibility(View.VISIBLE);
emptyStateView.findViewById(R.id.resolver_empty_state_title).setVisibility(View.VISIBLE);
emptyStateView.findViewById(R.id.resolver_empty_state_subtitle).setVisibility(View.VISIBLE);
emptyStateView.findViewById(R.id.resolver_empty_state_button).setVisibility(View.INVISIBLE);
@@ -554,7 +507,6 @@ public abstract class AbstractMultiProfilePagerAdapter extends PagerAdapter {
}
private void resetViewVisibilitiesForConsumerUserEmptyState(View emptyStateView) {
emptyStateView.findViewById(R.id.resolver_empty_state_icon).setVisibility(View.GONE);
emptyStateView.findViewById(R.id.resolver_empty_state_title).setVisibility(View.GONE);
emptyStateView.findViewById(R.id.resolver_empty_state_subtitle).setVisibility(View.GONE);
emptyStateView.findViewById(R.id.resolver_empty_state_button).setVisibility(View.GONE);

View File

@@ -193,7 +193,6 @@ public class ChooserMultiProfilePagerAdapter extends AbstractMultiProfilePagerAd
protected void showWorkProfileOffEmptyState(ResolverListAdapter activeListAdapter,
View.OnClickListener listener) {
showEmptyState(activeListAdapter,
R.drawable.ic_work_apps_off,
getWorkAppPausedTitle(),
/* subtitle = */ null,
listener);
@@ -203,12 +202,10 @@ public class ChooserMultiProfilePagerAdapter extends AbstractMultiProfilePagerAd
protected void showNoPersonalToWorkIntentsEmptyState(ResolverListAdapter activeListAdapter) {
if (mIsSendAction) {
showEmptyState(activeListAdapter,
R.drawable.ic_sharing_disabled,
getCrossProfileBlockedTitle(),
getCantShareWithWorkMessage());
} else {
showEmptyState(activeListAdapter,
R.drawable.ic_sharing_disabled,
getCrossProfileBlockedTitle(),
getCantAccessWorkMessage());
}
@@ -218,12 +215,10 @@ public class ChooserMultiProfilePagerAdapter extends AbstractMultiProfilePagerAd
protected void showNoWorkToPersonalIntentsEmptyState(ResolverListAdapter activeListAdapter) {
if (mIsSendAction) {
showEmptyState(activeListAdapter,
R.drawable.ic_sharing_disabled,
getCrossProfileBlockedTitle(),
getCantShareWithPersonalMessage());
} else {
showEmptyState(activeListAdapter,
R.drawable.ic_sharing_disabled,
getCrossProfileBlockedTitle(),
getCantAccessPersonalMessage());
}
@@ -231,19 +226,13 @@ public class ChooserMultiProfilePagerAdapter extends AbstractMultiProfilePagerAd
@Override
protected void showNoPersonalAppsAvailableEmptyState(ResolverListAdapter listAdapter) {
showEmptyState(listAdapter,
R.drawable.ic_no_apps,
getNoPersonalAppsAvailableMessage(),
/* subtitle= */ null);
showEmptyState(listAdapter, getNoPersonalAppsAvailableMessage(), /* subtitle= */ null);
}
@Override
protected void showNoWorkAppsAvailableEmptyState(ResolverListAdapter listAdapter) {
showEmptyState(listAdapter,
R.drawable.ic_no_apps,
getNoWorkAppsAvailableMessage(),
/* subtitle = */ null);
showEmptyState(listAdapter, getNoWorkAppsAvailableMessage(), /* subtitle = */ null);
}
private String getWorkAppPausedTitle() {

View File

@@ -673,7 +673,6 @@ public class ResolverActivity extends Activity implements
getResources().getDimensionPixelSize(R.dimen.resolver_button_bar_spacing),
buttonBar.getPaddingRight(),
getResources().getDimensionPixelSize(R.dimen.resolver_button_bar_spacing));
mMultiProfilePagerAdapter.updateAfterConfigChange();
}
@Override // ResolverListCommunicator

View File

@@ -26,7 +26,6 @@ import static android.app.admin.DevicePolicyResources.Strings.Core.RESOLVER_WORK
import android.annotation.Nullable;
import android.app.admin.DevicePolicyManager;
import android.content.Context;
import android.content.res.Resources;
import android.os.UserHandle;
import android.view.LayoutInflater;
import android.view.View;
@@ -74,24 +73,6 @@ 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());
@@ -203,7 +184,6 @@ public class ResolverMultiProfilePagerAdapter extends AbstractMultiProfilePagerA
protected void showWorkProfileOffEmptyState(ResolverListAdapter activeListAdapter,
View.OnClickListener listener) {
showEmptyState(activeListAdapter,
R.drawable.ic_work_apps_off,
getWorkAppPausedTitle(),
/* subtitle = */ null,
listener);
@@ -212,7 +192,6 @@ public class ResolverMultiProfilePagerAdapter extends AbstractMultiProfilePagerA
@Override
protected void showNoPersonalToWorkIntentsEmptyState(ResolverListAdapter activeListAdapter) {
showEmptyState(activeListAdapter,
R.drawable.ic_sharing_disabled,
getCrossProfileBlockedTitle(),
getCantAccessWorkMessage());
}
@@ -220,7 +199,6 @@ public class ResolverMultiProfilePagerAdapter extends AbstractMultiProfilePagerA
@Override
protected void showNoWorkToPersonalIntentsEmptyState(ResolverListAdapter activeListAdapter) {
showEmptyState(activeListAdapter,
R.drawable.ic_sharing_disabled,
getCrossProfileBlockedTitle(),
getCantAccessPersonalMessage());
}
@@ -228,7 +206,6 @@ public class ResolverMultiProfilePagerAdapter extends AbstractMultiProfilePagerA
@Override
protected void showNoPersonalAppsAvailableEmptyState(ResolverListAdapter listAdapter) {
showEmptyState(listAdapter,
R.drawable.ic_no_apps,
getNoPersonalAppsAvailableMessage(),
/* subtitle = */ null);
}
@@ -236,7 +213,6 @@ public class ResolverMultiProfilePagerAdapter extends AbstractMultiProfilePagerA
@Override
protected void showNoWorkAppsAvailableEmptyState(ResolverListAdapter listAdapter) {
showEmptyState(listAdapter,
R.drawable.ic_no_apps,
getNoWorkAppsAvailableMessage(),
/* subtitle= */ null);
}

View File

@@ -1,4 +0,0 @@
<vector android:height="32dp" android:viewportHeight="24"
android:viewportWidth="24" android:width="32dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@color/resolver_empty_state_icon" android:fillType="evenOdd" android:pathData="M18.8123,20.0145L21.3999,22.6021L22.602,21.4L2.602,1.4L1.3999,2.6021L3.9873,5.1895C3.6248,5.552 3.3998,6.052 3.3998,6.602C3.3998,7.702 4.2998,8.602 5.3998,8.602C5.9498,8.602 6.4498,8.377 6.8123,8.0145L9.9873,11.1895C9.6248,11.552 9.3998,12.052 9.3998,12.602C9.3998,13.702 10.2998,14.602 11.3998,14.602C11.9498,14.602 12.4498,14.377 12.8123,14.0145L15.9873,17.1895C15.6248,17.552 15.3998,18.052 15.3998,18.602C15.3998,19.702 16.2998,20.602 17.3998,20.602C17.9498,20.602 18.4498,20.377 18.8123,20.0145ZM17.3998,8.602C16.2998,8.602 15.3998,7.7021 15.3998,6.602C15.3998,5.502 16.2998,4.602 17.3998,4.602C18.4998,4.602 19.3998,5.502 19.3998,6.602C19.3998,7.7021 18.4998,8.602 17.3998,8.602ZM5.3998,14.6021C6.4998,14.6021 7.3998,13.7021 7.3998,12.6021C7.3998,11.5021 6.4998,10.6021 5.3998,10.6021C4.2998,10.6021 3.3998,11.5021 3.3998,12.6021C3.3998,13.7021 4.2998,14.6021 5.3998,14.6021ZM7.3998,18.6021C7.3998,19.7021 6.4998,20.6021 5.3998,20.6021C4.2998,20.6021 3.3998,19.7021 3.3998,18.6021C3.3998,17.5021 4.2998,16.6021 5.3998,16.6021C6.4998,16.6021 7.3998,17.5021 7.3998,18.6021ZM13.3998,18.6021C13.3998,19.7021 12.4998,20.6021 11.3998,20.6021C10.2998,20.6021 9.3998,19.7021 9.3998,18.6021C9.3998,17.5021 10.2998,16.6021 11.3998,16.6021C12.4998,16.6021 13.3998,17.5021 13.3998,18.6021ZM13.3999,6.602C13.3999,7.547 12.7357,8.3444 11.8511,8.5504L9.4516,6.1509C9.6576,5.2663 10.4549,4.602 11.3999,4.602C12.4999,4.602 13.3999,5.502 13.3999,6.602ZM17.8511,14.5504C18.7357,14.3444 19.3999,13.547 19.3999,12.6021C19.3999,11.5021 18.4999,10.6021 17.3999,10.6021C16.4549,10.6021 15.6576,11.2663 15.4516,12.1509L17.8511,14.5504Z"/>
</vector>

View File

@@ -1,4 +0,0 @@
<vector android:height="32dp" android:viewportHeight="24"
android:viewportWidth="24" android:width="32dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@color/resolver_empty_state_icon" android:fillType="evenOdd" android:pathData="M19.7225,20.9245L21.2011,22.4031L22.4032,21.201L2.8022,1.6L1.6001,2.8021L8.1265,9.3284L7.64,9.612C7.1,9.112 6.39,8.802 5.6,8.802C3.94,8.802 2.6,10.142 2.6,11.802C2.6,13.462 3.94,14.802 5.6,14.802C6.39,14.802 7.1,14.492 7.64,13.992L14.69,18.112C14.64,18.332 14.6,18.562 14.6,18.802C14.6,20.462 15.94,21.802 17.6,21.802C18.43,21.802 19.18,21.467 19.7225,20.9245ZM16.8938,18.0958L18.3063,19.5083C18.125,19.6895 17.875,19.802 17.6,19.802C17.05,19.802 16.6,19.352 16.6,18.802C16.6,18.527 16.7125,18.277 16.8938,18.0958ZM15.1871,16.3891L9.3881,10.5901L8.51,11.102C8.56,11.332 8.6,11.562 8.6,11.802C8.6,12.042 8.56,12.272 8.51,12.502L15.1871,16.3891ZM15.56,6.992L12.4382,8.8119L11.1766,7.5503L14.69,5.502C14.64,5.282 14.6,5.042 14.6,4.802C14.6,3.142 15.94,1.802 17.6,1.802C19.26,1.802 20.6,3.142 20.6,4.802C20.6,6.462 19.26,7.802 17.6,7.802C16.81,7.802 16.09,7.492 15.56,6.992ZM18.6,4.802C18.6,4.252 18.15,3.802 17.6,3.802C17.05,3.802 16.6,4.252 16.6,4.802C16.6,5.352 17.05,5.802 17.6,5.802C18.15,5.802 18.6,5.352 18.6,4.802ZM5.6,12.802C5.05,12.802 4.6,12.352 4.6,11.802C4.6,11.252 5.05,10.802 5.6,10.802C6.15,10.802 6.6,11.252 6.6,11.802C6.6,12.352 6.15,12.802 5.6,12.802Z"/>
</vector>

View File

@@ -1,4 +0,0 @@
<vector android:height="32dp" android:viewportHeight="24.0"
android:viewportWidth="24.0" android:width="32dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@color/resolver_empty_state_icon" android:pathData="M20,6h-4L16,4c0,-1.11 -0.89,-2 -2,-2h-4c-1.11,0 -2,0.89 -2,2v1.17L10.83,8L20,8v9.17l1.98,1.98c0,-0.05 0.02,-0.1 0.02,-0.16L22,8c0,-1.11 -0.89,-2 -2,-2zM14,6h-4L10,4h4v2zM19,19L8,8 6,6 2.81,2.81 1.39,4.22 3.3,6.13C2.54,6.41 2.01,7.14 2.01,8L2,19c0,1.11 0.89,2 2,2h14.17l1.61,1.61 1.41,-1.41 -0.37,-0.37L19,19zM4,19L4,8h1.17l11,11L4,19z"/>
</vector>

View File

@@ -30,36 +30,30 @@
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"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_centerHorizontal="true" />
<TextView
android:id="@+id/resolver_empty_state_title"
android:layout_below="@+id/resolver_empty_state_icon"
android:layout_marginTop="8dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@string/config_headlineFontFamilyMedium"
android:textColor="@color/resolver_empty_state_text"
android:textSize="14sp"
android:textSize="18sp"
android:gravity="center_horizontal"
android:layout_centerHorizontal="true" />
<TextView
android:id="@+id/resolver_empty_state_subtitle"
android:layout_below="@+id/resolver_empty_state_title"
android:layout_marginTop="4dp"
android:layout_marginTop="16dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/resolver_empty_state_text"
android:textSize="12sp"
android:textSize="14sp"
android:gravity="center_horizontal"
android:layout_centerHorizontal="true" />
<Button
android:id="@+id/resolver_empty_state_button"
android:layout_below="@+id/resolver_empty_state_subtitle"
android:layout_marginTop="8dp"
android:layout_marginTop="16dp"
android:text="@string/resolver_switch_on_work"
android:layout_width="wrap_content"
android:layout_height="wrap_content"

View File

@@ -959,7 +959,7 @@
<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_top">48dp</dimen>
<dimen name="resolver_empty_state_container_padding_bottom">8dp</dimen>
<dimen name="chooser_action_button_icon_size">18dp</dimen>

View File

@@ -4297,9 +4297,6 @@
<java-symbol type="string" name="resolver_no_work_apps_available" />
<java-symbol type="string" name="resolver_no_personal_apps_available" />
<java-symbol type="string" name="resolver_switch_on_work" />
<java-symbol type="drawable" name="ic_work_apps_off" />
<java-symbol type="drawable" name="ic_sharing_disabled" />
<java-symbol type="drawable" name="ic_no_apps" />
<java-symbol type="drawable" name="ic_screenshot_edit" />
<java-symbol type="dimen" name="resolver_empty_state_height" />
<java-symbol type="dimen" name="resolver_empty_state_height_with_tabs" />