Merge "Update Slice APIs to current versions" into pi-dev
am: ff2653a0d8
Change-Id: Id757ea69e9dd2f29ad2f651f0473eeb03d2cca9d
This commit is contained in:
@@ -59,10 +59,11 @@ public class SliceBroadcastReceiver extends BroadcastReceiver {
|
|||||||
|
|
||||||
switch (action) {
|
switch (action) {
|
||||||
case ACTION_TOGGLE_CHANGED:
|
case ACTION_TOGGLE_CHANGED:
|
||||||
handleToggleAction(context, key, isPlatformSlice);
|
final boolean isChecked = intent.getBooleanExtra(Slice.EXTRA_TOGGLE_STATE, false);
|
||||||
|
handleToggleAction(context, key, isChecked, isPlatformSlice);
|
||||||
break;
|
break;
|
||||||
case ACTION_SLIDER_CHANGED:
|
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);
|
handleSliderAction(context, key, newPosition, isPlatformSlice);
|
||||||
break;
|
break;
|
||||||
case ACTION_WIFI_CHANGED:
|
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)) {
|
if (TextUtils.isEmpty(key)) {
|
||||||
throw new IllegalStateException("No key passed to Intent for toggle controller");
|
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
|
// TODO post context.getContentResolver().notifyChanged(uri, null) in the Toggle controller
|
||||||
// so that it's automatically broadcast to any slice.
|
// so that it's automatically broadcast to any slice.
|
||||||
final TogglePreferenceController toggleController = (TogglePreferenceController) controller;
|
final TogglePreferenceController toggleController = (TogglePreferenceController) controller;
|
||||||
final boolean currentValue = toggleController.isChecked();
|
toggleController.setChecked(isChecked);
|
||||||
final boolean newValue = !currentValue;
|
logSliceValueChange(context, key, isChecked ? 1 : 0);
|
||||||
toggleController.setChecked(newValue);
|
|
||||||
logSliceValueChange(context, key, newValue ? 1 : 0);
|
|
||||||
updateUri(context, key, isPlatformSlice);
|
updateUri(context, key, isPlatformSlice);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -16,8 +16,6 @@
|
|||||||
|
|
||||||
package com.android.settings.slices;
|
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.AVAILABLE;
|
||||||
import static com.android.settings.core.BasePreferenceController.DISABLED_DEPENDENT_SETTING;
|
import static com.android.settings.core.BasePreferenceController.DISABLED_DEPENDENT_SETTING;
|
||||||
import static com.android.settings.core.BasePreferenceController.DISABLED_FOR_USER;
|
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.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
import android.graphics.drawable.Icon;
|
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.provider.SettingsSlicesContract;
|
import android.provider.SettingsSlicesContract;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
@@ -63,6 +60,9 @@ public class SliceBuilderUtils {
|
|||||||
|
|
||||||
private static final String TAG = "SliceBuilder";
|
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}.
|
* Build a Slice from {@link SliceData}.
|
||||||
*
|
*
|
||||||
@@ -225,19 +225,19 @@ public class SliceBuilderUtils {
|
|||||||
private static Slice buildToggleSlice(Context context, SliceData sliceData,
|
private static Slice buildToggleSlice(Context context, SliceData sliceData,
|
||||||
BasePreferenceController controller) {
|
BasePreferenceController controller) {
|
||||||
final PendingIntent contentIntent = getContentPendingIntent(context, sliceData);
|
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 CharSequence subtitleText = getSubtitleText(context, controller, sliceData);
|
||||||
final TogglePreferenceController toggleController =
|
final TogglePreferenceController toggleController =
|
||||||
(TogglePreferenceController) controller;
|
(TogglePreferenceController) controller;
|
||||||
final SliceAction sliceAction = getToggleAction(context, sliceData,
|
final SliceAction sliceAction = getToggleAction(context, sliceData,
|
||||||
toggleController.isChecked());
|
toggleController.isChecked());
|
||||||
|
|
||||||
return new ListBuilder(context, sliceData.getUri())
|
return new ListBuilder(context, sliceData.getUri(), SLICE_TTL_MILLIS)
|
||||||
.addRow(rowBuilder -> rowBuilder
|
.addRow(rowBuilder -> rowBuilder
|
||||||
.setTitle(sliceData.getTitle())
|
.setTitle(sliceData.getTitle())
|
||||||
.setTitleItem(icon, ICON_IMAGE)
|
|
||||||
.setSubtitle(subtitleText)
|
.setSubtitle(subtitleText)
|
||||||
.setPrimaryAction(new SliceAction(contentIntent, (IconCompat) null, null))
|
.setPrimaryAction(
|
||||||
|
new SliceAction(contentIntent, icon, sliceData.getTitle()))
|
||||||
.addEndItem(sliceAction))
|
.addEndItem(sliceAction))
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
@@ -245,29 +245,34 @@ public class SliceBuilderUtils {
|
|||||||
private static Slice buildIntentSlice(Context context, SliceData sliceData,
|
private static Slice buildIntentSlice(Context context, SliceData sliceData,
|
||||||
BasePreferenceController controller) {
|
BasePreferenceController controller) {
|
||||||
final PendingIntent contentIntent = getContentPendingIntent(context, sliceData);
|
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 CharSequence subtitleText = getSubtitleText(context, controller, sliceData);
|
||||||
|
|
||||||
return new ListBuilder(context, sliceData.getUri())
|
return new ListBuilder(context, sliceData.getUri(), SLICE_TTL_MILLIS)
|
||||||
.addRow(rowBuilder -> rowBuilder
|
.addRow(rowBuilder -> rowBuilder
|
||||||
.setTitle(sliceData.getTitle())
|
.setTitle(sliceData.getTitle())
|
||||||
.setTitleItem(icon, ICON_IMAGE)
|
|
||||||
.setSubtitle(subtitleText)
|
.setSubtitle(subtitleText)
|
||||||
.setPrimaryAction(new SliceAction(contentIntent, (IconCompat) null, null)))
|
.setPrimaryAction(
|
||||||
|
new SliceAction(contentIntent, icon, sliceData.getTitle())))
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Slice buildSliderSlice(Context context, SliceData sliceData,
|
private static Slice buildSliderSlice(Context context, SliceData sliceData,
|
||||||
BasePreferenceController controller) {
|
BasePreferenceController controller) {
|
||||||
final SliderPreferenceController sliderController =
|
final SliderPreferenceController sliderController = (SliderPreferenceController) controller;
|
||||||
(SliderPreferenceController) controller;
|
|
||||||
final PendingIntent actionIntent = getSliderAction(context, sliceData);
|
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
|
.addInputRange(builder -> builder
|
||||||
.setTitle(sliceData.getTitle())
|
.setTitle(sliceData.getTitle())
|
||||||
.setMax(sliderController.getMaxSteps())
|
.setMax(sliderController.getMaxSteps())
|
||||||
.setValue(sliderController.getSliderPosition())
|
.setValue(sliderController.getSliderPosition())
|
||||||
.setAction(actionIntent))
|
.setInputAction(actionIntent)
|
||||||
|
.setPrimaryAction(primaryAction))
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -311,32 +316,30 @@ public class SliceBuilderUtils {
|
|||||||
final String title = data.getTitle();
|
final String title = data.getTitle();
|
||||||
final String summary;
|
final String summary;
|
||||||
final SliceAction primaryAction;
|
final SliceAction primaryAction;
|
||||||
|
final IconCompat icon = IconCompat.createWithResource(context, data.getIconResource());
|
||||||
|
|
||||||
switch (controller.getAvailabilityStatus()) {
|
switch (controller.getAvailabilityStatus()) {
|
||||||
case DISABLED_UNSUPPORTED:
|
case DISABLED_UNSUPPORTED:
|
||||||
summary = context.getString(R.string.unsupported_setting_summary);
|
summary = context.getString(R.string.unsupported_setting_summary);
|
||||||
primaryAction = new SliceAction(getSettingsIntent(context),
|
primaryAction = new SliceAction(getSettingsIntent(context), icon, title);
|
||||||
(IconCompat) null /* actionIcon */,
|
|
||||||
null /* actionTitle */);
|
|
||||||
break;
|
break;
|
||||||
case DISABLED_FOR_USER:
|
case DISABLED_FOR_USER:
|
||||||
summary = context.getString(R.string.disabled_for_user_setting_summary);
|
summary = context.getString(R.string.disabled_for_user_setting_summary);
|
||||||
primaryAction = new SliceAction(getContentPendingIntent(context, data),
|
primaryAction = new SliceAction(getContentPendingIntent(context, data), icon,
|
||||||
(IconCompat) null /* actionIcon */, null /* actionTitle */);
|
title);
|
||||||
break;
|
break;
|
||||||
case DISABLED_DEPENDENT_SETTING:
|
case DISABLED_DEPENDENT_SETTING:
|
||||||
summary = context.getString(R.string.disabled_dependent_setting_summary);
|
summary = context.getString(R.string.disabled_dependent_setting_summary);
|
||||||
primaryAction = new SliceAction(getContentPendingIntent(context, data),
|
primaryAction = new SliceAction(getContentPendingIntent(context, data), icon,
|
||||||
(IconCompat) null /* actionIcon */, null /* actionTitle */);
|
title);
|
||||||
break;
|
break;
|
||||||
case UNAVAILABLE_UNKNOWN:
|
case UNAVAILABLE_UNKNOWN:
|
||||||
default:
|
default:
|
||||||
summary = context.getString(R.string.unknown_unavailability_setting_summary);
|
summary = context.getString(R.string.unknown_unavailability_setting_summary);
|
||||||
primaryAction = new SliceAction(getSettingsIntent(context),
|
primaryAction = new SliceAction(getSettingsIntent(context), icon, title);
|
||||||
(IconCompat) null /* actionIcon */, null /* actionTitle */);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return new ListBuilder(context, data.getUri())
|
return new ListBuilder(context, data.getUri(), SLICE_TTL_MILLIS)
|
||||||
.addRow(builder -> builder
|
.addRow(builder -> builder
|
||||||
.setTitle(title)
|
.setTitle(title)
|
||||||
.setSubtitle(summary)
|
.setSubtitle(summary)
|
||||||
|
@@ -115,8 +115,9 @@ public class SliceTester {
|
|||||||
sliceData.getIconResource());
|
sliceData.getIconResource());
|
||||||
|
|
||||||
// Check primary intent
|
// Check primary intent
|
||||||
final SliceAction primaryAction = metadata.getPrimaryAction();
|
final PendingIntent primaryPendingIntent = metadata.getPrimaryAction().getAction();
|
||||||
assertThat(primaryAction).isNull();
|
assertThat(primaryPendingIntent).isEqualTo(
|
||||||
|
SliceBuilderUtils.getContentPendingIntent(context, sliceData));
|
||||||
|
|
||||||
final List<SliceItem> sliceItems = slice.getItems();
|
final List<SliceItem> sliceItems = slice.getItems();
|
||||||
assertTitle(sliceItems, sliceData.getTitle());
|
assertTitle(sliceItems, sliceData.getTitle());
|
||||||
@@ -158,11 +159,15 @@ public class SliceTester {
|
|||||||
private static void assertTitle(List<SliceItem> sliceItems, String title) {
|
private static void assertTitle(List<SliceItem> sliceItems, String title) {
|
||||||
boolean hasTitle = false;
|
boolean hasTitle = false;
|
||||||
for (SliceItem item : sliceItems) {
|
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 */);
|
null /* non-hints */);
|
||||||
if (titles != null & titles.size() == 1) {
|
if (titleItems == null) {
|
||||||
assertThat(titles.get(0).getText()).isEqualTo(title);
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
hasTitle = true;
|
hasTitle = true;
|
||||||
|
for (SliceItem subTitleItem : titleItems) {
|
||||||
|
assertThat(subTitleItem.getText()).isEqualTo(title);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
assertThat(hasTitle).isTrue();
|
assertThat(hasTitle).isTrue();
|
||||||
|
Reference in New Issue
Block a user