From 4242ed2171285d48bc9f51858cda7939bfe8471e Mon Sep 17 00:00:00 2001 From: Matthew Fritze Date: Wed, 23 May 2018 12:25:23 -0700 Subject: [PATCH] Hook up blocked keys Block any slice in onBind that is the in the blacklist Change-Id: I9687d07cbfef5fcb94842046bc5dc3296eed4252 Fixes: 80195653 Test: robotests --- .../slices/SettingsSliceProvider.java | 7 ++++++ .../slices/SettingsSliceProviderTest.java | 22 +++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/src/com/android/settings/slices/SettingsSliceProvider.java b/src/com/android/settings/slices/SettingsSliceProvider.java index 3ed6185563c..43503886670 100644 --- a/src/com/android/settings/slices/SettingsSliceProvider.java +++ b/src/com/android/settings/slices/SettingsSliceProvider.java @@ -175,6 +175,13 @@ public class SettingsSliceProvider extends SliceProvider { @Override public Slice onBindSlice(Uri sliceUri) { + final Set blockedKeys = getBlockedKeys(); + final String key = sliceUri.getLastPathSegment(); + if (blockedKeys.contains(key)) { + Log.e(TAG, "Requested blocked slice with Uri: " + sliceUri); + return null; + } + // If adding a new Slice, do not directly match Slice URIs. // Use {@link SlicesDatabaseAccessor}. if (WifiCallingSliceHelper.WIFI_CALLING_URI.equals(sliceUri)) { diff --git a/tests/robotests/src/com/android/settings/slices/SettingsSliceProviderTest.java b/tests/robotests/src/com/android/settings/slices/SettingsSliceProviderTest.java index 722f481d10f..c1d87ed50e5 100644 --- a/tests/robotests/src/com/android/settings/slices/SettingsSliceProviderTest.java +++ b/tests/robotests/src/com/android/settings/slices/SettingsSliceProviderTest.java @@ -22,18 +22,21 @@ import static android.content.ContentResolver.SCHEME_CONTENT; import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.app.slice.SliceManager; +import android.content.ContentResolver; import android.content.ContentValues; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.net.Uri; import android.os.StrictMode; import android.provider.SettingsSlicesContract; +import android.util.ArraySet; import com.android.settings.wifi.WifiSliceBuilder; import com.android.settings.bluetooth.BluetoothSliceBuilder; @@ -54,6 +57,7 @@ import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.List; +import java.util.Set; import androidx.slice.Slice; @@ -189,6 +193,24 @@ public class SettingsSliceProviderTest { assertThat(newThreadPolicy.toString()).isEqualTo(oldThreadPolicy.toString()); } + @Test + public void onBindSlice_requestsBlockedSlice_retunsNull() { + final String blockedKey = "blocked_key"; + final Set blockedSet = new ArraySet<>(); + blockedSet.add(blockedKey); + doReturn(blockedSet).when(mProvider).getBlockedKeys(); + final Uri blockedUri = new Uri.Builder() + .scheme(ContentResolver.SCHEME_CONTENT) + .authority(SettingsSliceProvider.SLICE_AUTHORITY) + .appendPath(SettingsSlicesContract.PATH_SETTING_ACTION) + .appendPath(blockedKey) + .build(); + + final Slice slice = mProvider.onBindSlice(blockedUri); + + assertThat(slice).isNull(); + } + @Test public void testLoadSlice_cachedEntryRemovedOnUnpin() { SliceData data = getDummyData();