Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c7b90ee9 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Return null when setting can't be changed." into pi-dev

parents 53f6b7cb d9613b27
Loading
Loading
Loading
Loading
+12 −35
Original line number Diff line number Diff line
@@ -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<String> keywords = buildSliceKeywords(data);
        @ColorInt final int color = Utils.getColorAccent(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)
+11 −2
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.PersistableBundle;
import android.provider.Settings;
import android.support.v4.graphics.drawable.IconCompat;
import android.telephony.CarrierConfigManager;
import android.telephony.SubscriptionManager;
@@ -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);
+3 −13
Original line number Diff line number Diff line
@@ -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);
    }
+2 −14
Original line number Diff line number Diff line
@@ -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<SliceItem> sliceItems = slice.getItems();
        assertTitle(sliceItems, sliceData.getTitle());
+2 −2
Original line number Diff line number Diff line
@@ -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