Merge "Add an empty text when there is no app view."
This commit is contained in:
committed by
Android (Google) Code Review
commit
bfda3a937a
@@ -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>
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user