Remove sub-text from slice builder
We would like to remove all sub-text from Settings Search. But slice
view does not support API to configure the sub-text visibility.
Therefore, the only way is to remove the sub-text from slices directly.
Since Settings slices are also invoked by other apps, we can not
directly remove the sub-text.
Finally, we decide to check the caller's uid. If it comes from Settings
Search, we will return the slice without the sub-text.
Bug: 143118037
Test: visual, robotests
Change-Id: Iac72f1683a2c930592634e0599058890d86f669d
diff --git a/src/com/android/settings/Utils.java b/src/com/android/settings/Utils.java
index e8eb8ba..2391fe8 100644
--- a/src/com/android/settings/Utils.java
+++ b/src/com/android/settings/Utils.java
@@ -57,6 +57,7 @@
import android.net.Network;
import android.net.wifi.WifiManager;
import android.os.BatteryManager;
+import android.os.Binder;
import android.os.Build;
import android.os.Bundle;
import android.os.IBinder;
@@ -1089,4 +1090,15 @@
}
return f;
}
+
+ /**
+ * Returns true if current binder uid is Settings Intelligence.
+ */
+ public static boolean isSettingsIntelligence(Context context) {
+ final int callingUid = Binder.getCallingUid();
+ final String callingPackage = context.getPackageManager().getPackagesForUid(callingUid)[0];
+ final boolean isSettingsIntelligence = TextUtils.equals(callingPackage,
+ context.getString(R.string.config_settingsintelligence_package_name));
+ return isSettingsIntelligence;
+ }
}
diff --git a/src/com/android/settings/network/telephony/MobileDataSlice.java b/src/com/android/settings/network/telephony/MobileDataSlice.java
index b76eb38..c3b08d3 100644
--- a/src/com/android/settings/network/telephony/MobileDataSlice.java
+++ b/src/com/android/settings/network/telephony/MobileDataSlice.java
@@ -96,15 +96,18 @@
ListBuilder.ICON_IMAGE, title);
final SliceAction toggleSliceAction = SliceAction.createToggle(toggleAction,
null /* actionTitle */, isMobileDataEnabled());
+ final ListBuilder.RowBuilder rowBuilder = new ListBuilder.RowBuilder()
+ .setTitle(title)
+ .addEndItem(toggleSliceAction)
+ .setPrimaryAction(primarySliceAction);
+ if (!Utils.isSettingsIntelligence(mContext)) {
+ rowBuilder.setSubtitle(summary);
+ }
final ListBuilder listBuilder = new ListBuilder(mContext, getUri(),
ListBuilder.INFINITY)
.setAccentColor(color)
- .addRow(new ListBuilder.RowBuilder()
- .setTitle(title)
- .setSubtitle(summary)
- .addEndItem(toggleSliceAction)
- .setPrimaryAction(primarySliceAction));
+ .addRow(rowBuilder);
return listBuilder.build();
}
diff --git a/src/com/android/settings/notification/zen/ZenModeSliceBuilder.java b/src/com/android/settings/notification/zen/ZenModeSliceBuilder.java
index fe1e204..c9a203e 100644
--- a/src/com/android/settings/notification/zen/ZenModeSliceBuilder.java
+++ b/src/com/android/settings/notification/zen/ZenModeSliceBuilder.java
@@ -82,15 +82,18 @@
final SliceAction toggleSliceAction = SliceAction.createToggle(toggleAction,
null /* actionTitle */,
isZenModeEnabled);
+ final RowBuilder rowBuilder = new RowBuilder()
+ .setTitle(title)
+ .addEndItem(toggleSliceAction)
+ .setPrimaryAction(primarySliceAction);
+ if (!Utils.isSettingsIntelligence(context)) {
+ rowBuilder.setSubtitle(subtitle);
+ }
return new ListBuilder(context, CustomSliceRegistry.ZEN_MODE_SLICE_URI,
ListBuilder.INFINITY)
.setAccentColor(color)
- .addRow(new RowBuilder()
- .setTitle(title)
- .setSubtitle(subtitle)
- .addEndItem(toggleSliceAction)
- .setPrimaryAction(primarySliceAction))
+ .addRow(rowBuilder)
.build();
}
diff --git a/src/com/android/settings/slices/SliceBuilderUtils.java b/src/com/android/settings/slices/SliceBuilderUtils.java
index 34c0f1b..2d5b4aa 100644
--- a/src/com/android/settings/slices/SliceBuilderUtils.java
+++ b/src/com/android/settings/slices/SliceBuilderUtils.java
@@ -241,16 +241,19 @@
final SliceAction sliceAction = getToggleAction(context, sliceData,
toggleController.isChecked());
final Set<String> keywords = buildSliceKeywords(sliceData);
+ final RowBuilder rowBuilder = new RowBuilder()
+ .setTitle(sliceData.getTitle())
+ .setPrimaryAction(
+ SliceAction.createDeeplink(contentIntent, icon,
+ ListBuilder.ICON_IMAGE, sliceData.getTitle()))
+ .addEndItem(sliceAction);
+ if (!Utils.isSettingsIntelligence(context)) {
+ rowBuilder.setSubtitle(subtitleText);
+ }
return new ListBuilder(context, sliceData.getUri(), ListBuilder.INFINITY)
.setAccentColor(color)
- .addRow(new RowBuilder()
- .setTitle(sliceData.getTitle())
- .setSubtitle(subtitleText)
- .setPrimaryAction(
- SliceAction.createDeeplink(contentIntent, icon,
- ListBuilder.ICON_IMAGE, sliceData.getTitle()))
- .addEndItem(sliceAction))
+ .addRow(rowBuilder)
.setKeywords(keywords)
.build();
}
@@ -262,16 +265,19 @@
final CharSequence subtitleText = getSubtitleText(context, controller, sliceData);
@ColorInt final int color = Utils.getColorAccentDefaultColor(context);
final Set<String> keywords = buildSliceKeywords(sliceData);
+ final RowBuilder rowBuilder = new RowBuilder()
+ .setTitle(sliceData.getTitle())
+ .setPrimaryAction(
+ SliceAction.createDeeplink(contentIntent, icon,
+ ListBuilder.ICON_IMAGE,
+ sliceData.getTitle()));
+ if (!Utils.isSettingsIntelligence(context)) {
+ rowBuilder.setSubtitle(subtitleText);
+ }
return new ListBuilder(context, sliceData.getUri(), ListBuilder.INFINITY)
.setAccentColor(color)
- .addRow(new RowBuilder()
- .setTitle(sliceData.getTitle())
- .setSubtitle(subtitleText)
- .setPrimaryAction(
- SliceAction.createDeeplink(contentIntent, icon,
- ListBuilder.ICON_IMAGE,
- sliceData.getTitle())))
+ .addRow(rowBuilder)
.setKeywords(keywords)
.build();
}
@@ -301,7 +307,6 @@
}
final InputRangeBuilder inputRangeBuilder = new InputRangeBuilder()
.setTitle(sliceData.getTitle())
- .setSubtitle(subtitleText)
.setPrimaryAction(primaryAction)
.setMax(sliderController.getMax())
.setMin(sliderController.getMin())
@@ -311,6 +316,9 @@
inputRangeBuilder.setTitleItem(icon, ListBuilder.ICON_IMAGE);
color = CustomSliceable.COLOR_NOT_TINTED;
}
+ if (!Utils.isSettingsIntelligence(context)) {
+ inputRangeBuilder.setSubtitle(subtitleText);
+ }
return new ListBuilder(context, sliceData.getUri(), ListBuilder.INFINITY)
.setAccentColor(color)
@@ -330,14 +338,17 @@
final CharSequence subtitleText = getSubtitleText(context, controller, sliceData);
@ColorInt final int color = Utils.getColorAccentDefaultColor(context);
final Set<String> keywords = buildSliceKeywords(sliceData);
+ final RowBuilder rowBuilder = new RowBuilder()
+ .setTitle(sliceData.getTitle())
+ .setPrimaryAction(primaryAction)
+ .addEndItem(copyableAction);
+ if (!Utils.isSettingsIntelligence(context)) {
+ rowBuilder.setSubtitle(subtitleText);
+ }
return new ListBuilder(context, sliceData.getUri(), ListBuilder.INFINITY)
.setAccentColor(color)
- .addRow(new RowBuilder()
- .setTitle(sliceData.getTitle())
- .setSubtitle(subtitleText)
- .setPrimaryAction(primaryAction)
- .addEndItem(copyableAction))
+ .addRow(rowBuilder)
.setKeywords(keywords)
.build();
}
@@ -418,14 +429,17 @@
final SliceAction primaryAction = SliceAction.createDeeplink(
getContentPendingIntent(context, data),
icon, ListBuilder.ICON_IMAGE, title);
+ final RowBuilder rowBuilder = new RowBuilder()
+ .setTitle(title)
+ .setTitleItem(icon, ListBuilder.ICON_IMAGE)
+ .setPrimaryAction(primaryAction);
+ if (!Utils.isSettingsIntelligence(context)) {
+ rowBuilder.setSubtitle(subtitle);
+ }
return new ListBuilder(context, data.getUri(), ListBuilder.INFINITY)
.setAccentColor(color)
- .addRow(new RowBuilder()
- .setTitle(title)
- .setTitleItem(icon, ListBuilder.ICON_IMAGE)
- .setSubtitle(subtitle)
- .setPrimaryAction(primaryAction))
+ .addRow(rowBuilder)
.setKeywords(keywords)
.build();
}
diff --git a/src/com/android/settings/wifi/calling/WifiCallingSliceHelper.java b/src/com/android/settings/wifi/calling/WifiCallingSliceHelper.java
index 69adf55..958db7e 100644
--- a/src/com/android/settings/wifi/calling/WifiCallingSliceHelper.java
+++ b/src/com/android/settings/wifi/calling/WifiCallingSliceHelper.java
@@ -269,14 +269,17 @@
// Top row shows information on current preference state
final ListBuilder listBuilder = new ListBuilder(mContext, sliceUri, ListBuilder.INFINITY)
.setAccentColor(Utils.getColorAccentDefaultColor(mContext));
- listBuilder.setHeader(new ListBuilder.HeaderBuilder()
+ final ListBuilder.HeaderBuilder headerBuilder = new ListBuilder.HeaderBuilder()
.setTitle(res.getText(R.string.wifi_calling_mode_title))
- .setSubtitle(getWifiCallingPreferenceSummary(currentWfcPref, subId))
.setPrimaryAction(SliceAction.createDeeplink(
getActivityIntent(ACTION_WIFI_CALLING_SETTINGS_ACTIVITY),
icon,
ListBuilder.ICON_IMAGE,
- res.getText(R.string.wifi_calling_mode_title))));
+ res.getText(R.string.wifi_calling_mode_title)));
+ if (!Utils.isSettingsIntelligence(mContext)) {
+ headerBuilder.setSubtitle(getWifiCallingPreferenceSummary(currentWfcPref, subId));
+ }
+ listBuilder.setHeader(headerBuilder);
if (isWifiOnlySupported) {
listBuilder.addRow(wifiPreferenceRowBuilder(listBuilder,
@@ -458,14 +461,17 @@
private Slice getNonActionableWifiCallingSlice(CharSequence title, CharSequence subtitle,
Uri sliceUri, PendingIntent primaryActionIntent) {
final IconCompat icon = IconCompat.createWithResource(mContext, R.drawable.wifi_signal);
+ final RowBuilder rowBuilder = new RowBuilder()
+ .setTitle(title)
+ .setPrimaryAction(SliceAction.createDeeplink(
+ primaryActionIntent, icon, ListBuilder.SMALL_IMAGE,
+ title));
+ if (!Utils.isSettingsIntelligence(mContext)) {
+ rowBuilder.setSubtitle(subtitle);
+ }
return new ListBuilder(mContext, sliceUri, ListBuilder.INFINITY)
.setAccentColor(Utils.getColorAccentDefaultColor(mContext))
- .addRow(new RowBuilder()
- .setTitle(title)
- .setSubtitle(subtitle)
- .setPrimaryAction(SliceAction.createDeeplink(
- primaryActionIntent, icon, ListBuilder.SMALL_IMAGE,
- title)))
+ .addRow(rowBuilder)
.build();
}
diff --git a/tests/robotests/src/com/android/settings/UtilsTest.java b/tests/robotests/src/com/android/settings/UtilsTest.java
index 3d3aff4..2aa8418 100644
--- a/tests/robotests/src/com/android/settings/UtilsTest.java
+++ b/tests/robotests/src/com/android/settings/UtilsTest.java
@@ -29,7 +29,6 @@
import static org.mockito.Mockito.when;
import android.app.ActionBar;
-import android.app.Activity;
import android.app.admin.DevicePolicyManager;
import android.content.ComponentName;
import android.content.Context;
@@ -67,6 +66,7 @@
import org.robolectric.Robolectric;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
+import org.robolectric.shadows.ShadowBinder;
import java.net.InetAddress;
import java.util.ArrayList;
@@ -281,4 +281,22 @@
assertThat(actionBar.getElevation()).isEqualTo(0.f);
}
+
+ @Test
+ public void isSettingsIntelligence_IsSI_returnTrue() {
+ final String siPackageName = mContext.getString(
+ R.string.config_settingsintelligence_package_name);
+ ShadowBinder.setCallingUid(USER_ID);
+ when(mPackageManager.getPackagesForUid(USER_ID)).thenReturn(new String[]{siPackageName});
+
+ assertThat(Utils.isSettingsIntelligence(mContext)).isTrue();
+ }
+
+ @Test
+ public void isSettingsIntelligence_IsNotSI_returnFalse() {
+ ShadowBinder.setCallingUid(USER_ID);
+ when(mPackageManager.getPackagesForUid(USER_ID)).thenReturn(new String[]{PACKAGE_NAME});
+
+ assertThat(Utils.isSettingsIntelligence(mContext)).isFalse();
+ }
}
diff --git a/tests/robotests/src/com/android/settings/slices/SliceBuilderUtilsTest.java b/tests/robotests/src/com/android/settings/slices/SliceBuilderUtilsTest.java
index fc82abb..33bdc61 100644
--- a/tests/robotests/src/com/android/settings/slices/SliceBuilderUtilsTest.java
+++ b/tests/robotests/src/com/android/settings/slices/SliceBuilderUtilsTest.java
@@ -23,7 +23,6 @@
import static org.mockito.Mockito.verify;
import android.app.settings.SettingsEnums;
-import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
@@ -455,37 +454,6 @@
assertThat(actualIconResource).isEqualTo(settingsIcon);
}
- @Test
- public void buildUnavailableSlice_customizeSubtitle_returnsSliceWithCustomizedSubtitle() {
- final String subtitleOfUnavailableSlice = "subtitleOfUnavailableSlice";
- final SliceData data = getDummyData(FakeUnavailablePreferenceController.class,
- SUMMARY, SliceData.SliceType.SWITCH, SCREEN_TITLE, 0 /* icon */,
- subtitleOfUnavailableSlice);
- Settings.Global.putInt(mContext.getContentResolver(),
- FakeUnavailablePreferenceController.AVAILABILITY_KEY,
- BasePreferenceController.DISABLED_DEPENDENT_SETTING);
-
- final Slice slice = SliceBuilderUtils.buildSlice(mContext, data);
-
- final SliceMetadata metadata = SliceMetadata.from(mContext, slice);
- assertThat(metadata.getSubtitle()).isEqualTo(subtitleOfUnavailableSlice);
- }
-
- @Test
- public void buildUnavailableSlice_notCustomizeSubtitle_returnsSliceWithDefaultSubtitle() {
- final SliceData data = getDummyData(FakeUnavailablePreferenceController.class,
- SliceData.SliceType.SWITCH);
- Settings.Global.putInt(mContext.getContentResolver(),
- FakeUnavailablePreferenceController.AVAILABILITY_KEY,
- BasePreferenceController.DISABLED_DEPENDENT_SETTING);
-
- final Slice slice = SliceBuilderUtils.buildSlice(mContext, data);
-
- final SliceMetadata metadata = SliceMetadata.from(mContext, slice);
- assertThat(metadata.getSubtitle()).isEqualTo(
- mContext.getString(R.string.disabled_dependent_setting_summary));
- }
-
private SliceData getDummyData() {
return getDummyData(TOGGLE_CONTROLLER, SUMMARY, SliceData.SliceType.SWITCH, SCREEN_TITLE,
ICON, null /* unavailableSliceSubtitle */);