Unavailable Slices includes DISABLED_DEPENDENT settings
In the change to mark disabled_dependent as available, it did not change the check in SliceBuilderUtils for the unavailable Slices. In the case of DISABLED_DEPENDENT, the setting is available but the Slice is not. Though it is a simple change, we can now properly test the contents of Slices, so this change includes tests which should have been in place earlier and would have caught this bug - duh. Bug: 71640747 Test: Robotests Change-Id: I8db5bc80edb337cbf907ce3669aa2bfd9c72f74a
This commit is contained in:
@@ -17,6 +17,8 @@
|
||||
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;
|
||||
import static com.android.settings.core.BasePreferenceController.DISABLED_UNSUPPORTED;
|
||||
@@ -47,7 +49,9 @@ import com.android.settings.search.DatabaseIndexingUtils;
|
||||
import com.android.settingslib.core.AbstractPreferenceController;
|
||||
|
||||
import android.support.v4.graphics.drawable.IconCompat;
|
||||
|
||||
import androidx.slice.Slice;
|
||||
import androidx.slice.SliceMetadata;
|
||||
import androidx.slice.builders.ListBuilder;
|
||||
import androidx.slice.builders.SliceAction;
|
||||
|
||||
@@ -75,7 +79,8 @@ public class SliceBuilderUtils {
|
||||
// action name).
|
||||
FeatureFactory.getFactory(context).getMetricsFeatureProvider()
|
||||
.action(context, MetricsEvent.ACTION_SETTINGS_SLICE_REQUESTED, sliceNamePair);
|
||||
if (!controller.isAvailable()) {
|
||||
|
||||
if (controller.getAvailabilityStatus() != AVAILABLE) {
|
||||
return buildUnavailableSlice(context, sliceData, controller);
|
||||
}
|
||||
|
||||
@@ -145,6 +150,60 @@ public class SliceBuilderUtils {
|
||||
sliceData.getKey());
|
||||
}
|
||||
|
||||
/**
|
||||
* @return {@link PendingIntent} for a non-primary {@link SliceAction}.
|
||||
*/
|
||||
public static PendingIntent getActionIntent(Context context, String action, SliceData data) {
|
||||
Intent intent = new Intent(action);
|
||||
intent.setClass(context, SliceBroadcastReceiver.class);
|
||||
intent.putExtra(EXTRA_SLICE_KEY, data.getKey());
|
||||
intent.putExtra(EXTRA_SLICE_PLATFORM_DEFINED, data.isPlatformDefined());
|
||||
return PendingIntent.getBroadcast(context, 0 /* requestCode */, intent,
|
||||
PendingIntent.FLAG_CANCEL_CURRENT);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return {@link PendingIntent} for the primary {@link SliceAction}.
|
||||
*/
|
||||
public static PendingIntent getContentIntent(Context context, SliceData sliceData) {
|
||||
Intent intent = DatabaseIndexingUtils.buildSearchResultPageIntent(context,
|
||||
sliceData.getFragmentClassName(), sliceData.getKey(), sliceData.getScreenTitle(),
|
||||
0 /* TODO */);
|
||||
intent.setClassName("com.android.settings", SubSettings.class.getName());
|
||||
return PendingIntent.getActivity(context, 0 /* requestCode */, intent, 0 /* flags */);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return {@link PendingIntent} to the Settings home page.
|
||||
*/
|
||||
public static PendingIntent getSettingsIntent(Context context) {
|
||||
final PackageManager manager = context.getPackageManager();
|
||||
final Intent intent = manager.getLaunchIntentForPackage(context.getPackageName());
|
||||
return PendingIntent.getActivity(context, 0 /* requestCode */, intent, 0 /* flags */);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the summary text for a {@link Slice} built for {@param sliceData}.
|
||||
*/
|
||||
public static CharSequence getSubtitleText(Context context,
|
||||
AbstractPreferenceController controller, SliceData sliceData) {
|
||||
CharSequence summaryText;
|
||||
if (controller != null) {
|
||||
summaryText = controller.getSummary();
|
||||
|
||||
if (isValidSummary(context, summaryText)) {
|
||||
return summaryText;
|
||||
}
|
||||
}
|
||||
|
||||
summaryText = sliceData.getSummary();
|
||||
if (isValidSummary(context, summaryText)) {
|
||||
return summaryText;
|
||||
}
|
||||
|
||||
return "";
|
||||
}
|
||||
|
||||
public static Uri getUri(String path, boolean isPlatformSlice) {
|
||||
final String authority = isPlatformSlice
|
||||
? SettingsSlicesContract.AUTHORITY
|
||||
@@ -227,49 +286,6 @@ public class SliceBuilderUtils {
|
||||
return getActionIntent(context, SettingsSliceProvider.ACTION_SLIDER_CHANGED, sliceData);
|
||||
}
|
||||
|
||||
private static PendingIntent getActionIntent(Context context, String action, SliceData data) {
|
||||
Intent intent = new Intent(action);
|
||||
intent.setClass(context, SliceBroadcastReceiver.class);
|
||||
intent.putExtra(EXTRA_SLICE_KEY, data.getKey());
|
||||
intent.putExtra(EXTRA_SLICE_PLATFORM_DEFINED, data.isPlatformDefined());
|
||||
return PendingIntent.getBroadcast(context, 0 /* requestCode */, intent,
|
||||
PendingIntent.FLAG_CANCEL_CURRENT);
|
||||
}
|
||||
|
||||
private static PendingIntent getContentIntent(Context context, SliceData sliceData) {
|
||||
Intent intent = DatabaseIndexingUtils.buildSearchResultPageIntent(context,
|
||||
sliceData.getFragmentClassName(), sliceData.getKey(), sliceData.getScreenTitle(),
|
||||
0 /* TODO */);
|
||||
intent.setClassName("com.android.settings", SubSettings.class.getName());
|
||||
return PendingIntent.getActivity(context, 0 /* requestCode */, intent, 0 /* flags */);
|
||||
}
|
||||
|
||||
private static PendingIntent getSettingsIntent(Context context) {
|
||||
final PackageManager manager = context.getPackageManager();
|
||||
final Intent intent = manager.getLaunchIntentForPackage(context.getPackageName());
|
||||
return PendingIntent.getActivity(context, 0 /* requestCode */, intent, 0 /* flags */);
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
static CharSequence getSubtitleText(Context context, AbstractPreferenceController controller,
|
||||
SliceData sliceData) {
|
||||
CharSequence summaryText;
|
||||
if (controller != null) {
|
||||
summaryText = controller.getSummary();
|
||||
|
||||
if (isValidSummary(context, summaryText)) {
|
||||
return summaryText;
|
||||
}
|
||||
}
|
||||
|
||||
summaryText = sliceData.getSummary();
|
||||
if (isValidSummary(context, summaryText)) {
|
||||
return summaryText;
|
||||
}
|
||||
|
||||
return "";
|
||||
}
|
||||
|
||||
private static boolean isValidSummary(Context context, CharSequence summary) {
|
||||
if (summary == null || TextUtils.isEmpty(summary.toString().trim())) {
|
||||
return false;
|
||||
|
Reference in New Issue
Block a user