diff options
author | 2019-01-13 22:23:02 +0800 | |
---|---|---|
committer | 2019-01-21 18:05:18 +0800 | |
commit | 7a91a0d03b8162740821e0d7de710ba313ef83c8 (patch) | |
tree | f83693bf6d400255ff0e3f564c3d5ce982b99e7c | |
parent | 8d1592e30766e6c1bd0f2950ff23becb66386817 (diff) |
Add an empty text when there is no app view.
This widget only shows title and empty text
when there is no any app view shown.
Test: visual, robotest
Bug: 120873123
Change-Id: I2079c1e47de5b7fb2d4ea4740dfba4809375c7c1
3 files changed, 72 insertions, 4 deletions
diff --git a/packages/SettingsLib/EntityHeaderWidgets/res/layout/app_entities_header.xml b/packages/SettingsLib/EntityHeaderWidgets/res/layout/app_entities_header.xml index 9f30eda242f6..716fc8ded734 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"/> <LinearLayout - android:id="@+id/all_apps_view" + android:id="@+id/app_views_container" android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingTop="16dp" @@ -61,4 +61,12 @@ android:layout_height="48dp" android:gravity="center"/> + <TextView + android:id="@+id/empty_view" + android:layout_width="match_parent" + android:layout_height="106dp" + android:gravity="center" + android:visibility="gone" + android:textAppearance="@style/AppEntitiesHeader.Text.Summary"/> + </LinearLayout> 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 73cb8db136b5..330049fc6673 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]; @@ -152,6 +157,14 @@ public class AppEntitiesHeaderController { } /** + * 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. * * @param index the index at which the specified view is to be inserted @@ -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 8c18c356159e..4c68c1476cff 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); } } |