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

Commit f9f72e8c authored by Matthew Fritze's avatar Matthew Fritze
Browse files

Update Slice APIs to current versions

Change-Id: Icf40673e518534487be77f33427df937717735e5
Fixes: 77982356
Test: robotests
parent 0468f68c
Loading
Loading
Loading
Loading
+7 −7
Original line number Diff line number Diff line
@@ -59,10 +59,11 @@ public class SliceBroadcastReceiver extends BroadcastReceiver {

        switch (action) {
            case ACTION_TOGGLE_CHANGED:
                handleToggleAction(context, key, isPlatformSlice);
                final boolean isChecked = intent.getBooleanExtra(Slice.EXTRA_TOGGLE_STATE, false);
                handleToggleAction(context, key, isChecked, isPlatformSlice);
                break;
            case ACTION_SLIDER_CHANGED:
                int newPosition = intent.getIntExtra(Slice.EXTRA_RANGE_VALUE, -1);
                final int newPosition = intent.getIntExtra(Slice.EXTRA_RANGE_VALUE, -1);
                handleSliderAction(context, key, newPosition, isPlatformSlice);
                break;
            case ACTION_WIFI_CHANGED:
@@ -81,7 +82,8 @@ public class SliceBroadcastReceiver extends BroadcastReceiver {
        }
    }

    private void handleToggleAction(Context context, String key, boolean isPlatformSlice) {
    private void handleToggleAction(Context context, String key, boolean isChecked,
            boolean isPlatformSlice) {
        if (TextUtils.isEmpty(key)) {
            throw new IllegalStateException("No key passed to Intent for toggle controller");
        }
@@ -101,10 +103,8 @@ public class SliceBroadcastReceiver extends BroadcastReceiver {
        // TODO post context.getContentResolver().notifyChanged(uri, null) in the Toggle controller
        // so that it's automatically broadcast to any slice.
        final TogglePreferenceController toggleController = (TogglePreferenceController) controller;
        final boolean currentValue = toggleController.isChecked();
        final boolean newValue = !currentValue;
        toggleController.setChecked(newValue);
        logSliceValueChange(context, key, newValue ? 1 : 0);
        toggleController.setChecked(isChecked);
        logSliceValueChange(context, key, isChecked ? 1 : 0);
        updateUri(context, key, isPlatformSlice);
    }

+28 −25
Original line number Diff line number Diff line
@@ -16,8 +16,6 @@

package com.android.settings.slices;

import static androidx.slice.builders.ListBuilder.ICON_IMAGE;

import static com.android.settings.core.BasePreferenceController.AVAILABLE;
import static com.android.settings.core.BasePreferenceController.DISABLED_DEPENDENT_SETTING;
import static com.android.settings.core.BasePreferenceController.DISABLED_FOR_USER;
@@ -31,7 +29,6 @@ import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.drawable.Icon;
import android.net.Uri;
import android.provider.SettingsSlicesContract;
import android.text.TextUtils;
@@ -63,6 +60,9 @@ public class SliceBuilderUtils {

    private static final String TAG = "SliceBuilder";

    // A Slice should not be store for longer than 60,000 milliseconds / 1 minute.
    public static final long SLICE_TTL_MILLIS = 60000;

    /**
     * Build a Slice from {@link SliceData}.
     *
@@ -225,19 +225,19 @@ public class SliceBuilderUtils {
    private static Slice buildToggleSlice(Context context, SliceData sliceData,
            BasePreferenceController controller) {
        final PendingIntent contentIntent = getContentPendingIntent(context, sliceData);
        final Icon icon = Icon.createWithResource(context, sliceData.getIconResource());
        final IconCompat icon = IconCompat.createWithResource(context, sliceData.getIconResource());
        final CharSequence subtitleText = getSubtitleText(context, controller, sliceData);
        final TogglePreferenceController toggleController =
                (TogglePreferenceController) controller;
        final SliceAction sliceAction = getToggleAction(context, sliceData,
                toggleController.isChecked());

        return new ListBuilder(context, sliceData.getUri())
        return new ListBuilder(context, sliceData.getUri(), SLICE_TTL_MILLIS)
                .addRow(rowBuilder -> rowBuilder
                        .setTitle(sliceData.getTitle())
                        .setTitleItem(icon, ICON_IMAGE)
                        .setSubtitle(subtitleText)
                        .setPrimaryAction(new SliceAction(contentIntent, (IconCompat) null, null))
                        .setPrimaryAction(
                                new SliceAction(contentIntent, icon, sliceData.getTitle()))
                        .addEndItem(sliceAction))
                .build();
    }
@@ -245,29 +245,34 @@ public class SliceBuilderUtils {
    private static Slice buildIntentSlice(Context context, SliceData sliceData,
            BasePreferenceController controller) {
        final PendingIntent contentIntent = getContentPendingIntent(context, sliceData);
        final Icon icon = Icon.createWithResource(context, sliceData.getIconResource());
        final IconCompat icon = IconCompat.createWithResource(context, sliceData.getIconResource());
        final CharSequence subtitleText = getSubtitleText(context, controller, sliceData);

        return new ListBuilder(context, sliceData.getUri())
        return new ListBuilder(context, sliceData.getUri(), SLICE_TTL_MILLIS)
                .addRow(rowBuilder -> rowBuilder
                        .setTitle(sliceData.getTitle())
                        .setTitleItem(icon, ICON_IMAGE)
                        .setSubtitle(subtitleText)
                        .setPrimaryAction(new SliceAction(contentIntent, (IconCompat) null, null)))
                        .setPrimaryAction(
                                new SliceAction(contentIntent, icon, sliceData.getTitle())))
                .build();
    }

    private static Slice buildSliderSlice(Context context, SliceData sliceData,
            BasePreferenceController controller) {
        final SliderPreferenceController sliderController =
                (SliderPreferenceController) controller;
        final SliderPreferenceController sliderController = (SliderPreferenceController) controller;
        final PendingIntent actionIntent = getSliderAction(context, sliceData);
        return new ListBuilder(context, sliceData.getUri())
        final PendingIntent contentIntent = getContentPendingIntent(context, sliceData);
        final IconCompat icon = IconCompat.createWithResource(context, sliceData.getIconResource());
        final SliceAction primaryAction = new SliceAction(contentIntent, icon,
                sliceData.getTitle());

        return new ListBuilder(context, sliceData.getUri(), SLICE_TTL_MILLIS)
                .addInputRange(builder -> builder
                        .setTitle(sliceData.getTitle())
                        .setMax(sliderController.getMaxSteps())
                        .setValue(sliderController.getSliderPosition())
                        .setAction(actionIntent))
                        .setInputAction(actionIntent)
                        .setPrimaryAction(primaryAction))
                .build();
    }

@@ -311,32 +316,30 @@ public class SliceBuilderUtils {
        final String title = data.getTitle();
        final String summary;
        final SliceAction primaryAction;
        final IconCompat icon = IconCompat.createWithResource(context, data.getIconResource());

        switch (controller.getAvailabilityStatus()) {
            case DISABLED_UNSUPPORTED:
                summary = context.getString(R.string.unsupported_setting_summary);
                primaryAction = new SliceAction(getSettingsIntent(context),
                        (IconCompat) null /* actionIcon */,
                        null /* actionTitle */);
                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),
                        (IconCompat) null /* actionIcon */, null /* actionTitle */);
                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),
                        (IconCompat) null /* actionIcon */, null /* actionTitle */);
                primaryAction = new SliceAction(getContentPendingIntent(context, data), icon,
                        title);
                break;
            case UNAVAILABLE_UNKNOWN:
            default:
                summary = context.getString(R.string.unknown_unavailability_setting_summary);
                primaryAction = new SliceAction(getSettingsIntent(context),
                        (IconCompat) null /* actionIcon */, null /* actionTitle */);
                primaryAction = new SliceAction(getSettingsIntent(context), icon, title);
        }

        return new ListBuilder(context, data.getUri())
        return new ListBuilder(context, data.getUri(), SLICE_TTL_MILLIS)
                .addRow(builder -> builder
                        .setTitle(title)
                        .setSubtitle(summary)
+11 −6
Original line number Diff line number Diff line
@@ -115,8 +115,9 @@ public class SliceTester {
                sliceData.getIconResource());

        // Check primary intent
        final SliceAction primaryAction = metadata.getPrimaryAction();
        assertThat(primaryAction).isNull();
        final PendingIntent primaryPendingIntent = metadata.getPrimaryAction().getAction();
        assertThat(primaryPendingIntent).isEqualTo(
                SliceBuilderUtils.getContentPendingIntent(context, sliceData));

        final List<SliceItem> sliceItems = slice.getItems();
        assertTitle(sliceItems, sliceData.getTitle());
@@ -158,11 +159,15 @@ public class SliceTester {
    private static void assertTitle(List<SliceItem> sliceItems, String title) {
        boolean hasTitle = false;
        for (SliceItem item : sliceItems) {
            List<SliceItem> titles = SliceQuery.findAll(item, FORMAT_TEXT, HINT_TITLE,
            List<SliceItem> titleItems = SliceQuery.findAll(item, FORMAT_TEXT, HINT_TITLE,
                    null /* non-hints */);
            if (titles != null & titles.size() == 1) {
                assertThat(titles.get(0).getText()).isEqualTo(title);
            if (titleItems == null) {
                continue;
            }

            hasTitle = true;
            for (SliceItem subTitleItem : titleItems) {
                assertThat(subTitleItem.getText()).isEqualTo(title);
            }
        }
        assertThat(hasTitle).isTrue();