From adae7475b094661e7e1494f7e25c0c7aad6e220c Mon Sep 17 00:00:00 2001 From: timhypeng Date: Thu, 16 Jan 2020 10:14:13 +0800 Subject: [PATCH] Add title and icon in panel header - Add getIcon() and getSubTitle() in PanelContent - Check icon avalibility to decide header layout - Add test cases Bug: 147776885 Test: make -j42 RunSettingsRoboTests Change-Id: Idb51e81359b6037ca9b90965dd9b370fc5e22c84 --- res/layout/panel_layout.xml | 45 +++++++++++++++++++ .../android/settings/panel/PanelContent.java | 14 ++++++ .../android/settings/panel/PanelFragment.java | 25 +++++++++-- .../settings/panel/FakePanelContent.java | 21 +++++++++ .../settings/panel/PanelFragmentTest.java | 40 +++++++++++++++++ 5 files changed, 142 insertions(+), 3 deletions(-) diff --git a/res/layout/panel_layout.xml b/res/layout/panel_layout.xml index abe8f416ba1..7a60dad2431 100644 --- a/res/layout/panel_layout.xml +++ b/res/layout/panel_layout.xml @@ -27,6 +27,51 @@ android:layout_height="wrap_content" android:orientation="vertical"> + + + + + + + + + + + + + + > mSliceLiveData = new LinkedHashMap<>(); @@ -155,6 +161,10 @@ public class PanelFragment extends Fragment { mSeeMoreButton = mLayoutView.findViewById(R.id.see_more); mDoneButton = mLayoutView.findViewById(R.id.done); mTitleView = mLayoutView.findViewById(R.id.panel_title); + mPanelHeader = mLayoutView.findViewById(R.id.panel_header); + mTitleIcon = mLayoutView.findViewById(R.id.title_icon); + mHeaderTitle = mLayoutView.findViewById(R.id.header_title); + mHeaderSubtitle = mLayoutView.findViewById(R.id.header_subtitle); // Make the panel layout gone here, to avoid janky animation when updating from old panel. // We will make it visible once the panel is ready to load. @@ -182,7 +192,16 @@ public class PanelFragment extends Fragment { // Start loading Slices. When finished, the Panel will animate in. loadAllSlices(); - mTitleView.setText(mPanel.getTitle()); + final int iconRes = mPanel.getIcon(); + if (iconRes == -1) { + mTitleView.setText(mPanel.getTitle()); + } else { + mTitleView.setVisibility(View.GONE); + mPanelHeader.setVisibility(View.VISIBLE); + mTitleIcon.setImageResource(iconRes); + mHeaderTitle.setText(mPanel.getTitle()); + mHeaderSubtitle.setText(mPanel.getSubTitle()); + } mSeeMoreButton.setOnClickListener(getSeeMoreListener()); mDoneButton.setOnClickListener(getCloseListener()); diff --git a/tests/robotests/src/com/android/settings/panel/FakePanelContent.java b/tests/robotests/src/com/android/settings/panel/FakePanelContent.java index 8f541154604..3b4d2c42a3e 100644 --- a/tests/robotests/src/com/android/settings/panel/FakePanelContent.java +++ b/tests/robotests/src/com/android/settings/panel/FakePanelContent.java @@ -40,6 +40,27 @@ public class FakePanelContent implements PanelContent { public static final Intent INTENT = new Intent(); + private CharSequence mSubTitle; + private int mIconRes = -1; + + @Override + public int getIcon() { + return mIconRes; + } + + @Override + public CharSequence getSubTitle() { + return mSubTitle; + } + + public void setIcon(int iconRes) { + mIconRes = iconRes; + } + + public void setSubTitle(CharSequence subTitle) { + mSubTitle = subTitle; + } + @Override public CharSequence getTitle() { return TITLE; diff --git a/tests/robotests/src/com/android/settings/panel/PanelFragmentTest.java b/tests/robotests/src/com/android/settings/panel/PanelFragmentTest.java index cbeff97c314..ee4131e1abe 100644 --- a/tests/robotests/src/com/android/settings/panel/PanelFragmentTest.java +++ b/tests/robotests/src/com/android/settings/panel/PanelFragmentTest.java @@ -31,6 +31,7 @@ import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.widget.LinearLayout; +import android.widget.TextView; import com.android.settings.R; import com.android.settings.testutils.FakeFeatureFactory; @@ -41,10 +42,15 @@ import org.junit.runner.RunWith; import org.robolectric.Robolectric; import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; +import org.robolectric.android.controller.ActivityController; + +import java.util.Objects; @RunWith(RobolectricTestRunner.class) public class PanelFragmentTest { + private static final String SUBTITLE = "subtitle"; + private Context mContext; private PanelFragment mPanelFragment; private FakeSettingsPanelActivity mActivity; @@ -141,4 +147,38 @@ public class PanelFragmentTest { 0 ); } + + @Test + public void supportIcon_displayIconHeaderLayout() { + mFakePanelContent.setIcon(R.drawable.ic_android); + mFakePanelContent.setSubTitle(SUBTITLE); + final ActivityController activityController = + Robolectric.buildActivity(FakeSettingsPanelActivity.class); + activityController.setup(); + final PanelFragment panelFragment = (PanelFragment) + Objects.requireNonNull(activityController + .get() + .getSupportFragmentManager() + .findFragmentById(R.id.main_content)); + final View titleView = panelFragment.mLayoutView.findViewById(R.id.panel_title); + final LinearLayout panelHeader = panelFragment.mLayoutView.findViewById(R.id.panel_header); + final TextView headerTitle = panelFragment.mLayoutView.findViewById(R.id.header_title); + final TextView headerSubtitle = panelFragment.mLayoutView.findViewById( + R.id.header_subtitle); + // Check visibility + assertThat(panelHeader.getVisibility()).isEqualTo(View.VISIBLE); + assertThat(titleView.getVisibility()).isEqualTo(View.GONE); + // Check content + assertThat(headerTitle.getText()).isEqualTo(FakePanelContent.TITLE); + assertThat(headerSubtitle.getText()).isEqualTo(SUBTITLE); + } + + @Test + public void notSupportIcon_displayDefaultHeaderLayout() { + final View titleView = mPanelFragment.mLayoutView.findViewById(R.id.panel_title); + final View panelHeader = mPanelFragment.mLayoutView.findViewById(R.id.panel_header); + + assertThat(panelHeader.getVisibility()).isEqualTo(View.GONE); + assertThat(titleView.getVisibility()).isEqualTo(View.VISIBLE); + } } \ No newline at end of file