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