diff --git a/src/com/android/settings/slices/SliceBuilderUtils.java b/src/com/android/settings/slices/SliceBuilderUtils.java index 0913e2ab159..87870c76786 100644 --- a/src/com/android/settings/slices/SliceBuilderUtils.java +++ b/src/com/android/settings/slices/SliceBuilderUtils.java @@ -86,8 +86,13 @@ public class SliceBuilderUtils { FeatureFactory.getFactory(context).getMetricsFeatureProvider() .action(context, MetricsEvent.ACTION_SETTINGS_SLICE_REQUESTED, sliceNamePair); - if (controller.getAvailabilityStatus() != AVAILABLE) { - return buildUnavailableSlice(context, sliceData, controller); + if (!controller.isAvailable()) { + // Cannot guarantee setting page is accessible, let the presenter handle error case. + return null; + } + + if (controller.getAvailabilityStatus() == DISABLED_DEPENDENT_SETTING) { + return buildUnavailableSlice(context, sliceData); } switch (sliceData.getSliceType()) { @@ -176,14 +181,6 @@ public class SliceBuilderUtils { return PendingIntent.getActivity(context, 0 /* requestCode */, intent, 0 /* flags */); } - /** - * @return {@link PendingIntent} to the Settings home page. - */ - public static PendingIntent getSettingsIntent(Context context) { - final Intent intent = new Intent(Settings.ACTION_SETTINGS); - return PendingIntent.getActivity(context, 0 /* requestCode */, intent, 0 /* flags */); - } - /** * @return the summary text for a {@link Slice} built for {@param sliceData}. */ @@ -355,40 +352,20 @@ public class SliceBuilderUtils { return keywords; } - private static Slice buildUnavailableSlice(Context context, SliceData data, - BasePreferenceController controller) { + private static Slice buildUnavailableSlice(Context context, SliceData data) { final String title = data.getTitle(); final List keywords = buildSliceKeywords(data); @ColorInt final int color = Utils.getColorAccentDefaultColor(context); - final String summary; - final SliceAction primaryAction; + final CharSequence summary = context.getText(R.string.disabled_dependent_setting_summary); final IconCompat icon = IconCompat.createWithResource(context, data.getIconResource()); - - switch (controller.getAvailabilityStatus()) { - case UNSUPPORTED_ON_DEVICE: - summary = context.getString(R.string.unsupported_setting_summary); - primaryAction = new SliceAction(getSettingsIntent(context), icon, title); - break; - case DISABLED_FOR_USER: - summary = context.getString(R.string.disabled_for_user_setting_summary); - primaryAction = new SliceAction(getContentPendingIntent(context, data), icon, - title); - break; - case DISABLED_DEPENDENT_SETTING: - summary = context.getString(R.string.disabled_dependent_setting_summary); - primaryAction = new SliceAction(getContentPendingIntent(context, data), icon, - title); - break; - case CONDITIONALLY_UNAVAILABLE: - default: - summary = context.getString(R.string.unknown_unavailability_setting_summary); - primaryAction = new SliceAction(getSettingsIntent(context), icon, title); - } + final SliceAction primaryAction = new SliceAction(getContentPendingIntent(context, data), + icon, title); return new ListBuilder(context, data.getUri(), ListBuilder.INFINITY) .setAccentColor(color) .addRow(builder -> builder .setTitle(title) + .setTitleItem(icon) .setSubtitle(summary) .setPrimaryAction(primaryAction)) .setKeywords(keywords) diff --git a/src/com/android/settings/wifi/calling/WifiCallingSliceHelper.java b/src/com/android/settings/wifi/calling/WifiCallingSliceHelper.java index 9847d4a468f..e8e33ef0531 100644 --- a/src/com/android/settings/wifi/calling/WifiCallingSliceHelper.java +++ b/src/com/android/settings/wifi/calling/WifiCallingSliceHelper.java @@ -25,13 +25,14 @@ import android.content.Context; import android.content.Intent; import android.net.Uri; import android.os.PersistableBundle; -import androidx.core.graphics.drawable.IconCompat; +import android.provider.Settings; import android.telephony.CarrierConfigManager; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; import android.text.TextUtils; import android.util.Log; +import androidx.core.graphics.drawable.IconCompat; import androidx.slice.Slice; import androidx.slice.builders.ListBuilder; import androidx.slice.builders.SliceAction; @@ -121,7 +122,7 @@ public class WifiCallingSliceHelper { return getNonActionableWifiCallingSlice( mContext.getString(R.string.wifi_calling_settings_title), mContext.getString(R.string.wifi_calling_not_supported, carrierName), - sliceUri, SliceBuilderUtils.getSettingsIntent(mContext)); + sliceUri, getSettingsIntent(mContext)); } final ImsManager imsManager = getImsManager(subId); @@ -132,7 +133,7 @@ public class WifiCallingSliceHelper { return getNonActionableWifiCallingSlice( mContext.getString(R.string.wifi_calling_settings_title), mContext.getString(R.string.wifi_calling_not_supported, carrierName), - sliceUri, SliceBuilderUtils.getSettingsIntent(mContext)); + sliceUri, getSettingsIntent(mContext)); } try { @@ -338,6 +339,14 @@ public class WifiCallingSliceHelper { return intent; } + /** + * @return {@link PendingIntent} to the Settings home page. + */ + public static PendingIntent getSettingsIntent(Context context) { + final Intent intent = new Intent(Settings.ACTION_SETTINGS); + return PendingIntent.getActivity(context, 0 /* requestCode */, intent, 0 /* flags */); + } + private PendingIntent getBroadcastIntent(String action) { final Intent intent = new Intent(action); intent.setClass(mContext, SliceBroadcastReceiver.class); diff --git a/tests/robotests/src/com/android/settings/slices/SliceBuilderUtilsTest.java b/tests/robotests/src/com/android/settings/slices/SliceBuilderUtilsTest.java index 00e8fe17d08..96e475e9fbe 100644 --- a/tests/robotests/src/com/android/settings/slices/SliceBuilderUtilsTest.java +++ b/tests/robotests/src/com/android/settings/slices/SliceBuilderUtilsTest.java @@ -336,7 +336,7 @@ public class SliceBuilderUtilsTest { final Slice slice = SliceBuilderUtils.buildSlice(mContext, data); - SliceTester.testSettingsUnavailableSlice(mContext, slice, data); + assertThat(slice).isNull(); } @Test @@ -349,7 +349,7 @@ public class SliceBuilderUtilsTest { final Slice slice = SliceBuilderUtils.buildSlice(mContext, data); - SliceTester.testSettingsUnavailableSlice(mContext, slice, data); + assertThat(slice).isNull(); } @Test @@ -394,7 +394,7 @@ public class SliceBuilderUtilsTest { .isEqualTo(MetricsEvent.FIELD_SETTINGS_PREFERENCE_CHANGE_NAME); assertThat(capturedLoggingPair.second) .isEqualTo(data.getKey()); - SliceTester.testSettingsUnavailableSlice(mContext, slice, data); + assertThat(slice).isNull(); } @Test @@ -408,16 +408,6 @@ public class SliceBuilderUtilsTest { assertThat(intentData).isEqualTo(expectedUri); } - @Test - public void getSettingsIntent_createsIntentToSettings() { - final Intent intent = new Intent(Settings.ACTION_SETTINGS); - final PendingIntent expectedIntent = PendingIntent.getActivity(mContext, 0, intent, 0); - - final PendingIntent settingsIntent = SliceBuilderUtils.getSettingsIntent(mContext); - - assertThat(expectedIntent).isEqualTo(settingsIntent); - } - private SliceData getDummyData() { return getDummyData(TOGGLE_CONTROLLER, SUMMARY, SliceData.SliceType.SWITCH, SCREEN_TITLE); } diff --git a/tests/robotests/src/com/android/settings/testutils/SliceTester.java b/tests/robotests/src/com/android/settings/testutils/SliceTester.java index e92d2a06c18..c3124d832b4 100644 --- a/tests/robotests/src/com/android/settings/testutils/SliceTester.java +++ b/tests/robotests/src/com/android/settings/testutils/SliceTester.java @@ -191,20 +191,8 @@ public class SliceTester { assertThat(toggles).isEmpty(); final PendingIntent primaryPendingIntent = metadata.getPrimaryAction().getAction(); - final int availabilityStatus = SliceBuilderUtils.getPreferenceController(context, - sliceData).getAvailabilityStatus(); - switch (availabilityStatus) { - case UNSUPPORTED_ON_DEVICE: - case CONDITIONALLY_UNAVAILABLE: - assertThat(primaryPendingIntent).isEqualTo( - SliceBuilderUtils.getSettingsIntent(context)); - break; - case DISABLED_FOR_USER: - case DISABLED_DEPENDENT_SETTING: - assertThat(primaryPendingIntent).isEqualTo( - SliceBuilderUtils.getContentPendingIntent(context, sliceData)); - break; - } + assertThat(primaryPendingIntent).isEqualTo(SliceBuilderUtils.getContentPendingIntent( + context, sliceData)); final List sliceItems = slice.getItems(); assertTitle(sliceItems, sliceData.getTitle()); diff --git a/tests/robotests/src/com/android/settings/wifi/calling/WifiCallingSliceHelperTest.java b/tests/robotests/src/com/android/settings/wifi/calling/WifiCallingSliceHelperTest.java index ac3ff3ff635..21f6daa3428 100644 --- a/tests/robotests/src/com/android/settings/wifi/calling/WifiCallingSliceHelperTest.java +++ b/tests/robotests/src/com/android/settings/wifi/calling/WifiCallingSliceHelperTest.java @@ -114,7 +114,7 @@ public class WifiCallingSliceHelperTest { final Slice slice = mWfcSliceHelper.createWifiCallingSlice(mWfcURI); testWifiCallingSettingsUnavailableSlice(slice, null, - SliceBuilderUtils.getSettingsIntent(mContext)); + WifiCallingSliceHelper.getSettingsIntent(mContext)); } @Test @@ -125,7 +125,7 @@ public class WifiCallingSliceHelperTest { assertThat(mWfcSliceHelper.getDefaultVoiceSubId()).isEqualTo(1); testWifiCallingSettingsUnavailableSlice(slice, null, - SliceBuilderUtils.getSettingsIntent(mContext)); + WifiCallingSliceHelper.getSettingsIntent(mContext)); } @Test