Add isSliceable API to BasePrefController
Only support explicitly approved Settings Slices, dictated by controllers which return true for the new method isSliceable. Updating the supported settings to a whitelist means that the method to return all available slices must be updated, and checking slicability when we index slices. Test: robotests Change-Id: I85848c2cdf3e151fa94b33dd1dc5c0374ef94b5b Merged-In: Ib2b9690cdd0036b5cc4a1cb846c52bce7c824ab9 Fixes: 79779103
This commit is contained in:
committed by
Andrew Sapperstein
parent
a419c4717d
commit
1dd25fd87c
@@ -23,11 +23,13 @@ import android.content.ContentResolver;
|
||||
import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.net.Uri;
|
||||
import android.provider.Settings;
|
||||
import android.provider.SettingsSlicesContract;
|
||||
import android.support.annotation.VisibleForTesting;
|
||||
import android.support.v4.graphics.drawable.IconCompat;
|
||||
import android.text.TextUtils;
|
||||
import android.util.ArraySet;
|
||||
import android.util.KeyValueListParser;
|
||||
import android.util.Log;
|
||||
import android.util.Pair;
|
||||
|
||||
@@ -44,6 +46,7 @@ import java.net.URISyntaxException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
@@ -115,10 +118,13 @@ public class SettingsSliceProvider extends SliceProvider {
|
||||
@VisibleForTesting
|
||||
Map<Uri, SliceData> mSliceDataCache;
|
||||
|
||||
private final KeyValueListParser mParser;
|
||||
|
||||
final Set<Uri> mRegisteredUris = new ArraySet<>();
|
||||
|
||||
public SettingsSliceProvider() {
|
||||
super(READ_SEARCH_INDEXABLES);
|
||||
mParser = new KeyValueListParser(',');
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -351,4 +357,32 @@ public class SettingsSliceProvider extends SliceProvider {
|
||||
SliceBroadcastRelay.registerReceiver(getContext(), sliceUri, SliceBroadcastReceiver.class,
|
||||
intentFilter);
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
Set<String> getBlockedKeys() {
|
||||
final String value = Settings.Global.getString(getContext().getContentResolver(),
|
||||
Settings.Global.BLOCKED_SLICES);
|
||||
final Set<String> set = new ArraySet<>();
|
||||
|
||||
try {
|
||||
mParser.setString(value);
|
||||
} catch (IllegalArgumentException e) {
|
||||
Log.e(TAG, "Bad Settings Slices Whitelist flags", e);
|
||||
return set;
|
||||
}
|
||||
|
||||
final String[] parsedValues = parseStringArray(value);
|
||||
Collections.addAll(set, parsedValues);
|
||||
return set;
|
||||
}
|
||||
|
||||
private String[] parseStringArray(String value) {
|
||||
if (value != null) {
|
||||
String[] parts = value.split(":");
|
||||
if (parts.length > 0) {
|
||||
return parts;
|
||||
}
|
||||
}
|
||||
return new String[0];
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user