diff --git a/src/com/android/settings/Utils.java b/src/com/android/settings/Utils.java index e8eb8baadb0..2391fe8cc40 100644 --- a/src/com/android/settings/Utils.java +++ b/src/com/android/settings/Utils.java @@ -57,6 +57,7 @@ import android.net.LinkProperties; 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 @@ public final class Utils extends com.android.settingslib.Utils { } 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 b76eb3814cf..c3b08d38bfa 100644 --- a/src/com/android/settings/network/telephony/MobileDataSlice.java +++ b/src/com/android/settings/network/telephony/MobileDataSlice.java @@ -96,15 +96,18 @@ public class MobileDataSlice implements CustomSliceable { 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 fe1e20461e9..c9a203e2f4c 100644 --- a/src/com/android/settings/notification/zen/ZenModeSliceBuilder.java +++ b/src/com/android/settings/notification/zen/ZenModeSliceBuilder.java @@ -82,15 +82,18 @@ public class ZenModeSliceBuilder { 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 34c0f1b5ff2..2d5b4aa39a2 100644 --- a/src/com/android/settings/slices/SliceBuilderUtils.java +++ b/src/com/android/settings/slices/SliceBuilderUtils.java @@ -241,16 +241,19 @@ public class SliceBuilderUtils { final SliceAction sliceAction = getToggleAction(context, sliceData, toggleController.isChecked()); final Set 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 @@ public class SliceBuilderUtils { final CharSequence subtitleText = getSubtitleText(context, controller, sliceData); @ColorInt final int color = Utils.getColorAccentDefaultColor(context); final Set 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 @@ public class SliceBuilderUtils { } final InputRangeBuilder inputRangeBuilder = new InputRangeBuilder() .setTitle(sliceData.getTitle()) - .setSubtitle(subtitleText) .setPrimaryAction(primaryAction) .setMax(sliderController.getMax()) .setMin(sliderController.getMin()) @@ -311,6 +316,9 @@ public class SliceBuilderUtils { 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 @@ public class SliceBuilderUtils { final CharSequence subtitleText = getSubtitleText(context, controller, sliceData); @ColorInt final int color = Utils.getColorAccentDefaultColor(context); final Set 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 @@ public class SliceBuilderUtils { 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 69adf55be9c..958db7ebd8d 100644 --- a/src/com/android/settings/wifi/calling/WifiCallingSliceHelper.java +++ b/src/com/android/settings/wifi/calling/WifiCallingSliceHelper.java @@ -269,14 +269,17 @@ public class WifiCallingSliceHelper { // 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 @@ public class WifiCallingSliceHelper { 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 3d3aff46e69..2aa8418227f 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.verify; 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.mockito.MockitoAnnotations; 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 @@ public class UtilsTest { 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 fc82abb21f2..33bdc61cd85 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.spy; 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 @@ public class SliceBuilderUtilsTest { 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 */);