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();