Merge "Update Slice APIs to current versions" into pi-dev am: ff2653a0d8
am: a69121d654
Change-Id: I6ca82c2b9b83c6cbb623548eee3aa910b4c59687
diff --git a/src/com/android/settings/slices/SliceBroadcastReceiver.java b/src/com/android/settings/slices/SliceBroadcastReceiver.java
index d2a6d10..47a7f5a 100644
--- a/src/com/android/settings/slices/SliceBroadcastReceiver.java
+++ b/src/com/android/settings/slices/SliceBroadcastReceiver.java
@@ -59,10 +59,11 @@
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 @@
}
}
- 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 @@
// 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);
}
diff --git a/src/com/android/settings/slices/SliceBuilderUtils.java b/src/com/android/settings/slices/SliceBuilderUtils.java
index 6674344..cdc8d59 100644
--- a/src/com/android/settings/slices/SliceBuilderUtils.java
+++ b/src/com/android/settings/slices/SliceBuilderUtils.java
@@ -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.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 @@
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 @@
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 @@
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 @@
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)
diff --git a/tests/robotests/src/com/android/settings/testutils/SliceTester.java b/tests/robotests/src/com/android/settings/testutils/SliceTester.java
index 905277e..8672164 100644
--- a/tests/robotests/src/com/android/settings/testutils/SliceTester.java
+++ b/tests/robotests/src/com/android/settings/testutils/SliceTester.java
@@ -115,8 +115,9 @@
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 @@
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);
- hasTitle = true;
+ if (titleItems == null) {
+ continue;
+ }
+
+ hasTitle = true;
+ for (SliceItem subTitleItem : titleItems) {
+ assertThat(subTitleItem.getText()).isEqualTo(title);
}
}
assertThat(hasTitle).isTrue();