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

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

Merge "Update Slice APIs to current versions" into pi-dev

parents 96d4cd3c f9f72e8c
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();