diff --git a/packages/SettingsLib/EntityHeaderWidgets/res/layout/app_entities_header.xml b/packages/SettingsLib/EntityHeaderWidgets/res/layout/app_entities_header.xml index 9f30eda242f66..716fc8ded734c 100644 --- a/packages/SettingsLib/EntityHeaderWidgets/res/layout/app_entities_header.xml +++ b/packages/SettingsLib/EntityHeaderWidgets/res/layout/app_entities_header.xml @@ -33,7 +33,7 @@ android:textAppearance="@style/AppEntitiesHeader.Text.HeaderTitle"/> + + diff --git a/packages/SettingsLib/EntityHeaderWidgets/src/com/android/settingslib/widget/AppEntitiesHeaderController.java b/packages/SettingsLib/EntityHeaderWidgets/src/com/android/settingslib/widget/AppEntitiesHeaderController.java index 73cb8db136b53..330049fc66736 100644 --- a/packages/SettingsLib/EntityHeaderWidgets/src/com/android/settingslib/widget/AppEntitiesHeaderController.java +++ b/packages/SettingsLib/EntityHeaderWidgets/src/com/android/settingslib/widget/AppEntitiesHeaderController.java @@ -77,9 +77,11 @@ public class AppEntitiesHeaderController { private final Context mContext; private final TextView mHeaderTitleView; + private final TextView mHeaderEmptyView; private final Button mHeaderDetailsView; private final AppEntityInfo[] mAppEntityInfos; + private final View mAppViewsContainer; private final View[] mAppEntityViews; private final ImageView[] mAppIconViews; private final TextView[] mAppTitleViews; @@ -87,6 +89,7 @@ public class AppEntitiesHeaderController { private int mHeaderTitleRes; private int mHeaderDetailsRes; + private int mHeaderEmptyRes; private View.OnClickListener mDetailsOnClickListener; /** @@ -104,6 +107,8 @@ public class AppEntitiesHeaderController { mContext = context; mHeaderTitleView = appEntitiesHeaderView.findViewById(R.id.header_title); mHeaderDetailsView = appEntitiesHeaderView.findViewById(R.id.header_details); + mHeaderEmptyView = appEntitiesHeaderView.findViewById(R.id.empty_view); + mAppViewsContainer = appEntitiesHeaderView.findViewById(R.id.app_views_container); mAppEntityInfos = new AppEntityInfo[MAXIMUM_APPS]; mAppIconViews = new ImageView[MAXIMUM_APPS]; @@ -151,6 +156,14 @@ public class AppEntitiesHeaderController { return this; } + /** + * Sets the string resource id for the empty text. + */ + public AppEntitiesHeaderController setHeaderEmptyRes(@StringRes int emptyRes) { + mHeaderEmptyRes = emptyRes; + return this; + } + /** * Set an app entity at a specified position view. * @@ -192,6 +205,12 @@ public class AppEntitiesHeaderController { */ public void apply() { bindHeaderTitleView(); + + if (isAppEntityInfosEmpty()) { + setEmptyViewVisible(true); + return; + } + setEmptyViewVisible(false); bindHeaderDetailsView(); // Rebind all apps view @@ -245,4 +264,22 @@ public class AppEntitiesHeaderController { mAppSummaryViews[index].setText(summary); } } + + private void setEmptyViewVisible(boolean visible) { + if (mHeaderEmptyRes != 0) { + mHeaderEmptyView.setText(mHeaderEmptyRes); + } + mHeaderEmptyView.setVisibility(visible ? View.VISIBLE : View.GONE); + mHeaderDetailsView.setVisibility(visible ? View.GONE : View.VISIBLE); + mAppViewsContainer.setVisibility(visible ? View.GONE : View.VISIBLE); + } + + private boolean isAppEntityInfosEmpty() { + for (AppEntityInfo info : mAppEntityInfos) { + if (info != null) { + return false; + } + } + return true; + } } diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/AppEntitiesHeaderControllerTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/AppEntitiesHeaderControllerTest.java index 8c18c356159eb..4c68c1476cffa 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/AppEntitiesHeaderControllerTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/AppEntitiesHeaderControllerTest.java @@ -60,6 +60,7 @@ public class AppEntitiesHeaderControllerTest { .setOnClickListener(v -> { }) .build(); + mController.setAppEntity(0, mAppEntityInfo); } @Test @@ -172,6 +173,8 @@ public class AppEntitiesHeaderControllerTest { mController.setAppEntity(0, mAppEntityInfo) .setAppEntity(1, mAppEntityInfo) .setAppEntity(2, mAppEntityInfo).apply(); + final View appViewsContainer = mAppEntitiesHeaderView.findViewById( + R.id.app_views_container); final View app1View = mAppEntitiesHeaderView.findViewById(R.id.app1_view); final View app2View = mAppEntitiesHeaderView.findViewById(R.id.app2_view); final View app3View = mAppEntitiesHeaderView.findViewById(R.id.app3_view); @@ -181,8 +184,28 @@ public class AppEntitiesHeaderControllerTest { assertThat(app3View.getVisibility()).isEqualTo(View.VISIBLE); mController.clearAllAppEntities().apply(); - assertThat(app1View.getVisibility()).isEqualTo(View.GONE); - assertThat(app2View.getVisibility()).isEqualTo(View.GONE); - assertThat(app3View.getVisibility()).isEqualTo(View.GONE); + + assertThat(appViewsContainer.getVisibility()).isEqualTo(View.GONE); + } + + @Test + public void apply_noAppEntitySet_shouldOnlyShowTitleAndEmptyView() { + mController.setHeaderTitleRes(R.string.expand_button_title) + .setAppEntity(0, mAppEntityInfo) + .setAppEntity(1, mAppEntityInfo) + .setAppEntity(2, mAppEntityInfo).apply(); + final View titleView = mAppEntitiesHeaderView.findViewById(R.id.header_title); + final View detailsView = mAppEntitiesHeaderView.findViewById(R.id.header_details); + final View emptyView = mAppEntitiesHeaderView.findViewById(R.id.empty_view); + final View appViewsContainer = mAppEntitiesHeaderView.findViewById( + R.id.app_views_container); + + mController.clearAllAppEntities().apply(); + + assertThat(titleView.getVisibility()).isEqualTo(View.VISIBLE); + assertThat(emptyView.getVisibility()).isEqualTo(View.VISIBLE); + + assertThat(detailsView.getVisibility()).isEqualTo(View.GONE); + assertThat(appViewsContainer.getVisibility()).isEqualTo(View.GONE); } }