Add slice uri to slice index db

And slightly refactored the SliceDataConverter to remove 1 reflection.

Bug: 126222433
Test: robotest
Change-Id: Ic5782bdd71f5c9cb77879a35de81dc61c01d1912
This commit is contained in:
Fan Zhang
2019-05-29 13:19:15 -07:00
parent 88e3adce68
commit f36ca50ec7
8 changed files with 86 additions and 130 deletions

View File

@@ -27,14 +27,17 @@ import static com.android.settings.core.PreferenceXmlParserUtils.METADATA_UNAVAI
import android.accessibilityservice.AccessibilityServiceInfo;
import android.app.settings.SettingsEnums;
import android.content.ComponentName;
import android.content.ContentResolver;
import android.content.Context;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.content.pm.ServiceInfo;
import android.content.res.Resources;
import android.content.res.XmlResourceParser;
import android.net.Uri;
import android.os.Bundle;
import android.provider.SearchIndexableResource;
import android.provider.SettingsSlicesContract;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.util.Log;
@@ -199,17 +202,24 @@ class SliceDataConverter {
}
final String key = bundle.getString(METADATA_KEY);
final BasePreferenceController controller = SliceBuilderUtils
.getPreferenceController(mContext, controllerClassName, key);
// Only add pre-approved Slices available on the device.
if (!controller.isSliceable() || !controller.isAvailable()) {
continue;
}
final String title = bundle.getString(METADATA_TITLE);
final String summary = bundle.getString(METADATA_SUMMARY);
final int iconResId = bundle.getInt(METADATA_ICON);
final int sliceType = SliceBuilderUtils.getSliceType(mContext, controllerClassName,
key);
final int sliceType = controller.getSliceType();
final boolean isPlatformSlice = bundle.getBoolean(METADATA_PLATFORM_SLICE_FLAG);
final String unavailableSliceSubtitle = bundle.getString(
METADATA_UNAVAILABLE_SLICE_SUBTITLE);
final SliceData xmlSlice = new SliceData.Builder()
.setKey(key)
.setUri(controller.getSliceUri())
.setTitle(title)
.setSummary(summary)
.setIcon(iconResId)
@@ -221,13 +231,7 @@ class SliceDataConverter {
.setUnavailableSliceSubtitle(unavailableSliceSubtitle)
.build();
final BasePreferenceController controller =
SliceBuilderUtils.getPreferenceController(mContext, xmlSlice);
// Only add pre-approved Slices available on the device.
if (controller.isSliceable() && controller.isAvailable()) {
xmlSliceData.add(xmlSlice);
}
xmlSliceData.add(xmlSlice);
}
} catch (SliceData.InvalidSliceDataException e) {
Log.w(TAG, "Invalid data when building SliceData for " + fragmentName, e);
@@ -294,6 +298,12 @@ class SliceDataConverter {
sliceDataBuilder.setKey(flattenedName)
.setTitle(title)
.setUri(new Uri.Builder()
.scheme(ContentResolver.SCHEME_CONTENT)
.authority(SettingsSliceProvider.SLICE_AUTHORITY)
.appendPath(SettingsSlicesContract.PATH_SETTING_ACTION)
.appendPath(flattenedName)
.build())
.setIcon(iconResource)
.setSliceType(SliceData.SliceType.SWITCH);
try {