summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author tmfang <tmfang@google.com> 2019-01-13 22:23:02 +0800
committer tmfang <tmfang@google.com> 2019-01-21 18:05:18 +0800
commit7a91a0d03b8162740821e0d7de710ba313ef83c8 (patch)
treef83693bf6d400255ff0e3f564c3d5ce982b99e7c
parent8d1592e30766e6c1bd0f2950ff23becb66386817 (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
-rw-r--r--packages/SettingsLib/EntityHeaderWidgets/res/layout/app_entities_header.xml10
-rw-r--r--packages/SettingsLib/EntityHeaderWidgets/src/com/android/settingslib/widget/AppEntitiesHeaderController.java37
-rw-r--r--packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/AppEntitiesHeaderControllerTest.java29
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);
}
}