import static com.android.settings.slices.SettingsSliceProvider.EXTRA_SLICE_KEY;
import static com.android.settings.slices.SettingsSliceProvider.EXTRA_SLICE_PLATFORM_DEFINED;
+import android.annotation.ColorInt;
import android.app.PendingIntent;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
-import android.content.pm.PackageManager;
import android.net.Uri;
import android.provider.Settings;
import android.provider.SettingsSlicesContract;
import com.android.settings.R;
import com.android.settings.SettingsActivity;
import com.android.settings.SubSettings;
+import com.android.settings.Utils;
import com.android.settings.core.BasePreferenceController;
import com.android.settings.core.SliderPreferenceController;
import com.android.settings.core.TogglePreferenceController;
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}.
*
final PendingIntent contentIntent = getContentPendingIntent(context, sliceData);
final IconCompat icon = IconCompat.createWithResource(context, sliceData.getIconResource());
final CharSequence subtitleText = getSubtitleText(context, controller, sliceData);
+ @ColorInt final int color = Utils.getColorAccent(context);
final TogglePreferenceController toggleController =
(TogglePreferenceController) controller;
final SliceAction sliceAction = getToggleAction(context, sliceData,
toggleController.isChecked());
final List<String> keywords = buildSliceKeywords(sliceData);
- return new ListBuilder(context, sliceData.getUri(), SLICE_TTL_MILLIS)
+ return new ListBuilder(context, sliceData.getUri(), ListBuilder.INFINITY)
+ .setAccentColor(color)
.addRow(rowBuilder -> rowBuilder
.setTitle(sliceData.getTitle())
.setSubtitle(subtitleText)
final PendingIntent contentIntent = getContentPendingIntent(context, sliceData);
final IconCompat icon = IconCompat.createWithResource(context, sliceData.getIconResource());
final CharSequence subtitleText = getSubtitleText(context, controller, sliceData);
+ @ColorInt final int color = Utils.getColorAccent(context);
final List<String> keywords = buildSliceKeywords(sliceData);
- return new ListBuilder(context, sliceData.getUri(), SLICE_TTL_MILLIS)
+ return new ListBuilder(context, sliceData.getUri(), ListBuilder.INFINITY)
+ .setAccentColor(color)
.addRow(rowBuilder -> rowBuilder
.setTitle(sliceData.getTitle())
.setSubtitle(subtitleText)
final PendingIntent actionIntent = getSliderAction(context, sliceData);
final PendingIntent contentIntent = getContentPendingIntent(context, sliceData);
final IconCompat icon = IconCompat.createWithResource(context, sliceData.getIconResource());
+ @ColorInt final int color = Utils.getColorAccent(context);
final SliceAction primaryAction = new SliceAction(contentIntent, icon,
sliceData.getTitle());
final List<String> keywords = buildSliceKeywords(sliceData);
- return new ListBuilder(context, sliceData.getUri(), SLICE_TTL_MILLIS)
+ return new ListBuilder(context, sliceData.getUri(), ListBuilder.INFINITY)
+ .setAccentColor(color)
.addInputRange(builder -> builder
.setTitle(sliceData.getTitle())
.setMax(sliderController.getMaxSteps())
BasePreferenceController controller) {
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 IconCompat icon = IconCompat.createWithResource(context, data.getIconResource());
primaryAction = new SliceAction(getSettingsIntent(context), icon, title);
}
- return new ListBuilder(context, data.getUri(), SLICE_TTL_MILLIS)
+ return new ListBuilder(context, data.getUri(), ListBuilder.INFINITY)
+ .setAccentColor(color)
.addRow(builder -> builder
.setTitle(title)
.setSubtitle(summary)
package com.android.settings.testutils;
import static android.app.slice.Slice.HINT_TITLE;
+import static android.app.slice.Slice.SUBTYPE_COLOR;
+import static android.app.slice.SliceItem.FORMAT_INT;
import static android.app.slice.SliceItem.FORMAT_TEXT;
import static com.android.settings.core.BasePreferenceController.CONDITIONALLY_UNAVAILABLE;
import androidx.slice.Slice;
import androidx.slice.SliceItem;
import androidx.slice.SliceMetadata;
+import androidx.slice.builders.ListBuilder;
import androidx.slice.core.SliceAction;
import androidx.slice.core.SliceQuery;
import android.support.v4.graphics.drawable.IconCompat;
+import com.android.settings.Utils;
import com.android.settings.slices.SettingsSliceProvider;
import com.android.settings.slices.SliceBuilderUtils;
import com.android.settings.slices.SliceData;
* - Correct intent
* - Correct title
* - Correct keywords
+ * - TTL
+ * - Color
*/
public static void testSettingsIntentSlice(Context context, Slice slice, SliceData sliceData) {
final SliceMetadata metadata = SliceMetadata.from(context, slice);
+ final long sliceTTL = metadata.getExpiry();
+ assertThat(sliceTTL).isEqualTo(ListBuilder.INFINITY);
+
+ final SliceItem colorItem = SliceQuery.findSubtype(slice, FORMAT_INT, SUBTYPE_COLOR);
+ final int color = colorItem.getInt();
+ assertThat(color).isEqualTo(Utils.getColorAccent(context));
+
final List<SliceAction> toggles = metadata.getToggles();
assertThat(toggles).isEmpty();
* - Correct content intent
* - Correct title
* - Correct keywords
+ * - TTL
+ * - Color
*/
public static void testSettingsToggleSlice(Context context, Slice slice, SliceData sliceData) {
final SliceMetadata metadata = SliceMetadata.from(context, slice);
+ final SliceItem colorItem = SliceQuery.findSubtype(slice, FORMAT_INT, SUBTYPE_COLOR);
+ final int color = colorItem.getInt();
+ assertThat(color).isEqualTo(Utils.getColorAccent(context));
+
final List<SliceAction> toggles = metadata.getToggles();
assertThat(toggles).hasSize(1);
+ final long sliceTTL = metadata.getExpiry();
+ assertThat(sliceTTL).isEqualTo(ListBuilder.INFINITY);
+
final SliceAction mainToggleAction = toggles.get(0);
final IconCompat expectedToggleIcon = IconCompat.createWithResource(context,
* - No intent
* - Correct title
* - Correct keywords
+ * - TTL
+ * - Color
*/
public static void testSettingsSliderSlice(Context context, Slice slice, SliceData sliceData) {
final SliceMetadata metadata = SliceMetadata.from(context, slice);
+ final SliceItem colorItem = SliceQuery.findSubtype(slice, FORMAT_INT, SUBTYPE_COLOR);
+ final int color = colorItem.getInt();
+ assertThat(color).isEqualTo(Utils.getColorAccent(context));
+
final IconCompat expectedToggleIcon = IconCompat.createWithResource(context,
sliceData.getIconResource());
+ final long sliceTTL = metadata.getExpiry();
+ assertThat(sliceTTL).isEqualTo(ListBuilder.INFINITY);
+
// Check primary intent
final PendingIntent primaryPendingIntent = metadata.getPrimaryAction().getAction();
assertThat(primaryPendingIntent).isEqualTo(
* - Correct title
* - Correct intent
* - Correct keywords
+ * - Color
+ * - TTL
*/
public static void testSettingsUnavailableSlice(Context context, Slice slice,
SliceData sliceData) {
final SliceMetadata metadata = SliceMetadata.from(context, slice);
+ final long sliceTTL = metadata.getExpiry();
+ assertThat(sliceTTL).isEqualTo(ListBuilder.INFINITY);
+
+ final SliceItem colorItem = SliceQuery.findSubtype(slice, FORMAT_INT, SUBTYPE_COLOR);
+ final int color = colorItem.getInt();
+ assertThat(color).isEqualTo(Utils.getColorAccent(context));
+
final List<SliceAction> toggles = metadata.getToggles();
assertThat(toggles).isEmpty();