From f9c13fc305fc2139db6df04a6596a1f5ff77ba4d Mon Sep 17 00:00:00 2001 From: Matthew Fritze Date: Tue, 15 May 2018 19:22:35 -0700 Subject: [PATCH] Set slice summary text to screentitle first To improve context on search surfaces where the setting may be ambiguous, we set the screentitle as the summary text as the top priority. If there is no screentitle or the it matches the title, then we try to use the controller summary. If the controller summary is not valid, then we show nothing. Bug: 79780762 Test: robotests Change-Id: If4f7f8d4a072125604ede14e3df2afd667fa24b7 --- .../settings/slices/SliceBuilderUtils.java | 7 ++- .../slices/SliceBuilderUtilsTest.java | 59 ++++++++++--------- 2 files changed, 37 insertions(+), 29 deletions(-) diff --git a/src/com/android/settings/slices/SliceBuilderUtils.java b/src/com/android/settings/slices/SliceBuilderUtils.java index be2e8df63e1..06d071f70c1 100644 --- a/src/com/android/settings/slices/SliceBuilderUtils.java +++ b/src/com/android/settings/slices/SliceBuilderUtils.java @@ -190,7 +190,12 @@ public class SliceBuilderUtils { */ public static CharSequence getSubtitleText(Context context, AbstractPreferenceController controller, SliceData sliceData) { - CharSequence summaryText; + CharSequence summaryText = sliceData.getScreenTitle(); + if (isValidSummary(context, summaryText) && !TextUtils.equals(summaryText, + sliceData.getTitle())) { + return summaryText; + } + if (controller != null) { summaryText = controller.getSummary(); diff --git a/tests/robotests/src/com/android/settings/slices/SliceBuilderUtilsTest.java b/tests/robotests/src/com/android/settings/slices/SliceBuilderUtilsTest.java index bd589bf3d27..00e8fe17d08 100644 --- a/tests/robotests/src/com/android/settings/slices/SliceBuilderUtilsTest.java +++ b/tests/robotests/src/com/android/settings/slices/SliceBuilderUtilsTest.java @@ -204,18 +204,18 @@ public class SliceBuilderUtilsTest { } @Test - public void testDynamicSummary_returnsSliceSummary() { + public void getDynamicSummary_returnsScreenTitle() { final SliceData data = getDummyData(); final FakePreferenceController controller = new FakePreferenceController(mContext, KEY); final CharSequence summary = SliceBuilderUtils.getSubtitleText(mContext, controller, data); - assertThat(summary).isEqualTo(data.getSummary()); + assertThat(summary).isEqualTo(data.getScreenTitle()); } @Test - public void testDynamicSummary_returnsFragmentSummary() { - final SliceData data = getDummyData(null); + public void getDynamicSummary_noScreenTitle_returnsPrefControllerSummary() { + final SliceData data = getDummyData("", ""); final FakePreferenceController controller = spy( new FakePreferenceController(mContext, KEY)); final String controllerSummary = "new_Summary"; @@ -227,8 +227,21 @@ public class SliceBuilderUtilsTest { } @Test - public void testDynamicSummary_returnsSliceEmptyString() { - final SliceData data = getDummyData(null); + public void getDynamicSummary_screenTitleMatchesTitle_returnsPrefControllerSummary() { + final SliceData data = getDummyData("", TITLE); + final FakePreferenceController controller = spy( + new FakePreferenceController(mContext, KEY)); + final String controllerSummary = "new_Summary"; + doReturn(controllerSummary).when(controller).getSummary(); + + final CharSequence summary = SliceBuilderUtils.getSubtitleText(mContext, controller, data); + + assertThat(summary).isEqualTo(controllerSummary); + } + + @Test + public void getDynamicSummary_emptyScreenTitle_emptyControllerSummary_returnsEmptyString() { + final SliceData data = getDummyData(null, null); final FakePreferenceController controller = new FakePreferenceController(mContext, KEY); final CharSequence summary = SliceBuilderUtils.getSubtitleText(mContext, controller, data); @@ -236,8 +249,9 @@ public class SliceBuilderUtilsTest { } @Test - public void testDynamicSummary_placeHolderString_returnsEmptyString() { - final SliceData data = getDummyData(mContext.getString(R.string.summary_placeholder)); + public void + getDynamicSummary_emptyScreenTitle_placeHolderControllerSummary_returnsEmptyString() { + final SliceData data = getDummyData(mContext.getString(R.string.summary_placeholder), null); final FakePreferenceController controller = new FakePreferenceController(mContext, KEY); final CharSequence summary = SliceBuilderUtils.getSubtitleText(mContext, controller, data); @@ -245,9 +259,9 @@ public class SliceBuilderUtilsTest { } @Test - public void testDynamicSummary_sliceDataAndFragmentPlaceholder_returnsSliceEmptyString() { + public void getDynamicSummary_screenTitleAndControllerPlaceholder_returnsSliceEmptyString() { final String summaryPlaceholder = mContext.getString(R.string.summary_placeholder); - final SliceData data = getDummyData(summaryPlaceholder); + final SliceData data = getDummyData(summaryPlaceholder, summaryPlaceholder); final FakePreferenceController controller = spy( new FakePreferenceController(mContext, KEY)); doReturn(summaryPlaceholder).when(controller).getSummary(); @@ -257,18 +271,6 @@ public class SliceBuilderUtilsTest { assertThat(summary).isEqualTo(""); } - @Test - public void summaryText_bothDynamicAndStaticSummary_dynamicSummaryReturned() { - SliceData data = getDummyData("bad_summary"); - FakePreferenceController controller = spy(new FakePreferenceController(mContext, KEY)); - String controllerSummary = "new_Summary"; - doReturn(controllerSummary).when(controller).getSummary(); - - CharSequence summary = SliceBuilderUtils.getSubtitleText(mContext, controller, data); - - assertThat(summary).isEqualTo(controllerSummary); - } - @Test public void getPathData_splitsIntentUri() { final Uri uri = new Uri.Builder() @@ -417,23 +419,24 @@ public class SliceBuilderUtilsTest { } private SliceData getDummyData() { - return getDummyData(TOGGLE_CONTROLLER, SUMMARY, SliceData.SliceType.SWITCH); + return getDummyData(TOGGLE_CONTROLLER, SUMMARY, SliceData.SliceType.SWITCH, SCREEN_TITLE); } - private SliceData getDummyData(String summary) { - return getDummyData(TOGGLE_CONTROLLER, summary, SliceData.SliceType.SWITCH); + private SliceData getDummyData(String summary, String screenTitle) { + return getDummyData(TOGGLE_CONTROLLER, summary, SliceData.SliceType.SWITCH, screenTitle); } private SliceData getDummyData(Class prefController, int sliceType) { - return getDummyData(prefController, SUMMARY, sliceType); + return getDummyData(prefController, SUMMARY, sliceType, SCREEN_TITLE); } - private SliceData getDummyData(Class prefController, String summary, int sliceType) { + private SliceData getDummyData(Class prefController, String summary, int sliceType, + String screenTitle) { return new SliceData.Builder() .setKey(KEY) .setTitle(TITLE) .setSummary(summary) - .setScreenTitle(SCREEN_TITLE) + .setScreenTitle(screenTitle) .setKeywords(KEYWORDS) .setIcon(ICON) .setFragmentName(FRAGMENT_NAME)